{"id":22,"date":"2022-12-04T11:37:50","date_gmt":"2022-12-04T10:37:50","guid":{"rendered":"https:\/\/blickpunkt-lokalsport.de\/?page_id=22"},"modified":"2026-04-22T16:04:51","modified_gmt":"2026-04-22T14:04:51","slug":"starseite","status":"publish","type":"page","link":"https:\/\/blickpunkt-lokalsport.de\/english\/","title":{"rendered":"kick-off"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"22\" class=\"elementor elementor-22\" 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-13b72b2 e-con-full e-flex e-con e-parent\" data-id=\"13b72b2\" 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-3ebc5da elementor-widget elementor-widget-bdt-slideshow\" data-id=\"3ebc5da\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"bdt-slideshow.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div data-bdt-slideshow=\"{&quot;animation&quot;:&quot;scale&quot;,&quot;ratio&quot;:&quot;3:2&quot;,&quot;min-height&quot;:500,&quot;autoplay&quot;:true,&quot;autoplay-interval&quot;:10000,&quot;pause-on-hover&quot;:true,&quot;velocity&quot;:1}\" class=\"bdt-arrows-align-top-right\">\n\t\t\t<div class=\"bdt-position-relative bdt-visible-toggle\">\n\t\t\t\t\t\t\t\t<ul class=\"bdt-slideshow-items\" >\n\t\t\t\t\t<li class=\"bdt-slideshow-item elementor-repeater-item-8823f80\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/blickpunkt-lokalsport.de\/wp-content\/uploads\/2026\/04\/20260419_U19_OldHeep_0155-scaled.jpg\" alt=\"Anpfiff\" class=\"bdt-cover\" data-bdt-cover=\"\">\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"bdt-overlay-default bdt-position-cover bdt-blend-soft-light\"><\/div>\n\t\t\t\t\n\t\t\t\t\t\t<div class=\"bdt-slideshow-content-wrapper bdt-position-z-index bdt-position-bottom-right bdt-position-large bdt-text-left\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<h4 class=\"bdt-slideshow-pre-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;200, -200&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\t19.04.2026 | U19\t\t\t\t\t<\/h4>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<span class=\"bdt-slideshow-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;300, -300&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\tOldentrup stark\t\t\t\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"bdt-slideshow-text\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;500, -500&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\tDie Hausherren hatten in den Anfangsminuten ihre Probleme mit den G\u00e4sten vom Sch\u00fctzenberg, doch im Laufe des Spiels entwickelten die Hausherren ein deutliches \u00dcbergewicht gegen\u00fcber dem Gast aus Heepen. Oldentrup gewinnt am Ende mit 5:0.\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<a class=\"bdt-slideshow-button bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;-150, 150&quot;,&quot;y&quot;:&quot;0, 0&quot;}\" href=\"https:\/\/blickpunkt-lokalsport.de\/vfl-oldentrup\/\">\n\t\t\t\t\t\tZu den Bildern\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-button-icon-align-right bdt-slideshow-button-icon-right\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fa-fw fas fa-camera-retro\"><\/i>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"bdt-slideshow-item elementor-repeater-item-db6a0eb\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/blickpunkt-lokalsport.de\/wp-content\/uploads\/2026\/04\/20260419_Frauen_EintSenn_0026-scaled.jpg\" alt=\"Anpfiff\" class=\"bdt-cover\" data-bdt-cover=\"\">\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"bdt-overlay-default bdt-position-cover bdt-blend-soft-light\"><\/div>\n\t\t\t\t\n\t\t\t\t\t\t<div class=\"bdt-slideshow-content-wrapper bdt-position-z-index bdt-position-bottom-right bdt-position-large bdt-text-left\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<h4 class=\"bdt-slideshow-pre-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;200, -200&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\t19.04.2026 | Frauen\t\t\t\t\t<\/h4>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<span class=\"bdt-slideshow-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;300, -300&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\tViel Tore\t\t\t\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"bdt-slideshow-text\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;500, -500&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\tDie Frauen von der K\u00f6nigsbr\u00fcgge haben gegen die G\u00e4ste aus Senne mit 6:4 gewonnen. In einem munteren Spiel haben die Eintrachtler ihre Chancen besser genutzt.\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<a class=\"bdt-slideshow-button bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;-150, 150&quot;,&quot;y&quot;:&quot;0, 0&quot;}\" href=\"https:\/\/blickpunkt-lokalsport.de\/tus-eintracht-bielefelefeld-e-v\/\">\n\t\t\t\t\t\tZu den Bildern\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-button-icon-align-right bdt-slideshow-button-icon-right\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fa-fw fas fa-camera-retro\"><\/i>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"bdt-slideshow-item elementor-repeater-item-16af540\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/blickpunkt-lokalsport.de\/wp-content\/uploads\/2026\/04\/20260419_U19_EintHober_0126-scaled.jpg\" alt=\"Anpfiff\" class=\"bdt-cover\" data-bdt-cover=\"\">\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"bdt-overlay-default bdt-position-cover bdt-blend-soft-light\"><\/div>\n\t\t\t\t\n\t\t\t\t\t\t<div class=\"bdt-slideshow-content-wrapper bdt-position-z-index bdt-position-bottom-right bdt-position-large bdt-text-left\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<h4 class=\"bdt-slideshow-pre-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;200, -200&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\t19.04.2026 | U19\t\t\t\t\t<\/h4>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<span class=\"bdt-slideshow-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;300, -300&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\tHeimniederlage Eintracht\t\t\t\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"bdt-slideshow-text\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;500, -500&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\tDie U19 von der TuS Eintracht Bielefeld hatte am Morgen gegen die G\u00e4ste aus Hoberge-Urenrupp mit einer 1:5-Niederlage zu tun. Die Hausherren fanden gegen die Jungs von der Bergarena kein geeignetes Mittel.\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<a class=\"bdt-slideshow-button bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;-150, 150&quot;,&quot;y&quot;:&quot;0, 0&quot;}\" href=\"https:\/\/blickpunkt-lokalsport.de\/tus-eintracht-bielefelefeld-e-v\/\">\n\t\t\t\t\t\tZu den Bildern\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-button-icon-align-right bdt-slideshow-button-icon-right\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fa-fw fas fa-camera-retro\"><\/i>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"bdt-slideshow-item elementor-repeater-item-dbfabfd\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/blickpunkt-lokalsport.de\/wp-content\/uploads\/2026\/04\/18042026_U8_Spielrunde_835-scaled.jpg\" alt=\"Anpfiff\" class=\"bdt-cover\" data-bdt-cover=\"\">\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"bdt-overlay-default bdt-position-cover bdt-blend-soft-light\"><\/div>\n\t\t\t\t\n\t\t\t\t\t\t<div class=\"bdt-slideshow-content-wrapper bdt-position-z-index bdt-position-bottom-right bdt-position-large bdt-text-left\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<h4 class=\"bdt-slideshow-pre-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;200, -200&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\t18.04.2026 | U8, U13, U14\t\t\t\t\t<\/h4>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<span class=\"bdt-slideshow-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;300, -300&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\tTagespraktikant\t\t\t\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"bdt-slideshow-text\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;500, -500&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\tHeute war ein besonderer Tag: Till hat bei uns einen Tag reingeschnuppert und wir haben die Pl\u00e4tze des SC Halle unsicher gemacht. Das Ergebnis k\u00f6nnt ihr hier sehen -auch die Bilder der U14.\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<a class=\"bdt-slideshow-button bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;-150, 150&quot;,&quot;y&quot;:&quot;0, 0&quot;}\" href=\"https:\/\/blickpunkt-lokalsport.de\/sc-halle\/\">\n\t\t\t\t\t\tZu den Bildern\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-button-icon-align-right bdt-slideshow-button-icon-right\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fa-fw fas fa-camera-retro\"><\/i>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"bdt-slideshow-item elementor-repeater-item-418ad01\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/blickpunkt-lokalsport.de\/wp-content\/uploads\/2026\/04\/20260416_U17_U15_OstHeep_095-scaled.jpg\" alt=\"Anpfiff\" class=\"bdt-cover\" data-bdt-cover=\"\">\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"bdt-overlay-default bdt-position-cover bdt-blend-soft-light\"><\/div>\n\t\t\t\t\n\t\t\t\t\t\t<div class=\"bdt-slideshow-content-wrapper bdt-position-z-index bdt-position-bottom-right bdt-position-large bdt-text-left\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<h4 class=\"bdt-slideshow-pre-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;200, -200&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\t16.04.2026 | U17, U15\t\t\t\t\t<\/h4>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<span class=\"bdt-slideshow-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;300, -300&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\tHeepen ohne M\u00fche\t\t\t\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"bdt-slideshow-text\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;500, -500&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\tIm Freundschaftsspiel standen sich der TuS Ost (U17) und der SV Heepen (U15) gegen\u00fcber. Wer jetzt mit einem klaren Ergebnis f\u00fcr die Jahrgangsst\u00e4rkeren gerechnet hat, wurde zumindest in dieser Hinsicht entt\u00e4uscht. Der SV Heepen entschied die Partie klar f\u00fcr sich mit 1:10.\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<a class=\"bdt-slideshow-button bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;-150, 150&quot;,&quot;y&quot;:&quot;0, 0&quot;}\" href=\"https:\/\/blickpunkt-lokalsport.de\/ftus-ost\/\">\n\t\t\t\t\t\tZu den Bildern\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-button-icon-align-right bdt-slideshow-button-icon-right\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fa-fw fas fa-camera-retro\"><\/i>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"bdt-slideshow-item elementor-repeater-item-7c8e199\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/blickpunkt-lokalsport.de\/wp-content\/uploads\/2026\/04\/20260415_Herren_HoberPeck_204-scaled.jpg\" alt=\"Anpfiff\" class=\"bdt-cover\" data-bdt-cover=\"\">\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"bdt-overlay-default bdt-position-cover bdt-blend-soft-light\"><\/div>\n\t\t\t\t\n\t\t\t\t\t\t<div class=\"bdt-slideshow-content-wrapper bdt-position-z-index bdt-position-bottom-right bdt-position-large bdt-text-left\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<h4 class=\"bdt-slideshow-pre-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;200, -200&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\t15.04.2026 | Herren, Pokal\t\t\t\t\t<\/h4>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<span class=\"bdt-slideshow-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;300, -300&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\tHauchzart an Sensation vorbei\t\t\t\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"bdt-slideshow-text\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;500, -500&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\tWahnsinn in der Bergarena: Der B-Ligist Hoberge-Uerentrup hat dem Westfalenligisten (!) phasenweise vorgef\u00fchrt und sah zwischenzeitlich sogar wie der Sieger aus. Mit M\u00fch und Not konnte der SC Peckeloh das Spiel in den letzten Minuten noch mit 6:4 f\u00fcr sich entscheiden!\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<a class=\"bdt-slideshow-button bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;-150, 150&quot;,&quot;y&quot;:&quot;0, 0&quot;}\" href=\"https:\/\/blickpunkt-lokalsport.de\/tus-hoberge-uerentrup\/\">\n\t\t\t\t\t\tZu den Bildern\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-button-icon-align-right bdt-slideshow-button-icon-right\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fa-fw fas fa-camera-retro\"><\/i>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"bdt-slideshow-item elementor-repeater-item-ad9f03f\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/blickpunkt-lokalsport.de\/wp-content\/uploads\/2026\/04\/20260414_U17_EintPeck_098.jpg\" alt=\"Anpfiff\" class=\"bdt-cover\" data-bdt-cover=\"\">\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"bdt-overlay-default bdt-position-cover bdt-blend-soft-light\"><\/div>\n\t\t\t\t\n\t\t\t\t\t\t<div class=\"bdt-slideshow-content-wrapper bdt-position-z-index bdt-position-bottom-right bdt-position-large bdt-text-left\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<h4 class=\"bdt-slideshow-pre-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;200, -200&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\t14.04.2026 | U17\t\t\t\t\t<\/h4>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<span class=\"bdt-slideshow-title bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;300, -300&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\t\tSieg in H\u00e4lfte zwei\t\t\t\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"bdt-slideshow-text\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;500, -500&quot;,&quot;y&quot;:&quot;0, 0&quot;}\">\n\t\t\t\t\tIn der ersten Halbzeit hatten die Hausherren zwar ein \u00dcbergewicht im Spiel, dennoch lag man zur Halbzeit mit 0:1 gegen Peckeloh zur\u00fcck. Erst in H\u00e4lfte zwei belohnten sich die Eintrachtler und gewannen am Ende mit 2:1.\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t<a class=\"bdt-slideshow-button bdt-display-inline-block\" bdt-slideshow-parallax=\"{&quot;x&quot;:&quot;-150, 150&quot;,&quot;y&quot;:&quot;0, 0&quot;}\" href=\"https:\/\/blickpunkt-lokalsport.de\/tus-eintracht-bielefelefeld-e-v\/\">\n\t\t\t\t\t\tZu den Bildern\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-button-icon-align-right bdt-slideshow-button-icon-right\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fa-fw fas fa-camera-retro\"><\/i>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"bdt-position-z-index bdt-position-top-right bdt-visible@m\">\n\t\t\t<div class=\"bdt-arrows-container bdt-slidenav-container\">\n\t\t\t\t<a href=\"\" class=\"bdt-navigation-prev bdt-slidenav-previous bdt-icon bdt-slidenav\" data-bdt-slideshow-item=\"previous\">\n\t\t\t\t\t<i class=\"ep-icon-arrow-left-4\" aria-hidden=\"true\"><\/i>\n\t\t\t\t<\/a>\n\t\t\t\t<a href=\"\" class=\"bdt-navigation-next bdt-slidenav-next bdt-icon bdt-slidenav\" data-bdt-slideshow-item=\"next\">\n\t\t\t\t\t<i class=\"ep-icon-arrow-right-4\" aria-hidden=\"true\"><\/i>\n\t\t\t\t<\/a>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/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-b0a3b73 e-con-full e-flex e-con e-parent\" data-id=\"b0a3b73\" 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-a04e370 elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"a04e370\" 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>\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Oswald:wght@500;600;700&family=Inter:wght@400;500;600;700&display=swap');\r\n\r\n  #bp-countdown {\r\n    width: 100%;\r\n    box-sizing: border-box;\r\n    font-family: \"Inter\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\r\n    font-size: clamp(13px, 1.05vw + 11px, 16px);\r\n    background: linear-gradient(180deg, #f3f5f7 0%, #eceff3 100%);\r\n    color: #111827;\r\n    padding: 12px 20px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    flex-wrap: wrap;\r\n    gap: 10px;\r\n    text-align: center;\r\n    border-top: 1px solid rgba(17, 24, 39, 0.06);\r\n    border-bottom: 1px solid rgba(17, 24, 39, 0.08);\r\n    box-shadow: inset 0 1px 0 rgba(255,255,255,0.6);\r\n  }\r\n\r\n  #bp-countdown strong {\r\n    font-weight: 600;\r\n    margin: 0;\r\n    color: #111827;\r\n    letter-spacing: 0.01em;\r\n    flex: 1.15;\r\n    text-align: left;\r\n  }\r\n\r\n  #bp-countdown strong a {\r\n    color: #b30d2f;\r\n    text-decoration: none;\r\n    border-bottom: 1px solid rgba(179, 13, 47, 0.35);\r\n    padding-bottom: 1px;\r\n    transition: color 0.18s ease, border-color 0.18s ease;\r\n  }\r\n\r\n  #bp-countdown strong a:hover {\r\n    color: #8f0b26;\r\n    border-color: rgba(143, 11, 38, 0.6);\r\n  }\r\n\r\n  #bp-countdown strong a::after {\r\n    content: \"\";\r\n  }\r\n\r\n  #bp-countdown .bp-timer {\r\n    flex: 1;\r\n    text-align: center;\r\n    white-space: nowrap;\r\n    font-variant-numeric: tabular-nums;\r\n  }\r\n\r\n  #bp-countdown .bp-value {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    min-width: 38px;\r\n    padding: 4px 8px;\r\n    margin: 0 2px;\r\n    background: #ffffff;\r\n    color: #111827;\r\n    border: 1px solid rgba(17, 24, 39, 0.08);\r\n    border-radius: 999px;\r\n    font-weight: 700;\r\n    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.04);\r\n  }\r\n\r\n  #bp-countdown .bp-label {\r\n    margin: 0 4px 0 0;\r\n    font-size: 0.79em;\r\n    color: #6b7280;\r\n    text-transform: uppercase;\r\n    letter-spacing: 0.08em;\r\n    font-weight: 700;\r\n  }\r\n\r\n  #bp-info-area {\r\n    flex: 1;\r\n    text-align: right;\r\n  }\r\n\r\n  #bp-countdown small {\r\n    display: block;\r\n    font-size: 0.8em;\r\n    color: #4b5563;\r\n    line-height: 1.3;\r\n  }\r\n\r\n  #bp-weekend-info {\r\n    font-weight: 600;\r\n    margin-bottom: 2px;\r\n    color: #111827;\r\n  }\r\n\r\n  #bp-weekend-info.fade-out {\r\n    opacity: 0;\r\n    transition: opacity 0.25s ease;\r\n  }\r\n\r\n  #bp-deadline-note {\r\n    color: #6b7280;\r\n  }\r\n\r\n  #bp-countdown .bp-window {\r\n    padding: 2px 7px;\r\n    border-radius: 999px;\r\n    border: 1px solid rgba(17, 24, 39, 0.10);\r\n    background: rgba(255,255,255,0.55);\r\n  }\r\n\r\n  #bp-countdown .bp-window-active {\r\n    background: #ffffff;\r\n    color: #b30d2f;\r\n    border: 1px solid rgba(179, 13, 47, 0.18);\r\n  }\r\n\r\n  @media (max-width: 768px) {\r\n    #bp-countdown {\r\n      flex-direction: column;\r\n      align-items: center;\r\n      text-align: center;\r\n      font-size: 14px;\r\n      gap: 8px;\r\n      padding: 12px 14px;\r\n    }\r\n\r\n    #bp-countdown strong,\r\n    #bp-info-area {\r\n      text-align: center;\r\n      flex: 1 1 auto;\r\n    }\r\n\r\n    #bp-countdown .bp-timer {\r\n      order: 2;\r\n      white-space: normal;\r\n      line-height: 1.9;\r\n    }\r\n\r\n    #bp-info-area {\r\n      order: 3;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<div id=\"bp-countdown\">\r\n  <strong>\r\n    <a href=\"https:\/\/kalender.digital\/b\/1fdef775bc72a60e\/961\" target=\"_blank\" rel=\"noopener\">\r\n      Eure Fotovorschl\u00e4ge einreichen\r\n    <\/a> innerhalb:\r\n  <\/strong>\r\n\r\n  <div class=\"bp-timer\">\r\n    <span class=\"bp-value\" id=\"bp-days\">00<\/span><span class=\"bp-label\">Tage<\/span>\r\n    <span class=\"bp-value\" id=\"bp-hours\">00<\/span><span class=\"bp-label\">Std<\/span>\r\n    <span class=\"bp-value\" id=\"bp-minutes\">00<\/span><span class=\"bp-label\">Min<\/span>\r\n    <span class=\"bp-value\" id=\"bp-seconds\">00<\/span><span class=\"bp-label\">Sek<\/span>\r\n  <\/div>\r\n\r\n  <div id=\"bp-info-area\">\r\n    <small id=\"bp-weekend-info\"><\/small>\r\n    <small id=\"bp-deadline-note\">Einreichung gilt bis Freitag, 18 Uhr<\/small>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function() {\r\n  const blockedWeekends = [\r\n    \"04.04.2026-05.04.2026\"\r\n  ];\r\n\r\n  const blockedDays = [\r\n    \"01.05.2026\"\r\n  ];\r\n\r\n  function formatDateWithDay(date) {\r\n    return date.toLocaleDateString(\"de-DE\", {\r\n      weekday: \"short\",\r\n      day: \"2-digit\",\r\n      month: \"2-digit\"\r\n    }).replace(\".\", \"\");\r\n  }\r\n\r\n  function formatDeadlineDate(date) {\r\n    return date.toLocaleDateString(\"de-DE\", {\r\n      weekday: \"short\",\r\n      day: \"2-digit\",\r\n      month: \"2-digit\"\r\n    }).replace(\".\", \"\");\r\n  }\r\n\r\n  function parseGermanDate(str) {\r\n    const [day, month, year] = str.split(\".\");\r\n    return new Date(Number(year), Number(month) - 1, Number(day), 0, 0, 0, 0);\r\n  }\r\n\r\n  function parseWeekendRange(rangeStr) {\r\n    const [startStr, endStr] = rangeStr.split(\"-\");\r\n    const start = parseGermanDate(startStr);\r\n    const end = parseGermanDate(endStr);\r\n    return { start, end };\r\n  }\r\n\r\n  function isBlockedSingleDay(date) {\r\n    return blockedDays.some(dStr => {\r\n      const d = parseGermanDate(dStr);\r\n      return d.getTime() === date.getTime();\r\n    });\r\n  }\r\n\r\n  function isBlockedWholeWeekend(saturday, sunday) {\r\n    return blockedWeekends.some(rangeStr => {\r\n      const { start, end } = parseWeekendRange(rangeStr);\r\n      return (\r\n        (saturday >= start && saturday <= end) ||\r\n        (sunday >= start && sunday <= end)\r\n      );\r\n    });\r\n  }\r\n\r\n  function isBlockedDate(date) {\r\n    if (isBlockedSingleDay(date)) return true;\r\n\r\n    const saturday = new Date(date);\r\n    const dow = date.getDay();\r\n    const offsetToSaturday = (6 - dow + 7) % 7;\r\n    saturday.setDate(date.getDate() + offsetToSaturday);\r\n\r\n    const sunday = new Date(saturday);\r\n    sunday.setDate(saturday.getDate() + 1);\r\n\r\n    if (isBlockedWholeWeekend(saturday, sunday)) return true;\r\n\r\n    return false;\r\n  }\r\n\r\n  function getWeekendRange(offsetWeeks = 0) {\r\n    const now = new Date();\r\n    const monday = new Date(now);\r\n    monday.setDate(monday.getDate() - ((monday.getDay() + 6) % 7) + offsetWeeks * 7);\r\n\r\n    let saturday = new Date(monday);\r\n    saturday.setDate(monday.getDate() + 5);\r\n\r\n    let sunday = new Date(monday);\r\n    sunday.setDate(monday.getDate() + 6);\r\n\r\n    let safety = 0;\r\n    while (isBlockedWholeWeekend(saturday, sunday) && safety < 20) {\r\n      saturday.setDate(saturday.getDate() + 7);\r\n      sunday.setDate(sunday.getDate() + 7);\r\n      safety++;\r\n    }\r\n\r\n    const parts = [];\r\n\r\n    if (!isBlockedSingleDay(saturday)) parts.push(formatDateWithDay(saturday));\r\n    if (!isBlockedSingleDay(sunday)) parts.push(formatDateWithDay(sunday));\r\n\r\n    if (parts.length === 0) {\r\n      return `${formatDateWithDay(saturday)} \u2013 ${formatDateWithDay(sunday)}`;\r\n    } else if (parts.length === 2) {\r\n      return `${parts[0]} \u2013 ${parts[1]}`;\r\n    }\r\n\r\n    return parts[0];\r\n  }\r\n\r\n  function isThisWeekendPhase() {\r\n    const now = new Date();\r\n    const dow = now.getDay();\r\n    const hour = now.getHours();\r\n    if (dow >= 1 && dow <= 4) return true;\r\n    if (dow === 5 && hour < 18) return true;\r\n    return false;\r\n  }\r\n\r\n  function getNextUsableFriday18(fromDate = new Date()) {\r\n    const result = new Date(fromDate);\r\n    const targetDow = 5;\r\n    const currentDow = result.getDay();\r\n    let diffDays = targetDow - currentDow;\r\n    if (diffDays < 0) diffDays += 7;\r\n    result.setDate(result.getDate() + diffDays);\r\n    result.setHours(18, 0, 0, 0);\r\n\r\n    if (result <= fromDate) {\r\n      result.setDate(result.getDate() + 7);\r\n    }\r\n\r\n    let safety = 0;\r\n    while (isBlockedDate(result) && safety < 30) {\r\n      result.setDate(result.getDate() + 7);\r\n      safety++;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  const info = document.getElementById(\"bp-weekend-info\");\r\n  const deadlineNoteEl = document.getElementById(\"bp-deadline-note\");\r\n  let lastPhase = null;\r\n  let target = getNextUsableFriday18(new Date());\r\n\r\n  if (deadlineNoteEl) {\r\n    deadlineNoteEl.textContent =\r\n      \"Einreichung gilt bis \" + formatDeadlineDate(target) + \", 18 Uhr\";\r\n  }\r\n\r\n  function updateWeekendInfo(initial = false) {\r\n    const currentPhase = isThisWeekendPhase() ? \"this\" : \"next\";\r\n    if (currentPhase === lastPhase && !initial) return;\r\n\r\n    const text = currentPhase === \"this\"\r\n      ? `f\u00fcr <span class=\"bp-window bp-window-active\">${getWeekendRange(0)}<\/span>`\r\n      : `f\u00fcr <span class=\"bp-window bp-window-active\">${getWeekendRange(1)}<\/span>`;\r\n\r\n    info.classList.add(\"fade-out\");\r\n    setTimeout(() => {\r\n      info.innerHTML = text;\r\n      info.classList.remove(\"fade-out\");\r\n    }, 250);\r\n\r\n    lastPhase = currentPhase;\r\n  }\r\n\r\n  function updateCountdown() {\r\n    const now = new Date();\r\n    let diff = target - now;\r\n\r\n    if (diff <= 0) {\r\n      target = getNextUsableFriday18(now);\r\n      diff = target - now;\r\n\r\n      if (deadlineNoteEl) {\r\n        deadlineNoteEl.textContent =\r\n          \"Einreichung gilt bis \" + formatDeadlineDate(target) + \", 18 Uhr\";\r\n      }\r\n    }\r\n\r\n    const totalSeconds = Math.floor(diff \/ 1000);\r\n    const days = Math.floor(totalSeconds \/ (60 * 60 * 24));\r\n    const hours = Math.floor((totalSeconds % (60 * 60 * 24)) \/ (60 * 60));\r\n    const minutes = Math.floor((totalSeconds % (60 * 60)) \/ 60);\r\n    const seconds = totalSeconds % 60;\r\n    const pad = n => String(n).padStart(2, \"0\");\r\n\r\n    document.getElementById(\"bp-days\").textContent = pad(days);\r\n    document.getElementById(\"bp-hours\").textContent = pad(hours);\r\n    document.getElementById(\"bp-minutes\").textContent = pad(minutes);\r\n    document.getElementById(\"bp-seconds\").textContent = pad(seconds);\r\n\r\n    updateWeekendInfo();\r\n  }\r\n\r\n  updateWeekendInfo(true);\r\n  updateCountdown();\r\n  setInterval(updateCountdown, 1000);\r\n})();\r\n<\/script>\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-6a20d46 e-flex e-con-boxed e-con e-parent\" data-id=\"6a20d46\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a1fde96 elementor-widget elementor-widget-spacer\" data-id=\"a1fde96\" 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\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ed45472 e-con-full e-flex e-con e-parent\" data-id=\"ed45472\" 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-4f07c8f elementor-widget elementor-widget-html\" data-id=\"4f07c8f\" 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<section class=\"bls-about\">\r\n  <details class=\"bls-about-accordion\">\r\n    <summary class=\"bls-about-summary\">\r\n      Wer wir sind\r\n      <span class=\"bls-about-summary-icon\">+<\/span>\r\n    <\/summary>\r\n\r\n    <div class=\"bls-about-inner\">\r\n\r\n      <div class=\"bls-about-text\">\r\n        <span class=\"bls-about-kicker\">\r\n          Amateur- &amp; Jugendfu\u00dfball\r\n        <\/span>\r\n\r\n        <h2 class=\"bls-about-title\">\r\n          Emotionale Fu\u00dfballbilder<br>f\u00fcr Bielefeld und die Region\r\n        <\/h2>\r\n\r\n        <div class=\"bls-about-text-full\">\r\n          <p class=\"bls-about-p\">\r\n            Blickpunkt Lokalsport ist die ehrenamtliche Fotoplattform f\u00fcr Amateur- und Jugendfu\u00dfball in Bielefeld und Umgebung.\r\n          <\/p>\r\n          <p class=\"bls-about-p\">\r\n            Seit vielen Jahren halte ich das regionale Fu\u00dfballgeschehen systematisch fest und baue ein stetig wachsendes Bildarchiv rund um den Amateur- und Jugendfu\u00dfball auf.\r\n          <\/p>\r\n          <p class=\"bls-about-p\">\r\n            Meine Eins\u00e4tze sind f\u00fcr Vereine <strong>ehrenamtlich und kostenlos<\/strong>.\r\n          <\/p>\r\n          <p class=\"bls-about-p\">\r\n            Ihr k\u00f6nnt eure Spielvorschl\u00e4ge ganz einfach im Kalender eintragen \u2013 dieses Angebot wird bereits intensiv genutzt.\r\n          <\/p>\r\n          <p class=\"bls-about-p\">\r\n            Ich arbeite in enger Kooperation mit dem \r\n            <a href=\"https:\/\/www.flvw-bielefeld.de\/index.php\/news\/729\/63\/Neue-Impulse-fuer-oeffentlichkeitsarbeit\" \r\n               target=\"_blank\" rel=\"noopener noreferrer\" class=\"bls-about-link\">\r\n              <strong>FLVW Bielefeld<\/strong>\r\n            <\/a> \r\n            sowie vielen Vereinen der Region.\r\n          <\/p>\r\n          <p class=\"bls-about-p\">\r\n            Durch den direkten Kontakt zu Teams, Trainerinnen, Trainern und Familien entstehen authentische, emotionale Bilder.\r\n          <\/p>\r\n          <p class=\"bls-about-p bls-about-p-last\">\r\n            Ab 2026 k\u00f6nnt ihr au\u00dferdem <strong>Tagespraktika direkt bei euch am Platz<\/strong> machen. \r\n            Alle Informationen dazu findet ihr unter \r\n            <a href=\"https:\/\/blickpunkt-lokalsport.de\/vor-ort-praktika\/\" class=\"bls-about-link\">\r\n              Informationen\r\n            <\/a>.\r\n          <\/p>\r\n        <\/div>\r\n\r\n        <div class=\"bls-about-text-short\">\r\n          <p class=\"bls-about-p\">\r\n            Blickpunkt Lokalsport ist die ehrenamtliche Fotoplattform f\u00fcr Amateur- und Jugendfu\u00dfball in Bielefeld und Umgebung.\r\n          <\/p>\r\n          <p class=\"bls-about-p\">\r\n            Ich begleite Spiele ehrenamtlich und kostenlos, arbeite eng mit dem \r\n            <a href=\"https:\/\/www.flvw-bielefeld.de\/index.php\/news\/729\/63\/Neue-Impulse-fuer-oeffentlichkeitsarbeit\" \r\n               target=\"_blank\" rel=\"noopener noreferrer\" class=\"bls-about-link\">\r\n              <strong>FLVW Bielefeld<\/strong>\r\n            <\/a>\r\n            und vielen Vereinen zusammen \u2013 so entsteht ein stetig wachsendes Bildarchiv.\r\n          <\/p>\r\n        <\/div>\r\n\r\n        <div class=\"bls-about-cta-row\">\r\n          <a href=\"https:\/\/blickpunkt-lokalsport.de\/kontakt\/\" class=\"bls-about-cta\">\r\n            Jetzt unverbindlich anfragen\r\n            <span class=\"bls-about-cta-arrow\">\u2192<\/span>\r\n          <\/a>\r\n          <span class=\"bls-about-cta-note\">\r\n            Ehrenamtlich, kostenlos &amp; nah dran am Geschehen\r\n          <\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"bls-about-side\">\r\n        <div class=\"bls-about-card\">\r\n          <div class=\"bls-about-image-wrap\">\r\n            <img decoding=\"async\" \r\n              src=\"http:\/\/blickpunkt-lokalsport.de\/wp-content\/uploads\/2025\/07\/DSC00260-scaled.jpg\" \r\n              alt=\"Blickpunkt Lokalsport am Spielfeldrand\" \r\n              loading=\"lazy\">\r\n            <span class=\"bls-about-image-label\">\r\n              Live vom Spielfeldrand\r\n            <\/span>\r\n          <\/div>\r\n\r\n          <p class=\"bls-about-side-text\">\r\n            Benjamin Hanke f\u00e4ngt das Geschehen am Spielfeldrand authentisch und nahbar ein.\r\n          <\/p>\r\n\r\n          <div class=\"bls-about-divider\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/details>\r\n<\/section>\r\n\r\n<style>\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Oswald:wght@500;600;700&family=Inter:wght@400;500;600;700&display=swap');\r\n\r\n  .bls-about {\r\n    max-width: 1120px;\r\n    margin: 32px auto;          \/* weniger Au\u00dfenabstand *\/\r\n    padding: 16px 16px;         \/* weniger Innenabstand *\/\r\n    background: #f5f7fa;\r\n    color: #111827;\r\n    font-family: \"Inter\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Arial, sans-serif;\r\n  }\r\n\r\n  .bls-about-inner {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 24px;                  \/* weniger Abstand zwischen Text\/Bild *\/\r\n    align-items: flex-start;\r\n  }\r\n\r\n  .bls-about-text {\r\n    flex: 1 1 320px;\r\n    min-width: 280px;\r\n  }\r\n\r\n  .bls-about-side {\r\n    flex: 1 1 320px;\r\n    min-width: 280px;\r\n  }\r\n\r\n  .bls-about-kicker {\r\n    display: inline-block;\r\n    font-size: 0.78rem;\r\n    letter-spacing: 0.14em;\r\n    text-transform: uppercase;\r\n    color: #b30d2f;\r\n    margin-bottom: 6px;         \/* kleiner *\/\r\n    font-weight: 600;\r\n  }\r\n\r\n  .bls-about-title {\r\n    font-family: \"Oswald\", sans-serif;\r\n    font-size: clamp(1.5rem, 1.2rem + 1vw, 1.9rem); \/* minimal kleiner *\/\r\n    line-height: 1.15;\r\n    margin: 0 0 8px;            \/* weniger Abstand nach unten *\/\r\n    color: #111827;\r\n  }\r\n\r\n  .bls-about-p {\r\n    margin: 0 0 10px !important; \/* weniger Absatz-Abstand *\/\r\n    font-size: 0.95rem;\r\n    color: #374151;\r\n    line-height: 1.45;          \/* leicht enger *\/\r\n  }\r\n\r\n  .bls-about-p-last {\r\n    margin-bottom: 14px !important;\r\n  }\r\n\r\n  .bls-about-link {\r\n    color: #b30d2f;\r\n    text-decoration: none;\r\n    font-weight: 600;\r\n    border-bottom: 1px solid rgba(179, 13, 47, 0.35);\r\n    padding-bottom: 0;\r\n    transition: color 0.15s ease, border-color 0.15s ease;\r\n  }\r\n\r\n  .bls-about-link:hover {\r\n    color: #7f1023;\r\n    border-color: rgba(127, 16, 35, 0.8);\r\n  }\r\n\r\n  .bls-about-cta-row {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 8px;                   \/* enger *\/\r\n    align-items: center;\r\n    margin-top: 4px;            \/* sehr wenig Abstand nach oben *\/\r\n  }\r\n\r\n  .bls-about-cta {\r\n    background: #ffffff;\r\n    color: #b30d2f;\r\n    padding: 8px 18px;          \/* kleiner Button *\/\r\n    border-radius: 0;\r\n    text-decoration: none;\r\n    font-weight: 600;\r\n    font-size: 0.9rem;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 6px;\r\n    box-shadow: 0 3px 8px rgba(15, 23, 42, 0.10);\r\n    border: 1px solid rgba(15, 23, 42, 0.18);\r\n    transition:\r\n      background 0.15s ease,\r\n      color 0.15s ease,\r\n      transform 0.1s ease,\r\n      box-shadow 0.15s ease,\r\n      border-color 0.15s ease;\r\n  }\r\n\r\n  .bls-about-cta:hover {\r\n    background: #fef2f2;\r\n    border-color: #b30d2f;\r\n    color: #7f1023;\r\n    box-shadow: 0 4px 12px rgba(179, 13, 47, 0.25);\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .bls-about-cta-arrow {\r\n    font-size: 1rem;\r\n    line-height: 1;\r\n  }\r\n\r\n  .bls-about-cta-note {\r\n    font-size: 0.8rem;\r\n    color: #6b7280;\r\n  }\r\n\r\n  .bls-about-card {\r\n    background: #ffffff;\r\n    border-radius: 0;\r\n    box-shadow: 0 10px 28px rgba(15, 23, 42, 0.10); \/* etwas weniger *\/\r\n    padding: 10px;              \/* weniger Padding *\/\r\n    max-width: 420px;\r\n    margin: 0 auto;\r\n    border: 1px solid rgba(15, 23, 42, 0.08);\r\n  }\r\n\r\n  .bls-about-image-wrap {\r\n    position: relative;\r\n    margin-bottom: 6px;\r\n  }\r\n\r\n  .bls-about-image-wrap img {\r\n    width: 100%;\r\n    height: auto;\r\n    display: block;\r\n    object-fit: cover;\r\n  }\r\n\r\n  .bls-about-image-label {\r\n    position: absolute;\r\n    left: 10px;\r\n    bottom: 10px;\r\n    background: rgba(0, 0, 0, 0.75);\r\n    color: #ffffff;\r\n    font-size: 0.74rem;\r\n    padding: 4px 9px;\r\n    border-radius: 999px;\r\n  }\r\n\r\n  .bls-about-side-text {\r\n    margin: 2px 0 6px;\r\n    font-size: 0.78rem;\r\n    color: #6b7280;\r\n  }\r\n\r\n  .bls-about-divider {\r\n    height: 1px;\r\n    background: linear-gradient(to right, rgba(0,0,0,0.03), rgba(0,0,0,0.12), rgba(0,0,0,0.03));\r\n    margin: 6px 0 8px;\r\n  }\r\n\r\n  .bls-about-text-full {\r\n    display: block;\r\n  }\r\n\r\n  .bls-about-text-short {\r\n    display: none;\r\n  }\r\n\r\n  \/* Accordion-Styles *\/\r\n  .bls-about-accordion {\r\n    border: none;\r\n    padding: 0;\r\n  }\r\n\r\n  .bls-about-summary {\r\n    cursor: pointer;\r\n    list-style: none;\r\n    padding: 0 0 8px;          \/* weniger H\u00f6he im Header *\/\r\n    margin: 0 0 8px;\r\n    font-weight: 600;\r\n    font-size: 0.98rem;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    color: #111827;\r\n    border-bottom: 1px solid rgba(15, 23, 42, 0.16);\r\n  }\r\n\r\n  .bls-about-summary::-webkit-details-marker {\r\n    display: none;\r\n  }\r\n\r\n  .bls-about-summary-icon {\r\n    font-size: 1rem;\r\n    color: #6b7280;\r\n    margin-left: 8px;\r\n    transition: transform 0.15s ease;\r\n  }\r\n\r\n  .bls-about-accordion[open] .bls-about-summary-icon {\r\n    transform: rotate(45deg);\r\n  }\r\n\r\n  @media (max-width: 768px) {\r\n    .bls-about {\r\n      margin: 24px auto;\r\n      padding: 16px 14px;\r\n    }\r\n\r\n    .bls-about-inner {\r\n      gap: 20px;\r\n      flex-direction: column;\r\n    }\r\n\r\n    .bls-about-text-full {\r\n      display: none;\r\n    }\r\n\r\n    .bls-about-text-short {\r\n      display: block;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 480px) {\r\n    .bls-about-title {\r\n      font-size: 1.4rem;\r\n    }\r\n  }\r\n<\/style>\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-fb93ec0 e-flex e-con-boxed e-con e-parent\" data-id=\"fb93ec0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8428625 elementor-widget elementor-widget-spacer\" data-id=\"8428625\" 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\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a5004d2 e-con-full e-flex e-con e-parent\" data-id=\"a5004d2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-49b8ed5 elementor-widget elementor-widget-html\" data-id=\"49b8ed5\" 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<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" crossorigin=\"\"\/>\r\n\r\n<div id=\"naechstesSpiel\" class=\"naechstes-wrapper\">\r\n  <div id=\"naechstesSpielLoadingBar\" class=\"naechstes-loading-bar\" aria-hidden=\"true\">\r\n    <div id=\"naechtesSpielLoadingBarInner\" class=\"naechstes-loading-bar-inner\"><\/div>\r\n  <\/div>\r\n\r\n  <div class=\"naechstes-header-row\">\r\n    <h2 class=\"naechstes-title\">N\u00e4chste Fototermine<\/h2>\r\n    <div class=\"naechstes-live-indicator\">\r\n      <span class=\"naechstes-live-dot\"><\/span>\r\n      <span>Best\u00e4tigt \u00b7 live<\/span>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"naechstes-content\">\r\n    <div class=\"naechstes-event-grid\">\r\n      <div class=\"naechstes-event-column naechstes-event-column-primary\">\r\n        <div class=\"naechstes-event-column-header\">\r\n          Fototermine heute <span id=\"naechstesHeuteBadge\" class=\"badge-offline\">Stand<\/span>\r\n        <\/div>\r\n        <div id=\"naechstesJetztLine\" class=\"naechstes-event-nowline\">Jetzt \u00b7 --:-- Uhr<\/div>\r\n        <div id=\"naechstesHeuteList\" class=\"naechstes-event-list\">\r\n          <div class=\"naechstes-event-hint\">Letzter Stand wird angezeigt, Aktualisierung l\u00e4uft im Hintergrund \u2026<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"naechstes-event-column\">\r\n        <div class=\"naechstes-event-column-header\">Demn\u00e4chst<\/div>\r\n        <div id=\"naechstesDemnaechstList\" class=\"naechstes-event-list\">\r\n          <div class=\"naechstes-event-hint\">Die n\u00e4chsten Termine werden geladen \u2026<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"naechstes-event-column\">\r\n        <div class=\"naechstes-event-column-header\" id=\"naechstesMapWeatherTitle\">Wetter<\/div>\r\n\r\n        <div class=\"naechstes-event-weather-wrap\">\r\n          <div id=\"naechstesSpielMapWrap\" style=\"width:100%;display:none;\">\r\n            <div id=\"naechstesSpielMap\"><\/div>\r\n          <\/div>\r\n\r\n          <div id=\"naechstesSpielWeatherWrap\" style=\"width:100%;display:block;\">\r\n            <iframe\r\n              id=\"naechstesSpielWeather\"\r\n              title=\"Wetter in Bielefeld\"\r\n              width=\"300\"\r\n              height=\"365\"\r\n              name=\"FC3\"\r\n              src=\"https:\/\/api.wetteronline.de\/wetterwidget?gid=10424&modeid=FC3&seourl=bielefeld&locationname=Bielefeld&lang=de\"\r\n              style=\"width:100%;max-width:300px;height:365px;border:0;display:block;background:#fff;\">\r\n            <\/iframe>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div id=\"naechstesSpielMapHint\" class=\"naechstes-event-hint\">\r\n          Wenn kein Live-Termin l\u00e4uft, wird das Wetter angezeigt.\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"naechstes-footer-row\">\r\n    <small id=\"naechstesSpielStatus\" class=\"naechstes-status\">\r\n      Letzter bekannter Stand wird angezeigt \u00b7 Aktualisierung l\u00e4uft automatisch\r\n    <\/small>\r\n    <a\r\n      href=\"https:\/\/blickpunkt-lokalsport.de\/fototermin-uebersicht\/\"\r\n      class=\"naechstes-link-all\"\r\n      target=\"_blank\"\r\n      rel=\"noopener noreferrer\"\r\n    >\r\n      <span>Alle Fototermine<\/span>\r\n      <span class=\"naechstes-link-arrow\">\u203a<\/span>\r\n    <\/a>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Oswald:wght@500;600;700&family=Inter:wght@400;500;600;700&display=swap');\r\n\r\n  .naechstes-wrapper {\r\n    font-family: \"Inter\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Arial, sans-serif;\r\n    max-width: 1250px;\r\n    margin: 0.5rem auto;\r\n    padding: 0.7rem 0.9rem;\r\n    background: #f5f7fa;\r\n    color: #111827;\r\n    border: 1px solid rgba(15, 23, 42, 0.08);\r\n    box-shadow: 0 10px 24px rgba(15, 23, 42, 0.10);\r\n    position: relative;\r\n    overflow: hidden;\r\n  }\r\n\r\n  .naechstes-header-row {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    gap: 0.5rem;\r\n    flex-wrap: wrap;\r\n    margin-bottom: 0.4rem;\r\n  }\r\n\r\n  .naechstes-title {\r\n    color: #111827;\r\n    font-family: \"Oswald\", sans-serif;\r\n    font-weight: 600;\r\n    font-size: 0.98rem;\r\n    margin: 0;\r\n    letter-spacing: 0.16em;\r\n    text-transform: uppercase;\r\n  }\r\n\r\n  .naechstes-live-indicator {\r\n    font-size: 0.72rem;\r\n    color: #4b5563;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 0.3rem;\r\n  }\r\n\r\n  .naechstes-live-dot {\r\n    width: 7px;\r\n    height: 7px;\r\n    border-radius: 999px;\r\n    background: #16a34a;\r\n    display: inline-block;\r\n    box-shadow: 0 0 0 3px rgba(22, 163, 74, 0.18);\r\n  }\r\n\r\n  .naechstes-loading-bar {\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    width: 100%;\r\n    height: 6px;\r\n    background: rgba(15, 23, 42, 0.12);\r\n    border-bottom: 1px solid rgba(15, 23, 42, 0.16);\r\n    opacity: 0;\r\n    visibility: hidden;\r\n    pointer-events: none;\r\n    transition: opacity 0.2s ease, visibility 0.2s ease;\r\n    z-index: 80;\r\n    overflow: hidden;\r\n  }\r\n\r\n  .naechstes-loading-bar.is-active {\r\n    opacity: 1;\r\n    visibility: visible;\r\n  }\r\n\r\n  .naechstes-loading-bar-inner {\r\n    width: 0%;\r\n    height: 100%;\r\n    background: linear-gradient(90deg, #b30d2f 0%, #7f1023 55%, #b30d2f 100%);\r\n    transition: width 0.28s ease;\r\n  }\r\n\r\n  .naechstes-event-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(3, minmax(0, 1fr));\r\n    gap: 0.75rem;\r\n    align-items: stretch;\r\n  }\r\n\r\n  .naechstes-event-column {\r\n    position: relative;\r\n    background: #ffffff;\r\n    padding: 0.6rem 0.7rem;\r\n    border: 1px solid rgba(15, 23, 42, 0.06);\r\n    box-shadow: 0 4px 10px rgba(15, 23, 42, 0.04);\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.35rem;\r\n    min-width: 0;\r\n  }\r\n\r\n  .naechstes-event-column-primary {\r\n    border-color: #16a34a;\r\n    box-shadow: 0 6px 14px rgba(22, 163, 74, 0.14);\r\n  }\r\n\r\n  .naechstes-event-column-primary::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    inset: 0 auto 0 0;\r\n    width: 4px;\r\n    background: linear-gradient(180deg, #bbf7d0 0%, #4ade80 40%, #16a34a 100%);\r\n  }\r\n\r\n  .naechstes-event-column-header {\r\n    font-size: 0.78rem;\r\n    font-weight: 700;\r\n    text-transform: uppercase;\r\n    letter-spacing: 0.20em;\r\n    color: #6b7280;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 0.4rem;\r\n  }\r\n\r\n  .naechstes-event-column-primary .naechstes-event-column-header {\r\n    color: #111827;\r\n  }\r\n\r\n  .badge-live,\r\n  .badge-offline,\r\n  .badge-running {\r\n    font-size: 0.68rem;\r\n    font-weight: 700;\r\n    padding: 0.10rem 0.6rem;\r\n    text-transform: uppercase;\r\n    border: 1px solid rgba(15, 23, 42, 0.12);\r\n    background: #f3f4f6;\r\n    color: #4b5563;\r\n  }\r\n\r\n  .badge-live {\r\n    background: #16a34a;\r\n    color: #f9fafb;\r\n    border-color: #15803d;\r\n  }\r\n\r\n  .badge-offline {\r\n    background: #e5e7eb;\r\n    color: #4b5563;\r\n  }\r\n\r\n  .badge-running {\r\n    background: #b30d2f;\r\n    color: #ffffff;\r\n    border-color: #7f1023;\r\n  }\r\n\r\n  .naechstes-event-nowline {\r\n    margin-top: 0.15rem;\r\n    margin-bottom: 0.2rem;\r\n    font-size: 0.76rem;\r\n    font-weight: 600;\r\n    letter-spacing: 0.14em;\r\n    text-transform: uppercase;\r\n    color: #4b5563;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 0.4rem;\r\n  }\r\n\r\n  .naechstes-event-nowline::before {\r\n    content: \"\";\r\n    width: 6px;\r\n    height: 6px;\r\n    border-radius: 999px;\r\n    background: #16a34a;\r\n  }\r\n\r\n  .naechstes-event-hint {\r\n    font-size: 0.8rem;\r\n    color: #9ca3af;\r\n    margin-top: 0.15rem;\r\n  }\r\n\r\n  .naechstes-event-list {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.28rem;\r\n    min-height: 60px;\r\n  }\r\n\r\n  .naechstes-event-item {\r\n    display: flex;\r\n    align-items: flex-start;\r\n    padding: 0.35rem 0.3rem;\r\n    gap: 0.5rem;\r\n    background: #f9fafb;\r\n    transition: background 0.15s ease, transform 0.1s ease, box-shadow 0.15s ease;\r\n  }\r\n\r\n  .naechstes-event-item:hover {\r\n    background: #f1f5f9;\r\n    box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08);\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .naechstes-event-dot {\r\n    width: 7px;\r\n    height: 7px;\r\n    border-radius: 999px;\r\n    margin-top: 0.42rem;\r\n    background: #15803d;\r\n    flex: 0 0 auto;\r\n  }\r\n\r\n  .naechstes-event-meta {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.12rem;\r\n    flex: 1;\r\n    min-width: 0;\r\n  }\r\n\r\n  .naechstes-event-date-time {\r\n    display: flex;\r\n    gap: 0.3rem;\r\n    font-size: 0.8rem;\r\n    color: #374151;\r\n    align-items: baseline;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .naechstes-event-date {\r\n    font-weight: 600;\r\n    font-size: 0.86rem;\r\n  }\r\n\r\n  .naechstes-event-time {\r\n    font-weight: 700;\r\n    color: #b91c1c;\r\n    font-size: 0.9rem;\r\n  }\r\n\r\n  .naechstes-event-summary {\r\n    font-size: 0.84rem;\r\n    color: #111827;\r\n    font-weight: 500;\r\n    word-break: break-word;\r\n  }\r\n\r\n  .naechstes-event-running-label {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 0.35rem;\r\n    width: fit-content;\r\n    font-size: 0.7rem;\r\n    font-weight: 700;\r\n    text-transform: uppercase;\r\n    letter-spacing: 0.08em;\r\n    color: #ffffff;\r\n    background: #b30d2f;\r\n    border: 1px solid #7f1023;\r\n    padding: 0.14rem 0.45rem;\r\n    margin-top: 0.2rem;\r\n  }\r\n\r\n  .naechstes-event-running-label::before {\r\n    content: \"\";\r\n    width: 6px;\r\n    height: 6px;\r\n    border-radius: 999px;\r\n    background: #ffffff;\r\n  }\r\n\r\n  .naechstes-event-weather-wrap {\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: flex-start;\r\n    padding: 0.2rem 0 0;\r\n  }\r\n\r\n  #naechstesSpielMapWrap,\r\n  #naechstesSpielWeatherWrap {\r\n    width: 100%;\r\n    max-width: 300px;\r\n  }\r\n\r\n  #naechstesSpielMap {\r\n    width: 100%;\r\n    height: 365px;\r\n    background: #ffffff;\r\n  }\r\n\r\n  .naechstes-footer-row {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    margin-top: 0.4rem;\r\n    gap: 0.5rem;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  .naechstes-status {\r\n    color: #6b7280;\r\n    font-size: 0.68rem;\r\n    font-weight: 500;\r\n  }\r\n\r\n  .naechstes-link-all {\r\n    font-size: 0.78rem;\r\n    padding: 0.3rem 0.85rem;\r\n    border: 1px solid #b30d2f;\r\n    color: #ffffff !important;\r\n    text-decoration: none;\r\n    font-weight: 600;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 0.3rem;\r\n    background: #b30d2f !important;\r\n    transition: background 0.15s ease, color 0.15s ease, transform 0.1s ease, box-shadow 0.15s ease, border-color 0.15s ease;\r\n  }\r\n\r\n  .naechstes-link-all:hover {\r\n    background: #7f1023 !important;\r\n    color: #ffffff !important;\r\n    border-color: #7f1023;\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .naechstes-link-arrow {\r\n    font-size: 0.9em;\r\n  }\r\n\r\n  .leaflet-popup-content {\r\n    font-family: \"Inter\", system-ui, sans-serif;\r\n    font-size: 13px;\r\n    line-height: 1.45;\r\n  }\r\n\r\n  @media (max-width: 1024px) {\r\n    .naechstes-event-grid {\r\n      grid-template-columns: repeat(2, minmax(0, 1fr));\r\n    }\r\n  }\r\n\r\n  @media (max-width: 768px) {\r\n    .naechstes-wrapper {\r\n      margin: 0.4rem 0.5rem;\r\n      padding: 0.6rem 0.6rem;\r\n    }\r\n\r\n    .naechstes-title {\r\n      font-size: 0.9rem;\r\n    }\r\n\r\n    .naechstes-event-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    #naechstesSpielMapWrap,\r\n    #naechstesSpielWeatherWrap {\r\n      max-width: none;\r\n      width: 100%;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 480px) {\r\n    .naechstes-title {\r\n      font-size: 0.86rem;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\" crossorigin=\"\"><\/script>\r\n\r\n<script>\r\n(function() {\r\n  const root = document.getElementById('naechstesSpiel');\r\n  if (!root || root.dataset.initialized === '1') return;\r\n  root.dataset.initialized = '1';\r\n\r\n  const ICS_URL_CONFIRMED = \"https:\/\/export.kalender.digital\/ics\/4615281\/b40e8d17b4be6185fe64\/fototerminbesttigt.ics?past_months=3&future_months=36\";\r\n  const ICS_URL_PLANNED   = \"https:\/\/export.kalender.digital\/ics\/4863324\/b40e8d17b4be6185fe64\/inplanung.ics?past_months=3&future_months=36\";\r\n  const ICS_URL_PUBLISH   = \"https:\/\/export.kalender.digital\/ics\/6029751\/b40e8d17b4be6185fe64\/terminverffentlichung.ics?past_months=3&future_months=36\";\r\n\r\n  const CORSPROXIES = [\r\n    icsUrl => `https:\/\/api.allorigins.win\/raw?url=${encodeURIComponent(icsUrl)}`,\r\n    icsUrl => `https:\/\/corsproxy.io\/?${encodeURIComponent(icsUrl)}`,\r\n    icsUrl => `https:\/\/api.codetabs.com\/v1\/proxy?quest=${encodeURIComponent(icsUrl)}`\r\n  ];\r\n\r\n  const CLUB_PLACES = [\r\n    {name:'VfB Fichte Bielefeld', addr:'M\u00fchlenstra\u00dfe 121, 33607 Bielefeld', lon:8.5630235, lat:52.0199558},\r\n    {name:'TuS Eintracht Bielefeld', addr:'Graudenzer Str 18, 33604 Bielefeld', lon:8.554422, lat:52.006845},\r\n    {name:'VfL Theesen', addr:'Gaudigstra\u00dfe 29, 33739 Bielefeld', lon:8.5235827, lat:52.0681899},\r\n    {name:'SV Ubbedissen', addr:'Pyrmonter Str 9, 33699 Bielefeld', lon:8.6349867, lat:51.9868287},\r\n    {name:'DSC Arminia Bielefeld', addr:'Stapenhorststra\u00dfe 100, 33615 Bielefeld', lon:8.5148078, lat:52.0316107},\r\n    {name:'TuS Dornberg', addr:'Kirchdornberger Str 46, 33619 Bielefeld', lon:8.4461487, lat:52.045895},\r\n    {name:'VfR Wellensiek', addr:'Erfahrung 20, 33619 Bielefeld', lon:8.4974104, lat:52.0392019},\r\n    {name:'TuS Hoberge-Uerentrup', addr:'Bergstra\u00dfe 17, 33619 Bielefeld', lon:8.4656257, lat:52.0222818},\r\n    {name:'SC Halle', addr:'Wasserwerkstra\u00dfe 1b, 33790 Halle (Westfalen)', lon:8.3531112, lat:52.0494873},\r\n    {name:'VfL Schildesche', addr:'Talbr\u00fcckenstra\u00dfe 130, 33609 Bielefeld', lon:8.5705793, lat:52.0527548},\r\n    {name:'TuS Einigkeit Hillegossen', addr:'Selhausenstra\u00dfe 102, 33699 Bielefeld', lon:8.6019146, lat:51.9857454},\r\n    {name:'TuS 08 Senne I', addr:'Am Waldbad 72, 33659 Bielefeld', lon:8.5266708, lat:51.9619498},\r\n    {name:'SC Peckeloh', addr:'Am Wiedenfeld 4, 33775 Versmold', lon:8.1319193, lat:52.018464},\r\n    {name:'SC 04\/26 Bielefeld', addr:'Am Meierteich, 33613 Bielefeld', lon:8.5257874, lat:52.0438467},\r\n    {name:'SC Verl', addr:'Sender Str 36, 33415 Verl', lon:8.5135835, lat:51.8843441},\r\n    {name:'TuS J\u00f6llenbeck', addr:'Naturstadion 12b, 33739 Bielefeld', lon:8.5278124, lat:52.0865546},\r\n    {name:'TuS Quelle', addr:'Gottfriedstra\u00dfe 10, 33649 Bielefeld', lon:8.4899939, lat:51.9997654},\r\n    {name:'SV Heepen', addr:'L\u00fcbrasser Weg 31, 33719 Bielefeld', lon:8.616958, lat:52.026885},\r\n    {name:'TuS Ost', addr:'Radrennbahnweg 50A, 33609 Bielefeld', lon:8.5815211, lat:52.0346887},\r\n    {name:'TuS Brake', addr:'Lohrenkamp 37, 33729 Bielefeld', lon:8.5917887, lat:52.0743582},\r\n    {name:'VfL Ummeln', addr:'Tr\u00fcggelbachstra\u00dfe 28, 33649 Bielefeld', lon:8.4621148, lat:51.9680783},\r\n    {name:'Spvg. Steinhagen', addr:'Am Cronsbach 10, 33803 Steinhagen', lon:8.4231925, lat:51.9987135},\r\n    {name:'FC Altenhagen', addr:'Milser Str 132, 33729 Bielefeld', lon:8.6342478, lat:52.0557012},\r\n    {name:'SV R\u00f6dinghausen', addr:'Auf d Drift 36, 32289 R\u00f6dinghausen', lon:8.5066959, lat:52.2499652},\r\n    {name:'TV Friesen Milse', addr:'Milser Str 40, 33729 Bielefeld', lon:8.6085219, lat:52.0574447},\r\n    {name:'SV Avenwedde', addr:'Gazellenweg 16, 33335 G\u00fctersloh', lon:8.446701, lat:51.9304111},\r\n    {name:'TuS Langenheide', addr:'Langenheider Str 33, 33824 Werther (Westfalen)', lon:8.3931561, lat:52.1006012},\r\n    {name:'SV Eidinghausen-Werste', addr:'Jahnstra\u00dfe 46, 32549 Bad Oeynhausen', lon:8.77051, lat:52.20933},\r\n    {name:'VfL Oldentrup', addr:'Kr\u00e4henwinkel 4, 33719 Bielefeld', lon:8.6068968, lat:52.0104094},\r\n    {name:'TuS GW Podinghausen', addr:'Am Sportpl 6, 32130 Enger', lon:8.5423124, lat:52.1180611},\r\n    {name:'VfB Schloss Holte 1919', addr:'Oerlinghauser Str. 37, 33758 Schlo\u00df Holte-Stukenbrock', lon:8.6090765, lat:51.9141008},\r\n    {name:'BV Werther', addr:'Teutoburger-Wald-Weg, 33824 Werther', lon:8.4092322, lat:52.0655363},\r\n    {name:'BW 98 G\u00fctersloh', addr:'Pavenst\u00e4dter Weg, 33334 G\u00fctersloh', lon:8.3398131, lat:51.9096257},\r\n    {name:'SV H\u00e4ger', addr:'Schr\u00f6ttinghausener Str 14, 33824 Werther (Westfalen)', lon:8.452828, lat:52.0940885},\r\n    {name:'SpVg. Versmold', addr:'Schulstra\u00dfe 14, 33775 Versmold', lon:8.1515125, lat:52.0418881},\r\n    {name:'SC GW Espeln', addr:'Heideweg 41, 33161 H\u00f6velhof', lon:8.5937513, lat:51.8201668},\r\n    {name:'FC GW Kirchlengern', addr:'Schelmenbrink 17, 32278 Kirchlengern', lon:8.6552284, lat:52.1933166},\r\n    {name:'FC G\u00fctersloh', addr:'Alter Hellweg, 33334 G\u00fctersloh', lon:8.3648184, lat:51.8840168},\r\n    {name:'SV Spexard', addr:'Bruder-Konrad-Stra\u00dfe 100, 33334 G\u00fctersloh', lon:8.4097334, lat:51.8817527},\r\n    {name:'SV Werl-Aspe', addr:'Paul-Schneider-Stra\u00dfe, 32107 Bad Salzuflen-Werl-Aspe', lon:8.7317832, lat:52.0634785},\r\n    {name:'TSV Amshausen', addr:'Amshausener Str 87, 33803 Steinhagen', lon:8.4050668, lat:52.0268659},\r\n    {name:'SpVg Oelde', addr:'Kreuzstra\u00dfe 22, 59302 Oelde', lon:8.1592658, lat:51.8241018},\r\n    {name:'SV Gadderbaum', addr:'An d Rehwiese 64, 33617 Bielefeld', lon:8.5238, lat:52.00437}\r\n  ];\r\n\r\n  const ALIASES = {\r\n    \"arminia bielefeld\": \"DSC Arminia Bielefeld\",\r\n    \"arminia\": \"DSC Arminia Bielefeld\",\r\n    \"dsc arminia\": \"DSC Arminia Bielefeld\",\r\n    \"fichte bielefeld\": \"VfB Fichte Bielefeld\",\r\n    \"fichte\": \"VfB Fichte Bielefeld\",\r\n    \"sv heepen\": \"SV Heepen\",\r\n    \"heepen\": \"SV Heepen\",\r\n    \"theesen\": \"VfL Theesen\",\r\n    \"vfl theesen\": \"VfL Theesen\",\r\n    \"schildesche\": \"VfL Schildesche\",\r\n    \"vfl schildesche\": \"VfL Schildesche\",\r\n    \"quelle\": \"TuS Quelle\",\r\n    \"tus quelle\": \"TuS Quelle\",\r\n    \"joellenbeck\": \"TuS J\u00f6llenbeck\",\r\n    \"jollenbeck\": \"TuS J\u00f6llenbeck\",\r\n    \"j\u00f6llenbeck\": \"TuS J\u00f6llenbeck\",\r\n    \"tus jollenbeck\": \"TuS J\u00f6llenbeck\",\r\n    \"ummeln\": \"VfL Ummeln\",\r\n    \"vfl ummeln\": \"VfL Ummeln\",\r\n    \"oldentrup\": \"VfL Oldentrup\",\r\n    \"vfl oldentrup\": \"VfL Oldentrup\",\r\n    \"spvg steinhagen\": \"Spvg. Steinhagen\",\r\n    \"spvg. steinhagen\": \"Spvg. Steinhagen\",\r\n    \"steinhagen\": \"Spvg. Steinhagen\",\r\n    \"spvg versmold\": \"SpVg. Versmold\",\r\n    \"spvg. versmold\": \"SpVg. Versmold\",\r\n    \"versmold\": \"SpVg. Versmold\",\r\n    \"sc 04 26 bielefeld\": \"SC 04\/26 Bielefeld\",\r\n    \"sc 04\/26 bielefeld\": \"SC 04\/26 Bielefeld\",\r\n    \"04 26 bielefeld\": \"SC 04\/26 Bielefeld\",\r\n    \"04\/26 bielefeld\": \"SC 04\/26 Bielefeld\"\r\n  };\r\n\r\n  const statusEl = document.getElementById('naechstesSpielStatus');\r\n  const heuteListEl = document.getElementById('naechstesHeuteList');\r\n  const demnaechstListEl = document.getElementById('naechstesDemnaechstList');\r\n  const badgeEl = document.getElementById('naechstesHeuteBadge');\r\n  const nowLineEl = document.getElementById('naechstesJetztLine');\r\n  const mapHintEl = document.getElementById('naechstesSpielMapHint');\r\n  const titleEl = document.getElementById('naechstesMapWeatherTitle');\r\n  const mapWrapEl = document.getElementById('naechstesSpielMapWrap');\r\n  const weatherWrapEl = document.getElementById('naechstesSpielWeatherWrap');\r\n  const loadingBarEl = document.getElementById('naechstesSpielLoadingBar');\r\n  const loadingBarInnerEl = document.getElementById('naechtesSpielLoadingBarInner');\r\n\r\n  let liveMap = null;\r\n  let liveMapMarker = null;\r\n  let progressTimer = null;\r\n  let progressValue = 0;\r\n  let loadingStartedAt = 0;\r\n  const MIN_LOADING_BAR_MS = 900;\r\n  const MAP_ORIGIN = [52.0089, 8.5706];\r\n\r\n  function setProgress(value) {\r\n    progressValue = Math.max(0, Math.min(100, value));\r\n    if (loadingBarInnerEl) loadingBarInnerEl.style.width = progressValue + '%';\r\n  }\r\n\r\n  function startProgressAnimation() {\r\n    if (progressTimer) clearInterval(progressTimer);\r\n    setProgress(12);\r\n    progressTimer = setInterval(() => {\r\n      if (progressValue < 35) setProgress(progressValue + 7);\r\n      else if (progressValue < 62) setProgress(progressValue + 4.5);\r\n      else if (progressValue < 82) setProgress(progressValue + 2.4);\r\n      else if (progressValue < 93) setProgress(progressValue + 1.2);\r\n    }, 160);\r\n  }\r\n\r\n  function stopProgressAnimation() {\r\n    if (progressTimer) {\r\n      clearInterval(progressTimer);\r\n      progressTimer = null;\r\n    }\r\n  }\r\n\r\n  function showLoadingBar() {\r\n    loadingStartedAt = Date.now();\r\n    if (loadingBarEl) loadingBarEl.classList.add('is-active');\r\n    startProgressAnimation();\r\n  }\r\n\r\n  async function hideLoadingBar() {\r\n    stopProgressAnimation();\r\n    setProgress(100);\r\n    const elapsed = Date.now() - loadingStartedAt;\r\n    const wait = Math.max(0, MIN_LOADING_BAR_MS - elapsed);\r\n    if (wait > 0) await new Promise(r => setTimeout(r, wait));\r\n    await new Promise(r => setTimeout(r, 180));\r\n    if (loadingBarEl) loadingBarEl.classList.remove('is-active');\r\n    setProgress(0);\r\n  }\r\n\r\n  function formatStamp(date) {\r\n    return date.toLocaleString('de-DE', {\r\n      day: '2-digit',\r\n      month: '2-digit',\r\n      hour: '2-digit',\r\n      minute: '2-digit',\r\n      timeZone: 'Europe\/Berlin'\r\n    }) + ' Uhr';\r\n  }\r\n\r\n  async function fetchWithProxies(icsUrl) {\r\n    let lastError = null;\r\n\r\n    for (const buildUrl of CORSPROXIES) {\r\n      try {\r\n        const response = await fetch(buildUrl(icsUrl), { method: 'GET' });\r\n        if (!response.ok) continue;\r\n        const text = await response.text();\r\n        if (text && text.includes('BEGIN:VCALENDAR')) return text;\r\n      } catch (err) {\r\n        lastError = err;\r\n      }\r\n    }\r\n\r\n    throw new Error('ICS konnte nicht geladen werden: ' + (lastError ? lastError.message : 'unbekannt'));\r\n  }\r\n\r\n  function unfoldLines(lines) {\r\n    const unfolded = [];\r\n    for (let i = 0; i < lines.length; i++) {\r\n      let line = lines[i];\r\n      while (i + 1 < lines.length && (lines[i + 1].startsWith(' ') || lines[i + 1].startsWith('\\t'))) {\r\n        line += lines[i + 1].slice(1);\r\n        i++;\r\n      }\r\n      unfolded.push(line);\r\n    }\r\n    return unfolded;\r\n  }\r\n\r\n  function cleanSummary(text) {\r\n    if (!text) return '';\r\n    return text\r\n      .replace(\/\\\\,\/g, ',')\r\n      .replace(\/\\\\;\/g, ';')\r\n      .replace(\/\\\\\\\\n\/g, ' ')\r\n      .replace(\/\\s*Vorschlag:\\s*\/gi, '')\r\n      .trim();\r\n  }\r\n\r\n  function parseIcsDate(rawValue, propKey) {\r\n    if (!rawValue) return null;\r\n\r\n    const value = rawValue.trim();\r\n    const isDateOnly = \/VALUE=DATE\/i.test(propKey) || \/^\\d{8}$\/.test(value);\r\n    const isBerlinTz = \/TZID=Europe\\\/Berlin\/i.test(propKey);\r\n\r\n    if (isDateOnly) {\r\n      const y = value.slice(0, 4);\r\n      const m = value.slice(4, 6);\r\n      const d = value.slice(6, 8);\r\n      return new Date(`${y}-${m}-${d}T00:00:00`);\r\n    }\r\n\r\n    if (\/^\\d{8}T\\d{6}Z$\/.test(value)) {\r\n      const y = value.slice(0, 4);\r\n      const m = value.slice(4, 6);\r\n      const d = value.slice(6, 8);\r\n      const hh = value.slice(9, 11);\r\n      const mm = value.slice(11, 13);\r\n      const ss = value.slice(13, 15);\r\n      return new Date(`${y}-${m}-${d}T${hh}:${mm}:${ss}Z`);\r\n    }\r\n\r\n    if (\/^\\d{8}T\\d{6}$\/.test(value)) {\r\n      const y = value.slice(0, 4);\r\n      const m = value.slice(4, 6);\r\n      const d = value.slice(6, 8);\r\n      const hh = value.slice(9, 11);\r\n      const mm = value.slice(11, 13);\r\n      const ss = value.slice(13, 15);\r\n\r\n      if (isBerlinTz || true) {\r\n        return new Date(`${y}-${m}-${d}T${hh}:${mm}:${ss}`);\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  function parseICS(text, sourceType) {\r\n    const rawLines = text.split(\/\\r?\\n\/);\r\n    const lines = unfoldLines(rawLines);\r\n    const events = [];\r\n    let event = null;\r\n\r\n    for (let line of lines) {\r\n      line = line.trim();\r\n      if (!line) continue;\r\n\r\n      if (line.toUpperCase() === 'BEGIN:VEVENT') {\r\n        event = {};\r\n        continue;\r\n      }\r\n\r\n      if (line.toUpperCase() === 'END:VEVENT') {\r\n        if (event && event.datum && event.dtend && event.summary) {\r\n          event.sourceType = sourceType;\r\n          events.push(event);\r\n        }\r\n        event = null;\r\n        continue;\r\n      }\r\n\r\n      if (!event) continue;\r\n\r\n      const separatorIndex = line.indexOf(':');\r\n      if (separatorIndex === -1) continue;\r\n\r\n      const propKey = line.slice(0, separatorIndex).trim();\r\n      const propValue = line.slice(separatorIndex + 1).trim();\r\n      const upperKey = propKey.toUpperCase();\r\n\r\n      if (upperKey.startsWith('DTSTART')) {\r\n        event.datum = parseIcsDate(propValue, propKey);\r\n      } else if (upperKey.startsWith('DTEND')) {\r\n        event.dtend = parseIcsDate(propValue, propKey);\r\n      } else if (upperKey === 'SUMMARY') {\r\n        event.summary = cleanSummary(propValue);\r\n      } else if (upperKey === 'LOCATION') {\r\n        event.location = cleanSummary(propValue);\r\n      }\r\n    }\r\n\r\n    return events;\r\n  }\r\n\r\n  function formatInBerlin(date) {\r\n    const datum = date.toLocaleDateString('de-DE', {\r\n      day: '2-digit',\r\n      month: '2-digit',\r\n      timeZone: 'Europe\/Berlin'\r\n    });\r\n\r\n    const zeit = date.toLocaleTimeString('de-DE', {\r\n      hour: '2-digit',\r\n      minute: '2-digit',\r\n      hour12: false,\r\n      timeZone: 'Europe\/Berlin'\r\n    });\r\n\r\n    return { datum, zeit };\r\n  }\r\n\r\n  function getBerlinDateParts(date) {\r\n    const parts = new Intl.DateTimeFormat('de-DE', {\r\n      timeZone: 'Europe\/Berlin',\r\n      year: 'numeric',\r\n      month: '2-digit',\r\n      day: '2-digit'\r\n    }).formatToParts(date);\r\n\r\n    const map = {};\r\n    parts.forEach(p => {\r\n      if (p.type !== 'literal') map[p.type] = p.value;\r\n    });\r\n\r\n    return { year: map.year, month: map.month, day: map.day };\r\n  }\r\n\r\n  function isSameBerlinDay(d1, d2) {\r\n    const a = getBerlinDateParts(d1);\r\n    const b = getBerlinDateParts(d2);\r\n    return a.year === b.year && a.month === b.month && a.day === b.day;\r\n  }\r\n\r\n  function isRunningNow(ev, jetzt) {\r\n    return jetzt >= ev.datum && jetzt < ev.dtend;\r\n  }\r\n\r\n  function isUpcomingToday(ev, jetzt) {\r\n    return isSameBerlinDay(ev.datum, jetzt) && ev.datum > jetzt;\r\n  }\r\n\r\n  function normalizeClubName(name) {\r\n    return (name || '')\r\n      .toLowerCase()\r\n      .normalize('NFD')\r\n      .replace(\/[\\u0300-\\u036f]\/g, '')\r\n      .replace(\/\u00e4\/g, 'ae')\r\n      .replace(\/\u00f6\/g, 'oe')\r\n      .replace(\/\u00fc\/g, 'ue')\r\n      .replace(\/\u00df\/g, 'ss')\r\n      .replace(\/[^\\w\\s]\/g, ' ')\r\n      .replace(\/\\bsv\\b\/g, 'sv')\r\n      .replace(\/\\bvfl\\b\/g, 'vfl')\r\n      .replace(\/\\btus\\b\/g, 'tus')\r\n      .replace(\/\\bsc\\b\/g, 'sc')\r\n      .replace(\/\\bfc\\b\/g, 'fc')\r\n      .replace(\/\\bspvg\\b\/g, 'spvg')\r\n      .replace(\/\\bbv\\b\/g, 'bv')\r\n      .replace(\/\\s+\/g, ' ')\r\n      .trim();\r\n  }\r\n\r\n  function getHomeClub(summary) {\r\n    if (!summary) return null;\r\n\r\n    const cleaned = cleanSummary(summary)\r\n      .replace(\/\\s+\u2013\\s+\/g, ' - ')\r\n      .replace(\/\\s+-\\s+\/g, ' - ')\r\n      .replace(\/\\s+vs\\.?\\s+\/gi, ' - ')\r\n      .replace(\/\\s+gegen\\s+\/gi, ' - ')\r\n      .replace(\/\\s+gg\\.?\\s+\/gi, ' - ')\r\n      .trim();\r\n\r\n    if (!cleaned.includes(' - ')) return cleaned;\r\n    return cleaned.split(' - ')[0].trim();\r\n  }\r\n\r\n  function findClubByName(homeClub) {\r\n    if (!homeClub) return null;\r\n\r\n    const normalizedHome = normalizeClubName(homeClub);\r\n    const aliasedName = ALIASES[normalizedHome] || homeClub;\r\n    const normalizedAliased = normalizeClubName(aliasedName);\r\n\r\n    let exact = CLUB_PLACES.find(club => normalizeClubName(club.name) === normalizedAliased);\r\n    if (exact) return exact;\r\n\r\n    let partial = CLUB_PLACES.find(club => {\r\n      const n = normalizeClubName(club.name);\r\n      return n.includes(normalizedAliased) || normalizedAliased.includes(n);\r\n    });\r\n    if (partial) return partial;\r\n\r\n    const searchWords = normalizedAliased.split(' ').filter(Boolean);\r\n\r\n    let scored = CLUB_PLACES.map(club => {\r\n      const n = normalizeClubName(club.name);\r\n      const clubWords = n.split(' ').filter(Boolean);\r\n      let score = 0;\r\n\r\n      searchWords.forEach(word => {\r\n        if (clubWords.includes(word)) score += 3;\r\n        else if (n.includes(word)) score += 1;\r\n      });\r\n\r\n      return { club, score };\r\n    }).sort((a, b) => b.score - a.score);\r\n\r\n    if (scored.length && scored[0].score >= 2) {\r\n      return scored[0].club;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  function renderEventCard(ev, jetzt) {\r\n    const { datum, zeit: startZeit } = formatInBerlin(ev.datum);\r\n    const { zeit: endZeit } = formatInBerlin(ev.dtend);\r\n    const running = isRunningNow(ev, jetzt);\r\n    const summaryClean = cleanSummary(ev.summary);\r\n\r\n    let extraStyle = '';\r\n    let dotStyle = '';\r\n    let statusText = '';\r\n    let statusColor = '#4b5563';\r\n\r\n    if (ev.sourceType === 'planned') {\r\n      extraStyle = running ? 'background:#dbeafe;' : 'background:#e0f2fe;';\r\n      dotStyle = running\r\n        ? 'background:#b30d2f;box-shadow:0 0 0 2px rgba(179,13,47,0.28);'\r\n        : 'background:#2563eb;box-shadow:0 0 0 2px rgba(37,99,235,0.28);';\r\n      statusText = running ? 'L\u00e4uft gerade \u00b7 Termin war in Planung' : 'In Planung \u00b7 Termin kann sich noch \u00e4ndern';\r\n      statusColor = running ? '#7f1023' : '#4b5563';\r\n    } else if (ev.sourceType === 'publish') {\r\n      extraStyle = running ? 'background:#fee2e2;' : 'background:#dcfce7;';\r\n      dotStyle = running\r\n        ? 'background:#b30d2f;box-shadow:0 0 0 2px rgba(179,13,47,0.28);'\r\n        : 'background:#16a34a;box-shadow:0 0 0 2px rgba(22,163,74,0.35);';\r\n      statusText = running ? 'L\u00e4uft gerade \u00b7 Ver\u00f6ffentlichung aktiv' : 'Ver\u00f6ffentlichung der n\u00e4chsten Fototermine';\r\n      statusColor = running ? '#7f1023' : '#4b5563';\r\n    } else {\r\n      extraStyle = running ? 'background:#fee2e2;' : 'background:#f0fdf4;';\r\n      dotStyle = running\r\n        ? 'background:#b30d2f;box-shadow:0 0 0 2px rgba(179,13,47,0.28);'\r\n        : 'background:#16a34a;box-shadow:0 0 0 2px rgba(22,163,74,0.28);';\r\n      statusText = running ? 'L\u00e4uft gerade \u00b7 Zugesagter Fototermin' : 'Zugesagter Fototermin';\r\n      statusColor = running ? '#7f1023' : '#4b5563';\r\n    }\r\n\r\n    return `\r\n      <div class=\"naechstes-event-item\" style=\"${extraStyle}\">\r\n        <div class=\"naechstes-event-dot\" style=\"${dotStyle}\"><\/div>\r\n        <div class=\"naechstes-event-meta\">\r\n          <div class=\"naechstes-event-date-time\">\r\n            <span class=\"naechstes-event-date\">${datum}<\/span>\r\n            <span>\u00b7<\/span>\r\n            <span class=\"naechstes-event-time\">${startZeit}\u2013${endZeit} Uhr<\/span>\r\n          <\/div>\r\n          <div class=\"naechstes-event-summary\">${summaryClean}<\/div>\r\n          ${running ? '<div class=\"naechstes-event-running-label\">L\u00e4uft gerade<\/div>' : ''}\r\n          <div style=\"font-size:0.75rem;color:${statusColor};margin-top:0.05rem;\">${statusText}<\/div>\r\n        <\/div>\r\n      <\/div>\r\n    `;\r\n  }\r\n\r\n  function renderEventList(target, events, jetzt, emptyText) {\r\n    if (!target) return;\r\n    if (!events.length) {\r\n      target.innerHTML = `<div class=\"naechstes-event-hint\">${emptyText}<\/div>`;\r\n      return;\r\n    }\r\n    target.innerHTML = events.map(ev => renderEventCard(ev, jetzt)).join('');\r\n  }\r\n\r\n  function updateBadge(heute, jetzt) {\r\n    const runningCount = heute.filter(e => isRunningNow(e, jetzt)).length;\r\n\r\n    badgeEl.className = '';\r\n    if (runningCount) {\r\n      badgeEl.classList.add('badge-running');\r\n      badgeEl.textContent = 'L\u00e4uft gerade';\r\n    } else if (heute.length) {\r\n      badgeEl.classList.add('badge-live');\r\n      badgeEl.textContent = 'Live';\r\n    } else {\r\n      badgeEl.classList.add('badge-offline');\r\n      badgeEl.textContent = 'Keine Termine';\r\n    }\r\n  }\r\n\r\n  function initLiveMap() {\r\n    if (liveMap || typeof L === 'undefined') return;\r\n\r\n    liveMap = L.map('naechstesSpielMap', { zoomControl: true }).setView(MAP_ORIGIN, 11);\r\n\r\n    L.tileLayer('https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png', {\r\n      maxZoom: 19,\r\n      attribution: '&copy; OpenStreetMap'\r\n    }).addTo(liveMap);\r\n  }\r\n\r\n  function showWeather(message) {\r\n    if (mapWrapEl) mapWrapEl.style.display = 'none';\r\n    if (weatherWrapEl) weatherWrapEl.style.display = 'block';\r\n    if (titleEl) titleEl.textContent = 'Wetter';\r\n    if (mapHintEl) mapHintEl.textContent = message;\r\n  }\r\n\r\n  function showMap(club) {\r\n    if (!club || typeof L === 'undefined') return;\r\n\r\n    initLiveMap();\r\n    if (!liveMap) return;\r\n\r\n    if (weatherWrapEl) weatherWrapEl.style.display = 'none';\r\n    if (mapWrapEl) mapWrapEl.style.display = 'block';\r\n    if (titleEl) titleEl.textContent = 'Live auf Karte';\r\n\r\n    if (liveMapMarker) {\r\n      liveMap.removeLayer(liveMapMarker);\r\n      liveMapMarker = null;\r\n    }\r\n\r\n    liveMapMarker = L.marker([club.lat, club.lon]).addTo(liveMap);\r\n    liveMapMarker.bindPopup(\r\n      `<strong>${club.name}<\/strong><br>${club.addr}<br><small>Live-Fototermin<\/small>`\r\n    );\r\n\r\n    liveMap.setView([club.lat, club.lon], 15, { animate: true });\r\n\r\n    setTimeout(() => {\r\n      if (!liveMap || !liveMapMarker) return;\r\n      liveMap.invalidateSize();\r\n      liveMapMarker.openPopup();\r\n    }, 220);\r\n\r\n    if (mapHintEl) mapHintEl.textContent = `Heimspielort: ${club.name}`;\r\n  }\r\n\r\n  function updateLiveMap(runningEvent) {\r\n    if (!runningEvent) {\r\n      showWeather('Aktuell l\u00e4uft kein Fototermin \u2013 stattdessen wird das Wetter angezeigt.');\r\n      return;\r\n    }\r\n\r\n    if (typeof L === 'undefined') {\r\n      showWeather('Karte konnte nicht geladen werden \u2013 stattdessen wird das Wetter angezeigt.');\r\n      return;\r\n    }\r\n\r\n    const homeClub = getHomeClub(runningEvent.summary) || runningEvent.location || '';\r\n    const club = findClubByName(homeClub);\r\n\r\n    if (!club) {\r\n      showWeather(\r\n        homeClub\r\n          ? `Heimverein erkannt: ${homeClub} \u00b7 kein Kartenstandort gefunden \u2013 stattdessen wird das Wetter angezeigt.`\r\n          : 'Kein Heimverein aus dem Termin erkennbar \u2013 stattdessen wird das Wetter angezeigt.'\r\n      );\r\n      return;\r\n    }\r\n\r\n    showMap(club);\r\n  }\r\n\r\n  async function loadCalendar(url, sourceType) {\r\n    const text = await fetchWithProxies(url);\r\n    return parseICS(text, sourceType);\r\n  }\r\n\r\n  async function updateNaechstesSpiel() {\r\n    const jetzt = new Date();\r\n\r\n    nowLineEl.textContent = 'Jetzt \u00b7 ' + jetzt.toLocaleTimeString('de-DE', {\r\n      hour: '2-digit',\r\n      minute: '2-digit',\r\n      hour12: false,\r\n      timeZone: 'Europe\/Berlin'\r\n    }) + ' Uhr';\r\n\r\n    showLoadingBar();\r\n\r\n    try {\r\n      const [confirmed, planned, publish] = await Promise.all([\r\n        loadCalendar(ICS_URL_CONFIRMED, 'confirmed'),\r\n        loadCalendar(ICS_URL_PLANNED, 'planned'),\r\n        loadCalendar(ICS_URL_PUBLISH, 'publish')\r\n      ]);\r\n\r\n      const allEvents = [...confirmed, ...planned, ...publish]\r\n        .filter(e => e && e.datum instanceof Date && !isNaN(e.datum) && e.dtend instanceof Date && !isNaN(e.dtend))\r\n        .sort((a, b) => a.datum - b.datum);\r\n\r\n      const relevanteEvents = allEvents.filter(e => e.dtend > jetzt);\r\n      const heute = relevanteEvents.filter(e => isRunningNow(e, jetzt) || isUpcomingToday(e, jetzt));\r\n      const demnaechst = relevanteEvents.filter(e => !heute.includes(e)).slice(0, 4);\r\n      const runningEvent = allEvents.find(e => isRunningNow(e, jetzt)) || null;\r\n\r\n      updateBadge(heute, jetzt);\r\n      renderEventList(heuteListEl, heute, jetzt, 'Keine Fototermine heute');\r\n      renderEventList(demnaechstListEl, demnaechst, jetzt, 'Keine kommenden Fototermine');\r\n      updateLiveMap(runningEvent);\r\n\r\n      statusEl.textContent = `Letzter Stand: ${formatStamp(new Date())} \u00b7 \u00c4nderungen im Kalender werden automatisch \u00fcbernommen`;\r\n      await hideLoadingBar();\r\n    } catch (e) {\r\n      console.error('Fehler n\u00e4chstesSpiel:', e);\r\n      statusEl.textContent = 'Aktualisierung fehlgeschlagen \u00b7 letzter bekannter Stand bleibt sichtbar';\r\n      if (!heuteListEl.innerHTML.trim()) {\r\n        heuteListEl.innerHTML = '<div class=\"naechstes-event-hint\">Termine konnten gerade nicht geladen werden.<\/div>';\r\n      }\r\n      if (!demnaechstListEl.innerHTML.trim()) {\r\n        demnaechstListEl.innerHTML = '<div class=\"naechstes-event-hint\">Keine Daten verf\u00fcgbar.<\/div>';\r\n      }\r\n      showWeather('Kalenderdaten konnten gerade nicht geladen werden \u2013 Wetter wird angezeigt.');\r\n      await hideLoadingBar();\r\n    }\r\n  }\r\n\r\n  updateNaechstesSpiel();\r\n  setInterval(updateNaechstesSpiel, 600000);\r\n\r\n  document.addEventListener('visibilitychange', () => {\r\n    if (!document.hidden) updateNaechstesSpiel();\r\n  });\r\n})();\r\n<\/script>\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-27c4c44 e-flex e-con-boxed e-con e-parent\" data-id=\"27c4c44\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9cfcf01 elementor-widget elementor-widget-spacer\" data-id=\"9cfcf01\" 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\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-183e8e1 e-flex e-con-boxed e-con e-parent\" data-id=\"183e8e1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-15ac88a elementor-widget elementor-widget-html\" data-id=\"15ac88a\" 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<section class=\"bpl-donate\">\r\n  <div class=\"bpl-donate-inner\">\r\n\r\n    <button class=\"bpl-donate-toggle\" type=\"button\" aria-expanded=\"false\" aria-controls=\"bplDonatePanel\">\r\n      <span class=\"bpl-donate-toggle__text\">\r\n        <span class=\"bpl-donate-toggle__eyebrow\">Unterst\u00fctzen<\/span>\r\n        <span class=\"bpl-donate-toggle__title\">\r\n          Spendenaktion f\u00fcr Blickpunkt Lokalsport\r\n        <\/span>\r\n      <\/span>\r\n      <span class=\"bpl-donate-toggle__sub\">\r\n        Jetzt anzeigen\r\n        <svg class=\"bpl-donate-toggle__chevron\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n          <path d=\"M6 9l6 6 6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path>\r\n        <\/svg>\r\n      <\/span>\r\n    <\/button>\r\n\r\n    <div id=\"bplDonatePanel\" class=\"bpl-donate-panel\">\r\n      <div class=\"bpl-donate-panel__inner\">\r\n        <div class=\"bpl-donate-layout\">\r\n\r\n          <div class=\"bpl-donate-copy\">\r\n            <span class=\"bpl-donate-copy__kicker\">Warum Spenden helfen<\/span>\r\n\r\n            <h3 class=\"bpl-donate-copy__title\">\r\n              Jede Unterst\u00fctzung hilft direkt bei der Fu\u00dfballfotografie in der Region\r\n            <\/h3>\r\n\r\n            <p class=\"bpl-donate-copy__intro\">\r\n              Blickpunkt Lokalsport ist ein ehrenamtliches Projekt, das mit viel Zeit,\r\n              Organisation und pers\u00f6nlichem Einsatz verbunden ist.\r\n            <\/p>\r\n\r\n            <p class=\"bpl-donate-copy__text\">\r\n              Spenden helfen dabei, laufende Kosten wie Fahrten zu den Sportpl\u00e4tzen,\r\n              Technik, Software und die gesamte Arbeit rund um Bildauswahl,\r\n              Bearbeitung und Ver\u00f6ffentlichung mitzutragen.\r\n            <\/p>\r\n\r\n            <p class=\"bpl-donate-copy__text\">\r\n              Jede Unterst\u00fctzung tr\u00e4gt dazu bei, noch mehr Spiele im Amateur- und\r\n              Jugendfu\u00dfball sichtbar zu machen und das Angebot langfristig kostenlos\r\n              f\u00fcr Vereine, Teams und Familien zu erhalten.\r\n            <\/p>\r\n\r\n            <div class=\"bpl-donate-note\">\r\n              <strong>Wof\u00fcr die Unterst\u00fctzung konkret hilft:<\/strong><br>\r\n              Fahrten, Kamera- und Softwarekosten, Bildbearbeitung, Ver\u00f6ffentlichung\r\n              sowie der laufende Aufwand rund um Spieltage in der Region.\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div class=\"bpl-donate-embed-col\">\r\n            <div class=\"gfm-embed\"\r\n                 data-url=\"https:\/\/www.gofundme.com\/f\/dein-spiel-unser-fokus-fussballfotografie-aus-leidenschaft\/widget\/large?sharesheet=undefined&attribution_id=sl:bbd91281-7a89-4691-beb4-909d4c2128d7\"><\/div>\r\n            <script defer src=\"https:\/\/www.gofundme.com\/static\/js\/embed.js\"><\/script>\r\n          <\/div>\r\n\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\r\n\r\n<style>\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Oswald:wght@500;600;700&family=Inter:wght@400;500;600;700&display=swap');\r\n\r\n  .bpl-donate{\r\n    margin:20px 0 18px;\r\n  }\r\n\r\n  .bpl-donate-inner{\r\n    width:min(100%, 1400px);\r\n    margin:0 auto;\r\n    font-family:\"Inter\",system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Arial,sans-serif;\r\n  }\r\n\r\n  \/* Kopfbereich hell, kein Rot *\/\r\n  .bpl-donate-toggle{\r\n    -webkit-appearance:none;\r\n    appearance:none;\r\n    width:100%;\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:space-between;\r\n    gap:16px;\r\n    margin:0;\r\n    padding:16px 22px;\r\n    border:1px solid rgba(17,24,39,.08);\r\n    border-radius:0;\r\n    background:linear-gradient(180deg,#f9fafb 0%, #eef2f5 100%);\r\n    color:#111827;\r\n    text-align:left;\r\n    cursor:pointer;\r\n    transition:\r\n      background .16s ease,\r\n      border-color .16s ease;\r\n  }\r\n\r\n  .bpl-donate-toggle:hover{\r\n    background:linear-gradient(180deg,#ffffff 0%, #e5e7eb 100%);\r\n    border-color:rgba(17,24,39,.16);\r\n  }\r\n\r\n  .bpl-donate-toggle:focus-visible{\r\n    outline:3px solid rgba(179,13,47,.22);\r\n    outline-offset:4px;\r\n  }\r\n\r\n  .bpl-donate-toggle__text{\r\n    display:flex;\r\n    flex-direction:column;\r\n    min-width:0;\r\n  }\r\n\r\n  .bpl-donate-toggle__eyebrow{\r\n    display:inline-block;\r\n    margin-bottom:3px;\r\n    color:#9ca3af;\r\n    font-size:.7rem;\r\n    font-weight:600;\r\n    text-transform:uppercase;\r\n    letter-spacing:.18em;\r\n  }\r\n\r\n  .bpl-donate-toggle__title{\r\n    color:#111827;\r\n    font-family:\"Oswald\",sans-serif;\r\n    font-size:1.1rem;\r\n    font-weight:500;\r\n    text-transform:uppercase;\r\n    letter-spacing:.08em;\r\n    line-height:1.3;\r\n  }\r\n\r\n  .bpl-donate-toggle__sub{\r\n    display:inline-flex;\r\n    align-items:center;\r\n    gap:8px;\r\n    color:#6b7280;\r\n    font-size:.9rem;\r\n    font-weight:600;\r\n    white-space:nowrap;\r\n    padding-left:16px;\r\n  }\r\n\r\n  .bpl-donate-toggle__chevron{\r\n    width:18px;\r\n    height:18px;\r\n    color:#b30d2f;\r\n    transition:transform .18s ease;\r\n    flex-shrink:0;\r\n  }\r\n\r\n  .bpl-donate-toggle[aria-expanded=\"true\"] .bpl-donate-toggle__chevron{\r\n    transform:rotate(180deg);\r\n  }\r\n\r\n  \/* nur aufgeklappter Bereich grau *\/\r\n  .bpl-donate-panel{\r\n    max-height:0;\r\n    overflow:hidden;\r\n    transition:max-height .32s cubic-bezier(.16,1,.3,1);\r\n  }\r\n\r\n  .bpl-donate-panel.is-open{\r\n    max-height:2600px;\r\n  }\r\n\r\n  .bpl-donate-panel__inner{\r\n    padding:22px 22px 24px;\r\n    background:#f3f4f6;\r\n    border:1px solid rgba(17,24,39,.08);\r\n    border-top:none;\r\n  }\r\n\r\n  .bpl-donate-layout{\r\n    display:grid;\r\n    grid-template-columns:minmax(320px, 1fr) auto;\r\n    gap:32px;\r\n    align-items:start;\r\n  }\r\n\r\n  .bpl-donate-copy{\r\n    min-width:0;\r\n    max-width:60ch;\r\n  }\r\n\r\n  \/* H3 komplett vom globalen Headline-Style l\u00f6sen *\/\r\n  .bpl-donate-copy h3{\r\n    all:unset;\r\n    display:block;\r\n  }\r\n\r\n  .bpl-donate-copy__kicker{\r\n    display:inline-block;\r\n    margin-bottom:8px;\r\n    color:#b30d2f;\r\n    font-size:.72rem;\r\n    font-weight:700;\r\n    text-transform:uppercase;\r\n    letter-spacing:.12em;\r\n  }\r\n\r\n  .bpl-donate-copy__title{\r\n    margin:0 0 16px;\r\n    font-family:\"Oswald\",sans-serif;\r\n    font-size:1.6rem;\r\n    font-weight:600;\r\n    line-height:1.15;\r\n    letter-spacing:0;\r\n    text-transform:none;\r\n    color:#b30d2f;\r\n  }\r\n\r\n  .bpl-donate-copy__intro{\r\n    margin:0 0 16px;\r\n    font-size:1rem;\r\n    line-height:1.72;\r\n    color:#374151;\r\n  }\r\n\r\n  .bpl-donate-copy__text{\r\n    margin:0 0 14px;\r\n    font-size:.98rem;\r\n    line-height:1.72;\r\n    color:#4b5563;\r\n  }\r\n\r\n  .bpl-donate-note{\r\n    margin-top:20px;\r\n    padding:15px 16px;\r\n    background:#ffffff;\r\n    border:1px solid rgba(17,24,39,.08);\r\n    color:#374151;\r\n    font-size:.92rem;\r\n    line-height:1.65;\r\n  }\r\n\r\n  .bpl-donate-embed-col{\r\n    display:block;\r\n    overflow:visible;\r\n  }\r\n\r\n  @media (max-width:1100px){\r\n    .bpl-donate-panel__inner{\r\n      padding:20px 16px 18px;\r\n    }\r\n\r\n    .bpl-donate-layout{\r\n      grid-template-columns:1fr;\r\n      gap:24px;\r\n    }\r\n\r\n    .bpl-donate-copy{\r\n      max-width:none;\r\n    }\r\n  }\r\n\r\n  @media (max-width:640px){\r\n    .bpl-donate-toggle{\r\n      padding:12px 14px;\r\n      gap:10px;\r\n      flex-wrap:wrap;\r\n    }\r\n\r\n    .bpl-donate-toggle__sub{\r\n      padding-left:0;\r\n      white-space:normal;\r\n    }\r\n\r\n    .bpl-donate-panel__inner{\r\n      padding:16px 14px 14px;\r\n    }\r\n\r\n    .bpl-donate-copy__title{\r\n      font-size:1.45rem;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n  (function () {\r\n    const toggle = document.querySelector('.bpl-donate-toggle');\r\n    const panel = document.getElementById('bplDonatePanel');\r\n\r\n    if (!toggle || !panel) return;\r\n\r\n    toggle.addEventListener('click', function () {\r\n      const expanded = toggle.getAttribute('aria-expanded') === 'true';\r\n      toggle.setAttribute('aria-expanded', expanded ? 'false' : 'true');\r\n      panel.classList.toggle('is-open', !expanded);\r\n    });\r\n  })();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d7b941a e-con-full e-flex e-con e-parent\" data-id=\"d7b941a\" 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-5db6354 elementor-widget elementor-widget-html\" data-id=\"5db6354\" 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>\r\n.bp-stats-section-head{\r\n  max-width:1200px;\r\n  margin:28px auto 12px;\r\n  padding:0 10px;\r\n}\r\n.bp-stats-section-title{\r\n  margin:0;\r\n  font:700 1.45rem\/1.1 Inter,sans-serif;\r\n  letter-spacing:-.01em;\r\n  color:#0f172a;\r\n}\r\n.bp-stats-section-subtitle{\r\n  margin:6px 0 0;\r\n  font-size:14px;\r\n  color:#64748b;\r\n  max-width:60ch;\r\n}\r\n\r\n.bp-ts-wrap{\r\n  max-width:1200px;\r\n  margin:16px auto;\r\n  padding:0 10px;\r\n}\r\n.bp-ts-wrap + .bp-ts-wrap{\r\n  margin-top:12px;\r\n}\r\n.bp-ts-box{\r\n  background:#f8fafc;\r\n  border:1px solid rgba(15,23,42,.08);\r\n  font-family:Inter,sans-serif;\r\n  box-shadow:0 8px 24px rgba(15,23,42,.04);\r\n  overflow:hidden;\r\n}\r\n\r\n.bp-ts-box .bp-ts-accordion-trigger,\r\n.bp-ts-box button.bp-ts-accordion-trigger,\r\n.elementor-widget-html .bp-ts-box .bp-ts-accordion-trigger,\r\n.elementor-widget-container .bp-ts-box .bp-ts-accordion-trigger{\r\n  -webkit-appearance:none;\r\n  appearance:none;\r\n  width:100%;\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n  gap:12px;\r\n  text-align:left;\r\n  padding:16px 18px;\r\n  background:#f1f5f9 !important;\r\n  color:#0f172a !important;\r\n  border:0 !important;\r\n  border-radius:0 !important;\r\n  box-shadow:none !important;\r\n  cursor:pointer;\r\n  border-bottom:1px solid rgba(15,23,42,.08) !important;\r\n}\r\n\r\n.bp-ts-box .bp-ts-accordion-trigger:hover,\r\n.bp-ts-box .bp-ts-accordion-trigger:focus,\r\n.bp-ts-box .bp-ts-accordion-trigger:active{\r\n  background:#eaf0f6 !important;\r\n  color:#0f172a !important;\r\n  border:none !important;\r\n  box-shadow:none !important;\r\n}\r\n\r\n.bp-ts-box .bp-ts-accordion-trigger:focus-visible{\r\n  outline:2px solid #94a3b8;\r\n  outline-offset:-2px;\r\n}\r\n\r\n.bp-ts-trigger-text{\r\n  min-width:0;\r\n}\r\n.bp-ts-title{\r\n  display:block;\r\n  margin:0;\r\n  font:700 1.05rem\/1.15 Inter,sans-serif;\r\n  letter-spacing:.02em;\r\n  color:#0f172a !important;\r\n}\r\n.bp-ts-sub{\r\n  display:block;\r\n  font-size:13px;\r\n  color:#64748b !important;\r\n  margin-top:4px;\r\n}\r\n.bp-ts-trigger-side{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:12px;\r\n  flex-shrink:0;\r\n}\r\n.bp-ts-tag{\r\n  display:inline-flex;\r\n  align-items:center;\r\n  padding:6px 10px;\r\n  border-radius:999px;\r\n  background:#e2e8f0 !important;\r\n  color:#475569 !important;\r\n  font-size:11px;\r\n  letter-spacing:.08em;\r\n  text-transform:uppercase;\r\n  white-space:nowrap;\r\n}\r\n.bp-ts-chevron{\r\n  width:18px;\r\n  height:18px;\r\n  color:#64748b !important;\r\n  transition:transform .25s cubic-bezier(.16,1,.3,1);\r\n}\r\n.bp-ts-accordion-trigger[aria-expanded=\"true\"] .bp-ts-chevron{\r\n  transform:rotate(180deg);\r\n}\r\n\r\n.bp-ts-panel{\r\n  overflow:hidden;\r\n  max-height:0;\r\n  transition:max-height .32s cubic-bezier(.16,1,.3,1);\r\n}\r\n.bp-ts-panel.is-open{\r\n  max-height:2200px;\r\n}\r\n.bp-ts-panel-inner{\r\n  min-height:0;\r\n  overflow:hidden;\r\n}\r\n\r\n.bp-ts-body{\r\n  display:grid;\r\n  grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);\r\n  gap:12px;\r\n  padding:14px 16px;\r\n}\r\n.bp-ts-main,\r\n.bp-ts-card{\r\n  background:#ffffff;\r\n  border:1px solid rgba(15,23,42,.08);\r\n}\r\n.bp-ts-main{\r\n  padding:14px;\r\n}\r\n.bp-ts-main-label,\r\n.bp-ts-label{\r\n  font-size:11px;\r\n  letter-spacing:.1em;\r\n  text-transform:uppercase;\r\n  color:#64748b;\r\n}\r\n.bp-ts-main-value{\r\n  font-size:34px;\r\n  font-weight:800;\r\n  line-height:1;\r\n  color:#0f172a;\r\n  margin-top:6px;\r\n}\r\n.bp-ts-main-hint{\r\n  font-size:12px;\r\n  color:#64748b;\r\n  margin-top:6px;\r\n}\r\n.bp-ts-bar{\r\n  margin-top:12px;\r\n  height:6px;\r\n  background:#e2e8f0;\r\n  border-radius:999px;\r\n  overflow:hidden;\r\n}\r\n.bp-ts-bar-fill{\r\n  height:100%;\r\n  width:0;\r\n  transition:width .9s cubic-bezier(.16,1,.3,1), background .35s ease;\r\n}\r\n.bp-ts-grid{\r\n  display:grid;\r\n  gap:10px;\r\n}\r\n.bp-ts-card{\r\n  padding:12px 14px;\r\n  border-left:3px solid transparent;\r\n}\r\n.bp-ts-card.g{border-left-color:#15803d}\r\n.bp-ts-card.a{border-left-color:#b45309}\r\n.bp-ts-card.b{border-left-color:#1d4ed8}\r\n.bp-ts-row{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  align-items:flex-start;\r\n  gap:12px;\r\n}\r\n.bp-ts-value{\r\n  font-size:28px;\r\n  font-weight:800;\r\n  line-height:1;\r\n  white-space:nowrap;\r\n  flex-shrink:0;\r\n}\r\n.bp-ts-value.g{color:#15803d}\r\n.bp-ts-value.a{color:#b45309}\r\n.bp-ts-value.b{color:#1d4ed8}\r\n.bp-ts-note{\r\n  font-size:12px;\r\n  color:#64748b;\r\n  margin-top:4px;\r\n}\r\n.bp-ts-foot{\r\n  padding:10px 16px 14px;\r\n  border-top:1px solid rgba(15,23,42,.06);\r\n  background:#f8fafc;\r\n}\r\n.bp-ts-foot small{\r\n  display:block;\r\n  font-size:12px;\r\n  color:#64748b;\r\n  line-height:1.45;\r\n}\r\n.bp-ts-percent{\r\n  margin-top:8px;\r\n  font-size:13px;\r\n  color:#15803d;\r\n  font-weight:700;\r\n}\r\n.bp-ts-update{\r\n  margin-top:4px;\r\n  font-size:12px;\r\n  color:#64748b;\r\n}\r\n.bp-ts-error{\r\n  margin-top:6px;\r\n  font-size:12px;\r\n  color:#b91c1c;\r\n  font-weight:600;\r\n}\r\n\r\n@media (max-width:900px){\r\n  .bp-ts-body{\r\n    grid-template-columns:1fr;\r\n  }\r\n}\r\n\r\n@media (max-width:640px){\r\n  .bp-stats-section-head{\r\n    margin:22px auto 8px;\r\n    padding:0 12px;\r\n  }\r\n  .bp-stats-section-title{\r\n    font-size:1.28rem;\r\n  }\r\n  .bp-stats-section-subtitle{\r\n    font-size:13px;\r\n  }\r\n\r\n  .bp-ts-wrap{\r\n    padding:0 12px;\r\n    margin:14px auto;\r\n  }\r\n\r\n  .bp-ts-box .bp-ts-accordion-trigger{\r\n    padding:14px;\r\n    align-items:flex-start;\r\n  }\r\n\r\n  .bp-ts-trigger-side{\r\n    gap:8px;\r\n    margin-top:1px;\r\n  }\r\n\r\n  .bp-ts-tag{\r\n    white-space:normal;\r\n    font-size:10px;\r\n    text-align:right;\r\n  }\r\n\r\n  .bp-ts-body{\r\n    padding:12px 14px;\r\n    gap:10px;\r\n  }\r\n\r\n  .bp-ts-main{\r\n    padding:13px;\r\n  }\r\n\r\n  .bp-ts-main-value{\r\n    font-size:30px;\r\n  }\r\n\r\n  .bp-ts-card{\r\n    padding:12px 13px;\r\n  }\r\n\r\n  .bp-ts-row{\r\n    align-items:center;\r\n  }\r\n\r\n  .bp-ts-value{\r\n    font-size:24px;\r\n  }\r\n\r\n  .bp-ts-label,\r\n  .bp-ts-main-label{\r\n    font-size:10px;\r\n    letter-spacing:.08em;\r\n  }\r\n\r\n  .bp-ts-note,\r\n  .bp-ts-sub,\r\n  .bp-ts-foot small,\r\n  .bp-ts-update,\r\n  .bp-ts-error{\r\n    font-size:11px;\r\n  }\r\n\r\n  .bp-ts-percent{\r\n    font-size:12px;\r\n  }\r\n}\r\n\r\n@media (max-width:420px){\r\n  .bp-stats-section-title{\r\n    font-size:1.12rem;\r\n  }\r\n\r\n  .bp-ts-title{\r\n    font-size:15px;\r\n  }\r\n\r\n  .bp-ts-body{\r\n    padding:10px 12px;\r\n  }\r\n\r\n  .bp-ts-main-value{\r\n    font-size:27px;\r\n  }\r\n\r\n  .bp-ts-row{\r\n    flex-direction:column;\r\n    align-items:flex-start;\r\n    gap:6px;\r\n  }\r\n\r\n  .bp-ts-value{\r\n    font-size:22px;\r\n  }\r\n\r\n  .bp-ts-foot{\r\n    padding:10px 12px 14px;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<div class=\"bp-stats-section-head\">\r\n  <h2 class=\"bp-stats-section-title\">Etwas Statistik<\/h2>\r\n  <p class=\"bp-stats-section-subtitle\">Ein erster \u00dcberblick \u00fcber Terminverteilung, Vorschl\u00e4ge und Umsetzungen.<\/p>\r\n<\/div>\r\n\r\n<div class=\"bp-ts-wrap\">\r\n  <div class=\"bp-ts-box\">\r\n    <button class=\"bp-ts-accordion-trigger\" id=\"bpTrigger2526\" aria-expanded=\"false\" aria-controls=\"bpPanel2526\" type=\"button\">\r\n      <span class=\"bp-ts-trigger-text\">\r\n        <span class=\"bp-ts-title\">Termin\u00fcbersicht Saison 2025\/26<\/span>\r\n        <span class=\"bp-ts-sub\">Status der Foto-Terminvorschl\u00e4ge im ausgew\u00e4hlten Zeitraum<\/span>\r\n      <\/span>\r\n      <span class=\"bp-ts-trigger-side\">\r\n        <span class=\"bp-ts-tag\">Live-Statistik<\/span>\r\n        <svg class=\"bp-ts-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n          <path d=\"M6 9l6 6 6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path>\r\n        <\/svg>\r\n      <\/span>\r\n    <\/button>\r\n\r\n    <div id=\"bpPanel2526\" class=\"bp-ts-panel\">\r\n      <div class=\"bp-ts-panel-inner\">\r\n        <div class=\"bp-ts-body\">\r\n          <div class=\"bp-ts-main\">\r\n            <div class=\"bp-ts-main-label\">Gesamtvorschl\u00e4ge vom 01.08.25 bis 31.07.26<\/div>\r\n            <div id=\"bpGesamt2526\" class=\"bp-ts-main-value\">\u2013<\/div>\r\n            <div class=\"bp-ts-main-hint\">Summe aus durchgef\u00fchrten Terminen, \u00fcbrigen Vorschl\u00e4gen und Terminen in Planung.<\/div>\r\n            <div class=\"bp-ts-bar\"><div id=\"bpBar2526\" class=\"bp-ts-bar-fill\"><\/div><\/div>\r\n          <\/div>\r\n\r\n          <div class=\"bp-ts-grid\">\r\n            <div class=\"bp-ts-card g\">\r\n              <div class=\"bp-ts-row\">\r\n                <div class=\"bp-ts-label\">Durchgef\u00fchrte Termine<\/div>\r\n                <div id=\"bpGebucht2526\" class=\"bp-ts-value g\">\u2013<\/div>\r\n              <\/div>\r\n              <div class=\"bp-ts-note\">Spiele, bei denen Blickpunkt Lokalsport bereits vor Ort war oder sein wird.<\/div>\r\n            <\/div>\r\n\r\n            <div class=\"bp-ts-card a\">\r\n              <div class=\"bp-ts-row\">\r\n                <div class=\"bp-ts-label\">\u00dcbrige Vorschl\u00e4ge<\/div>\r\n                <div id=\"bpVorgemerkt2526\" class=\"bp-ts-value a\">\u2013<\/div>\r\n              <\/div>\r\n              <div class=\"bp-ts-note\">Terminvorschl\u00e4ge aus dem Kalender, noch ohne feste Zusage.<\/div>\r\n            <\/div>\r\n\r\n            <div class=\"bp-ts-card b\">\r\n              <div class=\"bp-ts-row\">\r\n                <div class=\"bp-ts-label\">In Planung<\/div>\r\n                <div id=\"bpPlanung2526\" class=\"bp-ts-value b\">\u2013<\/div>\r\n              <\/div>\r\n              <div class=\"bp-ts-note\">Termine, die aktuell abgestimmt oder vorbereitet werden.<\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"bp-ts-foot\">\r\n          <small>Zusammenfassung aller m\u00f6glichen Termine vom 01.08.25 bis 31.07.26. Stand: automatische Aktualisierung ca. alle 15 Minuten.<\/small>\r\n          <div id=\"bpPercent2526\" class=\"bp-ts-percent\"><\/div>\r\n          <div id=\"bpUpdate2526\" class=\"bp-ts-update\"><\/div>\r\n          <div id=\"bpError2526\" class=\"bp-ts-error\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<div class=\"bp-ts-wrap\">\r\n  <div class=\"bp-ts-box\">\r\n    <button class=\"bp-ts-accordion-trigger\" id=\"bpTrigger2627\" aria-expanded=\"false\" aria-controls=\"bpPanel2627\" type=\"button\">\r\n      <span class=\"bp-ts-trigger-text\">\r\n        <span class=\"bp-ts-title\">Termin\u00fcbersicht Saison 2026\/27<\/span>\r\n        <span class=\"bp-ts-sub\">Status der Foto-Terminvorschl\u00e4ge im ausgew\u00e4hlten Zeitraum<\/span>\r\n      <\/span>\r\n      <span class=\"bp-ts-trigger-side\">\r\n        <span class=\"bp-ts-tag\">Live-Statistik<\/span>\r\n        <svg class=\"bp-ts-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n          <path d=\"M6 9l6 6 6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path>\r\n        <\/svg>\r\n      <\/span>\r\n    <\/button>\r\n\r\n    <div id=\"bpPanel2627\" class=\"bp-ts-panel\">\r\n      <div class=\"bp-ts-panel-inner\">\r\n        <div class=\"bp-ts-body\">\r\n          <div class=\"bp-ts-main\">\r\n            <div class=\"bp-ts-main-label\">Gesamtvorschl\u00e4ge vom 01.08.26 bis 31.07.27<\/div>\r\n            <div id=\"bpGesamt2627\" class=\"bp-ts-main-value\">\u2013<\/div>\r\n            <div class=\"bp-ts-main-hint\">Summe aus durchgef\u00fchrten Terminen, \u00fcbrigen Vorschl\u00e4gen und Terminen in Planung.<\/div>\r\n            <div class=\"bp-ts-bar\"><div id=\"bpBar2627\" class=\"bp-ts-bar-fill\"><\/div><\/div>\r\n          <\/div>\r\n\r\n          <div class=\"bp-ts-grid\">\r\n            <div class=\"bp-ts-card g\">\r\n              <div class=\"bp-ts-row\">\r\n                <div class=\"bp-ts-label\">Durchgef\u00fchrte Termine<\/div>\r\n                <div id=\"bpGebucht2627\" class=\"bp-ts-value g\">\u2013<\/div>\r\n              <\/div>\r\n              <div class=\"bp-ts-note\">Spiele, bei denen Blickpunkt Lokalsport bereits vor Ort war oder sein wird.<\/div>\r\n            <\/div>\r\n\r\n            <div class=\"bp-ts-card a\">\r\n              <div class=\"bp-ts-row\">\r\n                <div class=\"bp-ts-label\">\u00dcbrige Vorschl\u00e4ge<\/div>\r\n                <div id=\"bpVorgemerkt2627\" class=\"bp-ts-value a\">\u2013<\/div>\r\n              <\/div>\r\n              <div class=\"bp-ts-note\">Terminvorschl\u00e4ge aus dem Kalender, noch ohne feste Zusage.<\/div>\r\n            <\/div>\r\n\r\n            <div class=\"bp-ts-card b\">\r\n              <div class=\"bp-ts-row\">\r\n                <div class=\"bp-ts-label\">In Planung<\/div>\r\n                <div id=\"bpPlanung2627\" class=\"bp-ts-value b\">\u2013<\/div>\r\n              <\/div>\r\n              <div class=\"bp-ts-note\">Termine, die aktuell abgestimmt oder vorbereitet werden.<\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"bp-ts-foot\">\r\n          <small>Zusammenfassung aller m\u00f6glichen Termine vom 01.08.26 bis 31.07.27. Stand: automatische Aktualisierung ca. alle 15 Minuten.<\/small>\r\n          <div id=\"bpPercent2627\" class=\"bp-ts-percent\"><\/div>\r\n          <div id=\"bpUpdate2627\" class=\"bp-ts-update\"><\/div>\r\n          <div id=\"bpError2627\" class=\"bp-ts-error\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  const URLS = {\r\n    gebucht: \"https:\/\/export.kalender.digital\/ics\/4615281\/b40e8d17b4be6185fe64\/fototerminbesttigt.ics?past_months=36&future_months=36\",\r\n    vorgemerkt: \"https:\/\/export.kalender.digital\/ics\/4863317\/b40e8d17b4be6185fe64\/vorgemerktnochkeinefestebuchungnureuervorschlag.ics?past_months=36&future_months=36\",\r\n    planung: \"https:\/\/export.kalender.digital\/ics\/4863324\/b40e8d17b4be6185fe64\/inplanung.ics?past_months=36&future_months=36\"\r\n  };\r\n\r\n  const REFRESH_INTERVAL = 1000 * 60 * 15;\r\n  const KEYS = [\"2526\",\"2627\"];\r\n  const MOBILE_MAX = 640;\r\n\r\n  const SAISONS = [\r\n    { key: \"2526\", start: new Date(2025, 7, 1, 0, 0, 0), end: new Date(2026, 6, 31, 23, 59, 59) },\r\n    { key: \"2627\", start: new Date(2026, 7, 1, 0, 0, 0), end: new Date(2027, 6, 31, 23, 59, 59) }\r\n  ];\r\n\r\n  function isMobile(){\r\n    return window.innerWidth <= MOBILE_MAX;\r\n  }\r\n\r\n  function getDefaultOpenSeason(){\r\n    const now = new Date();\r\n    const switchDate = new Date(2026, 7, 1, 0, 0, 0);\r\n    return now < switchDate ? \"2526\" : \"2627\";\r\n  }\r\n\r\n  function q(id){\r\n    return document.getElementById(id);\r\n  }\r\n\r\n  function setText(id, value){\r\n    const el = q(id);\r\n    if(el) el.textContent = value;\r\n  }\r\n\r\n  function setError(key, value){\r\n    setText(\"bpError\" + key, value || \"\");\r\n  }\r\n\r\n  function formatTime(date){\r\n    return date.toLocaleTimeString(\"de-DE\", {\r\n      hour: \"2-digit\",\r\n      minute: \"2-digit\"\r\n    });\r\n  }\r\n\r\n  function openPanel(key){\r\n    KEYS.forEach(function(k){\r\n      const trigger = q(\"bpTrigger\" + k);\r\n      const panel = q(\"bpPanel\" + k);\r\n      const isOpen = k === key;\r\n\r\n      if(!trigger || !panel) return;\r\n\r\n      trigger.setAttribute(\"aria-expanded\", isOpen ? \"true\" : \"false\");\r\n      panel.classList.toggle(\"is-open\", isOpen);\r\n    });\r\n  }\r\n\r\n  function closeAllPanels(){\r\n    KEYS.forEach(function(key){\r\n      const trigger = q(\"bpTrigger\" + key);\r\n      const panel = q(\"bpPanel\" + key);\r\n      if(!trigger || !panel) return;\r\n      trigger.setAttribute(\"aria-expanded\", \"false\");\r\n      panel.classList.remove(\"is-open\");\r\n    });\r\n  }\r\n\r\n  function initAccordion(){\r\n    KEYS.forEach(function(key){\r\n      const trigger = q(\"bpTrigger\" + key);\r\n      if(!trigger) return;\r\n\r\n      trigger.addEventListener(\"click\", function(){\r\n        const expanded = trigger.getAttribute(\"aria-expanded\") === \"true\";\r\n        if(expanded){\r\n          trigger.setAttribute(\"aria-expanded\", \"false\");\r\n          q(\"bpPanel\" + key).classList.remove(\"is-open\");\r\n        } else {\r\n          openPanel(key);\r\n        }\r\n      });\r\n    });\r\n\r\n    if(isMobile()){\r\n      closeAllPanels();\r\n    } else {\r\n      openPanel(getDefaultOpenSeason());\r\n    }\r\n  }\r\n\r\n  async function fetchWithTimeout(url, timeoutMs){\r\n    const controller = new AbortController();\r\n    const t = setTimeout(() => controller.abort(), timeoutMs || 8000);\r\n\r\n    try{\r\n      const r = await fetch(url, { signal: controller.signal });\r\n      clearTimeout(t);\r\n      return r;\r\n    }catch(e){\r\n      clearTimeout(t);\r\n      throw e;\r\n    }\r\n  }\r\n\r\n  async function fetchICS(url){\r\n    const proxies = [\r\n      u => \"https:\/\/api.allorigins.win\/raw?url=\" + encodeURIComponent(u),\r\n      u => \"https:\/\/api.codetabs.com\/v1\/proxy?quest=\" + encodeURIComponent(u)\r\n    ];\r\n\r\n    let lastError = \"\";\r\n\r\n    for(const makeUrl of proxies){\r\n      try{\r\n        const resp = await fetchWithTimeout(makeUrl(url), 8000);\r\n        if(!resp.ok){\r\n          lastError = \"HTTP \" + resp.status;\r\n          continue;\r\n        }\r\n\r\n        const text = await resp.text();\r\n        if(text && text.indexOf(\"BEGIN:VCALENDAR\") !== -1){\r\n          return text;\r\n        }\r\n        lastError = \"Kein VCALENDAR-Inhalt\";\r\n      }catch(e){\r\n        lastError = e && e.message ? e.message : \"Unbekannter Fehler\";\r\n      }\r\n    }\r\n\r\n    throw new Error(lastError || \"ICS konnte nicht geladen werden\");\r\n  }\r\n\r\n  function unfold(lines){\r\n    const out = [];\r\n    for(let i = 0; i < lines.length; i++){\r\n      let line = lines[i];\r\n      while(i + 1 < lines.length && (lines[i + 1].startsWith(\" \") || lines[i + 1].startsWith(\"\\t\"))){\r\n        line += lines[i + 1].slice(1);\r\n        i++;\r\n      }\r\n      out.push(line);\r\n    }\r\n    return out;\r\n  }\r\n\r\n  function parseICSDate(value){\r\n    if(!value) return null;\r\n\r\n    if(\/^\\d{8}$\/.test(value)){\r\n      const y = parseInt(value.slice(0,4), 10);\r\n      const m = parseInt(value.slice(4,6), 10) - 1;\r\n      const d = parseInt(value.slice(6,8), 10);\r\n      return new Date(y, m, d, 0, 0, 0);\r\n    }\r\n\r\n    if(\/^\\d{8}T\\d{6}Z$\/.test(value)){\r\n      const y = parseInt(value.slice(0,4), 10);\r\n      const m = parseInt(value.slice(4,6), 10) - 1;\r\n      const d = parseInt(value.slice(6,8), 10);\r\n      const hh = parseInt(value.slice(9,11), 10);\r\n      const mm = parseInt(value.slice(11,13), 10);\r\n      const ss = parseInt(value.slice(13,15), 10);\r\n      return new Date(Date.UTC(y, m, d, hh, mm, ss));\r\n    }\r\n\r\n    if(\/^\\d{8}T\\d{6}$\/.test(value)){\r\n      const y = parseInt(value.slice(0,4), 10);\r\n      const m = parseInt(value.slice(4,6), 10) - 1;\r\n      const d = parseInt(value.slice(6,8), 10);\r\n      const hh = parseInt(value.slice(9,11), 10);\r\n      const mm = parseInt(value.slice(11,13), 10);\r\n      const ss = parseInt(value.slice(13,15), 10);\r\n      return new Date(y, m, d, hh, mm, ss);\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  function parseICS(text){\r\n    const lines = unfold(text.split(\/\\r?\\n\/));\r\n    const events = [];\r\n    let event = null;\r\n\r\n    for(let line of lines){\r\n      line = line.trim();\r\n      const upper = line.toUpperCase();\r\n\r\n      if(upper === \"BEGIN:VEVENT\"){\r\n        event = {};\r\n      } else if(upper === \"END:VEVENT\"){\r\n        if(event && event.datum instanceof Date && !isNaN(event.datum) && event.summary){\r\n          events.push(event);\r\n        }\r\n        event = null;\r\n      } else if(event){\r\n        if(upper.startsWith(\"DTSTART\")){\r\n          const value = line.substring(line.indexOf(\":\") + 1).trim();\r\n          event.datum = parseICSDate(value);\r\n        } else if(upper.startsWith(\"SUMMARY:\")){\r\n          event.summary = line.substring(line.indexOf(\":\") + 1).trim();\r\n        }\r\n      }\r\n    }\r\n\r\n    return events;\r\n  }\r\n\r\n  function countInSeason(events, start, end){\r\n    return events.filter(function(e){\r\n      return e.datum && e.datum >= start && e.datum <= end;\r\n    }).length;\r\n  }\r\n\r\n  function renderSeason(key, start, end, sourceEvents, updatedAt){\r\n    const countGebucht = countInSeason(sourceEvents.gebucht, start, end);\r\n    const countVorgemerkt = countInSeason(sourceEvents.vorgemerkt, start, end);\r\n    const countInPlanung = countInSeason(sourceEvents.planung, start, end);\r\n    const countGesamt = countGebucht + countVorgemerkt + countInPlanung;\r\n\r\n    setText(\"bpGebucht\" + key, String(countGebucht));\r\n    setText(\"bpVorgemerkt\" + key, String(countVorgemerkt));\r\n    setText(\"bpPlanung\" + key, String(countInPlanung));\r\n    setText(\"bpGesamt\" + key, String(countGesamt));\r\n\r\n    const pct = countGesamt > 0 ? ((countGebucht \/ countGesamt) * 100).toFixed(1) : \"0.0\";\r\n    setText(\"bpPercent\" + key, \"Bereits durchgef\u00fchrt: \" + pct + \"% aller Vorschl\u00e4ge\");\r\n    setText(\"bpUpdate\" + key, \"Zuletzt aktualisiert: \" + formatTime(updatedAt) + \" Uhr\");\r\n    setError(key, \"\");\r\n\r\n    const totalDuration = end - start;\r\n    const now = new Date();\r\n    const elapsed = Math.max(0, Math.min(now - start, totalDuration));\r\n    const timePercent = totalDuration > 0 ? (elapsed \/ totalDuration) * 100 : 0;\r\n\r\n    const pG = countGesamt ? (countGebucht \/ countGesamt) * 100 : 0;\r\n    const pV = countGesamt ? (countVorgemerkt \/ countGesamt) * 100 : 0;\r\n    const pP = countGesamt ? (countInPlanung \/ countGesamt) * 100 : 0;\r\n\r\n    const bar = q(\"bpBar\" + key);\r\n    if(bar){\r\n      requestAnimationFrame(() => {\r\n        bar.style.width = timePercent + \"%\";\r\n        bar.style.background = \"linear-gradient(90deg,\"\r\n          + \"#15803d 0%, #15803d \" + pG + \"%,\"\r\n          + \"#b45309 \" + pG + \"%, #b45309 \" + (pG + pV) + \"%,\"\r\n          + \"#1d4ed8 \" + (pG + pV) + \"%, #1d4ed8 \" + (pG + pV + pP) + \"%)\";\r\n      });\r\n    }\r\n  }\r\n\r\n  function renderFallbackError(message){\r\n    KEYS.forEach(function(key){\r\n      setText(\"bpGebucht\" + key, \"0\");\r\n      setText(\"bpVorgemerkt\" + key, \"0\");\r\n      setText(\"bpPlanung\" + key, \"0\");\r\n      setText(\"bpGesamt\" + key, \"0\");\r\n      setText(\"bpPercent\" + key, \"Bereits durchgef\u00fchrt: 0.0% aller Vorschl\u00e4ge\");\r\n      setText(\"bpUpdate\" + key, \"Keine aktuelle Aktualisierung m\u00f6glich\");\r\n      setError(key, \"Fehler beim Laden: \" + message);\r\n    });\r\n  }\r\n\r\n  async function ladeStatistik(){\r\n    try{\r\n      const [g, v, p] = await Promise.all([\r\n        fetchICS(URLS.gebucht),\r\n        fetchICS(URLS.vorgemerkt),\r\n        fetchICS(URLS.planung)\r\n      ]);\r\n\r\n      const sourceEvents = {\r\n        gebucht: parseICS(g),\r\n        vorgemerkt: parseICS(v),\r\n        planung: parseICS(p)\r\n      };\r\n\r\n      const updatedAt = new Date();\r\n\r\n      SAISONS.forEach(function(season){\r\n        renderSeason(season.key, season.start, season.end, sourceEvents, updatedAt);\r\n      });\r\n    }catch(e){\r\n      console.error(\"Termin\u00fcbersicht Fehler:\", e);\r\n      renderFallbackError(e && e.message ? e.message : \"Unbekannter Fehler\");\r\n    }\r\n  }\r\n\r\n  initAccordion();\r\n  ladeStatistik();\r\n  setInterval(ladeStatistik, REFRESH_INTERVAL);\r\n\r\n  let lastIsMobile = isMobile();\r\n\r\n  window.addEventListener(\"resize\", function(){\r\n    const nowIsMobile = isMobile();\r\n    if(nowIsMobile === lastIsMobile) return;\r\n    lastIsMobile = nowIsMobile;\r\n\r\n    if(nowIsMobile){\r\n      closeAllPanels();\r\n    } else {\r\n      openPanel(getDefaultOpenSeason());\r\n    }\r\n  });\r\n})();\r\n<\/script>\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-2b2b8fb e-flex e-con-boxed e-con e-parent\" data-id=\"2b2b8fb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2b3c269 elementor-widget elementor-widget-spacer\" data-id=\"2b3c269\" 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\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8fbd3a0 e-con-full e-flex e-con e-parent\" data-id=\"8fbd3a0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>19.04.2026 | U19 Oldentrup stark Die Hausherren hatten in den Anfangsminuten ihre Probleme mit den G\u00e4sten vom Sch\u00fctzenberg, doch im Laufe des Spiels entwickelten die Hausherren ein deutliches \u00dcbergewicht gegen\u00fcber dem Gast aus Heepen. Oldentrup gewinnt am Ende mit 5:0. Zu den Bildern 19.04.2026 | Frauen Viel Tore Die Frauen von der K\u00f6nigsbr\u00fcgge haben gegen &#8230; <a title=\"kick-off\" class=\"read-more\" href=\"https:\/\/blickpunkt-lokalsport.de\/english\/\" aria-label=\"Read more about Anpfiff\">Read more<\/a><\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-22","page","type-page","status-publish"],"acf":[],"_links":{"self":[{"href":"https:\/\/blickpunkt-lokalsport.de\/english\/wp-json\/wp\/v2\/pages\/22","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=22"}],"version-history":[{"count":10,"href":"https:\/\/blickpunkt-lokalsport.de\/english\/wp-json\/wp\/v2\/pages\/22\/revisions"}],"predecessor-version":[{"id":52618,"href":"https:\/\/blickpunkt-lokalsport.de\/english\/wp-json\/wp\/v2\/pages\/22\/revisions\/52618"}],"wp:attachment":[{"href":"https:\/\/blickpunkt-lokalsport.de\/english\/wp-json\/wp\/v2\/media?parent=22"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}