{"id":2325,"date":"2026-07-27T07:57:23","date_gmt":"2026-07-27T05:57:23","guid":{"rendered":"https:\/\/cad-kompass.de\/?p=2325"},"modified":"2026-07-27T08:00:26","modified_gmt":"2026-07-27T06:00:26","slug":"profilkoerper-anbindung-ziele","status":"publish","type":"post","link":"https:\/\/cad-kompass.de\/?p=2325","title":{"rendered":"Profilk\u00f6rper-Anbindung &amp; Ziele"},"content":{"rendered":"\n<style>\n    .pa-box {\n        --pa-primary: #3f5f75;\n        --pa-primary-dark: #2c4a5e;\n        --pa-primary-deep: #1e3548;\n        --pa-ink: #1e293b;\n        --pa-text: #334155;\n        --pa-muted: #64748b;\n        --pa-border: #c8d6e0;\n        --pa-surface: #f7f9fb;\n        --pa-good: #059669;\n        --pa-good-deep: #15803d;\n        --pa-warn: #d97706;\n        --pa-warn-deep: #92700c;\n        --pa-warn-border: #f4cf81;\n        --pa-error: #dc2626;\n        --pa-accent: #e8913a;\n        background: var(--pa-surface);\n        border: 3px solid var(--pa-primary);\n        border-radius: 8px;\n        margin: 28px 0;\n        overflow: hidden;\n        position: relative;\n        font-family: inherit;\n        color: var(--pa-text);\n        line-height: 1.55;\n    }\n    .pa-box, .pa-box *, .pa-box *::before, .pa-box *::after { box-sizing: border-box; }\n\n    .pa-header {\n        background: linear-gradient(135deg, var(--pa-primary-deep) 0%, var(--pa-primary-dark) 100%);\n        padding: 20px 28px 18px;\n        position: relative;\n    }\n    .pa-header::after {\n        content: '';\n        position: absolute;\n        left: 0; right: 0; bottom: 0;\n        height: 3px;\n        background: repeating-linear-gradient(90deg, var(--pa-primary) 0px, var(--pa-primary) 8px, transparent 8px, transparent 12px);\n    }\n    .pa-header-top { display: flex; align-items: center; gap: 14px; }\n    .pa-header-icon { width: 36px; height: 36px; flex-shrink: 0; }\n    .pa-box-title { font-size: 1.15rem; color: #fff; font-weight: 700; margin: 0; letter-spacing: -0.01em; }\n    .pa-box-desc { font-size: 0.85rem; color: rgba(255,255,255,0.68); margin: 6px 0 0; line-height: 1.55; }\n\n    .pa-body { padding: 22px 28px 24px; }\n    .pa-privacy {\n        background: #f0fdf4;\n        border: 1px solid #bbf7d0;\n        border-radius: 3px;\n        padding: 9px 14px;\n        margin-bottom: 16px;\n        font-size: 0.8rem;\n        color: var(--pa-good-deep);\n        line-height: 1.5;\n        display: flex;\n        align-items: center;\n        gap: 8px;\n    }\n    .pa-privacy::before { content: '\\1F512'; flex-shrink: 0; font-size: 0.9rem; }\n    .pa-intro {\n        background: #f0f5fa;\n        border-left: 3px solid var(--pa-primary);\n        border-radius: 0 4px 4px 0;\n        padding: 11px 15px;\n        margin-bottom: 16px;\n        font-size: 0.86rem;\n        color: var(--pa-text);\n    }\n    .pa-intro strong { color: var(--pa-ink); }\n\n    .pa-section-label {\n        font-size: 0.66rem;\n        font-weight: 800;\n        text-transform: uppercase;\n        letter-spacing: 0.1em;\n        color: var(--pa-muted);\n        margin: 0 0 8px;\n    }\n    .pa-sub-title {\n        font-size: 0.72rem;\n        font-weight: 800;\n        color: var(--pa-primary);\n        text-transform: uppercase;\n        letter-spacing: 0.08em;\n        margin: 22px 0 9px;\n        padding-top: 16px;\n        border-top: 1px solid #e4ebf1;\n    }\n\n    .pa-verdict { border: 1px solid var(--pa-border); border-radius: 4px; background: #fff; padding: 12px 16px; margin-bottom: 14px; }\n    .pa-verdict.is-live { border-left: 3px solid var(--pa-primary); border-radius: 0 4px 4px 0; }\n    .pa-verdict-head { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }\n    .pa-verdict-title {\n        font-size: 0.66rem;\n        font-weight: 800;\n        text-transform: uppercase;\n        letter-spacing: 0.1em;\n        color: var(--pa-muted);\n    }\n    .pa-chip {\n        display: inline-flex;\n        align-items: center;\n        min-height: 22px;\n        padding: 2px 10px;\n        border-radius: 999px;\n        font-size: 0.72rem;\n        font-weight: 800;\n        background: #edf4f8;\n        border: 1px solid #cfe0ea;\n        color: var(--pa-primary-deep);\n        font-variant-numeric: tabular-nums;\n    }\n    .pa-chip.is-good { background: #f0fdf4; border-color: #bbf7d0; color: var(--pa-good-deep); }\n    .pa-chip.is-warn { background: #fffbeb; border-color: #f4cf81; color: var(--pa-warn-deep); }\n    .pa-chip.is-error { background: #fef2f2; border-color: #fac5c5; color: var(--pa-error); }\n    .pa-verdict-text { font-size: 0.85rem; line-height: 1.6; color: var(--pa-text); margin: 0; }\n    .pa-verdict-text strong { color: var(--pa-ink); }\n\n    .pa-svg-wrap {\n        border: 1px solid var(--pa-border);\n        border-radius: 4px;\n        background: #fff;\n        padding: 12px 14px 10px;\n        margin-bottom: 14px;\n    }\n    .pa-svg-wrap svg { width: 100%; height: auto; display: block; font-family: inherit; user-select: none; }\n\n    .pa-legend {\n        display: flex;\n        flex-wrap: wrap;\n        gap: 9px 14px;\n        align-items: center;\n        margin-top: 9px;\n        padding-top: 9px;\n        border-top: 1px solid #edf2f7;\n        font-size: 0.73rem;\n        color: var(--pa-muted);\n    }\n    .pa-legend-item { display: inline-flex; align-items: center; gap: 5px; }\n    .pa-line-swatch { width: 20px; height: 0; border-top: 3px solid currentColor; border-radius: 999px; }\n    .pa-line-swatch.is-dash {\n        height: 2px;\n        border-top: 0;\n        background: repeating-linear-gradient(90deg, currentColor 0 6px, transparent 6px 10px);\n    }\n    .pa-dot-swatch { width: 10px; height: 10px; border-radius: 50%; border: 2px solid currentColor; background: #fff; }\n    .pa-x-swatch { width: 11px; height: 11px; position: relative; }\n    .pa-x-swatch::before, .pa-x-swatch::after { content: ''; position: absolute; top: 4px; left: 0; width: 11px; height: 2px; background: currentColor; }\n    .pa-x-swatch::before { transform: rotate(45deg); }\n    .pa-x-swatch::after { transform: rotate(-45deg); }\n\n    .pa-controls {\n        border: 1px solid var(--pa-border);\n        border-radius: 4px;\n        background: var(--pa-surface);\n        padding: 14px 16px 16px;\n        display: grid;\n        grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n        gap: 14px 18px;\n        align-items: start;\n        margin-bottom: 14px;\n    }\n    .pa-control-block { min-width: 0; }\n    .pa-field { margin-bottom: 12px; padding-left: 9px; border-left: 3px solid var(--pa-border); }\n    .pa-field:last-child { margin-bottom: 0; }\n    .pa-field-label { display: flex; justify-content: space-between; gap: 8px; font-size: 0.76rem; font-weight: 800; color: var(--pa-ink); margin-bottom: 4px; }\n    .pa-field-unit { color: var(--pa-muted); font-size: 0.74rem; font-weight: 700; font-variant-numeric: tabular-nums; }\n\n    .pa-box .pa-range {\n        -webkit-appearance: none !important;\n        -moz-appearance: none !important;\n        appearance: none !important;\n        width: 100% !important;\n        height: 6px !important;\n        padding: 0 !important;\n        margin: 8px 0 2px !important;\n        background: #dbe4ec !important;\n        border: 0 !important;\n        border-radius: 3px !important;\n        outline: none !important;\n        box-shadow: none !important;\n        box-sizing: border-box !important;\n        accent-color: var(--pa-primary);\n    }\n    .pa-box .pa-range::-webkit-slider-runnable-track {\n        -webkit-appearance: none !important;\n        appearance: none !important;\n        height: 6px !important;\n        background: transparent !important;\n        border: 0 !important;\n        box-shadow: none !important;\n    }\n    .pa-box .pa-range::-webkit-slider-thumb {\n        -webkit-appearance: none !important;\n        appearance: none !important;\n        width: 18px !important;\n        height: 18px !important;\n        border-radius: 50% !important;\n        background: var(--pa-primary) !important;\n        border: 2px solid #fff !important;\n        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) !important;\n        margin-top: -6px !important;\n        cursor: pointer !important;\n    }\n    .pa-box .pa-range::-moz-range-track {\n        height: 6px !important;\n        background: transparent !important;\n        border: 0 !important;\n        box-shadow: none !important;\n    }\n    .pa-box .pa-range::-moz-range-thumb {\n        -moz-appearance: none !important;\n        appearance: none !important;\n        width: 18px !important;\n        height: 18px !important;\n        border-radius: 50% !important;\n        background: var(--pa-primary) !important;\n        border: 2px solid #fff !important;\n        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) !important;\n        cursor: pointer !important;\n    }\n    .pa-box .pa-range::-moz-focus-outer { border: 0 !important; }\n    .pa-box .pa-range:focus-visible { outline: 2px solid var(--pa-primary) !important; outline-offset: 4px !important; border-radius: 3px !important; }\n    .pa-box .pa-range:disabled { opacity: 0.42 !important; cursor: not-allowed !important; }\n    .pa-box .pa-range:disabled::-webkit-slider-thumb { background: #aab8c2 !important; }\n    .pa-box .pa-range:disabled::-moz-range-thumb { background: #aab8c2 !important; }\n\n    .pa-box .pa-btn {\n        -webkit-appearance: none !important;\n        appearance: none !important;\n        font-family: inherit !important;\n        font-size: 0.78rem !important;\n        font-weight: 800 !important;\n        line-height: 1.2 !important;\n        color: #fff !important;\n        background: var(--pa-primary) !important;\n        border: 1px solid var(--pa-primary) !important;\n        border-radius: 3px !important;\n        min-height: 36px !important;\n        padding: 7px 13px !important;\n        cursor: pointer !important;\n        box-shadow: none !important;\n        text-transform: none !important;\n        white-space: nowrap !important;\n        transition: background-color 0.15s, border-color 0.15s, color 0.15s;\n    }\n    .pa-box .pa-btn:hover { background: var(--pa-primary-dark) !important; border-color: var(--pa-primary-dark) !important; color: #fff !important; }\n    .pa-box .pa-btn:active { background: var(--pa-primary-deep) !important; }\n    .pa-box .pa-btn:focus-visible { outline: 2px solid var(--pa-primary) !important; outline-offset: 2px !important; }\n    .pa-box .pa-btn:disabled { background: #aab8c2 !important; border-color: #aab8c2 !important; cursor: not-allowed !important; }\n\n    .pa-seg { display: inline-flex; flex-wrap: wrap; border: 1px solid var(--pa-border); border-radius: 3px; overflow: hidden; background: #fff; }\n    .pa-box .pa-seg button {\n        -webkit-appearance: none !important;\n        appearance: none !important;\n        font-family: inherit !important;\n        font-size: 0.73rem !important;\n        font-weight: 800 !important;\n        line-height: 1.2 !important;\n        color: var(--pa-text) !important;\n        background: #fff !important;\n        border: none !important;\n        border-radius: 0 !important;\n        min-height: 34px !important;\n        padding: 6px 12px !important;\n        cursor: pointer !important;\n        box-shadow: none !important;\n        text-transform: none !important;\n        transition: background-color 0.15s, color 0.15s;\n    }\n    .pa-box .pa-seg button + button { border-left: 1px solid var(--pa-border) !important; }\n    .pa-box .pa-seg button.is-active { background: var(--pa-primary) !important; color: #fff !important; }\n    .pa-box .pa-seg button:hover:not(.is-active) { background: #edf4f8 !important; color: var(--pa-primary) !important; }\n    .pa-box .pa-seg button:active { background: #e2ecf2 !important; }\n    .pa-box .pa-seg button:focus-visible { outline: 2px solid var(--pa-primary) !important; outline-offset: -2px !important; }\n    .pa-box .pa-seg button:disabled { opacity: 0.5 !important; cursor: not-allowed !important; }\n\n    .pa-mini-hint { font-size: 0.74rem; color: var(--pa-muted); line-height: 1.45; margin-top: 8px; }\n    .pa-mini-hint strong { color: var(--pa-ink); }\n\n    .pa-tile-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 7px; }\n    .pa-tile {\n        background: #fff;\n        border: 1px solid #dde7ee;\n        border-radius: 3px;\n        padding: 8px 9px;\n        min-width: 0;\n    }\n    .pa-tile-label {\n        display: block;\n        color: var(--pa-muted);\n        font-size: 0.62rem;\n        font-weight: 800;\n        text-transform: uppercase;\n        letter-spacing: 0.05em;\n    }\n    .pa-tile-value {\n        display: block;\n        color: var(--pa-ink);\n        font-size: 0.9rem;\n        font-weight: 800;\n        font-variant-numeric: tabular-nums;\n        margin-top: 2px;\n    }\n\n    .pa-detail {\n        display: grid;\n        grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);\n        gap: 14px 16px;\n        align-items: start;\n        margin-bottom: 14px;\n    }\n    .pa-detail-info { min-width: 0; }\n\n    .pa-volcard {\n        border: 1px solid var(--pa-border);\n        border-radius: 4px;\n        background: #fff;\n        padding: 14px 16px 15px;\n    }\n    .pa-volgrid {\n        display: grid;\n        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n        gap: 14px 18px;\n        align-items: start;\n    }\n    .pa-vol-svg { border: 1px solid #e4ebf1; border-radius: 4px; background: var(--pa-surface); padding: 8px 8px 4px; }\n    .pa-vol-svg svg { width: 100%; height: auto; display: block; font-family: inherit; }\n    .pa-vol-result {\n        margin-top: 10px;\n        background: #f0fdf4;\n        border: 1px solid #bbf7d0;\n        border-radius: 4px;\n        padding: 10px 12px;\n        font-size: 0.84rem;\n        color: var(--pa-good-deep);\n        font-weight: 700;\n        font-variant-numeric: tabular-nums;\n    }\n    .pa-vol-result span { display: block; color: var(--pa-muted); font-weight: 700; font-size: 0.72rem; margin-bottom: 3px; }\n    .pa-vol-result strong { color: var(--pa-good-deep); font-size: 1.02rem; }\n\n    \/* SVG-Praesentation: Farben hartkodiert (Safari versteht keine CSS-Variablen in SVG-Attributen) *\/\n    .pa-svg-label { fill: #64748b; font-size: 10px; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase; }\n\n    @media (max-width: 940px) {\n        .pa-detail { grid-template-columns: 1fr; }\n    }\n    @media (max-width: 700px) {\n        .pa-header { padding: 16px 20px 14px; }\n        .pa-body { padding: 18px 18px 20px; }\n        .pa-tile-grid { grid-template-columns: 1fr; }\n        .pa-volgrid { grid-template-columns: 1fr; }\n    }\n    @media (max-width: 480px) {\n        .pa-seg { display: flex; flex-direction: column; }\n        .pa-box .pa-seg button + button { border-left: 0 !important; border-top: 1px solid var(--pa-border) !important; }\n    }\n    @media (prefers-reduced-motion: reduce) {\n        \/* !important noetig: Accessibility-Override muss beliebige Spezifitaeten der CSS-Box schlagen. *\/\n        .pa-box * { transition: none !important; animation: none !important; }\n    }\n<\/style>\n\n<div class=\"pa-box\" data-pa-root>\n    <div class=\"pa-header\">\n        <div class=\"pa-header-top\">\n            <svg class=\"pa-header-icon\" viewBox=\"0 0 36 36\" fill=\"none\" aria-hidden=\"true\">\n                <path d=\"M4 26 Q14 26 20 18 Q26 10 32 10\" stroke=\"rgba(255,255,255,0.9)\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\"\/>\n                <line x1=\"8\" y1=\"21.5\" x2=\"8\" y2=\"30.5\" stroke=\"rgba(255,255,255,0.55)\" stroke-width=\"1.5\"\/>\n                <line x1=\"15\" y1=\"19\" x2=\"15\" y2=\"28\" stroke=\"rgba(255,255,255,0.55)\" stroke-width=\"1.5\"\/>\n                <line x1=\"21\" y1=\"14\" x2=\"21\" y2=\"23\" stroke=\"rgba(255,255,255,0.55)\" stroke-width=\"1.5\"\/>\n                <line x1=\"27.5\" y1=\"9.5\" x2=\"27.5\" y2=\"18.5\" stroke=\"rgba(255,255,255,0.55)\" stroke-width=\"1.5\"\/>\n                <circle cx=\"8\" cy=\"21.5\" r=\"1.5\" fill=\"rgba(255,255,255,0.92)\"\/>\n                <circle cx=\"15\" cy=\"19\" r=\"1.5\" fill=\"rgba(255,255,255,0.92)\"\/>\n                <circle cx=\"21\" cy=\"14\" r=\"1.5\" fill=\"rgba(255,255,255,0.92)\"\/>\n            <\/svg>\n            <div>\n                <h2 class=\"pa-box-title\">Profilk&ouml;rper: Anbindung &amp; Ziele<\/h2>\n                <div class=\"pa-box-desc\">Warum bindet Station 0+080 nicht an? Die B&ouml;schung wird an jeder Station gegen das Gel&auml;nde gerechnet. Du siehst die B&ouml;schungsfu&szlig;linie entlang der Achse an- und wieder abbinden, ganz ohne Civil 3D.<\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"pa-body\">\n        <div class=\"pa-privacy\">L&auml;uft komplett im Browser. Keine Daten verlassen deinen Rechner.<\/div>\n\n        <div class=\"pa-intro\">\n            Der Profilk&ouml;rper wiederholt den Querschnitt an jeder Station und l&auml;sst die B&ouml;schung am <strong>Ziel-DGM<\/strong> auslaufen. Trifft die B&ouml;schung das Gel&auml;nde innerhalb des DGM-Fensters, sitzt dort ein <strong>B&ouml;schungsfu&szlig;<\/strong>; sonst bindet die B&ouml;schung nicht an. Spiel mit der <strong>B&ouml;schungsneigung<\/strong> und dem <strong>Ziel-DGM<\/strong>: die Fu&szlig;linie oben reagiert an allen Stationen zugleich, unten siehst du eine einzelne Station im Querschnitt.\n        <\/div>\n\n        <div class=\"pa-verdict is-live\">\n            <div class=\"pa-verdict-head\">\n                <span class=\"pa-verdict-title\">Befund &uuml;ber alle Stationen<\/span>\n                <span class=\"pa-chip\" id=\"paChipHero\" aria-hidden=\"true\">l&auml;dt<\/span>\n            <\/div>\n            <p class=\"pa-verdict-text\" id=\"paTextHero\" aria-live=\"polite\"><\/p>\n        <\/div>\n\n        <div class=\"pa-svg-wrap\">\n            <svg id=\"paSvgHero\" viewBox=\"0 0 620 300\" preserveAspectRatio=\"xMidYMid meet\" role=\"img\" aria-labelledby=\"paHeroTitle\">\n                <title id=\"paHeroTitle\">L&auml;ngsschnitt mit welligem Gel&auml;nde und Fahrbahnkante, darunter die Draufsicht mit der B&ouml;schungsfu&szlig;linie entlang der Achse<\/title>\n                <g id=\"paHeroDraw\"><\/g>\n            <\/svg>\n            <div class=\"pa-legend\">\n                <span class=\"pa-legend-item\" style=\"color:#3f5f75;\"><span class=\"pa-line-swatch\"><\/span> Bestandsgel&auml;nde<\/span>\n                <span class=\"pa-legend-item\" style=\"color:#059669;\"><span class=\"pa-line-swatch\"><\/span> Fahrbahnkante \/ Fu&szlig;linie<\/span>\n                <span class=\"pa-legend-item\" style=\"color:#059669;\"><span class=\"pa-dot-swatch\"><\/span> B&ouml;schungsfu&szlig; (bindet an)<\/span>\n                <span class=\"pa-legend-item\" style=\"color:#dc2626;\"><span class=\"pa-x-swatch\"><\/span> bindet nicht an \/ kein Anschluss<\/span>\n            <\/div>\n        <\/div>\n\n        <div class=\"pa-controls\">\n            <div class=\"pa-control-block\">\n                <div class=\"pa-section-label\">B&ouml;schung (gilt f&uuml;r alle Stationen)<\/div>\n                <div class=\"pa-field\">\n                    <label class=\"pa-field-label\" for=\"paNeig\">B&ouml;schungsneigung (H:V) <span class=\"pa-field-unit\" id=\"paNeigText\">2:1<\/span><\/label>\n                    <input class=\"pa-range\" id=\"paNeig\" type=\"range\" min=\"1\" max=\"6\" step=\"0.1\" value=\"2\">\n                <\/div>\n                <div style=\"margin-top:12px;\">\n                    <div class=\"pa-section-label\">Ziel-DGM<\/div>\n                    <span class=\"pa-seg\" id=\"paZiel\" role=\"group\" aria-label=\"Ziel-DGM zuweisen\">\n                        <button type=\"button\" data-pa-ziel=\"ohne\">ohne Ziel<\/button>\n                        <button type=\"button\" data-pa-ziel=\"mit\" class=\"is-active\">mit Ziel<\/button>\n                    <\/span>\n                <\/div>\n            <\/div>\n            <div class=\"pa-control-block\">\n                <div class=\"pa-section-label\">Station f&uuml;r den Querschnitt unten<\/div>\n                <div class=\"pa-field\">\n                    <label class=\"pa-field-label\" for=\"paSel\">Ausgew&auml;hlte Station <span class=\"pa-field-unit\" id=\"paSelText\">0+080<\/span><\/label>\n                    <input class=\"pa-range\" id=\"paSel\" type=\"range\" min=\"0\" max=\"12\" step=\"1\" value=\"8\">\n                <\/div>\n                <div class=\"pa-mini-hint\">Klick oben direkt auf eine Stationsmarke oder zieh den Regler. Die gew&auml;hlte Station wird unten als Querschnitt gezeigt. Steilere B&ouml;schung hei\u00dft k&uuml;rzere Reichweite, dann bindet mehr an.<\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"pa-sub-title\">Stationsdetail: der Querschnitt an der gew&auml;hlten Station<\/div>\n        <div class=\"pa-detail\">\n            <div class=\"pa-svg-wrap\" style=\"margin-bottom:0;\">\n                <svg id=\"paSvgDetail\" viewBox=\"0 0 620 300\" preserveAspectRatio=\"xMidYMid meet\" role=\"img\" aria-labelledby=\"paDetailTitle\">\n                    <title id=\"paDetailTitle\">Querschnitt an der gew&auml;hlten Station mit B&ouml;schung, Ziel-DGM und B&ouml;schungsfu&szlig;<\/title>\n                    <g id=\"paDetailDraw\"><\/g>\n                <\/svg>\n                <div class=\"pa-legend\">\n                    <span class=\"pa-legend-item\" style=\"color:#059669;\"><span class=\"pa-line-swatch\"><\/span> Planungskante<\/span>\n                    <span class=\"pa-legend-item\" style=\"color:#e8913a;\"><span class=\"pa-line-swatch\"><\/span> B&ouml;schung<\/span>\n                    <span class=\"pa-legend-item\" style=\"color:#3f5f75;\"><span class=\"pa-line-swatch\"><\/span> Ziel-DGM (Bestand)<\/span>\n                    <span class=\"pa-legend-item\" style=\"color:#dc2626;\"><span class=\"pa-line-swatch is-dash\"><\/span> kein Anschluss<\/span>\n                <\/div>\n            <\/div>\n            <div class=\"pa-detail-info\">\n                <div class=\"pa-section-label\">Zieltyp<\/div>\n                <span class=\"pa-seg\" id=\"paZieltyp\" role=\"group\" aria-label=\"Zieltyp w&auml;hlen\">\n                    <button type=\"button\" data-pa-zieltyp=\"oberflaeche\" class=\"is-active\">Oberfl&auml;che<\/button>\n                    <button type=\"button\" data-pa-zieltyp=\"breite\">Breite<\/button>\n                    <button type=\"button\" data-pa-zieltyp=\"hoehe\">H&ouml;he<\/button>\n                <\/span>\n                <div class=\"pa-tile-grid\" style=\"margin-top:12px;\">\n                    <div class=\"pa-tile\"><span class=\"pa-tile-label\">Station<\/span><span class=\"pa-tile-value\" id=\"paDetSta\">&#8211;<\/span><\/div>\n                    <div class=\"pa-tile\"><span class=\"pa-tile-label\">Fall<\/span><span class=\"pa-tile-value\" id=\"paDetFall\">&#8211;<\/span><\/div>\n                    <div class=\"pa-tile\"><span class=\"pa-tile-label\">Gel&auml;nde-Versatz<\/span><span class=\"pa-tile-value\" id=\"paDetDelta\">&#8211;<\/span><\/div>\n                    <div class=\"pa-tile\"><span class=\"pa-tile-label\">Reichweite<\/span><span class=\"pa-tile-value\" id=\"paDetReach\">&#8211;<\/span><\/div>\n                <\/div>\n                <div class=\"pa-verdict is-live\" style=\"margin-top:12px; margin-bottom:0;\">\n                    <div class=\"pa-verdict-head\">\n                        <span class=\"pa-verdict-title\">Diese Station<\/span>\n                        <span class=\"pa-chip\" id=\"paChipDet\" aria-hidden=\"true\">l&auml;dt<\/span>\n                    <\/div>\n                    <p class=\"pa-verdict-text\" id=\"paTextDet\" aria-live=\"polite\"><\/p>\n                <\/div>\n                <div class=\"pa-mini-hint\" id=\"paZieltypHint\" style=\"margin-top:10px;\"><\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"pa-sub-title\">Nebenrechnung: Volumen &uuml;ber die durchschnittliche Endfl&auml;che<\/div>\n        <div class=\"pa-volcard\">\n            <div class=\"pa-volgrid\">\n                <div class=\"pa-control-block\">\n                    <div class=\"pa-field\">\n                        <label class=\"pa-field-label\" for=\"paA1\">Querprofilfl&auml;che A1 <span class=\"pa-field-unit\" id=\"paA1Text\">12,0 m&sup2;<\/span><\/label>\n                        <input class=\"pa-range\" id=\"paA1\" type=\"range\" min=\"0\" max=\"60\" step=\"0.5\" value=\"12\">\n                    <\/div>\n                    <div class=\"pa-field\">\n                        <label class=\"pa-field-label\" for=\"paA2\">Querprofilfl&auml;che A2 <span class=\"pa-field-unit\" id=\"paA2Text\">18,0 m&sup2;<\/span><\/label>\n                        <input class=\"pa-range\" id=\"paA2\" type=\"range\" min=\"0\" max=\"60\" step=\"0.5\" value=\"18\">\n                    <\/div>\n                    <div class=\"pa-field\">\n                        <label class=\"pa-field-label\" for=\"paLaenge\">Stationsabstand L <span class=\"pa-field-unit\" id=\"paLaengeText\">20 m<\/span><\/label>\n                        <input class=\"pa-range\" id=\"paLaenge\" type=\"range\" min=\"5\" max=\"50\" step=\"1\" value=\"20\">\n                    <\/div>\n                    <div class=\"pa-mini-hint\"><strong>Damit die Rechnung im Programm stimmt:<\/strong> Civil 3D braucht die abgeleitete <strong>Datum<\/strong>-Fl&auml;che als Bezugsk&ouml;rper und die <strong>&auml;u&szlig;ere Begrenzung<\/strong> am B&ouml;schungsfu&szlig;. Ohne Datum kommt Null heraus, ohne Begrenzung trianguliert das DGM &uuml;ber den Fu&szlig; hinaus und das Volumen wird unzuverl&auml;ssig.<\/div>\n                <\/div>\n                <div class=\"pa-control-block\">\n                    <div class=\"pa-vol-svg\">\n                        <svg id=\"paSvgVol\" viewBox=\"0 0 260 190\" preserveAspectRatio=\"xMidYMid meet\" role=\"img\" aria-labelledby=\"paVolTitle\">\n                            <title id=\"paVolTitle\">Zwei Querprofilfl&auml;chen A1 und A2 im Abstand L, dazwischen der prismatische K&ouml;rper<\/title>\n                            <g id=\"paVolDraw\"><\/g>\n                        <\/svg>\n                    <\/div>\n                    <div class=\"pa-vol-result\">\n                        <span>V = (A1 + A2) \/ 2 &times; L<\/span>\n                        <strong id=\"paVolValue\">&#8211;<\/strong>\n                        <div id=\"paVolFormula\" style=\"font-size:0.76rem; color:#15803d; font-weight:700; margin-top:3px;\"><\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n    <\/div>\n<\/div>\n\n<script>\n    (function () {\n        \"use strict\";\n        var ROOT = document.querySelector(\"[data-pa-root]\");\n        if (!ROOT) { return; }\n\n        \/\/ Farbpalette als JS-Konstanten. Safari versteht keine CSS-Variablen in\n        \/\/ SVG-Attributwerten, deshalb hier hartkodierte Hex-Werte.\n        var COLORS = {\n            primary: \"#3f5f75\",\n            primaryDark: \"#2c4a5e\",\n            primaryDeep: \"#1e3548\",\n            ink: \"#1e293b\",\n            muted: \"#64748b\",\n            faint: \"#94a3b8\",\n            ground: \"#3f5f75\",\n            groundFill: \"#eef2f5\",\n            groundTick: \"#c3cfd8\",\n            plan: \"#059669\",\n            planDeep: \"#15803d\",\n            planFill: \"#dcf3e8\",\n            slope: \"#e8913a\",\n            slopeDeep: \"#b45309\",\n            error: \"#dc2626\",\n            errorFill: \"#fef2f2\",\n            errorBorder: \"#fac5c5\",\n            warn: \"#d97706\",\n            warnDeep: \"#92700c\",\n            cutTint: \"#dbe7f0\",\n            fillTint: \"#f4ead6\",\n            earth: \"#ece5d8\",\n            asphalt: \"#5d6a74\",\n            asphaltEdge: \"#46525c\",\n            gravel: \"#c9c2b2\",\n            gravelEdge: \"#a89f8c\"\n        };\n\n        var SVGNS = \"http:\/\/www.w3.org\/2000\/svg\";\n        function $(id) { return ROOT.querySelector(\"#\" + id); }\n        function el(tag, attrs) {\n            var n = document.createElementNS(SVGNS, tag);\n            Object.keys(attrs || {}).forEach(function (k) { n.setAttribute(k, attrs[k]); });\n            return n;\n        }\n        function clear(node) { while (node.firstChild) { node.removeChild(node.firstChild); } }\n        function fmt(v, d) {\n            var digits = typeof d === \"number\" ? d : 2;\n            return (isFinite(v) ? v : 0).toLocaleString(\"de-DE\", { minimumFractionDigits: digits, maximumFractionDigits: digits });\n        }\n        function ratStr(nv) {\n            var whole = Math.abs(nv - Math.round(nv)) < 0.05;\n            return fmt(nv, whole ? 0 : 1) + \":1\";\n        }\n        function staStr(m) {\n            var r = Math.round(m);\n            return \"0+\" + (\"00\" + r).slice(-3);\n        }\n        function ptStr(points) {\n            return points.map(function (p) { return p.x.toFixed(1) + \",\" + p.y.toFixed(1); }).join(\" \");\n        }\n        function poly(group, pts, attrs) {\n            group.appendChild(el(\"polyline\", Object.assign({ points: ptStr(pts) }, attrs || {})));\n        }\n        function line(group, x1, y1, x2, y2, attrs) {\n            group.appendChild(el(\"line\", Object.assign({ x1: x1, y1: y1, x2: x2, y2: y2 }, attrs || {})));\n        }\n        function text(group, x, y, content, attrs) {\n            var base = { x: x, y: y, \"font-family\": \"inherit\" };\n            var t = el(\"text\", Object.assign(base, attrs || {}));\n            t.textContent = content;\n            group.appendChild(t);\n            return t;\n        }\n        function rect(group, x, y, w, h, attrs) {\n            group.appendChild(el(\"rect\", Object.assign({ x: x, y: y, width: w, height: h }, attrs || {})));\n        }\n        function circle(group, x, y, r, attrs) {\n            group.appendChild(el(\"circle\", Object.assign({ cx: x, cy: y, r: r }, attrs || {})));\n        }\n        function card(group, x, y, w, h, title) {\n            rect(group, x, y, w, h, { fill: \"#fff\", stroke: \"#d9e4ec\", \"stroke-width\": 1.2, rx: 4 });\n            if (title) { text(group, x + 14, y + 22, title, { class: \"pa-svg-label\" }); }\n        }\n        function labelBox(group, x, y, label, opts) {\n            opts = opts || {};\n            var fs = opts.size || 9.5;\n            var pad = opts.pad || 6;\n            var w = opts.width || Math.max(30, label.length * fs * 0.6 + pad * 2);\n            var h = opts.height || 17;\n            rect(group, x - w \/ 2, y - h + 3, w, h, { fill: opts.fill || \"#fff\", stroke: opts.stroke || \"#d9e4ec\", \"stroke-width\": 1, rx: 3 });\n            text(group, x, y - 3, label, {\n                \"font-size\": fs,\n                fill: opts.color || \"#1e293b\",\n                \"text-anchor\": \"middle\",\n                \"font-weight\": opts.weight || 800\n            });\n        }\n        function dotMark(group, x, y, color, r) {\n            circle(group, x, y, r || 5, { fill: \"#fff\", stroke: color, \"stroke-width\": 2.4 });\n        }\n        function leader(group, ax, ay, lx, ly, color) {\n            line(group, ax, ay, lx, ly, { stroke: color, \"stroke-width\": 1, \"stroke-dasharray\": \"3 3\", opacity: 0.7 });\n        }\n        function crossMark(group, x, y, color, s) {\n            var d = s || 6;\n            line(group, x - d, y - d, x + d, y + d, { stroke: color, \"stroke-width\": 2 });\n            line(group, x + d, y - d, x - d, y + d, { stroke: color, \"stroke-width\": 2 });\n        }\n        function syncSeg(containerId, attr, value) {\n            ROOT.querySelectorAll(\"#\" + containerId + \" button\").forEach(function (b) {\n                b.classList.toggle(\"is-active\", b.getAttribute(attr) === value);\n            });\n        }\n\n        \/\/ ============ MODELL ============\n        \/\/ Stationen entlang der Achse, 0+000 bis 0+120 im 10-m-Raster.\n        var STATIONS = [];\n        (function () { var s; for (s = 0; s <= 120.001; s += 10) { STATIONS.push(Math.round(s)); } })();\n        var W = 10;                 \/\/ Halbes DGM-Fenster quer zur Achse, m (Reichweite der Anbindung)\n        var KOPFZ = 100;            \/\/ Hoehe der Planungskante \/ des Boeschungskopfs\n\n        \/\/ Gelaende minus Planung an der Kante: welliges Bestandsgelaende ueber\n        \/\/ fast ebener Fahrbahnkante. Positiv = Gelaende hoeher (Einschnitt\/Abtrag),\n        \/\/ negativ = Gelaende tiefer (Damm\/Auftrag). Amplitude 3,6 m ergibt Miss-Zonen\n        \/\/ in Einschnitt UND Damm, sobald flacher als rund 2,7:1 geboescht wird.\n        function dH(s) { return 3.6 * Math.sin(2 * Math.PI * s \/ 115 + 0.35); }\n        \/\/ Leicht geneigte Fahrbahnkante relativ zur Bezugshoehe (nur fuer die Grafik).\n        function designRel(s) { return 0.6 - 1.2 * (s \/ 120); }\n        \/\/ Gelaende quer zur Achse an einer Station mit Versatz H (kleine Welligkeit).\n        function groundZ(x, H) { return KOPFZ + H + 0.3 * Math.sin(x * 0.55 + 0.7); }\n\n        \/\/ Raycast: wo trifft die Boeschung das Gelaende? Sucht bis 40 m weit, damit\n        \/\/ die Reichweite auch jenseits des DGM-Fensters bekannt ist (fuer den Befund).\n        function anbind(H, n) {\n            var cut = H >= 0, sign = cut ? 1 : -1, step = 0.05, x, XMAX = 40;\n            for (x = step; x <= XMAX + 1e-6; x += step) {\n                var rayZ = KOPFZ + sign * (x \/ n);\n                var gz = groundZ(x, H);\n                if (sign * (rayZ - gz) >= 0) {\n                    var r = Math.round(x * 100) \/ 100;\n                    return { hit: r <= W + 1e-9, reach: r, cut: cut, fussZ: Math.round(gz * 100) \/ 100 };\n                }\n            }\n            return { hit: false, reach: XMAX, cut: cut, fussZ: groundZ(XMAX, H) };\n        }\n\n        var state = {\n            neig: 2.0,\n            ziel: \"mit\",\n            zieltyp: \"oberflaeche\",\n            sel: 8,\n            a1: 12,\n            a2: 18,\n            laenge: 20\n        };\n\n        \/\/ ============ HERO: LAENGSSCHNITT + DRAUFSICHT ============\n        var H_LEFT = 56, H_W = 520;\n        function hx(s) { return H_LEFT + (s \/ 120) * H_W; }\n        \/\/ Laengsschnitt (oben)\n        var T_MID = 82, T_SCALE = 8;\n        function gY(s) { return T_MID - dH(s) * T_SCALE; }\n        function dY(s) { return T_MID - designRel(s) * T_SCALE; }\n        \/\/ Draufsicht (unten)\n        var CENTER_Y = 152, EDGE_Y = 168, P_SCALE = 8.6;\n        function fY(reach) { return EDGE_Y + reach * P_SCALE; }\n        var BOUND_Y = EDGE_Y + W * P_SCALE;\n\n        function renderHero() {\n            var g = $(\"paHeroDraw\");\n            clear(g);\n            syncSeg(\"paZiel\", \"data-pa-ziel\", state.ziel);\n            var n = state.neig, mit = state.ziel === \"mit\";\n            $(\"paNeigText\").textContent = ratStr(n);\n\n            var results = STATIONS.map(function (s) {\n                var r = anbind(dH(s), n);\n                return { s: s, hit: mit ? r.hit : false, reach: r.reach, cut: r.cut };\n            });\n\n            card(g, 24, 14, 572, 274, \"\");\n\n            \/\/ ---- Panel-Titel ----\n            text(g, 40, 32, \"L\u00c4NGSSCHNITT ENTLANG DER ACHSE\", { \"font-size\": 9, fill: COLORS.muted, \"font-weight\": 800, \"letter-spacing\": \"0.05em\" });\n            text(g, 40, 148, \"DRAUFSICHT: B\u00d6SCHUNGSFUSSLINIE\", { \"font-size\": 9, fill: COLORS.muted, \"font-weight\": 800, \"letter-spacing\": \"0.05em\" });\n\n            \/\/ ---- Auswahl-Fuehrungslinie ueber beide Panels ----\n            var selS = STATIONS[state.sel];\n            line(g, hx(selS), 40, hx(selS), BOUND_Y + 12, { stroke: COLORS.primary, \"stroke-width\": 1.4, \"stroke-dasharray\": \"4 3\", opacity: 0.5 });\n\n            \/\/ ---- OBEN: Cut\/Fill-Band zwischen Gelaende und Fahrbahnkante ----\n            var s;\n            for (s = 0; s <= 120.001; s += 1.2) {\n                var col = dH(s) >= 0 ? COLORS.cutTint : COLORS.fillTint;\n                line(g, hx(s), dY(s), hx(s), gY(s), { stroke: col, \"stroke-width\": 6, opacity: 0.85 });\n            }\n            \/\/ Fahrbahnkante (leicht geneigt), gruen\n            var dpts = [];\n            for (s = 0; s <= 120.001; s += 2) { dpts.push({ x: hx(s), y: dY(s) }); }\n            poly(g, dpts, { fill: \"none\", stroke: COLORS.plan, \"stroke-width\": 2.4, \"stroke-linecap\": \"round\" });\n            \/\/ Bestandsgelaende, blaugrau wellig\n            var gpts = [];\n            for (s = 0; s <= 120.001; s += 1.5) { gpts.push({ x: hx(s), y: gY(s) }); }\n            poly(g, gpts, { fill: \"none\", stroke: COLORS.ground, \"stroke-width\": 2.4, \"stroke-linecap\": \"round\", \"stroke-linejoin\": \"round\" });\n\n            \/\/ Zonen-Label Einschnitt (tiefster Cut) und Damm (tiefster Fill)\n            var sCut = 20, sFill = 80;\n            labelBox(g, hx(sCut), gY(sCut) - 8, \"Einschnitt\", { width: 66, size: 8, fill: \"#e8eff5\", stroke: \"#c6d6e2\", color: COLORS.primaryDeep });\n            labelBox(g, hx(sFill), gY(sFill) + 24, \"Damm\", { width: 48, size: 8, fill: \"#f6eeda\", stroke: \"#e6cf9a\", color: COLORS.slopeDeep });\n\n            \/\/ ---- UNTEN: Draufsicht ----\n            \/\/ Fahrbahnband (halbe Fahrbahn) + Achse\n            rect(g, hx(0), CENTER_Y, hx(120) - hx(0), EDGE_Y - CENTER_Y, { fill: \"#e9edf1\", stroke: \"none\" });\n            line(g, hx(0), CENTER_Y, hx(120), CENTER_Y, { stroke: COLORS.faint, \"stroke-width\": 1.2, \"stroke-dasharray\": \"12 3 2 3\" });\n            text(g, hx(0) - 4, CENTER_Y + 3, \"Achse\", { \"font-size\": 7.6, fill: COLORS.faint, \"text-anchor\": \"end\", \"font-weight\": 700 });\n            \/\/ Planungskante (Boeschungskopf), gruen\n            line(g, hx(0), EDGE_Y, hx(120), EDGE_Y, { stroke: COLORS.plan, \"stroke-width\": 2.6, \"stroke-linecap\": \"round\" });\n            \/\/ DGM-Grenze\n            line(g, hx(0), BOUND_Y, hx(120), BOUND_Y, { stroke: \"#94a3b8\", \"stroke-width\": 1.2, \"stroke-dasharray\": \"5 4\" });\n            rect(g, hx(0), BOUND_Y, hx(120) - hx(0), 20, { fill: \"#f1f3f5\", stroke: \"none\", opacity: 0.7 });\n            labelBox(g, hx(120) - 44, BOUND_Y - 3, \"Grenze Ziel-DGM\", { width: 96, size: 7.6, color: COLORS.muted });\n\n            \/\/ Boeschungsband je zusammenhaengender Treffer-Kette + Fusslinie\n            var runs = [], cur = null, i;\n            for (i = 0; i < results.length; i += 1) {\n                if (results[i].hit) {\n                    if (cur === null) { cur = [i]; } else { cur.push(i); }\n                } else if (cur !== null) { runs.push(cur); cur = null; }\n            }\n            if (cur !== null) { runs.push(cur); }\n\n            runs.forEach(function (run) {\n                var band = [], fuss = [], k;\n                band.push({ x: hx(STATIONS[run[0]]), y: EDGE_Y });\n                for (k = 0; k < run.length; k += 1) {\n                    var idx = run[k], px = hx(STATIONS[idx]), py = fY(results[idx].reach);\n                    band.push({ x: px, y: py });\n                    fuss.push({ x: px, y: py });\n                }\n                band.push({ x: hx(STATIONS[run[run.length - 1]]), y: EDGE_Y });\n                poly(g, band.concat([band[0]]), { fill: COLORS.earth, stroke: \"none\", opacity: 0.7 });\n                poly(g, fuss, { fill: \"none\", stroke: COLORS.plan, \"stroke-width\": 2.4, \"stroke-linecap\": \"round\", \"stroke-linejoin\": \"round\" });\n            });\n\n            \/\/ Marken je Station\n            for (i = 0; i < results.length; i += 1) {\n                var r = results[i], px = hx(r.s), sel = i === state.sel;\n                if (r.hit) {\n                    var fy = fY(r.reach);\n                    line(g, px, EDGE_Y, px, fy, { stroke: sel ? COLORS.slopeDeep : COLORS.slope, \"stroke-width\": sel ? 2.4 : 1.4, opacity: sel ? 1 : 0.8 });\n                    dotMark(g, px, fy, COLORS.plan, sel ? 5 : 4);\n                } else {\n                    \/\/ rei\u00dft oder ohne Ziel: Boeschung laeuft ohne Fuss ins Leere\n                    var endY = mit ? BOUND_Y : fY(5);\n                    line(g, px, EDGE_Y, px, endY, { stroke: COLORS.error, \"stroke-width\": sel ? 2.2 : 1.4, \"stroke-dasharray\": \"3 3\", opacity: sel ? 1 : 0.85 });\n                    crossMark(g, px, endY, COLORS.error, sel ? 6 : 4.6);\n                }\n                \/\/ Stationslabel\n                text(g, px, BOUND_Y + 30, staStr(r.s), { \"font-size\": 7, fill: sel ? COLORS.primaryDeep : COLORS.muted, \"text-anchor\": \"middle\", \"font-weight\": sel ? 800 : 700 });\n                \/\/ Klickflaeche\n                var hit = el(\"rect\", { x: px - 20, y: 40, width: 40, height: BOUND_Y - 40 + 34, fill: \"transparent\", cursor: \"pointer\" });\n                hit.setAttribute(\"data-pa-station\", String(i));\n                g.appendChild(hit);\n            }\n\n            \/\/ Reichweiten-Label an der gewaehlten Station\n            var selR = results[state.sel];\n            if (selR.hit) {\n                var selY = fY(selR.reach);\n                leader(g, hx(selR.s), selY, hx(selR.s) + 26, selY + 2, COLORS.slopeDeep);\n                labelBox(g, hx(selR.s) + 58, selY + 2, \"Fu\u00df \" + fmt(selR.reach, 1) + \" m\", { width: 68, size: 7.8, color: COLORS.slopeDeep });\n            }\n\n            \/\/ Befund\n            var nBind = 0, missCut = 0, missFill = 0;\n            results.forEach(function (r) {\n                if (r.hit) { nBind += 1; }\n                else if (r.cut) { missCut += 1; }\n                else { missFill += 1; }\n            });\n            var total = results.length;\n            var chipKind, chipTxt, head;\n            if (!mit) {\n                chipKind = \"is-error\"; chipTxt = \"kein Ziel\";\n                head = \"<strong>Ohne zugewiesenes Ziel-DGM bindet keine einzige Station an.<\/strong> Der B\u00f6schungs-Link ist im Querschnitt vorhanden, findet aber keine Zielfl\u00e4che und h\u00e4ngt an allen \" + total + \" Stationen in der Luft. Genau das ist die h\u00e4ufigste Entt\u00e4uschung: Civil 3D meldet sinngem\u00e4\u00df kein Zielobjekt gefunden. Das Ziel-DGM setzt du erst im Profilk\u00f6rper. Schalte oben auf <strong>mit Ziel<\/strong>.\";\n            } else if (nBind === total) {\n                chipKind = \"is-good\"; chipTxt = nBind + \" \/ \" + total + \" binden an\";\n                head = \"<strong>Alle \" + total + \" Stationen binden an.<\/strong> Bei \" + ratStr(n) + \" (H:V) trifft die B\u00f6schung an jeder Station das Gel\u00e4nde innerhalb des Ziel-DGM, die Fu\u00dflinie l\u00e4uft durchgehend. Stell die Neigung flacher, dann w\u00e4chst die Reichweite und in den tiefen Einschnitt- und Damm-Zonen bindet die B\u00f6schung nicht mehr an.\";\n            } else {\n                chipKind = missCut + missFill >= 4 ? \"is-error\" : \"is-warn\";\n                chipTxt = nBind + \" \/ \" + total + \" binden an\";\n                head = \"<strong>Die Fu\u00dflinie bindet an \" + (missCut + missFill) + \" Stationen nicht an.<\/strong> Bei \" + ratStr(n) + \" l\u00e4uft die B\u00f6schung dort \u00fcber die DGM-Grenze hinaus, bevor sie das Gel\u00e4nde trifft: \" + missCut + \" im Einschnitt, \" + missFill + \" im Damm. Das passiert in beide Richtungen, wo Gel\u00e4nde und Gradiente am weitesten auseinanderliegen. Steiler b\u00f6schen bindet mehr Stationen an, oder das Ziel-DGM weiter ausdehnen.\";\n            }\n            var c = $(\"paChipHero\");\n            c.className = \"pa-chip \" + chipKind;\n            c.textContent = chipTxt;\n            $(\"paTextHero\").innerHTML = head;\n        }\n\n        \/\/ ============ DETAIL: QUERSCHNITT AN DER GEWAEHLTEN STATION ============\n        var D_XMIN = -4, D_XMAX = 15, D_ZTOP = 107, D_ZBOT = 93;\n        function dmx(x) { return 40 + (x - D_XMIN) \/ (D_XMAX - D_XMIN) * 540; }\n        function dmz(z) { return 44 + (D_ZTOP - z) \/ (D_ZTOP - D_ZBOT) * 250; }\n        function dmzc(z) { return dmz(Math.max(D_ZBOT + 0.3, Math.min(D_ZTOP - 0.3, z))); }\n\n        function renderDetail() {\n            var g = $(\"paDetailDraw\");\n            clear(g);\n            syncSeg(\"paZieltyp\", \"data-pa-zieltyp\", state.zieltyp);\n            var n = state.neig, mit = state.ziel === \"mit\", typ = state.zieltyp;\n            var s = STATIONS[state.sel], H = dH(s);\n            $(\"paSelText\").textContent = staStr(s);\n\n            var res = anbind(H, n);\n            var cut = res.cut, sign = cut ? 1 : -1;\n            var kopf = { x: dmx(0), y: dmz(KOPFZ) };\n            var roadX0 = dmx(D_XMIN + 0.4);\n            var fallTxt = cut ? \"Einschnitt\" : \"Damm\";\n            var yBot = 292;\n\n            card(g, 24, 14, 572, 278, \"Querschnitt \" + staStr(s));\n\n            \/\/ Gelaende: Bodenkoerper + Linie + Erdschraffur (nur im Ziel-DGM voll, sonst blass)\n            var gpts = [], x;\n            for (x = D_XMIN; x <= W + 0.0001; x += 0.2) { gpts.push({ x: dmx(x), y: dmz(groundZ(x, H)) }); }\n            var dgmColor = mit ? COLORS.ground : COLORS.faint;\n            var fillPts = gpts.slice();\n            fillPts.push({ x: dmx(W), y: yBot });\n            fillPts.push({ x: gpts[0].x, y: yBot });\n            poly(g, fillPts, { fill: mit ? \"#e6edf2\" : \"#edf0f3\", stroke: \"none\" });\n            var acp = el(\"clipPath\", { id: \"paDetClip\" });\n            acp.appendChild(el(\"polygon\", { points: ptStr(fillPts) }));\n            g.appendChild(acp);\n            var ahg = el(\"g\", { \"clip-path\": \"url(#paDetClip)\" });\n            g.appendChild(ahg);\n            var ahx;\n            for (ahx = gpts[0].x - 60; ahx < dmx(W); ahx += 40) {\n                line(ahg, ahx, yBot + 8, ahx + 120, dmz(D_ZTOP) + 30, { stroke: mit ? \"#ccd7df\" : \"#d5dade\", \"stroke-width\": 0.8, opacity: 0.5 });\n            }\n            var ti;\n            for (ti = 2; ti < gpts.length - 1; ti += 4) {\n                line(g, gpts[ti].x, gpts[ti].y + 3, gpts[ti].x - 8, gpts[ti].y + 13, { stroke: COLORS.groundTick, \"stroke-width\": 1 });\n            }\n\n            \/\/ Fahrbahnkoerper (Belag + Tragschicht) links vom Boeschungskopf\n            poly(g, [{ x: roadX0, y: kopf.y + 2 }, { x: kopf.x, y: kopf.y + 2 }, { x: kopf.x, y: kopf.y + 9 }, { x: roadX0, y: kopf.y + 9 }, { x: roadX0, y: kopf.y + 2 }], { fill: COLORS.asphalt, stroke: COLORS.asphaltEdge, \"stroke-width\": 1 });\n            poly(g, [{ x: roadX0, y: kopf.y + 9 }, { x: kopf.x, y: kopf.y + 9 }, { x: kopf.x, y: kopf.y + 15 }, { x: roadX0, y: kopf.y + 15 }, { x: roadX0, y: kopf.y + 9 }], { fill: COLORS.gravel, stroke: COLORS.gravelEdge, \"stroke-width\": 1 });\n\n            \/\/ Ziel-DGM-Linie\n            poly(g, gpts, { fill: \"none\", stroke: dgmColor, \"stroke-width\": 2.6, \"stroke-linecap\": \"round\", \"stroke-linejoin\": \"round\", \"stroke-dasharray\": mit ? \"none\" : \"6 4\" });\n            text(g, dmx(3), yBot - 16, mit ? \"Ziel-DGM (zugewiesen)\" : \"DGM da, aber nicht als Ziel\", { \"font-size\": 9, fill: mit ? COLORS.primaryDark : COLORS.muted, \"text-anchor\": \"middle\", \"font-weight\": 700 });\n\n            \/\/ ausserhalb des Ziel-DGM\n            var outPts = [];\n            for (x = W; x <= D_XMAX; x += 0.2) { outPts.push({ x: dmx(x), y: dmz(groundZ(x, H)) }); }\n            poly(g, outPts, { fill: \"none\", stroke: \"#c9ced3\", \"stroke-width\": 1.3, \"stroke-dasharray\": \"5 5\" });\n            line(g, dmx(W), 54, dmx(W), yBot - 6, { stroke: \"#94a3b8\", \"stroke-width\": 1.2, \"stroke-dasharray\": \"4 4\" });\n            labelBox(g, dmx(W) - 44, 70, \"DGM-Grenze\", { width: 82, size: 8, color: COLORS.muted });\n            text(g, dmx(12.6), dmz(groundZ(12.6, H)) + (cut ? -12 : 18), \"au\u00dferhalb\", { \"font-size\": 8, fill: \"#a8b0b8\", \"text-anchor\": \"middle\" });\n\n            \/\/ Planungskante\n            line(g, roadX0, kopf.y, kopf.x, kopf.y, { stroke: COLORS.plan, \"stroke-width\": 3.4, \"stroke-linecap\": \"round\" });\n            leader(g, kopf.x, kopf.y, kopf.x - 30, kopf.y - 24, COLORS.planDeep);\n            labelBox(g, kopf.x - 30, kopf.y - 24, \"Planungskante\", { width: 96, size: 8.6, color: COLORS.planDeep });\n            dotMark(g, kopf.x, kopf.y, COLORS.plan, 4.4);\n\n            var statusTxt, reachTxt, chipKind, chipTxt, head;\n            var deltaTxt = fmt(Math.abs(H), 1) + \" m \" + (cut ? \"h\u00f6her\" : \"tiefer\");\n\n            if (!mit) {\n                var xn = 7.5, zn = KOPFZ + sign * (xn \/ n);\n                var nomEnd = { x: dmx(xn), y: dmzc(zn) };\n                line(g, kopf.x, kopf.y, nomEnd.x, nomEnd.y, { stroke: COLORS.slope, \"stroke-width\": 3.4, \"stroke-linecap\": \"round\", \"stroke-dasharray\": \"2 3\", opacity: 0.85 });\n                dotMark(g, nomEnd.x, nomEnd.y, COLORS.error, 5);\n                crossMark(g, nomEnd.x, nomEnd.y, COLORS.error, 6);\n                leader(g, nomEnd.x, nomEnd.y, nomEnd.x + 8, nomEnd.y + (cut ? -28 : 30), COLORS.error);\n                labelBox(g, nomEnd.x + 8, nomEnd.y + (cut ? -28 : 30), \"kein Ziel, kein Fu\u00df\", { width: 116, size: 9, fill: COLORS.errorFill, stroke: COLORS.errorBorder, color: COLORS.error });\n                statusTxt = \"kein Ziel\"; reachTxt = \"\u2013\"; chipKind = \"is-error\"; chipTxt = \"kein Anschluss\";\n                head = \"<strong>An \" + staStr(s) + \" liegt kein Ziel-DGM an.<\/strong> Das Gel\u00e4nde ist zwar da, aber es ist der B\u00f6schung nicht als Oberfl\u00e4chenziel zugewiesen. Der Link h\u00e4ngt in der Luft, Civil 3D meldet sinngem\u00e4\u00df kein Zielobjekt gefunden. Erst im Profilk\u00f6rper das Ziel setzen, dann l\u00e4uft die B\u00f6schung aus.\";\n            } else if (res.hit) {\n                var fuss = { x: dmx(res.reach), y: dmz(res.fussZ) };\n                var body = [{ x: kopf.x, y: kopf.y }, { x: fuss.x, y: fuss.y }];\n                var bx;\n                for (bx = res.reach; bx >= -0.001; bx -= 0.2) { body.push({ x: dmx(bx), y: dmz(groundZ(bx, H)) }); }\n                poly(g, body.concat([body[0]]), { fill: cut ? \"#f2ede1\" : COLORS.earth, stroke: \"none\", opacity: 0.85 });\n                line(g, kopf.x, kopf.y, fuss.x, fuss.y, { stroke: COLORS.slope, \"stroke-width\": 3.8, \"stroke-linecap\": \"round\" });\n                dotMark(g, fuss.x, fuss.y, COLORS.slope, 4.8);\n                leader(g, fuss.x, fuss.y, Math.min(fuss.x + 10, 500), fuss.y + (cut ? -30 : 34), COLORS.slopeDeep);\n                labelBox(g, Math.min(fuss.x + 10, 500), fuss.y + (cut ? -30 : 34), \"B\u00f6schungsfu\u00df\", { width: 100, size: 9, color: COLORS.slopeDeep });\n                var midB = { x: (kopf.x + fuss.x) \/ 2, y: (kopf.y + fuss.y) \/ 2 };\n                text(g, midB.x, midB.y + (cut ? 26 : -8), cut ? \"Abtrag\" : \"Auftrag\", { \"font-size\": 8.4, fill: COLORS.muted, \"text-anchor\": \"middle\", \"font-weight\": 700 });\n                statusTxt = \"bindet an\"; reachTxt = fmt(res.reach, 1) + \" m\"; chipKind = \"is-good\"; chipTxt = \"bindet an\";\n                head = \"<strong>An \" + staStr(s) + \" l\u00e4uft die B\u00f6schung sauber aus.<\/strong> Das Gel\u00e4nde liegt hier \" + deltaTxt + \" als die Planung. Bei \" + ratStr(n) + \" sitzt der B\u00f6schungsfu\u00df rund \" + fmt(res.reach, 1) + \" m neben der Planungskante, es ist ein \" + fallTxt + \". Diesen Anschluss rechnet der Profilk\u00f6rper an jeder Station selbst.\";\n            } else {\n                var over = Math.max(0, res.reach - W);\n                var zEnd = KOPFZ + sign * (W \/ n);\n                var zSh = KOPFZ + sign * (D_XMAX \/ n);\n                line(g, kopf.x, kopf.y, dmx(W), dmzc(zEnd), { stroke: COLORS.slope, \"stroke-width\": 3.8, \"stroke-linecap\": \"round\" });\n                line(g, dmx(W), dmzc(zEnd), dmx(D_XMAX), dmzc(zSh), { stroke: COLORS.error, \"stroke-width\": 2.6, \"stroke-dasharray\": \"6 5\", \"stroke-linecap\": \"round\" });\n                labelBox(g, dmx(12.4), dmzc((zEnd + zSh) \/ 2) + (cut ? -18 : 20), \"trifft Gel\u00e4nde nicht\", { width: 122, size: 9, fill: COLORS.errorFill, stroke: COLORS.errorBorder, color: COLORS.error });\n                statusTxt = \"bindet nicht an\"; reachTxt = fmt(res.reach, 1) + \" m\"; chipKind = \"is-warn\"; chipTxt = \"bindet nicht an\";\n                head = \"<strong>An \" + staStr(s) + \" bindet die B\u00f6schung nicht an.<\/strong> Das Gel\u00e4nde liegt \" + deltaTxt + \" als die Planung. Bei \" + ratStr(n) + \" l\u00e4uft die B\u00f6schung \u00fcber die DGM-Grenze (\" + W + \" m) hinaus; das Gel\u00e4nde w\u00fcrde sie erst rund \" + fmt(over, 1) + \" m weiter au\u00dfen erreichen. Steiler b\u00f6schen zieht den Fu\u00df zur\u00fcck ins DGM, dann bindet die Station an.\";\n            }\n\n            \/\/ Zieltyp-Overlay\n            var hintEl = $(\"paZieltypHint\");\n            if (typ === \"breite\") {\n                var bxLine = dmx(6.2);\n                line(g, bxLine, 60, bxLine, yBot - 18, { stroke: COLORS.primaryDeep, \"stroke-width\": 1.4, \"stroke-dasharray\": \"7 4\" });\n                leader(g, kopf.x, kopf.y + 2, bxLine, kopf.y + 2, COLORS.primaryDeep);\n                labelBox(g, bxLine, 74, \"Breitenziel (Versatz)\", { width: 124, size: 8, fill: \"#eef3f7\", stroke: \"#cfe0ea\", color: COLORS.primaryDeep });\n                hintEl.innerHTML = \"<strong>Breitenziel:<\/strong> steuert eine Aufweitung \u00fcber einen Versatz. Erlaubte Objekte: Achse, Elementkante, Polylinie, Vermessungsfigur. Die Anbindung ans Gel\u00e4nde macht trotzdem das Oberfl\u00e4chenziel.\";\n            } else if (typ === \"hoehe\") {\n                leader(g, kopf.x, kopf.y, kopf.x - 2, kopf.y - 44, COLORS.planDeep);\n                labelBox(g, kopf.x - 2, kopf.y - 44, \"H\u00f6henziel (L\u00e4ngsschnitt)\", { width: 134, size: 8, fill: COLORS.planFill, stroke: \"#bbf7d0\", color: COLORS.planDeep });\n                hintEl.innerHTML = \"<strong>H\u00f6henziel:<\/strong> bindet eine Kante an eine vorgegebene H\u00f6he, etwa f\u00fcr eine Rampe. Erlaubte Objekte: L\u00e4ngsschnitt, Elementkante, 3D-Polylinie, Vermessungsfigur. F\u00fcr die Gel\u00e4ndeanbindung bleibt das Oberfl\u00e4chenziel zust\u00e4ndig.\";\n            } else {\n                hintEl.innerHTML = \"<strong>Oberfl\u00e4chenziel:<\/strong> macht die Anbindung ans Gel\u00e4nde. Erlaubtes Objekt: nur ein DGM (hier das Bestands-DGM). Breiten- und H\u00f6henziel steuern Aufweitung und Rampe. Alle drei setzt du erst im Profilk\u00f6rper, nicht im Querschnitt.\";\n            }\n\n            $(\"paDetSta\").textContent = staStr(s);\n            $(\"paDetFall\").textContent = fallTxt;\n            $(\"paDetDelta\").textContent = deltaTxt;\n            $(\"paDetReach\").textContent = reachTxt;\n            var cd = $(\"paChipDet\");\n            cd.className = \"pa-chip \" + chipKind;\n            cd.textContent = chipTxt;\n            $(\"paTextDet\").innerHTML = head;\n        }\n\n        \/\/ ============ NEBENRECHNUNG: VOLUMEN ============\n        function renderVolumen() {\n            var g = $(\"paVolDraw\");\n            clear(g);\n            var a1 = state.a1, a2 = state.a2, L = state.laenge;\n            var mean = (a1 + a2) \/ 2, V = mean * L;\n            $(\"paA1Text\").textContent = fmt(a1, 1) + \" m\u00b2\";\n            $(\"paA2Text\").textContent = fmt(a2, 1) + \" m\u00b2\";\n            $(\"paLaengeText\").textContent = String(L) + \" m\";\n\n            var baseY = 150;\n            function prof(cx, area) {\n                var h = 12 + (area \/ 60) * 96;\n                var wTop = 26, wBot = 40;\n                return [\n                    { x: cx - wBot \/ 2, y: baseY },\n                    { x: cx + wBot \/ 2, y: baseY },\n                    { x: cx + wTop \/ 2, y: baseY - h },\n                    { x: cx - wTop \/ 2, y: baseY - h }\n                ];\n            }\n            var p1x = 84, p2x = 188, p2dy = -58;\n            var P1 = prof(p1x, a1);\n            var P2 = prof(p2x, a2).map(function (p) { return { x: p.x, y: p.y + p2dy }; });\n\n            \/\/ Prisma zwischen A1 und A2\n            var prism = [P1[3], P1[2], P2[1], P2[0]];\n            poly(g, prism.concat([prism[0]]), { fill: \"#e7f3ec\", stroke: \"#bfe3cd\", \"stroke-width\": 1 });\n            line(g, P1[2].x, P1[2].y, P2[1].x, P2[1].y, { stroke: COLORS.plan, \"stroke-width\": 1.2, \"stroke-dasharray\": \"4 3\" });\n            line(g, P1[1].x, P1[1].y, P2[1].x, P2[1].y, { stroke: \"#c3cacf\", \"stroke-width\": 1, \"stroke-dasharray\": \"3 3\", opacity: 0.7 });\n\n            \/\/ A2 hinten\n            poly(g, P2.concat([P2[0]]), { fill: \"rgba(5,150,105,0.14)\", stroke: COLORS.plan, \"stroke-width\": 1.6, \"stroke-linejoin\": \"round\" });\n            text(g, p2x, P2[3].y - 7, \"A2\", { \"font-size\": 9.5, fill: COLORS.planDeep, \"text-anchor\": \"middle\", \"font-weight\": 800 });\n            text(g, p2x, baseY + p2dy + 13, fmt(a2, 1) + \" m\u00b2\", { \"font-size\": 7.6, fill: COLORS.muted, \"text-anchor\": \"middle\", \"font-weight\": 700 });\n            \/\/ A1 vorn\n            poly(g, P1.concat([P1[0]]), { fill: \"rgba(5,150,105,0.22)\", stroke: COLORS.plan, \"stroke-width\": 2, \"stroke-linejoin\": \"round\" });\n            text(g, p1x, P1[3].y - 7, \"A1\", { \"font-size\": 9.5, fill: COLORS.planDeep, \"text-anchor\": \"middle\", \"font-weight\": 800 });\n            text(g, p1x, baseY + 14, fmt(a1, 1) + \" m\u00b2\", { \"font-size\": 7.6, fill: COLORS.muted, \"text-anchor\": \"middle\", \"font-weight\": 700 });\n\n            \/\/ Abstand L\n            line(g, p1x, baseY + 26, p2x, baseY + p2dy + 26, { stroke: COLORS.muted, \"stroke-width\": 1 });\n            line(g, p1x, baseY + 22, p1x, baseY + 30, { stroke: COLORS.muted, \"stroke-width\": 1 });\n            line(g, p2x, baseY + p2dy + 22, p2x, baseY + p2dy + 30, { stroke: COLORS.muted, \"stroke-width\": 1 });\n            text(g, (p1x + p2x) \/ 2 + 2, baseY + p2dy \/ 2 + 40, \"L = \" + L + \" m\", { \"font-size\": 8.2, fill: COLORS.muted, \"text-anchor\": \"middle\", \"font-weight\": 700 });\n\n            $(\"paVolValue\").textContent = fmt(V, 0) + \" m\u00b3\";\n            $(\"paVolFormula\").textContent = \"= \" + fmt(mean, 1) + \" m\u00b2 \u00d7 \" + L + \" m\";\n        }\n\n        \/\/ ============ STEUERUNG ============\n        function renderAll() { renderHero(); renderDetail(); }\n\n        function setStation(idx) {\n            if (idx < 0) { idx = 0; }\n            if (idx > STATIONS.length - 1) { idx = STATIONS.length - 1; }\n            state.sel = idx;\n            $(\"paSel\").value = String(idx);\n            renderHero();\n            renderDetail();\n        }\n\n        ROOT.addEventListener(\"click\", function (e) {\n            var stBtn = e.target.closest ? e.target.closest(\"[data-pa-station]\") : null;\n            if (stBtn ? ROOT.contains(stBtn) : false) { setStation(parseInt(stBtn.getAttribute(\"data-pa-station\"), 10)); return; }\n            var zl = e.target.closest ? e.target.closest(\"[data-pa-ziel]\") : null;\n            if (zl ? ROOT.contains(zl) : false) { state.ziel = zl.getAttribute(\"data-pa-ziel\"); renderAll(); return; }\n            var zt = e.target.closest ? e.target.closest(\"[data-pa-zieltyp]\") : null;\n            if (zt ? ROOT.contains(zt) : false) { state.zieltyp = zt.getAttribute(\"data-pa-zieltyp\"); renderDetail(); return; }\n        });\n\n        ROOT.addEventListener(\"input\", function (e) {\n            var id = e.target.id;\n            var v = parseFloat(e.target.value);\n            if (isNaN(v)) { v = 0; }\n            if (id === \"paNeig\") { state.neig = v; renderAll(); }\n            else if (id === \"paSel\") { setStation(Math.round(v)); }\n            else if (id === \"paA1\") { state.a1 = v; renderVolumen(); }\n            else if (id === \"paA2\") { state.a2 = v; renderVolumen(); }\n            else if (id === \"paLaenge\") { state.laenge = Math.round(v); renderVolumen(); }\n        });\n\n        renderHero();\n        renderDetail();\n        renderVolumen();\n    })();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Profilk&ouml;rper: Anbindung &amp; Ziele Warum bindet Station 0+080 nicht an? Die B&ouml;schung wird an jeder Station gegen das Gel&auml;nde gerechnet. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"disabled","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[45],"tags":[],"class_list":["post-2325","post","type-post","status-publish","format-standard","hentry","category-profilkoerper"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":false,"author_link":"https:\/\/cad-kompass.de\/?author=1"},"uagb_comment_info":0,"uagb_excerpt":"Profilk&ouml;rper: Anbindung &amp; Ziele Warum bindet Station 0+080 nicht an? Die B&ouml;schung wird an jeder Station gegen das Gel&auml;nde gerechnet. [&hellip;]","_links":{"self":[{"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/posts\/2325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2325"}],"version-history":[{"count":3,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/posts\/2325\/revisions"}],"predecessor-version":[{"id":2329,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/posts\/2325\/revisions\/2329"}],"wp:attachment":[{"href":"https:\/\/cad-kompass.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2325"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2325"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}