{"id":22,"date":"2025-12-15T10:34:16","date_gmt":"2025-12-15T10:34:16","guid":{"rendered":"https:\/\/tyrescrapportal.com\/?page_id=22"},"modified":"2026-02-16T11:51:50","modified_gmt":"2026-02-16T11:51:50","slug":"22-2","status":"publish","type":"page","link":"https:\/\/tyrescrapportal.com\/en\/","title":{"rendered":""},"content":{"rendered":"\n<div class=\"tsp-v3-wrap\">\n  <a class=\"tsp-v3-link\" href=\"https:\/\/www.tyrescrapportal.com\" aria-label=\"TyreScrapPortal Home\">\n\n    <!-- LEFT: PRESS (V3) -->\n    <svg class=\"tsp-v3-machine\" viewBox=\"0 0 140 140\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-label=\"Tyre Press Animation\">\n      <defs>\n        <linearGradient id=\"tspGreen\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n          <stop offset=\"0%\" stop-color=\"#0aa84f\"\/>\n          <stop offset=\"100%\" stop-color=\"#067a39\"\/>\n        <\/linearGradient>\n        <linearGradient id=\"tspDark\" x1=\"0\" y1=\"1\" x2=\"1\" y2=\"0\">\n          <stop offset=\"0%\" stop-color=\"#0b3b2a\"\/>\n          <stop offset=\"100%\" stop-color=\"#145a3d\"\/>\n        <\/linearGradient>\n        <filter id=\"tspShadow\" x=\"-25%\" y=\"-25%\" width=\"150%\" height=\"150%\">\n          <feDropShadow dx=\"0\" dy=\"10\" stdDeviation=\"7\" flood-color=\"#000\" flood-opacity=\"0.18\"\/>\n        <\/filter>\n      <\/defs>\n\n      <rect x=\"12\" y=\"12\" width=\"116\" height=\"116\" rx=\"28\" fill=\"#f7fff9\" stroke=\"url(#tspGreen)\" stroke-width=\"5\"\/>\n\n      <g class=\"tsp-press-shake\" filter=\"url(#tspShadow)\">\n        <rect x=\"38\" y=\"30\" width=\"14\" height=\"82\" rx=\"7\" fill=\"url(#tspDark)\"\/>\n        <rect x=\"88\" y=\"30\" width=\"14\" height=\"82\" rx=\"7\" fill=\"url(#tspDark)\"\/>\n        <rect x=\"34\" y=\"26\" width=\"76\" height=\"16\" rx=\"8\" fill=\"url(#tspDark)\"\/>\n        <rect x=\"58\" y=\"36\" width=\"6\" height=\"56\" rx=\"3\" fill=\"#e8f7ee\" opacity=\"0.9\"\/>\n        <rect x=\"76\" y=\"36\" width=\"6\" height=\"56\" rx=\"3\" fill=\"#e8f7ee\" opacity=\"0.9\"\/>\n\n        <g class=\"tsp-press-head\">\n          <rect x=\"44\" y=\"44\" width=\"52\" height=\"18\" rx=\"8\" fill=\"url(#tspDark)\"\/>\n          <rect x=\"48\" y=\"62\" width=\"44\" height=\"8\" rx=\"4\" fill=\"url(#tspGreen)\"\/>\n          <rect x=\"50\" y=\"70\" width=\"40\" height=\"6\" rx=\"3\" fill=\"#e8f7ee\" opacity=\"0.9\"\/>\n        <\/g>\n\n        <rect x=\"44\" y=\"100\" width=\"52\" height=\"12\" rx=\"6\" fill=\"url(#tspDark)\"\/>\n        <rect x=\"52\" y=\"86\" width=\"36\" height=\"12\" rx=\"6\" fill=\"#e8f7ee\" opacity=\"0.85\"\/>\n        <path d=\"M96 106 L118 114 L118 123 L92 115 Z\" fill=\"#e8f7ee\" stroke=\"#0aa84f\" stroke-width=\"3\" opacity=\"0.95\"\/>\n      <\/g>\n\n      <g class=\"tsp-bale\">\n        <rect x=\"56\" y=\"88\" width=\"28\" height=\"16\" rx=\"5\" fill=\"url(#tspGreen)\"\/>\n        <path d=\"M58 94 H82\" stroke=\"#ffffff\" stroke-width=\"2\" opacity=\"0.75\"\/>\n        <path d=\"M58 100 H82\" stroke=\"#ffffff\" stroke-width=\"2\" opacity=\"0.75\"\/>\n      <\/g>\n\n      <g class=\"tsp-press-dust\" opacity=\"0\">\n        <circle cx=\"52\" cy=\"84\" r=\"2\" fill=\"#0aa84f\"\/>\n        <circle cx=\"88\" cy=\"84\" r=\"2\" fill=\"#0aa84f\"\/>\n        <circle cx=\"70\" cy=\"82\" r=\"2\" fill=\"#0aa84f\"\/>\n      <\/g>\n    <\/svg>\n\n    <!-- CENTER TEXT -->\n    <div class=\"tsp-v3-text\">\n      <div class=\"tsp-v3-name\">TyreScrap<span>Portal<\/span><\/div>\n      <div class=\"tsp-v3-sub\">B2B Marketplace for Tyre Recycling<\/div>\n    <\/div>\n\n    <!-- RIGHT: SHREDDER (V3) -->\n    <svg class=\"tsp-v3-machine\" viewBox=\"0 0 140 140\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-label=\"Tyre Shredder Animation\">\n      <defs>\n        <linearGradient id=\"tspGreen2\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n          <stop offset=\"0%\" stop-color=\"#0aa84f\"\/>\n          <stop offset=\"100%\" stop-color=\"#067a39\"\/>\n        <\/linearGradient>\n        <linearGradient id=\"tspDark2\" x1=\"0\" y1=\"1\" x2=\"1\" y2=\"0\">\n          <stop offset=\"0%\" stop-color=\"#0b3b2a\"\/>\n          <stop offset=\"100%\" stop-color=\"#145a3d\"\/>\n        <\/linearGradient>\n        <filter id=\"tspShadow2\" x=\"-25%\" y=\"-25%\" width=\"150%\" height=\"150%\">\n          <feDropShadow dx=\"0\" dy=\"10\" stdDeviation=\"7\" flood-color=\"#000\" flood-opacity=\"0.18\"\/>\n        <\/filter>\n      <\/defs>\n\n      <rect x=\"12\" y=\"12\" width=\"116\" height=\"116\" rx=\"28\" fill=\"#f7fff9\" stroke=\"url(#tspGreen2)\" stroke-width=\"5\"\/>\n\n      <g class=\"tsp-shred-shake\" filter=\"url(#tspShadow2)\">\n        <rect x=\"30\" y=\"44\" width=\"80\" height=\"66\" rx=\"16\" fill=\"#ffffff\" stroke=\"url(#tspDark2)\" stroke-width=\"4\"\/>\n        <rect x=\"30\" y=\"36\" width=\"80\" height=\"16\" rx=\"10\" fill=\"url(#tspDark2)\"\/>\n        <rect x=\"30\" y=\"106\" width=\"80\" height=\"12\" rx=\"8\" fill=\"url(#tspDark2)\"\/>\n        <path d=\"M30 54 L18 62 L18 86 L30 92 Z\" fill=\"#e8f7ee\" stroke=\"#0aa84f\" stroke-width=\"3\"\/>\n        <path d=\"M110 62 L122 70 L122 94 L110 98 Z\" fill=\"#e8f7ee\" stroke=\"#0aa84f\" stroke-width=\"3\"\/>\n        <rect x=\"42\" y=\"64\" width=\"56\" height=\"8\" rx=\"4\" fill=\"url(#tspDark2)\" opacity=\"0.95\"\/>\n        <rect x=\"42\" y=\"84\" width=\"56\" height=\"8\" rx=\"4\" fill=\"url(#tspDark2)\" opacity=\"0.95\"\/>\n      <\/g>\n\n      <g class=\"tsp-rotor\" transform=\"translate(70 78)\">\n        <circle cx=\"0\" cy=\"0\" r=\"18\" fill=\"url(#tspDark2)\"\/>\n        <circle cx=\"0\" cy=\"0\" r=\"8\" fill=\"#e8f7ee\"\/>\n        <g fill=\"url(#tspGreen2)\">\n          <rect x=\"-2\" y=\"-22\" width=\"4\" height=\"10\" rx=\"2\"\/>\n          <rect x=\"-2\" y=\"12\" width=\"4\" height=\"10\" rx=\"2\"\/>\n          <rect x=\"-22\" y=\"-2\" width=\"10\" height=\"4\" rx=\"2\"\/>\n          <rect x=\"12\" y=\"-2\" width=\"10\" height=\"4\" rx=\"2\"\/>\n        <\/g>\n      <\/g>\n\n      <g class=\"tsp-tyre\">\n        <circle cx=\"18\" cy=\"80\" r=\"12\" fill=\"none\" stroke=\"url(#tspDark2)\" stroke-width=\"7\"\/>\n        <circle cx=\"18\" cy=\"80\" r=\"7\" fill=\"none\" stroke=\"#e8f7ee\" stroke-width=\"6\"\/>\n      <\/g>\n\n      <g class=\"tsp-shreds1\">\n        <rect x=\"120\" y=\"76\" width=\"8\" height=\"4\" rx=\"2\" fill=\"url(#tspGreen2)\"\/>\n        <rect x=\"116\" y=\"86\" width=\"10\" height=\"4\" rx=\"2\" fill=\"url(#tspGreen2)\"\/>\n        <rect x=\"122\" y=\"94\" width=\"7\" height=\"4\" rx=\"2\" fill=\"url(#tspGreen2)\"\/>\n      <\/g>\n\n      <g class=\"tsp-shreds2\">\n        <rect x=\"114\" y=\"98\" width=\"8\" height=\"4\" rx=\"2\" fill=\"url(#tspGreen2)\"\/>\n        <rect x=\"122\" y=\"86\" width=\"7\" height=\"4\" rx=\"2\" fill=\"url(#tspGreen2)\"\/>\n        <rect x=\"118\" y=\"104\" width=\"9\" height=\"4\" rx=\"2\" fill=\"url(#tspGreen2)\"\/>\n      <\/g>\n    <\/svg>\n\n  <\/a>\n<\/div>\n\n<style>\n  \/* layout *\/\n  .tsp-v3-wrap{\n    width:100%;\n    display:flex;\n    justify-content:center;\n    align-items:center;\n  }\n  .tsp-v3-link{\n    display:flex;\n    align-items:center;\n    gap:16px;\n    text-decoration:none;\n    user-select:none;\n    animation: tspV3Float 1.7s ease-in-out infinite;\n  }\n\n  \/* size *\/\n  .tsp-v3-machine{ width:72px; height:72px; flex:0 0 auto; }\n\n  \/* text *\/\n  .tsp-v3-text{ display:flex; flex-direction:column; line-height:1.1; text-align:center; }\n  .tsp-v3-name{\n    font-family: Arial, Helvetica, sans-serif;\n    font-size: 34px;\n    font-weight: 900;\n    letter-spacing: 0.2px;\n    color:#0f2f36;\n  }\n  .tsp-v3-name span{ color:#0aa84f; }\n  .tsp-v3-sub{\n    font-family: Arial, Helvetica, sans-serif;\n    font-size: 13px;\n    font-weight: 700;\n    color:#3a4a50;\n    opacity:0.85;\n    margin-top:4px;\n  }\n\n  \/* float (DESKTOP) *\/\n  @keyframes tspV3Float{\n    0%,100%{ transform: translateY(0px); }\n    50%{ transform: translateY(-2px); }\n  }\n\n  \/* PRESS head *\/\n  .tsp-press-head{ animation: tspPress 1.6s ease-in-out infinite; }\n  @keyframes tspPress{\n    0%,100%{ transform: translateY(0px); }\n    38%{ transform: translateY(18px); }\n    56%{ transform: translateY(18px); }\n  }\n\n  \/* PRESS impact *\/\n  .tsp-press-shake{ animation: tspImpact 1.6s ease-in-out infinite; transform-origin: 70px 85px; }\n  @keyframes tspImpact{\n    0%,34%,100%{ transform: translate(0,0); }\n    40%{ transform: translate(0.5px, -0.5px); }\n    44%{ transform: translate(-0.5px, 0.5px); }\n    48%{ transform: translate(0.4px, -0.4px); }\n    52%{ transform: translate(0,0); }\n  }\n\n  \/* PRESS dust *\/\n  .tsp-press-dust{ animation: tspDust 1.6s ease-in-out infinite; }\n  @keyframes tspDust{\n    0%,36%,100%{ opacity:0; transform: translateY(0); }\n    44%{ opacity:1; transform: translateY(-3px); }\n    60%{ opacity:0; transform: translateY(-6px); }\n  }\n\n  \/* bale *\/\n  .tsp-bale{ animation: tspBale 1.6s ease-in-out infinite; opacity:0; }\n  @keyframes tspBale{\n    0%,34%{ transform: translate(0px, -2px) scaleX(0.6); opacity:0; }\n    50%{ transform: translate(0px, 0px) scaleX(1); opacity:1; }\n    70%{ transform: translate(36px, 18px) rotate(4deg); opacity:1; }\n    82%{ transform: translate(54px, 34px) rotate(8deg); opacity:1; }\n    88%{ transform: translate(54px, 30px) rotate(6deg); opacity:1; }\n    96%{ transform: translate(54px, 36px) rotate(8deg); opacity:0; }\n    100%{ opacity:0; }\n  }\n\n  \/* rotor *\/\n  .tsp-rotor{ animation: tspRotor 1.1s linear infinite; transform-origin: 0 0; }\n  @keyframes tspRotor{\n    from{ transform: translate(70px,78px) rotate(0deg); }\n    to{ transform: translate(70px,78px) rotate(360deg); }\n  }\n\n  \/* shred shake *\/\n  .tsp-shred-shake{ animation: tspShredShake 1.9s ease-in-out infinite; transform-origin: 70px 80px; }\n  @keyframes tspShredShake{\n    0%,56%,100%{ transform: translate(0,0); }\n    62%{ transform: translate(0.6px, -0.4px); }\n    66%{ transform: translate(-0.6px, 0.4px); }\n    70%{ transform: translate(0.4px, -0.3px); }\n    76%{ transform: translate(0,0); }\n  }\n\n  \/* tyre in *\/\n  .tsp-tyre{ animation: tspTyreIn 1.9s linear infinite; transform-origin: 18px 80px; }\n  @keyframes tspTyreIn{\n    0%{ transform: translateX(0px) scale(1) rotate(0deg); opacity:1; }\n    50%{ transform: translateX(56px) scale(1) rotate(220deg); opacity:1; }\n    60%{ transform: translateX(62px) scale(0.55) rotate(320deg); opacity:0.7; }\n    70%{ transform: translateX(66px) scale(0.2) rotate(380deg); opacity:0; }\n    100%{ opacity:0; }\n  }\n\n  \/* shreds *\/\n  .tsp-shreds1{ animation: tspShreds1 1.9s ease-out infinite; opacity:0; }\n  @keyframes tspShreds1{\n    0%,58%{ transform: translate(0,0); opacity:0; }\n    70%{ opacity:1; }\n    100%{ transform: translate(18px,-10px); opacity:0; }\n  }\n  .tsp-shreds2{ animation: tspShreds2 1.9s ease-out infinite; opacity:0; }\n  @keyframes tspShreds2{\n    0%,66%{ transform: translate(0,0); opacity:0; }\n    78%{ opacity:1; }\n    100%{ transform: translate(16px,8px); opacity:0; }\n  }\n\n  \/* \u2705 Responsive (Logo tiefer) *\/\n  @media(max-width:768px){\n    .tsp-v3-machine{ width:58px; height:58px; }\n    .tsp-v3-name{ font-size:28px; }\n    .tsp-v3-sub{ font-size:12px; }\n    .tsp-v3-link{ gap:12px; animation: tspV3FloatMobile 1.7s ease-in-out infinite; }\n  }\n  @keyframes tspV3FloatMobile{\n    0%,100%{ transform: translateY(18px); }\n    50%{ transform: translateY(16px); }\n  }\n\n  @media(max-width:480px){\n    .tsp-v3-machine{ width:50px; height:50px; }\n    .tsp-v3-name{ font-size:24px; }\n    .tsp-v3-sub{ display:none; }\n    .tsp-v3-link{ animation: tspV3FloatMobileSmall 1.7s ease-in-out infinite; }\n  }\n  @keyframes tspV3FloatMobileSmall{\n    0%,100%{ transform: translateY(26px); }\n    50%{ transform: translateY(24px); }\n  }\n\n  \/* reduced motion *\/\n  @media (prefers-reduced-motion: reduce){\n    .tsp-v3-link,\n    .tsp-press-head,.tsp-press-shake,.tsp-bale,.tsp-press-dust,\n    .tsp-rotor,.tsp-shred-shake,.tsp-tyre,.tsp-shreds1,.tsp-shreds2{\n      animation:none !important;\n    }\n  }\n<\/style>\n\n\n\n<div class=\"tspDD-wrap tspDD-offset\">\n  <div class=\"tspDD-bar\">\n    <div class=\"tspDD-left\">\n      <div class=\"tspDD-title\">\n        Registrierung m\u00f6glich ab <span>09.02.2026<\/span>\n      <\/div>\n      <div class=\"tspDD-sub\">\n        Jetzt eintragen und am Launch-Tag sofort benachrichtigt werden.\n        <br><span style=\"opacity:.95;\">Hinweis: Es werden noch einige Updates im Portal durchgef\u00fchrt \u2013 daher verschiebt sich der Launch vom 01.02. auf den 09.02.<\/span>\n      <\/div>\n    <\/div>\n\n    <div class=\"tspDD-mid\">\n      <div class=\"tspDD-mid-label\">Countdown bis Launch<\/div>\n      <div class=\"tspDD-count\" id=\"tspDD_COUNTDOWN\">l\u00e4dt\u2026<\/div>\n    <\/div>\n\n    <div class=\"tspDD-right\">\n      <input type=\"email\" id=\"tspDD_EMAIL\" class=\"tspDD-email\" placeholder=\"E-Mail Adresse\" required>\n      \n      <div class=\"tspDD-dd\">\n        <button type=\"button\" id=\"tspDD_BTN\" class=\"tspDD-btn\">\n          Benachrichtigen \u25be\n        <\/button>\n\n        <div class=\"tspDD-menu\" id=\"tspDD_MENU\" aria-hidden=\"true\">\n          <button type=\"button\" class=\"tspDD-item\" data-role=\"buyer\">\ud83d\uded2 Ich bin K\u00e4ufer<\/button>\n          <button type=\"button\" class=\"tspDD-item\" data-role=\"seller\">\ud83d\udcbc Ich bin Verk\u00e4ufer<\/button>\n          <button type=\"button\" class=\"tspDD-item\" data-role=\"forwarder\">\ud83d\ude9a Ich bin Spedition<\/button>\n          <button type=\"button\" class=\"tspDD-item\" data-role=\"customs\">\ud83d\udec3 Ich bin Zollagentur<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"tspDD-note\">\n    Nach dem Eintragen erhalten Sie eine Best\u00e4tigung per E-Mail. Bitte pr\u00fcfen Sie auch den Spam-\/Junk-Ordner.\n  <\/div>\n\n  <!-- \u2705 Success \/ Error -->\n  <div class=\"tspDD-success\" id=\"tspDD_SUCCESS\">\n    <span class=\"tspDD-check\">\u2713<\/span>\n    <span>Erfolgreich f\u00fcr die Warteliste eingetragen.<\/span>\n  <\/div>\n\n  <div class=\"tspDD-error\" id=\"tspDD_ERROR\"><\/div>\n<\/div>\n\n<!-- \u2705 Hidden WordPress Form -->\n<form id=\"tspDD_FORM\" method=\"post\" action=\"\/wp-admin\/admin-post.php\" target=\"tspDD_iframe\" style=\"display:none;\">\n  <input type=\"hidden\" name=\"action\" value=\"tsp_waitlist\">\n  <input type=\"hidden\" name=\"page\" value=\"\">\n  <input type=\"hidden\" name=\"lang\" value=\"de\">\n  <input type=\"hidden\" name=\"role\" value=\"buyer\" id=\"tspDD_ROLE\">\n  <input type=\"hidden\" name=\"email\" value=\"\" id=\"tspDD_EMAIL_HIDDEN\">\n\n  <!-- honeypot -->\n  <input type=\"text\" name=\"company\" value=\"\" tabindex=\"-1\" autocomplete=\"off\">\n<\/form>\n\n<iframe name=\"tspDD_iframe\" id=\"tspDD_IFRAME\" style=\"display:none;\"><\/iframe>\n\n<style>\n  \/* \u2705 super wichtig: Dropdown darf NICHT abgeschnitten werden *\/\n  .tspDD-wrap{\n    position:relative;\n    z-index:99999;\n    overflow:visible !important;\n  }\n\n  .tspDD-wrap, .tspDD-wrap *{\n    box-sizing:border-box;\n    font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Arial;\n  }\n\n  .tspDD-offset{ margin-top:78px !important; padding:0 12px; }\n\n  .tspDD-bar{\n    width:100%;\n    max-width:1100px;\n    margin:0 auto;\n    border-radius:18px;\n    padding:14px 16px;\n    display:flex;\n    gap:16px;\n    align-items:center;\n    justify-content:space-between;\n    flex-wrap:wrap;\n    background: linear-gradient(120deg, #09131a 0%, #0f2b33 55%, #09131a 100%);\n    border:1px solid rgba(255,255,255,0.12);\n    box-shadow:0 14px 38px rgba(0,0,0,0.45);\n    position:relative;\n    overflow:visible !important;\n    z-index:99999;\n    transform: translateZ(0);\n  }\n  .tspDD-bar::before{\n    content:\"\";\n    position:absolute;\n    inset:-2px;\n    background: radial-gradient(circle at 20% 20%, rgba(10,168,79,0.20), transparent 60%);\n    pointer-events:none;\n  }\n\n  .tspDD-left{ flex:1 1 320px; min-width:260px; position:relative; z-index:2; }\n  .tspDD-title{ font-size:14px; font-weight:900; color:#ecf6f2; margin-bottom:4px; letter-spacing:.2px; }\n  .tspDD-title span{ color:#0aa84f; }\n  .tspDD-sub{ font-size:12px; font-weight:700; color:#cfe2db; line-height:1.35; opacity:0.95; }\n\n  .tspDD-mid{\n    flex:0 0 auto;\n    min-width:210px;\n    text-align:center;\n    padding:10px 12px;\n    border-radius:14px;\n    background: rgba(255,255,255,0.06);\n    border:1px solid rgba(255,255,255,0.14);\n    position:relative;\n    z-index:2;\n  }\n  .tspDD-mid-label{ font-size:10.5px; font-weight:900; color:#cfe2db; margin-bottom:3px; opacity:0.9; }\n\n  \/* \u2705 Anti-Wackel Fix bleibt: feste Breite + Monospace *\/\n  .tspDD-count{\n    font-size:13px;\n    font-weight:900;\n    color:#0aa84f;\n    letter-spacing:0.2px;\n    font-variant-numeric: tabular-nums;\n    font-feature-settings: \"tnum\";\n    white-space:nowrap;\n\n    display:inline-block;\n    min-width:190px;              \/* etwas breiter wegen \"Days\" + h\/m\/s *\/\n    text-align:center;\n\n    font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  }\n\n  .tspDD-right{ display:flex; gap:10px; align-items:center; position:relative; z-index:2; }\n  .tspDD-email{\n    width:220px;\n    padding:10px 12px;\n    border-radius:14px;\n    border:1px solid rgba(255,255,255,0.18);\n    background: rgba(255,255,255,0.06);\n    font-size:12.5px;\n    font-weight:800;\n    outline:none;\n    color:#ecf6f2;\n  }\n  .tspDD-email::placeholder{ color:rgba(236,246,242,0.65); font-weight:700; }\n  .tspDD-email:focus{ border-color:#0aa84f; box-shadow:0 0 0 3px rgba(10,168,79,.20); }\n\n  .tspDD-dd{ position:relative; z-index:999999; }\n\n  .tspDD-btn{\n    padding:10px 14px;\n    border:none;\n    border-radius:14px;\n    background: linear-gradient(135deg, #0aa84f, #067a39);\n    color:#fff;\n    font-weight:900;\n    font-size:12.5px;\n    cursor:pointer;\n    transition:.12s ease;\n    white-space:nowrap;\n    box-shadow:0 10px 18px rgba(10,168,79,0.18);\n  }\n  .tspDD-btn:hover{ transform: translateY(-1px); filter: brightness(1.05); }\n\n  .tspDD-menu{\n    display:none;\n    position:absolute;\n    top:calc(100% + 8px);\n    right:0;\n    width:220px;\n    background:#0a171e;\n    border:1px solid rgba(255,255,255,0.14);\n    border-radius:14px;\n    overflow:hidden;\n    box-shadow:0 18px 45px rgba(0,0,0,0.55);\n    z-index:9999999;\n  }\n  .tspDD-menu.show{ display:block; }\n\n  .tspDD-item{\n    width:100%;\n    text-align:left;\n    padding:12px 12px;\n    border:none;\n    background:transparent;\n    color:#ecf6f2;\n    font-weight:900;\n    font-size:12.5px;\n    cursor:pointer;\n  }\n  .tspDD-item:hover{ background:rgba(10,168,79,0.12); }\n\n  .tspDD-note{\n    max-width:1100px;\n    margin:8px auto 0;\n    font-size:11.5px;\n    font-weight:700;\n    color:#a9c0b9;\n    line-height:1.35;\n    padding-left:4px;\n  }\n\n  .tspDD-success{\n    display:none;\n    max-width:1100px;\n    margin:10px auto 0;\n    padding:10px 12px;\n    border-radius:14px;\n    border:1px solid rgba(10,168,79,.25);\n    background:rgba(10,168,79,.08);\n    font-size:12.5px;\n    font-weight:900;\n    color:#0b3b2a;\n    align-items:center;\n    gap:10px;\n  }\n  .tspDD-check{\n    width:18px;height:18px;\n    border-radius:999px;\n    background:#0aa84f;\n    color:#fff;\n    display:inline-flex;\n    align-items:center;\n    justify-content:center;\n    font-size:13px;\n    flex:0 0 auto;\n  }\n\n  .tspDD-error{\n    display:none;\n    max-width:1100px;\n    margin:10px auto 0;\n    padding:10px 12px;\n    border-radius:14px;\n    border:1px solid rgba(185,28,28,.25);\n    background:rgba(185,28,28,.08);\n    font-size:12.5px;\n    font-weight:900;\n    color:#7f1d1d;\n    line-height:1.35;\n  }\n\n  @media(max-width:720px){\n    .tspDD-right{ width:100%; }\n    .tspDD-email{ flex:1; width:100%; }\n    .tspDD-btn{ width:100%; }\n    .tspDD-mid{ width:100%; text-align:left; }\n    .tspDD-menu{ width:100%; left:0; right:auto; }\n    .tspDD-count{ min-width:0; width:100%; text-align:left; }\n  }\n<\/style>\n\n<script>\n(function(){\n\n  \/* \u2705 Countdown (l\u00e4uft stabil) *\/\n  var targetDate = new Date(2026, 1, 9, 0, 0, 0).getTime();\n\n  function tick(){\n    var el = document.getElementById(\"tspDD_COUNTDOWN\");\n    if(!el) return;\n\n    var diff = targetDate - Date.now();\n    if(diff <= 0){\n      el.textContent = \"Now available\";\n      return;\n    }\n\n    var s = Math.floor(diff\/1000);\n    var d = Math.floor(s\/86400); s -= d*86400;\n    var h = Math.floor(s\/3600); s -= h*3600;\n    var m = Math.floor(s\/60); s -= m*60;\n\n    \/* \u2705 ohne f\u00fchrende Null bei Days *\/\n    el.textContent =\n      d + \" Days \" +\n      String(h).padStart(2,\"0\") + \"h \" +\n      String(m).padStart(2,\"0\") + \"m \" +\n      String(s).padStart(2,\"0\") + \"s\";\n  }\n\n  tick();\n  setInterval(tick, 1000);\n\n  function $(id){ return document.getElementById(id); }\n\n  var emailInput = $(\"tspDD_EMAIL\");\n  var btn = $(\"tspDD_BTN\");\n  var menu = $(\"tspDD_MENU\");\n  var form = $(\"tspDD_FORM\");\n  var roleField = $(\"tspDD_ROLE\");\n  var hiddenEmail = $(\"tspDD_EMAIL_HIDDEN\");\n  var success = $(\"tspDD_SUCCESS\");\n  var error = $(\"tspDD_ERROR\");\n  var iframe = $(\"tspDD_IFRAME\");\n\n  if(!emailInput || !btn || !menu || !form || !roleField || !hiddenEmail || !success || !error || !iframe) return;\n\n  var pageInput = form.querySelector('input[name=\"page\"]');\n  if(pageInput) pageInput.value = window.location.href;\n\n  btn.addEventListener(\"click\", function(){\n    var email = (emailInput.value || \"\").trim();\n    if(!email){\n      alert(\"Bitte eine E-Mail Adresse eingeben.\");\n      emailInput.focus();\n      return;\n    }\n    menu.classList.toggle(\"show\");\n  });\n\n  document.addEventListener(\"click\", function(e){\n    if(!e.target.closest(\".tspDD-dd\")) menu.classList.remove(\"show\");\n  });\n\n  function showSuccess(){\n    error.style.display=\"none\";\n    error.textContent=\"\";\n    success.style.display=\"flex\";\n    setTimeout(function(){ success.style.display=\"none\"; }, 7000);\n  }\n\n  function showError(msg){\n    success.style.display=\"none\";\n    error.style.display=\"block\";\n    error.textContent = msg || \"Fehler beim Eintragen. Bitte erneut versuchen.\";\n  }\n\n  var iframeTimer = null;\n\n  document.querySelectorAll(\".tspDD-item\").forEach(function(item){\n    item.addEventListener(\"click\", function(){\n      menu.classList.remove(\"show\");\n\n      var email = (emailInput.value || \"\").trim();\n      if(!email){ return; }\n\n      var role = item.getAttribute(\"data-role\") || \"buyer\";\n      roleField.value = role;\n      hiddenEmail.value = email;\n      if(pageInput) pageInput.value = window.location.href;\n\n      btn.disabled = true;\n      btn.textContent = \"Wird eingetragen\u2026\";\n\n      clearTimeout(iframeTimer);\n      var loaded = false;\n\n      iframeTimer = setTimeout(function(){\n        if(!loaded){\n          showError(\"Fehler beim Eintragen. Bitte erneut versuchen.\");\n          btn.disabled = false;\n          btn.textContent = \"Benachrichtigen \u25be\";\n        }\n      }, 6000);\n\n      iframe.onload = function(){\n        loaded = true;\n        clearTimeout(iframeTimer);\n        showSuccess();\n        btn.disabled = false;\n        btn.textContent = \"Benachrichtigen \u25be\";\n        emailInput.value = \"\";\n      };\n\n      try{\n        form.submit();\n      }catch(e){\n        console.error(e);\n        showError(\"Fehler beim Eintragen. Bitte erneut versuchen.\");\n        btn.disabled = false;\n        btn.textContent = \"Benachrichtigen \u25be\";\n      }\n    });\n  });\n\n})();\n<\/script>\n\n\n\n<section class=\"tsp-hero\" id=\"top\"> \n  <div class=\"tsp-hero-wrap\">\n\n    <!-- Trust Strip -->\n    <div class=\"tsp-hero-truststrip\">\n      <span>\u2705 B2B \/ Gewerblich<\/span>\n      <span>\u270d\ufe0f Digitale Signatur<\/span>\n      <span>\ud83d\udcc4 Dokumentenpaket automatisch<\/span>\n      <span>\ud83d\udd10 Rollenbasierter Zugriff<\/span>\n    <\/div>\n\n    <h1 class=\"tsp-hero-title\">\n      Reifenballen<br>\n      sicher handeln \u2013 ohne Papierkram.\n    <\/h1>\n\n    <p class=\"tsp-hero-sub\">\n      TyreScrapPortal erm\u00f6glicht den B2B-Handel von Reifenballen mit integrierter Exportplanung:\n      K\u00e4ufer kombinieren den Kauf direkt mit <strong>Spedition<\/strong> und <strong>Zollagentur<\/strong> aus dem System \u2013\n      inklusive transparenter Kosten\u00fcbersicht. Nach dem Kauf stellt das Portal das vollst\u00e4ndige Dokumentenpaket zentral bereit.\n    <\/p>\n\n    <div class=\"tsp-hero-highlights\">\n      <div class=\"tsp-pill\">Annex VII<\/div>\n      <div class=\"tsp-pill\">Verwertungsvertrag<\/div>\n      <div class=\"tsp-pill\">Rechnung & Lieferschein<\/div>\n      <div class=\"tsp-pill\">Produktfotos & Inseratsdaten<\/div>\n      <div class=\"tsp-pill\">Container- & Siegelnummern nach Verladung<\/div>\n    <\/div>\n\n    <!-- MAIN CTA -->\n    <div class=\"tsp-hero-maincta\">\n      <button class=\"tsp2-btn tsp-btn-primary\" id=\"openRegBtn\" type=\"button\">\n        Jetzt registrieren <span class=\"tsp-reg-arrow\">\u25bc<\/span>\n      <\/button>\n\n      <a class=\"tsp2-btn tsp-btn-secondary\" href=\"#block2\">\n        So funktioniert\u2019s\n      <\/a>\n    <\/div>\n\n    <!-- Registrierungsbereich -->\n    <div class=\"tsp-reg-area\" id=\"regArea\">\n      <div class=\"tsp-reg-title\">Registrieren als:<\/div>\n\n      <div class=\"tsp-hero-cta\">\n\n        <a class=\"tsp2-btn tsp-btn-primary tsp-role-btn\"\n           href=\"https:\/\/buyer.tyrescrapportal.com\">\n          <span class=\"tsp-btn-icon\">\ud83e\uddd1\u200d\ud83d\udcbc<\/span>\n          K\u00e4ufer\n        <\/a>\n\n        <a class=\"tsp2-btn tsp-btn-primary tsp-role-btn\"\n           href=\"https:\/\/seller.tyrescrapportal.com\">\n          <span class=\"tsp-btn-icon\">\ud83e\uddd1\u200d\ud83c\udfed<\/span>\n          Verk\u00e4ufer\n        <\/a>\n\n        <a class=\"tsp2-btn tsp-btn-primary tsp-role-btn\"\n           href=\"https:\/\/forwarder.tyrescrapportal.com\">\n          <span class=\"tsp-btn-icon\">\ud83d\ude9a<\/span>\n          Spedition\n        <\/a>\n\n        <a class=\"tsp2-btn tsp-btn-primary tsp-role-btn\"\n           href=\"https:\/\/customs.tyrescrapportal.com\">\n          <span class=\"tsp-btn-icon\">\ud83e\uddfe<\/span>\n          Zollagentur\n        <\/a>\n\n      <\/div>\n    <\/div>\n\n    <!-- Roles Info -->\n    <div class=\"tsp-hero-roles\">\n      <div class=\"tsp-role\">\n        <span>\ud83e\uddd1\u200d\ud83c\udfed<\/span>\n        <div>\n          <strong>Verk\u00e4ufer<\/strong>\n          <em>Inserieren, H\u00f6chstpreise erzielen, gesetzeskonform verkaufen.<\/em>\n        <\/div>\n      <\/div>\n\n      <div class=\"tsp-role\">\n        <span>\ud83e\uddd1\u200d\ud83d\udcbc<\/span>\n        <div>\n          <strong>K\u00e4ufer<\/strong>\n          <em>Passende Ware finden, kaufen und Export vorbereiten.<\/em>\n        <\/div>\n      <\/div>\n\n      <div class=\"tsp-role\">\n        <span>\ud83d\ude9a<\/span>\n        <div>\n          <strong>Spedition<\/strong>\n          <em>Dokumente zentral abrufen \u2013 deutlich weniger R\u00fcckfragen.<\/em>\n        <\/div>\n      <\/div>\n\n      <div class=\"tsp-role\">\n        <span>\ud83e\uddfe<\/span>\n        <div>\n          <strong>Zollagentur<\/strong>\n          <em>Vollst\u00e4ndige Unterlagen f\u00fcr eine saubere Ausfuhrverzollung.<\/em>\n        <\/div>\n      <\/div>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function(){\n  const openBtn = document.getElementById(\"openRegBtn\");\n  const regArea = document.getElementById(\"regArea\");\n  const arrow = openBtn.querySelector(\".tsp-reg-arrow\");\n\n  regArea.classList.remove(\"open\");\n\n  openBtn.addEventListener(\"click\", function(){\n    const isOpen = regArea.classList.contains(\"open\");\n\n    if(isOpen){\n      regArea.classList.remove(\"open\");\n      arrow.textContent = \"\u25bc\";\n      openBtn.classList.remove(\"tsp-pulse\");\n    } else {\n      regArea.classList.add(\"open\");\n      arrow.textContent = \"\u25b2\";\n      openBtn.classList.add(\"tsp-pulse\");\n      setTimeout(()=> openBtn.classList.remove(\"tsp-pulse\"), 650);\n    }\n  });\n});\n<\/script>\n\n<style>\n.tsp-hero-truststrip{\n  display:flex;\n  flex-wrap:wrap;\n  gap:10px;\n  justify-content:center;\n  font-weight:700;\n  font-size:14px;\n  padding:10px 12px;\n  border-radius:10px;\n  background:rgba(255,255,255,0.75);\n  border:1px solid rgba(0,0,0,0.06);\n  margin-bottom:16px;\n}\n.tsp-hero-truststrip span{\n  padding:6px 10px;\n  border-radius:999px;\n  background:rgba(92,184,92,0.12);\n}\n\n.tsp2-btn{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  gap:8px;\n  padding:12px 18px;\n  border-radius:12px;\n  font-weight:900;\n  font-size:14px;\n  text-decoration:none;\n  border:none;\n  cursor:pointer;\n  transition:all .2s ease;\n}\n.tsp-btn-primary{\n  background:#3F8F3F;\n  color:#fff;\n  box-shadow:0 8px 20px rgba(63,143,63,.35);\n}\n.tsp-btn-primary:hover{\n  background:#357A35;\n  transform:translateY(-1px);\n  box-shadow:0 12px 26px rgba(63,143,63,.45);\n}\n.tsp-btn-secondary{\n  background:rgba(0,0,0,0.08);\n  color:#222;\n}\n\n.tsp-hero-maincta{\n  display:flex;\n  gap:12px;\n  justify-content:center;\n  flex-wrap:wrap;\n  margin-top:18px;\n}\n\n.tsp-reg-area{\n  margin-top:16px;\n  overflow:hidden;\n  max-height:0;\n  opacity:0;\n  transform:translateY(-6px);\n  transition:all .35s ease;\n}\n.tsp-reg-area.open{\n  max-height:420px;\n  opacity:1;\n  transform:translateY(0);\n}\n\n.tsp-reg-title{\n  margin-top:12px;\n  font-weight:800;\n  text-align:center;\n}\n\n.tsp-hero-cta{\n  display:flex;\n  flex-wrap:wrap;\n  gap:12px;\n  justify-content:center;\n  margin-top:12px;\n}\n\n.tsp-btn-icon{\n  font-size:16px;\n}\n\n.tsp-hero-roles{\n  margin-top:28px;\n  display:grid;\n  gap:16px;\n}\n\n.tsp-role{\n  display:flex;\n  gap:12px;\n  align-items:flex-start;\n}\n.tsp-role span{\n  font-size:20px;\n}\n.tsp-role strong{\n  display:block;\n}\n.tsp-role em{\n  font-style:normal;\n  opacity:.85;\n  font-size:14px;\n}\n<\/style>\n\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\"><\/div>\n\n\n\n<div id=\"TSP_DUAL_DEMO_APP\"><\/div>\n\n<style>\n  :root{\n    --bg:#f6f8f7;\n    --card:#ffffff;\n    --text:#0f172a;\n    --muted:#64748b;\n    --border:#e5e7eb;\n\n    --green:#22c55e;\n    --greenDark:#16a34a;\n\n    --shadow:0 10px 30px rgba(15,23,42,0.06);\n    --radius:14px;\n\n    --danger:#ef4444;\n    --dangerSoft:#fee2e2;\n    --warn:#f59e0b;\n    --warnSoft:#ffedd5;\n    --blue:#3b82f6;\n    --blueSoft:#dbeafe;\n  }\n\n  #TSP_DUAL_DEMO_APP{\n    font-family: system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\n    background:var(--bg);\n    color:var(--text);\n    width:100%;\n    max-width:none;\n    margin:0;\n    padding:0;\n    font-weight:500;\n  }\n\n  .container{\n    width:100%;\n    max-width:1400px;\n    margin:0 auto;\n    padding:18px;\n  }\n\n  .card{\n    background:var(--card);\n    border:1px solid var(--border);\n    border-radius:var(--radius);\n    box-shadow:var(--shadow);\n  }\n\n  .h1{ font-size:30px; font-weight:720; margin:0; letter-spacing:-0.2px; }\n  .h2{ font-size:20px; font-weight:720; margin:0; letter-spacing:-0.15px; }\n  .p{ font-size:13.5px; color:var(--muted); line-height:1.7; margin:0; font-weight:500; }\n  .small{ font-size:12px; color:var(--muted); line-height:1.6; font-weight:500; }\n\n  .btn{\n    cursor:pointer;\n    border:none;\n    padding:11px 14px;\n    border-radius:12px;\n    font-weight:650;\n    font-size:13px;\n    transition:.2s;\n    white-space:nowrap;\n  }\n  .btn.primary{ background:var(--greenDark); color:#fff; }\n  .btn.primary:hover{ background:#15803d; transform:translateY(-1px); }\n  .btn.light{ background:#f1f5f9; color:#0f172a; border:1px solid var(--border); }\n  .btn.light:hover{ transform:translateY(-1px); }\n  .btn.danger{\n    background:#fff;\n    border:1px solid #fecaca;\n    color:#b91c1c;\n  }\n  .btn.danger:hover{ transform:translateY(-1px); background:#fff5f5; }\n\n  .btnRow{\n    display:flex;\n    gap:10px;\n    flex-wrap:wrap;\n    align-items:center;\n    justify-content:flex-end;\n  }\n\n  \/* \u2705 Mobile Buttons nebeneinander *\/\n  @media(max-width: 520px){\n    .btnRow{\n      width:100%;\n      flex-wrap:nowrap;\n      justify-content:stretch;\n    }\n    .btnRow .btn{\n      flex:1;\n      padding:12px 12px;\n      font-size:13px;\n    }\n  }\n\n  \/* NAV *\/\n  .nav{\n    position:sticky; top:0; z-index:9999;\n    background:#fff; border-bottom:1px solid var(--border);\n  }\n  .nav-inner{\n    width:100%;\n    max-width:1400px;\n    margin:0 auto;\n    padding:10px 18px;\n    display:flex;\n    align-items:center;\n    justify-content:space-between;\n    gap:14px;\n    flex-wrap:wrap;\n  }\n\n  \/* \u2705 kleines Logo (nur Icon) *\/\n  .brand{\n    display:flex; align-items:center;\n    cursor:pointer;\n  }\n  .brand .logo{\n    width:34px;height:34px; border-radius:10px;\n    background:linear-gradient(145deg, var(--green), var(--greenDark));\n    display:flex; align-items:center; justify-content:center;\n    color:#fff; font-size:16px;\n    box-shadow:0 8px 18px rgba(15,23,42,0.10);\n  }\n\n  .nav-tabs{\n    display:flex; align-items:center; gap:10px;\n    flex-wrap:wrap; justify-content:center;\n    flex:1;\n  }\n  .nav-tabs button{\n    border:none; cursor:pointer;\n    padding:9px 12px; border-radius:12px;\n    background:transparent; color:#111827;\n    font-size:13px; font-weight:540;\n    display:flex; align-items:center; gap:8px;\n    transition:.2s;\n  }\n  .nav-tabs button:hover{ background:#f3f4f6; }\n  .nav-tabs button.active{\n    background:rgba(34,197,94,0.10);\n    color:var(--greenDark);\n    font-weight:680;\n  }\n\n  \/* \u2705 Mobile: Tabs in den \"blauen Bereich\" (unter header row) *\/\n  @media(max-width:900px){\n    .nav-inner{\n      justify-content:space-between;\n      gap:10px;\n    }\n\n    .brand{ order:1; }\n    .nav-right{ order:2; }\n    .nav-tabs{\n      order:3;\n      width:100%;\n      flex:0 0 100%;\n      justify-content:flex-start;\n      overflow:auto;\n      padding:8px 2px 4px;\n      gap:8px;\n      -webkit-overflow-scrolling:touch;\n      scrollbar-width:none;\n    }\n    .nav-tabs::-webkit-scrollbar{ display:none; }\n    .nav-tabs button{\n      flex:0 0 auto;\n      background:#f8fafc;\n      border:1px solid var(--border);\n      padding:10px 12px;\n    }\n    .nav-tabs button.active{\n      border-color:rgba(34,197,94,0.22);\n    }\n  }\n\n  .nav-right{\n    display:flex;\n    align-items:center;\n    gap:10px;\n    flex-wrap:wrap;\n    justify-content:flex-end;\n  }\n  .icon-btn{\n    cursor:pointer; border:none;\n    background:#f3f4f6; color:#111827;\n    width:36px; height:36px; border-radius:12px;\n    display:flex; align-items:center; justify-content:center;\n    transition:.2s; position:relative;\n    box-shadow:0 6px 16px rgba(15,23,42,0.08);\n  }\n  .icon-btn:hover{ background:#e5e7eb; }\n  .badge{\n    position:absolute; top:-6px; right:-6px;\n    background:var(--greenDark); color:#fff;\n    font-size:11px; font-weight:700;\n    padding:4px 7px; border-radius:999px;\n    border:2px solid #fff;\n  }\n\n  .profile{\n    display:flex; align-items:center; gap:10px;\n    padding:6px 10px; border-radius:12px;\n    background:#f8fafc; border:1px solid var(--border);\n    cursor:pointer; transition:.2s;\n  }\n  .profile:hover{ background:#f3f4f6; }\n  .avatar{\n    width:32px; height:32px; border-radius:10px;\n    background:#111827; display:flex; align-items:center; justify-content:center;\n    color:#fff; font-weight:700; font-size:12px;\n  }\n  .profile .name{ font-size:12.5px; font-weight:640; color:#111827; line-height:1.1; }\n  .profile .role{ font-size:11px; color:var(--muted); margin-top:2px; font-weight:500; }\n\n  \/* START SCREEN *\/\n  .startWrap{ padding:24px 0 10px; }\n  .hero{\n    background:linear-gradient(145deg, #07120c, #0f2a1a);\n    border-radius:20px;\n    padding:26px;\n    border:1px solid rgba(255,255,255,0.08);\n    box-shadow:0 40px 90px rgba(0,0,0,0.22);\n    color:#fff;\n    overflow:hidden;\n    position:relative;\n  }\n  .hero:before{\n    content:\"\";\n    position:absolute; inset:-80px -80px auto auto;\n    width:280px;height:280px;\n    background:radial-gradient(circle, rgba(34,197,94,0.25), rgba(34,197,94,0));\n    transform:rotate(25deg);\n  }\n  .heroInner{ position:relative; z-index:2; }\n\n  .langBox{\n    margin-top:16px;\n    padding:14px;\n    border-radius:16px;\n    border:1px solid rgba(255,255,255,0.14);\n    background:rgba(255,255,255,0.06);\n    display:flex;\n    align-items:center;\n    justify-content:space-between;\n    gap:14px;\n    flex-wrap:wrap;\n  }\n  .langBtns{ display:flex; gap:10px; flex-wrap:wrap; }\n  .langPill{\n    cursor:pointer;\n    border-radius:999px;\n    padding:8px 14px;\n    font-weight:700;\n    font-size:13px;\n    border:1px solid rgba(255,255,255,0.14);\n    background:rgba(255,255,255,0.10);\n    color:#fff;\n    transition:.2s;\n  }\n  .langPill:hover{ transform:translateY(-1px); background:rgba(255,255,255,0.14); }\n  .langPill.active{\n    background:var(--greenDark);\n    border-color:rgba(255,255,255,0.16);\n  }\n\n  .demoGrid{\n    display:grid;\n    grid-template-columns:1fr 1fr;\n    gap:16px;\n    margin-top:16px;\n  }\n  .demoCard{\n    border:1px solid rgba(255,255,255,0.12);\n    background:rgba(255,255,255,0.06);\n    border-radius:18px;\n    padding:18px;\n  }\n  .demoCard h3{ margin:0; font-size:16px; font-weight:750; }\n  .demoCard p{ margin:8px 0 0; font-size:13px; line-height:1.7; color:rgba(255,255,255,0.84); }\n\n  .checklist{ margin-top:14px; display:grid; gap:8px; }\n  .check{ display:flex; gap:10px; align-items:flex-start; font-size:13px; color:rgba(255,255,255,0.86); }\n  .check b{ color:#fff; }\n  .demoActions{ display:flex; gap:10px; flex-wrap:wrap; margin-top:16px; }\n\n  \/* \u2705 Rotate Overlay (NO fullscreen button) *\/\n  .rotateOverlay{\n    position:fixed;\n    inset:0;\n    background:rgba(15,23,42,0.92);\n    z-index:999999;\n    display:flex;\n    align-items:center;\n    justify-content:center;\n    padding:18px;\n  }\n  .rotateBox{\n    max-width:520px;\n    width:100%;\n    border-radius:20px;\n    background:rgba(255,255,255,0.06);\n    border:1px solid rgba(255,255,255,0.14);\n    padding:22px;\n    text-align:center;\n    color:#fff;\n    box-shadow:0 40px 80px rgba(0,0,0,0.4);\n  }\n  .rotateTitle{\n    font-size:20px;\n    font-weight:850;\n    letter-spacing:-0.3px;\n  }\n  .rotateText{\n    margin-top:10px;\n    font-size:14px;\n    line-height:1.7;\n    color:rgba(255,255,255,0.86);\n  }\n  .phoneAnimWrap{\n    margin:18px auto 12px;\n    width:120px;\n    height:120px;\n    display:flex;\n    align-items:center;\n    justify-content:center;\n  }\n  .phoneAnim{\n    width:70px;\n    height:110px;\n    border-radius:14px;\n    border:2px solid rgba(255,255,255,0.95);\n    position:relative;\n    transform-origin:center;\n    animation:phoneRotate 1.6s ease-in-out infinite;\n  }\n  .phoneAnim:before{\n    content:\"\";\n    position:absolute;\n    left:10px;\n    right:10px;\n    top:12px;\n    bottom:20px;\n    border-radius:10px;\n    background:rgba(255,255,255,0.14);\n  }\n  .phoneAnim:after{\n    content:\"\";\n    position:absolute;\n    width:18px;\n    height:4px;\n    border-radius:999px;\n    background:rgba(255,255,255,0.85);\n    left:50%;\n    transform:translateX(-50%);\n    bottom:10px;\n  }\n  @keyframes phoneRotate{\n    0%{ transform:rotate(0deg) scale(1); }\n    35%{ transform:rotate(0deg) scale(1); }\n    60%{ transform:rotate(90deg) scale(1.05); }\n    100%{ transform:rotate(90deg) scale(1.05); }\n  }\n  .rotateButtons{\n    margin-top:16px;\n    display:flex;\n    gap:10px;\n    justify-content:center;\n    flex-wrap:wrap;\n  }\n  .rotateButtons .btn{\n    min-width:200px;\n  }\n\n  \/* KPI + sections *\/\n  .kpi-grid{ display:grid; grid-template-columns:repeat(3, 1fr); gap:16px; margin-top:18px; }\n  .kpi{ padding:18px; display:flex; justify-content:space-between; align-items:flex-start; gap:12px; min-height:98px; }\n  .kpi .label{ font-size:12.5px; font-weight:540; color:var(--muted); }\n  .kpi .value{ font-size:26px; font-weight:720; margin-top:8px; color:#111827; }\n  .kpi .sub{ font-size:12px; color:var(--greenDark); margin-top:6px; font-weight:540; }\n  .kpi .icon{\n    width:40px;height:40px; border-radius:14px;\n    background:rgba(34,197,94,0.12);\n    display:flex; align-items:center; justify-content:center;\n    color:var(--greenDark); flex-shrink:0;\n  }\n\n  .lower-grid{ display:grid; grid-template-columns:1.3fr 0.9fr; gap:16px; margin-top:18px; }\n\n  .section-head{\n    padding:16px 16px 10px;\n    display:flex; align-items:center; justify-content:space-between; gap:12px;\n  }\n  .section-head .title{\n    font-size:15px; font-weight:640; display:flex; gap:10px; align-items:center;\n  }\n  .section-body{ padding:0 16px 16px; }\n\n  .activity{\n    display:flex; justify-content:space-between;\n    gap:12px; padding:12px;\n    border-radius:14px; border:1px solid var(--border);\n    background:#fff; margin-top:10px;\n  }\n  .activity .left{ display:flex; gap:12px; align-items:flex-start; }\n  .doticon{\n    width:36px;height:36px; border-radius:14px;\n    background:rgba(34,197,94,0.10);\n    display:flex; align-items:center; justify-content:center;\n    color:var(--greenDark); flex-shrink:0;\n  }\n  .activity strong{ font-size:13px; font-weight:640; color:#111827; display:block; }\n  .activity .meta{ font-size:12px; color:var(--muted); margin-top:2px; line-height:1.5; }\n  .time{ font-size:12px; color:var(--muted); white-space:nowrap; }\n\n  .msg-item{\n    display:flex; gap:12px;\n    padding:12px; border-radius:14px;\n    border:1px solid var(--border);\n    background:#fff; margin-top:10px;\n    cursor:pointer; transition:.2s;\n  }\n  .msg-item:hover{ transform:translateY(-1px); }\n  .circle{\n    width:36px;height:36px; border-radius:999px;\n    background:rgba(34,197,94,0.12);\n    display:flex; align-items:center; justify-content:center;\n    color:var(--greenDark);\n    font-weight:750; font-size:12px;\n    flex-shrink:0;\n  }\n  .msg-item strong{ display:block; font-size:13px; font-weight:640; color:#111827; }\n  .msg-item .preview{ font-size:12px; color:var(--muted); margin-top:2px; line-height:1.4; }\n\n  \/* Tabs *\/\n  .topRow{ display:flex; align-items:flex-start; justify-content:space-between; gap:14px; flex-wrap:wrap; margin-top:8px; }\n  .tabs{ display:flex; gap:10px; flex-wrap:wrap; margin-top:16px; }\n  .tabs button{\n    border:1px solid var(--border);\n    background:#fff;\n    cursor:pointer;\n    padding:9px 12px;\n    border-radius:12px;\n    font-size:13px;\n    font-weight:550;\n    transition:.2s;\n  }\n  .tabs button.active{\n    background:rgba(34,197,94,0.10);\n    color:var(--greenDark);\n    border-color:rgba(34,197,94,0.22);\n    font-weight:680;\n  }\n  .tabs button:hover{ transform:translateY(-1px); }\n\n  \/* Offers grid *\/\n  .offer-grid{ display:grid; grid-template-columns:repeat(3, 1fr); gap:16px; margin-top:16px; }\n  .offer-card{\n    padding:16px; border-radius:14px;\n    border:1px solid var(--border);\n    background:#fff;\n    transition:.2s;\n    cursor:pointer;\n  }\n  .offer-card:hover{ transform:translateY(-2px); box-shadow:0 14px 40px rgba(15,23,42,0.08); }\n  .offer-head{ display:flex; align-items:flex-start; justify-content:space-between; gap:10px; }\n  .offer-title{ font-size:14px; font-weight:660; margin:0; color:#111827; line-height:1.25; }\n\n  .pill{\n    display:inline-flex; padding:5px 10px;\n    border-radius:999px;\n    font-size:11px;\n    font-weight:650;\n    border:1px solid var(--border);\n    background:#f8fafc;\n    color:#111827;\n    white-space:nowrap;\n  }\n  .pill.active{ background:rgba(34,197,94,0.10); color:var(--greenDark); border-color:rgba(34,197,94,0.22); }\n  .pill.ended{ background:#f1f5f9; color:#475569; border-color:#e2e8f0; }\n\n  .offer-meta{ margin-top:10px; display:grid; gap:8px; color:var(--muted); font-size:12.5px; }\n  .meta-line{ display:flex; align-items:center; gap:8px; }\n  .meta-line b{ color:#111827; font-weight:650; }\n\n  .progress{ margin-top:14px; border-top:1px solid var(--border); padding-top:12px; }\n  .progress-head{ display:flex; justify-content:space-between; font-size:12px; color:#475569; font-weight:550; }\n  .bar{ margin-top:8px; height:8px; background:#e5e7eb; border-radius:999px; overflow:hidden; }\n  .bar > div{ height:100%; background:linear-gradient(145deg, var(--green), var(--greenDark)); width:55%; }\n  .offer-foot{ margin-top:12px; display:flex; justify-content:space-between; gap:10px; color:#475569; font-size:12px; font-weight:550; }\n\n  \/* detail *\/\n  .detail-grid{ display:grid; grid-template-columns: 1.55fr 0.85fr; gap:16px; margin-top:16px; }\n  .backLink{\n    display:inline-flex; gap:8px; align-items:center; cursor:pointer;\n    color:#111827; text-decoration:none; font-size:13px; font-weight:550;\n  }\n  .alert{\n    margin-top:10px; padding:12px 14px;\n    border-radius:14px; background:var(--dangerSoft);\n    border:1px solid #fecaca; color:#7f1d1d;\n    font-size:13px; font-weight:550;\n    display:flex; gap:10px; align-items:center;\n  }\n  .imgBox{\n    margin-top:12px; border-radius:16px; overflow:hidden;\n    border:1px solid var(--border); background:#111827;\n  }\n  .imgBox .svgWrap{\n    width:100%; height:280px;\n    display:flex; align-items:center; justify-content:center;\n    background:#111827;\n  }\n  .infoCard{\n    margin-top:14px; padding:14px;\n    border:1px solid var(--border); border-radius:14px; background:#fff;\n  }\n  .infoCard .row{\n    display:flex; justify-content:space-between; gap:10px;\n    padding:10px 0; border-bottom:1px solid var(--border);\n    font-size:13px; color:#475569;\n  }\n  .infoCard .row:last-child{ border-bottom:none; }\n  .infoCard .row b{ color:#111827; font-weight:650; }\n\n  .sideCard{\n    padding:14px; border:1px solid var(--border);\n    border-radius:14px; background:#fff;\n  }\n  .sideCard h3{ margin:0; font-size:14px; font-weight:650; }\n  .priceLine{ display:flex; justify-content:space-between; gap:10px; margin-top:10px; font-size:13px; color:#475569; }\n  .priceLine b{ color:#111827; font-weight:650; }\n\n  \/* sales cards *\/\n  .saleCard{\n    display:grid; grid-template-columns: 0.9fr 1fr 0.7fr;\n    gap:14px; padding:16px; margin-top:14px;\n  }\n  .saleLeft{\n    background:#f3f4f6; border:1px solid var(--border);\n    border-radius:14px; padding:14px;\n  }\n  .saleLeft .big{ font-size:26px; font-weight:720; margin:0; }\n  .saleLeft .tiny{ margin-top:6px; font-size:12px; color:#475569; font-weight:550; }\n  .saleMid{ display:grid; gap:10px; }\n  .saleMid .line{ font-size:12.5px; color:#475569; }\n  .saleMid .line b{ color:#111827; font-weight:650; }\n  .saleRight{ display:flex; flex-direction:column; gap:10px; align-items:flex-end; justify-content:flex-start; }\n\n  .detailHeader{ display:flex; align-items:flex-start; justify-content:space-between; gap:14px; flex-wrap:wrap; margin-top:14px; }\n  .chipsTop{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; }\n  .chipTop{\n    display:inline-flex; align-items:center; gap:7px;\n    padding:7px 12px; border-radius:999px;\n    font-size:12px; font-weight:650;\n    border:1px solid var(--border);\n    background:#fff;\n    color:#111827;\n  }\n  .chipTop.paid{ background:rgba(34,197,94,0.12); border-color:rgba(34,197,94,0.25); color:var(--greenDark); }\n  .chipTop.ship{ background:var(--blueSoft); border-color:#bfdbfe; color:#1d4ed8; }\n  .chipTop.count{ background:#f1f5f9; border-color:#e2e8f0; color:#475569; }\n\n  .subTabs{\n    display:flex; gap:10px; flex-wrap:wrap;\n    margin-top:14px; padding:6px;\n    border:1px solid var(--border);\n    background:#fff; border-radius:14px; width:fit-content;\n  }\n  .subTabs button{\n    border:none; cursor:pointer; background:transparent;\n    padding:9px 12px; border-radius:12px;\n    font-size:13px; font-weight:550;\n    color:#111827; transition:.2s;\n    display:flex; align-items:center; gap:8px;\n  }\n  .subTabs button.active{ background:#f3f4f6; font-weight:680; }\n  .subTabs button:hover{ background:#f3f4f6; }\n\n  .msgGrid{ margin-top:16px; display:grid; grid-template-columns: 320px 1fr; gap:16px; }\n  .msgSidebar{ padding:12px; }\n  .msgSearch{\n    padding:10px 12px; border:1px solid var(--border);\n    border-radius:12px; width:100%; outline:none;\n    font-size:13px; background:#fff; font-weight:500;\n  }\n  .chatList{ margin-top:12px; border:1px solid var(--border); border-radius:14px; overflow:hidden; background:#fff; }\n  .chatItem{\n    padding:12px; border-bottom:1px solid var(--border);\n    display:flex; gap:10px; cursor:pointer; transition:.2s;\n    align-items:flex-start; background:#fff;\n  }\n  .chatItem:hover{ background:#f8fafc; }\n  .chatItem.active{ background:#e8efe9; }\n  .chatItem:last-child{ border-bottom:none; }\n  .chatAvatar{\n    width:38px; height:38px; border-radius:999px;\n    background:rgba(34,197,94,0.12);\n    display:flex; align-items:center; justify-content:center;\n    color:var(--greenDark); font-weight:800; font-size:12px;\n    flex-shrink:0; position:relative;\n  }\n  .chatAvatar .dotN{\n    position:absolute; top:-5px; right:-5px;\n    width:20px;height:20px; border-radius:999px;\n    background:var(--greenDark); color:#fff;\n    font-size:11px; font-weight:800;\n    display:flex; align-items:center; justify-content:center;\n    border:2px solid #fff;\n  }\n  .chatItem .name{\n    font-size:13px; font-weight:650; color:#111827;\n    display:flex; align-items:center; gap:8px;\n  }\n  .roleTag{\n    padding:4px 8px; border-radius:999px;\n    font-size:11px; font-weight:700;\n    border:1px solid var(--border);\n    background:#fff; color:#475569;\n  }\n  .roleTag.buyer{ background:var(--blueSoft); border-color:#bfdbfe; color:#1d4ed8; }\n  .roleTag.seller{ background:rgba(34,197,94,0.12); border-color:rgba(34,197,94,0.25); color:var(--greenDark); }\n  .roleTag.forwarder{ background:rgba(34,197,94,0.12); border-color:rgba(34,197,94,0.25); color:var(--greenDark); }\n  .roleTag.customs{ background:var(--warnSoft); border-color:#fed7aa; color:#b45309; }\n  .roleTag.support{ background:#f1f5f9; border-color:#e2e8f0; color:#475569; }\n  .chatItem .last{ font-size:12px; color:var(--muted); margin-top:4px; line-height:1.35; }\n\n  .chatMain{ display:flex; flex-direction:column; min-height:580px; overflow:hidden; }\n  .chatTop{\n    padding:14px; border-bottom:1px solid var(--border);\n    display:flex; align-items:center; justify-content:space-between;\n    gap:14px; background:#fff;\n  }\n  .chatTopLeft{ display:flex; align-items:center; gap:12px; }\n  .chatTopName{ font-weight:700; font-size:14px; display:flex; align-items:center; gap:8px; }\n  .chatBody{ padding:14px; flex:1; background:#fff; overflow:auto; }\n  .bubble{\n    max-width:70%;\n    padding:10px 12px;\n    border-radius:14px;\n    font-size:13px;\n    line-height:1.45;\n    margin-bottom:12px;\n    border:1px solid var(--border);\n  }\n  .bubble.left{ background:#f1f5f9; color:#111827; border-top-left-radius:6px; }\n  .bubble.right{ background:var(--greenDark); color:#fff; margin-left:auto; border:1px solid rgba(255,255,255,0.18); border-top-right-radius:6px; }\n  .btime{ font-size:11px; opacity:.8; margin-top:4px; }\n  .chatInputRow{\n    padding:12px; border-top:1px solid var(--border);\n    background:#fff; display:flex; gap:10px; align-items:center;\n  }\n  .chatInput{\n    flex:1; padding:12px 12px;\n    border:1px solid var(--border); border-radius:12px;\n    outline:none; font-size:13.5px;\n    font-weight:500; background:#fff;\n  }\n  .sendBtn{\n    width:42px;height:42px; border:none; cursor:pointer;\n    border-radius:12px; background:var(--greenDark);\n    color:#fff; font-size:16px;\n    display:flex; align-items:center; justify-content:center;\n    transition:.2s;\n  }\n  .sendBtn:hover{ background:#15803d; transform:translateY(-1px); }\n\n  \/* modal *\/\n  .modal-bg{\n    position:fixed; inset:0;\n    background:rgba(15,23,42,0.55);\n    display:flex; align-items:center; justify-content:center;\n    padding:16px; z-index:999999;\n  }\n  .modal{\n    width:100%; max-width:720px;\n    background:#fff;\n    border:1px solid var(--border);\n    border-radius:18px;\n    box-shadow:0 40px 90px rgba(0,0,0,0.22);\n    overflow:hidden;\n  }\n  .modalTop{\n    padding:16px;\n    border-bottom:1px solid var(--border);\n    display:flex; align-items:center; justify-content:space-between; gap:10px;\n  }\n  .modalBody{ padding:16px; }\n  .modalActions{\n    padding:16px; border-top:1px solid var(--border);\n    display:flex; justify-content:flex-end; gap:10px; flex-wrap:wrap;\n  }\n  .closeX{\n    width:36px;height:36px;border-radius:12px;\n    border:1px solid var(--border);\n    background:#fff; cursor:pointer;\n  }\n  .closeX:hover{ background:#f3f4f6; }\n\n  \/* \u2705 Dashboard Quick Buttons komplett weg (rote X im Screenshot) *\/\n  .dashQuick{ display:none !important; }\n\n  @media(max-width: 1100px){\n    .kpi-grid{ grid-template-columns:1fr; }\n    .lower-grid{ grid-template-columns:1fr; }\n    .offer-grid{ grid-template-columns:1fr; }\n    .detail-grid{ grid-template-columns:1fr; }\n    .saleCard{ grid-template-columns:1fr; }\n    .msgGrid{ grid-template-columns:1fr; }\n    .demoGrid{ grid-template-columns:1fr; }\n  }\n<\/style>\n\n<script>\n(function(){\n  const ROOT = document.getElementById(\"TSP_DUAL_DEMO_APP\");\n\n  \/* Inline SVG (unchanged) *\/\n  const TYRE_BALE_SVG = `\n    <svg viewBox=\"0 0 1200 500\" width=\"100%\" height=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n      <defs>\n        <linearGradient id=\"bg\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n          <stop offset=\"0\" stop-color=\"#0b1220\"\/>\n          <stop offset=\"1\" stop-color=\"#111827\"\/>\n        <\/linearGradient>\n        <radialGradient id=\"shine\" cx=\"40%\" cy=\"30%\" r=\"60%\">\n          <stop offset=\"0\" stop-color=\"rgba(255,255,255,0.18)\"\/>\n          <stop offset=\"1\" stop-color=\"rgba(255,255,255,0)\"\/>\n        <\/radialGradient>\n        <filter id=\"shadow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n          <feDropShadow dx=\"0\" dy=\"10\" stdDeviation=\"12\" flood-color=\"rgba(0,0,0,0.55)\"\/>\n        <\/filter>\n      <\/defs>\n\n      <rect width=\"1200\" height=\"500\" fill=\"url(#bg)\"\/>\n      <rect width=\"1200\" height=\"500\" fill=\"url(#shine)\" opacity=\"0.9\"\/>\n\n      <rect x=\"0\" y=\"410\" width=\"1200\" height=\"90\" fill=\"#0a0f1a\" opacity=\"0.8\"\/>\n      <rect x=\"0\" y=\"410\" width=\"1200\" height=\"2\" fill=\"rgba(255,255,255,0.1)\"\/>\n\n      <g filter=\"url(#shadow)\" opacity=\"0.97\">\n        ${makeTyreRow(140, 170, 7)}\n        ${makeTyreRow(170, 250, 7)}\n        ${makeTyreRow(200, 330, 7)}\n      <\/g>\n\n      <g opacity=\"0.95\">\n        <rect x=\"40\" y=\"28\" width=\"520\" height=\"60\" rx=\"14\" fill=\"rgba(255,255,255,0.08)\" stroke=\"rgba(255,255,255,0.12)\"\/>\n        <text x=\"70\" y=\"66\" fill=\"#fff\" font-size=\"22\" font-weight=\"700\" font-family=\"system-ui, -apple-system, Segoe UI, Roboto, Arial\">\n          Tyre Bale \u2022 Demo Listing Image\n        <\/text>\n      <\/g>\n    <\/svg>\n  `;\n\n  function makeTyreRow(startX, y, count){\n    let s = \"\";\n    for(let i=0;i<count;i++){\n      const x = startX + i*140;\n      s += tyre(x, y, 56);\n    }\n    return s;\n  }\n  function tyre(x, y, r){\n    return `\n      <g transform=\"translate(${x},${y})\">\n        <circle cx=\"0\" cy=\"0\" r=\"${r}\" fill=\"#0b0f18\" stroke=\"rgba(255,255,255,0.10)\" stroke-width=\"6\"\/>\n        <circle cx=\"0\" cy=\"0\" r=\"${r-12}\" fill=\"#111827\" stroke=\"rgba(255,255,255,0.08)\" stroke-width=\"8\"\/>\n        <circle cx=\"0\" cy=\"0\" r=\"${r-26}\" fill=\"#0b0f18\" stroke=\"rgba(255,255,255,0.08)\" stroke-width=\"6\"\/>\n        <circle cx=\"0\" cy=\"0\" r=\"${r-38}\" fill=\"#111827\" opacity=\"0.7\"\/>\n        <path d=\"M-${r-10} 0 Q 0 -${r-35} ${r-10} 0\" fill=\"none\" stroke=\"rgba(255,255,255,0.08)\" stroke-width=\"6\"\/>\n        <path d=\"M-${r-10} 0 Q 0 ${r-35} ${r-10} 0\" fill=\"none\" stroke=\"rgba(255,255,255,0.06)\" stroke-width=\"6\"\/>\n      <\/g>\n    `;\n  }\n\n  \/* \u2705 Fully translated strings (no German leftovers in EN mode) *\/\n  const T = {\n    de:{\n      startTitle:\"Demo starten\",\n      startText:\"W\u00e4hle zuerst die Sprache und starte danach die gew\u00fcnschte Demo.\",\n      demoOnly:\"Demo: Keine echten Zahlungen, kein Login \u2013 reine Pr\u00e4sentation.\",\n      chooseLang:\"Sprache w\u00e4hlen\",\n      buyerDemo:\"K\u00e4ufer Demo\",\n      sellerDemo:\"Verk\u00e4ufer Demo\",\n      buyerDesc:\"Marktplatz durchsuchen, Gebote abgeben, K\u00e4ufe & Dokumente ansehen.\",\n      sellerDesc:\"Angebote verwalten, Verk\u00e4ufe bearbeiten, Dokumente & Nachrichten nutzen.\",\n\n      dash:\"Dashboard\",\n      offersSeller:\"Angebote\",\n      offersBuyer:\"Marktplatz\",\n      salesSeller:\"Verk\u00e4ufe\",\n      salesBuyer:\"K\u00e4ufe\",\n      bids:\"Gebote\",\n      messages:\"Nachrichten\",\n      settings:\"Einstellungen\",\n\n      all:\"Alle\",\n      active:\"Aktiv\",\n      ended:\"Beendet\",\n\n      back:\"Zur\u00fcck zur \u00dcbersicht\",\n      notAvailable:\"Nicht mehr verf\u00fcgbar\",\n\n      seller:\"Verk\u00e4ufer\",\n      buyer:\"K\u00e4ufer\",\n      forwarder:\"Spediteur\",\n      customs:\"Zollagentur\",\n      support:\"Portal-Support\",\n\n      viewOffer:\"Angebot anzeigen\",\n      viewDetails:\"Details anzeigen\",\n\n      overview:\"\u00dcbersicht\",\n      loading:\"Verladung\",\n      documents:\"Dokumente\",\n\n      close:\"Schlie\u00dfen\",\n      demoClose:\"Demo schlie\u00dfen\",\n\n      placeBid:\"Gebot abgeben\",\n      submit:\"Absenden\",\n\n      rotateTitle:\"Bitte Smartphone drehen\",\n      rotateText:\"F\u00fcr die beste Ansicht wird die Demo im Querformat angezeigt.\",\n      rotateOk:\"Verstanden\",\n\n      dashSub:\"\u00dcbersicht \u00fcber Status, Aktivit\u00e4ten, Nachrichten und Aktionen.\",\n      recentActivity:\"Letzte Aktivit\u00e4ten\",\n      viewAll:\"Alle anzeigen\",\n      open:\"\u00d6ffnen\",\n\n      kpiSeller1:\"Aktive Angebote\",\n      kpiSeller2:\"Umsatz (30 Tage)\",\n      kpiSeller3:\"Verladungen\",\n\n      kpiBuyer1:\"Aktive Inserate\",\n      kpiBuyer2:\"Offene Gebote\",\n      kpiBuyer3:\"K\u00e4ufe\",\n\n      kpiSeller1sub:\"+2 diese Woche\",\n      kpiSeller2sub:\"+12% vs. Vormonat\",\n      kpiSeller3sub:\"l\u00e4uft aktuell\",\n\n      kpiBuyer1sub:\"3 neue heute\",\n      kpiBuyer2sub:\"1 gewonnen\",\n      kpiBuyer3sub:\"2 unterwegs\",\n\n      act1s:\"Verkauf #3 \u2013 Zahlung best\u00e4tigt\",\n      act1sMeta:\"4 Container \u2022 K\u00e4ufer: TireReborn Ltd.\",\n      act2s:\"Dokumente generiert\",\n      act2sMeta:\"Kaufvertrag + Rechnung \u2022 Verkauf #1\",\n      act3s:\"Spediteur hat Verladung best\u00e4tigt\",\n      act3sMeta:\"Termin 15.11 \u2022 Hafen Hamburg\",\n\n      act1b:\"Gebot aktualisiert\",\n      act1bMeta:\"Offer #3 \u2022 620\u20ac\/Container\",\n      act2b:\"Kauf #102 \u2013 Verladung l\u00e4uft\",\n      act2bMeta:\"7 Container \u2022 Spediteur SpeedLogistics\",\n      act3b:\"Dokumente verf\u00fcgbar\",\n      act3bMeta:\"Rechnung + Kaufvertrag \u2022 Kauf #101\",\n\n      ago1h:\"vor 1h\",\n      ago3h:\"vor 3h\",\n      ago30m:\"vor 30m\",\n      ago4h:\"vor 4h\",\n      yesterday:\"gestern\",\n\n      myOffers:\"Meine Angebote\",\n      myOffersSub:\"Verwalten Sie Ihre aktiven und vergangenen Angebote\",\n      newOffer:\"Neues Angebot erstellen\",\n\n      marketplaceSub:\"Durchsuchen Sie Inserate und geben Sie Gebote ab\",\n      myBids:\"Meine Gebote\",\n\n      bidsSub:\"\u00dcbersicht \u00fcber alle abgegebenen Gebote\",\n      purchasesSub:\"\u00dcbersicht \u00fcber deine K\u00e4ufe inkl. Dokumente & Verladungsstatus\",\n      salesSub:\"\u00dcbersicht aller Verk\u00e4ufe inkl. Dokumente & Verladungsstatus\",\n\n      search:\"Suchen\u2026\",\n      typeMsg:\"Nachricht eingeben\u2026\",\n      send:\"Senden\",\n\n      directChat:\"Direktchat im Portal\",\n\n      purchase:\"Kauf\",\n      sale:\"Verkauf\",\n\n      paymentReceived:\"Zahlung eingegangen\",\n      loadingRunning:\"Verladung l\u00e4uft\",\n      confirmed:\"Best\u00e4tigt\",\n      scheduled:\"geplant\",\n      pending:\"steht aus\",\n      inProgress:\"In Bearbeitung\",\n\n      docInfo:\"Dokumente werden automatisch generiert. Preview \u00f6ffnet PDF im neuen Tab \u2013 Download l\u00e4dt die Datei herunter.\",\n      generated:\"Generiert\",\n      generating:\"In Erstellung\",\n      pendingDoc:\"Ausstehend\",\n\n      purchaseContract:\"Kaufvertrag\",\n      commercialInvoice:\"Handelsrechnung\",\n      deliveryNote:\"Lieferschein\",\n      weighingReport:\"Wiegeprotokoll\",\n      cmr:\"CMR-Frachtbrief\",\n      exportDecl:\"Ausfuhranmeldung\",\n\n      modalInfo:\"Dies ist ein Demo-Gebot. In der echten Plattform werden danach automatisch Dokumente generiert.\",\n      demoBidSaved:\"Demo: Gebot wurde gespeichert.\",\n      demoForm:\"Demo: Hier w\u00fcrde sich ein Formular \u00f6ffnen.\",\n      demoEdit:\"Demo: Angebot bearbeiten.\",\n\n      sellerActionText:\"Als Verk\u00e4ufer k\u00f6nnen Sie hier sp\u00e4ter Angebote bearbeiten, Fristen \u00e4ndern und Dokumente verwalten.\",\n      editDemo:\"Bearbeiten (Demo)\",\n\n      buyerActionText:\"Geben Sie ein Gebot ab und w\u00e4hlen Sie optional Spedition & Zollagentur.\",\n      toMyBids:\"Zu meinen Geboten\",\n\n      from:\"Von\",\n      availableQty:\"Verf\u00fcgbare Menge\",\n      startPrice:\"Startpreis\",\n      deliveryTerms:\"Lieferbedingungen\",\n      nearestPort:\"N\u00e4chster Seehafen\",\n      availabilityDate:\"Verf\u00fcgbarkeitsdatum\",\n\n      forwarderPrices:\"Preise der Spediteure\",\n      submitted:\"Eingereicht\",\n      truckTransport:\"Transport per LKW\",\n      seaFreight:\"Transport per Schiff\",\n      weighingCosts:\"Wiegekosten\",\n\n      details:\"Details\",\n      location:\"Ort\",\n      status:\"Status\",\n      bidsLbl:\"Gebote\",\n      salesLbl:\"Verk\u00e4ufe\",\n\n      sold:\"Verkauft\",\n      of:\"von\",\n\n      listing:\"Inserat\",\n      yourBidPer:\"dein Gebot pro Container\",\n      pricePer:\"pro Container\",\n\n      purchaseDate:\"Kaufdatum\",\n      loadingDate:\"Verladedatum\",\n      purchaseNumber:\"Kaufnummer\",\n      saleNumber:\"Verkaufsnummer\",\n      quantity:\"Menge\",\n      buyerLbl:\"K\u00e4ufer\",\n      sellerLbl:\"Verk\u00e4ufer\",\n      forwarderLbl:\"Spediteur\",\n      customsLbl:\"Zollagentur\",\n      customsAgent:\"Zollagentur\",\n\n      date:\"Datum\",\n      loading:\"Verladung\",\n      appointment:\"Termin\",\n      truckAtGate:\"LKW an Rolltor\",\n      weighing:\"Wiegen\",\n      containersLoaded:\"Container verladen\",\n\n      openMarketplace:\"Marktplatz \u00f6ffnen\"\n    },\n\n    en:{\n      startTitle:\"Start demo\",\n      startText:\"Choose the language first, then start the demo role you want.\",\n      demoOnly:\"Demo only: no real payments, no login \u2013 presentation mode.\",\n      chooseLang:\"Choose language\",\n      buyerDemo:\"Buyer Demo\",\n      sellerDemo:\"Seller Demo\",\n      buyerDesc:\"Browse marketplace, place bids, view purchases & documents.\",\n      sellerDesc:\"Manage offers, handle sales, use documents & messages.\",\n\n      dash:\"Dashboard\",\n      offersSeller:\"Offers\",\n      offersBuyer:\"Marketplace\",\n      salesSeller:\"Sales\",\n      salesBuyer:\"Purchases\",\n      bids:\"Bids\",\n      messages:\"Messages\",\n      settings:\"Settings\",\n\n      all:\"All\",\n      active:\"Active\",\n      ended:\"Ended\",\n\n      back:\"Back to overview\",\n      notAvailable:\"No longer available\",\n\n      seller:\"Seller\",\n      buyer:\"Buyer\",\n      forwarder:\"Forwarder\",\n      customs:\"Customs Agent\",\n      support:\"Portal Support\",\n\n      viewOffer:\"View offer\",\n      viewDetails:\"Show details\",\n\n      overview:\"Overview\",\n      loading:\"Loading\",\n      documents:\"Documents\",\n\n      close:\"Close\",\n      demoClose:\"Close demo\",\n\n      placeBid:\"Place bid\",\n      submit:\"Submit\",\n\n      rotateTitle:\"Please rotate your phone\",\n      rotateText:\"For the best experience the demo is shown in landscape.\",\n      rotateOk:\"Continue\",\n\n      dashSub:\"Overview of status, activity, messages and actions.\",\n      recentActivity:\"Recent activity\",\n      viewAll:\"View all\",\n      open:\"Open\",\n\n      kpiSeller1:\"Active offers\",\n      kpiSeller2:\"Revenue (30 days)\",\n      kpiSeller3:\"Loadings\",\n\n      kpiBuyer1:\"Active listings\",\n      kpiBuyer2:\"Open bids\",\n      kpiBuyer3:\"Purchases\",\n\n      kpiSeller1sub:\"+2 this week\",\n      kpiSeller2sub:\"+12% vs. last month\",\n      kpiSeller3sub:\"in progress\",\n\n      kpiBuyer1sub:\"3 new today\",\n      kpiBuyer2sub:\"1 won\",\n      kpiBuyer3sub:\"2 on the way\",\n\n      act1s:\"Sale #3 \u2013 Payment confirmed\",\n      act1sMeta:\"4 containers \u2022 Buyer: TireReborn Ltd.\",\n      act2s:\"Documents generated\",\n      act2sMeta:\"Contract + invoice \u2022 Sale #1\",\n      act3s:\"Forwarder confirmed loading\",\n      act3sMeta:\"15 Nov \u2022 Port Hamburg\",\n\n      act1b:\"Bid updated\",\n      act1bMeta:\"Offer #3 \u2022 620\u20ac\/container\",\n      act2b:\"Purchase #102 \u2013 Loading in progress\",\n      act2bMeta:\"7 containers \u2022 Forwarder: SpeedLogistics\",\n      act3b:\"Documents available\",\n      act3bMeta:\"Invoice + contract \u2022 Purchase #101\",\n\n      ago1h:\"1h ago\",\n      ago3h:\"3h ago\",\n      ago30m:\"30m ago\",\n      ago4h:\"4h ago\",\n      yesterday:\"yesterday\",\n\n      myOffers:\"My offers\",\n      myOffersSub:\"Manage your active and past offers\",\n      newOffer:\"Create new offer\",\n\n      marketplaceSub:\"Browse listings and place bids\",\n      myBids:\"My bids\",\n\n      bidsSub:\"Overview of all bids you placed\",\n      purchasesSub:\"Overview of your purchases incl. documents & shipping status\",\n      salesSub:\"Overview of sales incl. documents & loading status\",\n\n      search:\"Search\u2026\",\n      typeMsg:\"Type a message\u2026\",\n      send:\"Send\",\n\n      directChat:\"In-portal direct chat\",\n\n      purchase:\"Purchase\",\n      sale:\"Sale\",\n\n      paymentReceived:\"Payment received\",\n      loadingRunning:\"Loading running\",\n      confirmed:\"Confirmed\",\n      scheduled:\"scheduled\",\n      pending:\"pending\",\n      inProgress:\"In progress\",\n\n      docInfo:\"Documents are generated automatically. Preview opens in a new tab \u2013 download saves the file.\",\n      generated:\"Generated\",\n      generating:\"Generating\",\n      pendingDoc:\"Pending\",\n\n      purchaseContract:\"Purchase contract\",\n      commercialInvoice:\"Commercial invoice\",\n      deliveryNote:\"Delivery note\",\n      weighingReport:\"Weighing report\",\n      cmr:\"CMR waybill\",\n      exportDecl:\"Export declaration\",\n\n      modalInfo:\"This is a demo bid. In the real platform documents are generated automatically afterwards.\",\n      demoBidSaved:\"Demo: Bid saved.\",\n      demoForm:\"Demo: A form would open here.\",\n      demoEdit:\"Demo: Edit offer.\",\n\n      sellerActionText:\"As seller, you will edit offers, manage deadlines and documents here.\",\n      editDemo:\"Edit (Demo)\",\n\n      buyerActionText:\"Place a bid and optionally choose forwarder & customs agent.\",\n      toMyBids:\"Go to my bids\",\n\n      from:\"From\",\n      availableQty:\"Available quantity\",\n      startPrice:\"Start price\",\n      deliveryTerms:\"Delivery terms\",\n      nearestPort:\"Nearest seaport\",\n      availabilityDate:\"Availability date\",\n\n      forwarderPrices:\"Forwarder prices\",\n      submitted:\"Submitted\",\n      truckTransport:\"Truck transport\",\n      seaFreight:\"Sea freight\",\n      weighingCosts:\"Weighing costs\",\n\n      details:\"Details\",\n      location:\"Location\",\n      status:\"Status\",\n      bidsLbl:\"Bids\",\n      salesLbl:\"Sales\",\n\n      sold:\"Sold\",\n      of:\"of\",\n\n      listing:\"Listing\",\n      yourBidPer:\"your bid per container\",\n      pricePer:\"per container\",\n\n      purchaseDate:\"Purchase date\",\n      loadingDate:\"Loading date\",\n      purchaseNumber:\"Purchase number\",\n      saleNumber:\"Sale #\",\n      quantity:\"Quantity\",\n      buyerLbl:\"Buyer\",\n      sellerLbl:\"Seller\",\n      forwarderLbl:\"Forwarder\",\n      customsLbl:\"Customs\",\n      customsAgent:\"Customs agent\",\n\n      date:\"Date\",\n      appointment:\"Appointment\",\n      truckAtGate:\"Truck at gate\",\n      weighing:\"Weighing\",\n      containersLoaded:\"Containers loaded\",\n\n      openMarketplace:\"Open marketplace\"\n    }\n  };\n\n  let lang = \"de\";\n  const state = {\n    mode:\"start\",\n    page:\"dashboard\",\n    offersTab:\"active\",\n    offerDetailId:1,\n    saleDetailId:1,\n    saleDetailTab:\"overview\",\n    chatId:1,\n    modal:null,\n    showRotate:false\n  };\n\n  const offers = [\n    {id:1,title:\"Pressed bales of Car tyres\",loc:\"Minden, Germany\",date:\"28.10.2025\",containers:4,bales:120,status:\"active\",sold:2,bids:3,sales:2,price:700,incoterm:\"EX Works\",port:\"Hamburg\"},\n    {id:2,title:\"Truck tire bales\",loc:\"Hamburg, Germany\",date:\"15.11.2025\",containers:2,bales:60,status:\"ended\",sold:2,bids:7,sales:2,price:820,incoterm:\"FOB\",port:\"Hamburg\"},\n    {id:3,title:\"Mixed tire bales\",loc:\"Berlin, Germany\",date:\"05.12.2025\",containers:6,bales:180,status:\"active\",sold:0,bids:5,sales:0,price:640,incoterm:\"EX Works\",port:\"Bremerhaven\"},\n    {id:4,title:\"Agricultural tire bales\",loc:\"Munich, Germany\",date:\"20.09.2025\",containers:3,bales:90,status:\"ended\",sold:3,bids:4,sales:3,price:760,incoterm:\"CIF\",port:\"Hamburg\"},\n    {id:5,title:\"SUV tire bales premium\",loc:\"Cologne, Germany\",date:\"10.01.2026\",containers:5,bales:150,status:\"active\",sold:3,bids:2,sales:3,price:890,incoterm:\"EX Works\",port:\"Hamburg\"},\n    {id:6,title:\"Winter tire bales\",loc:\"Frankfurt, Germany\",date:\"25.01.2026\",containers:4,bales:120,status:\"active\",sold:1,bids:6,sales:1,price:780,incoterm:\"FOB\",port:\"Bremerhaven\"},\n  ];\n\n  const sellerSales = [\n    {id:1,total:1500,per:750,fee:20,payout:1480,containers:2,buyer:\"GreenRecycle\",forwarder:\"EcoTransport\",customs:\"CustomsClear\",offerId:1},\n    {id:2,total:5600,per:800,fee:70,payout:5530,containers:7,buyer:\"AutoParts24\",forwarder:\"FairDeals\",customs:\"-\",offerId:2},\n    {id:3,total:2800,per:700,fee:40,payout:2760,containers:4,buyer:\"TireReborn Ltd.\",forwarder:\"Trans Europa GmbH\",customs:\"Zollservice Hamburg GmbH\",offerId:3},\n  ];\n\n  const buyerPurchases = [\n    {id:101,total:2800,per:700,fee:40,containers:4,seller:\"FairDeals GmbH\",forwarder:\"Trans Europa GmbH\",customs:\"Zollservice Hamburg GmbH\",offerId:1},\n    {id:102,total:5600,per:800,fee:70,containers:7,seller:\"RecyclePro AG\",forwarder:\"SpeedLogistics\",customs:\"ZollExpress\",offerId:2},\n    {id:103,total:1500,per:750,fee:20,containers:2,seller:\"GreenCycle GmbH\",forwarder:\"EcoTransport\",customs:\"CustomsClear\",offerId:6},\n  ];\n\n  const buyerBids = [\n    {id:201, offerId:1, offerTitle:\"Pressed bales of Car tyres\", myBid:680, containers:4, status:\"active\", time:\"1h\"},\n    {id:202, offerId:3, offerTitle:\"Mixed tire bales\", myBid:620, containers:6, status:\"active\", time:\"5h\"},\n    {id:203, offerId:6, offerTitle:\"Winter tire bales\", myBid:740, containers:2, status:\"won\", time:\"yesterday\"},\n    {id:204, offerId:2, offerTitle:\"Truck tire bales\", myBid:790, containers:2, status:\"lost\", time:\"last week\"},\n  ];\n\n  const chats = [\n    {id:1,name:\"FairDeals\",role:\"buyer\",badge:2,last:{de:\"K\u00f6nnen wir \u00fcber den Preis noch verhandeln?\",en:\"Can we negotiate the price?\"}},\n    {id:2,name:\"TireExport GmbH\",role:\"buyer\",badge:1,last:{de:\"Die Zahlung wurde heute morgen angewiesen.\",en:\"Payment was initiated this morning.\"}},\n    {id:3,name:\"SpeedLogistics\",role:\"forwarder\",badge:0,last:{de:\"Verladung am 18.12. um 08:00 Uhr best\u00e4tigt.\",en:\"Loading confirmed on Dec 18 at 08:00.\"}},\n    {id:4,name:\"ZollExpress\",role:\"customs\",badge:1,last:{de:\"Bitte laden Sie die Ursprungszeugnisse hoch.\",en:\"Please upload the certificates of origin.\"}},\n    {id:5,name:\"TireScrapPortal Support\",role:\"support\",badge:0,last:{de:\"Willkommen bei TireScrapPortal!\",en:\"Welcome to TireScrapPortal!\"}},\n  ];\n\n  function isMobile(){ return window.matchMedia(\"(max-width: 900px)\").matches; }\n  function isPortrait(){ return window.matchMedia(\"(orientation: portrait)\").matches; }\n\n  function render(){\n    if(state.mode===\"start\"){\n      ROOT.innerHTML = startScreen();\n      attachStartEvents();\n      return;\n    }\n\n    ROOT.innerHTML = `\n      ${nav()}\n      <div class=\"container\">\n        ${pageContent()}\n      <\/div>\n      ${state.modal ? modal() : \"\"}\n      ${state.showRotate ? rotateOverlay() : \"\"}\n    `;\n\n    attachNavEvents();\n    attachPageEvents();\n  }\n\n  \/* \u2705 Rotate Overlay (only continue button) *\/\n  function rotateOverlay(){\n    return `\n      <div class=\"rotateOverlay\" id=\"rotateOverlay\">\n        <div class=\"rotateBox\">\n          <div class=\"rotateTitle\">\ud83d\udd04 ${T[lang].rotateTitle}<\/div>\n          <div class=\"phoneAnimWrap\">\n            <div class=\"phoneAnim\"><\/div>\n          <\/div>\n          <div class=\"rotateText\">${T[lang].rotateText}<\/div>\n\n          <div class=\"rotateButtons\">\n            <button class=\"btn primary\" id=\"rotateOkBtn\">\u2705 ${T[lang].rotateOk}<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function handleOrientationChange(){\n  if(state.mode !== \"start\" && isMobile()){\n\n    \/\/ \u2705 Wenn Overlay bereits best\u00e4tigt wurde, nie wieder anzeigen (bis Reload)\n    const dismissed = sessionStorage.getItem(\"TSP_ROTATE_DISMISSED\") === \"1\";\n    if(dismissed){\n      state.showRotate = false;\n      return;\n    }\n\n    state.showRotate = isPortrait();\n    render();\n  }\n}\n\n  window.addEventListener(\"orientationchange\", ()=> setTimeout(handleOrientationChange, 250));\n  window.addEventListener(\"resize\", ()=> setTimeout(handleOrientationChange, 250));\n\n  function startScreen(){\n    return `\n      <div class=\"container startWrap\">\n        <div class=\"hero\">\n          <div class=\"heroInner\">\n            <div class=\"h2\">${T[lang].startTitle}<\/div>\n            <p style=\"margin-top:8px; font-size:14px; line-height:1.7; color:rgba(255,255,255,0.86);\">\n              ${T[lang].startText}<br\/>\n              <span style=\"opacity:.9\">${T[lang].demoOnly}<\/span>\n            <\/p>\n\n            <div class=\"langBox\">\n              <div style=\"font-weight:750;\">\ud83c\udf10 ${T[lang].chooseLang}<\/div>\n              <div class=\"langBtns\">\n                <button class=\"langPill ${lang===\"de\"?\"active\":\"\"}\" data-lang=\"de\">\ud83c\udde9\ud83c\uddea Deutsch<\/button>\n                <button class=\"langPill ${lang===\"en\"?\"active\":\"\"}\" data-lang=\"en\">\ud83c\uddec\ud83c\udde7 English<\/button>\n              <\/div>\n            <\/div>\n\n            <div class=\"demoGrid\">\n              <div class=\"demoCard\">\n                <h3>\ud83d\udc64 ${T[lang].buyerDemo}<\/h3>\n                <p>${T[lang].buyerDesc}<\/p>\n                <div class=\"demoActions\">\n                  <button class=\"btn primary\" id=\"startBuyer\">\u25b6 ${T[lang].buyerDemo}<\/button>\n                <\/div>\n              <\/div>\n\n              <div class=\"demoCard\">\n                <h3>\ud83c\udfed ${T[lang].sellerDemo}<\/h3>\n                <p>${T[lang].sellerDesc}<\/p>\n                <div class=\"demoActions\">\n                  <button class=\"btn primary\" id=\"startSeller\">\u25b6 ${T[lang].sellerDemo}<\/button>\n                <\/div>\n              <\/div>\n            <\/div>\n\n            <div style=\"margin-top:18px; font-size:12px; color:rgba(255,255,255,0.72); line-height:1.7;\">\n              <b>${lang===\"de\"?\"Hinweis\":\"Note\"}:<\/b> ${lang===\"de\"\n                ?\"Dies ist eine interaktive Demo f\u00fcr deine Website. Keine echten Daten, keine Zahlungen, kein Login.\"\n                :\"This is an interactive demo for your website. No real data, no payments, no login.\"}\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function attachStartEvents(){\n    ROOT.querySelectorAll(\"[data-lang]\").forEach(btn=>{\n      btn.addEventListener(\"click\", ()=>{\n        lang = btn.getAttribute(\"data-lang\");\n        render();\n      });\n    });\n\n    const startBuyer = document.getElementById(\"startBuyer\");\n    const startSeller = document.getElementById(\"startSeller\");\n    if(startBuyer) startBuyer.onclick = ()=> startDemo(\"buyer\");\n    if(startSeller) startSeller.onclick = ()=> startDemo(\"seller\");\n  }\n\n  function startDemo(which){\n    state.mode = which;\n    state.page = \"dashboard\";\n    state.offersTab = \"active\";\n    state.modal = null;\n\n    state.showRotate = isMobile() && isPortrait();\n    render();\n  }\n\n  function closeDemo(){\n    state.mode = \"start\";\n    state.page = \"dashboard\";\n    state.modal = null;\n    state.showRotate = false;\n    render();\n    window.scrollTo({top:0, behavior:\"smooth\"});\n  }\n\n  function nav(){\n    const isSeller = state.mode===\"seller\";\n    const tabs = isSeller ? `\n      ${navBtn(\"dashboard\",\"\ud83c\udfe0\",T[lang].dash)}\n      ${navBtn(\"offers\",\"\ud83d\udcc1\",T[lang].offersSeller)}\n      ${navBtn(\"sales\",\"\ud83d\uded2\",T[lang].salesSeller)}\n      ${navBtn(\"messages\",\"\ud83d\udcac\",T[lang].messages)}\n      ${navBtn(\"settings\",\"\u2699\ufe0f\",T[lang].settings)}\n    ` : `\n      ${navBtn(\"dashboard\",\"\ud83c\udfe0\",T[lang].dash)}\n      ${navBtn(\"market\",\"\ud83e\udde9\",T[lang].offersBuyer)}\n      ${navBtn(\"bids\",\"\ud83d\udd28\",T[lang].bids)}\n      ${navBtn(\"purchases\",\"\ud83d\uded2\",T[lang].salesBuyer)}\n      ${navBtn(\"messages\",\"\ud83d\udcac\",T[lang].messages)}\n      ${navBtn(\"settings\",\"\u2699\ufe0f\",T[lang].settings)}\n    `;\n\n    const role = isSeller ? T[lang].seller : T[lang].buyer;\n    const person = isSeller ? \"Max Mustermann\" : \"Alex Example\";\n    const initialsTxt = isSeller ? \"MM\" : \"AE\";\n\n    return `\n      <div class=\"nav\">\n        <div class=\"nav-inner\">\n          <!-- \u2705 small icon only -->\n          <div class=\"brand\" id=\"goHome\" title=\"Home\">\n            <div class=\"logo\">\u267b<\/div>\n          <\/div>\n\n          <!-- \u2705 Tabs (mobile in blue area) -->\n          <div class=\"nav-tabs\">${tabs}<\/div>\n\n          <!-- right cluster -->\n          <div class=\"nav-right\">\n            <button class=\"icon-btn\" data-goto=\"messages\" title=\"${T[lang].messages}\">\n              \ud83d\udcac <span class=\"badge\">3<\/span>\n            <\/button>\n            <button class=\"icon-btn\" id=\"langSwitch\" title=\"Switch language\">\ud83c\udf10<\/button>\n            <button class=\"btn danger\" id=\"closeDemoBtn\">\u2716 ${T[lang].demoClose}<\/button>\n\n            <div class=\"profile\">\n              <div class=\"avatar\">${initialsTxt}<\/div>\n              <div>\n                <div class=\"name\">${person}<\/div>\n                <div class=\"role\">${role}<\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function navBtn(key,icon,label){\n    const active = state.page===key ? \"active\" : \"\";\n    return `<button class=\"${active}\" data-goto=\"${key}\">${icon} ${label}<\/button>`;\n  }\n\n  function attachNavEvents(){\n    ROOT.querySelectorAll(\"[data-goto]\").forEach(el=>{\n      el.addEventListener(\"click\", ()=>{\n        state.page = el.getAttribute(\"data-goto\");\n        render();\n      });\n    });\n\n    const langSwitch = ROOT.querySelector(\"#langSwitch\");\n    if(langSwitch){\n      langSwitch.addEventListener(\"click\", ()=>{\n        lang = (lang===\"de\") ? \"en\" : \"de\";\n        render();\n      });\n    }\n\n    const closeDemoBtn = ROOT.querySelector(\"#closeDemoBtn\");\n    if(closeDemoBtn){\n      closeDemoBtn.addEventListener(\"click\", closeDemo);\n    }\n\n    const goHome = ROOT.querySelector(\"#goHome\");\n    if(goHome){\n      goHome.addEventListener(\"click\", ()=>{\n        state.page = \"dashboard\";\n        render();\n      });\n    }\n  }\n\n  \/* Pages *\/\n  function pageContent(){\n    if(state.page===\"dashboard\") return dashboard();\n    if(state.mode===\"seller\"){\n      if(state.page===\"offers\") return sellerOffers();\n      if(state.page===\"offerDetail\") return offerDetail(\"seller\");\n      if(state.page===\"sales\") return sellerSalesPage();\n      if(state.page===\"saleDetail\") return saleDetailPage(\"seller\");\n      if(state.page===\"messages\") return messagesPage();\n      if(state.page===\"settings\") return settingsPage();\n    } else {\n      if(state.page===\"market\") return buyerMarketplace();\n      if(state.page===\"offerDetail\") return offerDetail(\"buyer\");\n      if(state.page===\"bids\") return buyerBidsPage();\n      if(state.page===\"purchases\") return buyerPurchasesPage();\n      if(state.page===\"purchaseDetail\") return saleDetailPage(\"buyer\");\n      if(state.page===\"messages\") return messagesPage();\n      if(state.page===\"settings\") return settingsPage();\n    }\n    return `<div class=\"card\" style=\"padding:16px;\">Fallback<\/div>`;\n  }\n\n  \/* Dashboard *\/\n  function dashboard(){\n    const isSeller = state.mode===\"seller\";\n\n    const k1 = isSeller ? {label:T[lang].kpiSeller1,value:\"4\",sub:T[lang].kpiSeller1sub,icon:\"\ud83d\udcc1\"} : {label:T[lang].kpiBuyer1,value:\"18\",sub:T[lang].kpiBuyer1sub,icon:\"\ud83e\udde9\"};\n    const k2 = isSeller ? {label:T[lang].kpiSeller2,value:\"8,900\u20ac\",sub:T[lang].kpiSeller2sub,icon:\"\ud83d\udcb6\"} : {label:T[lang].kpiBuyer2,value:\"3\",sub:T[lang].kpiBuyer2sub,icon:\"\ud83d\udd28\"};\n    const k3 = isSeller ? {label:T[lang].kpiSeller3,value:\"2\/6\",sub:T[lang].kpiSeller3sub,icon:\"\ud83d\ude9a\"} : {label:T[lang].kpiBuyer3,value:\"3\",sub:T[lang].kpiBuyer3sub,icon:\"\ud83d\uded2\"};\n\n    const activities = isSeller ? [\n      {icon:\"\ud83d\uded2\",title:T[lang].act1s,meta:T[lang].act1sMeta,time:T[lang].ago1h},\n      {icon:\"\ud83d\udcc4\",title:T[lang].act2s,meta:T[lang].act2sMeta,time:T[lang].ago3h},\n      {icon:\"\ud83d\ude9a\",title:T[lang].act3s,meta:T[lang].act3sMeta,time:T[lang].yesterday},\n    ] : [\n      {icon:\"\ud83d\udd28\",title:T[lang].act1b,meta:T[lang].act1bMeta,time:T[lang].ago30m},\n      {icon:\"\ud83d\uded2\",title:T[lang].act2b,meta:T[lang].act2bMeta,time:T[lang].ago4h},\n      {icon:\"\ud83d\udcc4\",title:T[lang].act3b,meta:T[lang].act3bMeta,time:T[lang].yesterday},\n    ];\n\n    const msgs = [\n      {name:\"FairDeals\",preview:(lang===\"de\"?\"K\u00f6nnen wir \u00fcber den Preis noch verhandeln?\":\"Can we negotiate the price?\")},\n      {name:\"SpeedLogistics\",preview:(lang===\"de\"?\"Verladung am 18.12. um 08:00 Uhr best\u00e4tigt.\":\"Loading confirmed on Dec 18 at 08:00.\")},\n      {name:\"ZollExpress\",preview:(lang===\"de\"?\"Bitte laden Sie die Ursprungszeugnisse hoch.\":\"Please upload the certificates of origin.\")},\n    ];\n\n    return `\n      <div>\n        <div class=\"topRow\">\n          <div>\n            <h1 class=\"h1\">${T[lang].dash}<\/h1>\n            <p class=\"p\">${T[lang].dashSub}<\/p>\n          <\/div>\n\n          <!-- \u2705 removed (red crossed in screenshot) -->\n          <div class=\"btnRow dashQuick\"><\/div>\n        <\/div>\n\n        <div class=\"kpi-grid\">\n          ${kpiCard(k1.label,k1.value,k1.sub,k1.icon)}\n          ${kpiCard(k2.label,k2.value,k2.sub,k2.icon)}\n          ${kpiCard(k3.label,k3.value,k3.sub,k3.icon)}\n        <\/div>\n\n        <div class=\"lower-grid\">\n          <div class=\"card\">\n            <div class=\"section-head\">\n              <div class=\"title\">\ud83d\udccc ${T[lang].recentActivity}<\/div>\n              <button class=\"btn light\" data-goto=\"${isSeller?'sales':'purchases'}\">${T[lang].viewAll}<\/button>\n            <\/div>\n            <div class=\"section-body\">\n              ${activities.map(a=>activityItem(a.icon,a.title,a.meta,a.time)).join(\"\")}\n            <\/div>\n          <\/div>\n\n          <div class=\"card\">\n            <div class=\"section-head\">\n              <div class=\"title\">\ud83d\udcac ${T[lang].messages}<\/div>\n              <button class=\"btn light\" data-goto=\"messages\">${T[lang].open}<\/button>\n            <\/div>\n            <div class=\"section-body\">\n              ${msgs.map(m=>messageItem(m.name,m.preview)).join(\"\")}\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function kpiCard(label,value,sub,icon){\n    return `\n      <div class=\"card kpi\">\n        <div>\n          <div class=\"label\">${label}<\/div>\n          <div class=\"value\">${value}<\/div>\n          <div class=\"sub\">${sub}<\/div>\n        <\/div>\n        <div class=\"icon\">${icon}<\/div>\n      <\/div>\n    `;\n  }\n\n  function activityItem(icon,title,meta,time){\n    return `\n      <div class=\"activity\">\n        <div class=\"left\">\n          <div class=\"doticon\">${icon}<\/div>\n          <div>\n            <strong>${title}<\/strong>\n            <div class=\"meta\">${meta}<\/div>\n          <\/div>\n        <\/div>\n        <div class=\"time\">${time}<\/div>\n      <\/div>\n    `;\n  }\n\n  function messageItem(name,preview){\n    return `\n      <div class=\"msg-item\" data-goto=\"messages\">\n        <div class=\"circle\">${initials(name)}<\/div>\n        <div>\n          <strong>${name}<\/strong>\n          <div class=\"preview\">${preview}<\/div>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  \/* Seller Offers *\/\n  function sellerOffers(){\n    const filtered = offers.filter(o=>{\n      if(state.offersTab===\"all\") return true;\n      if(state.offersTab===\"active\") return o.status===\"active\";\n      if(state.offersTab===\"ended\") return o.status===\"ended\";\n      return true;\n    });\n\n    return `\n      <div>\n        <div class=\"topRow\">\n          <div>\n            <h1 class=\"h1\">${T[lang].myOffers}<\/h1>\n            <p class=\"p\">${T[lang].myOffersSub}<\/p>\n          <\/div>\n          <div class=\"btnRow\">\n            <button class=\"btn primary\" id=\"newOfferBtn\">\uff0b ${T[lang].newOffer}<\/button>\n          <\/div>\n        <\/div>\n\n        <div class=\"tabs\">\n          <button class=\"${state.offersTab===\"all\"?\"active\":\"\"}\" data-offerstab=\"all\">${T[lang].all}<\/button>\n          <button class=\"${state.offersTab===\"active\"?\"active\":\"\"}\" data-offerstab=\"active\">${T[lang].active}<\/button>\n          <button class=\"${state.offersTab===\"ended\"?\"active\":\"\"}\" data-offerstab=\"ended\">${T[lang].ended}<\/button>\n        <\/div>\n\n        <div class=\"offer-grid\">\n          ${filtered.map(o=>offerCard(o,\"seller\")).join(\"\")}\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  \/* Buyer Marketplace *\/\n  function buyerMarketplace(){\n    const filtered = offers.filter(o=>{\n      if(state.offersTab===\"all\") return true;\n      if(state.offersTab===\"active\") return o.status===\"active\";\n      if(state.offersTab===\"ended\") return o.status===\"ended\";\n      return true;\n    });\n\n    return `\n      <div>\n        <div class=\"topRow\">\n          <div>\n            <h1 class=\"h1\">${T[lang].offersBuyer}<\/h1>\n            <p class=\"p\">${T[lang].marketplaceSub}<\/p>\n          <\/div>\n          <div class=\"btnRow\">\n            <button class=\"btn light\" data-goto=\"bids\">\ud83d\udd28 ${T[lang].myBids}<\/button>\n          <\/div>\n        <\/div>\n\n        <div class=\"tabs\">\n          <button class=\"${state.offersTab===\"active\"?\"active\":\"\"}\" data-offerstab=\"active\">${T[lang].active}<\/button>\n          <button class=\"${state.offersTab===\"all\"?\"active\":\"\"}\" data-offerstab=\"all\">${T[lang].all}<\/button>\n          <button class=\"${state.offersTab===\"ended\"?\"active\":\"\"}\" data-offerstab=\"ended\">${T[lang].ended}<\/button>\n        <\/div>\n\n        <div class=\"offer-grid\">\n          ${filtered.map(o=>offerCard(o,\"buyer\")).join(\"\")}\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function offerCard(o, context){\n    const isBuyer = context===\"buyer\";\n    const pill = o.status===\"active\"\n      ? `<span class=\"pill active\">${T[lang].active}<\/span>`\n      : `<span class=\"pill ended\">${T[lang].ended}<\/span>`;\n\n    const progress = Math.round((o.sold\/o.containers)*100);\n    const w = `${Math.min(100, Math.max(0, progress))}%`;\n\n    return `\n      <div class=\"offer-card\" data-offerdetail=\"${o.id}\">\n        <div class=\"offer-head\">\n          <h3 class=\"offer-title\">${o.title}<\/h3>\n          ${pill}\n        <\/div>\n\n        <div class=\"offer-meta\">\n          <div class=\"meta-line\">\ud83d\udccd <span>${o.loc}<\/span><\/div>\n          <div class=\"meta-line\">\ud83d\udce6 <span><b>${o.containers}<\/b> ${lang===\"de\"?\"Container\":\"containers\"} \u2022 <b>${o.bales}<\/b> ${lang===\"de\"?\"Ballen\":\"bales\"}<\/span><\/div>\n          <div class=\"meta-line\">\ud83d\udcb6 <span>${T[lang].startPrice}: <b>${formatMoney(o.price)} \u20ac\/Container<\/b><\/span><\/div>\n          <div class=\"meta-line\">\ud83d\udcc5 <span>${lang===\"de\" ? \"Verf\u00fcgbar ab:\" : \"Available from:\"} <b>${o.date}<\/b><\/span><\/div>\n        <\/div>\n\n        <div class=\"progress\">\n          <div class=\"progress-head\">\n            <span>${T[lang].sold}<\/span>\n            <span><b>${o.sold}<\/b> ${T[lang].of} <b>${o.containers}<\/b><\/span>\n          <\/div>\n          <div class=\"bar\"><div style=\"width:${w}\"><\/div><\/div>\n        <\/div>\n\n        <div class=\"offer-foot\">\n          <div>\ud83d\udd28 ${T[lang].bidsLbl}: <b>${o.bids}<\/b><\/div>\n          <div>\ud83e\uddfe Incoterm: <b>${o.incoterm}<\/b><\/div>\n        <\/div>\n\n        ${isBuyer ? `\n          <div style=\"margin-top:12px; display:flex; gap:10px; flex-wrap:wrap;\">\n            <button class=\"btn primary\" data-bid=\"${o.id}\" style=\"flex:1;\">\ud83d\udd28 ${T[lang].placeBid}<\/button>\n            <button class=\"btn light\" data-open-offer=\"${o.id}\" style=\"flex:1;\">${T[lang].viewOffer}<\/button>\n          <\/div>\n        ` : ``}\n      <\/div>\n    `;\n  }\n\n  \/* Offer Detail *\/\n  function offerDetail(context){\n    const o = offers.find(x=>x.id===state.offerDetailId) || offers[0];\n    const ended = o.status===\"ended\";\n    const isBuyer = context===\"buyer\";\n\n    return `\n      <div>\n        <a class=\"backLink\" data-goto=\"${isBuyer?'market':'offers'}\">\u2190 ${T[lang].back}<\/a>\n        <h1 class=\"h1\" style=\"margin-top:10px;\">${o.title}<\/h1>\n\n        ${ended ? `<div class=\"alert\">\u26a0\ufe0f <b>${T[lang].notAvailable}<\/b><\/div>` : \"\"}\n\n        <div class=\"detail-grid\">\n          <div>\n            <div class=\"imgBox\">\n              <div class=\"svgWrap\">${TYRE_BALE_SVG}<\/div>\n            <\/div>\n\n            <div class=\"infoCard\">\n              <div class=\"row\"><span>${T[lang].from}<\/span><b>FairDeals GmbH<\/b><\/div>\n              <div class=\"row\"><span>${T[lang].availableQty}<\/span><b>${o.containers} ${lang===\"de\"?\"Container\":\"containers\"} \u2022 ${o.bales} ${lang===\"de\"?\"Ballen\":\"bales\"}<\/b><\/div>\n              <div class=\"row\"><span>${T[lang].startPrice}<\/span><b>${formatMoney(o.price)} \u20ac\/Container<\/b><\/div>\n              <div class=\"row\"><span>${T[lang].deliveryTerms}<\/span><b>${o.incoterm}<\/b><\/div>\n              <div class=\"row\"><span>${T[lang].nearestPort}<\/span><b>${o.port}<\/b><\/div>\n              <div class=\"row\"><span>${T[lang].availabilityDate}<\/span><b>${o.date}<\/b><\/div>\n            <\/div>\n          <\/div>\n\n          <div style=\"display:grid; gap:16px;\">\n            <div class=\"sideCard\">\n              <h3>${T[lang].forwarderPrices}<\/h3>\n              <div class=\"priceLine\"><span><b>Trans Europa<\/b><\/span><span class=\"pill active\" style=\"margin-left:0;\">${T[lang].submitted}<\/span><\/div>\n              <div class=\"priceLine\"><span>${T[lang].truckTransport}<\/span><b>111\u20ac<\/b><\/div>\n              <div class=\"priceLine\"><span>${T[lang].seaFreight}<\/span><b>222\u20ac<\/b><\/div>\n              <div class=\"priceLine\"><span>${T[lang].weighingCosts}<\/span><b>33\u20ac<\/b><\/div>\n            <\/div>\n\n            <div class=\"sideCard\">\n              <h3>${T[lang].details}<\/h3>\n              <div class=\"priceLine\"><span>${T[lang].location}<\/span><b>${o.loc}<\/b><\/div>\n              <div class=\"priceLine\"><span>${T[lang].bidsLbl}<\/span><b>${o.bids}<\/b><\/div>\n              <div class=\"priceLine\"><span>${T[lang].salesLbl}<\/span><b>${o.sales}<\/b><\/div>\n              <div class=\"priceLine\"><span>${T[lang].status}<\/span><b>${o.status===\"active\"?T[lang].active:T[lang].ended}<\/b><\/div>\n            <\/div>\n\n            ${isBuyer ? `\n              <div class=\"sideCard\">\n                <h3>${lang===\"de\" ? \"Aktion\" : \"Action\"}<\/h3>\n                <p class=\"p\" style=\"margin-top:8px;\">${T[lang].buyerActionText}<\/p>\n                <div style=\"margin-top:12px; display:flex; gap:10px; flex-wrap:wrap;\">\n                  <button class=\"btn primary\" data-bid=\"${o.id}\">\ud83d\udd28 ${T[lang].placeBid}<\/button>\n                  <button class=\"btn light\" data-goto=\"bids\">\ud83d\udccc ${T[lang].toMyBids}<\/button>\n                <\/div>\n              <\/div>\n            ` : `\n              <div class=\"sideCard\">\n                <h3>${lang===\"de\" ? \"Aktion\" : \"Action\"}<\/h3>\n                <p class=\"p\" style=\"margin-top:8px;\">${T[lang].sellerActionText}<\/p>\n                <div style=\"margin-top:12px;\">\n                  <button class=\"btn light\" id=\"sellerEditOffer\">${T[lang].editDemo}<\/button>\n                <\/div>\n              <\/div>\n            `}\n          <\/div>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  \/* Sales \/ Purchases *\/\n  function sellerSalesPage(){\n    return `\n      <div>\n        <h1 class=\"h1\">${T[lang].salesSeller}<\/h1>\n        <p class=\"p\">${T[lang].salesSub}<\/p>\n        ${sellerSales.map(s=>saleListCard(s)).join(\"\")}\n      <\/div>\n    `;\n  }\n\n  function buyerBidsPage(){\n    return `\n      <div>\n        <h1 class=\"h1\">${T[lang].bids}<\/h1>\n        <p class=\"p\">${T[lang].bidsSub}<\/p>\n        ${buyerBids.map(b=>buyerBidCard(b)).join(\"\")}\n      <\/div>\n    `;\n  }\n\n  function buyerPurchasesPage(){\n    return `\n      <div>\n        <h1 class=\"h1\">${T[lang].salesBuyer}<\/h1>\n        <p class=\"p\">${T[lang].purchasesSub}<\/p>\n        ${buyerPurchases.map(p=>purchaseCard(p)).join(\"\")}\n      <\/div>\n    `;\n  }\n\n  function saleListCard(s){\n    return `\n      <div class=\"card saleCard\">\n        <div class=\"saleLeft\">\n          <div class=\"big\">${formatMoney(s.total)}\u20ac<\/div>\n          <div class=\"tiny\">${formatMoney(s.per)}\u20ac ${T[lang].pricePer}<\/div>\n          <div class=\"small\" style=\"margin-top:12px;\">\n            ${T[lang].date}: 05.11.2025<br\/>\n            ${T[lang].loading}: 15.11.2025\n          <\/div>\n        <\/div>\n\n        <div class=\"saleMid\">\n          <div class=\"line\">${T[lang].saleNumber} <b>${s.id}<\/b><\/div>\n          <div class=\"line\">${T[lang].quantity} <b>${s.containers} ${lang===\"de\"?\"Container\":\"containers\"}<\/b><\/div>\n          <div class=\"line\">${T[lang].buyerLbl} <b>${s.buyer}<\/b><\/div>\n          <div class=\"line\">${T[lang].forwarderLbl} <b>${s.forwarder}<\/b><\/div>\n          <div class=\"line\">${T[lang].customsLbl} <b>${s.customs}<\/b><\/div>\n        <\/div>\n\n        <div class=\"saleRight\">\n          <button class=\"btn primary\" data-saledetail=\"${s.id}\">${T[lang].viewDetails}<\/button>\n          <button class=\"btn light\" data-open-offer=\"${s.offerId}\">${T[lang].viewOffer}<\/button>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function buyerBidCard(b){\n    const offer = offers.find(o=>o.id===b.offerId) || offers[0];\n    return `\n      <div class=\"card saleCard\">\n        <div class=\"saleLeft\">\n          <div class=\"big\">${formatMoney(b.myBid)}\u20ac<\/div>\n          <div class=\"tiny\">${T[lang].yourBidPer}<\/div>\n          <div class=\"small\" style=\"margin-top:12px;\">\n            ${T[lang].listing}: <b>#${offer.id}<\/b><br\/>\n            ${T[lang].location}: <b>${offer.loc}<\/b>\n          <\/div>\n        <\/div>\n\n        <div class=\"saleMid\">\n          <div class=\"line\"><b>${b.offerTitle}<\/b><\/div>\n          <div class=\"line\">${lang===\"de\"?\"Ballen\":\"Bales\"}: <b>${offer.bales}<\/b><\/div>\n          <div class=\"line\">Incoterm: <b>${offer.incoterm}<\/b><\/div>\n          <div class=\"line\">${T[lang].nearestPort}: <b>${offer.port}<\/b><\/div>\n        <\/div>\n\n        <div class=\"saleRight\">\n          <button class=\"btn primary\" data-open-offer=\"${offer.id}\">${T[lang].viewOffer}<\/button>\n          <button class=\"btn light\" data-bid=\"${offer.id}\">${T[lang].placeBid}<\/button>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function purchaseCard(p){\n    return `\n      <div class=\"card saleCard\">\n        <div class=\"saleLeft\">\n          <div class=\"big\">${formatMoney(p.total)}\u20ac<\/div>\n          <div class=\"tiny\">${formatMoney(p.per)}\u20ac ${T[lang].pricePer}<\/div>\n          <div class=\"small\" style=\"margin-top:12px;\">\n            ${T[lang].purchaseDate}: <b>05.11.2025<\/b><br\/>\n            ${T[lang].loadingDate}: <b>15.11.2025<\/b>\n          <\/div>\n        <\/div>\n\n        <div class=\"saleMid\">\n          <div class=\"line\">${T[lang].purchaseNumber} <b>${p.id}<\/b><\/div>\n          <div class=\"line\">${T[lang].quantity} <b>${p.containers} ${lang===\"de\"?\"Container\":\"containers\"}<\/b><\/div>\n          <div class=\"line\">${T[lang].sellerLbl} <b>${p.seller}<\/b><\/div>\n          <div class=\"line\">${T[lang].forwarderLbl} <b>${p.forwarder}<\/b><\/div>\n          <div class=\"line\">${T[lang].customsAgent} <b>${p.customs}<\/b><\/div>\n        <\/div>\n\n        <div class=\"saleRight\">\n          <button class=\"btn primary\" data-purchase-detail=\"${p.id}\">${T[lang].viewDetails}<\/button>\n          <button class=\"btn light\" data-open-offer=\"${p.offerId}\">${T[lang].viewOffer}<\/button>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  \/* Sale Detail *\/\n  function saleDetailPage(context){\n    const isBuyer = context===\"buyer\";\n    const record = isBuyer\n      ? buyerPurchases.find(x=>x.id===state.saleDetailId) || buyerPurchases[0]\n      : sellerSales.find(x=>x.id===state.saleDetailId) || sellerSales[0];\n\n    const titlePrefix = isBuyer ? T[lang].purchase : T[lang].sale;\n\n    return `\n      <div>\n        <a class=\"backLink\" data-goto=\"${isBuyer?'purchases':'sales'}\">\u2190 ${T[lang].back}<\/a>\n\n        <div class=\"detailHeader\">\n          <div>\n            <h1 class=\"h1\">${titlePrefix} #${record.id}<\/h1>\n            <p class=\"p\">${lang===\"de\" ? \"Reifenballen \u2013 Premium (Demo)\" : \"Tyre bales \u2013 premium (demo)\"}<\/p>\n\n            <div class=\"subTabs\">\n              <button class=\"${state.saleDetailTab==='overview'?'active':''}\" data-saletab=\"overview\">\ud83d\udcc4 ${T[lang].overview}<\/button>\n              <button class=\"${state.saleDetailTab==='loading'?'active':''}\" data-saletab=\"loading\">\ud83d\ude9a ${T[lang].loading}<\/button>\n              <button class=\"${state.saleDetailTab==='docs'?'active':''}\" data-saletab=\"docs\">\ud83d\udcd1 ${T[lang].documents}<\/button>\n            <\/div>\n          <\/div>\n\n          <div class=\"chipsTop\">\n            <span class=\"chipTop paid\">\u2705 ${T[lang].paymentReceived}<\/span>\n            <span class=\"chipTop.ship\">\ud83d\ude9a ${T[lang].loadingRunning}<\/span>\n            <span class=\"chipTop.count\">\ud83d\udce6 2\/6<\/span>\n          <\/div>\n        <\/div>\n\n        ${saleDetailTabContent(record)}\n      <\/div>\n    `;\n  }\n\n  function saleDetailTabContent(r){\n    if(state.saleDetailTab===\"overview\"){\n      return `\n        <div class=\"card\" style=\"padding:16px;margin-top:16px;\">\n          <div class=\"h2\">${T[lang].overview}<\/div>\n          <p class=\"p\" style=\"margin-top:8px;\">\n            ${lang===\"de\"\n              ?\"Hier siehst du alle Details zum Verkauf\/Kauf: Beteiligte, Betr\u00e4ge, Ablauf und Status.\"\n              :\"Here you can see all details: parties involved, amounts, workflow and status.\"}\n          <\/p>\n\n          <div class=\"infoCard\">\n            <div class=\"row\"><span>${lang===\"de\"?\"Gesamtbetrag\":\"Total\"}<\/span><b>${formatMoney(r.total)}\u20ac<\/b><\/div>\n            <div class=\"row\"><span>${lang===\"de\"?\"Preis\/Container\":\"Price\/container\"}<\/span><b>${formatMoney(r.per)}\u20ac<\/b><\/div>\n            <div class=\"row\"><span>${lang===\"de\"?\"Service Fee\":\"Service fee\"}<\/span><b>${formatMoney(r.fee)}\u20ac<\/b><\/div>\n            <div class=\"row\"><span>${lang===\"de\"?\"Container\":\"Containers\"}<\/span><b>${r.containers}<\/b><\/div>\n            <div class=\"row\"><span>${T[lang].loading}<\/span><b>${T[lang].inProgress}<\/b><\/div>\n          <\/div>\n        <\/div>\n      `;\n    }\n\n    if(state.saleDetailTab===\"loading\"){\n      return `\n        <div class=\"card\" style=\"padding:16px;margin-top:16px;\">\n          <div class=\"h2\">${T[lang].loading}<\/div>\n          <p class=\"p\" style=\"margin-top:8px;\">\n            ${lang===\"de\"\n              ?\"Hier siehst du Timeline, Status und Termine zur Container-Verladung.\"\n              :\"Here you see the loading timeline, status and appointments.\"}\n          <\/p>\n\n          <div class=\"infoCard\">\n            <div class=\"row\"><span>\u2705 ${lang===\"de\"?\"Zahlung\":\"Payment\"}<\/span><b>${T[lang].confirmed}<\/b><\/div>\n            <div class=\"row\"><span>\ud83d\udcc5 ${T[lang].appointment}<\/span><b>15.11.2025 \u2022 08:00<\/b><\/div>\n            <div class=\"row\"><span>\ud83d\ude9b ${T[lang].truckAtGate}<\/span><b>${T[lang].scheduled}<\/b><\/div>\n            <div class=\"row\"><span>\u2696 ${T[lang].weighing}<\/span><b>${T[lang].pending}<\/b><\/div>\n            <div class=\"row\"><span>\ud83d\udce6 ${T[lang].containersLoaded}<\/span><b>2\/6<\/b><\/div>\n          <\/div>\n        <\/div>\n      `;\n    }\n\n    return `\n      <div class=\"card\" style=\"padding:16px;margin-top:16px;\">\n        <div class=\"h2\">\ud83d\udcd1 ${T[lang].documents}<\/div>\n        <p class=\"p\" style=\"margin-top:8px;\">\n          ${T[lang].docInfo}\n        <\/p>\n\n        <div style=\"margin-top:14px; display:grid; gap:12px;\">\n          ${docItem(T[lang].purchaseContract,\"05.11.2025\",\"gen\")}\n          ${docItem(T[lang].commercialInvoice,\"05.11.2025\",\"gen\")}\n          ${docItem(T[lang].deliveryNote,\"\u2014\",\"build\")}\n          ${docItem(T[lang].weighingReport,\"\u2014\",\"wait\")}\n          ${docItem(T[lang].cmr,\"\u2014\",\"wait\")}\n          ${docItem(T[lang].exportDecl,\"\u2014\",\"wait\")}\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function docItem(name,date,status){\n    const pill = status===\"gen\"\n      ? `<span class=\"pill active\" style=\"margin-left:0;\">${T[lang].generated}<\/span>`\n      : status===\"build\"\n        ? `<span class=\"pill\" style=\"margin-left:0;background:var(--blueSoft);border-color:#bfdbfe;color:#1d4ed8;\">${T[lang].generating}<\/span>`\n        : `<span class=\"pill ended\" style=\"margin-left:0;\">${T[lang].pendingDoc}<\/span>`;\n\n    const disabled = status !== \"gen\" ? \"disabled\" : \"\";\n    const opacity = status !== \"gen\" ? \"opacity:.4; pointer-events:none;\" : \"\";\n\n    return `\n      <div style=\"padding:12px; border:1px solid var(--border); border-radius:14px; background:#f8fafc; display:flex; align-items:center; justify-content:space-between; gap:12px;\">\n        <div style=\"display:flex; align-items:center; gap:10px; font-size:13px; color:#111827; font-weight:650;\">\n          \ud83d\udcc4\n          <div>\n            <div>${name}<\/div>\n            <div class=\"small\">${date}<\/div>\n          <\/div>\n        <\/div>\n\n        <div style=\"display:flex; align-items:center; gap:10px; justify-content:flex-end; min-width:140px;\">\n          ${pill}\n          <button class=\"icon-btn docPreview\" data-doc=\"${name}\" style=\"width:32px;height:32px; ${opacity}\" ${disabled} title=\"Preview\">\ud83d\udc41<\/button>\n          <button class=\"icon-btn docDownload\" data-doc=\"${name}\" style=\"width:32px;height:32px; ${opacity}\" ${disabled} title=\"Download\">\u2b07<\/button>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function messagesPage(){\n    const activeChat = chats.find(c=>c.id===state.chatId) || chats[0];\n    const lastText = activeChat.last ? activeChat.last[lang] : \"\";\n\n    return `\n      <div>\n        <h1 class=\"h1\">${T[lang].messages}<\/h1>\n\n        <div class=\"msgGrid\">\n          <div class=\"card msgSidebar\">\n            <input class=\"msgSearch\" placeholder=\"${T[lang].search}\" \/>\n            <div class=\"chatList\">\n              ${chats.map(c=>chatListItem(c)).join(\"\")}\n            <\/div>\n          <\/div>\n\n          <div class=\"card chatMain\">\n            <div class=\"chatTop\">\n              <div class=\"chatTopLeft\">\n                <div class=\"chatAvatar\" style=\"width:42px;height:42px;\">${initials(activeChat.name)}<\/div>\n                <div>\n                  <div class=\"chatTopName\">${activeChat.name}\n                    <span class=\"roleTag ${activeChat.role}\">${roleLabel(activeChat.role)}<\/span>\n                  <\/div>\n                  <div class=\"small\">${T[lang].directChat}<\/div>\n                <\/div>\n              <\/div>\n              <div style=\"display:flex; gap:10px; flex-wrap:wrap;\">\n                <button class=\"btn light\" data-goto=\"${state.mode==='buyer'?'market':'offers'}\">\u2197 ${T[lang].viewOffer}<\/button>\n                <button class=\"btn light\" data-goto=\"dashboard\">\ud83c\udfe0 ${T[lang].dash}<\/button>\n              <\/div>\n            <\/div>\n\n            <div class=\"chatBody\">\n              <div class=\"bubble left\">\n                ${lang===\"de\"?\"Hallo, ich interessiere mich f\u00fcr Ihr Angebot an Reifenballen.\":\"Hello, I\u2019m interested in your tyre bales offer.\"}\n                <div class=\"btime\">09:15<\/div>\n              <\/div>\n              <div class=\"bubble right\">\n                ${lang===\"de\"?\"Guten Tag! Ja, das Angebot ist noch verf\u00fcgbar. Was m\u00f6chten Sie wissen?\":\"Hello! Yes, the offer is still available. What would you like to know?\"}\n                <div class=\"btime\">09:20<\/div>\n              <\/div>\n            <\/div>\n\n            <div class=\"chatInputRow\">\n              <input class=\"chatInput\" placeholder=\"${T[lang].typeMsg}\" \/>\n              <button class=\"sendBtn\" title=\"${T[lang].send}\">\u27a4<\/button>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function chatListItem(c){\n    const active = c.id===state.chatId ? \"active\" : \"\";\n    const badge = c.badge>0 ? `<div class=\"dotN\">${c.badge}<\/div>` : \"\";\n    const lastText = c.last ? c.last[lang] : \"\";\n    return `\n      <div class=\"chatItem ${active}\" data-chat=\"${c.id}\">\n        <div class=\"chatAvatar\">${initials(c.name)}${badge}<\/div>\n        <div style=\"flex:1;\">\n          <div class=\"name\">${c.name} <span class=\"roleTag ${c.role}\">${roleLabel(c.role)}<\/span><\/div>\n          <div class=\"last\">${lastText}<\/div>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function settingsPage(){\n    return `\n      <div>\n        <h1 class=\"h1\">${T[lang].settings}<\/h1>\n        <p class=\"p\">${lang===\"de\"\n          ?\"Demo-Einstellungen \u2013 hier k\u00f6nnen sp\u00e4ter echte Profile, Bankdaten, Rollen usw. gepflegt werden.\"\n          :\"Demo settings \u2013 later you can store real profile, bank details, roles etc.\"}<\/p>\n\n        <div class=\"card\" style=\"margin-top:16px;padding:16px;\">\n          \u2705 ${lang===\"de\"?\"Diese Seite ist als Demo vollst\u00e4ndig integriert.\":\"This page is fully integrated in the demo.\"}\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  \/* Modal *\/\n  function modal(){\n    const offer = offers.find(o=>o.id===state.modal.offerId) || offers[0];\n    return `\n      <div class=\"modal-bg\" id=\"modalBg\">\n        <div class=\"modal\">\n          <div class=\"modalTop\">\n            <div>\n              <div style=\"font-weight:800;\">\ud83d\udd28 ${T[lang].placeBid}<\/div>\n              <div class=\"small\">${offer.title} \u2022 ${offer.loc}<\/div>\n            <\/div>\n            <button class=\"closeX\" id=\"closeModal\">\u2715<\/button>\n          <\/div>\n\n          <div class=\"modalBody\">\n            <p class=\"p\">${T[lang].modalInfo}<\/p>\n            <div style=\"margin-top:12px;\">\n              <button class=\"btn primary\" id=\"submitBid\">\u2705 ${T[lang].submit}<\/button>\n            <\/div>\n          <\/div>\n\n          <div class=\"modalActions\">\n            <button class=\"btn light\" id=\"cancelBid\">${T[lang].close}<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  \/* Events *\/\n  function attachPageEvents(){\n    const rotateOkBtn = ROOT.querySelector(\"#rotateOkBtn\");\nif(rotateOkBtn){\n  rotateOkBtn.onclick = ()=>{\n    \/\/ \u2705 merken: User hat Overlay best\u00e4tigt \u2192 nicht wieder zeigen\n    sessionStorage.setItem(\"TSP_ROTATE_DISMISSED\", \"1\");\n    state.showRotate = false;\n    render();\n  };\n}\n\n\n    ROOT.querySelectorAll(\"[data-offerstab]\").forEach(btn=>{\n      btn.addEventListener(\"click\", ()=>{\n        state.offersTab = btn.getAttribute(\"data-offerstab\");\n        render();\n      });\n    });\n\n    ROOT.querySelectorAll(\"[data-offerdetail]\").forEach(card=>{\n      card.addEventListener(\"click\", (e)=>{\n        const target = e.target;\n        if(target && target.closest && target.closest(\"[data-bid]\")) return;\n        if(target && target.closest && target.closest(\"[data-open-offer]\")) return;\n        state.offerDetailId = Number(card.getAttribute(\"data-offerdetail\"));\n        state.page = \"offerDetail\";\n        render();\n      });\n    });\n\n    ROOT.querySelectorAll(\"[data-open-offer]\").forEach(btn=>{\n      btn.addEventListener(\"click\", (e)=>{\n        e.stopPropagation();\n        state.offerDetailId = Number(btn.getAttribute(\"data-open-offer\"));\n        state.page = \"offerDetail\";\n        render();\n      });\n    });\n\n    ROOT.querySelectorAll(\"[data-bid]\").forEach(btn=>{\n      btn.addEventListener(\"click\", (e)=>{\n        e.stopPropagation();\n        state.modal = {type:\"bid\", offerId: Number(btn.getAttribute(\"data-bid\"))};\n        render();\n      });\n    });\n\n    ROOT.querySelectorAll(\"[data-saledetail]\").forEach(btn=>{\n      btn.addEventListener(\"click\", ()=>{\n        state.saleDetailId = Number(btn.getAttribute(\"data-saledetail\"));\n        state.page = \"saleDetail\";\n        state.saleDetailTab = \"docs\";\n        render();\n      });\n    });\n\n    ROOT.querySelectorAll(\"[data-purchase-detail]\").forEach(btn=>{\n      btn.addEventListener(\"click\", ()=>{\n        state.saleDetailId = Number(btn.getAttribute(\"data-purchase-detail\"));\n        state.page = \"purchaseDetail\";\n        state.saleDetailTab = \"docs\";\n        render();\n      });\n    });\n\n    ROOT.querySelectorAll(\"[data-saletab]\").forEach(btn=>{\n      btn.addEventListener(\"click\", ()=>{\n        state.saleDetailTab = btn.getAttribute(\"data-saletab\");\n        render();\n      });\n    });\n\n    ROOT.querySelectorAll(\"[data-chat]\").forEach(item=>{\n      item.addEventListener(\"click\", ()=>{\n        state.chatId = Number(item.getAttribute(\"data-chat\"));\n        render();\n      });\n    });\n\n    const closeModal = ROOT.querySelector(\"#closeModal\");\n    const cancelBid = ROOT.querySelector(\"#cancelBid\");\n    const submitBid = ROOT.querySelector(\"#submitBid\");\n    const modalBg = ROOT.querySelector(\"#modalBg\");\n\n    if(closeModal) closeModal.onclick = ()=>{ state.modal=null; render(); };\n    if(cancelBid) cancelBid.onclick = ()=>{ state.modal=null; render(); };\n    if(modalBg) modalBg.onclick = (e)=>{ if(e.target.id===\"modalBg\"){ state.modal=null; render(); } };\n\n    if(submitBid) submitBid.onclick = ()=>{\n      alert(T[lang].demoBidSaved);\n      state.modal=null;\n      state.page = \"bids\";\n      render();\n    };\n\n    ROOT.querySelectorAll(\".docDownload\").forEach(btn=>{\n      btn.addEventListener(\"click\", ()=>{\n        const docName = btn.getAttribute(\"data-doc\");\n        downloadDemoPDF(docName, false);\n      });\n    });\n\n    ROOT.querySelectorAll(\".docPreview\").forEach(btn=>{\n      btn.addEventListener(\"click\", ()=>{\n        const docName = btn.getAttribute(\"data-doc\");\n        downloadDemoPDF(docName, true);\n      });\n    });\n\n    const newOfferBtn = ROOT.querySelector(\"#newOfferBtn\");\n    if(newOfferBtn){\n      newOfferBtn.addEventListener(\"click\", ()=>{\n        alert(T[lang].demoForm);\n      });\n    }\n\n    const sellerEditOffer = ROOT.querySelector(\"#sellerEditOffer\");\n    if(sellerEditOffer){\n      sellerEditOffer.addEventListener(\"click\", ()=>{\n        alert(T[lang].demoEdit);\n      });\n    }\n  }\n\n  \/* Helpers *\/\n  function formatMoney(n){\n    return (Math.round(Number(n))).toLocaleString(lang===\"de\"?\"de-DE\":\"en-GB\");\n  }\n  function initials(name){\n    const parts = (name||\"\").split(\" \");\n    const a = parts[0]?.[0] || \"T\";\n    const b = parts[1]?.[0] || parts[0]?.[1] || \"S\";\n    return (a+b).toUpperCase();\n  }\n  function roleLabel(role){\n    if(role===\"buyer\") return T[lang].buyer;\n    if(role===\"seller\") return T[lang].seller;\n    if(role===\"forwarder\") return T[lang].forwarder;\n    if(role===\"customs\") return T[lang].customs;\n    if(role===\"support\") return T[lang].support;\n    return role;\n  }\n\n  \/* PDF Generator *\/\n  function downloadDemoPDF(docName, preview=false){\n    const safe = (docName||\"Document\").replace(\/[()]\/g, \"\");\n    const content = `%PDF-1.4\n1 0 obj\n<< \/Type \/Catalog \/Pages 2 0 R >>\nendobj\n2 0 obj\n<< \/Type \/Pages \/Kids [3 0 R] \/Count 1 >>\nendobj\n3 0 obj\n<< \/Type \/Page \/Parent 2 0 R \/MediaBox [0 0 595 842] \/Contents 4 0 R \/Resources << \/Font << \/F1 5 0 R >> >> >>\nendobj\n4 0 obj\n<< \/Length 240 >>\nstream\nBT\n\/F1 18 Tf\n72 770 Td\n(${safe}) Tj\n0 -30 Td\n\/F1 12 Tf\n(Demo PDF generated by TyreScrapPortal) Tj\n0 -20 Td\n(Date: ${new Date().toLocaleDateString()}) Tj\n0 -20 Td\n(This is a demo document for website presentation.) Tj\nET\nendstream\nendobj\n5 0 obj\n<< \/Type \/Font \/Subtype \/Type1 \/BaseFont \/Helvetica >>\nendobj\nxref\n0 6\n0000000000 65535 f\n0000000010 00000 n\n0000000067 00000 n\n0000000125 00000 n\n0000000252 00000 n\n0000000530 00000 n\ntrailer\n<< \/Root 1 0 R \/Size 6 >>\nstartxref\n610\n%%EOF`;\n\n    const blob = new Blob([content], {type:\"application\/pdf\"});\n    const url = URL.createObjectURL(blob);\n\n    if(preview){\n      window.open(url, \"_blank\");\n      return;\n    }\n\n    const a = document.createElement(\"a\");\n    a.href = url;\n    a.download = safe.replace(\/\\s+\/g,\"_\") + \".pdf\";\n    document.body.appendChild(a);\n    a.click();\n    a.remove();\n\n    setTimeout(()=>URL.revokeObjectURL(url), 2500);\n  }\n\n  \/* Init *\/\n  render();\n})();\n<\/script>\n\n\n\n<div class=\"tspPD-wrap\" id=\"tspPD\">\n\n  <!-- =========================\n       START MASKE (LANG + ROLE)\n       ========================= -->\n  <div class=\"tspPD-mask\" id=\"tspPD_mask\">\n    <div class=\"tspPD-maskBox\">\n\n      <!-- \u2705 Language Toggle -->\n      <div class=\"tspPD-langRow\">\n        <button type=\"button\" class=\"tspPD-langBtn active\" data-lang=\"de\">\ud83c\udde9\ud83c\uddea Deutsch<\/button>\n        <button type=\"button\" class=\"tspPD-langBtn\" data-lang=\"en\">\ud83c\uddec\ud83c\udde7 English<\/button>\n      <\/div>\n\n      <div class=\"tspPD-maskTitle\" id=\"tspPD_maskTitle\">Partner Demo starten<\/div>\n      <div class=\"tspPD-maskSub\" id=\"tspPD_maskSub\">\n        W\u00e4hlen Sie die Demo aus. Danach \u00f6ffnet sich ein realistisches Dashboard mit klickbaren Funktionen.\n      <\/div>\n\n      <div class=\"tspPD-maskGrid\">\n        <button type=\"button\" class=\"tspPD-maskCard\" data-start=\"forwarder\">\n          <div class=\"tspPD-maskIcon\">\ud83d\ude9a<\/div>\n          <div class=\"tspPD-maskCardTitle\" id=\"tspPD_cardForwarderTitle\">Spedition Demo<\/div>\n          <div class=\"tspPD-maskCardText\" id=\"tspPD_cardForwarderText\">\n            Transportanfragen, Tracking, Dokumente, Verladungsfotos & Abrechnung realistisch simuliert.\n          <\/div>\n          <div class=\"tspPD-maskCTA\" id=\"tspPD_cardForwarderCTA\">Demo \u00f6ffnen \u2192<\/div>\n        <\/button>\n\n        <button type=\"button\" class=\"tspPD-maskCard\" data-start=\"customs\">\n          <div class=\"tspPD-maskIcon\">\ud83d\udec3<\/div>\n          <div class=\"tspPD-maskCardTitle\" id=\"tspPD_cardCustomsTitle\">Zollagentur Demo<\/div>\n          <div class=\"tspPD-maskCardText\" id=\"tspPD_cardCustomsText\">\n            ABD\/MRN, R\u00fcckfragen, Statusverlauf, Dokumente & Abrechnung simuliert.\n          <\/div>\n          <div class=\"tspPD-maskCTA\" id=\"tspPD_cardCustomsCTA\">Demo \u00f6ffnen \u2192<\/div>\n        <\/button>\n      <\/div>\n\n      <div class=\"tspPD-maskFoot\" id=\"tspPD_maskFoot\">Hinweis: Demo-Vorschau. Alle Daten sind simuliert.<\/div>\n    <\/div>\n  <\/div>\n\n  <!-- =========================\n       TOP BAR\n       ========================= -->\n  <div class=\"tspPD-top\" id=\"tspPD_top\" style=\"display:none;\">\n    <div class=\"tspPD-topLeft\">\n      <div class=\"tspPD-title\" id=\"tspPD_topTitle\">Partner Demo \u2013 Spedition & Zollagentur<\/div>\n      <div class=\"tspPD-sub\" id=\"tspPD_topSub\">\n        Interaktive Vorschau (Fake-Daten). Alles klickbar \u2013 wie in einem echten Portal.\n      <\/div>\n    <\/div>\n\n    <div class=\"tspPD-topRight\">\n      <!-- \u2705 Language Toggle inside Demo -->\n      <div class=\"tspPD-langRow small\" id=\"tspPD_langTop\">\n        <button type=\"button\" class=\"tspPD-langBtn active\" data-lang=\"de\">DE<\/button>\n        <button type=\"button\" class=\"tspPD-langBtn\" data-lang=\"en\">EN<\/button>\n      <\/div>\n\n      <div class=\"tspPD-roleSwitch\">\n        <button class=\"tspPD-roleBtn active\" data-role=\"forwarder\" type=\"button\" id=\"tspPD_roleForwarder\">\ud83d\ude9a Spedition<\/button>\n        <button class=\"tspPD-roleBtn\" data-role=\"customs\" type=\"button\" id=\"tspPD_roleCustoms\">\ud83d\udec3 Zollagentur<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- =========================\n       DASHBOARD SHELL\n       ========================= -->\n  <div class=\"tspPD-shell\" id=\"tspPD_shell\" style=\"display:none;\">\n\n    <!-- Sidebar -->\n    <div class=\"tspPD-side\">\n      <div class=\"tspPD-sideHeader\">\n        <div class=\"tspPD-badge\" id=\"tspPD_badge\">Forwarder Module<\/div>\n        <div class=\"tspPD-sideTitle\" id=\"tspPD_sideTitle\">Spedition Dashboard<\/div>\n      <\/div>\n\n      <div class=\"tspPD-nav\" id=\"tspPD_nav\"><\/div>\n\n      <div class=\"tspPD-sideFooter\">\n        <div class=\"tspPD-tipTitle\" id=\"tspPD_tipTitle\">\ud83d\udca1 Demo Tipp<\/div>\n        <div class=\"tspPD-tipText\" id=\"tspPD_tip\">\n          \u00d6ffnen Sie <strong>Auftr\u00e4ge<\/strong>, klicken Sie auf einen Auftrag \u2192 Dokumente & Verladungsfotos erscheinen.\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Main -->\n    <div class=\"tspPD-main\">\n      <div class=\"tspPD-stats\" id=\"tspPD_stats\"><\/div>\n      <div class=\"tspPD-content\" id=\"tspPD_content\"><\/div>\n\n      <div class=\"tspPD-actionBar\">\n        <div class=\"tspPD-actionLeft\">\n          <div class=\"tspPD-actionTitle\" id=\"tspPD_actionTitle\">Demo aktiv<\/div>\n          <div class=\"tspPD-actionSub\" id=\"tspPD_actionSub\">\n            Alle Buttons funktionieren. Kein Reload. Alles wie in einem echten Portal.\n          <\/div>\n        <\/div>\n        <div class=\"tspPD-actionRight\">\n          <button class=\"tspPD-ghost\" type=\"button\" id=\"tspPD_back\">\u2190 Zur Auswahl<\/button>\n          <button class=\"tspPD-ghost\" type=\"button\" id=\"tspPD_reset\">\u21bb Demo zur\u00fccksetzen<\/button>\n        <\/div>\n      <\/div>\n\n    <\/div>\n\n  <\/div>\n<\/div>\n\n<!-- =========================\n     POPUP \/ PDF VIEWER (DEMO)\n     ========================= -->\n<div class=\"tspPD-pdf\" id=\"tspPD_pdf\" aria-hidden=\"true\">\n  <div class=\"tspPD-pdfBox\" role=\"dialog\" aria-modal=\"true\">\n    <div class=\"tspPD-pdfTop\">\n      <div class=\"tspPD-pdfTitle\" id=\"tspPD_pdfTitle\">Dokument<\/div>\n      <button class=\"tspPD-pdfClose\" type=\"button\" id=\"tspPD_pdfClose\">\u2715<\/button>\n    <\/div>\n    <div class=\"tspPD-pdfBody\">\n      <div class=\"tspPD-pdfFake\">\n        <div class=\"tspPD-pdfStamp\">DEMO<\/div>\n        <div class=\"tspPD-pdfLine\"><\/div>\n        <div class=\"tspPD-pdfLine short\"><\/div>\n        <div class=\"tspPD-pdfLine\"><\/div>\n        <div class=\"tspPD-pdfLine short\"><\/div>\n        <div class=\"tspPD-pdfLine\"><\/div>\n      <\/div>\n      <div class=\"tspPD-pdfHint\" id=\"tspPD_pdfHint\">\n        Vorschau: Dieses Dokument wird im echten System als PDF bereitgestellt.\n      <\/div>\n    <\/div>\n    <button class=\"tspPD-pdfBtn\" type=\"button\" id=\"tspPD_pdfOk\">Schlie\u00dfen<\/button>\n  <\/div>\n<\/div>\n\n<style>\n\/* \u2705 Scoped *\/\n#tspPD, #tspPD *{\n  box-sizing:border-box;\n  font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Arial;\n}\n.tspPD-wrap{ width:100%; max-width:1200px; margin:22px auto 36px; padding:0 12px; }\n\n\/* \u2705 Language row *\/\n.tspPD-langRow{ display:flex; gap:10px; justify-content:center; margin-bottom:14px; flex-wrap:wrap; }\n.tspPD-langRow.small{ margin:0; justify-content:flex-end; }\n.tspPD-langBtn{\n  border:1px solid rgba(255,255,255,0.16);\n  background:rgba(255,255,255,0.06);\n  color:#ecf6f2;\n  font-weight:950;\n  font-size:12.5px;\n  padding:10px 14px;\n  border-radius:999px;\n  cursor:pointer;\n  transition:.12s ease;\n}\n.tspPD-langRow.small .tspPD-langBtn{ padding:8px 10px; font-size:12px; }\n.tspPD-langBtn:hover{ border-color:rgba(10,168,79,0.45); transform:translateY(-1px); }\n.tspPD-langBtn.active{\n  background:rgba(10,168,79,0.18);\n  border-color:rgba(10,168,79,0.55);\n  color:#fff;\n}\n\n\/* MASK *\/\n.tspPD-mask{\n  border-radius:18px; padding:18px;\n  background: linear-gradient(120deg, #09131a 0%, #0f2b33 55%, #09131a 100%);\n  border:1px solid rgba(255,255,255,0.14);\n  box-shadow:0 14px 40px rgba(0,0,0,0.45);\n  position:relative; overflow:hidden;\n}\n.tspPD-mask:before{\n  content:\"\"; position:absolute; inset:-2px;\n  background: radial-gradient(circle at 15% 20%, rgba(10,168,79,0.22), transparent 60%);\n  pointer-events:none;\n}\n.tspPD-maskBox{ position:relative; z-index:2; max-width:920px; margin:0 auto; text-align:center; }\n.tspPD-maskTitle{ font-size:22px; font-weight:950; color:#ecf6f2; margin-bottom:8px; }\n.tspPD-maskSub{ font-size:13px; font-weight:800; color:#cfe2db; opacity:.95; margin-bottom:16px; line-height:1.4; }\n.tspPD-maskGrid{ display:grid; grid-template-columns:repeat(2, 1fr); gap:12px; }\n.tspPD-maskCard{\n  border:none; text-align:left; width:100%;\n  border-radius:18px; padding:16px 16px 14px;\n  background: rgba(255,255,255,0.05);\n  border:1px solid rgba(255,255,255,0.12);\n  cursor:pointer; transition:.12s ease; color:#ecf6f2;\n}\n.tspPD-maskCard:hover{ border-color: rgba(10,168,79,0.45); transform: translateY(-1px); }\n.tspPD-maskIcon{ font-size:22px; margin-bottom:10px; }\n.tspPD-maskCardTitle{ font-size:15px; font-weight:950; margin-bottom:6px; }\n.tspPD-maskCardText{ font-size:12.5px; font-weight:800; color:#cfe2db; opacity:.95; line-height:1.4; margin-bottom:12px; }\n.tspPD-maskCTA{\n  display:inline-flex; align-items:center; gap:8px;\n  padding:10px 12px; border-radius:14px;\n  background: linear-gradient(135deg, #0aa84f, #067a39);\n  font-weight:950; font-size:12.5px; color:#fff;\n  box-shadow:0 12px 20px rgba(10,168,79,0.12);\n}\n.tspPD-maskFoot{ margin-top:14px; font-size:11.5px; font-weight:800; color:#a9c0b9; opacity:.95; }\n@media(max-width:780px){ .tspPD-maskGrid{ grid-template-columns:1fr; } }\n\n\/* TOP *\/\n.tspPD-top{ display:flex; justify-content:space-between; align-items:flex-end; gap:16px; flex-wrap:wrap; margin:18px 0 14px; }\n.tspPD-topRight{ display:flex; gap:12px; align-items:center; flex-wrap:wrap; justify-content:flex-end; }\n.tspPD-title{ font-size:20px; font-weight:950; color:#0f2f36; letter-spacing:.2px; }\n.tspPD-sub{ margin-top:6px; font-size:13px; font-weight:700; color:#3d565e; line-height:1.4; max-width:820px; }\n.tspPD-roleSwitch{ display:flex; gap:10px; flex-wrap:wrap; }\n.tspPD-roleBtn{\n  border:1px solid rgba(0,0,0,0.12); background:#fff;\n  padding:10px 14px; border-radius:999px;\n  font-size:13px; font-weight:950; cursor:pointer;\n  color:#1f343b; transition:.12s ease;\n}\n.tspPD-roleBtn:hover{ border-color:rgba(10,168,79,.45); }\n.tspPD-roleBtn.active{ background:#0aa84f; border-color:#0aa84f; color:#fff; }\n\n\/* SHELL *\/\n.tspPD-shell{\n  display:flex; border-radius:18px; overflow:hidden;\n  background: linear-gradient(120deg, #09131a 0%, #0f2b33 55%, #09131a 100%);\n  border:1px solid rgba(255,255,255,0.14);\n  box-shadow:0 14px 40px rgba(0,0,0,0.45);\n  position:relative;\n}\n.tspPD-shell:before{\n  content:\"\"; position:absolute; inset:-2px;\n  background: radial-gradient(circle at 15% 20%, rgba(10,168,79,0.18), transparent 60%);\n  pointer-events:none;\n}\n.tspPD-side{\n  width:290px; min-width:260px;\n  padding:16px 14px;\n  border-right:1px solid rgba(255,255,255,0.10);\n  position:relative; z-index:2;\n}\n.tspPD-sideHeader{\n  padding:10px 10px 14px; border-radius:14px;\n  background: rgba(255,255,255,0.05);\n  border:1px solid rgba(255,255,255,0.10);\n  margin-bottom:12px;\n}\n.tspPD-badge{\n  display:inline-flex; padding:7px 10px; border-radius:999px;\n  background:rgba(255,255,255,0.06);\n  border:1px solid rgba(255,255,255,0.12);\n  color:#0aa84f; font-weight:950; font-size:11px;\n  margin-bottom:10px;\n}\n.tspPD-sideTitle{ font-size:14px; font-weight:950; color:#ecf6f2; }\n.tspPD-nav{ display:flex; flex-direction:column; gap:8px; margin-top:12px; }\n.tspPD-navBtn{\n  width:100%; text-align:left;\n  padding:10px 12px; border-radius:14px;\n  border:1px solid rgba(255,255,255,0.10);\n  background: rgba(255,255,255,0.04);\n  color:#ecf6f2; font-weight:900; font-size:12.5px;\n  cursor:pointer; transition:.12s ease;\n  display:flex; align-items:center; justify-content:space-between; gap:10px;\n}\n.tspPD-navBtn:hover{ border-color: rgba(10,168,79,0.35); }\n.tspPD-navBtn.active{ border-color: rgba(10,168,79,0.55); background: rgba(10,168,79,0.12); }\n.tspPD-pill{\n  padding:5px 9px; border-radius:999px;\n  font-size:10.5px; font-weight:950;\n  background:rgba(255,255,255,0.08);\n  border:1px solid rgba(255,255,255,0.12);\n  color:#cfe2db;\n}\n.tspPD-sideFooter{\n  margin-top:14px;\n  padding:12px; border-radius:14px;\n  background:rgba(255,255,255,0.05);\n  border:1px solid rgba(255,255,255,0.10);\n}\n.tspPD-tipTitle{ font-size:12px; font-weight:950; color:#ecf6f2; margin-bottom:6px; }\n.tspPD-tipText{ font-size:12px; font-weight:800; color:#cfe2db; opacity:.95; line-height:1.35; }\n\n.tspPD-main{ flex:1; padding:16px; position:relative; z-index:2; min-width:0; }\n\n\/* STATS *\/\n.tspPD-stats{ display:grid; grid-template-columns:repeat(4, minmax(0, 1fr)); gap:10px; margin-bottom:12px; }\n.tspPD-stat{\n  border-radius:16px; padding:12px;\n  background:rgba(255,255,255,0.06);\n  border:1px solid rgba(255,255,255,0.12);\n}\n.tspPD-statLabel{ font-size:10.5px; font-weight:950; color:#cfe2db; opacity:.9; margin-bottom:6px; }\n.tspPD-statValue{ font-size:16px; font-weight:950; color:#ecf6f2; }\n.tspPD-statValue span{ color:#0aa84f; }\n\n\/* CONTENT *\/\n.tspPD-content{\n  border-radius:18px; padding:14px;\n  background:rgba(255,255,255,0.05);\n  border:1px solid rgba(255,255,255,0.12);\n  min-height:420px;\n}\n.tspPD-h2{ font-size:14px; font-weight:950; color:#ecf6f2; margin:0 0 10px 0; }\n.tspPD-card{ border-radius:16px; padding:12px; background:rgba(255,255,255,0.05); border:1px solid rgba(255,255,255,0.12); }\n.tspPD-row{ display:flex; justify-content:space-between; gap:12px; padding:10px 0; border-bottom:1px solid rgba(255,255,255,0.08); }\n.tspPD-row:last-child{ border-bottom:none; }\n.tspPD-rowTitle{ font-size:12.5px; font-weight:950; color:#ecf6f2; }\n.tspPD-rowSub{ font-size:11.5px; font-weight:800; color:#cfe2db; opacity:.95; line-height:1.35; }\n.tspPD-tag{\n  padding:6px 10px; border-radius:999px;\n  font-size:11px; font-weight:950;\n  border:1px solid rgba(255,255,255,0.12);\n  background:rgba(255,255,255,0.06);\n  color:#cfe2db; white-space:nowrap; height:max-content;\n}\n.tspPD-tag.green{ color:#0aa84f; border-color: rgba(10,168,79,0.35); background:rgba(10,168,79,0.10); }\n.tspPD-tag.yellow{ color:#fbbf24; border-color: rgba(251,191,36,0.35); background:rgba(251,191,36,0.10); }\n.tspPD-tag.red{ color:#ef4444; border-color: rgba(239,68,68,0.35); background:rgba(239,68,68,0.10); }\n\n.tspPD-btnRow{ display:flex; gap:10px; flex-wrap:wrap; margin-top:12px; }\n.tspPD-btn{\n  border:none; border-radius:14px; padding:11px 14px;\n  font-weight:950; font-size:12.5px; cursor:pointer; transition:.12s ease;\n}\n.tspPD-btn.primary{ background: linear-gradient(135deg, #0aa84f, #067a39); color:#fff; }\n.tspPD-btn.primary:hover{ transform: translateY(-1px); filter:brightness(1.05); }\n.tspPD-btn.ghost{\n  background:rgba(255,255,255,0.06);\n  border:1px solid rgba(255,255,255,0.14);\n  color:#ecf6f2;\n}\n.tspPD-btn.ghost:hover{ border-color: rgba(10,168,79,0.35); }\n\n\/* DOCS *\/\n.tspPD-docs{ display:flex; flex-direction:column; gap:8px; margin-top:10px; }\n.tspPD-doc{\n  display:flex; align-items:center; justify-content:space-between; gap:10px;\n  padding:10px 10px; border-radius:14px;\n  background:rgba(255,255,255,0.04);\n  border:1px solid rgba(255,255,255,0.10);\n}\n.tspPD-docLeft{ display:flex; gap:10px; align-items:center; }\n.tspPD-docIcon{\n  width:34px;height:34px; border-radius:12px;\n  display:flex; align-items:center; justify-content:center;\n  background:rgba(10,168,79,0.10);\n  border:1px solid rgba(10,168,79,0.20);\n  color:#0aa84f; font-weight:950;\n}\n.tspPD-docName{ font-size:12.5px; font-weight:950; color:#ecf6f2; }\n.tspPD-docMeta{ font-size:11px; font-weight:800; color:#cfe2db; opacity:.9; }\n.tspPD-docBtn{\n  border:none; border-radius:12px; padding:9px 10px;\n  font-weight:950; font-size:11.5px; cursor:pointer;\n  background:rgba(255,255,255,0.06);\n  border:1px solid rgba(255,255,255,0.14);\n  color:#ecf6f2;\n}\n.tspPD-docBtn:hover{ border-color: rgba(10,168,79,0.35); }\n\n\/* PHOTOS *\/\n.tspPD-photoGrid{ display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:8px; margin-top:10px; }\n.tspPD-photo{\n  height:88px; border-radius:14px;\n  background:linear-gradient(135deg, rgba(255,255,255,0.06), rgba(255,255,255,0.02));\n  border:1px solid rgba(255,255,255,0.10);\n  position:relative; overflow:hidden;\n}\n.tspPD-photo:before{\n  content:\"\"; position:absolute; inset:0;\n  background:\n    radial-gradient(circle at 30% 30%, rgba(10,168,79,0.25), transparent 60%),\n    radial-gradient(circle at 70% 70%, rgba(255,255,255,0.08), transparent 55%);\n  opacity:.85;\n}\n.tspPD-photoLabel{\n  position:absolute; left:10px; bottom:8px;\n  font-size:11px; font-weight:950; color:#ecf6f2;\n  opacity:.95; text-shadow:0 6px 14px rgba(0,0,0,0.6);\n}\n\n\/* TRACKING *\/\n.tspPD-track{\n  border-radius:16px; padding:12px;\n  background:rgba(255,255,255,0.04);\n  border:1px solid rgba(255,255,255,0.10);\n  margin-top:10px;\n}\n.tspPD-trackLine{\n  height:8px; border-radius:999px;\n  background:rgba(255,255,255,0.10);\n  overflow:hidden;\n  margin:10px 0 4px;\n}\n.tspPD-trackProg{\n  width:68%;\n  height:100%;\n  background: linear-gradient(90deg, rgba(10,168,79,.95), rgba(10,168,79,.25));\n}\n.tspPD-trackMeta{\n  display:flex; justify-content:space-between;\n  font-size:11px; font-weight:850; color:#cfe2db; opacity:.95;\n}\n\n\/* ACTION BAR *\/\n.tspPD-actionBar{\n  margin-top:12px; display:flex; justify-content:space-between; align-items:center;\n  gap:12px; flex-wrap:wrap; padding:12px; border-radius:18px;\n  background:rgba(255,255,255,0.05);\n  border:1px solid rgba(255,255,255,0.12);\n}\n.tspPD-actionTitle{ font-size:12.5px; font-weight:950; color:#ecf6f2; }\n.tspPD-actionSub{ font-size:11.5px; font-weight:800; color:#cfe2db; opacity:.95; }\n.tspPD-actionRight{ display:flex; gap:10px; flex-wrap:wrap; }\n.tspPD-ghost{\n  border:none; border-radius:14px; padding:10px 12px;\n  cursor:pointer; font-weight:950; font-size:12px;\n  background:rgba(255,255,255,0.06);\n  border:1px solid rgba(255,255,255,0.14);\n  color:#ecf6f2;\n}\n.tspPD-ghost:hover{ border-color: rgba(10,168,79,0.35); }\n\n\/* PDF POPUP *\/\n.tspPD-pdf{\n  display:none; position:fixed; inset:0;\n  background:rgba(0,0,0,0.55); z-index:999999; padding:18px;\n}\n.tspPD-pdf.show{ display:flex; align-items:center; justify-content:center; }\n.tspPD-pdfBox{\n  width:100%; max-width:520px; background:#ffffff;\n  border-radius:18px; overflow:hidden;\n  box-shadow:0 30px 80px rgba(0,0,0,0.35);\n}\n.tspPD-pdfTop{ display:flex; justify-content:space-between; align-items:center; padding:12px 14px; background:#0f2b33; color:#fff; }\n.tspPD-pdfTitle{ font-weight:950; font-size:13px; }\n.tspPD-pdfClose{ border:none; background:transparent; color:#fff; font-size:18px; cursor:pointer; }\n.tspPD-pdfBody{ padding:14px; background:#f5f7f9; }\n.tspPD-pdfFake{\n  background:#fff; border-radius:14px; padding:14px;\n  border:1px solid rgba(0,0,0,0.10);\n  position:relative; overflow:hidden;\n}\n.tspPD-pdfStamp{\n  position:absolute; right:12px; top:10px;\n  font-weight:950; color:#0aa84f;\n  border:2px solid #0aa84f;\n  padding:4px 10px; border-radius:999px;\n  transform: rotate(8deg);\n}\n.tspPD-pdfLine{ height:10px; background:rgba(0,0,0,0.08); border-radius:8px; margin:12px 0; }\n.tspPD-pdfLine.short{ width:65%; }\n.tspPD-pdfHint{ margin-top:10px; font-size:12px; font-weight:800; color:#51666e; }\n.tspPD-pdfBtn{ width:100%; border:none; padding:12px 14px; background:#0aa84f; color:#fff; font-weight:950; cursor:pointer; }\n\n@media(max-width:980px){\n  .tspPD-shell{ flex-direction:column; }\n  .tspPD-side{ width:100%; border-right:none; border-bottom:1px solid rgba(255,255,255,0.10); }\n  .tspPD-stats{ grid-template-columns:repeat(2, minmax(0, 1fr)); }\n}\n@media(max-width:520px){\n  .tspPD-stats{ grid-template-columns:1fr; }\n  .tspPD-photoGrid{ grid-template-columns:1fr; }\n}\n<\/style>\n\n<script>\n(function(){\n  function $(id){ return document.getElementById(id); }\n\n  var mask = $(\"tspPD_mask\");\n  var topBar = $(\"tspPD_top\");\n  var shell = $(\"tspPD_shell\");\n\n  var nav = $(\"tspPD_nav\");\n  var stats = $(\"tspPD_stats\");\n  var content = $(\"tspPD_content\");\n\n  var badge = $(\"tspPD_badge\");\n  var sideTitle = $(\"tspPD_sideTitle\");\n  var tip = $(\"tspPD_tip\");\n\n  var roleBtns = document.querySelectorAll(\"#tspPD .tspPD-roleBtn\");\n  var startBtns = document.querySelectorAll(\"#tspPD .tspPD-maskCard\");\n  var langBtns = document.querySelectorAll(\"#tspPD .tspPD-langBtn\");\n\n  var backBtn = $(\"tspPD_back\");\n  var resetBtn = $(\"tspPD_reset\");\n\n  \/\/ PDF popup\n  var pdf = $(\"tspPD_pdf\");\n  var pdfClose = $(\"tspPD_pdfClose\");\n  var pdfOk = $(\"tspPD_pdfOk\");\n  var pdfTitle = $(\"tspPD_pdfTitle\");\n\n  function openPdf(title){\n    if(pdfTitle) pdfTitle.textContent = title || (STATE.lang===\"de\" ? \"Dokument\" : \"Document\");\n    if(pdf) pdf.classList.add(\"show\");\n  }\n  function closePdf(){ if(pdf) pdf.classList.remove(\"show\"); }\n  if(pdfClose) pdfClose.addEventListener(\"click\", closePdf);\n  if(pdfOk) pdfOk.addEventListener(\"click\", closePdf);\n  if(pdf) pdf.addEventListener(\"click\", function(e){ if(e.target === pdf) closePdf(); });\n\n  var STATE = { role:null, tab:null, selectedJob:null, lang:\"de\" };\n\n  \/* =========================\n     \u2705 TRANSLATIONS (FULL)\n     ========================= *\/\n  var TXT = {\n    de: {\n      maskTitle:\"Partner Demo starten\",\n      maskSub:\"W\u00e4hlen Sie die Demo aus. Danach \u00f6ffnet sich ein realistisches Dashboard mit klickbaren Funktionen.\",\n      fTitle:\"Spedition Demo\",\n      fText:\"Transportanfragen, Tracking, Dokumente, Verladungsfotos & Abrechnung realistisch simuliert.\",\n      cTitle:\"Zollagentur Demo\",\n      cText:\"ABD\/MRN, R\u00fcckfragen, Statusverlauf, Dokumente & Abrechnung simuliert.\",\n      open:\"Demo \u00f6ffnen \u2192\",\n      foot:\"Hinweis: Demo-Vorschau. Alle Daten sind simuliert.\",\n      topTitle:\"Partner Demo \u2013 Spedition & Zollagentur\",\n      topSub:\"Interaktive Vorschau (Fake-Daten). Alles klickbar \u2013 wie in einem echten Portal.\",\n      roleForwarder:\"\ud83d\ude9a Spedition\",\n      roleCustoms:\"\ud83d\udec3 Zollagentur\",\n      tipTitle:\"\ud83d\udca1 Demo Tipp\",\n      actionTitle:\"Demo aktiv\",\n      actionSub:\"Alle Buttons funktionieren. Kein Reload. Alles wie in einem echten Portal.\",\n      back:\"\u2190 Zur Auswahl\",\n      reset:\"\u21bb Demo zur\u00fccksetzen\",\n      pdfHint:\"Vorschau: Dieses Dokument wird im echten System als PDF bereitgestellt.\",\n      pdfClose:\"Schlie\u00dfen\",\n\n      \/\/ Tabs \/ Headings\n      hRequestsForwarder:\"Neue Transportanfragen\",\n      hRequestsCustoms:\"Neue Zollauftr\u00e4ge\",\n      hJobsForwarder:\"Auftr\u00e4ge (Demo)\",\n      hJobsCustoms:\"Zollauftr\u00e4ge (Demo)\",\n      hTracking:\"Live Tracking (Demo)\",\n      hDocs:\"Dokumentenpaket (Demo)\",\n      hBillingForwarder:\"Abrechnung (Spedition Demo)\",\n      hBillingCustoms:\"Abrechnung (Zollagentur Demo)\",\n      hQuestions:\"R\u00fcckfragen \/ Inbox (Demo)\",\n      hMRN:\"MRN \/ ABD Verwaltung (Demo)\",\n\n      \/\/ Buttons\n      btnAccept:\"Anfrage annehmen\",\n      btnDetails:\"Details ansehen\",\n      btnReject:\"Anfrage ablehnen\",\n      btnUpdateStatus:\"Status aktualisieren\",\n      btnExportTracking:\"Tracking exportieren\",\n      btnContactDriver:\"Fahrer kontaktieren\",\n      btnExportBilling:\"Abrechnung exportieren\",\n      btnMarkPaid:\"Zahlung markieren\",\n      btnDownloadPack:\"Paket downloaden\",\n      btnAddDoc:\"Dokument hinzuf\u00fcgen\",\n      btnResendABD:\"ABD erneut senden\",\n      btnCheckStatus:\"Status pr\u00fcfen\",\n      btnSendAnswer:\"Antwort senden\",\n      btnCloseTicket:\"Ticket schlie\u00dfen\",\n      btnOpenJob:\"Auftrag \u00f6ffnen\",\n      btnComment:\"Auftrag kommentieren\",\n      btnAddUpload:\"Upload hinzuf\u00fcgen\",\n      btnView:\"Ansehen\",\n\n      \/\/ Labels\n      labelDocsAlways:\"Dokumente (immer vollst\u00e4ndig)\",\n      labelPhotos:\"Verladungsfotos (Demo)\",\n      labelStatusLog:\"Statusverlauf (Demo)\",\n      labelGPS:\"GPS Route (simuliert)\",\n      labelLastUpdate:\"Letztes Update\",\n      labelAgo:\"vor 2 Min\",\n      labelStart:\"Start\",\n      labelCurrent:\"Aktuell\",\n      labelDestination:\"Ziel\",\n      labelStatus:\"Status\",\n      labelClient:\"Kunde\",\n      labelMRN:\"MRN\",\n      labelETA:\"ETA\",\n      labelContainer:\"Container\",\n      labelPaid:\"Bezahlt\",\n      labelOpen:\"Offen\",\n      labelNew:\"NEU\",\n      labelActive:\"AKTIV\",\n      labelLive:\"LIVE\",\n      labelPack:\"PAKET\",\n      labelOverview:\"\u00dcBERSICHT\",\n      labelInbox:\"INBOX\",\n      labelDetail:\"DETAIL\",\n\n      \/\/ Strings in billing\n      billMonth:\"Abrechnung Januar 2026\",\n      billForwarderSub:\"5 Auftr\u00e4ge erledigt \u00b7 2 offen \u00b7 Auszahlung terminiert\",\n      billCustomsSub:\"3 ABD erledigt \u00b7 1 offen \u00b7 0 storniert\",\n\n      \/\/ Requests lines\n      req1F_title:\"Anfrage TR-9912\",\n      req1F_sub:\"1x 40HC \u00b7 Bremen \u2192 Rotterdam \u00b7 Pickup heute 15:00\",\n      req2F_title:\"Anfrage TR-9916\",\n      req2F_sub:\"1x 20DV \u00b7 Hannover \u2192 Bremerhaven \u00b7 Pickup morgen\",\n      req1C_title:\"ABD Auftrag 78410\",\n      req1C_sub:\"Export DE \u2192 Ghana \u00b7 Dokumente vollst\u00e4ndig\",\n      req2C_title:\"ABD Auftrag 78411\",\n      req2C_sub:\"Export DE \u2192 Senegal \u00b7 R\u00fcckfrage m\u00f6glich\",\n\n      \/\/ Questions\n      q1_title:\"Ticket #Q-1142\",\n      q1_sub:\"\u201eBitte best\u00e4tigen: Nettogewicht & Packst\u00fccke\u201c\",\n      q2_title:\"Ticket #Q-1139\",\n      q2_sub:\"\u201eAnnex 7 fehlt auf Seite 2 \u2013 bitte nachreichen\u201c\",\n      qNew:\"Neu\",\n      qUrgent:\"Dringend\"\n    },\n\n    en: {\n      maskTitle:\"Start Partner Demo\",\n      maskSub:\"Choose your demo. A realistic dashboard will open with clickable functions.\",\n      fTitle:\"Forwarder Demo\",\n      fText:\"Transport requests, tracking, documents, loading photos & billing simulated realistically.\",\n      cTitle:\"Customs Agency Demo\",\n      cText:\"ABD\/MRN, inquiries, status history, documents & billing simulated.\",\n      open:\"Open demo \u2192\",\n      foot:\"Note: Demo preview. All data is simulated.\",\n      topTitle:\"Partner Demo \u2013 Forwarder & Customs Agency\",\n      topSub:\"Interactive preview (fake data). Everything is clickable \u2013 like a real portal.\",\n      roleForwarder:\"\ud83d\ude9a Forwarder\",\n      roleCustoms:\"\ud83d\udec3 Customs\",\n      tipTitle:\"\ud83d\udca1 Demo Tip\",\n      actionTitle:\"Demo active\",\n      actionSub:\"All buttons work. No reload. Feels like a real portal.\",\n      back:\"\u2190 Back to selection\",\n      reset:\"\u21bb Reset demo\",\n      pdfHint:\"Preview: This document will be provided as a PDF in the real system.\",\n      pdfClose:\"Close\",\n\n      \/\/ Tabs \/ Headings\n      hRequestsForwarder:\"New Transport Requests\",\n      hRequestsCustoms:\"New Customs Jobs\",\n      hJobsForwarder:\"Jobs (Demo)\",\n      hJobsCustoms:\"Customs Jobs (Demo)\",\n      hTracking:\"Live Tracking (Demo)\",\n      hDocs:\"Document Package (Demo)\",\n      hBillingForwarder:\"Billing (Forwarder Demo)\",\n      hBillingCustoms:\"Billing (Customs Demo)\",\n      hQuestions:\"Inquiries \/ Inbox (Demo)\",\n      hMRN:\"MRN \/ ABD Management (Demo)\",\n\n      \/\/ Buttons\n      btnAccept:\"Accept request\",\n      btnDetails:\"View details\",\n      btnReject:\"Reject request\",\n      btnUpdateStatus:\"Update status\",\n      btnExportTracking:\"Export tracking\",\n      btnContactDriver:\"Contact driver\",\n      btnExportBilling:\"Export billing\",\n      btnMarkPaid:\"Mark as paid\",\n      btnDownloadPack:\"Download package\",\n      btnAddDoc:\"Add document\",\n      btnResendABD:\"Resend ABD\",\n      btnCheckStatus:\"Check status\",\n      btnSendAnswer:\"Send reply\",\n      btnCloseTicket:\"Close ticket\",\n      btnOpenJob:\"Open job\",\n      btnComment:\"Comment job\",\n      btnAddUpload:\"Add upload\",\n      btnView:\"View\",\n\n      \/\/ Labels\n      labelDocsAlways:\"Documents (always complete)\",\n      labelPhotos:\"Loading photos (Demo)\",\n      labelStatusLog:\"Status timeline (Demo)\",\n      labelGPS:\"GPS Route (simulated)\",\n      labelLastUpdate:\"Last update\",\n      labelAgo:\"2 min ago\",\n      labelStart:\"Start\",\n      labelCurrent:\"Current\",\n      labelDestination:\"Destination\",\n      labelStatus:\"Status\",\n      labelClient:\"Client\",\n      labelMRN:\"MRN\",\n      labelETA:\"ETA\",\n      labelContainer:\"Container\",\n      labelPaid:\"Paid\",\n      labelOpen:\"Open\",\n      labelNew:\"NEW\",\n      labelActive:\"ACTIVE\",\n      labelLive:\"LIVE\",\n      labelPack:\"PACK\",\n      labelOverview:\"OVERVIEW\",\n      labelInbox:\"INBOX\",\n      labelDetail:\"DETAIL\",\n\n      \/\/ Billing strings\n      billMonth:\"Billing January 2026\",\n      billForwarderSub:\"5 jobs completed \u00b7 2 open \u00b7 payout scheduled\",\n      billCustomsSub:\"3 ABD completed \u00b7 1 open \u00b7 0 cancelled\",\n\n      \/\/ Requests lines\n      req1F_title:\"Request TR-9912\",\n      req1F_sub:\"1x 40HC \u00b7 Bremen \u2192 Rotterdam \u00b7 Pickup today 15:00\",\n      req2F_title:\"Request TR-9916\",\n      req2F_sub:\"1x 20DV \u00b7 Hanover \u2192 Bremerhaven \u00b7 Pickup tomorrow\",\n      req1C_title:\"ABD Job 78410\",\n      req1C_sub:\"Export DE \u2192 Ghana \u00b7 Documents complete\",\n      req2C_title:\"ABD Job 78411\",\n      req2C_sub:\"Export DE \u2192 Senegal \u00b7 Inquiry possible\",\n\n      \/\/ Questions\n      q1_title:\"Ticket #Q-1142\",\n      q1_sub:\"\u201cPlease confirm: net weight & packages\u201d\",\n      q2_title:\"Ticket #Q-1139\",\n      q2_sub:\"\u201cAnnex 7 missing on page 2 \u2013 please provide\u201d\",\n      qNew:\"New\",\n      qUrgent:\"Urgent\"\n    }\n  };\n\n  \/\/ docs list always (names shown in same style but meta is translated)\n  function getDocsAlways(){\n    if(STATE.lang===\"de\"){\n      return [\n        { name:\"Rechnung.pdf\", meta:\"Invoice \u00b7 2 Seiten\" },\n        { name:\"Lieferschein.pdf\", meta:\"Delivery Note \u00b7 1 Seite\" },\n        { name:\"Annex_7.pdf\", meta:\"Annex VII \u00b7 Export Dokument\" },\n        { name:\"Verwertungsvertrag.pdf\", meta:\"Disposal Contract \u00b7 signiert\" }\n      ];\n    }\n    return [\n      { name:\"Invoice.pdf\", meta:\"Invoice \u00b7 2 pages\" },\n      { name:\"Delivery_Note.pdf\", meta:\"Delivery Note \u00b7 1 page\" },\n      { name:\"Annex_7.pdf\", meta:\"Annex VII \u00b7 Export document\" },\n      { name:\"Disposal_Contract.pdf\", meta:\"Disposal contract \u00b7 signed\" }\n    ];\n  }\n\n  var DATA = {\n    forwarder: {\n      badge: \"Forwarder Module\",\n      sideTitle_de: \"Spedition Dashboard\",\n      sideTitle_en: \"Forwarder Dashboard\",\n      tip_de: \"\u00d6ffnen Sie <strong>Auftr\u00e4ge<\/strong>, klicken Sie auf einen Auftrag \u2192 Dokumente & Verladungsfotos erscheinen.\",\n      tip_en: \"Open <strong>Jobs<\/strong>, click a job \u2192 documents & loading photos appear.\",\n      nav: [\n        { key:\"requests\", label_de:\"Transportanfragen\", label_en:\"Transport Requests\", pill_de:\"NEU\", pill_en:\"NEW\" },\n        { key:\"jobs\", label_de:\"Auftr\u00e4ge\", label_en:\"Jobs\", pill_de:\"AKTIV\", pill_en:\"ACTIVE\" },\n        { key:\"tracking\", label_de:\"Tracking\", label_en:\"Tracking\", pill_de:\"LIVE\", pill_en:\"LIVE\" },\n        { key:\"docs\", label_de:\"Dokumente\", label_en:\"Documents\", pill_de:\"PAKET\", pill_en:\"PACK\" },\n        { key:\"billing\", label_de:\"Abrechnung\", label_en:\"Billing\", pill_de:\"\u00dcBERSICHT\", pill_en:\"OVERVIEW\" }\n      ],\n      stats_de: [\n        { label:\"Neue Anfragen\", value:\"3\" },\n        { label:\"Aktive Auftr\u00e4ge\", value:\"5\" },\n        { label:\"Container in Transit\", value:\"2\" },\n        { label:\"P\u00fcnktlichkeitsrate\", value:\"<span>98%<\/span>\" }\n      ],\n      stats_en: [\n        { label:\"New Requests\", value:\"3\" },\n        { label:\"Active Jobs\", value:\"5\" },\n        { label:\"Containers in Transit\", value:\"2\" },\n        { label:\"On-time Rate\", value:\"<span>98%<\/span>\" }\n      ],\n      jobs_de: [\n        { id:\"JOB-TRP-2049\", route:\"DE (Bremen) \u2192 Rotterdam (NL)\", eta:\"Heute 18:40\", status:\"In Verladung\", tag:\"yellow\", container:\"MSCU 893142-7\", volume:\"1x 40HC\" },\n        { id:\"JOB-TRP-2051\", route:\"DE (Hamburg) \u2192 Antwerpen (BE)\", eta:\"Morgen 09:15\", status:\"Abholung geplant\", tag:\"green\", container:\"HLCU 170244-2\", volume:\"1x 40HC\" },\n        { id:\"JOB-TRP-2056\", route:\"DE (Hannover) \u2192 Bremerhaven (DE)\", eta:\"Heute 21:10\", status:\"Unterwegs\", tag:\"green\", container:\"TGHU 988312-4\", volume:\"1x 20DV\" }\n      ],\n      jobs_en: [\n        { id:\"JOB-TRP-2049\", route:\"DE (Bremen) \u2192 Rotterdam (NL)\", eta:\"Today 18:40\", status:\"Loading\", tag:\"yellow\", container:\"MSCU 893142-7\", volume:\"1x 40HC\" },\n        { id:\"JOB-TRP-2051\", route:\"DE (Hamburg) \u2192 Antwerp (BE)\", eta:\"Tomorrow 09:15\", status:\"Pickup planned\", tag:\"green\", container:\"HLCU 170244-2\", volume:\"1x 40HC\" },\n        { id:\"JOB-TRP-2056\", route:\"DE (Hanover) \u2192 Bremerhaven (DE)\", eta:\"Today 21:10\", status:\"In transit\", tag:\"green\", container:\"TGHU 988312-4\", volume:\"1x 20DV\" }\n      ]\n    },\n\n    customs: {\n      badge: \"Customs Module\",\n      sideTitle_de: \"Zollagentur Dashboard\",\n      sideTitle_en: \"Customs Agency Dashboard\",\n      tip_de: \"\u00d6ffnen Sie <strong>Zollauftr\u00e4ge<\/strong>, klicken Sie auf einen Auftrag \u2192 MRN\/ABD, Status & Dokumente erscheinen.\",\n      tip_en: \"Open <strong>Customs Jobs<\/strong>, click a job \u2192 MRN\/ABD, status & documents appear.\",\n      nav: [\n        { key:\"customs_jobs\", label_de:\"Zollauftr\u00e4ge\", label_en:\"Customs Jobs\", pill_de:\"NEU\", pill_en:\"NEW\" },\n        { key:\"mrn\", label_de:\"MRN \/ ABD\", label_en:\"MRN \/ ABD\", pill_de:\"LIVE\", pill_en:\"LIVE\" },\n        { key:\"questions\", label_de:\"R\u00fcckfragen\", label_en:\"Inquiries\", pill_de:\"INBOX\", pill_en:\"INBOX\" },\n        { key:\"docs\", label_de:\"Dokumente\", label_en:\"Documents\", pill_de:\"PAKET\", pill_en:\"PACK\" },\n        { key:\"billing\", label_de:\"Abrechnung\", label_en:\"Billing\", pill_de:\"\u00dcBERSICHT\", pill_en:\"OVERVIEW\" }\n      ],\n      stats_de: [\n        { label:\"Neue ABD Auftr\u00e4ge\", value:\"4\" },\n        { label:\"ABD in Bearbeitung\", value:\"7\" },\n        { label:\"Freigaben heute\", value:\"3\" },\n        { label:\"\u00d8 Bearbeitungszeit\", value:\"<span>18 Min<\/span>\" }\n      ],\n      stats_en: [\n        { label:\"New ABD Jobs\", value:\"4\" },\n        { label:\"ABD Processing\", value:\"7\" },\n        { label:\"Releases Today\", value:\"3\" },\n        { label:\"Avg Processing\", value:\"<span>18 min<\/span>\" }\n      ],\n      jobs_de: [\n        { id:\"ABD-78190\", client:\"TyreScrapPortal Export\", route:\"DE \u2192 Westafrika\", status:\"ABD erstellt\", tag:\"green\", mrn:\"26DE9988A1B2C3D4E5\" },\n        { id:\"ABD-78204\", client:\"TyreScrapPortal Export\", route:\"DE \u2192 Ghana\", status:\"R\u00fcckfrage offen\", tag:\"yellow\", mrn:\"26DE7712Q7W8E9R1T2\" },\n        { id:\"ABD-78211\", client:\"TyreScrapPortal Export\", route:\"DE \u2192 Senegal\", status:\"In Bearbeitung\", tag:\"green\", mrn:\"26DE1122AABBCCDDEE\" }\n      ],\n      jobs_en: [\n        { id:\"ABD-78190\", client:\"TyreScrapPortal Export\", route:\"DE \u2192 West Africa\", status:\"ABD created\", tag:\"green\", mrn:\"26DE9988A1B2C3D4E5\" },\n        { id:\"ABD-78204\", client:\"TyreScrapPortal Export\", route:\"DE \u2192 Ghana\", status:\"Inquiry open\", tag:\"yellow\", mrn:\"26DE7712Q7W8E9R1T2\" },\n        { id:\"ABD-78211\", client:\"TyreScrapPortal Export\", route:\"DE \u2192 Senegal\", status:\"Processing\", tag:\"green\", mrn:\"26DE1122AABBCCDDEE\" }\n      ]\n    }\n  };\n\n  function setLang(lang){\n    STATE.lang = lang || \"de\";\n    langBtns.forEach(function(b){\n      b.classList.toggle(\"active\", b.getAttribute(\"data-lang\") === STATE.lang);\n    });\n\n    var t = TXT[STATE.lang];\n\n    $(\"tspPD_maskTitle\").textContent = t.maskTitle;\n    $(\"tspPD_maskSub\").textContent = t.maskSub;\n    $(\"tspPD_cardForwarderTitle\").textContent = t.fTitle;\n    $(\"tspPD_cardForwarderText\").textContent = t.fText;\n    $(\"tspPD_cardForwarderCTA\").textContent = t.open;\n    $(\"tspPD_cardCustomsTitle\").textContent = t.cTitle;\n    $(\"tspPD_cardCustomsText\").textContent = t.cText;\n    $(\"tspPD_cardCustomsCTA\").textContent = t.open;\n    $(\"tspPD_maskFoot\").textContent = t.foot;\n\n    $(\"tspPD_topTitle\").textContent = t.topTitle;\n    $(\"tspPD_topSub\").textContent = t.topSub;\n\n    $(\"tspPD_roleForwarder\").textContent = t.roleForwarder;\n    $(\"tspPD_roleCustoms\").textContent = t.roleCustoms;\n\n    $(\"tspPD_tipTitle\").textContent = t.tipTitle;\n    $(\"tspPD_actionTitle\").textContent = t.actionTitle;\n    $(\"tspPD_actionSub\").textContent = t.actionSub;\n\n    $(\"tspPD_back\").textContent = t.back;\n    $(\"tspPD_reset\").textContent = t.reset;\n\n    $(\"tspPD_pdfHint\").textContent = t.pdfHint;\n    $(\"tspPD_pdfOk\").textContent = t.pdfClose;\n\n    \/\/ rerender if demo open\n    if(STATE.role){\n      setRole(STATE.role, true);\n    }\n  }\n\n  langBtns.forEach(function(b){\n    b.addEventListener(\"click\", function(){\n      setLang(b.getAttribute(\"data-lang\"));\n    });\n  });\n\n  function getNavItems(role){\n    return DATA[role].nav;\n  }\n\n  function getJobs(role){\n    return (STATE.lang===\"de\" ? DATA[role].jobs_de : DATA[role].jobs_en);\n  }\n\n  function getStats(role){\n    return (STATE.lang===\"de\" ? DATA[role].stats_de : DATA[role].stats_en);\n  }\n\n  function setRole(role, keepTab){\n    STATE.role = role;\n\n    var jobs = getJobs(role);\n    if(!STATE.selectedJob || !keepTab) STATE.selectedJob = jobs[0].id;\n\n    var navItems = getNavItems(role);\n    if(!STATE.tab || !keepTab) STATE.tab = navItems[0].key;\n\n    roleBtns.forEach(function(b){\n      b.classList.toggle(\"active\", b.getAttribute(\"data-role\") === role);\n    });\n\n    badge.textContent = DATA[role].badge;\n    sideTitle.textContent = (STATE.lang===\"de\" ? DATA[role].sideTitle_de : DATA[role].sideTitle_en);\n    tip.innerHTML = (STATE.lang===\"de\" ? DATA[role].tip_de : DATA[role].tip_en);\n\n    renderNav();\n    renderStats();\n    renderContent();\n  }\n\n  function renderNav(){\n    nav.innerHTML = \"\";\n    var navItems = getNavItems(STATE.role);\n\n    navItems.forEach(function(item){\n      var btn = document.createElement(\"button\");\n      btn.type = \"button\";\n      btn.className = \"tspPD-navBtn\" + (STATE.tab === item.key ? \" active\" : \"\");\n      btn.innerHTML = '<span>'+(STATE.lang===\"de\" ? item.label_de : item.label_en)+'<\/span><span class=\"tspPD-pill\">'+(STATE.lang===\"de\" ? item.pill_de : item.pill_en)+'<\/span>';\n      btn.addEventListener(\"click\", function(){\n        STATE.tab = item.key;\n        renderNav();\n        renderContent();\n      });\n      nav.appendChild(btn);\n    });\n  }\n\n  function renderStats(){\n    stats.innerHTML = \"\";\n    getStats(STATE.role).forEach(function(s){\n      var div = document.createElement(\"div\");\n      div.className = \"tspPD-stat\";\n      div.innerHTML = '<div class=\"tspPD-statLabel\">'+s.label+'<\/div><div class=\"tspPD-statValue\">'+s.value+'<\/div>';\n      stats.appendChild(div);\n    });\n  }\n\n  function getSelectedJob(){\n    var list = getJobs(STATE.role);\n    for(var i=0;i<list.length;i++){\n      if(list[i].id === STATE.selectedJob) return list[i];\n    }\n    return list[0];\n  }\n\n  function renderDocsList(){\n    var t = TXT[STATE.lang];\n    var docs = getDocsAlways();\n    var html = '<div class=\"tspPD-docs\">';\n    docs.forEach(function(d){\n      html += `\n        <div class=\"tspPD-doc\">\n          <div class=\"tspPD-docLeft\">\n            <div class=\"tspPD-docIcon\">PDF<\/div>\n            <div>\n              <div class=\"tspPD-docName\">${d.name}<\/div>\n              <div class=\"tspPD-docMeta\">${d.meta}<\/div>\n            <\/div>\n          <\/div>\n          <button type=\"button\" class=\"tspPD-docBtn tspPD-docOpen\" data-title=\"${d.name}\">${t.btnView}<\/button>\n        <\/div>\n      `;\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  function renderPhotoGrid(){\n    var t = TXT[STATE.lang];\n    if(STATE.role !== \"forwarder\") return \"\";\n    return `\n      <div class=\"tspPD-h2\" style=\"margin-top:14px;\">${t.labelPhotos}<\/div>\n      <div class=\"tspPD-photoGrid\">\n        <div class=\"tspPD-photo\"><div class=\"tspPD-photoLabel\">${STATE.lang===\"de\" ? \"Verladung 1\" : \"Loading 1\"}<\/div><\/div>\n        <div class=\"tspPD-photo\"><div class=\"tspPD-photoLabel\">${STATE.lang===\"de\" ? \"Verladung 2\" : \"Loading 2\"}<\/div><\/div>\n        <div class=\"tspPD-photo\"><div class=\"tspPD-photoLabel\">${STATE.lang===\"de\" ? \"Container Seal\" : \"Container Seal\"}<\/div><\/div>\n      <\/div>\n    `;\n  }\n\n  function renderTracking(){\n    var t = TXT[STATE.lang];\n    var job = getSelectedJob();\n    return `\n      <div class=\"tspPD-h2\">${t.hTracking}<\/div>\n      <div class=\"tspPD-card\">\n        <div class=\"tspPD-row\">\n          <div>\n            <div class=\"tspPD-rowTitle\">${job.id} \u00b7 ${job.route}<\/div>\n            <div class=\"tspPD-rowSub\">\n              ${t.labelStatus}: <strong>${job.status}<\/strong> \u00b7 ${t.labelLastUpdate}: <strong>${t.labelAgo}<\/strong>\n            <\/div>\n          <\/div>\n          <div class=\"tspPD-tag green\">${t.labelLive}<\/div>\n        <\/div>\n\n        <div class=\"tspPD-track\">\n          <div class=\"tspPD-rowTitle\">${t.labelGPS}<\/div>\n          <div class=\"tspPD-trackLine\"><div class=\"tspPD-trackProg\"><\/div><\/div>\n          <div class=\"tspPD-trackMeta\">\n            <span>${t.labelStart}: Bremen<\/span>\n            <span>${t.labelCurrent}: A1 \/ KM 183<\/span>\n            <span>${t.labelDestination}: Rotterdam<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"tspPD-btnRow\">\n          <button class=\"tspPD-btn primary\" type=\"button\">${t.btnUpdateStatus}<\/button>\n          <button class=\"tspPD-btn ghost\" type=\"button\">${t.btnExportTracking}<\/button>\n          <button class=\"tspPD-btn ghost\" type=\"button\">${t.btnContactDriver}<\/button>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function renderBilling(){\n    var t = TXT[STATE.lang];\n\n    if(STATE.role === \"forwarder\"){\n      return `\n        <div class=\"tspPD-h2\">${t.hBillingForwarder}<\/div>\n        <div class=\"tspPD-card\">\n          <div class=\"tspPD-row\">\n            <div>\n              <div class=\"tspPD-rowTitle\">${t.billMonth}<\/div>\n              <div class=\"tspPD-rowSub\">${t.billForwarderSub}<\/div>\n            <\/div>\n            <div class=\"tspPD-tag green\">OK<\/div>\n          <\/div>\n\n          <div class=\"tspPD-row\">\n            <div><div class=\"tspPD-rowTitle\">JOB-TRP-2049<\/div><div class=\"tspPD-rowSub\">${t.labelStatus}: ${t.labelPaid}<\/div><\/div>\n            <div class=\"tspPD-tag green\">${t.labelPaid}<\/div>\n          <\/div>\n\n          <div class=\"tspPD-row\">\n            <div><div class=\"tspPD-rowTitle\">JOB-TRP-2056<\/div><div class=\"tspPD-rowSub\">${t.labelStatus}: ${t.labelOpen}<\/div><\/div>\n            <div class=\"tspPD-tag yellow\">${t.labelOpen}<\/div>\n          <\/div>\n\n          <div class=\"tspPD-btnRow\">\n            <button class=\"tspPD-btn primary\" type=\"button\">${t.btnExportBilling}<\/button>\n            <button class=\"tspPD-btn ghost\" type=\"button\">${t.btnMarkPaid}<\/button>\n          <\/div>\n        <\/div>\n      `;\n    }\n\n    return `\n      <div class=\"tspPD-h2\">${t.hBillingCustoms}<\/div>\n      <div class=\"tspPD-card\">\n        <div class=\"tspPD-row\">\n          <div><div class=\"tspPD-rowTitle\">${t.billMonth}<\/div><div class=\"tspPD-rowSub\">${t.billCustomsSub}<\/div><\/div>\n          <div class=\"tspPD-tag green\">OK<\/div>\n        <\/div>\n\n        <div class=\"tspPD-row\">\n          <div><div class=\"tspPD-rowTitle\">ABD-78190<\/div><div class=\"tspPD-rowSub\">${t.labelStatus}: ${t.labelPaid}<\/div><\/div>\n          <div class=\"tspPD-tag green\">${t.labelPaid}<\/div>\n        <\/div>\n\n        <div class=\"tspPD-row\">\n          <div><div class=\"tspPD-rowTitle\">ABD-78204<\/div><div class=\"tspPD-rowSub\">${t.labelStatus}: ${t.labelOpen}<\/div><\/div>\n          <div class=\"tspPD-tag yellow\">${t.labelOpen}<\/div>\n        <\/div>\n\n        <div class=\"tspPD-btnRow\">\n          <button class=\"tspPD-btn primary\" type=\"button\">${t.btnExportBilling}<\/button>\n          <button class=\"tspPD-btn ghost\" type=\"button\">${t.btnMarkPaid}<\/button>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function renderRequests(){\n    var t = TXT[STATE.lang];\n    var isF = (STATE.role === \"forwarder\");\n\n    return `\n      <div class=\"tspPD-h2\">${isF ? t.hRequestsForwarder : t.hRequestsCustoms}<\/div>\n      <div class=\"tspPD-card\">\n        <div class=\"tspPD-row\">\n          <div>\n            <div class=\"tspPD-rowTitle\">${isF ? t.req1F_title : t.req1C_title}<\/div>\n            <div class=\"tspPD-rowSub\">${isF ? t.req1F_sub : t.req1C_sub}<\/div>\n          <\/div>\n          <div class=\"tspPD-tag green\">${t.labelNew}<\/div>\n        <\/div>\n\n        <div class=\"tspPD-row\">\n          <div>\n            <div class=\"tspPD-rowTitle\">${isF ? t.req2F_title : t.req2C_title}<\/div>\n            <div class=\"tspPD-rowSub\">${isF ? t.req2F_sub : t.req2C_sub}<\/div>\n          <\/div>\n          <div class=\"tspPD-tag yellow\">${t.labelOpen}<\/div>\n        <\/div>\n\n        <div class=\"tspPD-btnRow\">\n          <button class=\"tspPD-btn primary\" type=\"button\">${t.btnAccept}<\/button>\n          <button class=\"tspPD-btn ghost\" type=\"button\">${t.btnDetails}<\/button>\n          <button class=\"tspPD-btn ghost\" type=\"button\">${t.btnReject}<\/button>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function renderQuestions(){\n    var t = TXT[STATE.lang];\n    return `\n      <div class=\"tspPD-h2\">${t.hQuestions}<\/div>\n      <div class=\"tspPD-card\">\n        <div class=\"tspPD-row\">\n          <div><div class=\"tspPD-rowTitle\">${t.q1_title}<\/div><div class=\"tspPD-rowSub\">${t.q1_sub}<\/div><\/div>\n          <div class=\"tspPD-tag yellow\">${t.qNew}<\/div>\n        <\/div>\n        <div class=\"tspPD-row\">\n          <div><div class=\"tspPD-rowTitle\">${t.q2_title}<\/div><div class=\"tspPD-rowSub\">${t.q2_sub}<\/div><\/div>\n          <div class=\"tspPD-tag red\">${t.qUrgent}<\/div>\n        <\/div>\n        <div class=\"tspPD-btnRow\">\n          <button class=\"tspPD-btn primary\" type=\"button\">${t.btnSendAnswer}<\/button>\n          <button class=\"tspPD-btn ghost\" type=\"button\">${t.btnCloseTicket}<\/button>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function renderDocsTab(){\n    var t = TXT[STATE.lang];\n    return `\n      <div class=\"tspPD-h2\">${t.hDocs}<\/div>\n      <div class=\"tspPD-card\">\n        <div class=\"tspPD-row\">\n          <div>\n            <div class=\"tspPD-rowTitle\">${STATE.lang===\"de\" ? \"Export Dokumente\" : \"Export Documents\"}<\/div>\n            <div class=\"tspPD-rowSub\">${STATE.lang===\"de\" ? \"Alle Pflichtdokumente sind strukturiert abrufbar.\" : \"All required documents are available in a structured way.\"}<\/div>\n          <\/div>\n          <div class=\"tspPD-tag green\">${t.labelPack}<\/div>\n        <\/div>\n        ${renderDocsList()}\n        <div class=\"tspPD-btnRow\">\n          <button class=\"tspPD-btn primary\" type=\"button\">${t.btnDownloadPack}<\/button>\n          <button class=\"tspPD-btn ghost\" type=\"button\">${t.btnAddDoc}<\/button>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function renderMRNTab(){\n    var t = TXT[STATE.lang];\n    var job = getSelectedJob();\n    return `\n      <div class=\"tspPD-h2\">${t.hMRN}<\/div>\n      <div class=\"tspPD-card\">\n        <div class=\"tspPD-row\">\n          <div>\n            <div class=\"tspPD-rowTitle\">${STATE.lang===\"de\" ? \"Aktiver Auftrag\" : \"Active job\"}: ${job.id}<\/div>\n            <div class=\"tspPD-rowSub\">${t.labelMRN}: <strong>${job.mrn}<\/strong> \u00b7 ${t.labelStatus}: <strong>${job.status}<\/strong><\/div>\n          <\/div>\n          <div class=\"tspPD-tag green\">${t.labelMRN}<\/div>\n        <\/div>\n\n        <div class=\"tspPD-row\">\n          <div><div class=\"tspPD-rowTitle\">ABD PDF<\/div><div class=\"tspPD-rowSub\">${STATE.lang===\"de\" ? \"Automatisch generiert & gespeichert\" : \"Automatically generated & stored\"}<\/div><\/div>\n          <button class=\"tspPD-docBtn tspPD-docOpen\" type=\"button\" data-title=\"ABD_${job.id}.pdf\">${t.btnView}<\/button>\n        <\/div>\n\n        <div class=\"tspPD-btnRow\">\n          <button class=\"tspPD-btn primary\" type=\"button\">${t.btnResendABD}<\/button>\n          <button class=\"tspPD-btn ghost\" type=\"button\">${t.btnCheckStatus}<\/button>\n        <\/div>\n      <\/div>\n    `;\n  }\n\n  function renderJobs(){\n    var t = TXT[STATE.lang];\n    var list = getJobs(STATE.role);\n\n    var html = '<div class=\"tspPD-h2\">'+(STATE.role===\"forwarder\" ? t.hJobsForwarder : t.hJobsCustoms)+'<\/div><div class=\"tspPD-card\">';\n    list.forEach(function(j){\n      var active = (j.id === STATE.selectedJob) ? 'style=\"background:rgba(10,168,79,0.12);border-radius:12px;padding:10px 10px;\"' : '';\n      html += `\n        <div class=\"tspPD-row\" ${active}>\n          <div>\n            <div class=\"tspPD-rowTitle\">${j.id} \u00b7 ${j.route}<\/div>\n            <div class=\"tspPD-rowSub\">${\n              STATE.role===\"forwarder\"\n              ? (t.labelETA+': <strong>'+j.eta+'<\/strong> \u00b7 '+t.labelContainer+': <strong>'+j.container+'<\/strong> \u00b7 '+j.volume)\n              : (t.labelClient+': <strong>'+j.client+'<\/strong> \u00b7 '+t.labelMRN+': <strong>'+j.mrn+'<\/strong>')\n            }<\/div>\n          <\/div>\n          <div class=\"tspPD-tag ${j.tag}\">${j.status}<\/div>\n        <\/div>\n        <div class=\"tspPD-btnRow\" style=\"margin:8px 0 14px;\">\n          <button type=\"button\" class=\"tspPD-btn ghost tspPD-openJob\" data-job=\"${j.id}\">\n            ${t.btnOpenJob}\n          <\/button>\n        <\/div>\n      `;\n    });\n    html += '<\/div>';\n\n    var job = getSelectedJob();\n\n    html += `\n      <div class=\"tspPD-h2\" style=\"margin-top:14px;\">${STATE.lang===\"de\" ? \"Auftragsdetail\" : \"Job details\"}: ${job.id}<\/div>\n      <div class=\"tspPD-card\">\n        <div class=\"tspPD-row\">\n          <div>\n            <div class=\"tspPD-rowTitle\">${job.route}<\/div>\n            <div class=\"tspPD-rowSub\">${\n              STATE.role===\"forwarder\"\n                ? (t.labelContainer+': <strong>'+job.container+'<\/strong> \u00b7 '+job.volume+' \u00b7 '+t.labelETA+': <strong>'+job.eta+'<\/strong>')\n                : (t.labelMRN+': <strong>'+job.mrn+'<\/strong> \u00b7 '+t.labelStatus+': <strong>'+job.status+'<\/strong>')\n            }<\/div>\n          <\/div>\n          <div class=\"tspPD-tag green\">${t.labelDetail}<\/div>\n        <\/div>\n\n        <div class=\"tspPD-h2\" style=\"margin-top:12px;\">${t.labelDocsAlways}<\/div>\n        ${renderDocsList()}\n\n        ${renderPhotoGrid()}\n\n        ${STATE.role===\"customs\" ? `\n          <div class=\"tspPD-h2\" style=\"margin-top:14px;\">${t.labelStatusLog}<\/div>\n          <div class=\"tspPD-card\">\n            <div class=\"tspPD-row\"><div><div class=\"tspPD-rowTitle\">09:12<\/div><div class=\"tspPD-rowSub\">${STATE.lang===\"de\" ? \"Unterlagen erhalten\" : \"Documents received\"}<\/div><\/div><div class=\"tspPD-tag green\">OK<\/div><\/div>\n            <div class=\"tspPD-row\"><div><div class=\"tspPD-rowTitle\">09:21<\/div><div class=\"tspPD-rowSub\">${STATE.lang===\"de\" ? \"ABD erstellt (ATLAS)\" : \"ABD created (ATLAS)\"}<\/div><\/div><div class=\"tspPD-tag green\">OK<\/div><\/div>\n            <div class=\"tspPD-row\"><div><div class=\"tspPD-rowTitle\">09:28<\/div><div class=\"tspPD-rowSub\">${STATE.lang===\"de\" ? \"MRN vergeben\" : \"MRN assigned\"}<\/div><\/div><div class=\"tspPD-tag green\">OK<\/div><\/div>\n            <div class=\"tspPD-row\"><div><div class=\"tspPD-rowTitle\">09:32<\/div><div class=\"tspPD-rowSub\">${STATE.lang===\"de\" ? \"Freigabe best\u00e4tigt\" : \"Release confirmed\"}<\/div><\/div><div class=\"tspPD-tag green\">OK<\/div><\/div>\n          <\/div>\n        ` : \"\"}\n\n        <div class=\"tspPD-btnRow\" style=\"margin-top:14px;\">\n          <button type=\"button\" class=\"tspPD-btn primary\">${t.btnUpdateStatus}<\/button>\n          <button type=\"button\" class=\"tspPD-btn ghost\">${t.btnComment}<\/button>\n          <button type=\"button\" class=\"tspPD-btn ghost\">${t.btnAddUpload}<\/button>\n        <\/div>\n      <\/div>\n    `;\n\n    return html;\n  }\n\n  function renderContent(){\n    var tab = STATE.tab;\n\n    if(STATE.role === \"forwarder\"){\n      if(tab === \"requests\"){ content.innerHTML = renderRequests(); }\n      else if(tab === \"jobs\"){ content.innerHTML = renderJobs(); }\n      else if(tab === \"tracking\"){ content.innerHTML = renderTracking(); }\n      else if(tab === \"docs\"){ content.innerHTML = renderDocsTab(); }\n      else if(tab === \"billing\"){ content.innerHTML = renderBilling(); }\n    }\n\n    if(STATE.role === \"customs\"){\n      if(tab === \"customs_jobs\"){ content.innerHTML = renderRequests(); }\n      else if(tab === \"mrn\"){ content.innerHTML = renderMRNTab(); }\n      else if(tab === \"questions\"){ content.innerHTML = renderQuestions(); }\n      else if(tab === \"docs\"){ content.innerHTML = renderDocsTab(); }\n      else if(tab === \"billing\"){ content.innerHTML = renderBilling(); }\n    }\n\n    \/\/ attach events\n    content.querySelectorAll(\".tspPD-openJob\").forEach(function(btn){\n      btn.addEventListener(\"click\", function(){\n        STATE.selectedJob = btn.getAttribute(\"data-job\");\n        renderContent();\n      });\n    });\n\n    content.querySelectorAll(\".tspPD-docOpen\").forEach(function(btn){\n      btn.addEventListener(\"click\", function(){\n        openPdf(btn.getAttribute(\"data-title\"));\n      });\n    });\n  }\n\n  function openDashboard(role){\n    mask.style.display = \"none\";\n    topBar.style.display = \"flex\";\n    shell.style.display = \"flex\";\n    setRole(role);\n  }\n\n  startBtns.forEach(function(b){\n    b.addEventListener(\"click\", function(){\n      openDashboard(b.getAttribute(\"data-start\"));\n    });\n  });\n\n  roleBtns.forEach(function(b){\n    b.addEventListener(\"click\", function(){\n      setRole(b.getAttribute(\"data-role\"), true);\n    });\n  });\n\n  if(backBtn){\n    backBtn.addEventListener(\"click\", function(){\n      shell.style.display = \"none\";\n      topBar.style.display = \"none\";\n      mask.style.display = \"block\";\n    });\n  }\n\n  if(resetBtn){\n    resetBtn.addEventListener(\"click\", function(){\n      openDashboard(STATE.role || \"forwarder\");\n    });\n  }\n\n  \/\/ init\n  setLang(\"de\");\n\n})();\n<\/script>\n\n\n\n<div style=\"max-width: 1200px; margin: 0 auto; padding: 30px 15px; font-family: Arial, sans-serif; color: #1a1a1a;\">\n\n  <!-- \u00dcberschrift -->\n  <div style=\"text-align:center; margin-bottom: 25px;\">\n    <h2 style=\"font-size: 28px; margin: 0 0 10px; font-weight: 800;\">\n      Warum sich eine Anmeldung bei <span style=\"color:#0aa84f;\">TyreScrapPortal<\/span> lohnt\n    <\/h2>\n    <p style=\"max-width: 850px; margin: 0 auto; font-size: 16px; line-height: 1.5; color: #444;\">\n      Die B2B-Plattform f\u00fcr den Reifen- und Gummirecycling-Markt. Transparent, effizient und auf regelm\u00e4\u00dfige Volumen ausgelegt.\n    <\/p>\n  <\/div>\n\n  <!-- Zwei Spalten -->\n  <div style=\"display: flex; flex-wrap: wrap; gap: 20px;\">\n\n    <!-- K\u00c4UFER -->\n    <div style=\"flex: 1; min-width: 280px; background: #ffffff; border: 1px solid #e6e6e6; border-radius: 14px; padding: 22px; box-shadow: 0 2px 14px rgba(0,0,0,0.05); display:flex; flex-direction:column;\">\n      \n      <div style=\"display:flex; align-items:center; gap:10px; margin-bottom: 10px;\">\n        <div style=\"width: 40px; height: 40px; border-radius: 10px; background:#e9f8ef; display:flex; align-items:center; justify-content:center; font-size:18px;\">\n          \ud83d\uded2\n        <\/div>\n        <h3 style=\"margin:0; font-size: 20px; font-weight: 800;\">\n          F\u00fcr K\u00e4ufer\n        <\/h3>\n      <\/div>\n\n      <p style=\"margin: 0 0 14px; color:#444; line-height:1.5;\">\n        Erhalten Sie direkten Zugriff auf verf\u00fcgbare Angebote und sichern Sie sich eine regelm\u00e4\u00dfige Versorgung mit Reifenballen und Recyclingmaterial.\n      <\/p>\n\n      <ul style=\"padding-left: 18px; margin: 0; line-height: 1.7; color:#222;\">\n        <li><strong>Live-Angebote:<\/strong> aktuelle Verf\u00fcgbarkeiten von Reifenballen und Gummischrott.<\/li>\n        <li><strong>Regelm\u00e4\u00dfige Volumen:<\/strong> kontinuierliche Lieferm\u00f6glichkeiten statt Einzelgesch\u00e4fte.<\/li>\n        <li><strong>Gepr\u00fcfte Verk\u00e4ufer:<\/strong> strukturierte Anmeldung und transparente Prozesse.<\/li>\n        <li><strong>Einfache Beschaffung:<\/strong> klare Spezifikationen und direkte Kommunikation.<\/li>\n        <li><strong>Logistik & Export:<\/strong> Unterst\u00fctzung bei Verschiffung und Exportdokumenten.<\/li>\n      <\/ul>\n    <\/div>\n\n    <!-- VERK\u00c4UFER -->\n    <div style=\"flex: 1; min-width: 280px; background: #ffffff; border: 1px solid #e6e6e6; border-radius: 14px; padding: 22px; box-shadow: 0 2px 14px rgba(0,0,0,0.05); display:flex; flex-direction:column;\">\n      \n      <div style=\"display:flex; align-items:center; gap:10px; margin-bottom: 10px;\">\n        <div style=\"width: 40px; height: 40px; border-radius: 10px; background:#e9f8ef; display:flex; align-items:center; justify-content:center; font-size:18px;\">\n          \u267b\ufe0f\n        <\/div>\n        <h3 style=\"margin:0; font-size: 20px; font-weight: 800;\">\n          F\u00fcr Verk\u00e4ufer\n        <\/h3>\n      <\/div>\n\n      <p style=\"margin: 0 0 14px; color:#444; line-height:1.5;\">\n        Verkaufen Sie schneller, planbarer und an gepr\u00fcfte Abnehmer \u2013 national und international.\n      <\/p>\n\n      <ul style=\"padding-left: 18px; margin: 0; line-height: 1.7; color:#222;\">\n        <li><strong>Mehr Reichweite:<\/strong> Zugang zu aktiven Recycling- und Exportk\u00e4ufern.<\/li>\n        <li><strong>Schnellere Abschl\u00fcsse:<\/strong> Angebote einstellen und direkt Anfragen erhalten.<\/li>\n        <li><strong>H\u00f6here Planungssicherheit:<\/strong> Fokus auf regelm\u00e4\u00dfige Abnahmen.<\/li>\n        <li><strong>Weniger Aufwand:<\/strong> strukturierte Abl\u00e4ufe und transparente Kommunikation.<\/li>\n        <li><strong>Export- & Zollunterst\u00fctzung:<\/strong> Hilfe bei Dokumenten und Versand.<\/li>\n      <\/ul>\n    <\/div>\n\n  <\/div>\n\n  <!-- Vertrauensbereich + WhatsApp\/Call -->\n  <div style=\"margin-top: 24px; padding: 18px; border-radius: 14px; background: #f7fff9; border: 1px solid #d8f3e3;\">\n\n    <!-- Animation nur f\u00fcr diese Section -->\n    <style>\n      .tsp-icon-btn {\n        width: 52px;\n        height: 52px;\n        border-radius: 12px;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        font-size: 26px;\n        text-decoration: none;\n        font-weight: 800;\n        box-shadow: 0 6px 18px rgba(0,0,0,0.12);\n        transition: transform 0.2s ease, box-shadow 0.2s ease;\n        animation: tsp-float 1.2s ease-in-out infinite;\n      }\n\n      .tsp-icon-btn:hover {\n        transform: translateY(-3px) scale(1.06);\n        box-shadow: 0 10px 25px rgba(0,0,0,0.18);\n      }\n\n      @keyframes tsp-float {\n        0%   { transform: translateY(0px) scale(1); }\n        50%  { transform: translateY(-4px) scale(1.03); }\n        100% { transform: translateY(0px) scale(1); }\n      }\n\n      .tsp-delay { animation-delay: 0.3s; }\n    <\/style>\n\n    <div style=\"display:flex; flex-wrap:wrap; gap: 15px; justify-content:space-between; align-items:center;\">\n\n      <div style=\"flex:1; min-width:200px;\">\n        <p style=\"margin: 0; font-weight: 800; font-size: 16px;\">\n          \u2705 Transparent \u2022 \u2705 Gepr\u00fcfte Partner \u2022 \u2705 Regelm\u00e4\u00dfige Verf\u00fcgbarkeit\n        <\/p>\n        <p style=\"margin: 6px 0 0; color:#444; line-height:1.5;\">\n          Sie haben Fragen? Kontaktieren Sie uns direkt per WhatsApp oder Telefon \u2013 wir antworten schnell.\n        <\/p>\n      <\/div>\n\n      <div style=\"display:flex; gap:12px; align-items:center; flex-wrap:wrap;\">\n\n        <!-- WhatsApp Icon Button -->\n        <a href=\"https:\/\/wa.me\/491743658041\" target=\"_blank\" rel=\"noopener\"\n           class=\"tsp-icon-btn\"\n           style=\"background:#0aa84f; color:#fff;\"\n           title=\"WhatsApp Chat \u00f6ffnen\">\n          \ud83d\udcac\n        <\/a>\n\n        <!-- Phone Icon Button -->\n        <a href=\"tel:+491743658041\"\n           class=\"tsp-icon-btn tsp-delay\"\n           style=\"background:#ffffff; color:#0aa84f; border:1px solid #0aa84f;\"\n           title=\"Anruf starten\">\n          \ud83d\udcde\n        <\/a>\n\n      <\/div>\n\n    <\/div>\n  <\/div>\n\n<\/div>\n\n\n\n<div class=\"content-block\" id=\"block2\"> \n  <h2 class=\"section-title\">Funktionsweise und Ablauf f\u00fcr alle Parteien<\/h2>\n\n  <div class=\"accordion\">\n\n    <!-- K\u00e4ufer -->\n    <button class=\"accordion-btn tsp-uniform-btn\" data-role=\"buyer\">\ud83d\uded2 K\u00e4ufer <span class=\"arrow\">\u25bc<\/span><\/button>\n    <div class=\"accordion-content\" data-role=\"buyer\">\n      <button class=\"close-panel-btn\" type=\"button\" aria-label=\"Schlie\u00dfen\">\u2715<\/button>\n\n      <div class=\"lock-screen\">\n        <p class=\"lock-title\"><strong>Passwort eingeben<\/strong><\/p>\n        <p style=\"margin:6px 0 10px 0; font-size:14px; color:#666;\">\n          Dieser Bereich enth\u00e4lt Prozessdetails f\u00fcr Partner. Bitte Passwort eingeben.\n        <\/p>\n\n        <p class=\"lock-hint\">\n          Hinweis: Das Passwort k\u00f6nnen Sie unten im Feld <strong>\u201eAnfrage senden\u201c<\/strong> anfragen.\n        <\/p>\n\n        <div class=\"lock-row\">\n          <input class=\"lock-input\" type=\"password\" placeholder=\"Passwort\" autocomplete=\"off\" \/>\n          <button class=\"lock-submit\" type=\"button\">Freischalten<\/button>\n        <\/div>\n        <p class=\"lock-error\" aria-live=\"polite\"><\/p>\n      <\/div>\n\n      <div class=\"protected-content\">\n        <p><strong>1. Registrierung und Verifizierung:<\/strong> K\u00e4ufer registrieren sich mit vollst\u00e4ndigen Unternehmensdaten und hinterlegen eine digitale Signatur zur sp\u00e4teren automatisierten Dokumentenerstellung. Nach der Registrierung erfolgt eine interne Pr\u00fcfung. Falls Angaben fehlen oder unklar sind, wird der K\u00e4ufer zur Nachbesserung aufgefordert.<\/p>\n        <p><strong>2. Zugriff auf Inserate und Transportanfragen:<\/strong> Nach erfolgreicher Freischaltung erh\u00e4lt der K\u00e4ufer Zugriff auf Inserate und kann Transportpreisanfragen an die im Portal gelisteten Speditionen senden.<\/p>\n        <p><strong>3. Preis\u00fcbersicht und Transparenz:<\/strong> Speditionen \u00fcbermitteln Transport- und Zusatzkosten (z. B. fr\u00fchester Verladetermin, LKW-Vorlauf, Seefracht, Wiegen, Nebenkosten). Diese Angebote werden im Inserat angezeigt und bleiben bis zum Ablaufdatum sichtbar.<\/p>\n        <p><strong>4. Auswahl der Dienstleister (Spedition & Zollagentur):<\/strong> Vor Abgabe eines verbindlichen Gebots w\u00e4hlt der K\u00e4ufer eine Spedition sowie eine Zollagentur aus. Sofern eine Spedition auch die Verzollung anbietet, kann der K\u00e4ufer diese Option ausw\u00e4hlen.<\/p>\n        <p><strong>5. Gebotsabgabe und Auftragserstellung:<\/strong> Mit Best\u00e4tigung des Gebots wird automatisch ein Auftrag im System erzeugt und dem Verk\u00e4ufer zur Annahme \u00fcbermittelt.<\/p>\n        <p><strong>6. Plattformgeb\u00fchr und Kaufbest\u00e4tigung:<\/strong> Nach Annahme des Gebots durch den Verk\u00e4ufer wird die Ware f\u00fcr <strong>zwei (2) Stunden<\/strong> reserviert. Innerhalb dieser Frist muss die Plattformgeb\u00fchr in H\u00f6he von <strong>19 \u20ac pro Container<\/strong> bezahlt werden. Erfolgt keine Zahlung innerhalb der Frist, wird der Vorgang automatisch storniert und die Ware wieder freigegeben.<\/p>\n        <p><strong>7. Automatisch bereitgestellte Unterlagen nach Kauf (Portal-Dokumente):<\/strong> Nach abgeschlossenem Kauf stellt das Portal den beteiligten Parteien (<strong>K\u00e4ufer, Spedition und Zollagentur<\/strong>) alle relevanten Unterlagen zentral zur Verf\u00fcgung: <strong>Rechnung<\/strong>, <strong>Lieferschein<\/strong>, <strong>Annex VII<\/strong>, <strong>Verwertungsvertrag<\/strong> sowie die im Inserat hinterlegten <strong>Fotos der Ware<\/strong>.<\/p>\n        <p><strong>8. Verladungsnachweise nach tats\u00e4chlicher Verladung:<\/strong> Nach der Verladung l\u00e4dt der Verk\u00e4ufer zus\u00e4tzlich die <strong>Verladungsfotos<\/strong> sowie die <strong>Containernummern<\/strong> und <strong>Siegelnummern<\/strong> im Portal hoch. Diese Informationen werden anschlie\u00dfend ebenfalls im Portal sichtbar bereitgestellt.<\/p>\n        <p><strong>9. Zahlungspflichten und Fristen:<\/strong> Die Zahlung f\u00fcr Ware, Verzollung und Verfrachtung hat fristgerecht gem\u00e4\u00df den im Angebot vereinbarten Zahlungszielen zu erfolgen. Bei erstmaliger Versp\u00e4tung erfolgt eine Zahlungserinnerung. Ab der zweiten Versp\u00e4tung wird eine Mahngeb\u00fchr in H\u00f6he von <strong>2%<\/strong> auf den offenen Betrag erhoben.<\/p>\n      <\/div>\n    <\/div>\n\n    <!-- Verk\u00e4ufer -->\n    <button class=\"accordion-btn tsp-uniform-btn\" data-role=\"seller\">\ud83d\udcbc Verk\u00e4ufer <span class=\"arrow\">\u25bc<\/span><\/button>\n    <div class=\"accordion-content\" data-role=\"seller\">\n      <button class=\"close-panel-btn\" type=\"button\" aria-label=\"Schlie\u00dfen\">\u2715<\/button>\n\n      <div class=\"lock-screen\">\n        <p class=\"lock-title\"><strong>Passwort eingeben<\/strong><\/p>\n        <p style=\"margin:6px 0 10px 0; font-size:14px; color:#666;\">\n          Dieser Bereich enth\u00e4lt Prozessdetails f\u00fcr Partner. Bitte Passwort eingeben.\n        <\/p>\n\n        <p class=\"lock-hint\">\n          Hinweis: Das Passwort k\u00f6nnen Sie unten im Feld <strong>\u201eAnfrage senden\u201c<\/strong> anfragen.\n        <\/p>\n\n        <div class=\"lock-row\">\n          <input class=\"lock-input\" type=\"password\" placeholder=\"Passwort\" autocomplete=\"off\" \/>\n          <button class=\"lock-submit\" type=\"button\">Freischalten<\/button>\n        <\/div>\n        <p class=\"lock-error\" aria-live=\"polite\"><\/p>\n      <\/div>\n\n      <div class=\"protected-content\">\n        <p><strong>1. Benachrichtigung \u00fcber eingehendes Gebot:<\/strong> Der Verk\u00e4ufer erh\u00e4lt eine automatische Mitteilung, sobald ein K\u00e4ufer ein Gebot abgegeben hat. Der Verk\u00e4ufer kann das Gebot akzeptieren oder ablehnen.<\/p>\n        <p><strong>2. Annahme und Reservierung:<\/strong> Mit Annahme des Gebots wird die Ware f\u00fcr den K\u00e4ufer f\u00fcr <strong>zwei (2) Stunden<\/strong> reserviert. In dieser Zeit muss der K\u00e4ufer die Plattformgeb\u00fchr bezahlen, um den Kauf verbindlich abzuschlie\u00dfen.<\/p>\n        <p><strong>3. Start der Abwicklungsphase:<\/strong> Nach erfolgreicher Kaufbest\u00e4tigung wird der Verkauf im Portal als \u201ein Abwicklung\u201c gef\u00fchrt und die Verladeplanung vorbereitet.<\/p>\n        <p><strong>4. Eingabe von Dokumentennummern (Pflicht):<\/strong> Der Verk\u00e4ufer tr\u00e4gt die <strong>Rechnungsnummer<\/strong> sowie die <strong>Lieferscheinnummer<\/strong> im Portal ein.<\/p>\n        <p><strong>5. Automatische Dokumentenbereitstellung durch das Portal:<\/strong> F\u00fcr <strong>K\u00e4ufer, Spedition und Zollagentur<\/strong> stehen dabei <strong>immer<\/strong> zur Verf\u00fcgung: <strong>Rechnung<\/strong>, <strong>Lieferschein<\/strong>, <strong>Annex VII<\/strong>, <strong>Verwertungsvertrag<\/strong> sowie die <strong>Fotos der Ware aus dem Inserat<\/strong>.<\/p>\n        <p><strong>6. Annex VII & Verwertungsvertrag:<\/strong> Das <strong>Annex-VII-Dokument<\/strong> sowie der <strong>Verwertungsvertrag<\/strong> werden automatisch ausgef\u00fcllt und zum Download bereitgestellt. Der Verwertungsvertrag muss vom Lieferempf\u00e4nger unterschrieben und anschlie\u00dfend im Portal hochgeladen werden.<\/p>\n        <p><strong>7. Verladeplanung & best\u00e4tigte Termine:<\/strong> Nach Best\u00e4tigung der m\u00f6glichen Verladungstage werden die entsprechenden <strong>Annex-VII-Dokumente<\/strong> je Verladung automatisch erzeugt.<\/p>\n        <p><strong>8. Verladung: Upload von Verladungsfotos, Container- und Siegelnummern:<\/strong> Nach der tats\u00e4chlichen Verladung l\u00e4dt der Verk\u00e4ufer die <strong>Verladungsfotos<\/strong> sowie die <strong>Containernummern<\/strong> und <strong>Siegelnummern<\/strong> hoch.<\/p>\n        <p><strong>9. Plattformgeb\u00fchr des Verk\u00e4ufers:<\/strong> Die Verk\u00e4ufergeb\u00fchr wird nach <strong>18 Tagen<\/strong> f\u00e4llig. <br><strong>(19 \u20ac pro Container, netto zzgl. USt.)<\/strong><\/p>\n      <\/div>\n    <\/div>\n\n    <!-- Speditionen -->\n    <button class=\"accordion-btn tsp-uniform-btn\" data-role=\"forwarder\">\ud83d\ude9a Speditionen <span class=\"arrow\">\u25bc<\/span><\/button>\n    <div class=\"accordion-content\" data-role=\"forwarder\">\n      <button class=\"close-panel-btn\" type=\"button\" aria-label=\"Schlie\u00dfen\">\u2715<\/button>\n\n      <div class=\"lock-screen\">\n        <p class=\"lock-title\"><strong>Passwort eingeben<\/strong><\/p>\n        <p style=\"margin:6px 0 10px 0; font-size:14px; color:#666;\">\n          Dieser Bereich enth\u00e4lt Prozessdetails f\u00fcr Partner. Bitte Passwort eingeben.\n        <\/p>\n\n        <p class=\"lock-hint\">\n          Hinweis: Das Passwort k\u00f6nnen Sie unten im Feld <strong>\u201eAnfrage senden\u201c<\/strong> anfragen.\n        <\/p>\n\n        <div class=\"lock-row\">\n          <input class=\"lock-input\" type=\"password\" placeholder=\"Passwort\" autocomplete=\"off\" \/>\n          <button class=\"lock-submit\" type=\"button\">Freischalten<\/button>\n        <\/div>\n        <p class=\"lock-error\" aria-live=\"polite\"><\/p>\n      <\/div>\n\n      <!-- \u2705 UPDATED ONLY THIS FORWARDER TEXT -->\n      <div class=\"protected-content\">\n        <p><strong>1. Registrierung & Verifizierung:<\/strong> Speditionen registrieren sich mit vollst\u00e4ndigen Firmendaten. Nach der Registrierung erfolgt eine interne Pr\u00fcfung. Nach Freischaltung wird die Spedition als offizieller Transportpartner im System gelistet.<\/p>\n\n        <p><strong>2. Sichtbarkeit f\u00fcr K\u00e4ufer:<\/strong> Nach erfolgreicher Freischaltung wird die Spedition im Portal f\u00fcr K\u00e4ufer sichtbar und kann bei Inseraten als Transportpartner ausgew\u00e4hlt werden. Ein Kauf kann nur stattfinden, wenn der K\u00e4ufer eine <strong>gelistete Spedition<\/strong> und eine <strong>gelistete Zollagentur<\/strong> ausw\u00e4hlt.<\/p>\n\n        <p><strong>3. Angebotserstellung & Konditionen:<\/strong> Speditionen hinterlegen Transportpreise und Zusatzleistungen im Portal (z. B. Vorlauf, Seefracht, Wiegen, Nebenkosten, fr\u00fchester Verladetermin). Diese Informationen werden dem K\u00e4ufer transparent angezeigt.<\/p>\n\n        <p><strong>4. Automatische Auftragszuweisung nach Kauf:<\/strong> Sobald ein K\u00e4ufer einen Kauf abschlie\u00dft und die Spedition ausw\u00e4hlt, wird automatisch ein Auftrag im System erstellt. Die Spedition erh\u00e4lt eine Benachrichtigung und kann alle relevanten Daten direkt im Portal abrufen.<\/p>\n\n        <p><strong>5. Automatisierte Dokumentenbereitstellung (nach Kauf):<\/strong> Nach einem Kauf stellt das Portal der Spedition und der Zollagentur automatisch alle Unterlagen zentral zur Verf\u00fcgung, u. a. <strong>Rechnung<\/strong>, <strong>Lieferschein<\/strong>, <strong>Annex VII<\/strong>, <strong>Verwertungsvertrag<\/strong> sowie die <strong>Fotos der Ware aus dem Inserat<\/strong>.<\/p>\n\n        <p><strong>6. Bearbeitung & Erg\u00e4nzung der Dokumente:<\/strong> Dokumente werden zentral im Portal bereitgestellt und k\u00f6nnen (je nach Berechtigung) bearbeitet oder erg\u00e4nzt werden. Dadurch arbeiten alle Parteien mit dem gleichen Dokumentenstand und R\u00fcckfragen werden reduziert.<\/p>\n\n        <p><strong>7. Verladungsdaten nach tats\u00e4chlicher Verladung:<\/strong> Nach der Verladung l\u00e4dt der Verk\u00e4ufer <strong>Verladungsfotos<\/strong> sowie <strong>Containernummern<\/strong>, <strong>Siegelnummern<\/strong> und ggf. <strong>Gewichte nach Verladung<\/strong> im Portal hoch. Diese Daten stehen anschlie\u00dfend Spedition und Zollagentur zur Verf\u00fcgung.<\/p>\n\n        <p><strong>8. Weniger Fehler durch automatische Datennutzung:<\/strong> Die Dokumente werden automatisch mit den im Kauf vorhandenen Daten aller Parteien ausgef\u00fcllt (K\u00e4ufer, Verk\u00e4ufer, Spedition, Zollagentur). Dadurch entstehen weniger Fehler, weniger fehlende Angaben und eine schnellere Verzollung und Verfrachtung.<\/p>\n\n        <p><strong>9. Bewertungssystem nach Abschluss:<\/strong> Nach Abschluss eines vollst\u00e4ndigen Prozesses (Kauf \u2192 Transport \u2192 Verzollung \u2192 Export) k\u00f6nnen die beteiligten Parteien bewertet werden. Zuverl\u00e4ssige Speditionen werden dadurch besser platziert und erh\u00f6hen ihre Chancen auf Folgeauftr\u00e4ge.<\/p>\n\n        <p><strong>10. Speditionsgeb\u00fchr:<\/strong> Nach <strong>18 Tagen<\/strong> f\u00e4llig. <br><strong>(29 \u20ac pro Auftrag, netto zzgl. USt.)<\/strong><\/p>\n      <\/div>\n      <!-- \u2705 END UPDATED FORWARDER TEXT -->\n    <\/div>\n\n    <!-- Zollagenturen -->\n    <button class=\"accordion-btn tsp-uniform-btn\" data-role=\"customs\">\ud83d\udec3 Zollagentur <span class=\"arrow\">\u25bc<\/span><\/button>\n    <div class=\"accordion-content\" data-role=\"customs\">\n      <button class=\"close-panel-btn\" type=\"button\" aria-label=\"Schlie\u00dfen\">\u2715<\/button>\n\n      <div class=\"lock-screen\">\n        <p class=\"lock-title\"><strong>Passwort eingeben<\/strong><\/p>\n        <p style=\"margin:6px 0 10px 0; font-size:14px; color:#666;\">\n          Dieser Bereich enth\u00e4lt Prozessdetails f\u00fcr Partner. Bitte Passwort eingeben.\n        <\/p>\n\n        <p class=\"lock-hint\">\n          Hinweis: Das Passwort k\u00f6nnen Sie unten im Feld <strong>\u201eAnfrage senden\u201c<\/strong> anfragen.\n        <\/p>\n\n        <div class=\"lock-row\">\n          <input class=\"lock-input\" type=\"password\" placeholder=\"Passwort\" autocomplete=\"off\" \/>\n          <button class=\"lock-submit\" type=\"button\">Freischalten<\/button>\n        <\/div>\n        <p class=\"lock-error\" aria-live=\"polite\"><\/p>\n      <\/div>\n\n      <div class=\"protected-content\">\n        <p><strong>1. Registrierung und Preisstruktur:<\/strong> Zollagenturen hinterlegen ihre Geb\u00fchren und Konditionen im Portal.<\/p>\n        <p><strong>2. Dokumentenzugriff \u00fcber das Portal (nach Kauf):<\/strong> Im Portal stehen <strong>immer<\/strong> bereit: <strong>Rechnung<\/strong>, <strong>Lieferschein<\/strong>, <strong>Annex VII<\/strong>, <strong>Verwertungsvertrag<\/strong> sowie die <strong>Fotos der Ware aus dem Inserat<\/strong>. Zus\u00e4tzlich werden nach Verladung <strong>Verladungsfotos<\/strong> sowie <strong>Container- und Siegelnummern<\/strong> bereitgestellt.<\/p>\n        <p><strong>3. Durchf\u00fchrung der Verzollung und Freigabe:<\/strong> Die Zollagentur dokumentiert die Freigabe im System.<\/p>\n        <p><strong>4. Plattformgeb\u00fchr:<\/strong> Nach <strong>18 Tagen<\/strong> f\u00e4llig. <br><strong>(4,90 \u20ac pro ABD, netto zzgl. USt.)<\/strong><\/p>\n      <\/div>\n    <\/div>\n\n    <!-- Dokumente-Info: als LETZTES -->\n    <button class=\"doc-toggle-btn tsp-uniform-btn\" id=\"docToggleBtn\">\n      \ud83d\udcc4 Dokumente & Informationen nach dem Kauf <span class=\"doc-arrow\">\u25bc<\/span>\n    <\/button>\n\n    <div class=\"doc-toggle-content\" id=\"docToggleContent\">\n      <p>\n        Nach Abschluss eines Kaufs stellt das TyreScrapPortal allen beteiligten Parteien \u2013\n        <strong>K\u00e4ufer, Spedition und Zollagentur<\/strong> \u2013 die f\u00fcr die Abwicklung relevanten\n        Unterlagen zentral im Portal zur Verf\u00fcgung.\n      <\/p>\n\n      <p><strong>Automatisch bereitgestellt durch das Portal:<\/strong><\/p>\n      <ul class=\"doc-list\">\n        <li><strong>Annex VII<\/strong><\/li>\n        <li><strong>Verwertungsvertrag<\/strong><\/li>\n        <li><strong>Rechnung<\/strong><\/li>\n        <li><strong>Lieferschein<\/strong><\/li>\n        <li><strong>Fotos der Ware aus dem Inserat<\/strong><\/li>\n      <\/ul>\n\n      <p><strong>Nach der tats\u00e4chlichen Verladung durch den Verk\u00e4ufer erg\u00e4nzt:<\/strong><\/p>\n      <ul class=\"doc-list\">\n        <li><strong>Verladungsfotos<\/strong><\/li>\n        <li><strong>Containernummern<\/strong><\/li>\n        <li><strong>Siegelnummern<\/strong><\/li>\n      <\/ul>\n\n      <p class=\"doc-note\">\n        Diese Unterlagen bilden die verbindliche Grundlage f\u00fcr Verladung, Transport und Verzollung\n        und sind nach dem Kauf f\u00fcr alle beteiligten Parteien im Portal abrufbar.\n      <\/p>\n    <\/div>\n\n  <\/div>\n<\/div>\n\n<script>\n  document.addEventListener(\"DOMContentLoaded\", function () {\n\n    \/* \u2705 Uniform width for ALL buttons (desktop capped), 100% on mobile *\/\n    function tspApplyUniformBtnWidth(){\n      const btns = document.querySelectorAll(\".tsp-uniform-btn\");\n      if(!btns.length) return;\n\n      btns.forEach(b => b.style.width = \"\");\n\n      if (window.matchMedia(\"(max-width: 768px)\").matches) {\n        btns.forEach(b => b.style.width = \"100%\");\n        return;\n      }\n\n      const MAX_DESKTOP_WIDTH = 520;\n      let maxW = 0;\n      btns.forEach(b => { maxW = Math.max(maxW, b.offsetWidth); });\n\n      const finalW = Math.min(maxW, MAX_DESKTOP_WIDTH);\n      btns.forEach(b => b.style.width = finalW + \"px\");\n    }\n\n    tspApplyUniformBtnWidth();\n    window.addEventListener(\"resize\", tspApplyUniformBtnWidth);\n\n    \/* Dokumente Button Toggle + Premium Fade + Stagger *\/\n    const docBtn = document.getElementById(\"docToggleBtn\");\n    const docContent = document.getElementById(\"docToggleContent\");\n    const docArrow = docBtn.querySelector(\".doc-arrow\");\n\n    function applyStaggerDelays() {\n      const items = docContent.querySelectorAll(\".doc-list li\");\n      items.forEach((li, idx) => {\n        li.style.setProperty(\"--d\", (idx * 70) + \"ms\");\n      });\n    }\n\n    function animateDocsOpen(){\n      applyStaggerDelays();\n\n      docContent.classList.remove(\"doc-animate-in\");\n      void docContent.offsetWidth;\n      docContent.classList.add(\"doc-animate-in\");\n\n      const items = docContent.querySelectorAll(\".doc-list li\");\n      items.forEach((li) => {\n        li.classList.remove(\"doc-li-in\");\n        void li.offsetWidth;\n        li.classList.add(\"doc-li-in\");\n      });\n    }\n\n    function openDocsProgrammatically(){\n      if(!docContent.classList.contains(\"open\")){\n        docContent.classList.add(\"open\");\n        docArrow.textContent = \"\u25b2\";\n        animateDocsOpen();\n        docBtn.classList.add(\"tsp-doc-glow\");\n        setTimeout(() => docBtn.classList.remove(\"tsp-doc-glow\"), 1200);\n      }\n    }\n\n    docBtn.addEventListener(\"click\", function () {\n      const isOpen = docContent.classList.contains(\"open\");\n      if (isOpen) {\n        docContent.classList.remove(\"open\");\n        docArrow.textContent = \"\u25bc\";\n      } else {\n        docContent.classList.add(\"open\");\n        docArrow.textContent = \"\u25b2\";\n        animateDocsOpen();\n      }\n    });\n\n    if(sessionStorage.getItem(\"tsp_open_docs_after_scroll\") === \"1\"){\n      sessionStorage.removeItem(\"tsp_open_docs_after_scroll\");\n      setTimeout(openDocsProgrammatically, 350);\n    }\n\n    \/* Passwortschutz - OHNE Speicherung *\/\n    const PASSWORDS = {\n      buyer: \"BuyerSP1#\",\n      seller: \"SellerSP2#\",\n      forwarder: \"ForwarderSP3#\",\n      customs: \"CustomSP4#\",\n    };\n\n    const unlocked = { buyer: false, seller: false, forwarder: false, customs: false };\n    const buttons = document.querySelectorAll(\".accordion-btn\");\n\n    function fadeIn(protectedContent) {\n      protectedContent.classList.remove(\"fade-in\");\n      void protectedContent.offsetWidth;\n      protectedContent.classList.add(\"fade-in\");\n    }\n\n    function openPanel(btn, content) {\n      btn.classList.add(\"active\");\n      content.classList.add(\"open\");\n      const arrow = btn.querySelector(\".arrow\");\n      if (arrow) arrow.textContent = \"\u25b2\";\n    }\n\n    function closePanel(btn, content) {\n      btn.classList.remove(\"active\");\n      content.classList.remove(\"open\");\n      const arrow = btn.querySelector(\".arrow\");\n      if (arrow) arrow.textContent = \"\u25bc\";\n    }\n\n    function closeAllExcept(exceptBtn) {\n      buttons.forEach((b) => {\n        const c = b.nextElementSibling;\n        if (b !== exceptBtn) closePanel(b, c);\n      });\n    }\n\n    document.querySelectorAll(\".close-panel-btn\").forEach((closeBtn) => {\n      closeBtn.addEventListener(\"click\", function (e) {\n        e.stopPropagation();\n        const content = closeBtn.closest(\".accordion-content\");\n        const btn = content.previousElementSibling;\n        closePanel(btn, content);\n      });\n    });\n\n    buttons.forEach((btn) => {\n      const role = btn.getAttribute(\"data-role\");\n      const content = btn.nextElementSibling;\n\n      btn.addEventListener(\"click\", function () {\n        const currentlyOpen = content.classList.contains(\"open\");\n\n        closeAllExcept(btn);\n\n        if (currentlyOpen) {\n          closePanel(btn, content);\n          return;\n        }\n\n        openPanel(btn, content);\n\n        const lock = content.querySelector(\".lock-screen\");\n        const protectedContent = content.querySelector(\".protected-content\");\n        const input = content.querySelector(\".lock-input\");\n        const submit = content.querySelector(\".lock-submit\");\n        const error = content.querySelector(\".lock-error\");\n\n        if (unlocked[role]) {\n          lock.style.display = \"none\";\n          protectedContent.style.display = \"block\";\n          fadeIn(protectedContent);\n          return;\n        }\n\n        lock.style.display = \"block\";\n        protectedContent.style.display = \"none\";\n        error.textContent = \"\";\n        input.value = \"\";\n        setTimeout(() => input.focus(), 50);\n\n        function tryUnlock() {\n          if (input.value === PASSWORDS[role]) {\n            unlocked[role] = true;\n            lock.style.display = \"none\";\n            protectedContent.style.display = \"block\";\n            fadeIn(protectedContent);\n            error.textContent = \"\";\n          } else {\n            error.textContent = \"Falsches Passwort. Bitte erneut versuchen.\";\n            lock.classList.remove(\"shake\");\n            void lock.offsetWidth;\n            lock.classList.add(\"shake\");\n            input.focus();\n            input.select();\n          }\n        }\n\n        submit.onclick = tryUnlock;\n        input.onkeydown = (e) => { if (e.key === \"Enter\") tryUnlock(); };\n      });\n    });\n  });\n<\/script>\n\n<style>\n  #block2 {\n    background: linear-gradient(120deg, rgba(92,184,92,0.08), rgba(255,255,255,0.9), rgba(92,184,92,0.07));\n    background-size: 300% 300%;\n    border-radius: 12px;\n    padding: 25px;\n    animation: bgMove 12s ease-in-out infinite;\n  }\n\n  @keyframes bgMove {\n    0% { background-position: 0% 50%; }\n    50% { background-position: 100% 50%; }\n    100% { background-position: 0% 50%; }\n  }\n\n  @keyframes docsFadeUp {\n    0% { opacity: 0; transform: translateY(10px); }\n    100% { opacity: 1; transform: translateY(0); }\n  }\n  .doc-toggle-content.doc-animate-in {\n    animation: docsFadeUp .45s ease both;\n  }\n\n  @keyframes liFade {\n    0% { opacity: 0; transform: translateY(6px); }\n    100% { opacity: 1; transform: translateY(0); }\n  }\n\n  .doc-list li{\n    opacity: 0;\n    transform: translateY(6px);\n  }\n\n  .doc-list li.doc-li-in{\n    animation: liFade .38s ease both;\n    animation-delay: var(--d, 0ms);\n  }\n\n  .section-title {\n    text-align: center;\n    font-size: 2em;\n    color: #333;\n    margin-bottom: 30px;\n  }\n\n  .accordion{\n    display:flex;\n    flex-direction:column;\n    align-items:center;\n  }\n\n  .tsp-uniform-btn{\n    white-space: normal;\n    line-height: 1.2;\n    word-break: break-word;\n  }\n\n  .accordion-btn, .doc-toggle-btn {\n    background-color: #5CB85C;\n    color: white;\n    font-size: 20px;\n    font-weight: bold;\n    padding: 15px;\n    width: 100%;\n    text-align: center;\n    border: none;\n    cursor: pointer;\n    border-radius: 5px;\n    transition: all 0.3s ease;\n    margin: 10px auto;\n    position: relative;\n    box-shadow: 0 6px 14px rgba(0,0,0,0.08);\n    display: block;\n  }\n\n  .accordion-btn:hover, .doc-toggle-btn:hover {\n    background-color: #4CAF50;\n    transform: translateY(-3px);\n    box-shadow: 0 14px 30px rgba(0,0,0,0.12);\n  }\n\n  .accordion-btn.active {\n    background-color: #4CAF50;\n    box-shadow: 0 16px 34px rgba(0,0,0,0.14);\n  }\n\n  .arrow, .doc-arrow {\n    font-size: 18px;\n    margin-left: 10px;\n  }\n\n  .accordion-content {\n    background-color: #f1f1f1;\n    border-radius: 8px;\n    margin-bottom: 15px;\n    font-size: 16px;\n    color: #555;\n    overflow: hidden;\n    max-height: 0;\n    opacity: 0;\n    padding: 0 15px;\n    transition: max-height 0.45s ease, opacity 0.35s ease, padding 0.35s ease;\n    position: relative;\n    width: 100%;\n  }\n\n  .accordion-content.open {\n    max-height: 2000px;\n    opacity: 1;\n    padding: 20px 15px 15px 15px;\n  }\n\n  .close-panel-btn {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n    background: rgba(0,0,0,0.08);\n    border: none;\n    border-radius: 50%;\n    width: 32px;\n    height: 32px;\n    cursor: pointer;\n    font-size: 16px;\n    font-weight: bold;\n    color: #333;\n    transition: 0.25s ease;\n  }\n\n  .close-panel-btn:hover {\n    background: rgba(0,0,0,0.15);\n    transform: scale(1.05);\n  }\n\n  .doc-toggle-content {\n    background: #ffffff;\n    border-left: 5px solid #5CB85C;\n    margin-bottom: 25px;\n    border-radius: 6px;\n    box-shadow: 0 2px 6px rgba(0,0,0,0.05);\n    font-size: 15.5px;\n    color: #333;\n    max-height: 0;\n    opacity: 0;\n    overflow: hidden;\n    padding: 0 20px;\n    transition: all 0.35s ease;\n    width: 100%;\n  }\n\n  .doc-toggle-content.open {\n    padding: 18px 20px;\n    max-height: 1000px;\n    opacity: 1;\n  }\n\n  .tsp-doc-glow{\n    box-shadow: 0 0 0 4px rgba(92,184,92,0.25), 0 16px 34px rgba(0,0,0,0.14) !important;\n    transform: translateY(-2px);\n  }\n\n  .doc-toggle-content ul { margin: 8px 0 14px 20px; }\n  .doc-toggle-content li { margin-bottom: 4px; }\n  .doc-note { margin-top: 10px; font-size: 14.5px; color: #555; }\n\n  .lock-screen{\n    background: #fff;\n    border-radius: 8px;\n    padding: 14px;\n    border: 1px solid rgba(0,0,0,0.08);\n    margin: 0 auto 15px auto;\n    box-sizing: border-box;\n    max-width: 520px;\n    width: 100%;\n  }\n\n  .lock-title { margin: 0 0 10px 0; color: #333; }\n\n  .lock-hint{\n    margin: 0 0 10px 0;\n    font-size: 13px;\n    line-height: 1.45;\n    color: #666;\n  }\n\n  .lock-row {\n    display: flex;\n    gap: 10px;\n    align-items: center;\n    flex-wrap: wrap;\n    width: 100%;\n  }\n\n  .lock-input {\n    flex: 1 1 220px;\n    width: 100%;\n    min-width: 0;\n    padding: 10px 12px;\n    border-radius: 6px;\n    border: 1px solid rgba(0,0,0,0.2);\n    font-size: 15px;\n    outline: none;\n    box-sizing: border-box;\n  }\n\n  .lock-submit {\n    flex: 0 0 auto;\n    padding: 10px 14px;\n    border-radius: 6px;\n    border: none;\n    cursor: pointer;\n    font-weight: 700;\n    background: #5CB85C;\n    color: #fff;\n    box-sizing: border-box;\n  }\n\n  .lock-submit:hover { background: #4CAF50; }\n\n  .lock-error { margin: 10px 0 0 0; color: #b00020; font-weight: 600; }\n\n  @keyframes shakeAnim {\n    0% { transform: translateX(0); }\n    20% { transform: translateX(-6px); }\n    40% { transform: translateX(6px); }\n    60% { transform: translateX(-4px); }\n    80% { transform: translateX(4px); }\n    100% { transform: translateX(0); }\n  }\n\n  .lock-screen.shake { animation: shakeAnim 0.35s ease; }\n\n  @keyframes fadeInUp {\n    0% { opacity: 0; transform: translateY(6px); }\n    100% { opacity: 1; transform: translateY(0); }\n  }\n\n  .protected-content.fade-in {\n    animation: fadeInUp 0.35s ease both;\n  }\n\n  @media (max-width: 768px) {\n    .accordion-btn, .doc-toggle-btn { font-size: 16px; padding: 12px; width: 100% !important; }\n    .lock-screen{ max-width: 100%; }\n    .lock-input { flex: 1 1 100%; }\n    .lock-submit { width: 100%; }\n  }\n<\/style>\n\n\n\n<!-- Begin Gallery Block (Single Slider) -->\n<div class=\"tsp-gallery\">\n  <div class=\"tsp-gallery-slider\" id=\"tspGallerySlider\">\n    <img decoding=\"async\" src=\"https:\/\/tyrescrapportal.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-17.-Dez.-2025-10_43_24.png\" alt=\"Portal Ansicht 1\" class=\"tsp-slide\">\n    <img decoding=\"async\" src=\"https:\/\/tyrescrapportal.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-17.-Dez.-2025-10_54_32.png\" alt=\"Portal Ansicht 2\" class=\"tsp-slide\">\n    <img decoding=\"async\" src=\"https:\/\/tyrescrapportal.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-17.-Dez.-2025-11_03_27.jpg\" alt=\"Portal Ansicht 3\" class=\"tsp-slide\">\n    <img decoding=\"async\" src=\"https:\/\/tyrescrapportal.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-17.-Dez.-2025-11_10_10.png\" alt=\"Portal Ansicht 4\" class=\"tsp-slide\">\n  <\/div>\n\n  <div class=\"tsp-gallery-controls\">\n    <button class=\"tsp-gallery-btn\" id=\"tspPrevBtn\" type=\"button\">\u2039 Zur\u00fcck<\/button>\n    <button class=\"tsp-gallery-btn\" id=\"tspNextBtn\" type=\"button\">Weiter \u203a<\/button>\n    <button class=\"tsp-gallery-btn tsp-secondary\" id=\"tspAutoBtn\" type=\"button\">Auto<\/button>\n  <\/div>\n<\/div>\n\n<!-- Modal -->\n<div id=\"tspModal\" class=\"tsp-modal\" aria-hidden=\"true\">\n  <span class=\"tsp-modal-close\" id=\"tspModalClose\" role=\"button\" aria-label=\"Schlie\u00dfen\">\u00d7<\/span>\n  <img decoding=\"async\" id=\"tspModalImage\" class=\"tsp-modal-content\" src=\"\" alt=\"\">\n<\/div>\n\n<style>\n  .tsp-gallery{\n    width: 92%;\n    max-width: 900px;\n    margin: 40px auto;\n    border-radius: 16px;\n    overflow: hidden;\n    background:#fff;\n    box-shadow: 0 14px 40px rgba(0,0,0,0.12);\n  }\n\n  .tsp-gallery-slider{\n    display:flex;\n    transition: transform 0.55s ease-in-out;\n    width:100%;\n  }\n\n  .tsp-slide{\n    width:100%;\n    flex-shrink:0;\n    object-fit: cover;\n    cursor:pointer;\n    display:block;\n  }\n\n  .tsp-gallery-controls{\n    display:flex;\n    justify-content:center;\n    gap:10px;\n    padding:14px;\n    background:rgba(255,255,255,0.95);\n    border-top:1px solid rgba(0,0,0,0.06);\n  }\n\n  .tsp-gallery-btn{\n    border:none;\n    padding:10px 16px;\n    border-radius:12px;\n    cursor:pointer;\n    font-weight:900;\n    background:#5CB85C;\n    color:#fff;\n    transition:.25s ease;\n  }\n  .tsp-gallery-btn:hover{\n    background:#4CAF50;\n    transform: translateY(-2px);\n  }\n\n  .tsp-gallery-btn.tsp-secondary{\n    background:rgba(0,0,0,0.10);\n    color:#222;\n  }\n  .tsp-gallery-btn.tsp-secondary:hover{\n    background:rgba(0,0,0,0.14);\n  }\n\n  \/* Modal *\/\n  .tsp-modal{\n    display:none;\n    position:fixed;\n    z-index:99999;\n    top:0; left:0;\n    width:100%;\n    height:100%;\n    background:rgba(0,0,0,0.82);\n    justify-content:center;\n    align-items:center;\n  }\n  .tsp-modal-content{\n    width:92%;\n    max-width:1100px;\n    border-radius:12px;\n  }\n  .tsp-modal-close{\n    position:absolute;\n    top:20px;\n    right:28px;\n    color:#fff;\n    font-size:52px;\n    cursor:pointer;\n    font-weight:900;\n    user-select:none;\n  }\n<\/style>\n\n<script>\n  document.addEventListener(\"DOMContentLoaded\", function(){\n\n    let currentIndex = 0;\n    let autoSliding = false;\n    let autoInterval = null;\n\n    const slider = document.getElementById(\"tspGallerySlider\");\n    const slides = document.querySelectorAll(\".tsp-slide\");\n\n    const prevBtn = document.getElementById(\"tspPrevBtn\");\n    const nextBtn = document.getElementById(\"tspNextBtn\");\n    const autoBtn = document.getElementById(\"tspAutoBtn\");\n\n    const modal = document.getElementById(\"tspModal\");\n    const modalImage = document.getElementById(\"tspModalImage\");\n    const modalClose = document.getElementById(\"tspModalClose\");\n\n    function updateSlider(){\n      slider.style.transform = \"translateX(\" + (-100 * currentIndex) + \"%)\";\n    }\n\n    function moveSlide(dir){\n      currentIndex += dir;\n      if(currentIndex < 0) currentIndex = slides.length - 1;\n      if(currentIndex >= slides.length) currentIndex = 0;\n      updateSlider();\n    }\n\n    function toggleAuto(){\n      autoSliding = !autoSliding;\n      autoBtn.textContent = autoSliding ? \"Auto: AN\" : \"Auto\";\n\n      if(autoSliding){\n        autoInterval = setInterval(function(){ moveSlide(1); }, 3500);\n      } else {\n        clearInterval(autoInterval);\n      }\n    }\n\n    prevBtn.addEventListener(\"click\", function(){ moveSlide(-1); });\n    nextBtn.addEventListener(\"click\", function(){ moveSlide(1); });\n    autoBtn.addEventListener(\"click\", toggleAuto);\n\n    slides.forEach((img) => {\n      img.addEventListener(\"click\", function(){\n        modalImage.src = img.src;\n        modal.style.display = \"flex\";\n        modal.setAttribute(\"aria-hidden\", \"false\");\n      });\n    });\n\n    modalClose.addEventListener(\"click\", function(){\n      modal.style.display = \"none\";\n      modal.setAttribute(\"aria-hidden\", \"true\");\n    });\n\n    modal.addEventListener(\"click\", function(e){\n      if(e.target === modal){\n        modal.style.display = \"none\";\n        modal.setAttribute(\"aria-hidden\", \"true\");\n      }\n    });\n\n    updateSlider();\n  });\n<\/script>\n\n\n\n<section class=\"tsp3\" id=\"docs\">\n  <div class=\"tsp2-wrap\">\n\n    <div class=\"tsp2-head\">\n      <div class=\"tsp2-badge\">\ud83d\udce6 Ware finden \u2022 \ud83d\udcc4 Dokumente zentral \u2022 \ud83e\udde0 weniger Risiko<\/div>\n      <h2>Mehr Struktur im Handel \u2013 f\u00fcr Verk\u00e4ufer, K\u00e4ufer, Spedition & Zoll.<\/h2>\n      <p>\n        TyreScrapPortal standardisiert die Abl\u00e4ufe im B2B-Handel mit Reifenballen:\n        Der Kauf wird direkt mit Spedition und Zollagentur kombiniert, Preise sind transparent,\n        und die relevanten Unterlagen stehen nach dem Kauf zentral im Portal bereit.\n      <\/p>\n    <\/div>\n\n    <!-- Kurzer Hinweis statt Dokumenten-Dopplung -->\n    <div class=\"tsp3-dochint\">\n      <div class=\"tsp3-dochint-ico\">\ud83d\udcc4<\/div>\n      <div class=\"tsp3-dochint-text\">\n        <strong>Dokumentenpaket nach dem Kauf:<\/strong> Annex VII, Verwertungsvertrag, Rechnung, Lieferschein, Fotos aus dem Inserat sowie nach der Verladung Verladungsfotos inkl. Container- & Siegelnummern.\n        <a href=\"#block2\" class=\"tsp3-dochint-link\">Details ansehen<\/a>\n      <\/div>\n    <\/div>\n\n    <div class=\"tsp3-grid\">\n      <div class=\"tsp3-card\" id=\"seller\">\n        <div class=\"tsp3-ico\">\ud83e\uddd1\u200d\ud83c\udfed<\/div>\n        <h3>Vorteile f\u00fcr Verk\u00e4ufer<\/h3>\n        <p>\n          Rechtssicher verkaufen, weniger R\u00fcckfragen und H\u00f6chstpreise durch transparente Auktion \u2013\n          mit klaren Abl\u00e4ufen statt Telefon-\/WhatsApp-Verl\u00e4ufen.\n        <\/p>\n      <\/div>\n\n      <div class=\"tsp3-card\" id=\"buyer\">\n        <div class=\"tsp3-ico\">\ud83e\uddd1\u200d\ud83d\udcbc<\/div>\n        <h3>Vorteile f\u00fcr K\u00e4ufer<\/h3>\n        <p>\n          Inserate mit klaren Daten & Fotos, transparente Transportkosten und sofortige Verf\u00fcgbarkeit\n          aller Unterlagen f\u00fcr Export und Weiterverarbeitung.\n        <\/p>\n      <\/div>\n\n      <div class=\"tsp3-card\">\n        <div class=\"tsp3-ico\">\ud83d\ude9a<\/div>\n        <h3>Vorteile f\u00fcr Speditionen<\/h3>\n        <p>\n          Weniger R\u00fcckfragen und Standzeiten: Unterlagen und Informationen sind zentral im Portal abrufbar \u2013\n          inklusive Verladungsnachweise nach Upload durch den Verk\u00e4ufer.\n        <\/p>\n      <\/div>\n\n      <div class=\"tsp3-card\">\n        <div class=\"tsp3-ico\">\ud83e\uddfe<\/div>\n        <h3>Vorteile f\u00fcr Zollagenturen<\/h3>\n        <p>\n          Vollst\u00e4ndige Exportunterlagen im Portal: weniger Fehler, weniger R\u00fcckl\u00e4ufer,\n          schnellere und konsistentere Ausfuhrverzollung.\n        <\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"tsp3-note\">\n      <div class=\"tsp3-note-ico\">\u2705<\/div>\n      <div>\n        <strong>Hinweis:<\/strong> Das Portal ersetzt keine gesetzlichen Anforderungen,\n        unterst\u00fctzt aber dabei, Abl\u00e4ufe konsistent zu halten, Tippfehler zu reduzieren und Dokumente\n        so vollst\u00e4ndig wie m\u00f6glich bereitzustellen. In Einzelf\u00e4llen k\u00f6nnen zus\u00e4tzliche manuelle Dokumente erforderlich sein.\n      <\/div>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n<style>\n  .tsp3-dochint{\n    display:flex;\n    gap:12px;\n    align-items:flex-start;\n    background:#fff;\n    border:1px solid rgba(0,0,0,0.06);\n    box-shadow: 0 10px 24px rgba(0,0,0,0.08);\n    border-radius:14px;\n    padding:16px 18px;\n    margin: 24px 0 22px;\n  }\n  .tsp3-dochint-ico{\n    font-size:22px;\n    line-height:1;\n    padding:10px;\n    border-radius:12px;\n    background:rgba(92,184,92,0.12);\n  }\n  .tsp3-dochint-text{\n    font-size:15.5px;\n    color:#333;\n    line-height:1.55;\n  }\n  .tsp3-dochint-link{\n    display:inline-block;\n    margin-left:8px;\n    font-weight:900;\n    color:#5CB85C;\n    text-decoration:none;\n    border-bottom: 2px solid rgba(92,184,92,0.35);\n    transition:.2s ease;\n  }\n  .tsp3-dochint-link:hover{\n    border-bottom-color: rgba(92,184,92,0.9);\n  }\n<\/style>\n\n\n\n<section class=\"tsp-contact\" id=\"kontakt\">\n  <div class=\"tsp2-wrap\">\n\n    <div class=\"tsp2-head\">\n      <div class=\"tsp2-badge\">\u2709\ufe0f Kontakt<\/div>\n      <h2>Kontakt aufnehmen<\/h2>\n      <p>\n        Bitte schildern Sie kurz Ihr Anliegen \u2013 wir melden uns zeitnah mit den n\u00e4chsten Schritten zur\u00fcck.\n        <br><strong>Hinweis:<\/strong> TyreScrapPortal richtet sich ausschlie\u00dflich an gewerbliche Nutzer (B2B).\n      <\/p>\n    <\/div>\n\n    <div class=\"tsp-contact-grid\">\n      <div class=\"tsp-contact-card\">\n        <h3>\ud83d\udccc Kontaktdaten<\/h3>\n        <p class=\"tsp-contact-line\"><strong>E-Mail:<\/strong> <a href=\"mailto:info@tyrescrapportal.com\">info@tyrescrapportal.com<\/a><\/p>\n        <p class=\"tsp-contact-line\"><strong>Firma:<\/strong> TyreScrapPortal<\/p>\n        <p class=\"tsp-contact-hint\">Hinweis: Bitte ausschlie\u00dflich gewerbliche Anfragen.<\/p>\n      <\/div>\n\n      <div class=\"tsp-contact-card tsp-form tsp-cf7-target\">\n        <h3>\ud83d\udcdd Anfrage senden<\/h3>\n        <div class=\"tsp-cf7-mount\"><\/div>\n\n        <p class=\"tsp-form-privacy\">\n          Mit dem Absenden akzeptieren Sie unsere\n          <a href=\"#datenschutz\">Datenschutzerkl\u00e4rung<\/a>.\n        <\/p>\n      <\/div>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n\n\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f231-o1\" lang=\"de-DE\" dir=\"ltr\" data-wpcf7-id=\"231\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/en\/wp-json\/wp\/v2\/pages\/22#wpcf7-f231-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Kontaktformular\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"231\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"de_DE\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f231-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/>\n<\/fieldset>\n<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Name\" value=\"\" type=\"text\" name=\"your-name\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"E-Mail\" value=\"\" type=\"email\" name=\"your-email\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-company\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" aria-invalid=\"false\" placeholder=\"Firma\" value=\"\" type=\"text\" name=\"your-company\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-phone\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-text wpcf7-validates-as-tel\" aria-invalid=\"false\" placeholder=\"Telefon\" value=\"\" type=\"tel\" name=\"your-phone\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-message\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea\" aria-invalid=\"false\" placeholder=\"Nachricht\" name=\"your-message\"><\/textarea><\/span>\n<\/p>\n<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Nachricht senden\" \/>\n<\/p><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n\n\n\n\n\n\n<section class=\"tsp-legal\" id=\"rechtliches\">\n  <div class=\"tsp2-wrap\">\n\n    <div class=\"tsp2-head\">\n      <div class=\"tsp2-badge\">\ud83d\udcda Rechtliches<\/div>\n      <h2>Impressum \u2022 AGB \u2022 Datenschutz<\/h2>\n      <p>Klicke auf einen Punkt, um die Inhalte aufzurufen.<\/p>\n    <\/div>\n\n    <!-- IMPRESSUM -->\n    <details class=\"tsp-acc\" id=\"impressum\">\n      <summary class=\"tsp-acc-head\">\n        <span class=\"tsp-acc-title\">Impressum<\/span>\n        <span class=\"tsp-acc-icon\">\u25be<\/span>\n      <\/summary>\n\n      <div class=\"tsp-acc-body tsp-contact-card\">\n        <h3>Impressum f\u00fcr \u201eTyreScrapPortal\u201c<\/h3>\n        <p class=\"tsp-contact-line\"><strong>Angaben gem\u00e4\u00df \u00a7 5 TMG<\/strong><\/p>\n\n        <div class=\"tsp-impressum-grid\">\n          <div>\n            <p class=\"tsp-contact-line\"><strong>Samira Bentekhici<\/strong><\/p>\n            <p class=\"tsp-contact-line\">\n              Bodestr. 4<br>\n              32423 Minden<br>\n              Deutschland\n            <\/p>\n            <p class=\"tsp-contact-line\"><strong>Vertreten durch den Inhaber:<\/strong> Samira Bentekhici<\/p>\n          <\/div>\n\n          <div>\n            <p class=\"tsp-contact-line\"><strong>Kontakt<\/strong><\/p>\n            <p class=\"tsp-contact-line\"><strong>Telefon:<\/strong> <a href=\"tel:+491743658041\">+49 174 365 8041<\/a><\/p>\n            <p class=\"tsp-contact-line\"><strong>E-Mail:<\/strong> <a href=\"mailto:info@tyrescrapportal.com\">info@tyrescrapportal.com<\/a><\/p>\n            <p class=\"tsp-contact-line\" style=\"margin-top:12px;\"><strong>Umsatzsteuer-ID:<\/strong> DE359890262<\/p>\n            <p class=\"tsp-contact-line\"><strong>Steuernummer:<\/strong> 335\/5011\/5228<\/p>\n          <\/div>\n        <\/div>\n\n        <hr class=\"tsp-impressum-hr\">\n\n        <p class=\"tsp-contact-line\"><strong>Zust\u00e4ndiges Finanzamt:<\/strong> Finanzamt Minden<\/p>\n        <p class=\"tsp-contact-line\"><strong>Zust\u00e4ndiges Gericht f\u00fcr Gerichtsverfahren:<\/strong> Amtsgericht Minden<\/p>\n        <p class=\"tsp-contact-line\"><strong>Verantwortlich f\u00fcr den Inhalt nach \u00a7 18 Abs. 2 MStV:<\/strong> Samira Bentekhici<\/p>\n      <\/div>\n    <\/details>\n\n    <!-- AGB -->\n    <details class=\"tsp-acc\" id=\"agb\" style=\"margin-top:12px;\">\n      <summary class=\"tsp-acc-head\">\n        <span class=\"tsp-acc-title\">AGB<\/span>\n        <span class=\"tsp-acc-icon\">\u25be<\/span>\n      <\/summary>\n\n      <div class=\"tsp-acc-body tsp-contact-card\">\n        <h3>\ud83c\udde9\ud83c\uddea AGB \u2013 TyreScrapPortal<\/h3>\n        <p class=\"tsp-contact-line\"><strong>Gesch\u00e4ftsinhaberin:<\/strong> Samira Bentekhici \/ Business Solutions<\/p>\n        <p class=\"tsp-contact-line\"><strong>Adresse:<\/strong> Bodestr. 4, 32423 Minden, Deutschland<\/p>\n        <p class=\"tsp-contact-line\"><strong>E-Mail:<\/strong> <a href=\"mailto:info@tyrescrapportal.com\">info@tyrescrapportal.com<\/a><\/p>\n        <p class=\"tsp-contact-line\"><strong>Finanzamt:<\/strong> Minden<\/p>\n        <p class=\"tsp-contact-line\"><strong>Steuernummer:<\/strong> 335\/5011\/5228<\/p>\n        <p class=\"tsp-contact-line\"><strong>USt-ID:<\/strong> DE359890262<\/p>\n        <p class=\"tsp-contact-line\"><strong>IBAN:<\/strong> DE67490501010097012918<\/p>\n        <p class=\"tsp-contact-line\"><strong>BIC:<\/strong> WELADED1MIN<\/p>\n\n        <hr class=\"tsp-impressum-hr\">\n\n        <h4>1. Geltungsbereich<\/h4>\n        <p class=\"tsp-contact-line\">Diese AGB gelten f\u00fcr alle registrierten Nutzer der Plattform TyreScrapPortal. Mit der Registrierung erkennt der Nutzer diese Bedingungen verbindlich an.<\/p>\n\n        <h4>2. Vertragsgegenstand<\/h4>\n        <p class=\"tsp-contact-line\">(1) Das Portal erm\u00f6glicht es Verk\u00e4ufern, Reifenballen einzustellen, und K\u00e4ufern, Gebote darauf abzugeben.<\/p>\n        <p class=\"tsp-contact-line\">(2) TyreScrapPortal vermittelt lediglich \u2013 es entsteht kein Kaufvertrag zwischen Portalbetreiber und Nutzern.<\/p>\n        <p class=\"tsp-contact-line\">(3) Verk\u00e4ufer sind f\u00fcr die Richtigkeit ihrer Angaben verantwortlich - Die Dokumente werden automatisiert auf Basis der von den Nutzern eingegebenen Daten erstellt.\nTyreScrapPortal pr\u00fcft keine inhaltliche oder rechtliche Richtigkeit und \u00fcbernimmt keine Haftung f\u00fcr beh\u00f6rdliche Anerkennung - Die im Portal verwendete digitale Signatur dient als einfache elektronische Signatur gem\u00e4\u00df Art. 3 Nr. 10 eIDAS-Verordnung.<\/p>\n\n        <h4>3. Registrierung & Digitale Unterschrift<\/h4>\n        <p class=\"tsp-contact-line\">(1) Nutzer m\u00fcssen bei der Registrierung folgende Daten angeben: Firmenname und Anschrift, Ansprechpartner, E-Mail & Telefonnummer, IBAN & BIC, Steuernummer \/ USt-ID \/ EORI-Nr. (falls vorhanden).<\/p>\n        <p class=\"tsp-contact-line\">(2) Nutzer m\u00fcssen zus\u00e4tzlich eine digitale Unterschrift hinterlegen. Diese darf vom Portal automatisch verwendet werden f\u00fcr: automatisch generierte Kaufvertr\u00e4ge, automatische SEPA-Lastschriftmandate, Dokumente rund um Zuschl\u00e4ge, Auftragsbest\u00e4tigungen, Rechnungen.<\/p>\n        <p class=\"tsp-contact-line\">(3) Der Nutzer best\u00e4tigt, dass diese digitale Unterschrift rechtsverbindlich genutzt werden darf.<\/p>\n\n        <h4>4. Geb\u00fchren & Abrechnung<\/h4>\n        <p class=\"tsp-contact-line\">(1) Bei jedem erfolgreichen Zuschlag werden 19 \u20ac Netto f\u00fcr den K\u00e4ufer und 19 \u20ac Netto f\u00fcr den Verk\u00e4ufer pro Container f\u00e4llig.<\/p>\n        <p class=\"tsp-contact-line\">(2) Die Abrechnung erfolgt w\u00f6chentlich per SEPA-Lastschrift.<\/p>\n\n        <h4>5. Bieterverfahren<\/h4>\n        <p class=\"tsp-contact-line\">(1) Verk\u00e4ufer stellen Angebote inkl. Menge, Qualit\u00e4t, Preisvorstellung, Containeranzahl und Ablaufdatum ein.<\/p>\n        <p class=\"tsp-contact-line\">(2) K\u00e4ufer geben verbindliche Gebote ab.<\/p>\n        <p class=\"tsp-contact-line\">(3) Verk\u00e4ufer k\u00f6nnen Gebote sofort annehmen oder ablehnen.<\/p>\n        <p class=\"tsp-contact-line\">(5) Der Kaufvertrag entsteht ausschlie\u00dflich zwischen K\u00e4ufer und Verk\u00e4ufer.<\/p>\n\n        <h4>6. Pflichten der Nutzer<\/h4>\n        <ul class=\"tsp2-bullets\">\n          <li><strong>Verk\u00e4ufer<\/strong><span>m\u00fcssen korrekte Angaben zu Qualit\u00e4t und Zustand machen.<\/span><\/li>\n          <li><strong>K\u00e4ufer<\/strong><span>m\u00fcssen zahlungsf\u00e4hig sein.<\/span><\/li>\n          <li><strong>Manipulation<\/strong><span>(Fake-Gebote, Preisabsprachen, Mehrfachaccounts) ist verboten.<\/span><\/li>\n        <\/ul>\n\n        <h4>7. Haftungsausschluss<\/h4>\n        <p class=\"tsp-contact-line\">(1) Das Portal haftet nicht f\u00fcr Zahlungsausf\u00e4lle, Transportprobleme, Verz\u00f6gerungen oder mangelhafte Ware.<\/p>\n        <p class=\"tsp-contact-line\">(2) Haftung besteht nur bei grober Fahrl\u00e4ssigkeit oder Vorsatz.<\/p>\n        <p class=\"tsp-contact-line\">(3) F\u00fcr technische Ausf\u00e4lle wird keine Garantie \u00fcbernommen.<\/p>\n        <p class=\"tsp-contact-line\">(4) Die abfallrechtliche Verantwortung verbleibt jederzeit bei den jeweiligen Nutzern.\nTyreScrapPortal \u00fcbernimmt keine Entsorgungs-, Verwertungs- oder Verbringungsverantwortung.<\/p>\n\n        <h4>8. Datenschutz<\/h4>\n        <p class=\"tsp-contact-line\">Der Umgang mit personenbezogenen Daten erfolgt gem\u00e4\u00df unserer Datenschutzerkl\u00e4rung.<\/p>\n\n        <h4>9. K\u00fcndigung<\/h4>\n        <p class=\"tsp-contact-line\">Nutzer k\u00f6nnen ihr Konto jederzeit k\u00fcndigen, sofern keine offenen Forderungen oder laufenden Transaktionen bestehen.<\/p>\n\n        <h4>10. Gerichtsstand<\/h4>\n        <p class=\"tsp-contact-line\">Gerichtsstand ist der Sitz der Betreiberin: Minden, Deutschland.<\/p>\n\n        <hr class=\"tsp-impressum-hr\">\n\n        <h3>\ud83c\uddec\ud83c\udde7 Terms & Conditions \u2013 TyreScrapPortal<\/h3>\n        <p class=\"tsp-contact-line\"><strong>Business Owner:<\/strong> Samira Bentekhici<\/p>\n        <p class=\"tsp-contact-line\"><strong>Address:<\/strong> Bodestr. 4, 32423 Minden, Germany<\/p>\n        <p class=\"tsp-contact-line\"><strong>Email:<\/strong> <a href=\"mailto:info@tyrescrapportal.com\">info@tyrescrapportal.com<\/a><\/p>\n        <p class=\"tsp-contact-line\"><strong>Tax Office:<\/strong> Minden<\/p>\n        <p class=\"tsp-contact-line\"><strong>Tax Number:<\/strong> 335\/5011\/5228<\/p>\n        <p class=\"tsp-contact-line\"><strong>VAT ID:<\/strong> DE359890262<\/p>\n        <p class=\"tsp-contact-line\"><strong>IBAN:<\/strong> DE67490501010097012918<\/p>\n        <p class=\"tsp-contact-line\"><strong>BIC:<\/strong> WELADED1MIN<\/p>\n\n        <hr class=\"tsp-impressum-hr\">\n\n        <h4>1. Scope<\/h4>\n        <p class=\"tsp-contact-line\">These Terms & Conditions apply to all registered users of TyreScrapPortal. By registering, users accept these terms.<\/p>\n\n        <h4>2. Object of the Platform<\/h4>\n        <p class=\"tsp-contact-line\">(1) The portal allows sellers to list tyre bales and buyers to place bids.<\/p>\n        <p class=\"tsp-contact-line\">(2) TyreScrapPortal only provides mediation \u2013 no purchase contract is created with the platform operator.<\/p>\n        <p class=\"tsp-contact-line\">(3) Sellers are fully responsible for the accuracy of their listings - Documents are generated automatically based on the data provided by the users.\nTyreScrapPortal does not verify the accuracy or legal validity of the content and assumes no liability for recognition by authorities. - The digital signature used within the portal constitutes a simple electronic signature in accordance with Article 3(10) of the eIDAS Regulation<\/p>\n\n        <h4>3. Registration & Digital Signature<\/h4>\n        <p class=\"tsp-contact-line\">(1) Users must provide the following information: Company name & address, contact person, email & phone number, IBAN & BIC, tax number \/ VAT ID \/ EORI (if applicable).<\/p>\n        <p class=\"tsp-contact-line\">(2) Users must also submit a digital signature, which may be used automatically for: auto-generated contracts, automated SEPA mandates, bid confirmations and invoices.<\/p>\n        <p class=\"tsp-contact-line\">(3) The user explicitly consents to legally binding use of this digital signature.<\/p>\n\n        <h4>4. Fees & Billing<\/h4>\n        <p class=\"tsp-contact-line\">(1) A fee of \u20ac19 for the buyer and \u20ac19 for the seller per container applies to each successful bid.<\/p>\n        <p class=\"tsp-contact-line\">(2) Billing is done weekly via SEPA direct debit.<\/p>\n        <p class=\"tsp-contact-line\">(4) The user must ensure sufficient funds.<\/p>\n\n        <h4>5. Bidding Process<\/h4>\n        <p class=\"tsp-contact-line\">(1) Sellers list tyre bales with full details.<\/p>\n        <p class=\"tsp-contact-line\">(2) Buyers place binding bids.<\/p>\n        <p class=\"tsp-contact-line\">(3) Sellers may accept or reject bids immediately.<\/p>\n        <p class=\"tsp-contact-line\">(4) When the auction expires, the highest bidder automatically receives the contract.<\/p>\n        <p class=\"tsp-contact-line\">(5) The sales contract is solely between buyer and seller.<\/p>\n\n        <h4>6. User Obligations<\/h4>\n        <ul class=\"tsp2-bullets\">\n          <li><strong>Sellers<\/strong><span>must provide accurate information.<\/span><\/li>\n          <li><strong>Buyers<\/strong><span>must be financially capable.<\/span><\/li>\n          <li><strong>Manipulation<\/strong><span>such as fake bids or multiple accounts is prohibited.<\/span><\/li>\n        <\/ul>\n\n        <h4>7. Liability<\/h4>\n        <p class=\"tsp-contact-line\">(1) The platform is not liable for payment failures, faulty goods, transport delays, or disputes between users.<\/p>\n        <p class=\"tsp-contact-line\">(2) Liability exists only in cases of gross negligence or intent.<\/p>\n        <p class=\"tsp-contact-line\">(3) No guarantee for uninterrupted platform availability.<\/p>\n        <p class=\"tsp-contact-line\">(4) Responsibility under waste legislation remains at all times with the respective users.\nTyreScrapPortal does not assume any responsibility for disposal, recovery, or shipment of waste.<\/p>\n\n        <h4>8. Data Protection<\/h4>\n        <p class=\"tsp-contact-line\">Data is processed according to the Privacy Policy.<\/p>\n\n        <h4>9. Termination<\/h4>\n        <p class=\"tsp-contact-line\">Accounts may be terminated at any time if no outstanding transactions exist.<\/p>\n\n        <h4>10. Jurisdiction<\/h4>\n        <p class=\"tsp-contact-line\">Place of jurisdiction is Minden, Germany.<\/p>\n      <\/div>\n    <\/details>\n\n    <!-- DATENSCHUTZ -->\n    <details class=\"tsp-acc\" id=\"datenschutz\" style=\"margin-top:12px;\">\n      <summary class=\"tsp-acc-head\">\n        <span class=\"tsp-acc-title\">Datenschutzerkl\u00e4rung \/ Privacy Policy<\/span>\n        <span class=\"tsp-acc-icon\">\u25be<\/span>\n      <\/summary>\n\n      <div class=\"tsp-acc-body tsp-contact-card\">\n        <h3>\ud83c\udde9\ud83c\uddea Datenschutzerkl\u00e4rung \u2013 TyreScrapPortal<\/h3>\n\n        <h4>1. Verantwortliche Stelle<\/h4>\n        <p class=\"tsp-contact-line\">Samira Bentekhici \/ BusinessSolutions, Bodestr. 4, 32423 Minden<br>\n          <a href=\"mailto:info@tyrescrapportal.com\">info@tyrescrapportal.com<\/a>\n        <\/p>\n\n        <h4>2. Erhobene Daten<\/h4>\n        <ul class=\"tsp2-bullets\">\n          <li><strong>Firmendaten<\/strong><span><\/span><\/li>\n          <li><strong>Kontaktdaten<\/strong><span><\/span><\/li>\n          <li><strong>Zahlungsdaten<\/strong><span>(IBAN, BIC)<\/span><\/li>\n          <li><strong>Digitale Unterschrift<\/strong><span><\/span><\/li>\n          <li><strong>Nutzungsdaten im Portal<\/strong><span><\/span><\/li>\n          <li><strong>Angebots- und Transaktionsdaten<\/strong><span><\/span><\/li>\n        <\/ul>\n\n        <h4>3. Zweck der Verarbeitung<\/h4>\n        <ul class=\"tsp2-bullets\">\n          <li><strong>Registrierung & Nutzerverwaltung<\/strong><span><\/span><\/li>\n          <li><strong>Durchf\u00fchrung des Bieterverfahrens<\/strong><span><\/span><\/li>\n          <li><strong>Automatische Dokumentenerstellung<\/strong><span>(mit digitaler Unterschrift)<\/span><\/li>\n          <li><strong>Rechnungsstellung & SEPA-Lastschrift<\/strong><span><\/span><\/li>\n          <li><strong>Betrugspr\u00e4vention<\/strong><span><\/span><\/li>\n          <li><strong>Systemanalyse & Fehlermanagement<\/strong><span><\/span><\/li>\n        <\/ul>\n\n        <h4>4. Weitergabe an Dritte<\/h4>\n        <p class=\"tsp-contact-line\">Daten werden nur weitergegeben an Zahlungsdienstleister (SEPA), IT-Dienstleister sowie Beh\u00f6rden bei gesetzlicher Verpflichtung. Keine Datenweitergabe an Drittl\u00e4nder ohne Rechtsgrundlage.<\/p>\n\n        <h4>5. Digitale Unterschrift<\/h4>\n        <p class=\"tsp-contact-line\">Die digitale Unterschrift wird gespeichert und automatisch auf systemgenerierte Dokumente gesetzt, z. B. Kaufvertr\u00e4ge, Lastschriftmandate, Rechnungen und Zuschlagsbest\u00e4tigungen. Die Nutzung erfolgt gem\u00e4\u00df Nutzereinwilligung.<\/p>\n\n        <h4>6. Speicherdauer<\/h4>\n        <p class=\"tsp-contact-line\">Daten werden gem\u00e4\u00df steuer- und handelsrechtlichen Fristen 10 Jahre gespeichert.<\/p>\n\n        <h4>7. Nutzerrechte<\/h4>\n        <p class=\"tsp-contact-line\">Auskunft, L\u00f6schung, Berichtigung, Einschr\u00e4nkung, Widerspruch, Daten\u00fcbertragbarkeit. Anfragen: <a href=\"mailto:info@tyrescrapportal.com\">info@tyrescrapportal.com<\/a><\/p>\n\n        <h4>8. Cookies & Tracking<\/h4>\n        <p class=\"tsp-contact-line\">Das Portal verwendet Cookies, Server-Logs und Sicherheitsmechanismen zur Systemstabilit\u00e4t.<\/p>\n\n        <h4>9. Sicherheit<\/h4>\n        <p class=\"tsp-contact-line\">Es werden moderne technische und organisatorische Ma\u00dfnahmen eingesetzt.<\/p>\n\n        <hr class=\"tsp-impressum-hr\">\n\n        <h3>\ud83c\uddec\ud83c\udde7 Privacy Policy \u2013 TyreScrapPortal<\/h3>\n\n        <h4>1. Controller<\/h4>\n        <p class=\"tsp-contact-line\">Samira Bentekhici, Bodestr. 4, 32423 Minden<br>\n          <a href=\"mailto:info@tyrescrapportal.com\">info@tyrescrapportal.com<\/a>\n        <\/p>\n\n        <h4>2. Data Collected<\/h4>\n        <ul class=\"tsp2-bullets\">\n          <li><strong>Company and contact data<\/strong><span><\/span><\/li>\n          <li><strong>IBAN \/ BIC<\/strong><span><\/span><\/li>\n          <li><strong>Digital signature<\/strong><span><\/span><\/li>\n          <li><strong>Usage & auction data<\/strong><span><\/span><\/li>\n          <li><strong>Automatically generated documents<\/strong><span><\/span><\/li>\n        <\/ul>\n\n        <h4>3. Purpose<\/h4>\n        <ul class=\"tsp2-bullets\">\n          <li><strong>Account management<\/strong><span><\/span><\/li>\n          <li><strong>Bidding system operation<\/strong><span><\/span><\/li>\n          <li><strong>Automatic document creation<\/strong><span>(incl. digital signature)<\/span><\/li>\n          <li><strong>Billing & SEPA direct debit<\/strong><span><\/span><\/li>\n          <li><strong>Fraud prevention<\/strong><span><\/span><\/li>\n          <li><strong>Technical stability<\/strong><span><\/span><\/li>\n        <\/ul>\n\n        <h4>4. Third Parties<\/h4>\n        <p class=\"tsp-contact-line\">Data may be shared with payment service providers, IT providers, and authorities where required by law.<\/p>\n\n        <h4>5. Digital Signature<\/h4>\n        <p class=\"tsp-contact-line\">Your digital signature is stored and automatically applied to documents such as contracts, invoices, SEPA mandates, and confirmations.<\/p>\n\n        <h4>6. Retention<\/h4>\n        <p class=\"tsp-contact-line\">Data is stored for up to 10 years as required by law.<\/p>\n\n        <h4>7. User Rights<\/h4>\n        <p class=\"tsp-contact-line\">Access, deletion, rectification, restriction, objection, data portability. Requests: <a href=\"mailto:info@tyrescrapportal.com\">info@tyrescrapportal.com<\/a><\/p>\n      <\/div>\n    <\/details>\n\n  <\/div>\n<\/section>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>TyreScrapPortal B2B Marketplace for Tyre Recycling Registrierung m\u00f6glich ab 09.02.2026 Jetzt eintragen und am Launch-Tag sofort benachrichtigt werden. Hinweis: Es werden noch einige Updates im Portal durchgef\u00fchrt \u2013 daher verschiebt sich der Launch vom 01.02. auf den 09.02. Countdown bis Launch l\u00e4dt\u2026 Benachrichtigen \u25be \ud83d\uded2 Ich bin K\u00e4ufer \ud83d\udcbc Ich bin Verk\u00e4ufer \ud83d\ude9a Ich bin [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"no-title","meta":{"footnotes":""},"class_list":["post-22","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tyrescrapportal.com\/en\/wp-json\/wp\/v2\/pages\/22","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tyrescrapportal.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tyrescrapportal.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tyrescrapportal.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tyrescrapportal.com\/en\/wp-json\/wp\/v2\/comments?post=22"}],"version-history":[{"count":595,"href":"https:\/\/tyrescrapportal.com\/en\/wp-json\/wp\/v2\/pages\/22\/revisions"}],"predecessor-version":[{"id":781,"href":"https:\/\/tyrescrapportal.com\/en\/wp-json\/wp\/v2\/pages\/22\/revisions\/781"}],"wp:attachment":[{"href":"https:\/\/tyrescrapportal.com\/en\/wp-json\/wp\/v2\/media?parent=22"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}