{"id":1980,"date":"2026-04-21T07:18:30","date_gmt":"2026-04-21T05:18:30","guid":{"rendered":"https:\/\/cad-kompass.de\/?p=1980"},"modified":"2026-06-26T17:50:40","modified_gmt":"2026-06-26T15:50:40","slug":"ausrundungsrechner","status":"publish","type":"post","link":"https:\/\/cad-kompass.de\/?p=1980","title":{"rendered":"Ausrundungsrechner"},"content":{"rendered":"\n<style>\n    .ar-box {\n        --ar-primary: #3f5f75;\n        --ar-primary-dark: #2c4a5e;\n        --ar-primary-deep: #1e3548;\n        --ar-ink: #1e293b;\n        --ar-text: #334155;\n        --ar-muted: #64748b;\n        --ar-border: #c8d6e0;\n        --ar-surface: #f7f9fb;\n        --ar-accent: #e8913a;\n        --ar-tangent: #5f7f68;\n        --ar-tangent-dark: #385847;\n        --ar-tangent-bg: #f1f7f2;\n        --ar-tangent-border: #b8d0bf;\n        --ar-tangent-text: #385847;\n        --ar-extreme: #b84b5a;\n        --ar-extreme-dark: #8f2f3d;\n        --ar-extreme-bg: #fff1f3;\n        --ar-extreme-border: #e9aab3;\n        --ar-probe: #0e7490;\n        --ar-probe-bg: #eef9fc;\n        --ar-probe-soft: #f8fdff;\n        --ar-probe-border: #8fcade;\n        background: var(--ar-surface);\n        border: 3px solid var(--ar-primary);\n        border-radius: 8px;\n        margin: 28px 0;\n        overflow: hidden;\n        position: relative;\n        font-family: inherit;\n        color: var(--ar-text);\n        line-height: 1.6;\n    }\n    .ar-box *, .ar-box *::before, .ar-box *::after { box-sizing: border-box; }\n    .ar-header { background: linear-gradient(135deg, var(--ar-primary-deep) 0%, var(--ar-primary-dark) 100%); padding: 20px 28px 18px; position: relative; overflow: hidden; }\n    .ar-header::after { content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 3px; background: repeating-linear-gradient(90deg, var(--ar-primary) 0px, var(--ar-primary) 8px, transparent 8px, transparent 12px); }\n    .ar-header-top { display: flex; align-items: center; gap: 12px; margin-bottom: 6px; }\n    .ar-header-icon { width: 36px; height: 36px; flex-shrink: 0; color: #fff; opacity: 0.9; }\n    .ar-box .ar-box-title { font-size: 1.15rem; font-weight: 700; color: #fff; margin: 0; padding: 0; letter-spacing: 0.02em; }\n    .ar-box .ar-box-desc { font-size: 0.85rem; color: rgba(255,255,255,0.7); margin: 0; padding: 0; line-height: 1.5; display: block; }\n\n    .ar-body { padding: 22px 28px 24px; }\n    .ar-privacy { background: #f0fdf4; border: 1px solid #bbf7d0; border-radius: 3px; padding: 9px 14px; margin-bottom: 16px; font-size: 0.8rem; color: #15803d; line-height: 1.5; display: flex; align-items: center; gap: 8px; }\n    .ar-privacy::before { content: '\\1F512'; flex-shrink: 0; font-size: 0.9rem; }\n\n    .ar-tabs { display: flex; gap: 0; margin-bottom: 18px; border-bottom: 2px solid var(--ar-border); }\n    .ar-tab { flex: 1; background: #fff; border: 1px solid var(--ar-border); border-bottom: none; padding: 10px 16px; font-size: 0.88rem; font-weight: 600; color: var(--ar-muted); cursor: pointer; font-family: inherit; transition: all 0.15s; border-radius: 3px 3px 0 0; margin-bottom: -2px; }\n    .ar-tab:first-child { margin-right: -1px; }\n    .ar-tab[data-active=\"1\"] { background: var(--ar-primary); color: #fff; border-color: var(--ar-primary); border-bottom: 2px solid var(--ar-primary); }\n    .ar-tab:hover:not([data-active=\"1\"]) { background: #f0f5fa; color: var(--ar-primary); }\n\n    .ar-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }\n    .ar-panel { background: #fff; border: 1px solid var(--ar-border); border-radius: 3px; padding: 16px 18px; }\n    .ar-panel-title { font-size: 0.72rem; font-weight: 700; color: var(--ar-primary); text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 10px; padding-bottom: 5px; border-bottom: 1px solid var(--ar-border); }\n\n    .ar-field { margin-bottom: 10px; }\n    .ar-field-label { display: flex; justify-content: space-between; align-items: baseline; font-size: 0.82rem; font-weight: 600; color: var(--ar-ink); margin-bottom: 4px; }\n    .ar-field-unit { font-size: 0.74rem; color: var(--ar-muted); font-weight: 500; }\n    .ar-input { width: 100%; padding: 7px 10px; font-size: 0.9rem; border: 1px solid var(--ar-border); border-radius: 3px; background: #fff; color: var(--ar-ink); font-family: inherit; font-variant-numeric: tabular-nums; transition: border-color 0.15s, box-shadow 0.15s; }\n    .ar-input:focus { outline: 0; border-color: var(--ar-primary); box-shadow: 0 0 0 3px rgba(63,95,117,0.15); }\n\n    .ar-radio-row { display: flex; gap: 8px; margin-bottom: 10px; }\n    .ar-radio { flex: 1; }\n    .ar-radio input { display: none; }\n    .ar-radio label { display: block; text-align: center; padding: 7px 10px; border: 1px solid var(--ar-border); border-radius: 3px; font-size: 0.84rem; font-weight: 500; cursor: pointer; background: #fff; color: var(--ar-text); transition: all 0.15s; }\n    .ar-radio input:checked + label { background: var(--ar-primary); color: #fff; border-color: var(--ar-primary); }\n\n    .ar-result-row { display: grid; grid-template-columns: 1fr auto auto; gap: 8px; align-items: center; padding: 7px 0; border-bottom: 1px solid #f1f5f9; font-size: 0.86rem; }\n    .ar-result-row:last-child { border-bottom: 0; }\n    .ar-result-label { color: var(--ar-muted); }\n    .ar-result-value { font-weight: 700; color: var(--ar-ink); font-variant-numeric: tabular-nums; }\n    .ar-copy { background: transparent; border: 1px solid var(--ar-border); border-radius: 3px; padding: 3px 8px; font-size: 0.72rem; color: var(--ar-muted); cursor: pointer; font-family: inherit; transition: all 0.15s; }\n    .ar-copy:hover { background: var(--ar-primary); color: #fff; border-color: var(--ar-primary); }\n    .ar-copy.copied { background: #10b981; color: #fff; border-color: #10b981; }\n\n    .ar-warn { background: #fffbeb; border-left: 3px solid #d97706; padding: 10px 14px; margin-top: 12px; font-size: 0.82rem; color: #92700c; line-height: 1.5; border-radius: 0 3px 3px 0; }\n    .ar-info { background: #f0f5fa; border-left: 3px solid var(--ar-primary); padding: 10px 14px; margin-top: 12px; font-size: 0.82rem; color: var(--ar-text); line-height: 1.5; border-radius: 0 3px 3px 0; }\n\n    .ar-viz { background: #fff; border: 1px solid var(--ar-border); border-radius: 3px; padding: 12px; margin-top: 14px; }\n    .ar-viz svg { width: 100%; height: auto; display: block; font-family: inherit; }\n\n    .ar-formula { font-family: inherit; font-size: 0.78rem; background: #f0f5fa; padding: 3px 7px; border-radius: 2px; color: var(--ar-primary-dark); font-variant-numeric: tabular-nums; }\n\n    .ar-mini-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }\n    .ar-station-help { background: #f0f5fa; border: 1px solid #d6e4ee; border-left: 3px solid var(--ar-primary); border-radius: 0 3px 3px 0; padding: 10px 12px; margin: 2px 0 12px; }\n    .ar-station-help-title { font-size: 0.72rem; font-weight: 800; color: var(--ar-primary); text-transform: uppercase; letter-spacing: 0.07em; margin-bottom: 7px; }\n    .ar-station-help-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }\n    .ar-station-help-card { background: #fff; border: 1px solid #dbe7ef; border-radius: 3px; padding: 8px 9px; }\n    .ar-station-help-label { color: var(--ar-ink); font-size: 0.78rem; font-weight: 800; margin-bottom: 2px; }\n    .ar-station-help-text { color: var(--ar-muted); font-size: 0.74rem; line-height: 1.35; font-variant-numeric: tabular-nums; }\n    .ar-actions { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 9px; }\n    .ar-action-title { font-size: 0.72rem; font-weight: 700; color: var(--ar-primary); text-transform: uppercase; letter-spacing: 0.08em; }\n    .ar-action {\n        appearance: none;\n        border: 1px solid var(--ar-border);\n        background: #fff;\n        color: var(--ar-text);\n        border-radius: 3px;\n        min-height: 32px;\n        padding: 6px 10px;\n        font: inherit;\n        font-size: 0.78rem;\n        font-weight: 700;\n        cursor: pointer;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        gap: 6px;\n        transition: background-color 0.15s, border-color 0.15s, color 0.15s;\n    }\n    .ar-action:hover, .ar-action:focus-visible { outline: none; border-color: var(--ar-primary); color: var(--ar-primary); }\n    .ar-action svg { width: 15px; height: 15px; flex-shrink: 0; }\n    .ar-action.copied { background: #10b981; color: #fff; border-color: #10b981; }\n    .ar-stakeout { background: #fff; border: 1px solid var(--ar-border); border-radius: 3px; padding: 14px 16px; margin-top: 14px; }\n    .ar-stakeout-summary { color: var(--ar-muted); font-size: 0.8rem; line-height: 1.45; margin-bottom: 9px; }\n    .ar-table-wrap { overflow-x: auto; border: 1px solid #e2e8f0; border-radius: 3px; }\n    .ar-table { width: 100%; border-collapse: collapse; font-size: 0.8rem; min-width: 720px; }\n    .ar-table th, .ar-table td { padding: 7px 8px; border-bottom: 1px solid #edf2f7; text-align: right; font-variant-numeric: tabular-nums; }\n    .ar-table th:first-child, .ar-table td:first-child { text-align: left; }\n    .ar-table th { background: #f0f5fa; color: var(--ar-primary-dark); font-size: 0.68rem; font-weight: 800; text-transform: uppercase; letter-spacing: 0.05em; white-space: nowrap; }\n    .ar-table th span { display: block; margin-top: 1px; color: var(--ar-muted); font-size: 0.62rem; font-weight: 700; text-transform: none; letter-spacing: 0; }\n    .ar-table tr:last-child td { border-bottom: 0; }\n    .ar-table .ar-key-row td { background: #fffbeb; color: #7c4d10; font-weight: 700; }\n    .ar-table .ar-tangent-row td { background: var(--ar-tangent-bg); color: var(--ar-tangent-text); font-weight: 700; border-top: 1px solid var(--ar-tangent-border); border-bottom: 1px solid var(--ar-tangent-border); }\n    .ar-table .ar-tangent-row td:first-child { border-left: 3px solid var(--ar-tangent); }\n    .ar-table .ar-extreme-row td { background: var(--ar-extreme-bg); color: var(--ar-extreme-dark); font-weight: 700; border-top: 1px solid var(--ar-extreme-border); border-bottom: 1px solid var(--ar-extreme-border); }\n    .ar-table .ar-extreme-row td:first-child { border-left: 3px solid var(--ar-extreme); }\n    .ar-table .ar-probe-row td { background: var(--ar-probe-bg); color: #0c5f73; font-weight: 700; border-top: 1px solid var(--ar-probe-border); border-bottom: 1px solid var(--ar-probe-border); }\n    .ar-table .ar-probe-row td:first-child { border-left: 3px solid var(--ar-probe); }\n    .ar-probe-marker-field { border: 1px solid var(--ar-probe-border); border-left: 4px solid var(--ar-probe); padding: 10px 12px 12px; background: linear-gradient(180deg, var(--ar-probe-soft) 0%, #fff 100%); border-radius: 4px; margin: 0 0 12px; }\n    .ar-probe-marker-field .ar-field-label { color: var(--ar-probe); align-items: center; flex-wrap: wrap; margin-bottom: 7px; gap: 8px; }\n    .ar-probe-marker-field .ar-field-unit { color: #47778a; font-weight: 600; }\n    .ar-probe-label-main { display: inline-flex; align-items: center; gap: 6px; }\n    .ar-probe-label-main::before { content: \"\"; width: 8px; height: 8px; border-radius: 50%; background: var(--ar-probe); box-shadow: 0 0 0 3px rgba(14,122,144,0.12); }\n    .ar-probe-marker-field .ar-input { border-color: var(--ar-probe-border); background: #fff; }\n    .ar-probe-marker-field .ar-input:focus { border-color: var(--ar-probe); box-shadow: 0 0 0 3px rgba(14,122,144,0.15); }\n    .ar-viz .ar-probe-label-box { fill: var(--ar-probe-bg); stroke: var(--ar-probe); }\n    .ar-viz .ar-probe-label-text { fill: var(--ar-probe); font-weight: 700; }\n    .ar-viz .ar-extreme-dot { fill: var(--ar-extreme); }\n    .ar-viz .ar-extreme-label-box { fill: var(--ar-extreme-bg); stroke: var(--ar-extreme); }\n    .ar-viz .ar-extreme-label-text { fill: var(--ar-extreme-dark); font-weight: 700; }\n    .ar-viz .ar-tangent-dot { fill: var(--ar-tangent); }\n    .ar-viz .ar-tangent-label-box { fill: var(--ar-tangent-bg); stroke: var(--ar-tangent-border); }\n    .ar-viz .ar-tangent-label-text { fill: var(--ar-tangent-dark); font-weight: 700; }\n    .ar-table-note { margin-top: 8px; color: var(--ar-muted); font-size: 0.74rem; line-height: 1.4; }\n\n    @media (max-width: 700px) {\n        .ar-grid { grid-template-columns: 1fr; gap: 14px; }\n        .ar-header { padding: 16px 20px 14px; }\n        .ar-body { padding: 18px 20px 20px; }\n        .ar-mini-grid { grid-template-columns: 1fr; gap: 0; }\n        .ar-station-help-grid { grid-template-columns: 1fr; }\n        .ar-actions { align-items: stretch; flex-direction: column; }\n    }\n<\/style>\n\n<div class=\"ar-box\">\n    <div class=\"ar-header\">\n        <div class=\"ar-header-top\">\n            <svg class=\"ar-header-icon\" viewBox=\"0 0 36 36\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <rect x=\"7\" y=\"5\" width=\"22\" height=\"26\" rx=\"2\"\/>\n                <rect x=\"10\" y=\"8\" width=\"16\" height=\"6\" rx=\"1\" fill=\"rgba(255,255,255,0.15)\"\/>\n                <circle cx=\"12\" cy=\"19\" r=\"1.2\" fill=\"currentColor\" stroke=\"none\"\/>\n                <circle cx=\"18\" cy=\"19\" r=\"1.2\" fill=\"currentColor\" stroke=\"none\"\/>\n                <circle cx=\"24\" cy=\"19\" r=\"1.2\" fill=\"currentColor\" stroke=\"none\"\/>\n                <circle cx=\"12\" cy=\"24\" r=\"1.2\" fill=\"currentColor\" stroke=\"none\"\/>\n                <circle cx=\"18\" cy=\"24\" r=\"1.2\" fill=\"currentColor\" stroke=\"none\"\/>\n                <circle cx=\"24\" cy=\"24\" r=\"1.2\" fill=\"currentColor\" stroke=\"none\"\/>\n            <\/svg>\n            <div>\n                <h3 class=\"ar-box-title\">Ausrundungsrechner<\/h3>\n                <span class=\"ar-box-desc\">Kuppe oder Wanne durchrechnen: mit Hoch-\/Tiefpunkt, Pr\u00fcfstation und kopierbarer Stationsliste f\u00fcr die Ausrundung.<\/span>\n            <\/div>\n        <\/div>\n    <\/div>\n    <div class=\"ar-body\">\n        <div class=\"ar-privacy\">L\u00e4uft komplett im Browser. Keine Daten verlassen deinen Rechner.<\/div>\n\n        <!-- Kuppe \/ Wanne -->\n        <div class=\"ar-tabs\">\n            <button class=\"ar-tab\" data-active=\"1\" onclick=\"arSwitchType(this, 'kuppe')\">Kuppe (Hochpunkt)<\/button>\n            <button class=\"ar-tab\" data-active=\"0\" onclick=\"arSwitchType(this, 'wanne')\">Wanne (Tiefpunkt)<\/button>\n        <\/div>\n\n        <div class=\"ar-grid\">\n            <!-- Eingabe-Panel -->\n            <div class=\"ar-panel\">\n                <div class=\"ar-panel-title\">Eingaben<\/div>\n\n                <div class=\"ar-field\">\n                    <div class=\"ar-field-label\">Anfangsneigung <span class=\"ar-field-unit\">%<\/span><\/div>\n                    <input type=\"number\" step=\"0.01\" class=\"ar-input\" id=\"arS1\" value=\"2.0\" oninput=\"arCompute()\">\n                <\/div>\n\n                <div class=\"ar-field\">\n                    <div class=\"ar-field-label\">Endneigung <span class=\"ar-field-unit\">%<\/span><\/div>\n                    <input type=\"number\" step=\"0.01\" class=\"ar-input\" id=\"arS2\" value=\"-1.5\" oninput=\"arCompute()\">\n                <\/div>\n\n                <div class=\"ar-field\">\n                    <div class=\"ar-field-label\">Ausrundungstyp<\/div>\n                    <div class=\"ar-radio-row\">\n                        <div class=\"ar-radio\">\n                            <input type=\"radio\" name=\"arForm\" id=\"arFormParabel\" value=\"parabel\" checked onchange=\"arCompute()\">\n                            <label for=\"arFormParabel\">Parabel (RAS-L)<\/label>\n                        <\/div>\n                        <div class=\"ar-radio\">\n                            <input type=\"radio\" name=\"arForm\" id=\"arFormKreis\" value=\"kreis\" onchange=\"arCompute()\">\n                            <label for=\"arFormKreis\">Kreisbogen<\/label>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"ar-field\">\n                    <div class=\"ar-field-label\">Halbmesser H <span class=\"ar-field-unit\">m<\/span><\/div>\n                    <input type=\"number\" step=\"1\" min=\"1\" class=\"ar-input\" id=\"arH\" value=\"8000\" oninput=\"arCompute()\">\n                <\/div>\n\n                    <div class=\"ar-field ar-probe-marker-field\">\n                        <div class=\"ar-field-label\"><span class=\"ar-probe-label-main\">TS-Pr\u00fcfpunkt<\/span> <span class=\"ar-field-unit\">m (Projektstation des Tangentenschnitts)<\/span><\/div>\n                        <input type=\"number\" step=\"0.1\" class=\"ar-input\" id=\"arStationTS\" value=\"150.000\" oninput=\"arCompute()\">\n                    <\/div>\n\n                <div class=\"ar-field\">\n                    <div class=\"ar-field-label\">TS-H\u00f6he <span class=\"ar-field-unit\">m (Tangentenschnitt)<\/span><\/div>\n                    <input type=\"number\" step=\"0.01\" class=\"ar-input\" id=\"arHoeheTS\" value=\"210.00\" oninput=\"arCompute()\">\n                <\/div>\n\n                <div class=\"ar-station-help\">\n                    <div class=\"ar-station-help-title\">Zwei Stationierungen<\/div>\n                    <div class=\"ar-station-help-grid\">\n                        <div class=\"ar-station-help-card\">\n                            <div class=\"ar-station-help-label\">Projektstation<\/div>\n                            <div class=\"ar-station-help-text\" id=\"arStationHintProject\">Kommt aus dem TS-Pr\u00fcfpunkt.<\/div>\n                        <\/div>\n                        <div class=\"ar-station-help-card\">\n                            <div class=\"ar-station-help-label\">Station ab TA<\/div>\n                            <div class=\"ar-station-help-text\" id=\"arStationHintLocal\">Lokale Z\u00e4hlung der Ausrundung.<\/div>\n                        <\/div>\n                    <\/div>\n                    <div style=\"margin-top:7px;padding-top:7px;border-top:1px solid #d6e4ee;font-size:0.73rem;color:#475569;line-height:1.5;\">\n                        <strong style=\"color:#3f5f75;\">Versatz =<\/strong>\n                        <span id=\"arVersatzValue\" style=\"font-variant-numeric:tabular-nums;font-weight:700;color:#1e3548;\">\u2013<\/span>\n                        &nbsp;(TA-Projektstation) &nbsp;\u00b7&nbsp;\n                        Projektstation = Station ab TA + Versatz\n                    <\/div>\n                <\/div>\n\n                <div class=\"ar-mini-grid\">\n                    <div class=\"ar-field\">\n                        <div class=\"ar-field-label\">Pr\u00fcfpunkt <span class=\"ar-field-unit\">m (Projektstation)<\/span><\/div>\n                        <input type=\"number\" step=\"0.1\" class=\"ar-input\" id=\"arProbeStation\" value=\"150.000\" oninput=\"arCompute()\">\n                    <\/div>\n\n                    <div class=\"ar-field\">\n                        <div class=\"ar-field-label\">Listenintervall <span class=\"ar-field-unit\">m<\/span><\/div>\n                        <input type=\"number\" step=\"1\" min=\"1\" class=\"ar-input\" id=\"arStep\" value=\"25\" oninput=\"arCompute()\">\n                    <\/div>\n                <\/div>\n\n                <div class=\"ar-field\">\n                    <div class=\"ar-field-label\">Entwurfsgeschwindigkeit <span class=\"ar-field-unit\">km\/h (optional, f\u00fcr Hmin-Check)<\/span><\/div>\n                    <input type=\"number\" step=\"10\" class=\"ar-input\" id=\"arVe\" value=\"70\" oninput=\"arCompute()\">\n                <\/div>\n            <\/div>\n\n            <!-- Ergebnis-Panel -->\n            <div class=\"ar-panel\">\n                <div class=\"ar-panel-title\">Ergebnisse<\/div>\n\n                <div class=\"ar-result-row\">\n                    <span class=\"ar-result-label\">Neigungsdifferenz \u0394s<\/span>\n                    <span class=\"ar-result-value\" id=\"arOutDs\">\u2013<\/span>\n                    <button class=\"ar-copy\" onclick=\"arCopy('arOutDs', this)\">Kopieren<\/button>\n                <\/div>\n                <div class=\"ar-result-row\">\n                    <span class=\"ar-result-label\">Ausrundungsl\u00e4nge L (Station)<\/span>\n                    <span class=\"ar-result-value\" id=\"arOutL\">\u2013<\/span>\n                    <button class=\"ar-copy\" onclick=\"arCopy('arOutL', this)\">Kopieren<\/button>\n                <\/div>\n                <div class=\"ar-result-row\">\n                    <span class=\"ar-result-label\">Tangentenl\u00e4nge T<\/span>\n                    <span class=\"ar-result-value\" id=\"arOutT\">\u2013<\/span>\n                    <button class=\"ar-copy\" onclick=\"arCopy('arOutT', this)\">Kopieren<\/button>\n                <\/div>\n                <div class=\"ar-result-row\">\n                    <span class=\"ar-result-label\">Projektstation TA<\/span>\n                    <span class=\"ar-result-value\" id=\"arOutStationA\">\u2013<\/span>\n                    <button class=\"ar-copy\" onclick=\"arCopy('arOutStationA', this)\">Kopieren<\/button>\n                <\/div>\n                <div class=\"ar-result-row\">\n                    <span class=\"ar-result-label\">Projektstation TE<\/span>\n                    <span class=\"ar-result-value\" id=\"arOutStationE\">\u2013<\/span>\n                    <button class=\"ar-copy\" onclick=\"arCopy('arOutStationE', this)\">Kopieren<\/button>\n                <\/div>\n                <div class=\"ar-result-row\">\n                    <span class=\"ar-result-label\">H\u00f6he Anfang (TA)<\/span>\n                    <span class=\"ar-result-value\" id=\"arOutHoeheA\">\u2013<\/span>\n                    <button class=\"ar-copy\" onclick=\"arCopy('arOutHoeheA', this)\">Kopieren<\/button>\n                <\/div>\n                <div class=\"ar-result-row\">\n                    <span class=\"ar-result-label\">H\u00f6he Ende (TE)<\/span>\n                    <span class=\"ar-result-value\" id=\"arOutHoeheE\">\u2013<\/span>\n                    <button class=\"ar-copy\" onclick=\"arCopy('arOutHoeheE', this)\">Kopieren<\/button>\n                <\/div>\n                <div class=\"ar-result-row\">\n                    <span class=\"ar-result-label\">Max. Scheitelverschiebung<\/span>\n                    <span class=\"ar-result-value\" id=\"arOutDh\">\u2013<\/span>\n                    <button class=\"ar-copy\" onclick=\"arCopy('arOutDh', this)\">Kopieren<\/button>\n                <\/div>\n                <div class=\"ar-result-row\">\n                    <span class=\"ar-result-label\">Projektstation Hoch-\/Tiefpunkt<\/span>\n                    <span class=\"ar-result-value\" id=\"arOutStationSch\">\u2013<\/span>\n                    <button class=\"ar-copy\" onclick=\"arCopy('arOutStationSch', this)\">Kopieren<\/button>\n                <\/div>\n                <div class=\"ar-result-row\">\n                    <span class=\"ar-result-label\">H\u00f6he Hoch-\/Tiefpunkt<\/span>\n                    <span class=\"ar-result-value\" id=\"arOutHoeheSch\">\u2013<\/span>\n                    <button class=\"ar-copy\" onclick=\"arCopy('arOutHoeheSch', this)\">Kopieren<\/button>\n                <\/div>\n                <div class=\"ar-result-row\">\n                    <span class=\"ar-result-label\">H\u00f6he Pr\u00fcfpunkt<\/span>\n                    <span class=\"ar-result-value\" id=\"arOutProbeH\">\u2013<\/span>\n                    <button class=\"ar-copy\" onclick=\"arCopy('arOutProbeH', this)\">Kopieren<\/button>\n                <\/div>\n                <div class=\"ar-result-row\">\n                    <span class=\"ar-result-label\">Neigung Pr\u00fcfpunkt<\/span>\n                    <span class=\"ar-result-value\" id=\"arOutProbeSlope\">\u2013<\/span>\n                    <button class=\"ar-copy\" onclick=\"arCopy('arOutProbeSlope', this)\">Kopieren<\/button>\n                <\/div>\n\n                <div id=\"arHminBox\"><\/div>\n\n                <div class=\"ar-info\">\n                    <strong>Parabel (RAS-L):<\/strong> <span class=\"ar-formula\">L = H \u00b7 |s1 \u2013 s2| \/ 100<\/span> \u00b7 <span class=\"ar-formula\">T = L \/ 2<\/span> \u00b7 <span class=\"ar-formula\">\u0394h = T \u00b7 \u0394s \/ 400 = T\u00b2 \/ (2H)<\/span><br>\n                    <strong>Kreisbogen:<\/strong> <span class=\"ar-formula\">T = H \u00b7 tan(|\u03b1|\/2)<\/span> \u00b7 <span class=\"ar-formula\">Bogenl\u00e4nge = H \u00b7 |\u03b1|<\/span> mit <span class=\"ar-formula\">\u03b1 = arctan(s2\/100) \u2013 arctan(s1\/100)<\/span>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"ar-viz\">\n            <svg viewBox=\"0 0 900 460\" preserveAspectRatio=\"xMidYMid meet\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                <defs>\n                    <marker id=\"arArrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\n                        <path d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"#64748b\"\/>\n                    <\/marker>\n                    <marker id=\"arStationArrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto\">\n                        <path d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"#3f5f75\"\/>\n                    <\/marker>\n                    <linearGradient id=\"arBogenFill\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n                        <stop offset=\"0%\" stop-color=\"#e8913a\" stop-opacity=\"0.22\"\/>\n                        <stop offset=\"100%\" stop-color=\"#e8913a\" stop-opacity=\"0.05\"\/>\n                    <\/linearGradient>\n                    <clipPath id=\"arPlotClip\">\n                        <rect x=\"60\" y=\"28\" width=\"812\" height=\"272\"\/>\n                    <\/clipPath>\n                <\/defs>\n\n                <!-- Grid -->\n                <g stroke=\"#eef2f6\" stroke-width=\"0.6\">\n                    <line x1=\"60\" y1=\"80\" x2=\"870\" y2=\"80\"\/>\n                    <line x1=\"60\" y1=\"130\" x2=\"870\" y2=\"130\"\/>\n                    <line x1=\"60\" y1=\"180\" x2=\"870\" y2=\"180\"\/>\n                    <line x1=\"60\" y1=\"230\" x2=\"870\" y2=\"230\"\/>\n                <\/g>\n\n                <!-- Achsen -->\n                <line x1=\"60\" y1=\"30\" x2=\"60\" y2=\"300\" stroke=\"#1e293b\" stroke-width=\"2\"\/>\n                <line x1=\"60\" y1=\"300\" x2=\"870\" y2=\"300\" stroke=\"#1e293b\" stroke-width=\"2\"\/>\n                <text transform=\"rotate(-90)\" x=\"-165\" y=\"46\" font-family=\"inherit\" font-size=\"10\" fill=\"#1e293b\" text-anchor=\"middle\">H\u00f6he<\/text>\n                <text x=\"822\" y=\"316\" font-family=\"inherit\" font-size=\"10\" fill=\"#1e293b\">Station<\/text>\n\n                <!-- Geometrie (auf Plot-Bereich geclippt) -->\n                <g>\n                <!-- Ausrundungsbogen-F\u00fcllung -->\n                <path id=\"arVizBogenFill\" d=\"\" fill=\"#e8913a18\" stroke=\"none\"\/>\n\n                <!-- Sehne TA-TE -->\n                <line id=\"arVizSehne\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#94a3b8\" stroke-width=\"0.8\" stroke-dasharray=\"3 3\" opacity=\"0.55\"\/>\n\n                <!-- Tangentenlinien: solid (au\u00dferhalb TA\u2013TE) + gestrichelt (TA\u2013TS und TS\u2013TE) -->\n                <line id=\"arVizTan1Solid\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#3f5f75\" stroke-width=\"1.6\" opacity=\"0.7\"\/>\n                <line id=\"arVizTan2Solid\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#3f5f75\" stroke-width=\"1.6\" opacity=\"0.7\"\/>\n                <line id=\"arVizTan1\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#3f5f75\" stroke-width=\"1.6\" stroke-dasharray=\"7 4\" opacity=\"0.7\"\/>\n                <line id=\"arVizTan2\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#3f5f75\" stroke-width=\"1.6\" stroke-dasharray=\"7 4\" opacity=\"0.7\"\/>\n\n                <!-- Ma\u00dfhilfslinien (\u0394h) -->\n                <line id=\"arVizDimDhHelp1\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#94a3b8\" stroke-width=\"0.6\" stroke-dasharray=\"2 2\"\/>\n                <line id=\"arVizDimDhHelp2\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#94a3b8\" stroke-width=\"0.6\" stroke-dasharray=\"2 2\"\/>\n\n                <!-- Ma\u00dflinien -->\n                <line id=\"arVizDimL\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#64748b\" stroke-width=\"0.9\"\/>\n                <line id=\"arVizDimT\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#64748b\" stroke-width=\"0.9\"\/>\n                <line id=\"arVizDimDh\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#64748b\" stroke-width=\"0.9\"\/>\n\n                <!-- Ausrundungskurve -->\n                <path id=\"arVizCurve\" d=\"\" stroke=\"#e8913a\" stroke-width=\"2.8\" fill=\"none\" stroke-linecap=\"round\"\/>\n                <line id=\"arVizProbeLine\" x1=\"0\" y1=\"28\" x2=\"0\" y2=\"300\" stroke=\"#0e7490\" stroke-width=\"1.1\" stroke-dasharray=\"4 4\" opacity=\"0.8\"\/>\n                <circle id=\"arVizProbe\" cx=\"0\" cy=\"0\" r=\"4.2\" fill=\"#0e7490\" stroke=\"#fff\" stroke-width=\"1.2\"\/>\n                <\/g>\n\n                <!-- Tick-Marks an X-Achse + Leader-Linien f\u00fcr TA\/TE -->\n                <line id=\"arTickTA\" x1=\"0\" y1=\"300\" x2=\"0\" y2=\"308\" stroke=\"#94a3b8\" stroke-width=\"1.5\"\/>\n                <line id=\"arTickTE\" x1=\"0\" y1=\"300\" x2=\"0\" y2=\"308\" stroke=\"#94a3b8\" stroke-width=\"1.5\"\/>\n                <line id=\"arLeaderTA\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#c8d6e0\" stroke-width=\"0.9\" stroke-dasharray=\"2 2\"\/>\n                <line id=\"arLeaderTE\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#c8d6e0\" stroke-width=\"0.9\" stroke-dasharray=\"2 2\"\/>\n\n                <!-- Lokale Stationierung ab TA -->\n                <line id=\"arVizLocalAxis\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#3f5f75\" stroke-width=\"1.2\"\/>\n                <line id=\"arVizLocalStartTick\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#3f5f75\" stroke-width=\"1.2\"\/>\n                <line id=\"arVizLocalTsTick\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#3f5f75\" stroke-width=\"1.2\" stroke-dasharray=\"2 2\"\/>\n                <line id=\"arVizLocalEndTick\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#3f5f75\" stroke-width=\"1.2\"\/>\n                <g id=\"arVizLocalStartPill\">\n                    <rect class=\"ar-tangent-label-box\" x=\"-37\" y=\"-9\" width=\"74\" height=\"18\" rx=\"3\" fill=\"#f1f7f2\" stroke=\"#b8d0bf\" stroke-width=\"0.9\"\/>\n                    <text id=\"arVizLocalStartText\" class=\"ar-tangent-label-text\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"700\" fill=\"#385847\" text-anchor=\"middle\">TA 0+000<\/text>\n                <\/g>\n                <g id=\"arVizLocalTsPill\">\n                    <rect x=\"-38\" y=\"-9\" width=\"76\" height=\"18\" rx=\"3\" fill=\"#fff\" stroke=\"#3f5f75\" stroke-width=\"0.9\"\/>\n                    <text id=\"arVizLocalTsText\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"700\" fill=\"#3f5f75\" text-anchor=\"middle\">TS<\/text>\n                <\/g>\n                <g id=\"arVizLocalEndPill\">\n                    <rect class=\"ar-tangent-label-box\" x=\"-37\" y=\"-9\" width=\"74\" height=\"18\" rx=\"3\" fill=\"#f1f7f2\" stroke=\"#b8d0bf\" stroke-width=\"0.9\"\/>\n                    <text id=\"arVizLocalEndText\" class=\"ar-tangent-label-text\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"700\" fill=\"#385847\" text-anchor=\"middle\">TE<\/text>\n                <\/g>\n                <g id=\"arVizLocalAxisLabel\">\n                    <rect x=\"-52\" y=\"-8\" width=\"104\" height=\"16\" rx=\"3\" fill=\"#edf4f8\" stroke=\"#3f5f75\" stroke-width=\"0.8\"\/>\n                    <text y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"700\" fill=\"#3f5f75\" text-anchor=\"middle\">Station ab TA<\/text>\n                <\/g>\n                <line id=\"arVizProjectAxis\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#64748b\" stroke-width=\"1.1\"\/>\n                <line id=\"arVizProjectStartTick\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#64748b\" stroke-width=\"1.1\"\/>\n                <line id=\"arVizProjectTsTick\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#64748b\" stroke-width=\"1.1\" stroke-dasharray=\"2 2\"\/>\n                <line id=\"arVizProjectEndTick\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" stroke=\"#64748b\" stroke-width=\"1.1\"\/>\n                <g id=\"arVizProjectStartPill\">\n                    <rect class=\"ar-tangent-label-box\" x=\"-44\" y=\"-9\" width=\"88\" height=\"18\" rx=\"3\" fill=\"#f1f7f2\" stroke=\"#b8d0bf\" stroke-width=\"0.9\"\/>\n                    <text id=\"arVizProjectStartText\" class=\"ar-tangent-label-text\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"700\" fill=\"#385847\" text-anchor=\"middle\">TA<\/text>\n                <\/g>\n                <g id=\"arVizProjectTsPill\">\n                    <rect x=\"-44\" y=\"-9\" width=\"88\" height=\"18\" rx=\"3\" fill=\"#fff\" stroke=\"#94a3b8\" stroke-width=\"0.9\"\/>\n                    <text id=\"arVizProjectTsText\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"700\" fill=\"#475569\" text-anchor=\"middle\">TS<\/text>\n                <\/g>\n                <g id=\"arVizProjectEndPill\">\n                    <rect class=\"ar-tangent-label-box\" x=\"-44\" y=\"-9\" width=\"88\" height=\"18\" rx=\"3\" fill=\"#f1f7f2\" stroke=\"#b8d0bf\" stroke-width=\"0.9\"\/>\n                    <text id=\"arVizProjectEndText\" class=\"ar-tangent-label-text\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"700\" fill=\"#385847\" text-anchor=\"middle\">TE<\/text>\n                <\/g>\n                <g id=\"arVizProjectAxisLabel\">\n                    <rect x=\"-110\" y=\"-9\" width=\"220\" height=\"18\" rx=\"3\" fill=\"#f8fafc\" stroke=\"#94a3b8\" stroke-width=\"0.8\"\/>\n                    <text y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"700\" fill=\"#475569\" text-anchor=\"middle\">Projektstation (aus TS-Pr\u00fcfpunkt)<\/text>\n                <\/g>\n\n                <!-- Punkte -->\n                <circle id=\"arVizTA\" class=\"ar-tangent-dot\" cx=\"0\" cy=\"0\" r=\"4.5\" fill=\"#5f7f68\" stroke=\"#fff\" stroke-width=\"1.2\"\/>\n                <circle id=\"arVizTE\" class=\"ar-tangent-dot\" cx=\"0\" cy=\"0\" r=\"4.5\" fill=\"#5f7f68\" stroke=\"#fff\" stroke-width=\"1.2\"\/>\n                <circle id=\"arVizTS\" cx=\"0\" cy=\"0\" r=\"5.5\" fill=\"#fff\" stroke=\"#3f5f75\" stroke-width=\"2\"\/>\n                <circle id=\"arVizScheitel\" class=\"ar-extreme-dot\" cx=\"0\" cy=\"0\" r=\"5\" fill=\"#b84b5a\" stroke=\"#fff\" stroke-width=\"1.2\"\/>\n\n                <!-- Pills (Labels) -->\n                <g id=\"arVizLabelTA\">\n                    <rect class=\"ar-tangent-label-box\" x=\"-14\" y=\"-8\" width=\"28\" height=\"16\" rx=\"3\" fill=\"#f1f7f2\" stroke=\"#b8d0bf\" stroke-width=\"0.8\"\/>\n                    <text class=\"ar-tangent-label-text\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"700\" fill=\"#385847\" text-anchor=\"middle\">TA<\/text>\n                <\/g>\n                <g id=\"arVizLabelTE\">\n                    <rect class=\"ar-tangent-label-box\" x=\"-14\" y=\"-8\" width=\"28\" height=\"16\" rx=\"3\" fill=\"#f1f7f2\" stroke=\"#b8d0bf\" stroke-width=\"0.8\"\/>\n                    <text class=\"ar-tangent-label-text\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"700\" fill=\"#385847\" text-anchor=\"middle\">TE<\/text>\n                <\/g>\n                <g id=\"arVizLabelTS\">\n                    <rect x=\"-14\" y=\"-8\" width=\"28\" height=\"16\" rx=\"3\" fill=\"#fff\" stroke=\"#c8d6e0\" stroke-width=\"0.8\"\/>\n                    <text y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"600\" fill=\"#3f5f75\" text-anchor=\"middle\">TS<\/text>\n                <\/g>\n                <g id=\"arVizLabelSch\">\n                    <rect class=\"ar-extreme-label-box\" x=\"-18\" y=\"-8\" width=\"36\" height=\"16\" rx=\"3\" fill=\"#fff1f3\" stroke=\"#b84b5a\" stroke-width=\"0.8\"\/>\n                    <text id=\"arVizLabelSchText\" class=\"ar-extreme-label-text\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"700\" fill=\"#8f2f3d\" text-anchor=\"middle\">HP<\/text>\n                <\/g>\n                <g id=\"arVizLabelS1\">\n                    <rect x=\"-36\" y=\"-8\" width=\"72\" height=\"16\" rx=\"3\" fill=\"#fff\" stroke=\"#3f5f75\" stroke-width=\"0.8\"\/>\n                    <text id=\"arVizLabelS1Text\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"600\" fill=\"#3f5f75\" text-anchor=\"middle\">s\u2081<\/text>\n                <\/g>\n                <g id=\"arVizLabelS2\">\n                    <rect x=\"-36\" y=\"-8\" width=\"72\" height=\"16\" rx=\"3\" fill=\"#fff\" stroke=\"#3f5f75\" stroke-width=\"0.8\"\/>\n                    <text id=\"arVizLabelS2Text\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"600\" fill=\"#3f5f75\" text-anchor=\"middle\">s\u2082<\/text>\n                <\/g>\n                <g id=\"arVizLabelL\">\n                    <rect x=\"-40\" y=\"-8\" width=\"80\" height=\"16\" rx=\"3\" fill=\"#fff\" stroke=\"#c8d6e0\" stroke-width=\"0.8\"\/>\n                    <text id=\"arVizLabelLText\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"600\" fill=\"#1e3548\" text-anchor=\"middle\">L<\/text>\n                <\/g>\n                <g id=\"arVizLabelT\">\n                    <rect x=\"-36\" y=\"-8\" width=\"72\" height=\"16\" rx=\"3\" fill=\"#fff\" stroke=\"#c8d6e0\" stroke-width=\"0.8\"\/>\n                    <text id=\"arVizLabelTText\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"600\" fill=\"#1e3548\" text-anchor=\"middle\">T<\/text>\n                <\/g>\n                <g id=\"arVizLabelDh\">\n                    <rect x=\"-38\" y=\"-8\" width=\"76\" height=\"16\" rx=\"3\" fill=\"#fff\" stroke=\"#c8d6e0\" stroke-width=\"0.8\"\/>\n                    <text id=\"arVizLabelDhText\" y=\"4\" font-family=\"inherit\" font-size=\"10\" font-weight=\"600\" fill=\"#1e3548\" text-anchor=\"middle\">\u0394h<\/text>\n                <\/g>\n                <g id=\"arVizLabelProbe\">\n                    <rect id=\"arVizLabelProbeBox\" class=\"ar-probe-label-box\" x=\"-82\" y=\"-9\" width=\"164\" height=\"18\" rx=\"3\" fill=\"#eef9fc\" stroke=\"#0e7490\" stroke-width=\"0.9\"\/>\n                    <text id=\"arVizLabelProbeText\" class=\"ar-probe-label-text\" y=\"4\" font-family=\"inherit\" font-size=\"9.5\" font-weight=\"700\" fill=\"#0e7490\" text-anchor=\"middle\">TS-Pr\u00fcfpunkt<\/text>\n                <\/g>\n\n                <!-- Legende -->\n                <g transform=\"translate(60,440)\" font-family=\"inherit\" font-size=\"10\" fill=\"#64748b\">\n                    <line x1=\"0\" y1=\"0\" x2=\"22\" y2=\"0\" stroke=\"#3f5f75\" stroke-width=\"1.6\" stroke-dasharray=\"7 4\" opacity=\"0.7\"\/>\n                    <text x=\"28\" y=\"3\">Tangenten<\/text>\n                    <line x1=\"110\" y1=\"0\" x2=\"132\" y2=\"0\" stroke=\"#e8913a\" stroke-width=\"2.8\" stroke-linecap=\"round\"\/>\n                    <text x=\"138\" y=\"3\">Ausrundungsbogen<\/text>\n                    <circle class=\"ar-tangent-dot\" cx=\"278\" cy=\"0\" r=\"4\" fill=\"#5f7f68\" stroke=\"#fff\" stroke-width=\"1.2\"\/>\n                    <text x=\"286\" y=\"3\">Tangentenpunkte<\/text>\n                    <circle cx=\"400\" cy=\"0\" r=\"4.5\" fill=\"#fff\" stroke=\"#3f5f75\" stroke-width=\"1.6\"\/>\n                    <text x=\"408\" y=\"3\">Schnittpunkt TS<\/text>\n                    <circle class=\"ar-extreme-dot\" cx=\"510\" cy=\"0\" r=\"4\" fill=\"#b84b5a\" stroke=\"#fff\" stroke-width=\"1.2\"\/>\n                    <text id=\"arLegendSch\" x=\"518\" y=\"3\">Hochpunkt (HP)<\/text>\n                    <line x1=\"608\" y1=\"0\" x2=\"628\" y2=\"0\" stroke=\"#0e7490\" stroke-width=\"1.1\" stroke-dasharray=\"4 4\"\/>\n                    <text x=\"634\" y=\"3\">Pr\u00fcfpunkt<\/text>\n                    <line x1=\"720\" y1=\"0\" x2=\"740\" y2=\"0\" stroke=\"#64748b\" stroke-width=\"0.9\"\/>\n                    <text x=\"746\" y=\"3\">Ma\u00dflinien<\/text>\n                <\/g>\n            <\/svg>\n        <\/div>\n\n        <div class=\"ar-stakeout\">\n            <div class=\"ar-actions\">\n                <div class=\"ar-action-title\">Absteckwerte entlang der Ausrundung<\/div>\n                <button type=\"button\" class=\"ar-action\" onclick=\"arCopyStakeout(this)\">\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                        <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/>\n                        <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/>\n                    <\/svg>\n                    Tabelle kopieren\n                <\/button>\n            <\/div>\n            <div class=\"ar-stakeout-summary\" id=\"arStakeoutSummary\">Stationswerte werden aus den aktuellen Eingaben berechnet.<\/div>\n            <div class=\"ar-table-wrap\">\n                <table class=\"ar-table\">\n                    <thead>\n                        <tr>\n                            <th>Punkt<\/th>\n                            <th>Station ab TA<br><span>lokal<\/span><\/th>\n                            <th>Projektstation<br><span>aus TS-Pr\u00fcfpunkt<\/span><\/th>\n                            <th>H\u00f6he Gradiente<\/th>\n                            <th>Neigung<\/th>\n                            <th>Abstand zur Tangente<\/th>\n                        <\/tr>\n                    <\/thead>\n                    <tbody id=\"arStakeoutBody\"><\/tbody>\n                <\/table>\n            <\/div>\n            <div class=\"ar-table-note\">Links steht die lokale Station der Ausrundung: TA ist immer 0+000,000. Rechts steht die Projektstation aus deinem H\u00f6henplan. Bei der Parabel liegt TA\/TE symmetrisch um den TS-Pr\u00fcfpunkt; beim Kreisbogen entstehen TA\/TE aus den echten Tangentialpunkten des Kreisbogens. Beide Spalten nutzen dasselbe Stationierungsformat.<\/div>\n        <\/div>\n\n    <\/div>\n<\/div>\n\n<script>\n(function() {\n    var state = { type: \"kuppe\" };\n    var lastStakeoutText = \"\";\n    var lastSyncedTS = 150;\n\n    function val(id) { var x = parseFloat(document.getElementById(id).value); return isNaN(x) ? 0 : x; }\n    function fmt(n, d) { if (!isFinite(n)) return \"\u2013\"; var dd = (typeof d === \"number\" ? d : 2); return n.toLocaleString(\"de-DE\", { minimumFractionDigits: dd, maximumFractionDigits: dd }); }\n    function fmtSigned(n, d) { if (!isFinite(n)) return \"\u2013\"; var v = Math.abs(n) < Math.pow(10, -d) \/ 2 ? 0 : n; return (v > 0 ? \"+\" : \"\") + fmt(v, d); }\n    function clamp(n, min, max) { return Math.max(min, Math.min(max, n)); }\n    function fmtStationCore(distance) {\n        if (!isFinite(distance)) return \"\u2013\";\n        var sign = distance < 0 ? \"-\" : \"\";\n        var d = Math.abs(distance);\n        var km = Math.floor(d \/ 1000);\n        var rest = d - km * 1000;\n        var restText = rest.toLocaleString(\"de-DE\", { minimumIntegerDigits: 3, minimumFractionDigits: 3, maximumFractionDigits: 3 });\n        return sign + km + \"+\" + restText;\n    }\n    function fmtStation(distance) {\n        return fmtStationCore(Math.max(0, distance));\n    }\n    function fmtProjectStation(station) {\n        return fmtStationCore(station);\n    }\n\n    function hminRAS(type, ve) {\n        \/\/ Richtwerte RAS-L, Stand der Technik (vereinfacht)\n        var tab = {\n            kuppe: [[50,1500],[60,2500],[70,4000],[80,6500],[90,9000],[100,12000],[110,16000]],\n            wanne: [[50,500],[60,800],[70,1200],[80,1700],[90,2200],[100,3000],[110,4000]]\n        };\n        var data = tab[type];\n        for (var i = data.length - 1; i >= 0; i--) {\n            if (ve >= data[i][0]) return data[i][1];\n        }\n        return null;\n    }\n\n    function compute() {\n        var newTS = val(\"arStationTS\");\n        var currentProbe = val(\"arProbeStation\");\n        if (Math.abs(currentProbe - lastSyncedTS) < 0.01) {\n            document.getElementById(\"arProbeStation\").value = newTS;\n        }\n        lastSyncedTS = newTS;\n\n        var s1 = val(\"arS1\");  \/\/ Prozent\n        var s2 = val(\"arS2\");  \/\/ Prozent\n        var rawH = val(\"arH\"); \/\/ m\n        var H  = Math.abs(rawH);\n        var sTS = val(\"arStationTS\");\n        var hTS = val(\"arHoeheTS\");\n        var probeStation = val(\"arProbeStation\");\n        var stepRaw = Math.abs(val(\"arStep\")); var step = Math.max(1, stepRaw ? stepRaw : 25);\n        var ve = val(\"arVe\");\n        var form = document.querySelector(\"input[name='arForm']:checked\").value;\n\n        var ds = Math.abs(s1 - s2);  \/\/ Prozent\n        var m1 = s1 \/ 100;\n        var m2 = s2 \/ 100;\n        var profileType = s1 > s2 ? \"kuppe\" : (s1 < s2 ? \"wanne\" : state.type);\n        var typeMismatch = false;\n        if (ds > 1e-9) { if (profileType !== state.type) { typeMismatch = true; } }\n        var L = 0, T = 0, arcLength = 0;\n        var sA = sTS, sE = sTS, hA = hTS, hE = hTS;\n        var geometry = \"linear\";\n        var circle = null;\n\n        function leftNormal(theta) {\n            return { x: -Math.sin(theta), y: Math.cos(theta) };\n        }\n\n        function lineIntersection(p1, u1, p2, u2) {\n            var cross = u1.x * u2.y - u1.y * u2.x;\n            if (Math.abs(cross) < 1e-12) return null;\n            var dx = p2.x - p1.x;\n            var dy = p2.y - p1.y;\n            var t = (dx * u2.y - dy * u2.x) \/ cross;\n            return { x: p1.x + t * u1.x, y: p1.y + t * u1.y };\n        }\n\n        var arHOk = false;\n        if (H > 0) { if (ds > 1e-9) { arHOk = true; } }\n        if (arHOk) {\n            if (form === \"parabel\") {\n            L = H * ds \/ 100;\n            T = L \/ 2;\n            sA = sTS - T;\n            sE = sTS + T;\n            geometry = \"parabel\";\n        } else {\n            var alpha1 = Math.atan(s1 \/ 100);\n            var alpha2 = Math.atan(s2 \/ 100);\n            var alpha = Math.abs(alpha2 - alpha1);\n            T = H * Math.tan(alpha \/ 2);\n            arcLength = H * alpha;\n            var side = profileType === \"kuppe\" ? -1 : 1;\n            var u1 = { x: Math.cos(alpha1), y: Math.sin(alpha1) };\n            var u2 = { x: Math.cos(alpha2), y: Math.sin(alpha2) };\n            var n1 = leftNormal(alpha1);\n            var n2 = leftNormal(alpha2);\n            n1 = { x: side * n1.x, y: side * n1.y };\n            n2 = { x: side * n2.x, y: side * n2.y };\n            var p = { x: sTS, y: hTS };\n            var p1 = { x: p.x + n1.x * H, y: p.y + n1.y * H };\n            var p2 = { x: p.x + n2.x * H, y: p.y + n2.y * H };\n            var center = lineIntersection(p1, u1, p2, u2);\n            if (center) {\n                var ta = { x: center.x - n1.x * H, y: center.y - n1.y * H };\n                var te = { x: center.x - n2.x * H, y: center.y - n2.y * H };\n                if (te.x > ta.x + 1e-9) {\n                    sA = ta.x;\n                    sE = te.x;\n                    hA = ta.y;\n                    hE = te.y;\n                    L = sE - sA;\n                    geometry = \"kreis\";\n                    circle = { c: center, r: H, side: side };\n                }\n            }\n        }\n        }\n\n        if (geometry === \"parabel\") {\n            \/\/ H\u00f6hen TA \/ TE aus TS-H\u00f6he und jeweiliger Tangentenneigung.\n            hA = hTS - T * m1;\n            hE = hTS + T * m2;\n        }\n\n        var localTS = Math.max(0, sTS - sA);\n\n        function curveHAt(station) {\n            if (L <= 1e-9) return hTS + (station - sTS) * m1;\n            if (station < sA) return hA + (station - sA) * m1;\n            if (station > sE) return hE + (station - sE) * m2;\n            if (geometry === \"kreis\") { if (circle) {\n                var dx = station - circle.c.x;\n                var q = Math.max(0, circle.r * circle.r - dx * dx);\n                return circle.c.y - circle.side * Math.sqrt(q);\n            } }\n            var x = station - sA;\n            return hA + m1 * x + (m2 - m1) \/ (2 * L) * x * x;\n        }\n\n        function slopeAt(station) {\n            if (L <= 1e-9) return s1;\n            if (station < sA) return s1;\n            if (station > sE) return s2;\n            if (geometry === \"kreis\") { if (circle) {\n                var dx = station - circle.c.x;\n                var q = Math.max(1e-12, circle.r * circle.r - dx * dx);\n                return circle.side * dx \/ Math.sqrt(q) * 100;\n            } }\n            return (m1 + (m2 - m1) * (station - sA) \/ L) * 100;\n        }\n\n        function tangentHAt(station) {\n            return station <= sTS ? hTS + (station - sTS) * m1 : hTS + (station - sTS) * m2;\n        }\n\n        function tangentGapAt(station) {\n            return tangentHAt(station) - curveHAt(station);\n        }\n\n        var dh = tangentGapAt(sTS);\n\n        var schInside = false;\n        var sSch = NaN;\n        var hSch = NaN;\n        var isKreis = false;\n        if (geometry === \"kreis\") { if (circle) { isKreis = true; } }\n        if (isKreis) {\n            if (circle.c.x >= sA) { if (circle.c.x <= sE) {\n                schInside = true;\n                sSch = circle.c.x;\n                hSch = curveHAt(sSch);\n            } }\n        } else if (L > 1e-9) {\n            if (Math.abs(m2 - m1) > 1e-9) {\n                var xSch = -m1 * L \/ (m2 - m1);\n                if (xSch >= 0) { if (xSch <= L) { schInside = true; } }\n                if (schInside) {\n                    sSch = sA + xSch;\n                    hSch = curveHAt(sSch);\n                }\n            }\n        }\n\n        var probeH = curveHAt(probeStation);\n        var probeSlope = slopeAt(probeStation);\n        var probeInCurve = false;\n        if (probeStation >= sA) { if (probeStation <= sE) { probeInCurve = true; } }\n        var probeMatchesTS = Math.abs(probeStation - sTS) < 0.01;\n\n        document.getElementById(\"arStationHintProject\").textContent =\n            \"TS-Pr\u00fcfpunkt = \" + fmtProjectStation(sTS) + \", daraus TA = \" + fmtProjectStation(sA) + \" und TE = \" + fmtProjectStation(sE) + \".\";\n        document.getElementById(\"arStationHintLocal\").textContent =\n            \"TA = \" + fmtStation(0) + \", TS = \" + fmtStation(localTS) + \", TE = \" + fmtStation(L) + \".\";\n        document.getElementById(\"arVersatzValue\").textContent = fmtProjectStation(sA);\n\n        document.getElementById(\"arOutDs\").textContent = fmt(ds, 3) + \" %\";\n        document.getElementById(\"arOutL\").textContent = fmt(L, 2) + \" m\";\n        document.getElementById(\"arOutT\").textContent = fmt(T, 2) + \" m\";\n        document.getElementById(\"arOutStationA\").textContent = fmtProjectStation(sA);\n        document.getElementById(\"arOutStationE\").textContent = fmtProjectStation(sE);\n        document.getElementById(\"arOutHoeheA\").textContent = fmt(hA, 3) + \" m\";\n        document.getElementById(\"arOutHoeheE\").textContent = fmt(hE, 3) + \" m\";\n        document.getElementById(\"arOutDh\").textContent = fmt(Math.abs(dh), 3) + \" m\";\n        document.getElementById(\"arOutStationSch\").textContent = schInside ? fmtProjectStation(sSch) : \"au\u00dferhalb\";\n        document.getElementById(\"arOutHoeheSch\").textContent = schInside ? fmt(hSch, 3) + \" m\" : \"\u2013\";\n        document.getElementById(\"arOutProbeH\").textContent = fmt(probeH, 3) + \" m\";\n        document.getElementById(\"arOutProbeSlope\").textContent = fmtSigned(probeSlope, 3) + \" %\";\n\n        \/\/ Hmin-Check\n        var hminBox = document.getElementById(\"arHminBox\");\n        hminBox.innerHTML = \"\";\n        var noticeHtml = \"\";\n        if (rawH < 0) {\n            noticeHtml += '<div class=\"ar-warn\"><strong>Hinweis:<\/strong> Der Halbmesser wird als positiver Betrag gerechnet. Eingabe H = ' + fmt(rawH, 0) + ' m wurde als H = ' + fmt(H, 0) + ' m interpretiert.<\/div>';\n        } else {\n            if (H <= 0) { if (ds > 0) {\n            noticeHtml += '<div class=\"ar-warn\"><strong>Hinweis:<\/strong> F\u00fcr eine Ausrundung muss der Halbmesser H gr\u00f6\u00dfer als 0 m sein.<\/div>';\n            } }\n        }\n        if (typeMismatch) {\n            noticeHtml += '<div class=\"ar-warn\"><strong>Hinweis:<\/strong> Die Neigungen ergeben eine ' + (profileType === \"kuppe\" ? \"Kuppe\" : \"Wanne\") + ', obwohl der Tab auf ' + (state.type === \"kuppe\" ? \"Kuppe\" : \"Wanne\") + ' steht. Beschriftung und Hmin-Check folgen den aktuellen Neigungen.<\/div>';\n        }\n        if (ve > 0) {\n            var hmin = hminRAS(profileType, ve);\n            if (hmin) {\n                var profileLabel = profileType === \"kuppe\" ? \"Kuppe\" : \"Wanne\";\n                if (H < hmin) {\n                    noticeHtml += '<div class=\"ar-warn\"><strong>Hinweis:<\/strong> Bei V<sub>e<\/sub> = ' + ve + ' km\/h liegt der Mindest-Halbmesser f\u00fcr eine ' + profileLabel + ' nach RAS-L (Richtwerte) bei etwa <strong>' + hmin + ' m<\/strong>. Dein eingestellter Halbmesser ist kleiner. F\u00fcr die finale Bemessung bitte das aktuelle Regelwerk und Sichtweitennachweise pr\u00fcfen.<\/div>';\n                } else {\n                    noticeHtml += '<div class=\"ar-info\"><strong>Plausibel:<\/strong> Bei V<sub>e<\/sub> = ' + ve + ' km\/h erf\u00fcllt der Halbmesser den RAS-L-Richtwert (Mindest-Hmin \u2248 ' + hmin + ' m).<\/div>';\n                }\n            }\n        }\n        hminBox.innerHTML = noticeHtml;\n\n        var rows = [];\n        function addStakeout(label, station, key, extreme, tangent) {\n            if (!isFinite(station)) return;\n            if (station < sA - 0.001) return;\n            if (station > sE + 0.001) return;\n            for (var r = 0; r < rows.length; r++) {\n                if (Math.abs(rows[r].station - station) < 0.001) {\n                    if (rows[r].label.indexOf(label) === -1) rows[r].label += \" \/ \" + label;\n                    if (!rows[r].key) { rows[r].key = key; }\n                    if (extreme) { rows[r].extreme = true; }\n                    if (tangent) { rows[r].tangent = true; }\n                    return;\n                }\n            }\n            rows.push({ label: label, station: station, key: !!key, extreme: !!extreme, tangent: !!tangent });\n        }\n\n        addStakeout(\"TA\", sA, true, false, true);\n        for (var localStation = step; localStation < L - 0.001; localStation += step) {\n            addStakeout(\"Station\", sA + localStation, false);\n        }\n        if (schInside) addStakeout(profileType === \"kuppe\" ? \"HP\" : \"TP\", sSch, true, true);\n        addStakeout(\"TE\", sE, true, false, true);\n        rows.sort(function(a, b) { return a.station - b.station; });\n\n        if (probeInCurve) {\n            var probeAlreadyIn = false;\n            for (var ri = 0; ri < rows.length; ri++) {\n                if (Math.abs(rows[ri].station - probeStation) < 0.001) {\n                    rows[ri].probe = true;\n                    var mergedProbeLabel = probeMatchesTS ? \"TS-Pr\u00fcfpunkt\" : \"Pr\u00fcfpunkt\";\n                    if (rows[ri].label.indexOf(mergedProbeLabel) === -1) rows[ri].label += \" \/ \" + mergedProbeLabel;\n                    probeAlreadyIn = true;\n                    break;\n                }\n            }\n            if (!probeAlreadyIn) {\n                var probePktLabel = probeMatchesTS ? \"TS-Pr\u00fcfpunkt\" : \"Pr\u00fcfpunkt\";\n                var probeRow = { label: probePktLabel, station: probeStation, key: false, probe: true };\n                var inserted = false;\n                for (var rj = 0; rj < rows.length; rj++) {\n                    if (rows[rj].station > probeStation) {\n                        rows.splice(rj, 0, probeRow);\n                        inserted = true;\n                        break;\n                    }\n                }\n                if (!inserted) { rows.push(probeRow); }\n            }\n        }\n\n        var tbody = document.getElementById(\"arStakeoutBody\");\n        var tableHtml = \"\";\n        var csv = [\"Punkt;Station ab TA;Projektstation (aus TS-Pr\u00fcfpunkt);Hoehe Gradiente [m];Neigung [%];Abstand zur Tangente [m]\"];\n        rows.forEach(function(row) {\n            var h = curveHAt(row.station);\n            var slope = slopeAt(row.station);\n            var gap = tangentGapAt(row.station);\n            var local = row.station - sA;\n            var rowClass = '';\n            if (row.key) { rowClass += ' ar-key-row'; }\n            if (row.tangent) { rowClass += ' ar-tangent-row'; }\n            if (row.extreme) { rowClass += ' ar-extreme-row'; }\n            if (row.probe) { rowClass += ' ar-probe-row'; }\n            rowClass = rowClass.replace(\/^\\s+\/, '');\n            tableHtml += '<tr' + (rowClass ? ' class=\"' + rowClass + '\"' : '') + '>' +\n                '<td>' + row.label + '<\/td>' +\n                '<td>' + fmtStation(local) + '<\/td>' +\n                '<td>' + fmtProjectStation(row.station) + '<\/td>' +\n                '<td>' + fmt(h, 3) + '<\/td>' +\n                '<td>' + fmtSigned(slope, 3) + '<\/td>' +\n                '<td>' + fmtSigned(gap, 3) + '<\/td>' +\n                '<\/tr>';\n            csv.push([row.label, fmtStation(local), fmtProjectStation(row.station), fmt(h, 3), fmtSigned(slope, 3), fmtSigned(gap, 3)].join(\";\"));\n        });\n        tbody.innerHTML = tableHtml;\n        lastStakeoutText = csv.join(\"\\n\");\n        var circleSummary = \"\";\n        if (geometry === \"kreis\") { if (arcLength > 0) { circleSummary = \"; Bogenl\u00e4nge \" + fmt(arcLength, 2) + \" m\"; } }\n        document.getElementById(\"arStakeoutSummary\").textContent =\n            rows.length + \" Stationswerte: lokal TA \" + fmtStation(0) + \" bis TE \" + fmtStation(L) +\n            \"; im Projekt TA \" + fmtProjectStation(sA) + \" bis TE \" + fmtProjectStation(sE) + circleSummary + \". \" +\n            (probeMatchesTS ? \"TS-Pr\u00fcfpunkt \" : \"Pr\u00fcfpunkt \") +\n            fmtProjectStation(probeStation) + \" liegt \" + (probeInCurve ? \"innerhalb\" : \"au\u00dferhalb\") + \" der Ausrundung.\";\n\n        \/\/ Visualisierung (Skizze, nicht ma\u00dfst\u00e4blich)\n        var vb = { x0: 60, x1: 870, y0: 30, y1: 300 };\n        var spanX = Math.max(T * 3, 40);\n        var pxPerM = (vb.x1 - vb.x0 - 80) \/ (spanX * 2);\n        var cx = (vb.x0 + vb.x1) \/ 2;\n        function toX(s) { return cx + (s - sTS) * pxPerM; }\n\n        var hSpan = Math.max(Math.abs(dh), Math.abs(hE - hTS), Math.abs(hA - hTS)) * 2 + 2;\n        if (hSpan < 8) hSpan = 8;\n        var pxPerH = (vb.y1 - vb.y0 - 80) \/ hSpan;\n        var cy = (vb.y0 + vb.y1) \/ 2;\n        function toY(h) { return cy - (h - hTS) * pxPerH; }\n\n        var vizTA = { x: toX(sA), y: toY(hA) };\n        var vizTE = { x: toX(sE), y: toY(hE) };\n        var vizTS = { x: toX(sTS), y: toY(hTS) };\n\n        var vizSch = {\n            x: schInside ? toX(sSch) : vizTS.x,\n            y: schInside ? toY(hSch) : vizTS.y\n        };\n\n        var isKuppe = s1 > s2;\n        document.getElementById(\"arVizLabelSchText\").textContent = profileType === \"kuppe\" ? \"HP\" : \"TP\";\n        document.getElementById(\"arLegendSch\").textContent = profileType === \"kuppe\" ? \"Hochpunkt (HP)\" : \"Tiefpunkt (TP)\";\n        var setAttr = function(id, attrs) {\n            var el = document.getElementById(id);\n            for (var k in attrs) el.setAttribute(k, attrs[k]);\n        };\n        var pill = function(id, x, y) {\n            document.getElementById(id).setAttribute(\"transform\", \"translate(\" + x.toFixed(1) + \",\" + y.toFixed(1) + \")\");\n        };\n        var fitPill = function(id, minWidth, maxWidth, pad) {\n            var group = document.getElementById(id);\n            if (!group) return minWidth || 0;\n            var rect = group.querySelector(\"rect\");\n            var text = group.querySelector(\"text\");\n            if (!rect || !text || !text.getComputedTextLength) return parseFloat(rect ? rect.getAttribute(\"width\") : 0) || minWidth || 0;\n            var width = text.getComputedTextLength() + (pad || 18);\n            width = Math.max(minWidth || 28, Math.min(maxWidth || 260, width));\n            rect.setAttribute(\"x\", (-width \/ 2).toFixed(1));\n            rect.setAttribute(\"width\", width.toFixed(1));\n            return width;\n        };\n\n        var curveD = \"\";\n        var samples = Math.max(8, Math.min(80, Math.ceil(L \/ Math.max(1, step))));\n        for (var ci = 0; ci <= samples; ci++) {\n            var stationOnCurve = L <= 1e-9 ? sA : sA + L * ci \/ samples;\n            var cmd = ci === 0 ? \"M \" : \" L \";\n            curveD += cmd + toX(stationOnCurve).toFixed(2) + \" \" + toY(curveHAt(stationOnCurve)).toFixed(2);\n        }\n        setAttr(\"arVizCurve\", { d: curveD });\n        setAttr(\"arVizBogenFill\", { d: curveD + \" L \" + vizTA.x + \" \" + vizTA.y + \" Z\" });\n\n        \/\/ Sehne (Hilfslinie)\n        setAttr(\"arVizSehne\", { x1: vizTA.x, y1: vizTA.y, x2: vizTE.x, y2: vizTE.y });\n\n        \/\/ Tangenten bis zum Plot-Rand verl\u00e4ngern\n        function lineAtX(p1, p2, xT) {\n            if (Math.abs(p2.x - p1.x) < 1e-6) return { x: xT, y: p1.y };\n            var t = (xT - p1.x) \/ (p2.x - p1.x);\n            return { x: xT, y: p1.y + t * (p2.y - p1.y) };\n        }\n        function lineAtXClippedY(p1, p2, xTarget, yMax) {\n            if (Math.abs(p2.x - p1.x) < 1e-6) return { x: xTarget, y: p1.y };\n            var t = (xTarget - p1.x) \/ (p2.x - p1.x);\n            var y = p1.y + t * (p2.y - p1.y);\n            if (y > yMax) {\n                if (Math.abs(p2.y - p1.y) < 1e-6) return { x: xTarget, y: yMax };\n                t = (yMax - p1.y) \/ (p2.y - p1.y);\n                return { x: p1.x + t * (p2.x - p1.x), y: yMax };\n            }\n            return { x: xTarget, y: y };\n        }\n        var tan1Left = lineAtXClippedY(vizTS, vizTA, vb.x0 + 30, vb.y1);\n        var tan2Right = lineAtXClippedY(vizTS, vizTE, vb.x1 - 30, vb.y1);\n        \/\/ Tangenten: solid au\u00dferhalb TA\u2013TE, gestrichelt zwischen TA\u2013TS und TS\u2013TE\n        setAttr(\"arVizTan1Solid\", { x1: tan1Left.x, y1: tan1Left.y, x2: vizTA.x, y2: vizTA.y });\n        setAttr(\"arVizTan1\",      { x1: vizTA.x,    y1: vizTA.y,    x2: vizTS.x, y2: vizTS.y });\n        setAttr(\"arVizTan2\",      { x1: vizTS.x,    y1: vizTS.y,    x2: vizTE.x, y2: vizTE.y });\n        setAttr(\"arVizTan2Solid\", { x1: vizTE.x,    y1: vizTE.y,    x2: tan2Right.x, y2: tan2Right.y });\n\n        \/\/ Punkte\n        setAttr(\"arVizTA\", { cx: vizTA.x, cy: vizTA.y });\n        setAttr(\"arVizTE\", { cx: vizTE.x, cy: vizTE.y });\n        setAttr(\"arVizTS\", { cx: vizTS.x, cy: vizTS.y });\n        setAttr(\"arVizScheitel\", { cx: vizSch.x, cy: vizSch.y });\n        setAttr(\"arVizScheitel\", { opacity: schInside ? \"1\" : \"0\" });\n\n        var vizProbe = { x: toX(probeStation), y: toY(probeH) };\n        var probeVisible = false;\n        if (probeStation >= sTS - spanX) { if (probeStation <= sTS + spanX) { probeVisible = true; } }\n        setAttr(\"arVizProbeLine\", { x1: vizProbe.x, y1: vb.y0, x2: vizProbe.x, y2: vb.y1, opacity: probeVisible ? \"0.8\" : \"0\" });\n        setAttr(\"arVizProbe\", { cx: vizProbe.x, cy: vizProbe.y, opacity: probeVisible ? \"1\" : \"0\" });\n\n        \/\/ -- LABELS (kollisionsfrei) --\n        \/\/ TA\/TE: immer unterhalb der X-Achse (y=300), Mindestabstand 56px\n        var YBOT = 316;\n        var taLX = vizTA.x, teLX = vizTE.x;\n        if (teLX - taLX < 56) {\n            var midX = (taLX + teLX) \/ 2;\n            taLX = Math.max(90, midX - 28);\n            teLX = Math.min(830, midX + 28);\n        }\n        pill(\"arVizLabelTA\", taLX, YBOT);\n        pill(\"arVizLabelTE\", teLX, YBOT);\n        setAttr(\"arTickTA\", { x1: vizTA.x, y1: 300, x2: vizTA.x, y2: 308 });\n        setAttr(\"arTickTE\", { x1: vizTE.x, y1: 300, x2: vizTE.x, y2: 308 });\n        setAttr(\"arLeaderTA\", { x1: taLX, y1: YBOT - 9, x2: vizTA.x, y2: 309 });\n        setAttr(\"arLeaderTE\", { x1: teLX, y1: YBOT - 9, x2: vizTE.x, y2: 309 });\n\n        var stationAxisY = 328;\n        var stationLabelY = 350;\n        var stationAxisVisible = Math.abs(vizTE.x - vizTA.x) >= 70;\n        var stationAxisOpacity = stationAxisVisible ? \"1\" : \"0\";\n        setAttr(\"arVizLocalAxis\", { x1: vizTA.x + 10, y1: stationAxisY, x2: vizTE.x - 10, y2: stationAxisY, opacity: stationAxisOpacity });\n        setAttr(\"arVizLocalStartTick\", { x1: vizTA.x, y1: stationAxisY - 10, x2: vizTA.x, y2: stationAxisY + 10, opacity: stationAxisOpacity });\n        setAttr(\"arVizLocalTsTick\", { x1: vizTS.x, y1: stationAxisY - 10, x2: vizTS.x, y2: stationAxisY + 10, opacity: stationAxisOpacity });\n        setAttr(\"arVizLocalEndTick\", { x1: vizTE.x, y1: stationAxisY - 10, x2: vizTE.x, y2: stationAxisY + 10, opacity: stationAxisOpacity });\n        pill(\"arVizLocalStartPill\", Math.max(100, Math.min(800, vizTA.x)), stationLabelY);\n        pill(\"arVizLocalTsPill\", Math.max(100, Math.min(800, vizTS.x)), stationLabelY);\n        pill(\"arVizLocalEndPill\", Math.max(100, Math.min(800, vizTE.x)), stationLabelY);\n        document.getElementById(\"arVizLocalStartPill\").setAttribute(\"opacity\", stationAxisOpacity);\n        document.getElementById(\"arVizLocalTsPill\").setAttribute(\"opacity\", stationAxisOpacity);\n        document.getElementById(\"arVizLocalEndPill\").setAttribute(\"opacity\", stationAxisOpacity);\n        document.getElementById(\"arVizLocalTsText\").textContent = \"TS \" + fmtStation(localTS);\n        document.getElementById(\"arVizLocalEndText\").textContent = \"TE \" + fmtStation(L);\n        fitPill(\"arVizLocalStartPill\", 74, 180, 18);\n        fitPill(\"arVizLocalTsPill\", 76, 180, 18);\n        fitPill(\"arVizLocalEndPill\", 74, 180, 18);\n        pill(\"arVizLocalAxisLabel\", (vizTA.x + vizTE.x) \/ 2, stationAxisY - 15);\n        fitPill(\"arVizLocalAxisLabel\", 104, 180, 18);\n        document.getElementById(\"arVizLocalAxisLabel\").setAttribute(\"opacity\", stationAxisVisible ? \"1\" : \"0\");\n\n        var projectAxisY = 386;\n        var projectLabelY = 410;\n        setAttr(\"arVizProjectAxis\", { x1: vizTA.x + 10, y1: projectAxisY, x2: vizTE.x - 10, y2: projectAxisY, opacity: stationAxisOpacity });\n        setAttr(\"arVizProjectStartTick\", { x1: vizTA.x, y1: projectAxisY - 10, x2: vizTA.x, y2: projectAxisY + 10, opacity: stationAxisOpacity });\n        setAttr(\"arVizProjectTsTick\", { x1: vizTS.x, y1: projectAxisY - 10, x2: vizTS.x, y2: projectAxisY + 10, opacity: stationAxisOpacity });\n        setAttr(\"arVizProjectEndTick\", { x1: vizTE.x, y1: projectAxisY - 10, x2: vizTE.x, y2: projectAxisY + 10, opacity: stationAxisOpacity });\n        pill(\"arVizProjectStartPill\", Math.max(108, Math.min(792, vizTA.x)), projectLabelY);\n        pill(\"arVizProjectTsPill\", Math.max(108, Math.min(792, vizTS.x)), projectLabelY);\n        pill(\"arVizProjectEndPill\", Math.max(108, Math.min(792, vizTE.x)), projectLabelY);\n        document.getElementById(\"arVizProjectStartPill\").setAttribute(\"opacity\", stationAxisOpacity);\n        document.getElementById(\"arVizProjectTsPill\").setAttribute(\"opacity\", stationAxisOpacity);\n        document.getElementById(\"arVizProjectEndPill\").setAttribute(\"opacity\", stationAxisOpacity);\n        document.getElementById(\"arVizProjectStartText\").textContent = \"TA \" + fmtProjectStation(sA);\n        document.getElementById(\"arVizProjectTsText\").textContent = \"TS \" + fmtProjectStation(sTS);\n        document.getElementById(\"arVizProjectEndText\").textContent = \"TE \" + fmtProjectStation(sE);\n        fitPill(\"arVizProjectStartPill\", 88, 190, 18);\n        fitPill(\"arVizProjectTsPill\", 88, 190, 18);\n        fitPill(\"arVizProjectEndPill\", 88, 190, 18);\n        pill(\"arVizProjectAxisLabel\", (vizTA.x + vizTE.x) \/ 2, projectAxisY - 15);\n        fitPill(\"arVizProjectAxisLabel\", 220, 300, 30);\n        document.getElementById(\"arVizProjectAxisLabel\").setAttribute(\"opacity\", stationAxisVisible ? \"1\" : \"0\");\n\n        \/\/ TS: rechts oder links je nach Platz\n        var tsLX = vizTS.x + 26;\n        if (tsLX > vb.x1 - 55) tsLX = vizTS.x - 26;\n        pill(\"arVizLabelTS\", tsLX, vizTS.y);\n        var probeOffset = probeStation - sTS;\n        var probeLabelStr = Math.abs(probeOffset) < 0.05 ?\n            \"TS-Pr\u00fcfpunkt \" + fmtProjectStation(probeStation) :\n            \"Pr\u00fcfpunkt \" + fmtProjectStation(probeStation) + \" (\" + fmtSigned(probeOffset, 0) + \" m)\";\n        document.getElementById(\"arVizLabelProbeText\").textContent = probeLabelStr;\n        var probeLabelWidth = fitPill(\"arVizLabelProbe\", 154, 260, 18);\n        pill(\"arVizLabelProbe\", clamp(vizProbe.x, vb.x0 + probeLabelWidth \/ 2 + 12, vb.x1 - probeLabelWidth \/ 2 - 12), 287);\n        document.getElementById(\"arVizLabelProbe\").setAttribute(\"opacity\", probeVisible ? \"1\" : \"0\");\n\n        \/\/ s\u2081\/s\u2082: feste Ecken oben-links \/ oben-rechts \u2192 keine \u00dcberlappung m\u00f6glich\n        document.getElementById(\"arVizLabelS1Text\").textContent = \"s\u2081 = \" + (s1 >= 0 ? \"+\" : \"\") + s1.toFixed(1).replace(\".\", \",\") + \" %\";\n        document.getElementById(\"arVizLabelS2Text\").textContent = \"s\u2082 = \" + (s2 >= 0 ? \"+\" : \"\") + s2.toFixed(1).replace(\".\", \",\") + \" %\";\n        fitPill(\"arVizLabelS1\", 72, 120, 18);\n        fitPill(\"arVizLabelS2\", 72, 120, 18);\n        pill(\"arVizLabelS1\", 116, 50);\n        pill(\"arVizLabelS2\", 784, 50);\n\n        \/\/ Scheitel + \u0394h: nur anzeigen wenn vertikaler Abstand \u2265 20 px\n        var dhPx = Math.abs(vizTS.y - vizSch.y);\n        var showDh = dhPx >= 20;\n        [\"arVizDimDh\",\"arVizDimDhHelp1\",\"arVizDimDhHelp2\",\"arVizLabelDh\"].forEach(function(id) {\n            document.getElementById(id).setAttribute(\"opacity\", showDh ? \"1\" : \"0\");\n        });\n        if (showDh) {\n            pill(\"arVizLabelSch\", vizSch.x, vizSch.y + (isKuppe ? 22 : -22));\n            document.getElementById(\"arVizLabelSch\").setAttribute(\"opacity\", schInside ? \"1\" : \"0\");\n            var dhX = vizSch.x + 55;\n            if (dhX > vb.x1 - 65) dhX = vizSch.x - 55;\n            var dhDir = isKuppe ? 1 : -1;\n            setAttr(\"arVizDimDh\", { x1: dhX, y1: vizTS.y + 4 * dhDir, x2: dhX, y2: vizSch.y - 4 * dhDir });\n            setAttr(\"arVizDimDhHelp1\", { x1: vizTS.x, y1: vizTS.y, x2: dhX + (dhX > vizSch.x ? 4 : -4), y2: vizTS.y });\n            setAttr(\"arVizDimDhHelp2\", { x1: vizSch.x, y1: vizSch.y, x2: dhX + (dhX > vizSch.x ? 4 : -4), y2: vizSch.y });\n            pill(\"arVizLabelDh\", dhX + (dhX > vizSch.x ? 50 : -50), (vizTS.y + vizSch.y) \/ 2);\n            document.getElementById(\"arVizLabelDhText\").textContent = \"\u0394h = \" + fmt(Math.abs(dh), 3) + \" m\";\n            fitPill(\"arVizLabelDh\", 76, 150, 18);\n        } else {\n            \/\/ Kleines \u0394h: Scheitel-Label auf der gegen\u00fcberliegenden Seite des TS-Labels\n            pill(\"arVizLabelSch\", vizSch.x + (tsLX > vizTS.x ? -55 : 55), vizSch.y + (isKuppe ? 10 : -10));\n            document.getElementById(\"arVizLabelSch\").setAttribute(\"opacity\", schInside ? \"1\" : \"0\");\n        }\n\n        \/\/ Ma\u00dflinie L\n        var dimLY = 272;\n        setAttr(\"arVizDimL\", { x1: vizTA.x + 4, y1: dimLY, x2: vizTE.x - 4, y2: dimLY });\n        pill(\"arVizLabelL\", (vizTA.x + vizTE.x) \/ 2, dimLY - 11);\n        document.getElementById(\"arVizLabelLText\").textContent = \"L = \" + fmt(L, 2) + \" m\";\n        fitPill(\"arVizLabelL\", 80, 150, 18);\n\n        \/\/ Ma\u00dflinie T\n        var dimTY = 56;\n        var showTDim = geometry === \"parabel\";\n        setAttr(\"arVizDimT\", { x1: vizTA.x + 4, y1: dimTY, x2: vizTS.x - 4, y2: dimTY, opacity: showTDim ? \"1\" : \"0\" });\n        pill(\"arVizLabelT\", (vizTA.x + vizTS.x) \/ 2, dimTY - 11);\n        document.getElementById(\"arVizLabelTText\").textContent = \"T = \" + fmt(T, 2) + \" m\";\n        document.getElementById(\"arVizLabelT\").setAttribute(\"opacity\", showTDim ? \"1\" : \"0\");\n        fitPill(\"arVizLabelT\", 72, 150, 18);\n    }\n\n    window.arSwitchType = function(btn, type) {\n        document.querySelectorAll(\".ar-tab\").forEach(function(b) { b.setAttribute(\"data-active\", \"0\"); });\n        btn.setAttribute(\"data-active\", \"1\");\n        state.type = type;\n        \/\/ Default-Neigungen anpassen\n        if (type === \"kuppe\") {\n            document.getElementById(\"arS1\").value = 2.0;\n            document.getElementById(\"arS2\").value = -1.5;\n        } else {\n            document.getElementById(\"arS1\").value = -2.0;\n            document.getElementById(\"arS2\").value = 1.5;\n        }\n        document.getElementById(\"arProbeStation\").value = document.getElementById(\"arStationTS\").value;\n        compute();\n    };\n\n    window.arCompute = compute;\n\n    window.arCopy = function(id, btn) {\n        var txt = document.getElementById(id).textContent;\n        if (!navigator.clipboard) return;\n        navigator.clipboard.writeText(txt).then(function() {\n            btn.classList.add(\"copied\");\n            var orig = btn.textContent;\n            btn.textContent = \"Kopiert\";\n            setTimeout(function() {\n                btn.classList.remove(\"copied\");\n                btn.textContent = orig;\n            }, 1200);\n        });\n    };\n\n    window.arCopyStakeout = function(btn) {\n        if (!navigator.clipboard) return;\n        if (!lastStakeoutText) return;\n        navigator.clipboard.writeText(lastStakeoutText).then(function() {\n            btn.classList.add(\"copied\");\n            var orig = btn.innerHTML;\n            btn.textContent = \"Kopiert\";\n            setTimeout(function() {\n                btn.classList.remove(\"copied\");\n                btn.innerHTML = orig;\n            }, 1200);\n        });\n    };\n\n    compute();\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Ausrundungsrechner Kuppe oder Wanne durchrechnen: mit Hoch-\/Tiefpunkt, Pr\u00fcfstation und kopierbarer Stationsliste f\u00fcr die Ausrundung. L\u00e4uft komplett im Browser. Keine Daten [&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":[27],"tags":[],"class_list":["post-1980","post","type-post","status-publish","format-standard","hentry","category-hoehenplan"],"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":"Ausrundungsrechner Kuppe oder Wanne durchrechnen: mit Hoch-\/Tiefpunkt, Pr\u00fcfstation und kopierbarer Stationsliste f\u00fcr die Ausrundung. L\u00e4uft komplett im Browser. Keine Daten [&hellip;]","_links":{"self":[{"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/posts\/1980","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=1980"}],"version-history":[{"count":5,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/posts\/1980\/revisions"}],"predecessor-version":[{"id":2011,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=\/wp\/v2\/posts\/1980\/revisions\/2011"}],"wp:attachment":[{"href":"https:\/\/cad-kompass.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1980"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1980"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cad-kompass.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1980"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}