{"id":2910,"date":"2026-06-17T01:41:17","date_gmt":"2026-06-17T01:41:17","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=2910"},"modified":"2026-10-21T09:14:17","modified_gmt":"2026-10-21T09:14:17","slug":"zaunrechner","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/de\/zaunrechner\/","title":{"rendered":"Zaunmaterial Rechner"},"content":{"rendered":"\n<style>#fence-calc-wrapper *, #fence-calc-wrapper *::before, #fence-calc-wrapper *::after { box-sizing: border-box; }\n#fence-calc-wrapper { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, sans-serif; max-width: 760px; margin: 20px auto; padding: 0; line-height: 1.5; --fcc-teal: #1ecad3; --fcc-teal-dark: #17a8b0; --fcc-teal-light: #e8fafa; --fcc-border: #e2e8f0; --fcc-text: #2d3748; --fcc-text-light: #5a6c7d; }\n#fence-calc-wrapper .fcc-intro { max-width: 680px; margin: 0 auto 16px; padding: 0 24px; text-align: center; color: var(--fcc-text-light); font-size: 15px; line-height: 1.5; }\n#fence-calc-wrapper .fcc-card { background: #fff; border-radius: 16px; box-shadow: 0 4px 24px rgba(0,0,0,0.07); padding: 28px 24px; margin-bottom: 20px; border: 1px solid var(--fcc-border); }\n#fence-calc-wrapper .fcc-subtitle { font-size: 0.9rem; color: var(--fcc-text-light); margin: 0 0 20px 0; }\n#fence-calc-wrapper .fcc-label { display: block; font-weight: 600; font-size: 0.9rem; color: var(--fcc-text); margin-bottom: 5px; }\n#fence-calc-wrapper .fcc-input-row { display: flex; gap: 10px; align-items: stretch; margin-bottom: 18px; }\n#fence-calc-wrapper .fcc-input-field { flex: 1; padding: 12px 14px; border: 2px solid var(--fcc-border); border-radius: 6px; font-size: 1rem; color: #2c3e50; background: #f9fafb; outline: none; width: 100%; }\n#fence-calc-wrapper .fcc-input-field:focus { border-color: #9486f7; background: #fff; color: #2c3e50; }\n#fence-calc-wrapper .fcc-unit-toggle { display: flex; background: #f1f5f9; border-radius: 6px; overflow: hidden; border: 2px solid var(--fcc-border); flex-wrap: wrap; }\n#fence-calc-wrapper .fcc-unit-btn { padding: 8px 14px; font-size: 0.85rem; font-weight: 600; cursor: pointer; border: none; background: transparent; color: var(--fcc-text-light); }\n#fence-calc-wrapper .fcc-unit-btn:focus, #fence-calc-wrapper .fcc-unit-btn:active { outline: 2px solid #9486f7; outline-offset: -2px; color: var(--fcc-text-light); }\n#fence-calc-wrapper .fcc-unit-btn.fcc-active { background: linear-gradient(135deg, #1ecad3, #9486f7); color: #fff; }\n#fence-calc-wrapper .fcc-preset-row { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }\n#fence-calc-wrapper .fcc-preset-btn { padding: 6px 13px; font-size: 0.78rem; font-weight: 600; border-radius: 20px; border: 1.5px solid var(--fcc-border); background: #fff; color: var(--fcc-text-light); cursor: pointer; }\n#fence-calc-wrapper .fcc-preset-btn:focus, #fence-calc-wrapper .fcc-preset-btn:active { outline: 2px solid #9486f7; outline-offset: 1px; color: var(--fcc-text-light); }\n#fence-calc-wrapper .fcc-preset-btn.fcc-active { border-color: #9486f7; background: #f5f3ff; color: #2c3e50; }\n#fence-calc-wrapper .fcc-btn-row { display: flex; gap: 12px; max-width: 420px; margin: 26px auto 0; flex-wrap: wrap; }\n#fence-calc-wrapper .fcc-calculate-btn { display: block; flex: 1; min-width: 160px; padding: 14px 30px; background: linear-gradient(135deg, #1ecad3, #9486f7); color: #fff; border: none; border-radius: 999px; font-size: 16px; font-weight: 600; letter-spacing: .5px; cursor: pointer; transition: all .2s; }\n#fence-calc-wrapper .fcc-calculate-btn:hover { background: linear-gradient(135deg, #169fa6, #7b6be0); color: #fff; transform: translateY(-1px); box-shadow: 0 6px 16px rgba(148,134,247,.35); }\n#fence-calc-wrapper .fcc-calculate-btn:focus, #fence-calc-wrapper .fcc-calculate-btn:active { color: #fff; outline: none; box-shadow: 0 0 0 3px rgba(148,134,247,.45); }\n#fence-calc-wrapper .fcc-reset-btn { display: block; flex: 1; min-width: 120px; padding: 14px 20px; background: #fff; color: #5a6c7d; border: 2px solid #d1e8ea; border-radius: 999px; font-size: 16px; font-weight: 600; letter-spacing: .5px; cursor: pointer; transition: all .2s; }\n#fence-calc-wrapper .fcc-reset-btn:hover { background: #f0f7f8; border-color: #1ecad3; color: #0f8c94; }\n#fence-calc-wrapper .fcc-reset-btn:focus, #fence-calc-wrapper .fcc-reset-btn:active { background: #fff; outline: none; border-color: #9486f7; color: #0f8c94; }\n#fence-calc-wrapper .fcc-error-msg { color: #dc2626; font-size: 0.85rem; font-weight: 600; text-align: center; margin-top: 10px; display: none; }\n#fence-calc-wrapper .fcc-error-msg.fcc-visible { display: block; }\n#fence-calc-wrapper .fcc-result-area { display: none; margin-top: 25px; }\n#fence-calc-wrapper .fcc-result-area.fcc-visible { display: block; animation: fccFade 0.4s ease; }\n@keyframes fccFade { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }\n#fence-calc-wrapper .fcc-result-grid { display: flex; gap: 14px; flex-wrap: wrap; }\n#fence-calc-wrapper .fcc-result-card { flex: 1; min-width: 220px; background: linear-gradient(135deg, #f5f3ff 0%, #e8fafa 100%); border: 2px solid #9486f7; border-radius: 10px; padding: 22px 18px; text-align: center; }\n#fence-calc-wrapper .fcc-result-label { font-size: 0.82rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: #5b4ab8; margin: 0 0 8px; }\n#fence-calc-wrapper .fcc-result-amount { font-size: 2.4rem; font-weight: 800; color: #17a8b0; line-height: 1.15; }\n#fence-calc-wrapper .fcc-result-amount .fcc-unit-label { font-size: 1.1rem; }\n#fence-calc-wrapper .fcc-result-sub { margin: 6px 0 0; color: var(--fcc-text-light); font-size: 0.88rem; }\n#fence-calc-wrapper .fcc-acid-line { margin-top: 12px; padding: 8px 12px; background: #fff; border: 1px solid var(--fcc-border); border-radius: 6px; font-size: 0.82rem; color: var(--fcc-text); }\n#fence-calc-wrapper .fcc-warn { display: none; margin-top: 12px; padding: 10px 14px; background: #fff7ed; border: 1px solid #fed7aa; border-radius: 6px; color: #9a3412; font-size: 0.82rem; text-align: left; }\n#fence-calc-wrapper .fcc-warn.fcc-visible { display: block; }\n#fence-calc-wrapper .fcc-toggle-row { display: flex; justify-content: center; align-items: center; gap: 10px; margin-top: 20px; font-size: 0.85rem; color: var(--fcc-text-light); flex-wrap: wrap; }\n#fence-calc-wrapper .fcc-algebra { margin: 14px 0 0; font-size: 0.78rem; color: #8899a6; text-align: center; }\n#fence-calc-wrapper .fcc-next { margin: 14px 0 0; font-size: 0.85rem; color: var(--fcc-text-light); text-align: center; }\n#fence-calc-wrapper .fcc-next a { color: var(--fcc-teal-dark); font-weight: 600; text-decoration: none; }\n#fence-calc-wrapper .fcc-next a:hover { text-decoration: underline; }\n#fence-calc-wrapper .fcc-info-section { display: none; margin-top: 20px; }\n#fence-calc-wrapper .fcc-info-section.fcc-visible { display: block; }\n#fence-calc-wrapper .fcc-info-card { background: #fff; border: 1px solid var(--fcc-border); border-radius: 10px; padding: 20px; font-size: 0.9rem; }\n#fence-calc-wrapper .fcc-info-title { font-weight: 700; font-size: 1rem; margin-bottom: 10px; }\n#fence-calc-wrapper ol.fcc-howto-list { margin: 0; padding: 0 0 0 20px; }\n#fence-calc-wrapper ol.fcc-howto-list li { margin-bottom: 6px; }\n@media (max-width: 600px) { #fence-calc-wrapper .fcc-btn-row { flex-direction: column; max-width: 280px; } #fence-calc-wrapper .fcc-reset-btn { padding: 12px 20px; font-size: 14px; } }\n@media (max-width: 500px) { #fence-calc-wrapper .fcc-input-row { flex-direction: column; } }\n\n#fence-calc-wrapper .fcc-hide { display: none !important; }\n#fence-calc-wrapper .fcc-field { margin-bottom: 18px; }\n#fence-calc-wrapper .fcc-two-col { display: flex; gap: 14px; }\n#fence-calc-wrapper .fcc-two-col > .fcc-field { flex: 1; min-width: 0; }\n#fence-calc-wrapper .fcc-hint { font-size: 0.78rem; color: #8899a6; margin: 4px 0 0; }\n#fence-calc-wrapper .fcc-group { border: 1px solid var(--fcc-border); border-radius: 12px; padding: 18px 16px 4px; margin: 0 0 18px; background: #fcfdfe; }\n#fence-calc-wrapper .fcc-group-title { font-size: 0.78rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: #5b4ab8; margin: 0 0 14px; }\n#fence-calc-wrapper .fcc-input-field, #fence-calc-wrapper select.fcc-input-field { height: auto; margin: 0; }\n#fence-calc-wrapper .fcc-run { margin-bottom: 12px; }\n#fence-calc-wrapper .fcc-run-ctl { display: flex; gap: 10px; align-items: stretch; }\n#fence-calc-wrapper .fcc-run-del { padding: 8px 14px; font-size: 0.8rem; font-weight: 600; border-radius: 6px; border: 2px solid var(--fcc-border); background: #fff; color: var(--fcc-text-light); cursor: pointer; }\n#fence-calc-wrapper .fcc-run-del:hover { border-color: #dc2626; color: #dc2626; }\n#fence-calc-wrapper .fcc-run-del:focus, #fence-calc-wrapper .fcc-run-del:active { outline: 2px solid #9486f7; outline-offset: 1px; color: var(--fcc-text-light); background: #fff; }\n#fence-calc-wrapper .fcc-link-btn { background: none; border: none; padding: 4px 0; margin: 0 0 12px; color: #17a8b0; font-size: 0.88rem; font-weight: 700; cursor: pointer; }\n#fence-calc-wrapper .fcc-link-btn:hover { text-decoration: underline; color: #0f8c94; }\n#fence-calc-wrapper .fcc-link-btn:focus, #fence-calc-wrapper .fcc-link-btn:active { outline: 2px solid #9486f7; outline-offset: 2px; background: none; color: #17a8b0; }\n#fence-calc-wrapper .fcc-check { display: flex; align-items: center; gap: 8px; font-size: 0.88rem; color: var(--fcc-text); margin: 0 0 18px; cursor: pointer; }\n#fence-calc-wrapper .fcc-check input { width: 18px; height: 18px; accent-color: #9486f7; flex-shrink: 0; margin: 0; }\n#fence-calc-wrapper .fcc-unit-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 18px; }\n#fence-calc-wrapper .fcc-unit-row .fcc-label { margin: 0; }\n#fence-calc-wrapper details.fcc-prices { border: 1px solid var(--fcc-border); border-radius: 8px; padding: 10px 14px; margin: 0 0 18px; background: #fff; }\n#fence-calc-wrapper details.fcc-prices summary { cursor: pointer; font-weight: 600; font-size: 0.9rem; color: var(--fcc-text); }\n#fence-calc-wrapper .fcc-price-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 14px; margin-top: 14px; }\n#fence-calc-wrapper .fcc-price-label { display: block; font-size: 0.78rem; font-weight: 600; color: var(--fcc-text-light); margin-bottom: 3px; }\n#fence-calc-wrapper .fcc-price-row .fcc-input-field { padding: 8px 10px; font-size: 0.9rem; }\n#fence-calc-wrapper .fcc-postline { margin: 16px 0 12px; font-size: 0.9rem; color: var(--fcc-text); text-align: center; font-weight: 600; }\n#fence-calc-wrapper .fcc-list { overflow-x: auto; -webkit-overflow-scrolling: touch; border: 1px solid var(--fcc-border); border-radius: 12px; }\n#fence-calc-wrapper .fcc-table { width: 100%; border-collapse: collapse; font-size: 0.85rem; min-width: 520px; }\n#fence-calc-wrapper .fcc-table thead th { background: linear-gradient(135deg, #1ecad3, #9486f7); color: #fff; font-weight: 600; font-size: 0.74rem; text-transform: uppercase; letter-spacing: 0.05em; padding: 10px; text-align: left; white-space: nowrap; }\n#fence-calc-wrapper .fcc-table tbody td { padding: 10px; border-bottom: 1px solid #eef1f5; vertical-align: top; color: var(--fcc-text); }\n#fence-calc-wrapper .fcc-table tbody tr:nth-child(even) { background: #fafcfd; }\n#fence-calc-wrapper .fcc-qty { font-weight: 800; color: #0f8c94; white-space: nowrap; }\n#fence-calc-wrapper .fcc-spec { color: var(--fcc-text-light); font-size: 0.8rem; }\n#fence-calc-wrapper .fcc-price { white-space: nowrap; text-align: right; }\n#fence-calc-wrapper tr.fcc-total-row td { font-weight: 700; text-align: right; background: #f5f3ff; }\n#fence-calc-wrapper .fcc-warn span { display: block; margin-top: 6px; }\n#fence-calc-wrapper .fcc-warn span:first-child { margin-top: 0; }\n#fence-calc-wrapper .fcc-jump { margin: 14px 0 0; font-size: 0.85rem; text-align: center; color: var(--fcc-text-light); }\n#fence-calc-wrapper .fcc-jump a { color: var(--fcc-teal-dark); font-weight: 600; text-decoration: none; }\n@media (max-width: 500px) { #fence-calc-wrapper .fcc-two-col { flex-direction: column; gap: 0; } #fence-calc-wrapper .fcc-price-grid { grid-template-columns: 1fr; } #fence-calc-wrapper .fcc-run-ctl { flex-direction: row; } }\n<\/style>\n<div id=\"fence-calc-wrapper\">\n    <p class=\"fcc-intro\">Dieser Zaunrechner ermittelt Pfosten, Riegel, Latten oder Zaunelemente, Beton und Kosten f\u00fcr einen Zaun aus Holz, Kunststoff, Metall (Doppelstabmatten) oder Maschendraht. Geben Sie jede Zaunseite einzeln ein, erg\u00e4nzen Sie Tore und erhalten Sie eine vollst\u00e4ndige Einkaufsliste mit Preissch\u00e4tzung.<\/p>\n    <div class=\"fcc-card\">\n        <p class=\"fcc-subtitle\">W\u00e4hlen Sie die Zaunart und geben Sie die Seiten ein. Die Startwerte beschreiben einen 20 m langen, 1,80 m hohen Holz-Sichtschutzzaun, sodass Sie direkt auf Berechnen klicken k\u00f6nnen, um ein Beispiel zu sehen.<\/p>\n\n        <div class=\"fcc-field\">\n            <label class=\"fcc-label\" for=\"fcc-type\">Zaunart<\/label>\n            <select id=\"fcc-type\" class=\"fcc-input-field\"><option value=\"picket\" selected>Holz-Lattenzaun (vor Ort gebaut)<\/option><option value=\"wpanel\">Holz-Zaunelemente (Fertigelemente)<\/option><option value=\"vinyl\">Kunststoffzaun (Elemente)<\/option><option value=\"alum\">Metallzaun (Doppelstabmatten)<\/option><option value=\"chain\">Maschendrahtzaun<\/option><\/select>\n        <\/div>\n\n        <div class=\"fcc-group\">\n            <p class=\"fcc-group-title\">Zaunverlauf<\/p>\n            <div id=\"fcc-runs\"><\/div>\n            <button type=\"button\" id=\"fcc-add-run\" class=\"fcc-link-btn\">+ Weitere Seite hinzuf\u00fcgen<\/button>\n            <label class=\"fcc-check\"><input type=\"checkbox\" id=\"fcc-closed\"> Der Zaun schlie\u00dft einen Kreis (die letzte Seite f\u00fchrt zur\u00fcck zur ersten)<\/label>\n            <div class=\"fcc-two-col\">\n                <div class=\"fcc-field\">\n                    <label class=\"fcc-label\" for=\"fcc-gates\">Anzahl Tore<\/label>\n                    <select id=\"fcc-gates\" class=\"fcc-input-field\"><option value=\"0\" selected>0<\/option><option value=\"1\">1<\/option><option value=\"2\">2<\/option><option value=\"3\">3<\/option><option value=\"4\">4<\/option><option value=\"5\">5<\/option><\/select>\n                <\/div>\n                <div class=\"fcc-field\">\n                    <label class=\"fcc-label\" for=\"fcc-gatew\">Torbreite (<span class=\"fcc-u-len\">ft<\/span>)<\/label>\n                    <input type=\"number\" id=\"fcc-gatew\" class=\"fcc-input-field\" value=\"4\" min=\"0\" step=\"any\">\n                <\/div>\n            <\/div>\n            <p class=\"fcc-hint\">Rechnen Sie die Tor\u00f6ffnungen in die Seitenl\u00e4ngen ein. Der Rechner zieht sie vom Zaunverlauf ab und erg\u00e4nzt die Torpfosten.<\/p>\n            <div class=\"fcc-field\">\n                <label class=\"fcc-label\" for=\"fcc-attach\">Enden an Haus, Mauer oder bestehendem Zaun befestigt<\/label>\n                <select id=\"fcc-attach\" class=\"fcc-input-field\"><option value=\"0\" selected>Keines, beide Enden bekommen einen Pfosten<\/option><option value=\"1\">Ein Ende<\/option><option value=\"2\">Beide Enden<\/option><\/select>\n            <\/div>\n        <\/div>\n\n        <div class=\"fcc-group\">\n            <p class=\"fcc-group-title\">Zaunausf\u00fchrung<\/p>\n            <div class=\"fcc-field\">\n                <label class=\"fcc-label\" for=\"fcc-height\">Zaunh\u00f6he (<span class=\"fcc-u-len\">ft<\/span>)<\/label>\n                <input type=\"number\" id=\"fcc-height\" class=\"fcc-input-field\" value=\"6\" min=\"0\" step=\"any\">\n            <\/div>\n            <div class=\"fcc-preset-row\" id=\"fcc-height-presets\"><\/div>\n            <div class=\"fcc-two-col\">\n                <div class=\"fcc-field\">\n                    <label class=\"fcc-label\" for=\"fcc-spacing\">Pfostenabstand oder Elementbreite (<span class=\"fcc-u-len\">ft<\/span>)<\/label>\n                    <input type=\"number\" id=\"fcc-spacing\" class=\"fcc-input-field\" value=\"8\" min=\"0\" step=\"any\">\n                <\/div>\n                <div class=\"fcc-field\" data-show=\"picket,wpanel\">\n                    <label class=\"fcc-label\" for=\"fcc-postsel\">Gr\u00f6\u00dfe der Holzpfosten<\/label>\n                    <select id=\"fcc-postsel\" class=\"fcc-input-field\"><\/select>\n                <\/div>\n            <\/div>\n            <div class=\"fcc-two-col\" data-show=\"picket\">\n                <div class=\"fcc-field\">\n                    <label class=\"fcc-label\" for=\"fcc-rails\">Riegel pro Feld<\/label>\n                    <select id=\"fcc-rails\" class=\"fcc-input-field\"><option value=\"2\">2 Riegel<\/option><option value=\"3\" selected>3 Riegel<\/option><option value=\"4\">4 Riegel<\/option><\/select>\n                <\/div>\n                <div class=\"fcc-field\">\n                    <label class=\"fcc-label\" for=\"fcc-layout\">Lattenanordnung<\/label>\n                    <select id=\"fcc-layout\" class=\"fcc-input-field\"><option value=\"spaced\" selected>Mit Abstand oder dicht an dicht<\/option><option value=\"bob\">Zweilagig \u00fcberlappend (2,5 cm \u00dcberlappung)<\/option><\/select>\n                <\/div>\n            <\/div>\n            <div class=\"fcc-two-col\" data-show=\"picket\">\n                <div class=\"fcc-field\">\n                    <label class=\"fcc-label\" for=\"fcc-pw\">Lattenbreite (<span class=\"fcc-u-in\">in<\/span>)<\/label>\n                    <input type=\"number\" id=\"fcc-pw\" class=\"fcc-input-field\" value=\"5.5\" min=\"0\" step=\"any\">\n                <\/div>\n                <div class=\"fcc-field\" id=\"fcc-gap-field\">\n                    <label class=\"fcc-label\" for=\"fcc-gap\">Abstand zwischen den Latten (<span class=\"fcc-u-in\">in<\/span>)<\/label>\n                    <input type=\"number\" id=\"fcc-gap\" class=\"fcc-input-field\" value=\"0.5\" min=\"0\" step=\"any\">\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"fcc-group\">\n            <p class=\"fcc-group-title\">Pfostengr\u00fcndung<\/p>\n            <div class=\"fcc-two-col\">\n                <div class=\"fcc-field\">\n                    <label class=\"fcc-label\" for=\"fcc-hole\">Lochdurchmesser (<span class=\"fcc-u-in\">in<\/span>)<\/label>\n                    <input type=\"number\" id=\"fcc-hole\" class=\"fcc-input-field\" value=\"10\" min=\"0\" step=\"any\">\n                <\/div>\n                <div class=\"fcc-field\">\n                    <label class=\"fcc-label\" for=\"fcc-depth\">Lochtiefe (<span class=\"fcc-u-in\">in<\/span>)<\/label>\n                    <input type=\"number\" id=\"fcc-depth\" class=\"fcc-input-field\" value=\"24\" min=\"0\" step=\"any\">\n                <\/div>\n            <\/div>\n            <p class=\"fcc-hint\">Die Tiefe folgt Ihrer Zaunh\u00f6he (etwa ein Drittel davon, mindestens 60 cm). Geben Sie Ihre \u00f6rtliche Frosttiefe ein, falls sie gr\u00f6\u00dfer ist.<\/p>\n            <div class=\"fcc-two-col\">\n                <div class=\"fcc-field\">\n                    <label class=\"fcc-label\" for=\"fcc-bag\">Gr\u00f6\u00dfe des Betonsacks<\/label>\n                    <select id=\"fcc-bag\" class=\"fcc-input-field\"><\/select>\n                <\/div>\n                <div class=\"fcc-field\">\n                    <label class=\"fcc-check\"><input type=\"checkbox\" id=\"fcc-gravel\" checked> Kiesschicht von 15 cm einplanen<\/label>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"fcc-group\">\n            <p class=\"fcc-group-title\">Kosten und Extras<\/p>\n            <label class=\"fcc-check\"><input type=\"checkbox\" id=\"fcc-cost\" checked> Kostensch\u00e4tzung einbeziehen<\/label>\n            <div id=\"fcc-cost-box\">\n                <details class=\"fcc-prices\">\n                    <summary>Preise bearbeiten (typische Baumarktpreise in Euro, durch Ihre ersetzen)<\/summary>\n                    <div class=\"fcc-price-grid\" id=\"fcc-prices\"><\/div>\n                <\/details>\n                <div class=\"fcc-field\">\n                    <label class=\"fcc-label\" for=\"fcc-labor\">Montagekosten pro <span class=\"fcc-u-len\">ft<\/span> (optional)<\/label>\n                    <input type=\"number\" id=\"fcc-labor\" class=\"fcc-input-field\" placeholder=\"Leer lassen f\u00fcr reine Materialkosten\" min=\"0\" step=\"any\">\n                <\/div>\n            <\/div>\n            <div class=\"fcc-two-col\">\n                <div class=\"fcc-field\" data-show=\"picket\">\n                    <label class=\"fcc-label\" for=\"fcc-waste\">Zuschlag f\u00fcr Verschnitt<\/label>\n                    <select id=\"fcc-waste\" class=\"fcc-input-field\"><option value=\"0\">Keiner<\/option><option value=\"5\">5%<\/option><option value=\"10\" selected>10%<\/option><option value=\"15\">15% (Hanglage)<\/option><\/select>\n                <\/div>\n                <div class=\"fcc-field\">\n                    <label class=\"fcc-check\"><input type=\"checkbox\" id=\"fcc-pool\"> Dieser Zaun umgibt einen Pool<\/label>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"fcc-btn-row\">\n            <button type=\"button\" id=\"fcc-calculate-btn\" class=\"fcc-calculate-btn\">Berechnen<\/button>\n            <button type=\"button\" id=\"fcc-reset-btn\" class=\"fcc-reset-btn\">Zur\u00fccksetzen<\/button>\n        <\/div>\n        <p id=\"fcc-error-msg\" class=\"fcc-error-msg\"><\/p>\n\n        <div id=\"fcc-result-area\" class=\"fcc-result-area\">\n            <div class=\"fcc-result-grid\" id=\"fcc-result-grid\"><\/div>\n            <p class=\"fcc-postline\" id=\"fcc-postline\"><\/p>\n            <div class=\"fcc-list\" id=\"fcc-list\"><\/div>\n            <div id=\"fcc-warn\" class=\"fcc-warn\"><\/div>\n            <p class=\"fcc-algebra\" id=\"fcc-algebra\"><\/p>\n            <div class=\"fcc-info-card\">\n                <div class=\"fcc-info-title\">Vor dem Graben und Kaufen<\/div>\n                <ol class=\"fcc-howto-list\"><li>Holen Sie vor dem Graben eine Leitungsauskunft beim Netzbetreiber oder bei den Stadtwerken ein, damit Sie keine Strom-, Gas-, Wasser- oder Datenleitung treffen.<\/li><li>Kl\u00e4ren Sie Genehmigungspflicht, H\u00f6henbegrenzungen, Grenzabst\u00e4nde (Nachbarrecht) und Vorgaben von Gemeinde oder Eigent\u00fcmergemeinschaft, und pr\u00fcfen Sie den genauen Grenzverlauf, bevor Sie Pfosten setzen.<\/li><li>Markieren Sie jede Pfostenposition mit Schnur und Pfl\u00f6cken und pr\u00fcfen Sie die Abst\u00e4nde, bevor Sie das erste Loch graben.<\/li><\/ol>\n            <\/div>\n        <\/div>\n    <\/div>\n    <p class=\"fcc-jump\">Brauchen Sie nur eine schnelle Zahl? <a href=\"#fence-reference-table\">Zur Zaun-Materialtabelle nach L\u00e4nge springen<\/a>.<\/p>\n<\/div>\n<script>(function() {\nvar T = {\"sideLabel\": \"Seite {n}: L\u00e4nge ({u})\", \"runPh\": \"z. B. 10\", \"remove\": \"Entfernen\", \"removeAria\": \"Diese Seite entfernen\", \"postS_imp\": \"9 \u00d7 9 cm\", \"postL_imp\": \"12 \u00d7 12 cm\", \"postS_met\": \"9 \u00d7 9 cm\", \"postL_met\": \"12 \u00d7 12 cm\", \"p_post\": \"Pfosten (St\u00fcck)\", \"p_rail\": \"Riegel (St\u00fcck)\", \"p_picket\": \"Latte oder Brett (St\u00fcck)\", \"p_fasteners\": \"Schraube (St\u00fcck)\", \"p_concrete\": \"Betonsack (St\u00fcck)\", \"p_gravel\": \"Kies-Sack, 14 L (St\u00fcck)\", \"p_gate\": \"Tor (St\u00fcck)\", \"p_panel\": \"Zaunelement (St\u00fcck)\", \"p_lpost\": \"Zwischenpfosten (St\u00fcck)\", \"p_tpost\": \"Eck-, End- oder Torpfosten (St\u00fcck)\", \"p_fabric\": \"Maschendrahtrolle, 25 m (St\u00fcck)\", \"p_tbar\": \"Tension bar (each)\", \"p_tband\": \"Tension band (each)\", \"p_bband\": \"Brace band (each)\", \"p_cap\": \"Pfostenkappe (St\u00fcck)\", \"p_ties\": \"Bindedraht, Rolle (St\u00fcck)\", \"p_strut\": \"Strebe (St\u00fcck)\", \"p_wire\": \"Spanndraht, Rolle 50 m (St\u00fcck)\", \"err_length\": \"Geben Sie die L\u00e4nge mindestens einer Zaunseite ein.\", \"err_height\": \"Geben Sie die Zaunh\u00f6he ein.\", \"err_spacing\": \"Geben Sie den Pfostenabstand (oder die Elementbreite) ein.\", \"err_gatew\": \"Geben Sie die Torbreite ein.\", \"err_gates\": \"Die Tor\u00f6ffnungen sind so lang wie der gesamte Zaun. Verl\u00e4ngern Sie den Zaun oder verringern Sie die Tore.\", \"err_hole\": \"Das Pfostenloch muss breiter als der Pfosten sein. Vergr\u00f6\u00dfern Sie den Lochdurchmesser.\", \"err_depth\": \"Das Pfostenloch muss tiefer als die Kiesschicht sein. Vergr\u00f6\u00dfern Sie die Lochtiefe oder entfernen Sie den Haken bei der Kiesschicht.\", \"err_picket\": \"Geben Sie die Lattenbreite ein.\", \"estCost\": \"Gesch\u00e4tzte Kosten\", \"matOnly\": \"Nur Material, zu den von Ihnen eingegebenen Preisen\", \"matLabor\": \"Material {a} + Montage {b}\", \"costPerFt\": \"Kosten pro Fu\u00df\", \"costPerM\": \"Kosten pro Meter\", \"forLen\": \"f\u00fcr {n} {u} Zaun\", \"cardPosts\": \"Zaunpfosten\", \"cardSections\": \"Felder\", \"cardPanels\": \"Elemente\", \"cardBetween\": \"zwischen den Pfosten, ohne Tore\", \"pLine\": \"{n} Zwischenpfosten\", \"pCorner\": \"{n} Eckpfosten\", \"pEnd\": \"{n} Endpfosten\", \"pGate\": \"{n} Torpfosten\", \"gatesOne\": \" plus {n} Tor\u00f6ffnung\", \"gatesMany\": \" plus {n} Tor\u00f6ffnungen\", \"postLine\": \"Pfosten: insgesamt {total} ({parts}). {sections} Felder{gates}.\", \"thItem\": \"Position\", \"thQty\": \"Menge\", \"thDetails\": \"Details\", \"thEach\": \"Einzelpreis\", \"thCost\": \"Kosten\", \"matSub\": \"Zwischensumme Material\", \"labor\": \"Montage\", \"total\": \"Gesamt\", \"postType_vinyl\": \"Kunststoff 10 \u00d7 10 cm\", \"postType_alum\": \"Metall 6 \u00d7 4 cm\", \"postType_wpanel\": \"\", \"postType_picket\": \"\", \"postType_chain\": \"\", \"railPreImp\": \"\", \"railPreMet\": \"\", \"l_post\": \"Zaunpfosten\", \"s_post\": \"Pfosten {post}, {len} lang ({depth} im Boden)\", \"l_lpost\": \"Zwischenpfosten\", \"s_lpost\": \"Rundpfosten, {len} lang ({depth} im Boden)\", \"l_tpost\": \"Eck-, End- und Torpfosten\", \"s_tpost\": \"St\u00e4rkere Pfosten, {len} lang\", \"l_toprail\": \"Top rail\", \"s_toprail\": \"10.5 ft lengths\", \"l_rail\": \"Riegel\", \"s_rail\": \"Riegel, {len} lang, {n} pro Feld\", \"l_picket\": \"Latten oder Bretter\", \"s_bob\": \"Zweilagig \u00fcberlappend, {w} breit, 2,5 cm \u00dcberlappung\", \"s_picket\": \"{w} breit mit {g} Abstand\", \"l_fasteners\": \"Schrauben\", \"s_fasteners\": \"2 pro Latte und Riegel\", \"l_panel\": \"Zaunelemente\", \"s_panel\": \"{w} breit, {h} hoch (eines pro Feld)\", \"l_fabric\": \"Maschendraht\", \"s_fabric\": \"Rollen \u00e0 25 m, {h} hoch\", \"l_tbar\": \"Tension bars\", \"s_tbar\": \"One at each fabric end\", \"l_tband\": \"Tension bands\", \"s_tband\": \"{n} per tension bar\", \"l_bband\": \"Brace bands and rail ends\", \"s_bband\": \"One per tension bar\", \"l_strut\": \"Streben\", \"s_strut\": \"Eine pro Seite eines Eck-, End- oder Torpfostens\", \"l_wire\": \"Spanndraht\", \"s_wire\": \"{n} Linien entlang des Zauns, Rollen \u00e0 50 m\", \"l_cap\": \"Pfostenkappen\", \"s_cap\": \"Eine pro Pfosten\", \"l_ties\": \"Bindedraht\", \"s_ties\": \"Rollen \u00e0 50 m\", \"s_ties_eu\": \"Rollen \u00e0 50 m\", \"l_concrete\": \"Fertigbeton\", \"s_concrete\": \"S\u00e4cke \u00e0 {bag}, {vol} Beton (Pfostenvolumen abgezogen)\", \"l_gravel\": \"Kiesschicht\", \"s_gravel\": \"15 cm unter jedem Pfosten, {vol}\", \"l_gate\": \"Tore\", \"s_gate\": \"{w} breit, mit Beschl\u00e4gen und Schloss\", \"w_waste\": \"Latten, Riegel und Schrauben enthalten {n}% Zuschlag f\u00fcr Verschnitt und Fehler. Pfosten, Elemente und Beton werden in ganzen Einheiten gez\u00e4hlt.\", \"w_tall\": \"Z\u00e4une \u00fcber 2 m sind oft genehmigungspflichtig oder brauchen eine Ausnahme. Pr\u00fcfen Sie die \u00f6rtlichen Vorgaben, bevor Sie kaufen.\", \"w_spacing\": \"Bei einem Pfostenabstand \u00fcber 2,5 m h\u00e4ngen die Riegel durch. Nehmen Sie f\u00fcr einen Holz-Lattenzaun 2 bis 2,5 m.\", \"w_gate\": \"Tore breiter als 1,2 m belasten den Torpfosten stark. Nehmen Sie dort einen Pfosten von 12 \u00d7 12 cm oder einen Stahlpfosten und setzen Sie ihn in zus\u00e4tzlichen Beton.\", \"w_attach1\": \"Das Ende an Haus oder Mauer braucht statt eines Pfostens einen Wandanschluss, zum Beispiel einen Winkel oder ein an der Wand befestigtes Kantholz.\", \"w_attach2\": \"Die Enden an Haus oder Mauer brauchen statt eines Pfostens einen Wandanschluss, zum Beispiel einen Winkel oder ein an der Wand befestigtes Kantholz.\", \"w_shallow\": \"Ein Loch, das flacher als 60 cm ist, kann bei einem so hohen Zaun kippen. In kalten Regionen setzen Sie die Pfosten unterhalb der Frostgrenze.\", \"w_pool\": \"Pool-Einfriedung: H\u00f6he, \u00d6ffnungsweite und Toranforderungen regeln die Bauordnung des Bundeslandes und die Gemeinde. Als Richtwert gelten \u00d6ffnungen unter 10 cm und ein selbstschlie\u00dfendes, selbstverriegelndes Tor, das vom Pool weg aufgeht. Kl\u00e4ren Sie die Vorgaben mit Ihrer Bauaufsicht.\", \"w_poolLow\": \"Ihr Zaun ist niedriger als {h} m.\", \"w_poolGap\": \"Ihr Lattenabstand betr\u00e4gt 10 cm oder mehr.\", \"algebra\": \"Jede Seite wird durch den Abstand von {sp} geteilt und auf ganze Felder aufgerundet{gates} = {sections} Felder. Pfosten = {segments} Abschnitte {loop}{wall} = {posts}.\", \"alg_gates\": \" (Tor\u00f6ffnungen werden von den l\u00e4ngsten Seiten abgezogen)\", \"alg_loop\": \"(geschlossener Kreis, daher kein zus\u00e4tzlicher Endpfosten)\", \"alg_wall1\": \" - {n} Wandende\", \"alg_wall2\": \" - {n} Wandenden\"};\nvar LOC = {\"locale\": \"de-DE\", \"currency\": \"EUR\", \"metricOnly\": true, \"nbsp\": true, \"tallFt\": 6.561679790026246, \"maxSpacingFt\": 8.234908136482938, \"wideGateFt\": 3.9370078740157477, \"poolMinM\": null, \"poolGapCm\": 10, \"runDefM\": 20, \"hDefM\": 1.8, \"gateWM\": 1.0, \"bagDefM\": \"25\", \"presetsM\": [1.0, 1.2, 1.5, 1.8, 2.0], \"model\": {\"eu\": true, \"woodPostMet\": {\"s\": 3.54, \"l\": 4.72}, \"chainLine\": 1.5, \"chainTerm\": 1.9, \"rollFt\": 82.02099737532808, \"railStdM\": [2.5, 3.0, 4.0, 5.0], \"postStdM\": [1.5, 1.8, 2.1, 2.4, 2.7, 3.0, 3.6, 4.2], \"typeOv\": {\"picket\": {\"spacingM\": 2.5}, \"wpanel\": {\"spacingM\": 1.8}, \"vinyl\": {\"spacingM\": 1.8, \"postW\": 3.94, \"holeD\": 10}, \"alum\": {\"spacingM\": 2.5, \"postW\": 2.36, \"holeD\": 8}, \"chain\": {\"spacingM\": 2.5, \"holeD\": 8}}}};\nvar FENCE_MODEL = (function () {\n    var PI = Math.PI;\n    var EPS = 1e-9;\n\n    \/\/ grp: which option group the type uses. postSq: square posts (else round).\n    var TYPES = {\n        picket: { name: 'Wood picket fence (built on site)', grp: 'picket', spacing: 8, spacingM: 2.4, wood: true },\n        wpanel: { name: 'Wood panel fence (prefab panels)', grp: 'panel', spacing: 8, spacingM: 2.4, wood: true },\n        vinyl: { name: 'Vinyl fence (panels)', grp: 'panel', spacing: 8, spacingM: 2.4, postW: 5, holeD: 12 },\n        alum: { name: 'Aluminum \/ ornamental fence (panels)', grp: 'panel', spacing: 6, spacingM: 1.8, postW: 2, holeD: 8 },\n        chain: { name: 'Chain link fence', grp: 'chain', spacing: 10, spacingM: 3, holeD: 10 }\n    };\n    var POST_STD = {\n        picket: [6, 8, 10, 12, 14, 16], wpanel: [6, 8, 10, 12, 14, 16], vinyl: [7, 8, 9, 10, 12],\n        alum: [4, 5, 6, 7, 8, 9, 10], chain: [5, 6, 7, 8, 9, 10, 12]\n    };\n    var POST_STD_M = [1.5, 1.8, 2.1, 2.4, 2.7, 3, 3.6, 4.2, 4.8].map(function (m) { return m \/ 0.3048; });\n    var RAIL_STD = [8, 10, 12, 16];\n    var RAIL_STD_M = [2.4, 3, 3.6, 4.8].map(function (m) { return m \/ 0.3048; });\n    \/\/ concrete bag yield in cubic feet (80 lb = 0.6 ft3, about 2.135 kg per litre for the metric bags)\n    var BAGS_IMP = [{ v: '50', label: '50 lb', y: 0.375 }, { v: '60', label: '60 lb', y: 0.45 }, { v: '80', label: '80 lb', y: 0.6 }];\n    var BAGS_MET = [{ v: '20', label: '20 kg', y: 9.37 \/ 28.3168 }, { v: '25', label: '25 kg', y: 11.71 \/ 28.3168 }, { v: '40', label: '40 kg', y: 18.74 \/ 28.3168 }];\n    var WOOD_POST_IN = { s: 3.5, l: 5.5 };\n    var WOOD_POST_IN_MET = { s: 3.94, l: 5.91 };\n    var GRAVEL_IN = 6;\n    \/\/ locale overrides (EU pages): typeOv, woodPostMet, chainLine\/chainTerm (in), rollFt, postStdM, railStdM, eu\n    var L = { eu: false, woodPostMet: WOOD_POST_IN_MET, chainLine: 2.375, chainTerm: 2.875, rollFt: 50, railLen: 10.5 };\n    function setLocale(loc) {\n        for (var k in loc) { if (k !== 'typeOv') L[k] = loc[k]; }\n        if (loc.typeOv) { for (var t in loc.typeOv) { for (var f in loc.typeOv[t]) TYPES[t][f] = loc.typeOv[t][f]; } }\n        if (loc.postStdM) POST_STD_M = loc.postStdM.map(function (m) { return m \/ 0.3048; });\n        if (loc.railStdM) RAIL_STD_M = loc.railStdM.map(function (m) { return m \/ 0.3048; });\n    }\n    function woodPostIn(metric, sel) { return metric ? L.woodPostMet[sel] : WOOD_POST_IN[sel]; }\n\n    function nextStd(x, arr) {\n        for (var i = 0; i < arr.length; i++) { if (arr[i] >= x - 1e-6) return arr[i]; }\n        return arr[arr.length - 1];\n    }\n    function defDepthIn(hFt) { return Math.max(24, Math.ceil(hFt * 12 \/ 3 \/ 6 - EPS) * 6); }\n    function defRails(hFt) { return hFt <= 4 + EPS ? 2 : (hFt <= 6 + EPS ? 3 : 4); }\n    function defHoleIn(type, large) {\n        if (TYPES[type].wood) return large ? 12 : 10;\n        return TYPES[type].holeD;\n    }\n    function postBuyFt(type, hFt, depthIn, metric) {\n        return nextStd(hFt + depthIn \/ 12, metric ? POST_STD_M : POST_STD[type]);\n    }\n    function railBuyFt(spacingFt, metric) { return nextStd(spacingFt, metric ? RAIL_STD_M : RAIL_STD); }\n    function r25(x) { return Math.round(x * 4) \/ 4; }\n\n    \/\/ Typical US big-box style estimates. Editable in the calculator.\n    function defaultPrices(type, hFt, o) {\n        var p = { concrete: r25(o.bagYield * 11.5), gravel: 5.5 };\n        var pf = o.postBuyFt, s = o.spacingFt;\n        if (L.eu) return euPrices(type, hFt, o);\n        if (type === 'picket') {\n            p.post = r25(pf * (o.large ? 4.2 : 2)); p.rail = r25(o.railBuyFt * 0.75); p.picket = r25(0.6 * hFt);\n            p.fasteners = 0.04; p.gate = 75;\n        } else if (type === 'wpanel') {\n            p.post = r25(pf * (o.large ? 4.2 : 2)); p.panel = r25(15 * hFt * s \/ 8); p.gate = 110;\n        } else if (type === 'vinyl') {\n            p.post = r25(pf * 5); p.panel = r25(22 * hFt * s \/ 8); p.gate = 220;\n        } else if (type === 'alum') {\n            p.post = r25(pf * 3.4); p.panel = r25(18 * hFt * s \/ 6); p.gate = 180;\n        } else {\n            p.lpost = r25(pf * 3.2); p.tpost = r25(pf * 4.5); p.rail = 15; p.fabric = r25(28 * hFt);\n            p.tbar = 6; p.tband = 1.25; p.bband = 1.5; p.cap = 1.75; p.ties = 0.12; p.gate = r25(25 * hFt);\n        }\n        return p;\n    }\n    \/\/ Typical EU store prices in EUR (heights\/lengths converted to metres)\n    function euPrices(type, hFt, o) {\n        var hM = hFt * 0.3048, sM = o.spacingFt * 0.3048, pM = o.postBuyFt * 0.3048;\n        var p = { concrete: Math.round(o.bagYield * 9.5 * 4) \/ 4, gravel: 4 };\n        if (type === 'picket') {\n            p.post = r25(pM * (o.large ? 10.5 : 5)); p.rail = r25(o.railBuyFt * 0.3048 * 1.7); p.picket = r25(1.8 * hM);\n            p.fasteners = 0.05; p.gate = 120;\n        } else if (type === 'wpanel') {\n            p.post = r25(pM * (o.large ? 10.5 : 5)); p.panel = r25(23 * hM * sM); p.gate = 140;\n        } else if (type === 'vinyl') {\n            p.post = r25(pM * 12); p.panel = r25(43 * hM * sM); p.gate = 250;\n        } else if (type === 'alum') {\n            p.post = r25(pM * 4.5); p.panel = r25(16.5 * hM * sM); p.gate = 150;\n        } else {\n            p.lpost = r25(pM * 3); p.tpost = r25(pM * 4.2); p.strut = 6; p.fabric = r25(29 * hM);\n            p.wire = 12; p.ties = 6; p.cap = 1.25; p.gate = 110;\n        }\n        return p;\n    }\n    var PRICE_KEYS = {\n        picket: ['post', 'rail', 'picket', 'fasteners', 'concrete', 'gravel', 'gate'],\n        wpanel: ['post', 'panel', 'concrete', 'gravel', 'gate'],\n        vinyl: ['post', 'panel', 'concrete', 'gravel', 'gate'],\n        alum: ['post', 'panel', 'concrete', 'gravel', 'gate'],\n        chain: ['lpost', 'tpost', 'rail', 'fabric', 'tbar', 'tband', 'bband', 'cap', 'ties', 'concrete', 'gravel', 'gate']\n    };\n    function priceKeys(type) {\n        if (L.eu) {\n            if (type === 'chain') return ['lpost', 'tpost', 'strut', 'fabric', 'wire', 'ties', 'cap', 'concrete', 'gravel', 'gate'];\n        }\n        return PRICE_KEYS[type];\n    }\n\n    \/\/ c: all lengths in feet, all small dimensions in inches.\n    function model(c) {\n        var T = TYPES[c.type];\n        var runs = c.runs.filter(function (x) { return x > 0; });\n        if (!runs.length) return { err: 'length' };\n        if (!(c.hFt > 0)) return { err: 'height' };\n        var s = c.spacingFt;\n        if (!(s > 0)) return { err: 'spacing' };\n        var gates = c.gates || 0;\n        if (gates > 0) {\n            if (!(c.gateW > 0)) return { err: 'gatew' };\n        }\n        var totalLen = 0;\n        runs.forEach(function (r) { totalLen += r; });\n        var G = gates * (c.gateW || 0);\n        if (G >= totalLen - EPS) return { err: 'gates' };\n        var netLen = totalLen - G;\n\n        \/\/ place each gate in the longest remaining side, then round every side up to whole sections\n        var rem = runs.slice();\n        for (var gi = 0; gi < gates; gi++) {\n            var mi = 0;\n            for (var ri = 1; ri < rem.length; ri++) { if (rem[ri] > rem[mi]) mi = ri; }\n            rem[mi] = Math.max(0, rem[mi] - c.gateW);\n        }\n        var sumN = 0;\n        rem.forEach(function (r) { sumN += Math.ceil(r \/ s - EPS); });\n        var sections = Math.max(1, sumN);\n        var closed = runs.length >= 3 ? !!c.closed : false;\n        var segments = sections + gates;\n        var corners = closed ? runs.length : runs.length - 1;\n        var attach = closed ? 0 : Math.min(c.attach || 0, 2);\n        var totalPosts = closed ? segments : segments + 1 - attach;\n        var endP = Math.min(closed ? 0 : 2 - attach, totalPosts);\n        var cornP = Math.min(corners, totalPosts - endP);\n        var gateP = Math.min(gates * 2, totalPosts - endP - cornP);\n        var lineP = totalPosts - endP - cornP - gateP;\n\n        var dIn = c.holeDIn, depthIn = c.depthIn;\n        var gIn = c.gravel ? GRAVEL_IN : 0;\n        var wMax = T.grp === 'chain' ? L.chainTerm : (c.postWIn || 0);\n        if (!(dIn > wMax)) return { err: 'hole' };\n        var cH = depthIn - gIn;\n        if (!(cH > 0)) return { err: 'depth' };\n        var holeArea = PI \/ 4 * dIn * dIn;\n        function perPost(w, sq) { return (holeArea - (sq ? w * w : PI \/ 4 * w * w)) * cH; }\n        var conc;\n        if (T.grp === 'chain') conc = lineP * perPost(L.chainLine, false) + (totalPosts - lineP) * perPost(L.chainTerm, false);\n        else conc = totalPosts * perPost(c.postWIn, true);\n        var concFt3 = conc \/ 1728;\n        var bags = Math.ceil(concFt3 \/ c.bagYield - EPS);\n        var gravelFt3 = c.gravel ? totalPosts * holeArea * gIn \/ 1728 : 0;\n        var gravelBags = c.gravel ? Math.ceil(gravelFt3 \/ 0.5 - EPS) : 0;\n        var postFt = c.hFt + depthIn \/ 12;\n        var buyFt = postBuyFt(c.type, c.hFt, depthIn, c.metric);\n\n        var items = [];\n        function add(key, qty, extra) {\n            var it = { key: key, qty: qty };\n            for (var k in extra) it[k] = extra[k];\n            items.push(it);\n        }\n        var waste = 1 + (c.wastePct || 0) \/ 100;\n        var info = { buyFt: buyFt, postFt: postFt };\n        if (T.grp === 'picket') {\n            var rails = Math.ceil(c.rails * sections * waste - EPS);\n            var peff = c.bob ? Math.max(1, c.pwIn - 1) : c.pwIn + c.gapIn;\n            if (!(c.pwIn > 0) || !(peff > 0)) return { err: 'picket' };\n            var picketsBase = Math.ceil(netLen * 12 \/ peff - EPS);\n            var pickets = Math.ceil(picketsBase * waste - EPS);\n            info.railBuyFt = railBuyFt(s, c.metric);\n            info.peff = peff;\n            add('post', totalPosts, {});\n            add('rail', rails, {});\n            add('picket', pickets, {});\n            add('fasteners', pickets * c.rails * 2, {});\n        } else if (T.grp === 'panel') {\n            add('post', totalPosts, {});\n            add('panel', sections, {});\n        } else if (L.eu) {\n            var struts = endP + 2 * cornP + gateP;\n            var lines = c.hFt * 0.3048 > 1.0 + EPS ? 3 : 2;\n            add('lpost', lineP, {});\n            add('tpost', totalPosts - lineP, {});\n            add('strut', struts, {});\n            add('fabric', Math.max(1, Math.ceil(netLen \/ L.rollFt - EPS)), {});\n            add('wire', Math.max(1, Math.ceil(lines * netLen * 0.3048 \/ 50 - EPS)), { lines: lines });\n            add('ties', Math.max(1, Math.ceil(netLen * 0.3048 \/ 50 - EPS)), {});\n            add('cap', totalPosts, {});\n        } else {\n            var tbars = endP + 2 * cornP + gateP;\n            var tbandEach = Math.max(2, Math.ceil(c.hFt - EPS) - 1);\n            var terminals = totalPosts - lineP;\n            add('lpost', lineP, {});\n            add('tpost', terminals, {});\n            add('rail', Math.ceil(netLen \/ 10.5 - EPS), {});\n            add('fabric', Math.max(1, Math.ceil(netLen \/ L.rollFt - EPS)), {});\n            add('tbar', tbars, {});\n            add('tband', tbars * tbandEach, {});\n            add('bband', tbars, {});\n            add('cap', totalPosts, {});\n            add('ties', Math.ceil(netLen \/ 2 - EPS) + lineP * Math.ceil(c.hFt - EPS), {});\n        }\n        add('concrete', bags, { ft3: concFt3 });\n        if (c.gravel) add('gravel', gravelBags, { ft3: gravelFt3 });\n        if (gates > 0) add('gate', gates, {});\n\n        var pr = c.prices || {};\n        var materials = 0;\n        items.forEach(function (it) {\n            it.price = Number(pr[it.key]) || 0;\n            it.cost = it.price * it.qty;\n            materials += it.cost;\n        });\n        var labor = (Number(c.laborPerFt) || 0) * totalLen;\n        var total = materials + labor;\n        return {\n            err: null, items: items, info: info,\n            totalLen: totalLen, netLen: netLen, sumN: sumN, sections: sections, segments: segments, closed: closed,\n            posts: { total: totalPosts, line: lineP, corner: cornP, end: endP, gate: gateP },\n            concFt3: concFt3, bags: bags, perPostBags: (conc \/ totalPosts \/ 1728) \/ c.bagYield,\n            materials: materials, labor: labor, total: total, perFt: total \/ totalLen\n        };\n    }\n\n    return {\n        TYPES: TYPES, PRICE_KEYS: PRICE_KEYS, priceKeys: priceKeys, setLocale: setLocale, woodPostIn: woodPostIn,\n        BAGS_IMP: BAGS_IMP, BAGS_MET: BAGS_MET, GRAVEL_IN: GRAVEL_IN,\n        defDepthIn: defDepthIn, defRails: defRails, defHoleIn: defHoleIn, postBuyFt: postBuyFt, railBuyFt: railBuyFt,\n        defaultPrices: defaultPrices, model: model, nextStd: nextStd\n    };\n})();\n\n    \/\/ T (texts) and LOC (locale settings) are defined above this code by the page builder\n    var get = function (id) { return document.getElementById(id); };\n    var M = FENCE_MODEL;\n    if (LOC.model) M.setLocale(LOC.model);\n    var FT = 0.3048, CM = 2.54;\n    var S = { metric: !!LOC.metricOnly, type: 'picket', touched: {}, pTouched: {}, pVals: {} };\n    var NB = LOC.nbsp ? '\u00a0' : ' ';\n    var PRESETS_FT = LOC.presetsM ? LOC.presetsM.map(function (m) { return m \/ FT; }) : [4, 5, 6, 8];\n\n    var t = function (key, vars) {\n        var s = T[key];\n        if (s === undefined) return key;\n        if (vars) { for (var k in vars) { s = s.split('{' + k + '}').join(vars[k]); } }\n        return s;\n    };\n    var rnd = function (n, d) { var p = Math.pow(10, d); return Math.round(n * p) \/ p; };\n    var nf = function (n, max) { return Number(n).toLocaleString(LOC.locale, { maximumFractionDigits: max === undefined ? 2 : max }); };\n    var num = function (n) { return Number(n).toLocaleString(LOC.locale); };\n    var curFmt = function (d) { return new Intl.NumberFormat(LOC.locale, { style: 'currency', currency: LOC.currency, minimumFractionDigits: d, maximumFractionDigits: d }); };\n    var money = function (n) { return curFmt(2).format(n); };\n    var money0 = function (n) { return curFmt(0).format(Math.round(n)); };\n    var val = function (id) { var v = parseFloat(get(id).value); return isNaN(v) ? NaN : v; };\n\n    \/\/ unit helpers: lengths are ft (US) or m, small dimensions are in (US) or cm\n    var toFt = function (v) { return S.metric ? v \/ FT : v; };\n    var toIn = function (v) { return S.metric ? v \/ CM : v; };\n    var roundCm5 = function (inch) { return Math.round(inch * CM \/ 5) * 5; };\n    var fLen = function (ft) { return S.metric ? nf(rnd(ft * FT, 2)) + NB + 'm' : rnd(ft, 1) + ' ft'; };\n    var fIn = function (inch) { return S.metric ? Math.round(inch * CM) + NB + 'cm' : rnd(inch, 1) + ' in'; };\n\n    var curType = function () { return M.TYPES[S.type]; };\n    var isLarge = function () { return get('fcc-postsel').value === 'l'; };\n    var postWIn = function () {\n        var T0 = curType();\n        if (T0.wood) return M.woodPostIn(S.metric, get('fcc-postsel').value);\n        return T0.postW || 0;\n    };\n    var bagList = function () { return S.metric ? M.BAGS_MET : M.BAGS_IMP; };\n    var bagYield = function () {\n        var v = get('fcc-bag').value, l = bagList();\n        for (var i = 0; i < l.length; i++) { if (l[i].v === v) return l[i].y; }\n        return l[l.length - 1].y;\n    };\n    var bagLabel = function () {\n        var v = get('fcc-bag').value, l = bagList();\n        for (var i = 0; i < l.length; i++) { if (l[i].v === v) return l[i].label; }\n        return '';\n    };\n\n    \/\/ ---------------------------------------------------------------- sides (runs)\n    var runsEl = get('fcc-runs');\n    var runRows = function () { return Array.prototype.slice.call(runsEl.querySelectorAll('.fcc-run')); };\n    var renumberRuns = function () {\n        var rows = runRows();\n        rows.forEach(function (row, i) {\n            var inp = row.querySelector('.fcc-run-in'), lab = row.querySelector('.fcc-run-label');\n            inp.id = 'fcc-run-' + (i + 1);\n            lab.htmlFor = inp.id;\n            lab.textContent = t('sideLabel', { n: i + 1, u: S.metric ? 'm' : 'ft' });\n            row.querySelector('.fcc-run-del').classList.toggle('fcc-hide', rows.length < 2);\n        });\n        var closed = get('fcc-closed');\n        closed.disabled = rows.length < 3;\n        if (rows.length < 3) closed.checked = false;\n        get('fcc-add-run').classList.toggle('fcc-hide', rows.length >= 12);\n    };\n    var addRun = function (v) {\n        var row = document.createElement('div');\n        row.className = 'fcc-run';\n        row.innerHTML = '<label class=\"fcc-run-label\"><\/label>' +\n            '<div class=\"fcc-run-ctl\"><input type=\"number\" class=\"fcc-input-field fcc-run-in\" min=\"0\" step=\"any\" placeholder=\"' + t('runPh') + '\">' +\n            '<button type=\"button\" class=\"fcc-run-del\" aria-label=\"' + t('removeAria') + '\">' + t('remove') + '<\/button><\/div>';\n        if (v !== undefined) { if (v !== null) row.querySelector('.fcc-run-in').value = v; }\n        runsEl.appendChild(row);\n        renumberRuns();\n        return row;\n    };\n    runsEl.addEventListener('click', function (e) {\n        if (!e.target.classList.contains('fcc-run-del')) return;\n        runsEl.removeChild(e.target.closest('.fcc-run'));\n        renumberRuns();\n    });\n    get('fcc-add-run').onclick = function () { addRun('').querySelector('.fcc-run-in').focus(); };\n\n    \/\/ ---------------------------------------------------------------- defaults \/ visibility\n    var heightFt = function () { var h = val('fcc-height'); return isNaN(h) ? NaN : toFt(h); };\n    var setSelectOptions = function (sel, list, keep, dflt) {\n        var cur = sel.value;\n        sel.innerHTML = '';\n        list.forEach(function (o) {\n            var op = document.createElement('option');\n            op.value = o.v; op.textContent = o.label;\n            sel.appendChild(op);\n        });\n        var has = keep ? list.some(function (o) { return o.v === cur; }) : false;\n        sel.value = has ? cur : (dflt || list[list.length - 1].v);\n    };\n    var presetLabel = function (ft) { return S.metric ? nf(rnd(ft * FT, 1), 1) + NB + 'm' : ft + ' ft'; };\n    var buildPresets = function () {\n        var box = get('fcc-height-presets');\n        box.innerHTML = '';\n        PRESETS_FT.forEach(function (ft) {\n            var b = document.createElement('button');\n            b.type = 'button'; b.className = 'fcc-preset-btn'; b.dataset.ft = String(ft);\n            box.appendChild(b);\n        });\n    };\n    var syncUnitLabels = function () {\n        Array.prototype.forEach.call(document.querySelectorAll('#fence-calc-wrapper .fcc-u-len'), function (el) { el.textContent = S.metric ? 'm' : 'ft'; });\n        Array.prototype.forEach.call(document.querySelectorAll('#fence-calc-wrapper .fcc-u-in'), function (el) { el.textContent = S.metric ? 'cm' : 'in'; });\n        Array.prototype.forEach.call(get('fcc-height-presets').children, function (b) { b.textContent = presetLabel(parseFloat(b.dataset.ft)); });\n        setSelectOptions(get('fcc-postsel'), S.metric ?\n            [{ v: 's', label: T.postS_met }, { v: 'l', label: T.postL_met }] :\n            [{ v: 's', label: T.postS_imp }, { v: 'l', label: T.postL_imp }], true);\n        setSelectOptions(get('fcc-bag'), bagList(), true, S.metric ? (LOC.bagDefM || '25') : '80');\n        if (!LOC.metricOnly) {\n            get('fcc-unit-toggle').children[0].classList.toggle('fcc-active', !S.metric);\n            get('fcc-unit-toggle').children[1].classList.toggle('fcc-active', S.metric);\n        }\n        renumberRuns();\n    };\n    var syncPresets = function () {\n        var h = heightFt();\n        Array.prototype.forEach.call(get('fcc-height-presets').children, function (b) {\n            b.classList.toggle('fcc-active', Math.abs(parseFloat(b.dataset.ft) - h) < 0.15);\n        });\n    };\n    var showGroups = function () {\n        Array.prototype.forEach.call(document.querySelectorAll('#fence-calc-wrapper [data-show]'), function (el) {\n            el.classList.toggle('fcc-hide', el.dataset.show.split(',').indexOf(S.type) < 0);\n        });\n    };\n    \/\/ values that follow the fence height \/ type until the user edits them\n    var applyAuto = function () {\n        var hFt = heightFt();\n        if (isNaN(hFt) || hFt <= 0) return;\n        if (!S.touched['fcc-depth']) { var dIn = M.defDepthIn(hFt); get('fcc-depth').value = S.metric ? roundCm5(dIn) : dIn; }\n        if (!S.touched['fcc-rails']) get('fcc-rails').value = String(M.defRails(hFt));\n        if (!S.touched['fcc-hole']) { var hIn = M.defHoleIn(S.type, isLarge()); get('fcc-hole').value = S.metric ? roundCm5(hIn) : hIn; }\n    };\n    var setTypeDefaults = function () {\n        var T0 = curType();\n        get('fcc-spacing').value = S.metric ? T0.spacingM : T0.spacing;\n        S.touched['fcc-spacing'] = false; S.touched['fcc-hole'] = false;\n        S.pTouched = {}; S.pVals = {};\n        showGroups();\n        applyAuto();\n        renderPrices();\n    };\n\n    \/\/ ---------------------------------------------------------------- prices\n    var renderPrices = function () {\n        var hFt = heightFt(), sp = toFt(val('fcc-spacing')), dIn = toIn(val('fcc-depth'));\n        if (isNaN(hFt) || hFt <= 0 || isNaN(sp) || sp <= 0 || isNaN(dIn) || dIn <= 0) return;\n        var def = M.defaultPrices(S.type, hFt, {\n            postBuyFt: M.postBuyFt(S.type, hFt, dIn, S.metric), large: isLarge(), spacingFt: sp,\n            railBuyFt: M.railBuyFt(sp, S.metric), bagYield: bagYield()\n        });\n        var box = get('fcc-prices');\n        box.innerHTML = '';\n        M.priceKeys(S.type).forEach(function (k) {\n            var v = S.pTouched[k] ? S.pVals[k] : def[k];\n            var row = document.createElement('div');\n            row.className = 'fcc-price-row';\n            row.innerHTML = '<label class=\"fcc-price-label\" for=\"fcc-p-' + k + '\">' + t('p_' + k) + '<\/label>' +\n                '<input type=\"number\" class=\"fcc-input-field fcc-price-in\" id=\"fcc-p-' + k + '\" data-key=\"' + k + '\" min=\"0\" step=\"0.01\">';\n            box.appendChild(row);\n            row.querySelector('input').value = v;\n        });\n    };\n    get('fcc-prices').addEventListener('input', function (e) {\n        var k = e.target.dataset.key;\n        if (!k) return;\n        S.pTouched[k] = true;\n        S.pVals[k] = e.target.value;\n    });\n    var readPrices = function () {\n        var o = {};\n        Array.prototype.forEach.call(get('fcc-prices').querySelectorAll('.fcc-price-in'), function (el) { o[el.dataset.key] = parseFloat(el.value) || 0; });\n        return o;\n    };\n\n    \/\/ ---------------------------------------------------------------- events\n    ['fcc-depth', 'fcc-rails', 'fcc-hole', 'fcc-spacing'].forEach(function (id) {\n        get(id).addEventListener('input', function () { S.touched[id] = true; if (id !== 'fcc-rails') renderPrices(); });\n    });\n    get('fcc-rails').addEventListener('change', function () { S.touched['fcc-rails'] = true; });\n    get('fcc-height').addEventListener('input', function () { applyAuto(); syncPresets(); renderPrices(); });\n    get('fcc-height-presets').addEventListener('click', function (e) {\n        if (!e.target.dataset.ft) return;\n        var ft = parseFloat(e.target.dataset.ft);\n        get('fcc-height').value = S.metric ? rnd(ft * FT, 1) : ft;\n        applyAuto(); syncPresets(); renderPrices();\n    });\n    get('fcc-postsel').addEventListener('change', function () { applyAuto(); renderPrices(); });\n    get('fcc-bag').addEventListener('change', renderPrices);\n    get('fcc-type').addEventListener('change', function () { S.type = get('fcc-type').value; setTypeDefaults(); hideResults(); });\n    get('fcc-layout').addEventListener('change', function () { get('fcc-gap-field').classList.toggle('fcc-hide', get('fcc-layout').value === 'bob'); });\n    get('fcc-cost').addEventListener('change', function () { get('fcc-cost-box').classList.toggle('fcc-hide', !get('fcc-cost').checked); });\n\n    if (!LOC.metricOnly) get('fcc-unit-toggle').onclick = function (e) {\n        var m = e.target.dataset.unit;\n        if (!m) return;\n        var toMetric = m === 'metric';\n        if (toMetric === S.metric) return;\n        var lenFn = toMetric ? function (v) { return rnd(v * FT, 2); } : function (v) { return rnd(v \/ FT, 1); };\n        var inFn = toMetric ? function (v) { return rnd(v * CM, 1); } : function (v) { return rnd(v \/ CM, 2); };\n        var conv = function (id, fn) { var el = get(id), v = parseFloat(el.value); if (!isNaN(v)) el.value = fn(v); };\n        \/\/ fields that still hold the starting value switch to the starting value of the other system\n        var pairs = { 'fcc-gatew': [4, 1.2], 'fcc-pw': [5.5, 14], 'fcc-gap': [0.5, 1] };\n        Object.keys(pairs).forEach(function (id) {\n            var el = get(id), v = parseFloat(el.value), p = pairs[id];\n            if (isNaN(v)) return;\n            if (Math.abs(v - p[S.metric ? 1 : 0]) < 1e-6) el.value = p[toMetric ? 1 : 0];\n            else el.value = (id === 'fcc-gatew' ? lenFn : inFn)(v);\n        });\n        var h = heightFt();\n        var hp = null;\n        PRESETS_FT.forEach(function (ft) { if (Math.abs(ft - h) < 0.15) hp = ft; });\n        if (hp !== null) get('fcc-height').value = toMetric ? rnd(hp * FT, 1) : hp;\n        else conv('fcc-height', lenFn);\n        Array.prototype.forEach.call(document.querySelectorAll('#fcc-runs .fcc-run-in'), function (el) { var v = parseFloat(el.value); if (!isNaN(v)) el.value = lenFn(v); });\n        var spTouched = S.touched['fcc-spacing'];\n        if (spTouched) conv('fcc-spacing', lenFn);\n        ['fcc-hole', 'fcc-depth'].forEach(function (id) { if (S.touched[id]) conv(id, inFn); });\n        S.metric = toMetric;\n        if (!spTouched) get('fcc-spacing').value = toMetric ? curType().spacingM : curType().spacing;\n        syncUnitLabels();\n        applyAuto();\n        syncPresets(); renderPrices(); hideResults();\n    };\n\n    \/\/ ---------------------------------------------------------------- results\n    var hideResults = function () { get('fcc-result-area').classList.remove('fcc-visible'); };\n    var showError = function (msg) {\n        var err = get('fcc-error-msg');\n        err.textContent = msg;\n        err.classList.add('fcc-visible');\n        hideResults();\n    };\n    var card = function (label, amount, sub) {\n        return '<div class=\"fcc-result-card\"><p class=\"fcc-result-label\">' + label + '<\/p><div class=\"fcc-result-amount\">' + amount + '<\/div><p class=\"fcc-result-sub\">' + sub + '<\/p><\/div>';\n    };\n\n    var readCfg = function () {\n        var runs = Array.prototype.map.call(document.querySelectorAll('#fcc-runs .fcc-run-in'), function (el) { var v = parseFloat(el.value); return isNaN(v) ? 0 : toFt(v); });\n        var labor = parseFloat(get('fcc-labor').value) || 0;\n        return {\n            type: S.type, runs: runs, closed: get('fcc-closed').checked,\n            gates: parseInt(get('fcc-gates').value, 10) || 0, gateW: toFt(val('fcc-gatew')),\n            attach: parseInt(get('fcc-attach').value, 10) || 0,\n            hFt: heightFt(), spacingFt: toFt(val('fcc-spacing')),\n            postWIn: postWIn(), holeDIn: toIn(val('fcc-hole')), depthIn: toIn(val('fcc-depth')),\n            gravel: get('fcc-gravel').checked, bagYield: bagYield(),\n            rails: parseInt(get('fcc-rails').value, 10) || 2,\n            pwIn: toIn(val('fcc-pw')), gapIn: toIn(isNaN(val('fcc-gap')) ? 0 : val('fcc-gap')), bob: get('fcc-layout').value === 'bob',\n            wastePct: parseFloat(get('fcc-waste').value) || 0, metric: S.metric,\n            laborPerFt: get('fcc-cost').checked ? (S.metric ? labor * FT : labor) : 0,\n            prices: get('fcc-cost').checked ? readPrices() : {}\n        };\n    };\n\n    var postLabel = function () {\n        var T0 = curType();\n        if (T0.wood) return S.metric ? (isLarge() ? T.postL_met : T.postS_met) : (isLarge() ? '6x6' : '4x4');\n        return t('postType_' + S.type);\n    };\n    var itemRow = function (it, r, c) {\n        var spec = '', label = '';\n        var buy = r.info.buyFt;\n        var vol = function (ft3) { return S.metric ? nf(rnd(ft3 * 28.3168, 0), 0) + NB + 'L' : rnd(ft3, 1) + ' cu ft'; };\n        if (it.key === 'post') {\n            label = t('l_post');\n            spec = t('s_post', { post: postLabel(), len: fLen(buy), depth: fIn(c.depthIn) });\n        } else if (it.key === 'lpost') { label = t('l_lpost'); spec = t('s_lpost', { len: fLen(buy), depth: fIn(c.depthIn) });\n        } else if (it.key === 'tpost') { label = t('l_tpost'); spec = t('s_tpost', { len: fLen(buy) });\n        } else if (it.key === 'rail') {\n            label = S.type === 'chain' ? t('l_toprail') : t('l_rail');\n            spec = S.type === 'chain' ? t('s_toprail') : t('s_rail', { pre: S.metric ? T.railPreMet : T.railPreImp, len: fLen(r.info.railBuyFt), n: c.rails });\n        } else if (it.key === 'picket') {\n            label = t('l_picket');\n            spec = c.bob ? t('s_bob', { w: fIn(c.pwIn) }) : t('s_picket', { w: fIn(c.pwIn), g: fIn(c.gapIn) });\n        } else if (it.key === 'fasteners') { label = t('l_fasteners'); spec = t('s_fasteners');\n        } else if (it.key === 'panel') { label = t('l_panel'); spec = t('s_panel', { w: fLen(c.spacingFt), h: fLen(c.hFt) });\n        } else if (it.key === 'fabric') { label = t('l_fabric'); spec = t('s_fabric', { h: fLen(c.hFt) });\n        } else if (it.key === 'tbar') { label = t('l_tbar'); spec = t('s_tbar');\n        } else if (it.key === 'tband') { label = t('l_tband'); spec = t('s_tband', { n: Math.max(2, Math.ceil(c.hFt - 0.001) - 1) });\n        } else if (it.key === 'bband') { label = t('l_bband'); spec = t('s_bband');\n        } else if (it.key === 'strut') { label = t('l_strut'); spec = t('s_strut');\n        } else if (it.key === 'wire') { label = t('l_wire'); spec = t('s_wire', { n: it.lines });\n        } else if (it.key === 'cap') { label = t('l_cap'); spec = t('s_cap');\n        } else if (it.key === 'ties') { label = t('l_ties'); var euChain = LOC.model ? LOC.model.eu : false; spec = S.type === 'chain' ? (euChain ? t('s_ties_eu') : t('s_ties')) : t('s_ties');\n        } else if (it.key === 'concrete') { label = t('l_concrete'); spec = t('s_concrete', { bag: bagLabel(), vol: vol(it.ft3) });\n        } else if (it.key === 'gravel') { label = t('l_gravel'); spec = t('s_gravel', { vol: vol(it.ft3) });\n        } else if (it.key === 'gate') { label = t('l_gate'); spec = t('s_gate', { w: fLen(c.gateW) }); }\n        return { label: label, spec: spec };\n    };\n\n    var calc = function () {\n        var err = get('fcc-error-msg');\n        err.classList.remove('fcc-visible');\n        err.textContent = '';\n        var c = readCfg();\n        var r = M.model(c);\n        if (r.err) { showError(t('err_' + r.err)); return; }\n        var cost = get('fcc-cost').checked;\n\n        \/\/ cost \/ summary cards\n        var grid = get('fcc-result-grid');\n        var unitLen = S.metric ? 'm' : 'ft';\n        var totalDisp = S.metric ? rnd(r.totalLen * FT, 1) : rnd(r.totalLen, 1);\n        var forLen = t('forLen', { n: nf(totalDisp, 1), u: unitLen });\n        if (cost) {\n            var perDisp = S.metric ? r.perFt \/ FT : r.perFt;\n            var subCost = c.laborPerFt > 0 ? t('matLabor', { a: money0(r.materials), b: money0(r.labor) }) : t('matOnly');\n            grid.innerHTML = card(t('estCost'), '<span>' + money0(r.total) + '<\/span>', subCost) +\n                card(S.metric ? t('costPerM') : t('costPerFt'), '<span>' + money(perDisp) + '<\/span>', forLen);\n        } else {\n            grid.innerHTML = card(t('cardPosts'), '<span>' + num(r.posts.total) + '<\/span>', forLen) +\n                card(S.type === 'picket' || S.type === 'chain' ? t('cardSections') : t('cardPanels'), '<span>' + num(r.sections) + '<\/span>', t('cardBetween'));\n        }\n\n        \/\/ post breakdown\n        var pb = [];\n        if (r.posts.line) pb.push(t('pLine', { n: r.posts.line }));\n        if (r.posts.corner) pb.push(t('pCorner', { n: r.posts.corner }));\n        if (r.posts.end) pb.push(t('pEnd', { n: r.posts.end }));\n        if (r.posts.gate) pb.push(t('pGate', { n: r.posts.gate }));\n        var gtxt = c.gates ? t(c.gates > 1 ? 'gatesMany' : 'gatesOne', { n: c.gates }) : '';\n        get('fcc-postline').textContent = t('postLine', { total: num(r.posts.total), parts: pb.join(', '), sections: num(r.sections), gates: gtxt });\n\n        \/\/ shopping list\n        var head = '<tr><th>' + t('thItem') + '<\/th><th>' + t('thQty') + '<\/th><th>' + t('thDetails') + '<\/th>' + (cost ? '<th>' + t('thEach') + '<\/th><th>' + t('thCost') + '<\/th>' : '') + '<\/tr>';\n        var body = r.items.map(function (it) {\n            var d = itemRow(it, r, c);\n            return '<tr><td><strong>' + d.label + '<\/strong><\/td><td class=\"fcc-qty\">' + num(it.qty) + '<\/td><td class=\"fcc-spec\">' + d.spec + '<\/td>' +\n                (cost ? '<td class=\"fcc-price\">' + money(it.price) + '<\/td><td class=\"fcc-price\">' + money(it.cost) + '<\/td>' : '') + '<\/tr>';\n        }).join('');\n        var foot = '';\n        if (cost) {\n            var span = 4;\n            foot = '<tr class=\"fcc-total-row\"><td colspan=\"' + span + '\">' + t('matSub') + '<\/td><td class=\"fcc-price\">' + money(r.materials) + '<\/td><\/tr>';\n            if (r.labor > 0) foot += '<tr class=\"fcc-total-row\"><td colspan=\"' + span + '\">' + t('labor') + '<\/td><td class=\"fcc-price\">' + money(r.labor) + '<\/td><\/tr>' +\n                '<tr class=\"fcc-total-row\"><td colspan=\"' + span + '\">' + t('total') + '<\/td><td class=\"fcc-price\">' + money(r.total) + '<\/td><\/tr>';\n        }\n        get('fcc-list').innerHTML = '<table class=\"fcc-table\"><thead>' + head + '<\/thead><tbody>' + body + foot + '<\/tbody><\/table>';\n\n        \/\/ notes and warnings\n        var w = [];\n        var hM = c.hFt * FT;\n        if (S.type === 'picket') { if (c.wastePct > 0) w.push(t('w_waste', { n: c.wastePct })); }\n        if (c.hFt > LOC.tallFt + 0.01) w.push(t('w_tall'));\n        if (S.type === 'picket') { if (c.spacingFt > LOC.maxSpacingFt + 0.01) w.push(t('w_spacing')); }\n        if (c.gates > 0) { if (c.gateW > LOC.wideGateFt + 0.01) w.push(t('w_gate')); }\n        if (c.attach > 0) w.push(t(c.attach > 1 ? 'w_attach2' : 'w_attach1'));\n        var shallow = c.depthIn < 23.5;\n        if (shallow) shallow = c.hFt >= 4;\n        if (shallow) w.push(t('w_shallow'));\n        if (get('fcc-pool').checked) {\n            var pool = t('w_pool');\n            var low = LOC.poolMinM ? hM < LOC.poolMinM - 0.005 : false;\n            if (low) pool = t('w_poolLow', { h: nf(LOC.poolMinM, 2) }) + ' ' + pool;\n            var wideGap = S.type === 'picket' ? !c.bob : false;\n            if (wideGap) wideGap = c.gapIn * CM >= LOC.poolGapCm - 0.05;\n            if (wideGap) pool = t('w_poolGap') + ' ' + pool;\n            w.push(pool);\n        }\n        var wb = get('fcc-warn');\n        wb.innerHTML = w.map(function (m) { return '<span>' + m + '<\/span>'; }).join('');\n        wb.classList.toggle('fcc-visible', w.length > 0);\n\n        get('fcc-algebra').textContent = t('algebra', {\n            sp: fLen(c.spacingFt), gates: c.gates ? t('alg_gates') : '', sections: r.sections, segments: r.segments,\n            loop: r.closed ? t('alg_loop') : '+ 1', wall: c.attach ? t(c.attach > 1 ? 'alg_wall2' : 'alg_wall1', { n: c.attach }) : '', posts: r.posts.total\n        });\n\n        get('fcc-result-area').classList.add('fcc-visible');\n        get('fcc-result-area').scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n    };\n\n    \/\/ ---------------------------------------------------------------- reset\n    var resetAll = function () {\n        S.metric = !!LOC.metricOnly; S.type = 'picket'; S.touched = {}; S.pTouched = {}; S.pVals = {};\n        get('fcc-type').value = 'picket';\n        runsEl.innerHTML = '';\n        addRun(S.metric ? (LOC.runDefM || 30) : 100);\n        get('fcc-closed').checked = false;\n        get('fcc-gates').value = '0';\n        get('fcc-gatew').value = S.metric ? (LOC.gateWM || 1.2) : '4';\n        get('fcc-attach').value = '0';\n        get('fcc-height').value = S.metric ? (LOC.hDefM || 1.8) : '6';\n        get('fcc-layout').value = 'spaced';\n        get('fcc-pw').value = S.metric ? '14' : '5.5';\n        get('fcc-gap').value = S.metric ? '1' : '0.5';\n        get('fcc-gap-field').classList.remove('fcc-hide');\n        get('fcc-gravel').checked = true;\n        get('fcc-waste').value = '10';\n        get('fcc-pool').checked = false;\n        get('fcc-cost').checked = true;\n        get('fcc-cost-box').classList.remove('fcc-hide');\n        get('fcc-labor').value = '';\n        get('fcc-postsel').innerHTML = '';\n        get('fcc-bag').innerHTML = '';\n        syncUnitLabels();\n        get('fcc-postsel').value = 's';\n        setTypeDefaults();\n        syncPresets();\n        var err = get('fcc-error-msg');\n        err.classList.remove('fcc-visible');\n        err.textContent = '';\n        get('fcc-warn').classList.remove('fcc-visible');\n        hideResults();\n    };\n\n    get('fcc-calculate-btn').onclick = calc;\n    get('fcc-reset-btn').onclick = function () { resetAll(); var f = get('fcc-run-1'); if (f) f.focus(); };\n    buildPresets();\n    resetAll();\n\n})();<\/script>\n\n\n\n<style>\n  #fence-reference-table { max-width: 860px; margin: 2.5rem auto; font-family: 'Inter', system-ui, sans-serif; color: #2c3e50; scroll-margin-top: 80px; }\n  #fence-reference-table h2 { font-size: 1.5rem; font-weight: 700; color: #17a8b0; margin: 0 0 8px; }\n  #fence-reference-table h3 { font-size: 1.1rem; font-weight: 700; color: #5b4ab8; margin: 28px 0 6px; }\n  #fence-reference-table .fct-subtitle { font-size: 0.9rem; color: #5a6c7d; margin: 0 0 16px; line-height: 1.5; }\n  #fence-reference-table .fct-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; border: 1px solid #e0e5eb; border-radius: 14px; box-shadow: 0 4px 16px rgba(0,0,0,0.04); }\n  #fence-reference-table .fct-table { width: 100%; border-collapse: collapse; font-size: 0.88rem; min-width: 520px; }\n  #fence-reference-table .fct-table thead th { background: linear-gradient(135deg, #1ecad3, #9486f7); color: #fff; font-weight: 600; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.05em; padding: 12px 10px; text-align: center; white-space: nowrap; }\n  #fence-reference-table .fct-table thead th:first-child { border-radius: 13px 0 0 0; text-align: left; }\n  #fence-reference-table .fct-table thead th:last-child { border-radius: 0 13px 0 0; }\n  #fence-reference-table .fct-table tbody td { padding: 10px; border-bottom: 1px solid #eef1f5; vertical-align: middle; text-align: center; }\n  #fence-reference-table .fct-table tbody tr:nth-child(even) { background: #fafcfd; }\n  #fence-reference-table .fct-table tbody tr:hover { background: #e8fafb; }\n  #fence-reference-table .fct-vol { font-weight: 600; color: #2c3e50; white-space: nowrap; text-align: left; }\n  #fence-reference-table .fct-num { font-weight: 700; color: #0f8c94; white-space: nowrap; }\n  #fence-reference-table .fct-acid { font-weight: 600; color: #5b4ab8; white-space: nowrap; }\n  #fence-reference-table .fct-note { margin-top: 12px; font-size: 0.8rem; color: #8899a6; line-height: 1.5; }\n  @media (max-width: 500px) {\n    #fence-reference-table { padding: 0 6px; }\n    #fence-reference-table .fct-table { font-size: 0.78rem; min-width: 460px; }\n    #fence-reference-table .fct-table thead th { padding: 8px 6px; font-size: 0.65rem; }\n    #fence-reference-table .fct-table tbody td { padding: 7px 6px; }\n  }\n<\/style>\n<div id=\"fence-reference-table\">\n  <h2>Zaun-Materialtabelle: Pfosten, Latten und Beton nach Zaunl\u00e4nge<\/h2>\n  <p class=\"fct-subtitle\">Schlagen Sie Ihre Zaunl\u00e4nge nach und sehen Sie sofort die Mengen. Alle Tabellen folgen denselben Regeln wie der Rechner oben, f\u00fcr einen geraden Zaun mit je einem Pfosten an beiden Enden, ohne Tore und ohne Zuschlag f\u00fcr Verschnitt. F\u00fcr Ecken, Tore oder eigene Ma\u00dfe nutzen Sie den Rechner.<\/p>\n\n  <h3>Wie viele Pfosten, Riegel und Latten f\u00fcr einen Zaun, nach L\u00e4nge (1,80 m Holz-Sichtschutzzaun)<\/h3>\n  <div class=\"fct-table-wrap\">\n    <table class=\"fct-table\">\n      <thead><tr><th>Zaunl\u00e4nge<\/th><th>Felder<\/th><th>Pfosten<\/th><th>Riegel (2,5 m)<\/th><th>Latten (14 cm)<\/th><th>Beton (25-kg-S\u00e4cke)<\/th><\/tr><\/thead>\n      <tbody>\n        <tr><td class=\"fct-vol\">5\u00a0m<\/td><td class=\"fct-num\">2<\/td><td class=\"fct-num\">3<\/td><td class=\"fct-num\">6<\/td><td class=\"fct-num\">34<\/td><td class=\"fct-acid\">5<\/td><\/tr><tr><td class=\"fct-vol\">10\u00a0m<\/td><td class=\"fct-num\">4<\/td><td class=\"fct-num\">5<\/td><td class=\"fct-num\">12<\/td><td class=\"fct-num\">67<\/td><td class=\"fct-acid\">8<\/td><\/tr><tr><td class=\"fct-vol\">15\u00a0m<\/td><td class=\"fct-num\">6<\/td><td class=\"fct-num\">7<\/td><td class=\"fct-num\">18<\/td><td class=\"fct-num\">100<\/td><td class=\"fct-acid\">11<\/td><\/tr><tr><td class=\"fct-vol\">20\u00a0m<\/td><td class=\"fct-num\">8<\/td><td class=\"fct-num\">9<\/td><td class=\"fct-num\">24<\/td><td class=\"fct-num\">134<\/td><td class=\"fct-acid\">15<\/td><\/tr><tr><td class=\"fct-vol\">25\u00a0m<\/td><td class=\"fct-num\">10<\/td><td class=\"fct-num\">11<\/td><td class=\"fct-num\">30<\/td><td class=\"fct-num\">167<\/td><td class=\"fct-acid\">18<\/td><\/tr><tr><td class=\"fct-vol\">30\u00a0m<\/td><td class=\"fct-num\">12<\/td><td class=\"fct-num\">13<\/td><td class=\"fct-num\">36<\/td><td class=\"fct-num\">200<\/td><td class=\"fct-acid\">21<\/td><\/tr><tr><td class=\"fct-vol\">40\u00a0m<\/td><td class=\"fct-num\">16<\/td><td class=\"fct-num\">17<\/td><td class=\"fct-num\">48<\/td><td class=\"fct-num\">267<\/td><td class=\"fct-acid\">27<\/td><\/tr><tr><td class=\"fct-vol\">50\u00a0m<\/td><td class=\"fct-num\">20<\/td><td class=\"fct-num\">21<\/td><td class=\"fct-num\">60<\/td><td class=\"fct-num\">334<\/td><td class=\"fct-acid\">33<\/td><\/tr><tr><td class=\"fct-vol\">75\u00a0m<\/td><td class=\"fct-num\">30<\/td><td class=\"fct-num\">31<\/td><td class=\"fct-num\">90<\/td><td class=\"fct-num\">500<\/td><td class=\"fct-acid\">49<\/td><\/tr><tr><td class=\"fct-vol\">100\u00a0m<\/td><td class=\"fct-num\">40<\/td><td class=\"fct-num\">41<\/td><td class=\"fct-num\">120<\/td><td class=\"fct-num\">667<\/td><td class=\"fct-acid\">65<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n  <p class=\"fct-note\">Berechnet mit 2,5 m Pfostenabstand, 3 Riegeln pro Feld, 9 \u00d7 9 cm Pfosten, 14 cm breiten Latten mit 1 cm Abstand sowie einem Loch von 25 cm Durchmesser und 60 cm Tiefe mit 15 cm Kiesschicht. Rechnen Sie bei Latten und Riegeln etwa 10 % Verschnitt dazu.<\/p>\n\n  <h3>Wie viele Zaunpfosten Sie brauchen, nach L\u00e4nge und Pfostenabstand<\/h3>\n  <div class=\"fct-table-wrap\">\n    <table class=\"fct-table\">\n      <thead><tr><th>Zaunl\u00e4nge<\/th><th>1,8 m Abstand<\/th><th>2,0 m Abstand<\/th><th>2,4 m Abstand<\/th><th>2,5 m Abstand<\/th><th>3,0 m Abstand<\/th><\/tr><\/thead>\n      <tbody>\n        <tr><td class=\"fct-vol\">5\u00a0m<\/td><td class=\"fct-num\">4<\/td><td class=\"fct-num\">4<\/td><td class=\"fct-num\">4<\/td><td class=\"fct-num\">3<\/td><td class=\"fct-num\">3<\/td><\/tr><tr><td class=\"fct-vol\">10\u00a0m<\/td><td class=\"fct-num\">7<\/td><td class=\"fct-num\">6<\/td><td class=\"fct-num\">6<\/td><td class=\"fct-num\">5<\/td><td class=\"fct-num\">5<\/td><\/tr><tr><td class=\"fct-vol\">15\u00a0m<\/td><td class=\"fct-num\">10<\/td><td class=\"fct-num\">9<\/td><td class=\"fct-num\">8<\/td><td class=\"fct-num\">7<\/td><td class=\"fct-num\">6<\/td><\/tr><tr><td class=\"fct-vol\">20\u00a0m<\/td><td class=\"fct-num\">13<\/td><td class=\"fct-num\">11<\/td><td class=\"fct-num\">10<\/td><td class=\"fct-num\">9<\/td><td class=\"fct-num\">8<\/td><\/tr><tr><td class=\"fct-vol\">25\u00a0m<\/td><td class=\"fct-num\">15<\/td><td class=\"fct-num\">14<\/td><td class=\"fct-num\">12<\/td><td class=\"fct-num\">11<\/td><td class=\"fct-num\">10<\/td><\/tr><tr><td class=\"fct-vol\">30\u00a0m<\/td><td class=\"fct-num\">18<\/td><td class=\"fct-num\">16<\/td><td class=\"fct-num\">14<\/td><td class=\"fct-num\">13<\/td><td class=\"fct-num\">11<\/td><\/tr><tr><td class=\"fct-vol\">40\u00a0m<\/td><td class=\"fct-num\">24<\/td><td class=\"fct-num\">21<\/td><td class=\"fct-num\">18<\/td><td class=\"fct-num\">17<\/td><td class=\"fct-num\">15<\/td><\/tr><tr><td class=\"fct-vol\">50\u00a0m<\/td><td class=\"fct-num\">29<\/td><td class=\"fct-num\">26<\/td><td class=\"fct-num\">22<\/td><td class=\"fct-num\">21<\/td><td class=\"fct-num\">18<\/td><\/tr><tr><td class=\"fct-vol\">75\u00a0m<\/td><td class=\"fct-num\">43<\/td><td class=\"fct-num\">39<\/td><td class=\"fct-num\">33<\/td><td class=\"fct-num\">31<\/td><td class=\"fct-num\">26<\/td><\/tr><tr><td class=\"fct-vol\">100\u00a0m<\/td><td class=\"fct-num\">57<\/td><td class=\"fct-num\">51<\/td><td class=\"fct-num\">43<\/td><td class=\"fct-num\">41<\/td><td class=\"fct-num\">35<\/td><\/tr><tr><td class=\"fct-vol\">150\u00a0m<\/td><td class=\"fct-num\">85<\/td><td class=\"fct-num\">76<\/td><td class=\"fct-num\">64<\/td><td class=\"fct-num\">61<\/td><td class=\"fct-num\">51<\/td><\/tr><tr><td class=\"fct-vol\">200\u00a0m<\/td><td class=\"fct-num\">113<\/td><td class=\"fct-num\">101<\/td><td class=\"fct-num\">85<\/td><td class=\"fct-num\">81<\/td><td class=\"fct-num\">68<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n  <p class=\"fct-note\">Pfosten = Zaunl\u00e4nge geteilt durch den Abstand, aufgerundet, plus eins. Holz-Lattenz\u00e4une haben meist 2 bis 2,5 m Abstand, Holz- und Kunststoffelemente sind oft 1,8 m breit, Doppelstabmatten 2,5 m, bei Maschendraht stehen die Zwischenpfosten etwa alle 2,5 m.<\/p>\n\n  <h3>Wie viel Beton pro Zaunpfosten: S\u00e4cke nach Lochgr\u00f6\u00dfe<\/h3>\n  <div class=\"fct-table-wrap\">\n    <table class=\"fct-table\">\n      <thead><tr><th>Pfosten<\/th><th>Loch (Durchmesser \u00d7 Tiefe)<\/th><th>Beton (Liter)<\/th><th>20-kg-S\u00e4cke<\/th><th>25-kg-S\u00e4cke<\/th><th>40-kg-S\u00e4cke<\/th><\/tr><\/thead>\n      <tbody>\n        <tr><td class=\"fct-vol\">9 \u00d7 9 cm<\/td><td class=\"fct-num\">20 \u00d7 60\u00a0cm<\/td><td class=\"fct-num\">10<\/td><td class=\"fct-acid\">1,1<\/td><td class=\"fct-acid\">0,9<\/td><td class=\"fct-acid\">0,6<\/td><\/tr><tr><td class=\"fct-vol\">9 \u00d7 9 cm<\/td><td class=\"fct-num\">25 \u00d7 60\u00a0cm<\/td><td class=\"fct-num\">18<\/td><td class=\"fct-acid\">2,0<\/td><td class=\"fct-acid\">1,6<\/td><td class=\"fct-acid\">1,0<\/td><\/tr><tr><td class=\"fct-vol\">9 \u00d7 9 cm<\/td><td class=\"fct-num\">25 \u00d7 80\u00a0cm<\/td><td class=\"fct-num\">27<\/td><td class=\"fct-acid\">2,8<\/td><td class=\"fct-acid\">2,3<\/td><td class=\"fct-acid\">1,4<\/td><\/tr><tr><td class=\"fct-vol\">9 \u00d7 9 cm<\/td><td class=\"fct-num\">30 \u00d7 80\u00a0cm<\/td><td class=\"fct-num\">41<\/td><td class=\"fct-acid\">4,3<\/td><td class=\"fct-acid\">3,5<\/td><td class=\"fct-acid\">2,2<\/td><\/tr><tr><td class=\"fct-vol\">12 \u00d7 12 cm<\/td><td class=\"fct-num\">30 \u00d7 80\u00a0cm<\/td><td class=\"fct-num\">36<\/td><td class=\"fct-acid\">3,9<\/td><td class=\"fct-acid\">3,1<\/td><td class=\"fct-acid\">1,9<\/td><\/tr><tr><td class=\"fct-vol\">12 \u00d7 12 cm<\/td><td class=\"fct-num\">30 \u00d7 100\u00a0cm<\/td><td class=\"fct-num\">48<\/td><td class=\"fct-acid\">5,1<\/td><td class=\"fct-acid\">4,1<\/td><td class=\"fct-acid\">2,5<\/td><\/tr><tr><td class=\"fct-vol\">12 \u00d7 12 cm<\/td><td class=\"fct-num\">35 \u00d7 100\u00a0cm<\/td><td class=\"fct-num\">69<\/td><td class=\"fct-acid\">7,4<\/td><td class=\"fct-acid\">5,9<\/td><td class=\"fct-acid\">3,7<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n  <p class=\"fct-note\">S\u00e4cke pro Pfosten f\u00fcr ein Loch, mit abgezogenem Pfostenvolumen und 15 cm Kiesschicht darunter. Ein 25-kg-Sack ergibt etwa 12 Liter Beton. Runden Sie die Gesamtmenge f\u00fcr den ganzen Zaun auf. Ohne Kiesschicht brauchen Sie bei einem Pfosten 9 \u00d7 9 cm im Loch 25 \u00d7 60 cm etwa 2,1 S\u00e4cke \u00e0 25 kg.<\/p>\n\n  <h3>Wie tief und wie lang m\u00fcssen Zaunpfosten sein, nach Zaunh\u00f6he<\/h3>\n  <div class=\"fct-table-wrap\">\n    <table class=\"fct-table\">\n      <thead><tr><th>Zaunh\u00f6he<\/th><th>Lochtiefe<\/th><th>N\u00f6tige Pfostenl\u00e4nge<\/th><th>Handels\u00fcbliche Pfostenl\u00e4nge<\/th><th>Riegel pro Feld<\/th><\/tr><\/thead>\n      <tbody>\n        <tr><td class=\"fct-vol\">1,0\u00a0m<\/td><td class=\"fct-num\">60\u00a0cm<\/td><td class=\"fct-num\">1,60\u00a0m<\/td><td class=\"fct-num\">1,8\u00a0m<\/td><td class=\"fct-acid\">2<\/td><\/tr><tr><td class=\"fct-vol\">1,2\u00a0m<\/td><td class=\"fct-num\">60\u00a0cm<\/td><td class=\"fct-num\">1,80\u00a0m<\/td><td class=\"fct-num\">1,8\u00a0m<\/td><td class=\"fct-acid\">2<\/td><\/tr><tr><td class=\"fct-vol\">1,5\u00a0m<\/td><td class=\"fct-num\">60\u00a0cm<\/td><td class=\"fct-num\">2,10\u00a0m<\/td><td class=\"fct-num\">2,1\u00a0m<\/td><td class=\"fct-acid\">3<\/td><\/tr><tr><td class=\"fct-vol\">1,8\u00a0m<\/td><td class=\"fct-num\">60\u00a0cm<\/td><td class=\"fct-num\">2,40\u00a0m<\/td><td class=\"fct-num\">2,4\u00a0m<\/td><td class=\"fct-acid\">3<\/td><\/tr><tr><td class=\"fct-vol\">2,0\u00a0m<\/td><td class=\"fct-num\">75\u00a0cm<\/td><td class=\"fct-num\">2,75\u00a0m<\/td><td class=\"fct-num\">3,0\u00a0m<\/td><td class=\"fct-acid\">4<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n  <p class=\"fct-note\">Die Tiefe betr\u00e4gt etwa ein Drittel der Zaunh\u00f6he, mindestens 60 cm. Die Pfostenl\u00e4nge ist Zaunh\u00f6he plus Lochtiefe. In kalten Regionen setzen Sie die Tiefe unterhalb der Frostgrenze an.<\/p>\n\n  <h3>Zaunkosten nach L\u00e4nge und Art (nur Material, 1,80 m hoch)<\/h3>\n  <div class=\"fct-table-wrap\">\n    <table class=\"fct-table\">\n      <thead><tr><th>Zaunl\u00e4nge<\/th><th>Holz-Lattenzaun<\/th><th>Holzelemente<\/th><th>Kunststoff<\/th><th>Doppelstabmatten<\/th><th>Maschendraht<\/th><\/tr><\/thead>\n      <tbody>\n        <tr><td class=\"fct-vol\">10\u00a0m<\/td><td class=\"fct-num\">393\u00a0\u20ac<\/td><td class=\"fct-num\">591\u00a0\u20ac<\/td><td class=\"fct-num\">1.097\u00a0\u20ac<\/td><td class=\"fct-num\">383\u00a0\u20ac<\/td><td class=\"fct-num\">162\u00a0\u20ac<\/td><\/tr><tr><td class=\"fct-vol\">20\u00a0m<\/td><td class=\"fct-num\">766\u00a0\u20ac<\/td><td class=\"fct-num\">1.162\u00a0\u20ac<\/td><td class=\"fct-num\">2.153\u00a0\u20ac<\/td><td class=\"fct-num\">747\u00a0\u20ac<\/td><td class=\"fct-num\">236\u00a0\u20ac<\/td><\/tr><tr><td class=\"fct-vol\">30\u00a0m<\/td><td class=\"fct-num\">1.131\u00a0\u20ac<\/td><td class=\"fct-num\">1.639\u00a0\u20ac<\/td><td class=\"fct-num\">3.033\u00a0\u20ac<\/td><td class=\"fct-num\">1.107\u00a0\u20ac<\/td><td class=\"fct-num\">343\u00a0\u20ac<\/td><\/tr><tr><td class=\"fct-vol\">50\u00a0m<\/td><td class=\"fct-num\">1.873\u00a0\u20ac<\/td><td class=\"fct-num\">2.682\u00a0\u20ac<\/td><td class=\"fct-num\">4.973\u00a0\u20ac<\/td><td class=\"fct-num\">1.835\u00a0\u20ac<\/td><td class=\"fct-num\">475\u00a0\u20ac<\/td><\/tr><tr><td class=\"fct-vol\">75\u00a0m<\/td><td class=\"fct-num\">2.794\u00a0\u20ac<\/td><td class=\"fct-num\">4.009\u00a0\u20ac<\/td><td class=\"fct-num\">7.437\u00a0\u20ac<\/td><td class=\"fct-num\">2.737\u00a0\u20ac<\/td><td class=\"fct-num\">698\u00a0\u20ac<\/td><\/tr><tr><td class=\"fct-vol\">100\u00a0m<\/td><td class=\"fct-num\">3.718\u00a0\u20ac<\/td><td class=\"fct-num\">5.340\u00a0\u20ac<\/td><td class=\"fct-num\">9.905\u00a0\u20ac<\/td><td class=\"fct-num\">3.643\u00a0\u20ac<\/td><td class=\"fct-num\">907\u00a0\u20ac<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n  <p class=\"fct-note\">Nur Material, f\u00fcr einen geraden Zaun ohne Tore, mit den Standardpreisen des Rechners (typische Baumarktpreise in Euro, die je nach Region und Saison abweichen). Montagekosten sind nicht enthalten. Tragen Sie im Rechner Ihre eigenen Preise ein, um eine \u00f6rtliche Sch\u00e4tzung zu erhalten.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">So z\u00e4hlt dieser Zaunrechner das Material<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Felder.<\/strong> Jede Zaunseite wird durch den Pfostenabstand geteilt und auf ganze Felder aufgerundet. Eine 10-m-Seite bei 2,5 m Abstand ergibt genau 4 Felder, eine 10,5-m-Seite 5 Felder. Tor\u00f6ffnungen werden zuerst von den l\u00e4ngsten Seiten abgezogen.<\/li><li><strong>Pfosten.<\/strong> Ein Zaun, der keinen Kreis schlie\u00dft, braucht einen Pfosten mehr als Felder. Ein geschlossener Kreis braucht genau einen Pfosten pro Feld. Jedes Tor bekommt zwei Torpfosten, und ein an die Wand befestigtes Ende braucht keinen Pfosten.<\/li><li><strong>Pfostenl\u00e4nge und Tiefe.<\/strong> Die Lochtiefe betr\u00e4gt etwa ein Drittel der Zaunh\u00f6he, mindestens 60 cm. Die Pfostenl\u00e4nge ist Zaunh\u00f6he plus Tiefe, aufgerundet auf die n\u00e4chste handels\u00fcbliche L\u00e4nge.<\/li><li><strong>Latten und Riegel.<\/strong> Die Latten ergeben sich aus der Zaunl\u00e4nge ohne Tore, geteilt durch Lattenbreite plus Abstand, aufgerundet. Die Riegel sind Riegel pro Feld mal Felder.<\/li><li><strong>Beton.<\/strong> Jedes Loch ist ein Zylinder, vom Volumen wird der Pfosten abgezogen. Eine Kiesschicht nimmt die untersten 15 cm ein, der Beton f\u00fcllt den Rest. Die S\u00e4cke werden f\u00fcr den ganzen Zaun aufgerundet.<\/li><li><strong>Kosten.<\/strong> Jede Menge wird mit dem Preis aus dem Preiseditor multipliziert. Montagekosten pro Meter kommen dazu, wenn Sie sie eingeben.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">H\u00e4ufige Fragen zum Zaunrechner<\/h2>\n\n\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1790200000000\"><strong class=\"schema-faq-question\">Wie ver\u00e4ndern Ecken und die Form des Zauns die Zahl der Pfosten?<\/strong> <p class=\"schema-faq-answer\">Die Form z\u00e4hlt, weil jede Seite f\u00fcr sich auf ganze Felder aufgerundet wird. Ein gerader Zaun von 24 m braucht bei 2,5 m Abstand 11 Pfosten, derselbe Zaun als geschlossenes Quadrat aus 6 m mal 6 m braucht 12. Geben Sie im Rechner jede Seite einzeln ein und setzen Sie den Haken bei geschlossenem Kreis, wenn der Zaun zum Ausgangspunkt zur\u00fcckkehrt.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790200017311\"><strong class=\"schema-faq-question\">M\u00fcssen alle Zaunpfosten einbetoniert werden?<\/strong> <p class=\"schema-faq-answer\">Eck-, End- und Torpfosten sollten immer einbetoniert werden, weil sie den Zug des Zauns oder das Gewicht des Tors tragen. Zwischenpfosten k\u00f6nnen in festem, gut drainierendem Boden auch in verdichtetem Kies stehen. In sandigem oder weichem Boden, bei hohen Sichtschutzz\u00e4unen mit viel Windlast und bei Kunststoff- oder Maschendrahtz\u00e4unen ist Beton die sichere Wahl. Der Rechner rechnet jeden Pfosten mit Beton und zeigt daher die h\u00f6here Menge.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790200034622\"><strong class=\"schema-faq-question\">Wie tief m\u00fcssen Zaunpfosten in kalten Regionen stehen?<\/strong> <p class=\"schema-faq-answer\">Setzen Sie sie unterhalb der \u00f6rtlichen Frostgrenze. Gefrierender Boden, der einen flachen Pfosten packt, hebt ihn jeden Winter ein St\u00fcck an. Tragen Sie die Frosttiefe Ihrer Region in das Feld f\u00fcr die Lochtiefe ein und behalten Sie die 15 cm Kiesschicht, damit Wasser vom Pfostenfu\u00df abl\u00e4uft. Die Frosttiefe erfahren Sie bei Ihrer Gemeinde oder Bauaufsicht.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790200051933\"><strong class=\"schema-faq-question\">Was kostet ein Zaun pro Meter?<\/strong> <p class=\"schema-faq-answer\">Der Rechner zeigt das Material zu den Preisen im Preiseditor. Tragen Sie ein, was Ihr Baumarkt f\u00fcr Pfosten, Latten oder Elemente und Beton verlangt, und erg\u00e4nzen Sie einen Montagepreis pro Meter, falls Sie ein Angebot haben. Ein Handwerkerangebot kann au\u00dferdem Genehmigung, Abbau eines alten Zauns, Entsorgung und Mehraufwand bei Hang oder steinigem Boden enthalten, was diese Sch\u00e4tzung nicht erfasst.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790200069244\"><strong class=\"schema-faq-question\">Wie berechne ich den Lattenabstand bei einem Zaun?<\/strong> <p class=\"schema-faq-answer\">F\u00fcr gleichm\u00e4\u00dfige Abst\u00e4nde teilen Sie die lichte Weite zwischen zwei Pfosten minus die Breite aller Latten durch die Zahl der Latten plus eins. Beispiel: 240 cm lichte Weite, 20 Latten \u00e0 9 cm, ergibt (240 \u2212 180) \u00f7 21, also rund 2,9 cm Abstand. Bei Sichtschutz lassen Sie 0,5 bis 1 cm, weil Holz beim Trocknen schwindet. W\u00e4hlen Sie im Rechner zweilagig \u00fcberlappend, wenn die Latten \u00fcber die Fugen greifen sollen, der Rechner nimmt dann 2,5 cm \u00dcberlappung an.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790200086555\"><strong class=\"schema-faq-question\">Wie baue ich einen Zaun am Hang?<\/strong> <p class=\"schema-faq-answer\">Messen Sie jede Seite entlang des Bodens mit einem Ma\u00dfband und nicht waagerecht. Dann gibt es zwei Verfahren. Beim Folgen des Hangs laufen die Felder mit dem Gef\u00e4lle, beim Abstufen bleibt jedes Feld waagerecht und unter der h\u00f6heren Seite entsteht ein Keil. W\u00e4hlen Sie bei steilen H\u00e4ngen 15 % Zuschlag und kaufen Sie f\u00fcr das untere Ende Pfosten, die eine L\u00e4nge l\u00e4nger sind, weil dort der Abstand zum Boden w\u00e4chst.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790200103866\"><strong class=\"schema-faq-question\">Was ist der Unterschied zwischen Zwischen-, Eck-, End- und Torpfosten?<\/strong> <p class=\"schema-faq-answer\">Zwischenpfosten halten den Zaun zwischen anderen Pfosten. Eck- und Endpfosten nehmen den Zug des Zauns auf einer Seite auf, deshalb brauchen sie das tiefste Fundament, und bei Maschendraht sind es st\u00e4rkere Pfosten mit Streben. Torpfosten tragen das Gewicht und den Schwung des Tors. F\u00fcr Tore \u00fcber 1,2 m Breite nehmen Sie einen Pfosten von 12 \u00d7 12 cm oder einen Stahlpfosten und setzen ihn in zus\u00e4tzlichen Beton, damit er nicht absackt.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790200121177\"><strong class=\"schema-faq-question\">Welche Vorgaben gelten f\u00fcr einen Pool-Zaun?<\/strong> <p class=\"schema-faq-answer\">H\u00f6he, \u00d6ffnungsweite und Tor sind in Deutschland nicht bundeseinheitlich geregelt, sondern h\u00e4ngen von der Bauordnung des Landes und der Gemeinde ab. Als Richtwert f\u00fcr Kinderschutz gelten \u00d6ffnungen unter 10 cm, keine Tritthilfen zum \u00dcberklettern und ein selbstschlie\u00dfendes, selbstverriegelndes Tor, das vom Pool weg aufgeht. Fragen Sie vor dem Bau bei der Bauaufsicht nach. Mit dem Haken beim Pool erhalten Sie zum Ergebnis einen Hinweis.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790200138488\"><strong class=\"schema-faq-question\">Brauche ich eine Genehmigung oder eine Leitungsauskunft, bevor ich einen Zaun baue?<\/strong> <p class=\"schema-faq-answer\">Holen Sie vor dem Graben eine Leitungsauskunft beim Netzbetreiber oder bei den Stadtwerken ein, damit Sie keine Leitung treffen. Ob ein Zaun genehmigungsfrei ist, h\u00e4ngt vom Bundesland, der H\u00f6he und dem Standort ab, etwa an der Stra\u00dfe oder im Au\u00dfenbereich. Zus\u00e4tzlich gelten Grenzabst\u00e4nde nach dem Nachbarrecht und die Vorgaben von Gemeinde oder Eigent\u00fcmergemeinschaft. Kl\u00e4ren Sie den genauen Grenzverlauf, bevor Sie Pfosten setzen.<\/p> <\/div><\/div>\n\n\n<!-- aiper-tool-links -->\n<div class=\"aiper-tool-links\">\n  <div class=\"aiper-tl-section\">\n    <div class=\"aiper-tl-heading\">Weitere Tools<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/de\/pflasterstein-rechner\/\" class=\"aiper-tl-tag\">Pflasterstein Rechner<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/de\/terrassenrechner\/\" class=\"aiper-tl-tag\">Terrassenrechner<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/de\/stuetzmauer-rechner\/\" class=\"aiper-tl-tag\">St\u00fctzmauer Rechner<\/a>\n    <\/div>\n  <\/div>\n  <div class=\"aiper-tl-section\">\n    <div class=\"aiper-tl-heading\">Verwandte Artikel<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/de\/pool-alkalitaet-senken\/\" class=\"aiper-tl-tag\">Pool-Alkalit\u00e4t senken: Was wirklich funktioniert<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/de\/kanadagaense-rasen-fernhalten\/\" class=\"aiper-tl-tag\">Kanadag\u00e4nse vom Rasen fernhalten: Was wirklich hilft<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/de\/pilze-im-rasen-loswerden\/\" class=\"aiper-tl-tag\">Pilze im Rasen loswerden: Was wirklich hilft<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/de\/rasen-vertikutieren-filz-erkennen-behandeln\/\" class=\"aiper-tl-tag\">Rasen vertikutieren: Filz erkennen und richtig behandeln<\/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>\n\n\n<p class=\"has-text-align-center aiper-last-updated has-small-font-size wp-block-paragraph\"><time datetime=\"2026-09-30\">Zuletzt aktualisiert: 30. September 2026<\/time><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser Zaunrechner ermittelt Pfosten, Riegel, Latten oder Zaunelemente, Beton und Kosten f\u00fcr einen Zaun aus Holz, Kunststoff, Metall (Doppelstabmatten) oder Maschendraht. Geben Sie jede Zaunseite einzeln ein, erg\u00e4nzen Sie Tore und erhalten Sie eine vollst\u00e4ndige Einkaufsliste mit Preissch\u00e4tzung. W\u00e4hlen Sie die Zaunart und geben Sie die Seiten ein. Die Startwerte beschreiben einen 20 m langen,&#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-2910","page","type-page","status-publish","hentry"],"lang":"de","translations":{"de":2910,"es":2915,"en":2908,"fr":2913},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/2910","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=2910"}],"version-history":[{"count":6,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/2910\/revisions"}],"predecessor-version":[{"id":11868,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/2910\/revisions\/11868"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=2910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}