{"id":46963,"date":"2025-11-01T17:30:09","date_gmt":"2025-11-01T16:30:09","guid":{"rendered":"https:\/\/blickpunkt-lokalsport.de\/?page_id=46963"},"modified":"2026-04-25T10:01:42","modified_gmt":"2026-04-25T08:01:42","slug":"fototermin-uebersicht","status":"publish","type":"page","link":"https:\/\/blickpunkt-lokalsport.de\/english\/fototermin-uebersicht\/","title":{"rendered":"Fototermin \u00dcbersicht"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"46963\" class=\"elementor elementor-46963\" data-elementor-settings=\"{&quot;element_pack_global_tooltip_width&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_width_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_width_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_padding&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_padding_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_padding_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true}}\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5af5c87c e-con-full e-flex e-con e-parent\" data-id=\"5af5c87c\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-619960e6 elementor-widget elementor-widget-bdt-advanced-heading\" data-id=\"619960e6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"bdt-advanced-heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"619960e6\" class=\"bdt-ep-advanced-heading\" data-settings=\"{&quot;titleMultiColor&quot;:&quot;no&quot;}\"><div class=\"bdt-ep-advanced-heading-content bdt-visible@m\"><div class=\"bdt-transform-origin-top-left\">Fototermine<\/div><\/div><div class=\"bdt-ep-advanced-heading-sub-title\"><div class=\"bdt-ep-advanced-heading-sub-title-content\">Alles im Blick<\/div><\/div><h2 class=\"bdt-ep-advanced-heading-title\"><span class=\"bdt-ep-advanced-heading-main-title\"><span class=\"bdt-ep-advanced-heading-main-title-inner\">Fototermin-\u00dcbersicht<\/span><\/span><\/h2><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a56d64f e-con-full e-flex e-con e-parent\" data-id=\"a56d64f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e97f0c1 elementor-widget elementor-widget-spacer\" data-id=\"e97f0c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b9928c6 e-con-full e-flex e-con e-parent\" data-id=\"b9928c6\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-14d3143 elementor-widget__width-auto elementor-widget elementor-widget-html\" data-id=\"14d3143\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n@import url(\"https:\/\/fonts.googleapis.com\/css2?family=Oswald:wght@500;600;700&family=Inter:wght@400;500;600;700;800&display=swap\");\n.bp-ft-wrap,\n.bp-ft-wrap *{\n  box-sizing:border-box;\n}\n\n.bp-ft-wrap{\n  --bp-ft-bg:#edf0f1;\n  --bp-ft-surface:#f8f9fa;\n  --bp-ft-surface-2:#e9edf0;\n  --bp-ft-text:#151b22;\n  --bp-ft-text-soft:#6a7480;\n  --bp-ft-text-faint:#7f8994;\n  --bp-ft-border:rgba(21,27,34,.07);\n  --bp-ft-border-strong:rgba(21,27,34,.10);\n  --bp-ft-shadow:0 6px 16px rgba(15,23,42,.03);\n  --bp-ft-shadow-sm:0 3px 10px rgba(15,23,42,.03);\n  --bp-ft-blue:#22456D;\n  --bp-ft-red:#8e2238;\n  --bp-ft-green:#4d8667;\n  --bp-ft-orange:#7b8a6f;\n  --bp-ft-pink:#8e2238;\n  --bp-ft-planned:#4d6f9d;\n  max-width:1250px;\n  margin:.5rem auto;\n  padding:0 10px;\n  font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Arial,sans-serif;\n  color:var(--bp-ft-text);\n}\n\n.bp-ft-box{\n  position:relative;\n  background:var(--bp-ft-bg);\n  border:1px solid var(--bp-ft-border-strong);\n  box-shadow:var(--bp-ft-shadow);\n  border-radius:0;\n  overflow:hidden;\n}\n\n.bp-ft-box::before{\n  content:\"\";\n  position:absolute;\n  inset:0 auto 0 0;\n  width:100%;\n  height:4px;\n  inset:0 0 auto 0;\n  background:#8e2238;\n}\n\n.bp-ft-header{\n  display:flex;\n  align-items:flex-start;\n  justify-content:space-between;\n  gap:14px;\n  padding:1rem 1.05rem .9rem;\n  flex-wrap:wrap;\n}\n\n.bp-ft-head-left{\n  display:flex;\n  flex-direction:column;\n  gap:2px;\n  max-width:760px;\n  min-width:0;\n}\n\n.bp-ft-kicker{\n  display:inline-flex;\n  align-items:center;\n  gap:7px;\n  font-size:.64rem;\n  font-weight:800;\n  letter-spacing:.18em;\n  text-transform:uppercase;\n  color:#7c8792;\n}\n\n.bp-ft-kicker-dot{\n  display:none;\n}\n\n.bp-ft-title{\n  margin:0;\n  font:600 1.18rem\/1.02 Oswald,sans-serif;\n  letter-spacing:.04em;\n  text-transform:uppercase;\n  color:#b21f2d;\n}\n\n.bp-ft-subtitle{\n  margin:0;\n  font-size:.82rem;\n  line-height:1.35;\n  color:var(--bp-ft-text-soft);\n  margin-top:.04rem;\n  max-width:760px;\n}\n\n.bp-ft-status{\n  min-width:260px;\n  max-width:100%;\n  display:flex;\n  flex-direction:column;\n  gap:7px;\n  background:transparent;\n  border:0;\n  border-radius:0;\n  padding:0;\n  box-shadow:none;\n}\n\n.bp-ft-status-top{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  gap:.6rem;\n}\n\n.bp-ft-status-label,\n.bp-ft-filter-label,\n.bp-ft-detail-label,\n.bp-ft-card-label{\n  font-size:.64rem;\n  font-weight:800;\n  letter-spacing:.16em;\n  text-transform:uppercase;\n  color:var(--bp-ft-text-faint);\n}\n\n.bp-ft-status-main{\n  font-size:.68rem;\n  font-weight:700;\n  line-height:1.2;\n  color:#17212b;\n}\n\n.bp-ft-status-sub{\n  display:none;\n}\n\n.bp-ft-progress-row{\n  display:flex;\n  align-items:center;\n  gap:9px;\n}\n\n.bp-ft-progress{\n  flex:1 1 auto;\n  height:4px;\n  border-radius:0;\n  overflow:hidden;\n  background:rgba(15,23,42,.08);\n}\n\n.bp-ft-progress > span{\n  display:block;\n  width:0%;\n  height:100%;\n  border-radius:0;\n  background:linear-gradient(90deg,#8e2238 0,#6e1729 55%,#8e2238 100%);\n  transition:width .28s ease;\n}\n\n.bp-ft-progress-text{\n  min-width:2.5rem;\n  text-align:right;\n  font-size:.69rem;\n  font-weight:800;\n  color:var(--bp-ft-text-soft);\n}\n\n.bp-ft-btn,\n.bp-ft-wrap button{\n  appearance:none;\n  border:1px solid #6e1729;\n  border-radius:0;\n  background:var(--bp-ft-red);\n  color:#fff;\n  font-size:.62rem;\n  font-weight:800;\n  letter-spacing:.06em;\n  text-transform:uppercase;\n  padding:.36rem .9rem;\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  flex:0 0 auto;\n  gap:.32rem;\n  box-shadow:0 4px 10px rgba(174,6,6,.14);\n  cursor:pointer;\n  transition:background .15s ease,transform .1s ease,box-shadow .15s ease;\n}\n\n.bp-ft-btn:hover,\n.bp-ft-wrap button:hover:not(:disabled){\n  background:#8b0909;\n  transform:translateY(-1px);\n  box-shadow:0 6px 12px rgba(139,9,9,.16);\n}\n\n.bp-ft-btn:disabled,\n.bp-ft-wrap button:disabled{\n  opacity:.58;\n  cursor:not-allowed;\n  transform:none;\n  box-shadow:none;\n}\n\n.bp-ft-legend{\n  display:flex;\n  flex-wrap:wrap;\n  gap:8px;\n  padding:0 18px 14px 22px;\n}\n\n.bp-ft-legend-item{\n  display:inline-flex;\n  align-items:center;\n  gap:7px;\n  min-height:28px;\n  padding:.14rem .54rem;\n  border-radius:0;\n  border:0;\n  background:transparent;\n  font-size:.64rem;\n  font-weight:700;\n  color:#475569;\n}\n\n.bp-ft-legend-dot{\n  width:10px;\n  height:10px;\n  border-radius:0;\n  flex:0 0 auto;\n}\n\n.bp-ft-dot-confirmed{background:var(--bp-ft-green);}\n.bp-ft-dot-bookmark{background:var(--bp-ft-orange);}\n.bp-ft-dot-request{background:var(--bp-ft-pink);}\n.bp-ft-dot-planned{background:var(--bp-ft-planned);}\n\n.bp-ft-card{\n  background:var(--bp-ft-surface);\n  border-top:0;\n  padding:0;\n}\n\n.bp-ft-card-head{\n  display:flex;\n  align-items:flex-start;\n  justify-content:space-between;\n  gap:10px;\n  flex-wrap:wrap;\n  padding-bottom:10px;\n  margin-bottom:12px;\n  border-bottom:1px solid rgba(15,23,42,.07);\n}\n\n.bp-ft-card-head > *{min-width:0;}\n\n.bp-ft-card-title{\n  margin:0;\n  display:flex;\n  align-items:center;\n  gap:8px;\n  flex-wrap:wrap;\n  font:800 1rem\/1.16 Inter,sans-serif;\n  letter-spacing:-.01em;\n  color:#17212b;\n}\n\n .bp-ft-counter{\n  width:fit-content;\n\n  min-width:1.45rem;\n  height:1.45rem;\n  padding:0 .45rem;\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  flex:0 0 auto;\n  border-radius:0;\n  border:1px solid rgba(15,23,42,.09);\n  background:#e4e8eb;\n  color:#334155;\n  font-size:.76rem;\n  font-weight:800;\n}\n\n.bp-ft-filter-toggle{\n  display:none;\n  margin-bottom:10px;\n}\n\n.bp-ft-filters-wrap{width:100%;}\n\n.bp-ft-filters{\n  display:grid;\n  grid-template-columns:repeat(auto-fit,minmax(140px,1fr));\n  gap:.7rem;\n  margin:0 1.05rem .75rem;\n}\n\n.bp-ft-filter-group{\n  display:flex;\n  flex-direction:column;\n  gap:4px;\n  min-width:0;\n}\n\n.bp-ft-wrap select,\n.bp-ft-wrap input[type=\"date\"]{\n  width:100%;\n  min-width:0;\n  appearance:none;\n  border-radius:0;\n  border:1px solid rgba(15,23,42,.09);\n  background:#fff;\n  color:#0f172a;\n  font-size:.76rem;\n  font-weight:600;\n  padding:.58rem .68rem;\n  box-shadow:none;\n  transition:border-color .15s ease,box-shadow .15s ease;\n}\n\n.bp-ft-wrap select:hover,\n.bp-ft-wrap input[type=\"date\"]:hover{\n  border-color:rgba(34,69,109,.28);\n}\n\n.bp-ft-wrap select:focus,\n.bp-ft-wrap input[type=\"date\"]:focus{\n  outline:none;\n  border-color:rgba(174,6,6,.34);\n  box-shadow:0 0 0 3px rgba(174,6,6,.10);\n}\n\n.bp-ft-wochentag{\n  min-height:1rem;\n  font-size:.7rem;\n  font-weight:700;\n  color:#64748b;\n}\n\n.bp-ft-action-row{\n  display:flex;\n  justify-content:flex-end;\n  margin:0 1.05rem .8rem;\n}\n\n.bp-ft-list{\n  display:flex;\n  flex-direction:column;\n  gap:0;\n  min-height:60px;\n  padding:0 1.05rem 1rem;\n}\n\n.bp-ft-item{\n  position:relative;\n  background:var(--bp-ft-surface);\n  border:1px solid rgba(15,23,42,.08);\n  box-shadow:0 3px 10px rgba(15,23,42,.03);\n  border-radius:0;\n  padding:11px 12px 11px 13px;\n  display:flex;\n  flex-direction:column;\n  gap:7px;\n  overflow:hidden;\n}\n\n.bp-ft-item::before{\n  content:\"\";\n  position:absolute;\n  left:0;\n  top:.62rem;\n  bottom:.62rem;\n  width:3px;\n  border-radius:0;\n  background:#d4dbe0;\n}\n\n.bp-ft-item.status-gebucht::before{background:var(--bp-ft-green);}\n.bp-ft-item.status-vorgemerkt::before,.bp-ft-item.status-vorschlag::before,.bp-ft-item.status-aktuelle-vorschlaege::before{background:#da7101;}\n.bp-ft-item.status-neue-anfrage::before{background:var(--bp-ft-pink);}\n.bp-ft-item.status-geplant::before{background:var(--bp-ft-planned);}\n\n.bp-ft-item.has-comment{\n  background:transparent;\n}\n\n.bp-ft-item-head{\n  display:flex;\n  align-items:flex-start;\n  justify-content:space-between;\n  gap:10px;\n  flex-wrap:wrap;\n  padding-left:0;\n}\n\n.bp-ft-item-datewrap{\n  display:flex;\n  flex-direction:column;\n  gap:.12rem;\n}\n\n\n.bp-ft-item-index{\n  min-width:1.42rem;\n  height:1.42rem;\n  padding:0 .4rem;\n  border-radius:0;\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  flex:0 0 auto;\n  background:#e4e8eb;\n  border:1px solid rgba(15,23,42,.09);\n  color:#475569;\n  font-size:.68rem;\n  font-weight:800;\n  flex:0 0 auto;\n}\n\n.bp-ft-item-date{\n  font-size:.78rem;\n  font-weight:700;\n  line-height:1.2;\n  letter-spacing:.08em;\n  text-transform:uppercase;\n  color:#64707c;\n}\n\n.bp-ft-chip{\n  display:inline-flex;\n  align-items:center;\n  gap:6px;\n  min-height:20px;\n  padding:.14rem .54rem;\n  border-radius:0;\n  border:1px solid rgba(15,23,42,.08);\n  white-space:nowrap;\n  font-size:.62rem;\n  font-weight:800;\n  text-transform:uppercase;\n  letter-spacing:.07em;\n}\n\n.bp-ft-chip.success{color:#355845;background:rgba(77,134,103,.10);border-color:rgba(77,134,103,.18);}\n.bp-ft-chip.warning,.bp-ft-chip.vorschlag,.bp-ft-chip.aktuelle-vorschlaege{color:#8a5b00 !important;background:rgba(218,113,1,.11) !important;border-color:rgba(218,113,1,.24) !important;}\n.bp-ft-chip.request{color:#7d2134;background:rgba(142,34,56,.10);border-color:rgba(142,34,56,.20);}\n.bp-ft-chip.planned{color:#375070;background:rgba(77,111,157,.10);border-color:rgba(77,111,157,.20);}\n\n.bp-ft-lastfoto-row,\n.bp-ft-meta-row{\n  display:block;\n  padding-left:0;\n}\n\n.bp-ft-lastfoto{\n  display:inline-flex;\n  align-items:center;\n  min-height:20px;\n  padding:.1rem .42rem;\n  border-radius:0;\n  border:1px solid rgba(15,23,42,.08);\n  background:#e4e8eb;\n  color:#475569;\n  font-size:.62rem;\n  font-weight:800;\n  letter-spacing:.07em;\n  text-transform:uppercase;\n}\n\n.bp-ft-teamgrid{\n  display:grid;\n  grid-template-columns:1fr;\n  gap:2px;\n  padding-left:0;\n}\n\n.bp-ft-teamline{\n  display:flex;\n  align-items:baseline;\n  gap:8px;\n  min-width:0;\n}\n\n.bp-ft-card-label{\n  min-width:43px;\n  flex:0 0 auto;\n}\n\n.bp-ft-card-value{\n  font-size:.9rem;\n  font-weight:700;\n  line-height:1.28;\n  color:#141b22;\n  word-break:break-word;\n}\n\n.bp-ft-meta-row{\n  font-size:.76rem;\n  color:#66717d;\n  line-height:1.35;\n}\n\n.bp-ft-comment-badge{\n  display:inline-flex;\n  align-items:center;\n  gap:6px;\n  color:#8b0909;\n  font-size:.63rem;\n  font-weight:800;\n  letter-spacing:.08em;\n  text-transform:uppercase;\n}\n\n.bp-ft-comment-badge-dot{\n  width:7px;\n  height:7px;\n  border-radius:0;\n  background:var(--bp-ft-red);\n  box-shadow:0 0 0 3px rgba(174,6,6,.10);\n}\n\n.bp-ft-marker{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  flex:0 0 auto;\n  width:16px;\n  height:16px;\n  border-radius:0;\n  background:var(--bp-ft-red);\n  color:#fff;\n  font-size:.66rem;\n  font-weight:800;\n  line-height:1;\n  box-shadow:0 2px 6px rgba(174,6,6,.18);\n}\n\n.bp-ft-details{\n  margin-top:.06rem;\n  margin-left:0;\n  padding-top:.1rem;\n  border-top:1px solid rgba(21,27,34,.06);\n}\n\n.bp-ft-details > summary{\n  list-style:none;\n  cursor:pointer;\n  display:inline-flex;\n  align-items:center;\n  gap:6px;\n  font-size:.62rem;\n  font-weight:800;\n  letter-spacing:.07em;\n  text-transform:uppercase;\n  color:#6a7480;\n}\n\n.bp-ft-details > summary::-webkit-details-marker{display:none;}\n.bp-ft-details > summary::before{content:\"\u25b8\";font-size:.76rem;color:var(--bp-ft-red);}\n.bp-ft-details[open] > summary::before{content:\"\u25be\";}\n\n.bp-ft-details-content{\n  display:flex;\n  flex-direction:column;\n  gap:.16rem;\n  padding-top:.06rem;\n}\n\n.bp-ft-details-grid{\n  display:grid;\n  grid-template-columns:1fr;\n  gap:.16rem;\n}\n\n.bp-ft-detail-value{\n  margin-top:2px;\n  font-size:.81rem;\n  font-weight:700;\n  line-height:1.35;\n  color:#0f172a;\n  word-break:break-word;\n}\n\n.bp-ft-note{\n  background:var(--bp-ft-surface-2);\n  border:1px solid rgba(15,23,42,.06);\n  border-radius:0;\n  padding:9px 10px;\n  color:#1e293b;\n  font-size:.76rem;\n  line-height:1.35;\n  overflow-wrap:break-word;\n}\n\n.bp-ft-comment-from{\n  font-weight:800;\n  color:#000;\n  margin-right:4px;\n}\n\n.bp-ft-comment-main{\n  font-weight:800;\n  color:var(--bp-ft-red);\n}\n\n@media (max-width:767px){\n  .bp-ft-filter-toggle{display:inline-flex;}\n  .bp-ft-filters-wrap.is-collapsed .bp-ft-filters{display:none;}\n}\n\n@media (min-width:768px){\n  .bp-ft-filters-wrap.is-collapsed .bp-ft-filters{display:grid;}\n}\n\n@media (max-width:900px){\n  .bp-ft-header{\n    flex-direction:column;\n    align-items:stretch;\n  }\n  .bp-ft-status{\n    min-width:0;\n    width:100%;\n  }\n}\n\n@media (max-width:1024px){\n  .bp-ft-list{\n    grid-template-columns:1fr;\n  }\n}\n\n@media (max-width:767px){\n  .bp-ft-status{\n    gap:5px;\n  }\n  .bp-ft-title{\n    font-size:1.02rem;\n  }\n  .bp-ft-subtitle{\n    font-size:.78rem;\n  }\n  .bp-ft-card-title{\n    font-size:.82rem;\n    line-height:1.05;\n    letter-spacing:0;\n  }\n   .bp-ft-counter{\n  width:fit-content;\n\n    min-width:1.28rem;\n    height:1.28rem;\n    padding:0 .32rem;\n    font-size:.6rem;\n  }\n  .bp-ft-card-head{\n    gap:8px;\n    margin-bottom:9px;\n    padding-bottom:8px;\n  }\n  .bp-ft-wrap{\n    margin:18px auto 10px;\n    padding:0 8px;\n  }\n  .bp-ft-box{border-radius:16px;}\n  .bp-ft-header{\n    padding:.85rem .8rem;\n    gap:10px;\n  }\n  .bp-ft-legend,\n  .bp-ft-card{\n    padding-left:.8rem;\n    padding-right:.8rem;\n  }\n  .bp-ft-title{\n    font-size:1.18rem;\n    line-height:1.06;\n  }\n  .bp-ft-subtitle{\n    font-size:.81rem;\n    line-height:1.36;\n  }\n  .bp-ft-card-title{\n    font-size:1.08rem;\n  }\n  .bp-ft-action-row{\n    justify-content:stretch;\n  }\n  .bp-ft-action-row .bp-ft-btn{\n    width:100%;\n  }\n}\n\n@media (max-width:520px){\n  .bp-ft-card-title{\n    font-size:.76rem;\n    line-height:1.04;\n  }\n   .bp-ft-counter{\n  width:fit-content;\n\n    min-width:1.16rem;\n    height:1.16rem;\n    font-size:.56rem;\n  }\n  .bp-ft-header{\n    padding:12px 12px 10px 16px;\n    gap:8px;\n  }\n  .bp-ft-legend,\n  .bp-ft-card{\n    padding-left:16px;\n    padding-right:12px;\n  }\n  .bp-ft-legend{\n    gap:6px;\n    padding-bottom:10px;\n  }\n  .bp-ft-legend-item{\n    min-height:24px;\n    padding:.14rem .54rem;\n    font-size:.66rem;\n  }\n  .bp-ft-status{\n    padding:8px 9px;\n    gap:7px;\n  }\n  .bp-ft-status-main{font-size:.75rem;}\n  .bp-ft-status-sub{font-size:.68rem;}\n  .bp-ft-wrap select,\n  .bp-ft-wrap input[type=\"date\"]{\n    font-size:.79rem;\n    padding:.64rem .7rem;\n  }\n  .bp-ft-card-head{\n    gap:10px;\n    margin-bottom:10px;\n    padding-bottom:10px;\n  }\n  .bp-ft-item{\n    padding:9px 10px 9px 11px;\n    gap:6px;\n    border-radius:0;\n  }\n  .bp-ft-item::before{\n    top:.52rem;\n    bottom:.52rem;\n  }\n  .bp-ft-item-head{\n    gap:7px;\n    padding-left:5px;\n  }\n  .bp-ft-item-datewrap{\n    gap:6px;\n    width:100%;\n  }\n  .bp-ft-item-index{\n    min-width:1.3rem;\n    height:1.3rem;\n    font-size:.64rem;\n  }\n  .bp-ft-item-date{\n    font-size:.64rem;\n    line-height:1.18;\n  }\n  .bp-ft-chip{\n  align-self:flex-start;\n    font-size:.58rem;\n    padding:.1rem .4rem;\n    align-self:flex-start;\n  }\n  .bp-ft-lastfoto,\n  .bp-ft-comment-badge{\n    font-size:.58rem;\n  }\n  .bp-ft-teamgrid,\n  .bp-ft-meta-row,\n  .bp-ft-lastfoto-row,\n  .bp-ft-details{\n    padding-left:5px;\n    margin-left:0;\n  }\n  .bp-ft-teamline{\n    gap:6px;\n  }\n  .bp-ft-card-label{\n    min-width:38px;\n    font-size:.58rem;\n    letter-spacing:.14em;\n  }\n  .bp-ft-card-value{\n    font-size:.76rem;\n    line-height:1.26;\n  }\n  .bp-ft-meta-row{\n    font-size:.69rem;\n    gap:6px;\n  }\n  .bp-ft-details > summary{\n    font-size:.62rem;\n    letter-spacing:.10em;\n  }\n  .bp-ft-details-grid{\n    grid-template-columns:1fr;\n    gap:7px;\n  }\n  .bp-ft-detail-value,\n  .bp-ft-note{\n    font-size:.75rem;\n  }\n}\n\n@media (max-width:380px){\n  .bp-ft-card-title{\n    font-size:.74rem;\n    line-height:1.02;\n  }\n   .bp-ft-counter{\n  width:fit-content;\n\n    min-width:1.06rem;\n    height:1.06rem;\n    font-size:.52rem;\n  }\n  .bp-ft-wrap{\n    padding:0 6px;\n  }\n  .bp-ft-title{\n    font-size:1.06rem;\n  }\n  .bp-ft-subtitle{\n    font-size:.76rem;\n  }\n  .bp-ft-kicker,\n  .bp-ft-status-label,\n  .bp-ft-filter-label,\n  .bp-ft-detail-label,\n  .bp-ft-card-label{\n    letter-spacing:.12em;\n  }\n  .bp-ft-card-title{\n    font-size:.98rem;\n    line-height:1.05;\n  }\n  .bp-ft-item-date{\n    font-size:.66rem;\n  }\n  .bp-ft-card-value{\n    font-size:.8rem;\n  }\n}\n<\/style>\n\n<div class=\"bp-ft-wrap\">\n  <div class=\"bp-ft-box\">\n    <div class=\"bp-ft-header\">\n      <div class=\"bp-ft-head-left\">\n        <div class=\"bp-ft-kicker\">\n          <span class=\"bp-ft-kicker-dot\"><\/span>\n          <span>Fototermine & Spiel\u00fcbersicht<\/span>\n        <\/div>\n        <h2 class=\"bp-ft-title\">Aktuelle Fototermine<\/h2>\n        <p class=\"bp-ft-subtitle\">Hier ist euer \u00dcberblick \u00fcber alle Eintr\u00e4ge im Kalender. Nutzt bitte die Filterm\u00f6glichkeiten und achtet auf Kommentare von uns.<\/p>\n      <\/div>\n\n      <div class=\"bp-ft-status\" id=\"bpFtStatusUpdate\">\n        <div class=\"bp-ft-status-top\">\n          <span class=\"bp-ft-status-label\">Datenstatus<\/span>\n        <\/div>\n        <div class=\"bp-ft-status-main\">Daten werden geladen \u2026<\/div>\n        <div class=\"bp-ft-status-sub\">\u2026 aus dem Buchungskalender<\/div>\n        <div class=\"bp-ft-progress-row\">\n          <div class=\"bp-ft-progress\"><span id=\"bpFtStatusProgressInner\"><\/span><\/div>\n          <span class=\"bp-ft-progress-text\" id=\"bpFtStatusProgressText\">0 %<\/span>\n        <\/div>\n        <button id=\"bpFtReloadButton\" class=\"bp-ft-btn\" type=\"button\">\n          <span>\u27f3<\/span>\n          <span>Aktualisieren<\/span>\n        <\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"bp-ft-legend\" aria-label=\"Legende der Statusfarben\">\n      <div class=\"bp-ft-legend-item\"><span class=\"bp-ft-legend-dot bp-ft-dot-confirmed\" aria-hidden=\"true\"><\/span><span>Termin best\u00e4tigt<\/span><\/div>\n      <div class=\"bp-ft-legend-item\"><span class=\"bp-ft-legend-dot bp-ft-dot-bookmark\" aria-hidden=\"true\"><\/span><span>Eure Vorschl\u00e4ge<\/span><\/div>\n      <div class=\"bp-ft-legend-item\"><span class=\"bp-ft-legend-dot bp-ft-dot-request\" aria-hidden=\"true\"><\/span><span>Neue Fotoanfrage<\/span><\/div>\n      <div class=\"bp-ft-legend-item\"><span class=\"bp-ft-legend-dot bp-ft-dot-planned\" aria-hidden=\"true\"><\/span><span>Geplant<\/span><\/div>\n    <\/div>\n\n    <div class=\"bp-ft-card\" style=\"padding:0; background:transparent; border-top:0;\">\n      <div class=\"bp-ft-card-head\" style=\"padding:0 1.05rem .75rem; margin:0; border-bottom:0;\">\n        <h3 class=\"bp-ft-card-title\">Aktuelle Spielvorschl\u00e4ge <span id=\"bpFtCounter\" class=\"bp-ft-counter\">0<\/span><\/h3>\n      <\/div>\n\n      <button class=\"bp-ft-btn bp-ft-filter-toggle\" id=\"bpFtFilterToggleBtn\" type=\"button\">Filter anzeigen<\/button>\n\n      <div class=\"bp-ft-filters-wrap\" id=\"bpFtFiltersWrapper\">\n        <div class=\"bp-ft-filters\" role=\"search\" aria-label=\"Filter f\u00fcr aktuelle Spiele\">\n          <div class=\"bp-ft-filter-group\">\n            <label for=\"bpFtMannschaftFilter\" class=\"bp-ft-filter-label\">Verein<\/label>\n            <select id=\"bpFtMannschaftFilter\" aria-controls=\"bpFtListe\">\n              <option value=\"alle\">Alle Vereine<\/option>\n            <\/select>\n          <\/div>\n          <div class=\"bp-ft-filter-group\">\n            <label for=\"bpFtAltersklasseFilter\" class=\"bp-ft-filter-label\">Altersklasse<\/label>\n            <select id=\"bpFtAltersklasseFilter\" aria-controls=\"bpFtListe\">\n              <option value=\"alle\">Alle Altersklassen<\/option>\n            <\/select>\n          <\/div>\n          <div class=\"bp-ft-filter-group\">\n            <label for=\"bpFtDatumFilter\" class=\"bp-ft-filter-label\">Spieltag<\/label>\n            <input type=\"date\" id=\"bpFtDatumFilter\" aria-controls=\"bpFtListe\" \/>\n            <small id=\"bpFtSpieltagWochentag\" class=\"bp-ft-wochentag\"><\/small>\n          <\/div>\n          <div class=\"bp-ft-filter-group\">\n            <label for=\"bpFtZeitraumFilter\" class=\"bp-ft-filter-label\">Zeitraum<\/label>\n            <select id=\"bpFtZeitraumFilter\" aria-controls=\"bpFtListe\">\n              <option value=\"alle\" selected>Alle<\/option>\n              <option value=\"7\">7 Tage<\/option>\n              <option value=\"14\">14 Tage<\/option>\n              <option value=\"30\">30 Tage<\/option>\n              <option value=\"60\">60 Tage<\/option>\n            <\/select>\n          <\/div>\n          <div class=\"bp-ft-filter-group\">\n            <label for=\"bpFtStatusFilter\" class=\"bp-ft-filter-label\">Status<\/label>\n            <select id=\"bpFtStatusFilter\" aria-controls=\"bpFtListe\">\n              <option value=\"alle\" selected>Alle Termine<\/option>\n              <option value=\"gebucht\">Termin best\u00e4tigt<\/option>\n              <option value=\"vorgemerkt\">Vorgemerkt<\/option>\n              <option value=\"neue-anfrage\">Neue Fotoanfrage<\/option>\n              <option value=\"geplant\">Geplant<\/option>\n              <option value=\"markiert\">Markierte Spiele<\/option>\n              <option value=\"kommentar\">Mit Kommentar<\/option>\n            <\/select>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"bp-ft-action-row\">\n        <button id=\"bpFtVorschlagButton\" class=\"bp-ft-btn\" type=\"button\" aria-label=\"Fototermin direkt vorschlagen\">Fototermin vorschlagen<\/button>\n      <\/div>\n\n      <div id=\"bpFtListe\" class=\"bp-ft-list\" aria-live=\"polite\"><\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const root = document.querySelector('.bp-ft-wrap');\n  if(!root || root.dataset.initialized === '1') return;\n  root.dataset.initialized = '1';\n\n  const CORS_PROXIES = [\n    { name: 'AllOrigins', url: (icsUrl) => 'https:\/\/api.allorigins.win\/raw?url=' + encodeURIComponent(icsUrl) },\n    { name: 'Cors.sh', url: (icsUrl) => 'https:\/\/cors.sh\/' + icsUrl },\n    { name: 'CorsProxy.io', url: (icsUrl) => 'https:\/\/corsproxy.io\/?' + encodeURIComponent(icsUrl) },\n    { name: 'ThingProxy', url: (icsUrl) => 'https:\/\/thingproxy.freeboard.io\/fetch\/' + icsUrl },\n    { name: 'CORS.lol', url: (icsUrl) => 'https:\/\/api.cors.lol\/?url=' + encodeURIComponent(icsUrl) },\n    { name: 'Cloudflare-CORS-Anywhere', url: (icsUrl) => 'https:\/\/cloudflare-cors-anywhere.herokuapp.com\/' + icsUrl },\n    { name: 'Codetabs', url: (icsUrl) => 'https:\/\/api.codetabs.com\/v1\/proxy?quest=' + encodeURIComponent(icsUrl) },\n    { name: 'CORS-Anywhere', url: (icsUrl) => 'https:\/\/cors-anywhere.herokuapp.com\/' + icsUrl }\n  ];\n\n  const CACHE_KEY = 'bpFtFototermineCache_v1';\n  const FOTO_INTERVAL_TAGE = 56;\n  let daten = [];\n  let lastFotoByClub = {};\n  let lastProxyFailureTime = null;\n\n  const statusWrap = root.querySelector('#bpFtStatusUpdate');\n  const progressInner = root.querySelector('#bpFtStatusProgressInner');\n  const progressText = root.querySelector('#bpFtStatusProgressText');\n  const reloadButton = root.querySelector('#bpFtReloadButton');\n  const liste = root.querySelector('#bpFtListe');\n  const counter = root.querySelector('#bpFtCounter');\n  const filterToggleBtn = root.querySelector('#bpFtFilterToggleBtn');\n  const filtersWrapper = root.querySelector('#bpFtFiltersWrapper');\n  const mannschaftFilter = root.querySelector('#bpFtMannschaftFilter');\n  const altersklasseFilter = root.querySelector('#bpFtAltersklasseFilter');\n  const datumFilter = root.querySelector('#bpFtDatumFilter');\n  const zeitraumFilter = root.querySelector('#bpFtZeitraumFilter');\n  const statusFilter = root.querySelector('#bpFtStatusFilter');\n  const spieltagWochentag = root.querySelector('#bpFtSpieltagWochentag');\n  const vorschlagButton = root.querySelector('#bpFtVorschlagButton');\n\n  const ICS_URL_FESTE      = 'https:\/\/export.kalender.digital\/ics\/4615281\/b40e8d17b4be6185fe64\/fototerminbesttigt.ics?past_months=36&future_months=36';\n  const ICS_URL_VORGEMERKT = 'https:\/\/export.kalender.digital\/ics\/4863317\/b40e8d17b4be6185fe64\/vorgemerktnochkeinefestebuchung.ics?past_months=3&future_months=36';\n  const ICS_URL_GEPLANT    = 'https:\/\/export.kalender.digital\/ics\/4863324\/b40e8d17b4be6185fe64\/inplanung.ics?past_months=3&future_months=36';\n\n  const vereineListe = [\n    'Altenhagen','Teutonia Alstadt','TsV Amshausen','SC Babenhausen','SV Baumheide','KSC Bosna Bielefeld',\n    'DSC Arminia Bielefeld','SC Bosporus','SV Brackwede','TuS Brake','NK Kroatia Bielefeld','TuS Dornberg',\n    'TuS Eintracht Bielefeld','SV Gadderbaum','GSV Kosmos','SV H\u00e4ger','SC Halle','TuS J\u00f6llenbeck','SV Heepen',\n    'SC Hellas','SG Hesseln','SC Hicret','FC Hilar Spor','TuS Einigkeit Hillegossen','TuS Hoberge Uerentrup',\n    'Turngemeinde Herste','SV Jako','SV Kako Bielefeld','KF Kosova','KuS Beli Orlovi Bielefeld',\n    'TuS Langenheide','TV Friesen Milse','SG Oesterweg','VfL Oldentrup','TuS Ost Bielefeld','SC Peckeloh',\n    'TuS Quelle','TuS Solbad Ravensberg','SV Roj','SC Bielefeld','SCE Rot-Wei\u00df Bielefeld','VfL Schildesche',\n    'TuS 08 Senne 1','Kickers Sennestadt','Sportfreunde Sennestadt','TG Sennestadt','Spvg Steinhagen',\n    'Spvg Heepen','FC T\u00fcrkspor Steinhagen','SuK Canlar Bielefeld','VfL Theesen','FC T\u00fcrkspor Bielefeld','TuRa 06',\n    'SV Ubbedissen 09','VfL Ummeln','TuS Union Bielefeld','SPVG Versmold','VfB Fichte Bielefeld',\n    'TuS Union Vilsendorf','VfR Wellensiek','BV Werther','TFC Werther','Fortuna Windfl\u00f6te','BSW West',\n    'SV Yekspor','Werl-Aspe','DJK Mastbruch','JSG Schildesche \/ Hilal Spor','TuS Schloss Holte',\n    'TuS Hesseln','TuS Oesterweg','SV Brake II','TuS Langenheide II','SG Bielefeld',\n    'FC Arminia','TuS Lank','SC Ubbedissen','SV Bockhorst','TuS Auetal','VfB Fichte II',\n    'TG Gehrke Schildesche','SV Brakkee','TuS Rielasingen','SV Brackwede II','TuS Brake II'\n  ];\n\n  const vereinsMapping = {};\n\n  function escapeHtml(str){\n    return String(str ?? '')\n      .replace(\/&\/g,'&amp;')\n      .replace(\/<\/g,'&lt;')\n      .replace(\/>\/g,'&gt;')\n      .replace(\/\"\/g,'&quot;')\n      .replace(\/'\/g,'&#39;');\n  }\n\n  function setStatus(main, sub){\n    if(!statusWrap) return;\n    const mainEl = statusWrap.querySelector('.bp-ft-status-main');\n    const subEl = statusWrap.querySelector('.bp-ft-status-sub');\n    if(mainEl) mainEl.textContent = main;\n    if(subEl) subEl.textContent = sub;\n  }\n\n  function setProgress(value){\n    const clamped = Math.max(0, Math.min(100, Math.round(value)));\n    if(progressInner) progressInner.style.width = clamped + '%';\n    if(progressText) progressText.textContent = clamped + ' %';\n  }\n\n  function canUseLocalStorage(){\n    try{\n      const testKey = '__bp_ft_test__';\n      localStorage.setItem(testKey, '1');\n      localStorage.removeItem(testKey);\n      return true;\n    }catch(e){\n      return false;\n    }\n  }\n\n  function saveDataToCache(){\n    if(!canUseLocalStorage()) return;\n    try{\n      localStorage.setItem(CACHE_KEY, JSON.stringify({\n        timestamp: Date.now(),\n        daten: daten.map(d => ({\n          datum: d.datum.toISOString(),\n          mannschaft: d.mannschaft,\n          altersklasse: d.altersklasse,\n          partie: d.partie,\n          beschreibung: d.beschreibung,\n          vorgemerkt: d.vorgemerkt,\n          bestellt: d.bestellt,\n          geplant: d.geplant,\n          abgesagt: d.abgesagt,\n          spielausfall: d.spielausfall\n        }))\n      }));\n    }catch(e){}\n  }\n\n  function loadCachedData(){\n    if(!canUseLocalStorage()) return false;\n    try{\n      const raw = localStorage.getItem(CACHE_KEY);\n      if(!raw) return false;\n      const payload = JSON.parse(raw);\n      if(!payload || !Array.isArray(payload.daten)) return false;\n\n      daten = payload.daten.map(d => ({\n        datum: new Date(d.datum),\n        mannschaft: d.mannschaft,\n        altersklasse: d.altersklasse,\n        partie: d.partie,\n        beschreibung: d.beschreibung || '',\n        vorgemerkt: !!d.vorgemerkt,\n        bestellt: !!d.bestellt,\n        geplant: !!d.geplant,\n        abgesagt: !!d.abgesagt,\n        spielausfall: !!d.spielausfall\n      }));\n\n      berechneLetzteFototermine();\n      updateFilter();\n      filterUndZeige();\n\n      const dt = new Date(payload.timestamp);\n      setStatus('Gespeicherter Stand geladen', 'Stand vom ' + dt.toLocaleDateString('de-DE') + ', ' + formatTime(dt) + ' Uhr \u2013 aktualisiere \u2026');\n      setProgress(100);\n      return true;\n    }catch(e){\n      return false;\n    }\n  }\n\n  async function fetchWithProxies(icsUrl){\n    let lastError = null;\n    for(const proxy of CORS_PROXIES){\n      try{\n        const response = await fetch(proxy.url(icsUrl));\n        if(response.ok) return await response.text();\n      }catch(error){\n        lastError = error;\n      }\n    }\n    lastProxyFailureTime = Date.now();\n    throw new Error('Alle Proxies fehlgeschlagen. Letzter Fehler: ' + (lastError ? lastError.message : ''));\n  }\n\n  function normalizeClubName(name){\n    const prefixes = ['TUS','TSV','SC','SV','VFL','VFR','DSC','KF','KUS','FC','TG','SPVG','SCE','VFB','TV','SG','NK','BSW','BV','TFC','KSC','GSV','SUK','HASENPATT','TURNGEMEINDE','KICKERS','SPORTFREUNDE','FORTUNA','JSG','DJK'];\n    let n = (name || '').toUpperCase().trim();\n\n    if(n.includes(':')) n = n.split(':')[1].trim();\n    if(n.includes('HASENPATT') && n.includes('J\u00d6LLENBECK')) n = n.replace(\/HASENPATT\\s*J\u00d6LLENBECK\/gi, 'TUS J\u00d6LLENBECK');\n    n = n.replace(\/J\u00d6LLENEBECK\/gi, 'J\u00d6LLENBECK');\n    n = n.replace(\/JOLLENBECK\/gi, 'J\u00d6LLENBECK');\n    n = n.replace(\/SCHLOSS-HOLTE\/gi, 'SCHLOSS HOLTE');\n    n = n.replace(\/\\bSCB\\b\/g, 'SC BIELEFELD');\n    n = n.replace(\/\\bHGER\\b\/g, 'H\u00c4GER');\n    n = n.replace(\/\\bH\u00d6GER\\b\/g, 'H\u00c4GER');\n    n = n.replace(\/\\b(BUCHUNG|BOOKING|TERMIN)\\b\/g, '').trim();\n    n = n.replace(\/\\bU\\s*\\d+\\b\/gi, '').trim();\n    n = n.replace(\/\\b\\d{2}\\\/\\d{2}\\b\/g, '').trim();\n    n = n.replace(\/\\b(I{1,3}|IV|V|VI{0,3}|IX|X)\\b$\/g, '').trim();\n    n = n.replace(\/\\b\\d+\\b$\/g, '').trim();\n\n    const cityNames = ['BIELEFELD','STEINHAGEN','WERTHER','VERSMOLD','HILLEGOSSEN'];\n    for(const city of cityNames){\n      if(n.endsWith(' ' + city)){\n        n = n.substring(0, n.length - city.length - 1).trim();\n        break;\n      }\n    }\n\n    if(n.startsWith('JSG ')){\n      n = n.slice(4).trim();\n      const parts = n.split(\/[\\\/,]\/);\n      if(parts.length > 0) n = parts[0].trim();\n    }\n\n    for(const prefix of prefixes){\n      if(n.startsWith(prefix + ' ')){\n        n = n.substring(prefix.length + 1).trim();\n        break;\n      }\n    }\n\n    return n;\n  }\n\n  function initVereinMapping(){\n    vereineListe.forEach((verein) => {\n      let hauptVerein = normalizeClubName(verein);\n      if(hauptVerein.includes('HASENPATT') && hauptVerein.includes('J\u00d6LLENBECK')) hauptVerein = 'TUS J\u00d6LLENBECK';\n      const normalisiert = hauptVerein.toLowerCase();\n      vereinsMapping[normalisiert] = normalisiert;\n    });\n  }\n\n  function getHauptVerein(mannschaftName){\n    const normalized = normalizeClubName(mannschaftName).toLowerCase();\n    return vereinsMapping[normalized] || normalized;\n  }\n\n  function istGueltigerVerein(name){\n    const up = (name || '').toUpperCase();\n    if(up === 'BUCHUNG: SPIELTAGSFOTOS FUSSBALL') return true;\n    if(up.includes('BOOKING') || up.includes('TERMIN')) return false;\n    return normalizeClubName(name).length > 2;\n  }\n\n  function extractAltersklasse(text){\n    const t = (text || '').trim();\n    let m = t.match(\/\\bU\\s*[-\\\/]?\\s*(\\d{1,2})\\b\/i);\n    if(m) return 'U' + m[1];\n\n    m = t.match(\/\\b(Herren|Damen)\\s*(II|III|IV|\\d+)?\\b\/i);\n    if(m){\n      const basis = m[1].charAt(0).toUpperCase() + m[1].slice(1).toLowerCase();\n      const zusatz = m[2] ? (' ' + m[2].toString().toUpperCase()) : '';\n      return basis + zusatz;\n    }\n\n    m = t.match(\/\\b(Senioren|Alte Herren|Altherren|A\\-Junioren|B\\-Junioren|C\\-Junioren)\\b\/i);\n    if(m){\n      return m[1]\n        .replace(\/junioren\/i, 'Junioren')\n        .replace(\/Alte Herren\/i, 'Alte Herren')\n        .replace(\/Altherren\/i, 'Altherren');\n    }\n    return '';\n  }\n\n  function extractMannschaften(text){\n    if(!text) return [];\n    return text.includes(' - ') ? text.split(' - ').map((e) => e.trim()) : [text];\n  }\n\n  function simplifyTeamName(name){\n    const t = (name || '').split(' ');\n    if(t[0] && t[0].toUpperCase().startsWith('U') && t.length > 1) return t.slice(1).join(' ');\n    return name;\n  }\n\n  function parseICS(text, statusTyp = 'bestellt'){\n    const lines = (text || '').split(\/\\r?\\n\/);\n    let event = null;\n    let lastKey = null;\n\n    lines.forEach((line) => {\n      if(line === 'BEGIN:VEVENT'){\n        event = {};\n        lastKey = null;\n      }else if(line === 'END:VEVENT'){\n        if(event && event.datum && event.mannschaften){\n          event.mannschaften.forEach((m) => {\n            if(statusTyp === 'geplant' || istGueltigerVerein(m)){\n              daten.push({\n                datum: new Date(event.datum),\n                mannschaft: m,\n                altersklasse: event.altersklasse || '',\n                partie: event.partie || '',\n                beschreibung: event.beschreibung || '',\n                vorgemerkt: statusTyp === 'vorgemerkt',\n                bestellt: statusTyp === 'bestellt',\n                geplant: statusTyp === 'geplant',\n                abgesagt: false,\n                spielausfall: false\n              });\n            }\n          });\n        }\n        event = null;\n        lastKey = null;\n      }else if(event){\n        if(\/^\\s\/.test(line) && lastKey === 'DESCRIPTION'){\n          event.beschreibung = (event.beschreibung || '') + line.trim();\n        }else if(line.startsWith('DTSTART;VALUE=DATE:')){\n          const d = line.substr(19);\n          event.datum = new Date(d.slice(0,4) + '-' + d.slice(4,6) + '-' + d.slice(6));\n          lastKey = 'DTSTART';\n        }else if(line.startsWith('DTSTART:')){\n          const d = line.substr(8);\n          const year = Number(d.slice(0,4));\n          const month = Number(d.slice(4,6)) - 1;\n          const day = Number(d.slice(6,8));\n          const hour = Number(d.slice(9,11) || '0');\n          const minute = Number(d.slice(11,13) || '0');\n          const second = Number(d.slice(13,15) || '0');\n          const utcMillis = Date.UTC(year, month, day, hour, minute, second);\n          event.datum = new Date(utcMillis);\n          lastKey = 'DTSTART';\n        }else if(line.startsWith('SUMMARY:')){\n          event.partie = line.substr(8);\n          event.altersklasse = extractAltersklasse(event.partie);\n          event.mannschaften = extractMannschaften(event.partie).map(simplifyTeamName);\n          lastKey = 'SUMMARY';\n        }else if(line.startsWith('DESCRIPTION:')){\n          event.beschreibung = line.substr(12);\n          lastKey = 'DESCRIPTION';\n        }\n      }\n    });\n  }\n\n  function formatBeschreibung(raw){\n    if(!raw) return '';\n    let t = raw\n      .replace(\/\\\\n\/gi, '\\n')\n      .replace(\/\\\\N\/g, '\\n')\n      .replace(\/\\\\\\\\\/g, '\\\\')\n      .replace(\/\\\\,\/g, ',')\n      .replace(\/\\\\;\/g, ';');\n\n    t = t.replace(\/\\r\\n\/g, '\\n');\n    t = t.replace(\/\\r\/g, '\\n');\n    t = t.replace(\/\\n{2,}\/g, '\\n\\n');\n    return t.trim();\n  }\n\n  function berechneLetzteFototermine(){\n    lastFotoByClub = {};\n    const feste = daten.filter(d => d.bestellt && !d.abgesagt && !d.spielausfall);\n\n    feste.forEach(d => {\n      let heim = '', gast = '';\n      if(d.partie && d.partie.includes(' - ')){\n        const t = d.partie.split(' - ');\n        heim = t[0].replace(\/^U\\s*\\d+\\s+\/i, '').trim();\n        gast = t[1].replace(\/^U\\s*\\d+\\s+\/i, '').trim();\n      }else{\n        heim = d.mannschaft;\n      }\n\n      [heim, gast].forEach(teamName => {\n        if(!teamName) return;\n        const clubKey = getHauptVerein(teamName).toLowerCase();\n        if(!clubKey) return;\n        const alt = lastFotoByClub[clubKey];\n        if(!alt || d.datum > alt) lastFotoByClub[clubKey] = d.datum;\n      });\n    });\n  }\n\n  function getLetztesFotoInfo(heimName, gastName){\n    const teams = [heimName, gastName].filter(Boolean);\n    let bestDate = null;\n    let bestMatch = '';\n    const feste = daten.filter(d => d.bestellt && !d.abgesagt && !d.spielausfall);\n\n    feste.forEach((d) => {\n      let heim = '', gast = '';\n      if(d.partie && d.partie.includes(' - ')){\n        const t = d.partie.split(' - ');\n        heim = t[0].replace(\/^U\\s*\\d+\\s+\/i, '').trim();\n        gast = t[1].replace(\/^U\\s*\\d+\\s+\/i, '').trim();\n      }else{\n        heim = d.mannschaft;\n      }\n\n      [heim, gast].forEach((teamName) => {\n        if(!teamName) return;\n        const clubKey = getHauptVerein(teamName).toLowerCase();\n        const isRelevant = teams.some((tName) => getHauptVerein(tName).toLowerCase() === clubKey);\n        if(!isRelevant) return;\n        if(!bestDate || d.datum > bestDate){\n          bestDate = d.datum;\n          bestMatch = d.partie || (heim + (gast ? ' - ' + gast : ''));\n        }\n      });\n    });\n\n    return bestDate ? { datum: bestDate, partie: bestMatch } : null;\n  }\n\n  function brauchtFotoMarkierung(spielDatum, heimName, gastName){\n    const grenze = new Date(spielDatum);\n    grenze.setDate(grenze.getDate() - FOTO_INTERVAL_TAGE);\n    const teams = [heimName, gastName].filter(Boolean);\n\n    for(const t of teams){\n      const clubKey = getHauptVerein(t).toLowerCase();\n      const last = lastFotoByClub[clubKey];\n      if(last && last >= grenze) return false;\n    }\n    return true;\n  }\n\n  function formatKommentarHTML(text, marker){\n    const escapedMarker = marker.replace(\/[.*+?^${}()|[\\]\\\\]\/g, '\\\\$&');\n    const m = text.match(new RegExp('^(' + escapedMarker + '[ \\\\t]*)([\\\\s\\\\S]*)$', 'i'));\n    if(!m) return '';\n    const prefix = m[1];\n    const rest = m[2] || '';\n    const parts = rest.split(\/\\r?\\n\/);\n    const ersteZeile = parts.shift() || '';\n    const restText = parts.join('\\n');\n    let html = '';\n    html += '<span class=\"bp-ft-comment-from\">' + escapeHtml(prefix) + '<\/span>';\n    html += '<span class=\"bp-ft-comment-main\">' + escapeHtml(ersteZeile) + '<\/span>';\n    if(restText.trim() !== '') html += '\\n' + escapeHtml(restText);\n    return html;\n  }\n\n  function renderAktuelleSpiele(spiele){\n    if(!liste) return;\n    liste.innerHTML = '';\n\n    const unique = new Set();\n    const spieleUnique = [];\n\n    spiele.sort((a,b) => a.datum - b.datum).forEach((d) => {\n      let heim = '', gast = '';\n      if(d.partie && d.partie.includes(' - ')){\n        const t = d.partie.split(' - ');\n        heim = t[0].replace(\/^U\\s*\\d+\\s+\/i, '').trim();\n        gast = t[1].replace(\/^U\\s*\\d+\\s+\/i, '').trim();\n      }else{\n        heim = d.mannschaft;\n      }\n\n      heim = heim.replace(\/\\bVorschlag:\\s*\/i, '').replace(\/\\bVorschlag\\b\/i, '');\n      const key = d.datum.toISOString().slice(0,10) + '|' + heim + '|' + gast + '|' + (d.partie || '');\n\n      if(!unique.has(key)){\n        unique.add(key);\n        spieleUnique.push({ ...d, heimOverride: heim, gastOverride: gast });\n      }\n    });\n\n    spieleUnique.forEach((d, index) => {\n      if(d.abgesagt || d.spielausfall) return;\n\n      const card = document.createElement('div');\n      card.className = 'bp-ft-item';\n\n      const uhrzeit = d.datum.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' });\n      const heim = d.heimOverride ?? d.mannschaft;\n      const gast = d.gastOverride ?? '';\n      const istGebucht = d.bestellt && !d.vorgemerkt && !d.geplant;\n      const istBuchungNur = (d.partie || '').toLowerCase().includes('buchung') && !istGebucht;\n\n      let statusText = 'Geplant';\n      let chipClass = 'planned';\n\n      if(istGebucht){\n        statusText = 'Termin best\u00e4tigt';\n        chipClass = 'success';\n        card.classList.add('status-gebucht');\n      }else if(istBuchungNur){\n        statusText = 'Neue Fotoanfrage';\n        chipClass = 'request';\n        card.classList.add('status-neue-anfrage');\n      }else if(d.vorgemerkt){\n        statusText = 'Euer Vorschlag';\n        chipClass = 'warning';\n        card.classList.add('status-vorgemerkt');\n      }else{\n        card.classList.add('status-geplant');\n      }\n\n      const beschrFormatted = formatBeschreibung(d.beschreibung || d.partie || '');\n      let buchungsTextBereinigt = beschrFormatted\n        .replace(\/Vorschlag:\\s*Blau wei\u00df G\u00fctersloh.*$\/gmi, '')\n        .replace(\/Vorschlag:\\s*Blau wei\u00df G\u00fctersloh\/gi, '');\n\n      const kommentarMarker = 'Kommentar Blickpunkt Lokalsport:';\n      const hatKommentarMarker = buchungsTextBereinigt && buchungsTextBereinigt.includes(kommentarMarker);\n      const kommentarHTML = hatKommentarMarker ? formatKommentarHTML(buchungsTextBereinigt, kommentarMarker) : '';\n      if(hatKommentarMarker){\n        buchungsTextBereinigt = buchungsTextBereinigt.split(kommentarMarker)[0].trim();\n        card.classList.add('has-comment');\n      }\n\n      const brauchtMarker = brauchtFotoMarkierung(d.datum, heim, gast);\n      const markerHTML = brauchtMarker ? '<span class=\"bp-ft-marker\" title=\"Seit mindestens 8 Wochen keine der beiden Mannschaften fotografiert\">!<\/span>' : '';\n\n      const letztesFotoInfo = getLetztesFotoInfo(heim, gast);\n      let letztesFotoText = '';\n      if(!letztesFotoInfo){\n        letztesFotoText = 'Noch kein Fototermin';\n      }else{\n        const diffMs = d.datum - letztesFotoInfo.datum;\n        const diffTage = diffMs \/ (1000 * 60 * 60 * 24);\n        if(diffTage >= FOTO_INTERVAL_TAGE){\n          letztesFotoText = 'Letztes Foto: ' + letztesFotoInfo.datum.toLocaleDateString('de-DE') + ' \u2013 ' + (letztesFotoInfo.partie || '');\n        }\n      }\n\n      const safeHeim = escapeHtml(heim || '-');\n      const safeGast = escapeHtml(gast || '-');\n      const safePartie = escapeHtml(d.partie || '-');\n      const safeAK = escapeHtml(d.altersklasse || '-');\n      const safeHinweis = escapeHtml(buchungsTextBereinigt || '').replace(\/\\n\/g, '<br>');\n      const safeKommentar = kommentarHTML.replace(\/\\n\/g, '<br>');\n      const safeLetztesFoto = escapeHtml(letztesFotoText || '');\n      const safeDatumUhr = escapeHtml(d.datum.toLocaleDateString('de-DE') + ' \u2022 ' + uhrzeit);\n\n      card.innerHTML =\n        '<div class=\"bp-ft-item-head\">' +\n          '<div class=\"bp-ft-item-datewrap\">' +\n            '<span class=\"bp-ft-item-index\">' + (index + 1) + '<\/span>' +\n            '<span class=\"bp-ft-item-date\">' + safeDatumUhr + '<\/span>' +\n          '<\/div>' +\n          '<span class=\"bp-ft-chip ' + chipClass + '\">' + escapeHtml(statusText) + markerHTML + '<\/span>' +\n        '<\/div>' +\n        (letztesFotoText ? '<div class=\"bp-ft-lastfoto-row\"><span class=\"bp-ft-lastfoto\">' + safeLetztesFoto + '<\/span><\/div>' : '') +\n        '<div class=\"bp-ft-teamgrid\">' +\n          '<div class=\"bp-ft-teamline\"><span class=\"bp-ft-card-label\">Heim<\/span><span class=\"bp-ft-card-value\">' + safeHeim + '<\/span><\/div>' +\n          '<div class=\"bp-ft-teamline\"><span class=\"bp-ft-card-label\">Gast<\/span><span class=\"bp-ft-card-value\">' + safeGast + '<\/span><\/div>' +\n        '<\/div>' +\n        '<div class=\"bp-ft-meta-row\">' +\n          '<span>AK: <strong>' + safeAK + '<\/strong><\/span>' +\n          (kommentarHTML ? '<span class=\"bp-ft-comment-badge\"><span class=\"bp-ft-comment-badge-dot\"><\/span>Neuer Kommentar<\/span>' : '') +\n        '<\/div>' +\n        '<details class=\"bp-ft-details\">' +\n          '<summary><span class=\"bp-ft-detail-label\">Buchungsdetails<\/span><\/summary>' +\n          '<div class=\"bp-ft-details-content\">' +\n            '<div class=\"bp-ft-details-grid\">' +\n              '<div><div class=\"bp-ft-detail-label\">Datum & Uhrzeit<\/div><div class=\"bp-ft-detail-value\">' + safeDatumUhr + '<\/div><\/div>' +\n              '<div><div class=\"bp-ft-detail-label\">Partie<\/div><div class=\"bp-ft-detail-value\">' + safePartie + '<\/div><\/div>' +\n            '<\/div>' +\n            '<div class=\"bp-ft-detail-label\">Buchungs-Hinweis<\/div>' +\n            (buchungsTextBereinigt ? '<div class=\"bp-ft-note\">' + safeHinweis + '<\/div>' : '') +\n            (kommentarHTML ? '<div class=\"bp-ft-note\">' + safeKommentar + '<\/div>' : '') +\n          '<\/div>' +\n        '<\/details>';\n\n      liste.appendChild(card);\n    });\n\n    if(counter) counter.textContent = String(spieleUnique.length);\n  }\n\n  function filterUndZeige(){\n    const manns = (mannschaftFilter && mannschaftFilter.value ? mannschaftFilter.value.toLowerCase() : 'alle');\n    const alt = (altersklasseFilter && altersklasseFilter.value ? altersklasseFilter.value.toLowerCase() : 'alle');\n    const heute = new Date(); heute.setHours(0,0,0,0);\n    const stat = (statusFilter && statusFilter.value) || 'alle';\n    const zeitraum = (zeitraumFilter && zeitraumFilter.value) || 'alle';\n\n    const hatSpieltag = !!(datumFilter && datumFilter.value);\n    const spieltag = hatSpieltag ? new Date(datumFilter.value) : null;\n    if(spieltag) spieltag.setHours(0,0,0,0);\n\n    let gefiltert;\n\n    if(hatSpieltag){\n      gefiltert = daten.filter((d) => {\n        const dTag = new Date(d.datum);\n        dTag.setHours(0,0,0,0);\n        return dTag.getTime() === spieltag.getTime();\n      });\n    }else{\n      const abDatum = new Date(heute);\n      gefiltert = daten.filter((d) => d.datum >= abDatum);\n      if(zeitraum !== 'alle'){\n        const days = parseInt(zeitraum, 10);\n        const maxDate = new Date(abDatum);\n        maxDate.setDate(maxDate.getDate() + days);\n        gefiltert = gefiltert.filter((d) => d.datum <= maxDate);\n      }\n    }\n\n    gefiltert = gefiltert.filter((d) => {\n      const v = getHauptVerein(d.mannschaft).toLowerCase();\n      const vereinCheck = manns === 'alle' || v === manns || v.includes(manns) || manns.includes(v);\n      const altCheck = alt === 'alle' || d.altersklasse.toLowerCase() === alt;\n      if(!vereinCheck || !altCheck) return false;\n\n      const isBuchungNur = String(d.partie || '').toLowerCase().includes('buchung') && !(d.bestellt && !d.vorgemerkt && !d.geplant);\n\n      let heim = '', gast = '';\n      if(d.partie && d.partie.includes(' - ')){\n        const t = d.partie.split(' - ');\n        heim = t[0].replace(\/^U\\s*\\d+\\s+\/i, '').trim();\n        gast = t[1].replace(\/^U\\s*\\d+\\s+\/i, '').trim();\n      }else{\n        heim = d.mannschaft;\n      }\n      heim = heim.replace(\/\\bVorschlag:\\s*\/i, '').replace(\/\\bVorschlag\\b\/i, '');\n\n      const marked = brauchtFotoMarkierung(d.datum, heim, gast);\n\n      if(stat !== 'alle'){\n        if(stat === 'gebucht' && !(d.bestellt && !d.vorgemerkt && !d.geplant && !d.abgesagt && !d.spielausfall)) return false;\n        if(stat === 'vorgemerkt' && !d.vorgemerkt) return false;\n        if(stat === 'neue-anfrage' && !isBuchungNur) return false;\n        if(stat === 'geplant' && !d.geplant) return false;\n        if(stat === 'markiert' && !marked) return false;\n      }\n      return true;\n    });\n\n    renderAktuelleSpiele(gefiltert);\n\n    if(statusFilter && statusFilter.value === 'kommentar'){\n      const cards = Array.from(liste.querySelectorAll('.bp-ft-item'));\n      cards.forEach(card => {\n        const hasComment = card.textContent.includes('Neuer Kommentar');\n        card.style.display = hasComment ? '' : 'none';\n      });\n    }\n  }\n\n  async function ladeDaten(){\n    try{\n      setStatus('Daten werden geladen \u2026', '\u2026 aus dem Buchungskalender');\n      setProgress(0);\n      if(reloadButton) reloadButton.disabled = true;\n\n      const textFeste = await fetchWithProxies(ICS_URL_FESTE);\n      setProgress(33);\n      const textVorgemerkt = await fetchWithProxies(ICS_URL_VORGEMERKT);\n      setProgress(66);\n      const textGeplant = await fetchWithProxies(ICS_URL_GEPLANT);\n      setProgress(90);\n\n      daten = [];\n      parseICS(textFeste, 'bestellt');\n      parseICS(textVorgemerkt, 'vorgemerkt');\n      parseICS(textGeplant, 'geplant');\n\n      const abAugust = new Date(2025, 7, 1);\n      daten = daten.filter((e) => {\n        if(e.datum < abAugust) return false;\n        const partieLower = String(e.partie || '').toLowerCase();\n        if(partieLower.startsWith('buchung: tus quelle - tus j\u00f6llenbeck u16') || partieLower === 'buchung: tus quelle - tus j\u00f6llenbeck u16') return false;\n        return true;\n      });\n\n      berechneLetzteFototermine();\n      updateFilter();\n      filterUndZeige();\n      saveDataToCache();\n      setProgress(100);\n      setStatus('Daten aktualisiert', 'Letzte Aktualisierung: ' + formatTime(new Date()) + ' Uhr');\n      lastProxyFailureTime = null;\n    }catch(e){\n      setProgress(0);\n      setStatus('Fehler beim Laden der Daten', 'Zeige zuletzt gespeicherten Stand (falls vorhanden)');\n      if(!daten.length) loadCachedData();\n      if(lastProxyFailureTime){\n        setTimeout(() => {\n          ladeDaten().catch(console.error);\n        }, 30000);\n      }\n    }finally{\n      if(reloadButton) reloadButton.disabled = false;\n    }\n  }\n\n  function updateFilter(){\n    const uniqueNormalized = new Map();\n    vereineListe.forEach((v) => {\n      const n = normalizeClubName(v);\n      const key = n.toLowerCase();\n      if(!uniqueNormalized.has(key)) uniqueNormalized.set(key, v);\n    });\n\n    const clubs = Array.from(uniqueNormalized.entries()).sort((a,b) => a[1].localeCompare(b[1]));\n    if(mannschaftFilter){\n      mannschaftFilter.innerHTML = '<option value=\"alle\">Alle Vereine<\/option>';\n      clubs.forEach(([n,o]) => {\n        const opt = document.createElement('option');\n        opt.value = n.toLowerCase();\n        opt.textContent = o;\n        mannschaftFilter.appendChild(opt);\n      });\n    }\n\n    const altersSet = new Set();\n    daten.forEach((d) => {\n      if(d.altersklasse) altersSet.add(d.altersklasse);\n    });\n    const altersArr = Array.from(altersSet).sort();\n    if(altersklasseFilter){\n      altersklasseFilter.innerHTML = '<option value=\"alle\">Alle Altersklassen<\/option>';\n      altersArr.forEach((ak) => {\n        const opt = document.createElement('option');\n        opt.value = ak.toLowerCase();\n        opt.textContent = ak;\n        altersklasseFilter.appendChild(opt);\n      });\n    }\n    if(statusFilter) statusFilter.value = 'alle';\n  }\n\n  function formatTime(date){\n    return String(date.getHours()).padStart(2,'0') + ':' + String(date.getMinutes()).padStart(2,'0');\n  }\n\n  function initMobileFilters(){\n    if(!filtersWrapper || !filterToggleBtn) return;\n    const isMobile = window.matchMedia('(max-width: 767px)').matches;\n    if(isMobile){\n      filtersWrapper.classList.add('is-collapsed');\n      filterToggleBtn.textContent = 'Filter anzeigen';\n      filterToggleBtn.style.display = 'inline-flex';\n    }else{\n      filtersWrapper.classList.remove('is-collapsed');\n      filterToggleBtn.textContent = '';\n      filterToggleBtn.style.display = 'none';\n    }\n  }\n\n  reloadButton && reloadButton.addEventListener('click', ladeDaten);\n  [mannschaftFilter, altersklasseFilter, zeitraumFilter, datumFilter, statusFilter].forEach((el) => {\n    if(el) el.addEventListener('change', filterUndZeige);\n  });\n\n  if(vorschlagButton){\n    vorschlagButton.addEventListener('click', () => {\n      window.open('https:\/\/kalender.digital\/b\/1fdef775bc72a60e\/961', '_blank');\n    });\n  }\n\n  if(datumFilter) datumFilter.value = '';\n\n  if(spieltagWochentag && datumFilter){\n    const updateWochentag = () => {\n      if(!datumFilter.value){\n        spieltagWochentag.textContent = '';\n        return;\n      }\n      const d = datumFilter.valueAsDate;\n      if(!d){\n        spieltagWochentag.textContent = '';\n        return;\n      }\n      spieltagWochentag.textContent = d.toLocaleDateString('de-DE', {\n        weekday:'long',\n        day:'2-digit',\n        month:'2-digit',\n        year:'numeric'\n      });\n    };\n    datumFilter.addEventListener('change', updateWochentag);\n  }\n\n  if(filterToggleBtn && filtersWrapper){\n    filterToggleBtn.addEventListener('click', () => {\n      const collapsed = filtersWrapper.classList.toggle('is-collapsed');\n      filterToggleBtn.textContent = collapsed ? 'Filter anzeigen' : 'Filter ausblenden';\n    });\n  }\n\n  window.addEventListener('resize', initMobileFilters);\n\n  initVereinMapping();\n  initMobileFilters();\n\n  const hatteCache = loadCachedData();\n  if(!hatteCache){\n    setStatus('Daten werden geladen \u2026', '\u2026 aus dem Buchungskalender');\n  }\n\n  ladeDaten();\n  setInterval(() => {\n    ladeDaten().catch(console.error);\n  }, 15 * 60 * 1000);\n})();\n<\/script>\n\n<script>document.addEventListener(\"DOMContentLoaded\",function(){function patchMobileSuggestionText(){var mobile=window.matchMedia(\"(max-width: 520px)\").matches;document.querySelectorAll(\".bp-ft-chip.warning\").forEach(function(el){var txt=(el.getAttribute(\"data-full-label\")||el.textContent||\"\").trim();if(!el.getAttribute(\"data-full-label\")) el.setAttribute(\"data-full-label\",txt);if(mobile){if(txt.toLowerCase().includes(\"vorschlag\")) el.textContent=\"Spielvorschl\u00e4ge\";} else {el.textContent=el.getAttribute(\"data-full-label\");}});}patchMobileSuggestionText();window.addEventListener(\"resize\",patchMobileSuggestionText);});<\/script>\n\n<script>document.addEventListener(\"DOMContentLoaded\",function(){function patchSuggestionBadges(){var mobile=window.matchMedia(\"(max-width: 520px)\").matches;document.querySelectorAll(\".bp-ft-item\").forEach(function(item){item.classList.remove(\"status-vorschlag\",\"status-aktuelle-vorschlaege\");});document.querySelectorAll(\".bp-ft-chip\").forEach(function(el){var original=(el.getAttribute(\"data-full-label\")||el.textContent||\"\").trim();var txt=original.toLowerCase();if(!el.getAttribute(\"data-full-label\")) el.setAttribute(\"data-full-label\",original);el.classList.remove(\"vorschlag\",\"aktuelle-vorschlaege\");el.style.fontSize=\"\";el.style.padding=\"\";el.style.minHeight=\"\";var item=el.closest(\".bp-ft-item\");if(txt.includes(\"vorschlag\")){el.classList.add(\"vorschlag\");if(item) item.classList.add(\"status-vorschlag\");if(txt.includes(\"aktuell\")){el.classList.add(\"aktuelle-vorschlaege\");if(item){item.classList.remove(\"status-vorschlag\");item.classList.add(\"status-aktuelle-vorschlaege\");}el.style.fontSize = mobile ? \".54rem\" : \".58rem\";el.style.padding = mobile ? \".03rem .22rem\" : \".06rem .32rem\";el.style.minHeight = mobile ? \"15px\" : \"17px\";}if(mobile){el.textContent = txt.includes(\"aktuell\") ? \"Aktuell\" : \"Vorschl\u00e4ge\";}else{el.textContent = el.getAttribute(\"data-full-label\");}}});}patchSuggestionBadges();window.addEventListener(\"resize\",patchSuggestionBadges);});<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>FototermineAlles im Blick Fototermin-\u00dcbersicht Fototermine &#038; Spiel\u00fcbersicht Aktuelle Fototermine Hier ist euer \u00dcberblick \u00fcber alle Eintr\u00e4ge im Kalender. Nutzt bitte die Filterm\u00f6glichkeiten und achtet auf Kommentare von uns. Datenstatus Daten werden geladen \u2026 \u2026 aus dem Buchungskalender 0 % \u27f3 Aktualisieren Termin best\u00e4tigt Eure Vorschl\u00e4ge Neue Fotoanfrage Geplant Aktuelle Spielvorschl\u00e4ge 0 Filter anzeigen Verein Alle &#8230; <a title=\"Fototermin \u00dcbersicht\" class=\"read-more\" href=\"https:\/\/blickpunkt-lokalsport.de\/english\/fototermin-uebersicht\/\" aria-label=\"Read more about Fototermin \u00dcbersicht\">Read more<\/a><\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-46963","page","type-page","status-publish"],"acf":[],"_links":{"self":[{"href":"https:\/\/blickpunkt-lokalsport.de\/english\/wp-json\/wp\/v2\/pages\/46963","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blickpunkt-lokalsport.de\/english\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blickpunkt-lokalsport.de\/english\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blickpunkt-lokalsport.de\/english\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blickpunkt-lokalsport.de\/english\/wp-json\/wp\/v2\/comments?post=46963"}],"version-history":[{"count":10,"href":"https:\/\/blickpunkt-lokalsport.de\/english\/wp-json\/wp\/v2\/pages\/46963\/revisions"}],"predecessor-version":[{"id":52771,"href":"https:\/\/blickpunkt-lokalsport.de\/english\/wp-json\/wp\/v2\/pages\/46963\/revisions\/52771"}],"wp:attachment":[{"href":"https:\/\/blickpunkt-lokalsport.de\/english\/wp-json\/wp\/v2\/media?parent=46963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}