{"id":24851,"date":"2026-09-29T08:21:03","date_gmt":"2026-09-29T06:21:03","guid":{"rendered":"https:\/\/www.display-magazin.ch\/evenements\/"},"modified":"2026-09-29T08:21:03","modified_gmt":"2026-09-29T06:21:03","slug":"evenements","status":"publish","type":"page","link":"https:\/\/www.display-magazin.ch\/fr\/evenements\/","title":{"rendered":"\u00c9v\u00e9nements"},"content":{"rendered":"<script>window.DSPEV_API=\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/wp-json\\\/display\\\/v1\\\/events\";<\/script>\n<!-- ============================================================\n  DISPLAY Events \u2013 Embed-Sektion, FRANZOESISCHE Fassung (i18n_fr.py)\n  Generiert aus display-events.html durch wp-integration\/build-embed.py\n  NICHT von Hand editieren \u2013 Aenderungen im Mockup machen, dann neu bauen.\n  Einbau: Elementor > HTML-Widget > kompletten Inhalt dieser Datei einfuegen.\n============================================================ -->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Figtree:wght@400;500;600;700;800&display=swap\" rel=\"stylesheet\">\n<style>#dsp-events{\n    color-scheme:dark; \n    --bg:#0c0b10; --surface:#17151d; --surface-2:#211e2a; --text:#f5f4f8; --muted:#b6b3c2; --faint:#8b8899;\n    --line:rgba(255,255,255,.09); --line-2:rgba(255,255,255,.22);\n    --accent:#ff2e88; --accent-ink:#fff; --radius:15px; --radius-sm:10px;\n    --shadow:0 2px 8px rgba(0,0,0,.35), 0 18px 44px rgba(0,0,0,.45); --shadow-sm:0 1px 3px rgba(0,0,0,.3);\n    --party:#ff4fa3; --pride:#ff7a3d; --kultur:#4f9dff; --community:#23d6a4; --drag:#b388ff; --bar:#ffb14f; --sport:#8fd14f; --comedy:#ff6b6b;\n  }#dsp-events[data-theme=\"light\"]{\n    color-scheme:light;\n    --bg:#f4f3f0; --surface:#fff; --surface-2:#f0eee9; --text:#17161b; --muted:#6c6b73; --faint:#9a99a1;\n    --line:#e8e6e1; --line-2:#dcdad4; --accent:#e6157a;\n    --shadow:0 1px 2px rgba(20,18,30,.04), 0 10px 30px rgba(20,18,30,.07); --shadow-sm:0 1px 2px rgba(20,18,30,.05);\n    --party:#be185d; --pride:#c2410c; --kultur:#1d4ed8; --community:#0f766e; --drag:#7c3aed; --bar:#b45309; --sport:#4d7c0f; --comedy:#be123c;\n  }#dsp-events *{box-sizing:border-box}#dsp-events,#dsp-events{margin:0;padding:0}#dsp-events{font-family:\"Figtree\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;line-height:1.45}#dsp-events .icon{width:1em;height:1em;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}#dsp-events .icon.fill{fill:currentColor;stroke:none}#dsp-events .wrap{max-width:1180px;margin:0 auto;padding:0 18px}#dsp-events .rainbow{height:4px;background:linear-gradient(90deg,#ff2d8b,#ff7a3d,#ffd23d,#23d6a4,#4f9dff,#b388ff)}#dsp-events .dsp-toolbar{position:sticky;top:0;z-index:40;background:color-mix(in srgb,var(--bg) 84%,transparent);backdrop-filter:saturate(1.5) blur(14px);border-bottom:1px solid var(--line)}#dsp-events .topbar{display:flex;align-items:center;gap:11px;height:56px}#dsp-events .brand{display:flex;align-items:center;gap:9px}#dsp-events .logo{height:30px;width:30px;object-fit:cover;object-position:left center;border-radius:7px;flex:none}#dsp-events .logo-light{display:none}#dsp-events[data-theme=\"light\"] .logo-dark{display:none}#dsp-events[data-theme=\"light\"] .logo-light{display:block}#dsp-events .brand-sub{font-weight:600;font-size:14px;color:var(--muted)}#dsp-events .spacer{flex:1}#dsp-events .city{display:flex;align-items:center;gap:5px;border:1px solid var(--line-2);background:var(--surface);border-radius:999px;padding:6px 11px;font-weight:600;font-size:13.5px}#dsp-events .city select{border:0;background:transparent;font:inherit;font-weight:600;color:inherit;cursor:pointer;outline:none;-webkit-appearance:none;appearance:none}#dsp-events .iconbtn{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border:1px solid var(--line-2);background:var(--surface);border-radius:999px;color:var(--text);font-size:18px;cursor:pointer;transition:.15s}#dsp-events .iconbtn:hover{background:var(--surface-2)}#dsp-events .iconbtn.on{color:var(--accent);border-color:var(--accent)}#dsp-events .iconbtn.sm{width:32px;height:32px;font-size:16px;border-color:var(--line)}#dsp-events .addbtn{display:inline-flex;align-items:center;gap:6px;height:38px;padding:0 15px;border-radius:999px;border:1px solid var(--accent);background:transparent;color:var(--accent);font:inherit;font-weight:600;font-size:13.5px;cursor:pointer;transition:.15s;white-space:nowrap}#dsp-events .addbtn:hover{background:color-mix(in srgb,var(--accent) 14%,transparent)}#dsp-events .addbtn svg{font-size:17px}#dsp-events .theme-toggle .i-moon{display:none}#dsp-events[data-theme=\"light\"] .theme-toggle .i-sun{display:none}#dsp-events[data-theme=\"light\"] .theme-toggle .i-moon{display:block}#dsp-events .searchrow{padding-bottom:10px}#dsp-events .search{display:flex;align-items:center;gap:9px;background:var(--surface);border:1px solid var(--line-2);border-radius:999px;padding:9px 15px;font-size:14.5px}#dsp-events .search svg{font-size:17px;color:var(--faint)}#dsp-events .search input{border:0;outline:0;flex:1;font:inherit;background:transparent;color:var(--text)}#dsp-events .hero{margin:14px auto 2px}#dsp-events .hero-card{position:relative;overflow:hidden;display:flex;align-items:center;justify-content:space-between;gap:22px;border-radius:16px;padding:16px 22px;border:1px solid var(--line-2);cursor:pointer;\n    background:radial-gradient(100% 130% at 0% 0%, color-mix(in srgb,var(--party) 32%,transparent), transparent 52%),\n      radial-gradient(100% 130% at 100% 0%, color-mix(in srgb,var(--kultur) 26%,transparent), transparent 52%),\n      radial-gradient(120% 150% at 100% 120%, color-mix(in srgb,var(--community) 20%,transparent), transparent 56%), var(--surface)}#dsp-events .hero-main{min-width:0}#dsp-events .hero-eyebrow{display:inline-flex;gap:6px;align-items:center;font-weight:800;font-size:12px;letter-spacing:.04em;text-transform:uppercase;margin-bottom:5px;background:linear-gradient(90deg,#ff2d8b,#ff7a3d,#ffd23d,#23d6a4,#4f9dff,#b388ff);-webkit-background-clip:text;background-clip:text;color:transparent}#dsp-events .hero-eyebrow svg{font-size:14px;color:#ffd23d;-webkit-text-fill-color:#ffd23d}#dsp-events .hero-title{font-size:22px;font-weight:800;letter-spacing:-.02em;line-height:1.12;margin:0 0 4px}#dsp-events .hero-sub{font-size:14px;color:var(--muted);margin:0}#dsp-events .hero-sub b{color:var(--text);font-weight:700}#dsp-events .hero-side{display:flex;flex-direction:column;align-items:flex-end;gap:7px;flex:none}#dsp-events .hero-meta{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--muted);white-space:nowrap}#dsp-events .hero-meta svg{font-size:15px;color:var(--accent)}#dsp-events .filters{position:sticky;top:56px;z-index:30;background:var(--bg);padding:11px 0 3px}#dsp-events .chiprow{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding-bottom:8px}#dsp-events .chiprow::-webkit-scrollbar{display:none}#dsp-events .fchip{white-space:nowrap;border:1px solid var(--line-2);background:var(--surface);border-radius:999px;padding:7px 14px;font-size:13px;font-weight:600;color:var(--text);cursor:pointer;transition:.15s;display:inline-flex;align-items:center;gap:6px}#dsp-events .fchip:hover{border-color:var(--faint)}#dsp-events .fchip.on{background:var(--text);color:var(--bg);border-color:var(--text)}#dsp-events .fchip.on.accent{background:var(--accent);color:#fff;border-color:var(--accent)}#dsp-events .fchip.on.accent svg{color:#fff!important}#dsp-events .fchip .ico{font-size:14px}#dsp-events .results{display:flex;align-items:baseline;justify-content:space-between;margin:12px 0 10px}#dsp-events .results h2{font-size:17px;font-weight:700;margin:0}#dsp-events .results .count{font-size:14px;color:var(--muted)}#dsp-events .results .count b{color:var(--text)}#dsp-events .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(298px,1fr));gap:14px;padding-bottom:40px;align-items:stretch}#dsp-events .daygroup{grid-column:1\/-1;font-size:15px;font-weight:700;color:var(--text);margin:18px 0 0;padding:0 2px 9px;border-bottom:1px solid var(--line-2)}#dsp-events .daygroup:first-child{margin-top:2px}\n  \n  @media(min-width:860px){#dsp-events .grid{grid-template-columns:minmax(0,880px);justify-content:center}#dsp-events .results{max-width:880px;margin-left:auto;margin-right:auto}#dsp-events .card.compact .thumb{width:132px}#dsp-events .card:not(.compact) .banner{height:230px}}#dsp-events .card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;cursor:pointer;transition:transform .14s, border-color .14s;box-shadow:var(--shadow-sm);display:flex;flex-direction:column}#dsp-events .card:hover{transform:translateY(-2px);border-color:var(--line-2)}#dsp-events .card.sponsored{border:1.6px solid #f0a93c;box-shadow:0 0 26px rgba(240,169,60,.22), 0 4px 16px rgba(0,0,0,.4)}#dsp-events .card.sponsored:hover{transform:translateY(-2px);box-shadow:0 0 38px rgba(240,169,60,.36), 0 6px 22px rgba(0,0,0,.45)}#dsp-events .card.sponsored .badge.sponsored{font-size:11.5px;padding:5px 11px;text-transform:uppercase;letter-spacing:.05em;box-shadow:0 2px 12px rgba(240,169,60,.6)}#dsp-events[data-theme=\"light\"] .card.sponsored{box-shadow:0 0 22px rgba(214,143,20,.3), 0 4px 14px rgba(0,0,0,.08)}#dsp-events .card.compact{display:flex;flex-direction:row;align-items:stretch}#dsp-events .card.compact .cbody{flex:1;min-width:0;padding:11px 14px 12px}#dsp-events .datetile{width:72px;flex:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;color:#1c1410;background:linear-gradient(160deg, var(--cat), color-mix(in srgb, var(--cat) 78%, #000))}#dsp-events[data-theme=\"light\"] .datetile{color:#fff}#dsp-events .cat-pride .datetile{background:linear-gradient(165deg,#ff2d8b,#ffd23d 45%,#23d6a4 65%,#4f9dff 85%,#b388ff);color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.35)}#dsp-events .dt-wd{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;opacity:.85}#dsp-events .dt-day{font-size:27px;font-weight:800;line-height:1.02}#dsp-events .dt-mon{font-size:11px;font-weight:700;text-transform:uppercase;opacity:.85}#dsp-events .thumb{position:relative;width:92px;flex:none;overflow:hidden;background:var(--surface-2)}#dsp-events .thumb .bimg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}#dsp-events .thumb .bscrim{position:absolute;inset:0;background:linear-gradient(150deg, color-mix(in srgb,var(--cat) 48%, transparent), color-mix(in srgb,var(--cat) 12%, transparent) 60%, rgba(8,7,12,0)), linear-gradient(165deg, rgba(8,7,12,.55), rgba(8,7,12,0) 52%)}#dsp-events .thumb .td{position:absolute;left:8px;top:7px;color:#fff;line-height:1.02;text-shadow:0 1px 3px rgba(0,0,0,.55)}#dsp-events .thumb .td .w{display:block;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;opacity:.95}#dsp-events .thumb .td .d{display:block;font-size:20px;font-weight:800}#dsp-events .cat-party{--cat:var(--party)}#dsp-events .cat-pride{--cat:var(--pride)}#dsp-events .cat-kultur{--cat:var(--kultur)}#dsp-events .cat-community{--cat:var(--community)}#dsp-events .cat-drag{--cat:var(--drag)}#dsp-events .cat-bar{--cat:var(--bar)}#dsp-events .cat-sport{--cat:var(--sport)}#dsp-events .cat-comedy{--cat:var(--comedy)}#dsp-events .banner{position:relative;overflow:hidden;height:116px;background:radial-gradient(115% 130% at 50% 0%, color-mix(in srgb,var(--cat) 34%, transparent), transparent 72%), var(--surface-2)}#dsp-events .bimg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}#dsp-events .bscrim{position:absolute;inset:0;pointer-events:none;background:linear-gradient(145deg, color-mix(in srgb,var(--cat) 50%, transparent), color-mix(in srgb,var(--cat) 10%, transparent) 56%, rgba(8,7,12,0) 78%), linear-gradient(180deg, rgba(8,7,12,.42), rgba(8,7,12,0) 40%, rgba(8,7,12,0) 64%, rgba(8,7,12,.42))}#dsp-events .cat-pride .bscrim{background:linear-gradient(135deg, rgba(255,45,139,.5), rgba(255,210,61,.3) 38%, rgba(35,214,164,.32) 60%, rgba(79,157,255,.42) 82%, rgba(179,136,255,.46)), linear-gradient(180deg, rgba(8,7,12,.4), rgba(8,7,12,0) 42%, rgba(8,7,12,0) 66%, rgba(8,7,12,.36))}#dsp-events .banner .td{position:absolute;right:10px;top:9px;z-index:2;text-align:center;color:#fff;line-height:1.02;text-shadow:0 1px 4px rgba(0,0,0,.6);background:rgba(8,7,12,.34);backdrop-filter:blur(3px);border-radius:9px;padding:5px 9px}#dsp-events .banner .td .w{display:block;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;opacity:.95}#dsp-events .banner .td .d{display:block;font-size:21px;font-weight:800}#dsp-events .banner .td .m{display:block;font-size:10px;font-weight:700;text-transform:uppercase;opacity:.92}#dsp-events .badges{position:absolute;top:10px;left:10px;z-index:2;display:flex;gap:5px;flex-wrap:wrap;max-width:72%}#dsp-events .badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:700;padding:4px 8px;border-radius:7px;box-shadow:var(--shadow-sm)}#dsp-events .badge svg{font-size:11px}#dsp-events .badge.sponsored{background:#ffb14f;color:#3a2600}#dsp-events .badge.contest{background:#b388ff;color:#1c0c3d}#dsp-events .badge.tip{background:#23d6a4;color:#053a2b}#dsp-events .cbody{padding:12px 14px 13px;display:flex;flex-direction:column;flex:1}#dsp-events .chips{display:flex;align-items:center;gap:6px;margin-bottom:7px;flex-wrap:wrap}#dsp-events .chip{font-size:11px;font-weight:700;padding:4px 8px;border-radius:7px;background:color-mix(in srgb,var(--cat) 18%, transparent);color:var(--cat)}#dsp-events .cat-pride .chip.catlabel{background:linear-gradient(90deg,#ff2d8b,#4f9dff,#23d6a4);color:#fff}#dsp-events .chip.free{background:color-mix(in srgb,var(--sport) 20%,transparent);color:var(--sport)}#dsp-events .ctitle{font-size:16px;font-weight:700;letter-spacing:-.01em;margin:1px 0 8px;line-height:1.25}#dsp-events .meta{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:13px;margin:3px 0}#dsp-events .meta svg{font-size:14px;color:var(--faint);flex:none}#dsp-events .cfoot{display:flex;align-items:center;justify-content:space-between;margin-top:auto;padding-top:11px;border-top:1px solid var(--line)}#dsp-events .price{font-weight:700;font-size:14px}#dsp-events .acts{display:flex;gap:7px}#dsp-events .empty{grid-column:1\/-1;text-align:center;padding:56px 20px;color:var(--muted)}#dsp-events .overlay{position:fixed;inset:0;z-index:60;background:rgba(6,5,10,.55);display:none;align-items:flex-end;justify-content:center;overflow-y:auto}\n  @supports((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){#dsp-events .overlay{-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px)}}#dsp-events .overlay.open{display:flex}\n  @media(min-width:640px){#dsp-events .overlay{align-items:center;padding:24px}}#dsp-events .sheet{background:var(--surface);width:100%;max-width:560px;border-radius:22px 22px 0 0;box-shadow:var(--shadow);max-height:94vh;overflow-y:auto;border:1px solid var(--line-2)}\n  @media(min-width:640px){#dsp-events .sheet{border-radius:22px}}#dsp-events .closebar{position:sticky;top:0;display:flex;justify-content:flex-end;padding:12px 12px 0;z-index:2}#dsp-events .closebtn{width:36px;height:36px;border-radius:999px;border:0;background:color-mix(in srgb,var(--surface-2) 90%,transparent);font-size:18px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--text)}#dsp-events .d-banner{position:relative;overflow:hidden;height:168px;margin-top:-58px;background:radial-gradient(115% 130% at 50% 0%, color-mix(in srgb,var(--cat) 34%, transparent), transparent 72%), var(--surface-2)}#dsp-events .d-banner.slim{height:80px}#dsp-events .cat-pride .d-banner.slim{background:linear-gradient(125deg,#ff2d8b,#ffd23d,#23d6a4,#4f9dff,#b388ff)}#dsp-events .d-body{padding:16px 22px 26px}#dsp-events .d-title{font-size:23px;font-weight:800;letter-spacing:-.02em;line-height:1.18;margin:6px 0 12px}#dsp-events .d-row{display:flex;align-items:center;gap:11px;padding:9px 0;font-size:14.5px;border-bottom:1px solid var(--line)}#dsp-events .d-row svg{font-size:18px;color:var(--accent);flex:none}#dsp-events .d-desc{color:var(--text);opacity:.85;font-size:15px;line-height:1.6;margin:14px 0}#dsp-events .d-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}#dsp-events .btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:12px;padding:12px 18px;font:inherit;font-weight:700;font-size:14.5px;cursor:pointer;border:1px solid var(--line-2);background:var(--surface);color:var(--text)}#dsp-events .btn.primary{background:var(--accent);color:#fff;border-color:var(--accent)}#dsp-events .d-actions .btn.primary{flex:1;min-width:150px}#dsp-events a.btn{text-decoration:none}#dsp-events .btn svg{font-size:17px}#dsp-events .contestbox{background:color-mix(in srgb,var(--drag) 16%,var(--surface));border:1px solid color-mix(in srgb,var(--drag) 40%,transparent);border-radius:14px;padding:15px;margin:16px 0 4px}#dsp-events .contestbox h4{margin:0 0 4px;font-size:15px;font-weight:700;color:var(--drag);display:flex;align-items:center;gap:7px}#dsp-events .contestbox p{margin:0 0 11px;font-size:13.5px;color:var(--muted)}#dsp-events .rf-count{display:inline-block;font-size:11.5px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;\n    color:var(--drag);background:color-mix(in srgb,var(--drag) 20%,transparent);border-radius:999px;padding:3px 9px;margin:0 0 9px}#dsp-events .rf-act{display:flex;gap:9px;flex-wrap:wrap;align-items:center;margin-top:4px}#dsp-events .rf-btn{display:inline-flex;align-items:center;gap:7px;background:var(--drag);color:#1c0c3d;border:0;border-radius:10px;\n    padding:11px 18px;font:inherit;font-size:14px;font-weight:800;cursor:pointer;text-decoration:none;transition:.15s}#dsp-events .rf-btn:hover{filter:brightness(1.08)}#dsp-events .rf-btn:disabled{opacity:.6;cursor:default}#dsp-events .rf-alt{font-size:13.5px;color:var(--muted);text-decoration:underline;text-underline-offset:3px}#dsp-events .rf-alt:hover{color:var(--text)}#dsp-events .rf-in{display:flex;gap:9px;align-items:flex-start;margin:0;font-size:14px;color:var(--text)}#dsp-events .rf-in svg{color:var(--drag);flex:none;margin-top:2px;font-size:17px}#dsp-events .rf-win{margin:0;font-size:15px;color:var(--text)}#dsp-events .rf-fine{margin:10px 0 0;font-size:12px;color:var(--muted);line-height:1.5}#dsp-events .rf-wiz{margin:2px 0 12px 28px;padding:12px 14px;border-left:2px solid color-mix(in srgb,var(--drag) 55%,transparent);\n    background:color-mix(in srgb,var(--drag) 8%,transparent);border-radius:0 10px 10px 0}#dsp-events .rf-wiz[hidden]{display:none}#dsp-events .contestform{display:flex;gap:8px}#dsp-events .contestform input{flex:1;border:1px solid var(--line-2);border-radius:10px;padding:11px 13px;font:inherit;font-size:14px;outline:none;background:var(--bg);color:var(--text)}#dsp-events .contestform button{background:var(--drag);color:#1c0c3d;border:0;border-radius:10px;padding:0 16px;font:inherit;font-weight:700;cursor:pointer}#dsp-events form .field{margin-bottom:11px}#dsp-events form label{display:block;font-size:13.5px;font-weight:600;color:var(--text);opacity:.85;margin-bottom:6px}#dsp-events form input::placeholder,#dsp-events form textarea::placeholder{color:var(--faint);opacity:1}#dsp-events form input,#dsp-events form select,#dsp-events form textarea{width:100%;border:1px solid var(--line-2);border-radius:12px;padding:12px 14px;font:inherit;font-size:15px;background:color-mix(in srgb,var(--text) 5%,transparent);outline:none;color:var(--text);accent-color:var(--accent);transition:border-color .16s,box-shadow .16s,background .16s}#dsp-events form input:focus,#dsp-events form select:focus,#dsp-events form textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3.5px color-mix(in srgb,var(--accent) 22%,transparent)}#dsp-events form textarea{min-height:68px;resize:vertical}#dsp-events .frow{display:grid;grid-template-columns:1fr 1fr;gap:12px}#dsp-events .frow.cols3{grid-template-columns:1fr 1fr 1fr}#dsp-events .formhint{display:flex;gap:9px;align-items:flex-start;background:color-mix(in srgb,var(--community) 14%,var(--surface));border-radius:11px;padding:12px 14px;font-size:13px;color:var(--text);margin:4px 0 16px}#dsp-events .formhint svg{font-size:17px;flex:none;margin-top:1px;color:var(--community)}#dsp-events .wiz{background:var(--surface);width:100%;max-width:620px;border-radius:26px 26px 0 0;box-shadow:var(--shadow);border:1px solid var(--line-2);max-height:94vh;overflow-y:auto;padding:18px 20px 20px}\n  @media(min-width:640px){#dsp-events .wiz{border-radius:26px}}\n  \n  @supports((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){#dsp-events .wiz,#dsp-events .sheet{background:color-mix(in srgb,var(--surface) 72%,transparent);-webkit-backdrop-filter:blur(30px) saturate(1.6);backdrop-filter:blur(30px) saturate(1.6);border-color:var(--line-2)}}#dsp-events .overlay.open .wiz,#dsp-events .overlay.open .sheet{animation:wizin .28s cubic-bezier(.2,.8,.2,1)}#dsp-events .wiz-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}#dsp-events .wiz-head h2{font-size:21px;font-weight:800;letter-spacing:-.02em;margin:0}#dsp-events .wiz-sub{color:var(--muted);font-size:13.5px;margin-top:3px}#dsp-events .wiz-steps{display:flex;gap:8px;margin:0 0 16px}#dsp-events .wstep{flex:1;border:0;background:none;cursor:pointer;font:inherit;padding:0;color:var(--muted);font-size:12.5px;font-weight:700;text-align:left;letter-spacing:.02em}#dsp-events .wstep .bar{display:block;height:4px;border-radius:99px;background:var(--line-2);margin-bottom:6px;transition:.2s}#dsp-events .wstep.done .bar,#dsp-events .wstep.on .bar{background:var(--accent)}#dsp-events .wstep.on{color:var(--text)}#dsp-events .wstep:disabled{cursor:default}#dsp-events .wpane{display:none}#dsp-events .wpane.on{display:block;animation:wfade .18s ease}#dsp-events .wpane h3{font-size:12.5px;font-weight:700;margin:2px 0 10px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}#dsp-events .wiz-foot{display:flex;align-items:center;gap:10px;margin-top:16px}#dsp-events .wiz .btn{border-radius:999px}#dsp-events .wiz-foot .btn{padding:11px 20px}#dsp-events .wiz .btn:active{transform:scale(.97)}#dsp-events .wiz .btn{transition:transform .12s,filter .15s}#dsp-events .wiz .btn.primary:hover{filter:brightness(1.08)}#dsp-events .wiz-tease{flex:1;display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:#f0a93c;min-width:0}#dsp-events .wiz-tease svg{flex:none}#dsp-events .wiz-note{font-size:12.5px;color:var(--muted);margin-top:12px}#dsp-events .daychips{display:flex;gap:6px;flex-wrap:wrap}#dsp-events .daychips button{font:inherit;font-size:13px;font-weight:700;padding:9px 0;width:42px;border-radius:999px;border:1px solid var(--line-2);background:color-mix(in srgb,var(--text) 5%,transparent);color:var(--muted);cursor:pointer;transition:.13s}#dsp-events .daychips button.on{background:var(--accent);border-color:var(--accent);color:#fff}#dsp-events .daychips.catchips{gap:8px}#dsp-events .daychips.catchips button{width:auto;min-width:0;padding:9px 16px;white-space:nowrap}#dsp-events .pricepick button{width:auto;padding:9px 14px}#dsp-events .mine-list{display:flex;flex-direction:column;gap:10px}#dsp-events .mine-item{display:flex;align-items:center;gap:10px;padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:color-mix(in srgb,var(--text) 4%,transparent);flex-wrap:wrap}#dsp-events .mine-info{flex:1;min-width:160px}#dsp-events .mine-title{font-weight:700;font-size:14.5px}#dsp-events .mine-meta{font-size:12.5px;color:var(--muted);margin-top:2px}#dsp-events .mine-badge{font-size:11.5px;font-weight:800;padding:4px 10px;border-radius:999px}#dsp-events .mine-badge.live{background:color-mix(in srgb,var(--community) 18%,transparent);color:var(--community)}#dsp-events .mine-badge.pend{background:color-mix(in srgb,#f0a93c 16%,transparent);color:#f0a93c}#dsp-events .mine-badge.boost{background:color-mix(in srgb,#f0a93c 22%,transparent);color:#f0a93c}#dsp-events .mine-tpl{padding:8px 14px;font-size:13px}#dsp-events .mine-empty{color:var(--muted);font-size:14px;padding:16px 4px}#dsp-events .counter{text-align:right;font-size:11px;color:var(--faint);margin-top:2px}#dsp-events .check{display:flex;align-items:flex-start;gap:9px;font-size:14px;color:var(--text);margin:9px 0;cursor:pointer;line-height:1.45}#dsp-events .check input[type=checkbox]{appearance:auto;-webkit-appearance:auto;width:18px;height:18px;min-width:18px;padding:0;margin:1px 0 0;border:0;background:none;accent-color:var(--accent);flex:none}#dsp-events .check-h{color:var(--faint);font-weight:400}#dsp-events .dropzone{display:flex;align-items:center;justify-content:center;gap:10px;min-height:56px;border:1.5px dashed var(--line-2);border-radius:12px;cursor:pointer;text-align:center;font-size:14px;color:var(--text);padding:10px 14px;background:var(--bg);transition:.15s}#dsp-events .dropzone #dz-empty{display:flex;align-items:center;gap:10px}#dsp-events .dropzone:hover{border-color:var(--accent)}#dsp-events .dropzone img{max-height:170px;max-width:100%;border-radius:10px}#dsp-events .hl-offer{border:1.5px solid #f0a93c;border-radius:12px;padding:13px 15px;margin-bottom:12px;background:linear-gradient(180deg, color-mix(in srgb,#f0a93c 9%, transparent), transparent 62%);box-shadow:0 0 26px rgba(240,169,60,.13)}#dsp-events .hl-offer.on{box-shadow:0 0 32px rgba(240,169,60,.3);border-color:#ffc266}#dsp-events .hl-perks{display:flex;flex-direction:column;gap:6px;margin-top:9px;font-size:13.5px;color:var(--text);font-weight:400}#dsp-events .hl-perks span{display:flex;align-items:center;gap:8px}#dsp-events .hl-perks svg{color:#f0a93c;font-size:15px;flex:none}#dsp-events .hl-check{margin:0}#dsp-events .hl-title{font-weight:700;font-size:15px;display:inline-flex;align-items:center;gap:7px;flex-wrap:wrap}#dsp-events .hl-price{background:#f0a93c;color:#2a1c00;font-size:12px;font-weight:800;padding:2px 9px;border-radius:7px}#dsp-events .hl-pay{display:none;margin-top:10px;padding-top:10px;border-top:1px solid var(--line-2)}#dsp-events .hl-offer.on .hl-pay{display:flex}#dsp-events .hl-qr{background:#fff;padding:9px;border-radius:10px;line-height:0;flex:none}#dsp-events .hl-amount{font-size:20px;font-weight:800}#dsp-events .hl-status{font-size:13px;color:var(--muted)}#dsp-events .hl-status.paid{color:var(--community)}#dsp-events .wiz-err{display:none;margin-top:14px;padding:11px 14px;border-radius:12px;border:1px solid color-mix(in srgb,#e5484d 55%,transparent);background:color-mix(in srgb,#e5484d 12%,transparent);color:var(--text);font-size:13.5px;line-height:1.5}#dsp-events .wiz-err.on{display:block}#dsp-events .done-ico{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent);margin:4px 0 14px}#dsp-events .done-ico svg{font-size:26px}#dsp-events .done-h{font-size:20px;font-weight:800;letter-spacing:-.02em;margin:0 0 8px}#dsp-events .done-p{color:var(--muted);font-size:14px;line-height:1.6;margin:0 0 10px}#dsp-events .done-p b{color:var(--text)}#dsp-events .dz-wrap{position:relative}#dsp-events .dz-clear{position:absolute;top:7px;right:7px;display:none;width:26px;height:26px;padding:0;border-radius:50%;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:inherit;font-size:15px;line-height:1;cursor:pointer;align-items:center;justify-content:center}#dsp-events .dz-clear.on{display:flex}#dsp-events .dz-clear:hover{border-color:var(--accent);color:var(--accent)}#dsp-events .toast{position:fixed;left:50%;bottom:30px;transform:translate(-50%,20px);z-index:80;background:var(--text);color:var(--bg);padding:13px 20px;border-radius:13px;font-size:14px;font-weight:600;box-shadow:var(--shadow);opacity:0;transition:.3s;display:flex;align-items:center;gap:10px;max-width:90vw;pointer-events:none}#dsp-events .toast.show{opacity:1;transform:translate(-50%,0)}#dsp-events .toast svg{font-size:18px;color:var(--accent)}\n\n  @media(max-width:640px){#dsp-events .hero-card{flex-direction:column;align-items:flex-start;gap:12px;padding:15px 16px}#dsp-events .hero-side{flex-direction:row;align-items:center;gap:14px}#dsp-events .hero-title{font-size:20px}}\n  @media(max-width:560px){#dsp-events .brand-sub{display:none}#dsp-events .city{padding:6px 9px}#dsp-events .addbtn{padding:0;width:38px;justify-content:center}#dsp-events .addlbl{display:none}#dsp-events .frow,#dsp-events .frow.cols3{grid-template-columns:1fr}}#dsp-events .sp-gate{--sp-tint:var(--accent);position:fixed;inset:0;z-index:2147483647;display:flex;align-items:center;justify-content:center;\n    padding:26px 22px 104px;background:#08070c;color:#fff;opacity:1;transition:opacity .45s ease}#dsp-events .sp-gate.out{opacity:0;pointer-events:none}#dsp-events .sp-media{position:absolute;inset:0;background:#08070c center\/cover no-repeat;animation:spzoom 12s ease-out both}#dsp-events .sp-veil{position:absolute;inset:0;\n    background:radial-gradient(100% 78% at 50% 0%, color-mix(in srgb,var(--sp-tint) 48%, transparent), transparent 62%),\n               linear-gradient(180deg, rgba(8,7,12,.42), rgba(8,7,12,.76) 58%, #08070c)}#dsp-events .sp-tag{position:absolute;top:18px;left:20px;font-size:10.5px;font-weight:800;letter-spacing:.17em;text-transform:uppercase;\n    color:rgba(255,255,255,.66);border:1px solid rgba(255,255,255,.26);border-radius:999px;padding:5px 11px}#dsp-events .sp-brand{position:absolute;top:18px;right:20px;font-size:10.5px;font-weight:800;letter-spacing:.17em;text-transform:uppercase;color:rgba(255,255,255,.4)}#dsp-events .sp-card{position:relative;display:flex;flex-direction:column;align-items:center;gap:13px;max-width:640px;text-align:center;\n    text-decoration:none;color:#fff;animation:spup .62s cubic-bezier(.2,.8,.2,1) both}#dsp-events a.sp-card{cursor:pointer}#dsp-events .sp-pre{font-size:11.5px;font-weight:800;letter-spacing:.19em;text-transform:uppercase;color:color-mix(in srgb,var(--sp-tint) 72%,#fff)}#dsp-events .sp-title{margin:0;font-size:clamp(42px,10.5vw,86px);line-height:.94;font-weight:800;letter-spacing:-.035em;\n    text-shadow:0 4px 40px rgba(0,0,0,.55)}#dsp-events .sp-claim{margin:0;font-size:clamp(15px,2.4vw,19px);line-height:1.45;color:rgba(255,255,255,.86);max-width:30ch}#dsp-events .sp-meta{display:flex;align-items:center;flex-wrap:wrap;justify-content:center;gap:7px 20px;font-size:13.5px;font-weight:700;\n    letter-spacing:.02em;color:rgba(255,255,255,.9)}#dsp-events .sp-mi{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}#dsp-events .sp-meta svg{font-size:16px;color:var(--sp-tint)}#dsp-events .sp-cta{display:inline-flex;align-items:center;gap:8px;margin-top:6px;padding:13px 26px;border-radius:999px;\n    background:var(--sp-tint);color:#fff;font-weight:800;font-size:14.5px;box-shadow:0 8px 30px color-mix(in srgb,var(--sp-tint) 45%,transparent);\n    transition:transform .15s ease,box-shadow .15s ease}#dsp-events a.sp-card:hover .sp-cta{transform:translateY(-1px);box-shadow:0 12px 38px color-mix(in srgb,var(--sp-tint) 55%,transparent)}#dsp-events a.sp-card:active .sp-cta{transform:translateY(0) scale(.985)}#dsp-events .sp-skip{position:absolute;right:20px;bottom:22px;display:flex;align-items:center;gap:11px;border:0;background:none;padding:6px;\n    font:inherit;color:rgba(255,255,255,.78);cursor:pointer;-webkit-tap-highlight-color:transparent}#dsp-events .sp-skip:hover{color:#fff}#dsp-events .sp-skip-lbl{font-size:12.5px;font-weight:700;letter-spacing:.04em}#dsp-events .sp-ring{position:relative;width:46px;height:46px;flex:none;display:grid;place-items:center}#dsp-events .sp-ring-svg{position:absolute;inset:0;width:46px;height:46px;transform:rotate(-90deg)}#dsp-events .sp-ring-bg{fill:rgba(255,255,255,.1);stroke:rgba(255,255,255,.22);stroke-width:2.5}#dsp-events .sp-ring-fg{fill:none;stroke:#fff;stroke-width:2.5;stroke-linecap:round;transition:stroke-dashoffset .12s linear}#dsp-events .sp-num{position:relative;font-size:14.5px;font-weight:800;font-variant-numeric:tabular-nums}\n  \n  \n  @media(prefers-reduced-motion:reduce){#dsp-events .sp-card,#dsp-events .sp-media{animation:none}#dsp-events .sp-gate{transition:none}}\n  @media(max-width:560px){#dsp-events .sp-gate{padding:22px 18px 100px}#dsp-events .sp-skip{right:14px;bottom:16px}#dsp-events .sp-claim{font-size:15px}}\n@keyframes wizin{from{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:none}}\n@keyframes wfade{from{opacity:0;transform:translateX(8px)}to{opacity:1;transform:none}}\n@keyframes spup{from{opacity:0;transform:translateY(18px) scale(.97)}to{opacity:1;transform:none}}\n@keyframes spzoom{from{transform:scale(1.09)}to{transform:scale(1)}}\n\/* --- Embed-Zusaetze ---------------------------------------------------------\n   Die Sektion laeuft ueber die VOLLE Seitenbreite (full-bleed), damit sie als\n   Abschnitt der Seite wirkt und nicht als eingeklebter Kasten (\"Frame im Frame\").\n   Der negative Rand bricht aus dem Theme-Container aus; width:auto statt 100vw\n   vermeidet einen horizontalen Scrollbalken.\n--------------------------------------------------------------------------- *\/\n\/* Das Theme kappt Ueberlaeufe: <main class=\"site-main\"> hat overflow:hidden bei\n   ~1140px. Ohne dieses Aufheben wird der full-bleed-Ausbruch wieder abgeschnitten\n   und die Sektion sieht aus wie ein eingeklebter Kasten. Dank :has() greift die\n   Regel NUR auf Seiten, die die Events-Sektion enthalten. *\/\nmain:has(#dsp-events){overflow:visible}\nbody:has(#dsp-events){overflow-x:clip}\n\n#dsp-events{\n  margin-left:calc(50% - 50vw);\n  margin-right:calc(50% - 50vw);\n  width:auto;\n  border-radius:0;\n  padding-bottom:8px;\n}\n#dsp-events .rainbow,\n#dsp-events .dsp-toolbar{border-radius:0}\n\/* Inhalt bleibt lesbar zentriert, statt an den Bildschirmrand zu kleben. *\/\n#dsp-events .wrap{max-width:1180px;margin-left:auto;margin-right:auto;padding:0 24px}\n#dsp-events .grid{padding-bottom:26px}\n\/* Overlays (Wizard, Detail-Sheet) muessen ueber dem Sticky-Header der Site liegen\n   (Hello\/Elementor-Header hat hohe z-index-Werte) und duerfen nicht darunter\n   \"eingedrueckt\" wirken. *\/\n#dsp-events .overlay{z-index:2147483647}\n@media(min-width:640px){#dsp-events .overlay{padding:28px 24px}}\n\/* Theme-Bleed stoppen: Hello\/Elementor faerbt h1-h4 und Links global (dunkel).\n   Innerhalb der Sektion gilt IMMER unsere Textfarbe; Elemente mit eigener\n   Farbregel (Akzente, muted-Toene) gewinnen weiterhin per Spezifitaet. *\/\n#dsp-events h1,#dsp-events h2,#dsp-events h3,#dsp-events h4,#dsp-events h5{color:var(--text);font-family:inherit}\n#dsp-events a{color:inherit}\n\n\/* --- FR-Fassung: Hinweis zum Einreichen (build-embed.py \/ i18n_fr.py) --- *\/\n#dsp-events .fr-note{margin:6px 0 28px;padding:14px 18px;border:1px solid var(--line-2);border-radius:14px;\n  font-size:14px;line-height:1.55;color:var(--muted);text-align:center}\n#dsp-events .fr-note a{color:var(--accent);font-weight:700;text-decoration:underline}\n<\/style>\n<div id=\"dsp-events\">\n<svg style=\"display:none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n  <symbol id=\"i-search\" viewBox=\"0 0 24 24\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/><\/symbol>\n  <symbol id=\"i-map-pin\" viewBox=\"0 0 24 24\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/symbol>\n  <symbol id=\"i-heart\" viewBox=\"0 0 24 24\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78L12 21.23l8.84-8.84a5.5 5.5 0 0 0 0-7.78z\"\/><\/symbol>\n  <symbol id=\"i-share\" viewBox=\"0 0 24 24\"><circle cx=\"18\" cy=\"5\" r=\"3\"\/><circle cx=\"6\" cy=\"12\" r=\"3\"\/><circle cx=\"18\" cy=\"19\" r=\"3\"\/><line x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\"\/><line x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\"\/><\/symbol>\n  <symbol id=\"i-calendar\" viewBox=\"0 0 24 24\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"\/><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"\/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"\/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"\/><\/symbol>\n  <symbol id=\"i-clock\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><polyline points=\"12 6 12 12 16 14\"\/><\/symbol>\n  <symbol id=\"i-plus\" viewBox=\"0 0 24 24\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/symbol>\n  <symbol id=\"i-x\" viewBox=\"0 0 24 24\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/><\/symbol>\n  <symbol id=\"i-chevron-down\" viewBox=\"0 0 24 24\"><polyline points=\"6 9 12 15 18 9\"\/><\/symbol>\n  <symbol id=\"i-star\" viewBox=\"0 0 24 24\"><polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26\"\/><\/symbol>\n  <symbol id=\"i-bolt\" viewBox=\"0 0 24 24\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"\/><\/symbol>\n  <symbol id=\"i-ticket\" viewBox=\"0 0 24 24\"><path d=\"M3 9a3 3 0 0 0 0 6v2a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2z\"\/><line x1=\"13\" y1=\"5\" x2=\"13\" y2=\"19\"\/><\/symbol>\n  <symbol id=\"i-users\" viewBox=\"0 0 24 24\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"\/><circle cx=\"9\" cy=\"7\" r=\"4\"\/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"\/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"\/><\/symbol>\n  <symbol id=\"i-check\" viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/symbol>\n  <symbol id=\"i-music\" viewBox=\"0 0 24 24\"><path d=\"M9 18V5l12-2v13\"\/><circle cx=\"6\" cy=\"18\" r=\"3\"\/><circle cx=\"18\" cy=\"16\" r=\"3\"\/><\/symbol>\n  <symbol id=\"i-flag\" viewBox=\"0 0 24 24\"><path d=\"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z\"\/><line x1=\"4\" y1=\"22\" x2=\"4\" y2=\"15\"\/><\/symbol>\n  <symbol id=\"i-film\" viewBox=\"0 0 24 24\"><rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"2\"\/><line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"22\"\/><line x1=\"17\" y1=\"2\" x2=\"17\" y2=\"22\"\/><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"\/><line x1=\"2\" y1=\"7\" x2=\"7\" y2=\"7\"\/><line x1=\"2\" y1=\"17\" x2=\"7\" y2=\"17\"\/><line x1=\"17\" y1=\"17\" x2=\"22\" y2=\"17\"\/><line x1=\"17\" y1=\"7\" x2=\"22\" y2=\"7\"\/><\/symbol>\n  <symbol id=\"i-sparkle\" viewBox=\"0 0 24 24\"><path d=\"M12 3l1.9 5.1L19 10l-5.1 1.9L12 17l-1.9-5.1L5 10l5.1-1.9z\"\/><\/symbol>\n  <symbol id=\"i-glass\" viewBox=\"0 0 24 24\"><path d=\"M5 3h14l-7 9z\"\/><line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\"\/><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"\/><\/symbol>\n  <symbol id=\"i-mountain\" viewBox=\"0 0 24 24\"><polyline points=\"3 20 9 9 13 15 16 10 21 20\"\/><\/symbol>\n  <symbol id=\"i-bookmark\" viewBox=\"0 0 24 24\"><path d=\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"\/><\/symbol>\n  <symbol id=\"i-sun\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"5\"\/><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"\/><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"\/><line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"\/><line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"\/><line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"\/><line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"\/><line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"\/><line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"\/><\/symbol>\n  <symbol id=\"i-moon\" viewBox=\"0 0 24 24\"><path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"\/><\/symbol>\n  <symbol id=\"i-arrow-left\" viewBox=\"0 0 24 24\"><line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\"\/><polyline points=\"12 19 5 12 12 5\"\/><\/symbol>\n  <symbol id=\"i-upload\" viewBox=\"0 0 24 24\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"\/><polyline points=\"17 8 12 3 7 8\"\/><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"\/><\/symbol>\n  <symbol id=\"i-instagram\" viewBox=\"0 0 24 24\"><rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\"\/><path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\"\/><line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\"\/><\/symbol>\n  <symbol id=\"i-facebook\" viewBox=\"0 0 24 24\"><path d=\"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z\"\/><\/symbol>\n  <symbol id=\"i-globe\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"\/><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"\/><\/symbol>\n<\/svg>\n<div class=\"rainbow\"><\/div>\n\n<!-- ===== Sponsor-Interstitial (Anzeige vor dem Kalender) =====================\n     Markup + Logik stehen bewusst GANZ OBEN und in einem eigenen Script, damit\n     die Anzeige schon steht, bevor der Kalender gerendert wird - und damit sie\n     bei \"schon gesehen\" gar nie aufblitzt (das Script laeuft parser-blockierend).\n========================================================================== -->\n<div class=\"sp-gate\" id=\"sponsorGate\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Annonce\">\n  <div class=\"sp-media\" id=\"spMedia\"><\/div>\n  <div class=\"sp-veil\"><\/div>\n  <span class=\"sp-tag\">Annonce<\/span>\n  <span class=\"sp-brand\">display events<\/span>\n  <a class=\"sp-card\" id=\"spCard\" target=\"_blank\" rel=\"noopener sponsored\">\n    <span class=\"sp-pre\" id=\"spPre\">Pr\u00e9sent\u00e9 par<\/span>\n    <h2 class=\"sp-title\" id=\"spTitle\"><\/h2>\n    <p class=\"sp-claim\" id=\"spClaim\"><\/p>\n    <div class=\"sp-meta\" id=\"spMeta\"><\/div>\n    <span class=\"sp-cta\" id=\"spCta\"><\/span>\n  <\/a>\n  <button class=\"sp-skip\" id=\"spSkip\" type=\"button\" aria-label=\"Passer l\u2019annonce\">\n    <span class=\"sp-skip-lbl\">Passer<\/span>\n    <span class=\"sp-ring\">\n      <svg class=\"sp-ring-svg\" viewBox=\"0 0 46 46\" aria-hidden=\"true\">\n        <circle class=\"sp-ring-bg\" cx=\"23\" cy=\"23\" r=\"20\"\/>\n        <circle class=\"sp-ring-fg\" id=\"spRing\" cx=\"23\" cy=\"23\" r=\"20\"\/>\n      <\/svg>\n      <span class=\"sp-num\" id=\"spNum\">10<\/span>\n    <\/span>\n  <\/button>\n<\/div>\n<script>\n\/* ---------- Sponsor-Interstitial ---------------------------------------------\n * Beim ersten Aufruf pro Sitzung wird eine ganzseitige, bezahlte Anzeige gezeigt;\n * unten rechts laeuft ein Countdown zurueck, danach gibt die Seite den Kalender\n * frei. Der Kalender laedt waehrenddessen bereits im Hintergrund (das Hauptskript\n * unten startet unabhaengig von dieser Anzeige).\n *\n * Konfiguration: window.DSPEV_SPONSOR VOR diesem Script setzen (spaeter aus\n * WordPress), sonst gilt SPONSOR_DEFAULT. Feld fuer Feld ueberschreibbar.\n *   until    letzter Tag, an dem die Anzeige laeuft (danach nie wieder)\n *   once     true = einmal pro Browser-Sitzung, false = bei jedem Seitenaufruf\n *   seconds  Countdown-Dauer\n * Test: ?sponsor=1 erzwingt die Anzeige, ?sponsor=0 unterdrueckt sie.\n * -------------------------------------------------------------------------- *\/\n(function(){\n  var SPONSOR_DEFAULT={\n    id:'explicit-2026-08-08',   \/\/ aendert sich die Kampagne, ID mitaendern (sonst gilt sie als gesehen)\n    pre:'Pr\u00e9sent\u00e9 par',\n    title:'Explicit Party',\n    claim:'Street Parade Edition \u2013 die lange Nacht im Kauz Club.',\n    when:'Samstag, 8. August \u00b7 23:00',\n    where:'Kauz Club, Z\u00fcrich',\n    cta:'Tickets & Infos',\n    \/\/ Ticket-Link des Veranstalters; leer = Anzeige ist nicht klickbar.\n    url:'https:\/\/eventfrog.ch\/en\/p\/parties\/lgbtiq\/explicit-street-parade-editon-7457501937002372373.html',\n    \/\/ Flyer\/Foto als Hintergrund (Event 21956 auf display-magazin.ch); leer = Farbverlauf.\n    img:'https:\/\/www.display-magazin.ch\/wp-content\/uploads\/2026\/07\/Captura-de-tela-2026-07-08-115724-1.png',\n    tint:'#ff2e88',\n    seconds:5,\n    once:false,                 \/\/ bewusst bei JEDEM Aufruf, nicht nur einmal pro Sitzung\n    until:'2026-08-08'          \/\/ ab 9.8. zeigt die Seite nichts mehr an\n  };\n  var CFG=Object.assign({},SPONSOR_DEFAULT,(typeof window!=='undefined'&&window.DSPEV_SPONSOR)||{});\n  var gate=document.getElementById('sponsorGate');\n  if(!gate)return;\n\n  function kill(){ if(gate&&gate.parentNode)gate.parentNode.removeChild(gate); gate=null; }\n\n  var force=\/[?&]sponsor=1\/.test(location.search), mute=\/[?&]sponsor=0\/.test(location.search);\n  var key='dspev_sponsor_'+CFG.id;\n  function seen(){try{return sessionStorage.getItem(key)==='1'}catch(e){return false}}\n  function mark(){try{sessionStorage.setItem(key,'1')}catch(e){}}\n  function expired(){\n    if(!CFG.until)return false;\n    var t=new Date(); t.setHours(0,0,0,0);\n    return new Date(CFG.until+'T23:59:59')<t;\n  }\n  if(mute||(!force&&(!CFG.title||expired()||(CFG.once&&seen())))){kill();return;}\n  mark();\n\n  \/* Inhalt setzen *\/\n  gate.style.setProperty('--sp-tint',CFG.tint||'#ff2e88');\n  var media=document.getElementById('spMedia');\n  if(CFG.img)media.style.backgroundImage='url(\"'+String(CFG.img).replace(\/\"\/g,'%22')+'\")';\n  else media.style.background='radial-gradient(78% 62% at 22% 12%, color-mix(in srgb,'+(CFG.tint||'#ff2e88')+' 62%, transparent), transparent 68%),'\n                             +'radial-gradient(70% 58% at 82% 88%, rgba(79,157,255,.5), transparent 66%), #0d0b13';\n  document.getElementById('spPre').textContent=CFG.pre||'';\n  document.getElementById('spTitle').textContent=CFG.title||'';\n  var claim=document.getElementById('spClaim');\n  if(CFG.claim)claim.textContent=CFG.claim; else claim.style.display='none';\n  var meta=document.getElementById('spMeta'),bits=[];\n  if(CFG.when)bits.push('<span class=\"sp-mi\"><svg class=\"icon\"><use href=\"#i-calendar\"\/><\/svg>'+CFG.when+'<\/span>');\n  if(CFG.where)bits.push('<span class=\"sp-mi\"><svg class=\"icon\"><use href=\"#i-map-pin\"\/><\/svg>'+CFG.where+'<\/span>');\n  if(bits.length)meta.innerHTML=bits.join(''); else meta.style.display='none';\n  var card=document.getElementById('spCard'),cta=document.getElementById('spCta');\n  if(CFG.url){card.setAttribute('href',CFG.url);cta.textContent=CFG.cta||'En savoir plus';}\n  else cta.style.display='none';\n\n  \/* Scrollen sperren, solange die Anzeige laeuft *\/\n  var prevOv=document.body.style.overflow; document.body.style.overflow='hidden';\n\n  \/* Countdown: laeuft nur, wenn der Tab sichtbar ist (sonst verfaellt die Anzeige\n     im Hintergrund-Tab, ohne je gesehen worden zu sein). NOTBREMSE: nach dem\n     Dreifachen der Laufzeit geht die Anzeige in jedem Fall weg - manche Umgebungen\n     (Vorschau-Panes, WebViews) melden dauerhaft \"hidden\", da darf niemand\n     feststecken. Im Test-Modus (?sponsor=1) zaehlt die Uhr immer. *\/\n  var total=Math.max(1,CFG.seconds||10)*1000, left=total, closed=false;\n  var hardStop=Date.now()+total*3;\n  var num=document.getElementById('spNum'), ring=document.getElementById('spRing');\n  var C=2*Math.PI*20; ring.style.strokeDasharray=C.toFixed(2); ring.style.strokeDashoffset='0';\n  num.textContent=Math.ceil(left\/1000);\n\n  function close(){\n    if(closed)return; closed=true;\n    clearInterval(timer);\n    document.removeEventListener('keydown',onKey);\n    document.body.style.overflow=prevOv;\n    gate.classList.add('out');\n    setTimeout(kill,480);\n  }\n  function onKey(e){ if(e.key==='Escape'||e.key==='Enter'||e.key===' ')close(); }\n\n  var last=Date.now();\n  var timer=setInterval(function(){\n    var now=Date.now(), dt=now-last; last=now;\n    if(now>=hardStop){close();return;}\n    if(document.hidden&&!force)return;\n    left=Math.max(0,left-dt);\n    num.textContent=Math.ceil(left\/1000);\n    ring.style.strokeDashoffset=(C*(1-left\/total)).toFixed(2);\n    if(left<=0)close();\n  },100);\n\n  document.getElementById('spSkip').addEventListener('click',close);\n  \/* Klick auf die Anzeige selbst oeffnet den Link im neuen Tab und gibt die Seite frei. *\/\n  card.addEventListener('click',function(){ if(CFG.url)setTimeout(close,60); });\n  document.addEventListener('keydown',onKey);\n})();\n<\/script>\n\n<div class=\"dsp-toolbar\">\n  <div class=\"wrap topbar\">\n    <div class=\"spacer\"><\/div>\n    <button class=\"iconbtn theme-toggle\" id=\"themeBtn\" aria-label=\"Changer de th\u00e8me\">\n      <svg class=\"icon i-sun\"><use href=\"#i-sun\"\/><\/svg><svg class=\"icon i-moon\"><use href=\"#i-moon\"\/><\/svg><\/button>\n    <div class=\"city\">\n      <svg class=\"icon\" style=\"font-size:16px;color:var(--accent)\"><use href=\"#i-map-pin\"\/><\/svg>\n      <select id=\"citySel\" aria-label=\"Choisir une ville ou une r\u00e9gion\">\n        <option value=\"alle\">Toute la Suisse<\/option>\n      <\/select>\n      <svg class=\"icon\" style=\"font-size:14px;color:var(--faint)\"><use href=\"#i-chevron-down\"\/><\/svg>\n    <\/div>\n  <\/div>\n  <div class=\"wrap searchrow\">\n    <div class=\"search\"><svg class=\"icon\"><use href=\"#i-search\"\/><\/svg>\n      <input id=\"q\" type=\"search\" placeholder=\"\u00c9v\u00e9nement, club ou organisation\u2026\" autocomplete=\"off\"><\/div>\n  <\/div>\n<\/div>\n\n<div class=\"wrap hero\">\n  <article class=\"hero-card\" id=\"heroCard\">\n    <div class=\"hero-main\">\n      <span class=\"hero-eyebrow\"><svg class=\"icon\"><use href=\"#i-star\"\/><\/svg> Coup de c\u0153ur de la semaine<\/span>\n      <h2 class=\"hero-title\" id=\"heroTitle\">\u2014<\/h2>\n      <p class=\"hero-sub\" id=\"heroSub\">\u2014<\/p>\n    <\/div>\n    <div class=\"hero-side\">\n      <button class=\"btn primary\" id=\"heroCta\">En savoir plus<\/button>\n      <span class=\"hero-meta\"><svg class=\"icon\"><use href=\"#i-users\"\/><\/svg> <span id=\"heroCount\"><\/span><\/span>\n    <\/div>\n  <\/article>\n<\/div>\n\n<div class=\"filters\">\n  <div class=\"wrap\">\n    <div class=\"chiprow\" id=\"dateChips\">\n      <button class=\"fchip accent\" data-date=\"heute\">Aujourd\u2019hui<\/button>\n      <button class=\"fchip accent\" data-date=\"wochenende\">Ce week-end<\/button>\n      <button class=\"fchip accent\" data-date=\"woche\">Cette semaine<\/button>\n      <button class=\"fchip accent on\" data-date=\"kommend\">\u00c0 venir<\/button>\n    <\/div>\n    <div class=\"chiprow\" id=\"catChips\">\n      <button class=\"fchip on\" data-cat=\"alle\">Tout<\/button>\n      <button class=\"fchip\" data-cat=\"party\"><svg class=\"icon ico\" style=\"color:var(--party)\"><use href=\"#i-music\"\/><\/svg>Soir\u00e9es<\/button>\n      <button class=\"fchip\" data-cat=\"pride\"><svg class=\"icon ico\" style=\"color:var(--pride)\"><use href=\"#i-flag\"\/><\/svg>Pride<\/button>\n      <button class=\"fchip\" data-cat=\"kultur\"><svg class=\"icon ico\" style=\"color:var(--kultur)\"><use href=\"#i-film\"\/><\/svg>Culture<\/button>\n      <button class=\"fchip\" data-cat=\"community\"><svg class=\"icon ico\" style=\"color:var(--community)\"><use href=\"#i-users\"\/><\/svg>Communaut\u00e9<\/button>\n      <button class=\"fchip\" data-cat=\"bar\"><svg class=\"icon ico\" style=\"color:var(--bar)\"><use href=\"#i-glass\"\/><\/svg>Bar<\/button>\n      <button class=\"fchip\" data-cat=\"sport\"><svg class=\"icon ico\" style=\"color:var(--sport)\"><use href=\"#i-mountain\"\/><\/svg>Sport<\/button>\n      <button class=\"fchip\" data-cat=\"comedy\"><svg class=\"icon ico\" style=\"color:var(--comedy)\"><use href=\"#i-bolt\"\/><\/svg>Humour<\/button>\n    <\/div>\n  <\/div>\n<\/div>\n\n<main class=\"wrap\">\n  <div class=\"results\">\n    <h2 id=\"resultsTitle\">Tous les \u00e9v\u00e9nements<\/h2>\n    <div class=\"count\"><b id=\"cnt\">0<\/b> <span id=\"cntlbl\">\u00e9v\u00e9nements<\/span><\/div>\n  <\/div>\n  <div class=\"grid\" id=\"grid\"><\/div>\n  <p class=\"fr-note\">Tu organises un \u00e9v\u00e9nement\u202f? Le formulaire en fran\u00e7ais arrive bient\u00f4t. D\u2019ici l\u00e0, propose-le via la <a href=\"\/events\/#event-eintragen\" hreflang=\"de\">version allemande<\/a> \u2013 la r\u00e9daction s\u2019occupe du reste.<\/p>\n<\/main>\n\n<div class=\"overlay\" id=\"detailOverlay\"><div class=\"sheet\" id=\"detailSheet\"><\/div><\/div>\n\n<div class=\"toast\" id=\"toast\"><svg class=\"icon\"><use href=\"#i-check\"\/><\/svg><span id=\"toastMsg\"><\/span><\/div>\n<\/div>\n<script>\nconst DSP=document.getElementById('dsp-events');\nconst byIdEl=id=>DSP.querySelector('#'+id)||document.getElementById(id);\nconst CATS={party:{label:'Soir\u00e9e'},pride:{label:'Pride'},kultur:{label:'Culture'},community:{label:'Communaut\u00e9'},bar:{label:'Bar'},sport:{label:'Sport'},comedy:{label:'Humour'},drag:{label:'Drag'}};\nconst FEATURED=5;\nconst CITY_FR={'Z\u00fcrich':'Zurich','Bern':'Berne','Basel':'B\u00e2le','Luzern':'Lucerne','Genf':'Gen\u00e8ve','St. Gallen':'Saint-Gall','St.Gallen':'Saint-Gall','Freiburg':'Fribourg','Neuenburg':'Neuch\u00e2tel','Chur':'Coire','Winterthur':'Winterthour','Solothurn':'Soleure','Biel':'Bienne','Biel\/Bienne':'Bienne','Schaffhausen':'Schaffhouse','Graub\u00fcnden':'Grisons','Wallis':'Valais','Tessin':'Tessin','D\u00fcbendorf':'D\u00fcbendorf'};\nfunction cityFr(c){return CITY_FR[c]||c}\nfunction premier(s){return String(s).replace(\/(^|\\s)1(\\s)\/,'$11er$2')}\nconst today=new Date();today.setHours(0,0,0,0);\nfunction evDate(e){return new Date(e.date+'T00:00:00')}\nfunction dateLabel(e){if(e.off===0)return 'Aujourd\u2019hui';if(e.off===1)return 'Demain';return premier(evDate(e).toLocaleDateString('fr-CH',{weekday:'short',day:'numeric',month:'short'}))}\nfunction dateParts(e){const d=evDate(e);return {wd:d.toLocaleDateString('fr-CH',{weekday:'short'}).replace('.',''),day:d.getDate(),mon:d.toLocaleDateString('fr-CH',{month:'short'}).replace('.','')};}\nfunction dayHeader(e){const d=premier(evDate(e).toLocaleDateString('fr-CH',{weekday:'long',day:'numeric',month:'long'}));return e.off===0?'Aujourd\u2019hui \u00b7 '+d:e.off===1?'Demain \u00b7 '+d:d.charAt(0).toUpperCase()+d.slice(1);}\n\nlet EVENTS=[\n {id:1,title:'Promigschn\u00e4tzeltes \u2013 Pub Quiz @ Kweer',cat:'bar',city:'Z\u00fcrich',venue:'Kweer',date:'2026-06-25',start:'19:30',price:0,contest:true,interested:120,desc:'Der queere Pub-Quiz \u2013 Teams bilden, K\u00f6pfe rauchen lassen, Drinks gewinnen.'},\n {id:2,title:'Xperience: Swiss Gear Social',cat:'bar',city:'Bern',venue:'Comeback Bar',date:'2026-06-26',start:'19:30',price:0,interested:85},\n {id:3,title:'Pride Boat auf dem Bodensee',cat:'party',city:'Romanshorn',venue:'Bodensee-Schifffahrt',date:'2026-06-26',start:'19:30',price:35,interested:210},\n {id:4,title:'Kunt',cat:'party',city:'Z\u00fcrich',venue:'Tanzhaus',date:'2026-06-26',start:'21:00',end:'04:00',price:20,contest:true,interested:265},\n {id:5,title:'Tusa \u2013 Latin Night',cat:'party',city:'Z\u00fcrich',venue:'Heaven',date:'2026-06-26',start:'22:45',end:'06:00',price:18,sponsored:true,contest:true,interested:480,desc:'Latin Night im Heaven \u2013 Reggaet\u00f3n, Salsa und Perreo bis in die Morgenstunden.'},\n {id:6,title:'Lausanne Pride After Party \u2013 MAD',cat:'party',city:'Lausanne',venue:'MAD',date:'2026-06-26',start:'23:00',end:'05:00',price:25,interested:340},\n {id:7,title:'Konliki #35',cat:'party',city:'Z\u00fcrich',venue:'Helsinki Klub',date:'2026-06-27',start:'20:00',end:'04:00',price:20,interested:190},\n {id:8,title:'Basel tickt bunt \u2013 Party',cat:'party',city:'Basel',venue:'Gannet, Holzpark Klybeck',date:'2026-06-27',start:'22:30',end:'04:00',price:15,interested:300},\n {id:9,title:'Pink Pony Club',cat:'party',city:'Z\u00fcrich',venue:'Heaven',date:'2026-06-27',start:'22:45',end:'06:00',price:18,sponsored:true,contest:true,interested:620,desc:'Die Pop-Party im Heaven \u2013 von Chappell Roan bis Charli xcx, alle Hits, eine Nacht.'},\n {id:10,title:'#HRDR39',cat:'party',city:'Basel',venue:'Das Viertel',date:'2026-06-27',start:'23:00',end:'05:00',price:15,interested:140},\n {id:11,title:'Lausanne Pride After Party \u2013 ABC',cat:'party',city:'Lausanne',venue:'Bar Club ABC',date:'2026-06-27',start:'23:00',end:'05:00',price:20,interested:160},\n {id:12,title:'Heldenbar',cat:'bar',city:'Z\u00fcrich',venue:'Provitreff',date:'2026-07-01',start:'20:00',price:0,interested:70},\n {id:13,title:'Karaoke @ Kweer',cat:'bar',city:'Z\u00fcrich',venue:'Kweer',date:'2026-07-02',start:'19:00',price:0,interested:95},\n {id:14,title:'Slayground',cat:'party',city:'Z\u00fcrich',venue:'Heaven',date:'2026-07-10',start:'22:45',end:'06:00',price:20,sponsored:true,contest:true,interested:410,desc:'Heaven wird zum Spielplatz \u2013 House, Pop und Drag-Performances die ganze Nacht.'},\n {id:15,title:'Kiki: Sunset Dance',cat:'party',city:'Z\u00fcrich',venue:'Samigo',date:'2026-07-11',start:'17:00',end:'23:00',price:25,interested:330},\n {id:16,title:'Night Pride',cat:'party',city:'Z\u00fcrich',venue:'Heaven',date:'2026-07-11',start:'22:45',end:'06:00',price:22,sponsored:true,contest:true,interested:560,desc:'Die grosse Pride-Nacht im Heaven mit internationalen DJs und Show-Acts.'},\n {id:17,title:'Kweeraoke',cat:'bar',city:'Z\u00fcrich',venue:'Kweer',date:'2026-07-16',start:'19:00',price:0,interested:80},\n {id:18,title:'The Queer Cruise',cat:'party',city:'Z\u00fcrich',venue:'Schiffsteg B\u00fcrkliplatz',date:'2026-07-24',start:'19:30',price:45,contest:true,interested:520,desc:'Die Bootsparty auf dem Z\u00fcrichsee \u2013 Sonnenuntergang, Drinks, Beats.'},\n {id:19,title:'Tea \u2013 Pool Party',cat:'party',city:'Z\u00fcrich',venue:'Barfussbar',date:'2026-07-24',start:'20:00',price:28,interested:380},\n {id:20,title:'Hueregeile Sunntig',cat:'party',city:'Z\u00fcrich',venue:'Roxy Musikbar',date:'2026-07-26',start:'16:00',end:'23:00',price:15,interested:240},\n {id:21,title:'Vier werden Eltern',cat:'kultur',city:'Z\u00fcrich',venue:'Weisser Wind',date:'2026-06-26',start:'20:00',price:35,sponsored:true,interested:175,desc:'Die Comedy \u00fcber queere Familienplanung \u2013 herzlich, frech, ausverkauft-verd\u00e4chtig.'},\n {id:22,title:'Queer Lesen \u2013 Bookclub',cat:'community',city:'Z\u00fcrich',venue:'Zentralbibliothek',date:'2026-06-30',start:'18:30',price:0,interested:55},\n {id:23,title:'Bi+ Fit \u2013 Workout',cat:'sport',city:'Z\u00fcrich',venue:'Platzspitz',date:'2026-07-01',start:'18:00',price:0,interested:48},\n {id:24,title:'Dolder Wellenkino: Brokeback Mountain',cat:'kultur',city:'Z\u00fcrich',venue:'Dolder Bad',date:'2026-08-04',start:'20:30',price:20,sponsored:true,interested:230,desc:'Open-Air-Kino am Dolder. Der Klassiker unter dem Sternenhimmel.'},\n {id:25,title:'Pride Kulinarik-Wanderwoche',cat:'sport',city:'Silvaplana',venue:'Diverse Locations',date:'2026-09-13',start:'09:00',price:45,sponsored:true,interested:90,desc:'Eine Woche Wandern, Geniessen und Community im Engadin.'},\n {id:26,title:'Schwugo \u2013 Comedy Show',cat:'kultur',city:'Z\u00fcrich',venue:'Millers',date:'2026-10-01',start:'20:00',price:30,interested:150},\n {id:27,title:'Anastacia',cat:'kultur',city:'D\u00fcbendorf',venue:'THE HALL',date:'2026-10-06',start:'20:00',price:89,sponsored:true,interested:640,desc:'Die Pop-Ikone live in der Schweiz \u2013 \u201eI\u2019m Outta Love\" und alle Hits.'},\n {id:28,title:'Brandi Carlile',cat:'kultur',city:'D\u00fcbendorf',venue:'THE HALL',date:'2026-10-24',start:'20:00',price:79,sponsored:true,interested:520,desc:'Die mehrfache Grammy-Gewinnerin live \u2013 Folk, Rock und grosse Gef\u00fchle.'},\n {id:29,title:'Placebo',cat:'kultur',city:'Z\u00fcrich',venue:'Hallenstadion',date:'2026-11-04',start:'20:00',price:95,sponsored:true,interested:880,desc:'Die Alternative-Rock-Legenden live im Hallenstadion.'},\n {id:30,title:'Lausanne Pride',cat:'pride',city:'Lausanne',venue:'Parc de Milan',date:'2026-06-26',start:'17:00',price:0,tip:true,interested:760,desc:'Die gr\u00f6sste Pride der Romandie \u2013 Demo, Village und Konzerte am Parc de Milan.'},\n {id:31,title:'CSD Baselland',cat:'pride',city:'Liestal',venue:'Bahnhof Liestal',date:'2026-06-27',start:'13:00',price:0,interested:280},\n {id:32,title:'Basel tickt bunt \u2013 Queer Festival',cat:'pride',city:'Basel',venue:'Holzpark Klybeck',date:'2026-06-27',start:'18:00',price:0,interested:340},\n {id:33,title:'CSD Z\u00fcrich',cat:'pride',city:'Z\u00fcrich',venue:'Innenstadt',date:'2026-07-04',start:'14:00',price:0,tip:true,interested:1240,desc:'Strassenfest und Demo in der Z\u00fcrcher Innenstadt \u2013 sichtbar, laut, bunt.'},\n {id:34,title:'CSD Winti',cat:'pride',city:'Winterthur',venue:'Altstadt',date:'2026-07-11',start:'14:00',price:0,interested:420},\n {id:35,title:'Bern Pride',cat:'pride',city:'Bern',venue:'Bundesplatz',date:'2026-07-25',start:'14:00',price:0,interested:610},\n {id:36,title:'Street Parade',cat:'party',city:'Z\u00fcrich',venue:'Seebecken',date:'2026-08-08',start:'13:00',price:0,sponsored:true,tip:true,interested:2400,desc:'Die gr\u00f6sste Techno-Parade der Welt am Z\u00fcrcher Seebecken \u2013 ein Muss.'},\n {id:37,title:'Khur Pride',cat:'pride',city:'Chur',venue:'Altstadt',date:'2026-08-29',start:'14:00',price:0,interested:180},\n {id:38,title:'Pride Aargau',cat:'pride',city:'Aarau',venue:'Bahnhofplatz',date:'2026-09-05',start:'14:00',price:0,interested:260},\n {id:39,title:'.lila Queer Festival',cat:'kultur',city:'Z\u00fcrich',venue:'Diverse Locations',date:'2026-09-10',start:'18:00',price:20,tip:true,interested:430,desc:'Drei Tage queere Kunst, Musik und Performance an verschiedenen Orten.'},\n {id:40,title:'Luststreifen Film Festival',cat:'kultur',city:'Basel',venue:'kult.kino',date:'2026-10-08',start:'19:00',price:18,interested:200},\n {id:41,title:'Queersicht Filmfestival',cat:'kultur',city:'Bern',venue:'Kino',date:'2026-11-05',start:'19:00',price:18,interested:170},\n {id:42,title:'Lausanne Pride After Party \u2013 Le Bourg',cat:'party',city:'Lausanne',venue:'Le Bourg',date:'2026-06-26',start:'23:00',end:'05:00',price:20,interested:130},\n {id:43,title:'Lausanne Pride After Party \u2013 Le Romandie',cat:'party',city:'Lausanne',venue:'Le Romandie',date:'2026-06-26',start:'23:00',end:'05:00',price:20,interested:120},\n {id:44,title:'Lausanne Pride After Party \u2013 MAD',cat:'party',city:'Lausanne',venue:'MAD',date:'2026-06-27',start:'23:00',end:'06:00',price:25,interested:300},\n {id:45,title:'Lausanne Pride After Party \u2013 Le Bourg',cat:'party',city:'Lausanne',venue:'Le Bourg',date:'2026-06-27',start:'23:00',end:'05:00',price:20,interested:140},\n {id:46,title:'Lausanne Pride After Party \u2013 Le Romandie',cat:'party',city:'Lausanne',venue:'Le Romandie',date:'2026-06-27',start:'23:00',end:'05:00',price:20,interested:110},\n {id:47,title:'Heldenbar',cat:'bar',city:'Z\u00fcrich',venue:'Provitreff',date:'2026-07-08',start:'20:00',end:'03:00',price:0,interested:60},\n {id:48,title:'Karaoke @ Kweer',cat:'bar',city:'Z\u00fcrich',venue:'Kweer',date:'2026-07-09',start:'19:00',end:'23:00',price:0,interested:75},\n {id:49,title:'Heldenbar',cat:'bar',city:'Z\u00fcrich',venue:'Provitreff',date:'2026-07-15',start:'20:00',end:'03:00',price:0,interested:62},\n {id:50,title:'Karaoke @ Kweer',cat:'bar',city:'Z\u00fcrich',venue:'Kweer',date:'2026-07-23',start:'19:00',end:'23:00',price:0,interested:70},\n {id:51,title:'Karaoke @ Kweer',cat:'bar',city:'Z\u00fcrich',venue:'Kweer',date:'2026-07-30',start:'19:00',end:'23:00',price:0,interested:72},\n {id:52,title:'Helluva Survivor',cat:'party',city:'Z\u00fcrich',venue:'Heaven',date:'2026-07-04',start:'19:00',end:'23:30',price:25,sponsored:true,interested:340,desc:'Drag-Wettkampf trifft Clubnacht \u2013 wer \u00fcberlebt die Runway?'},\n {id:53,title:'CSD Z\u00fcrich Afterparty',cat:'party',city:'Z\u00fcrich',venue:'Heaven',date:'2026-07-04',start:'22:00',end:'05:00',price:25,interested:520},\n {id:54,title:'Confessions On A Dancefloor \u2013 Madonna Party',cat:'party',city:'Z\u00fcrich',venue:'Plaza Klub',date:'2026-07-04',start:'23:30',end:'05:00',price:28,sponsored:true,interested:610,desc:'Eine ganze Nacht nur Madonna \u2013 von Holiday bis Hung Up.'},\n {id:55,title:'Queer Sphere \u2013 CSD Winti Afterparty',cat:'party',city:'Winterthur',venue:'Salzhaus',date:'2026-07-11',start:'19:00',end:'03:00',price:20,interested:280},\n {id:56,title:'Konliki #36',cat:'party',city:'Z\u00fcrich',venue:'Helsinki Klub',date:'2026-07-18',start:'20:00',end:'00:00',price:20,interested:210},\n {id:57,title:'2000er Party',cat:'party',city:'Z\u00fcrich',venue:'Heaven',date:'2026-07-18',start:'22:45',end:'05:00',price:22,sponsored:true,interested:480,desc:'Britney, Christina, Black Eyed Peas \u2013 die 2000er leben wieder.'},\n {id:58,title:'Schwugo \u2013 Comedy Show',cat:'kultur',city:'Rheinfelden',venue:'Aurea Rheinfelden',date:'2026-11-20',start:'19:00',price:28,interested:120},\n {id:59,title:'Schwugo \u2013 Comedy Show',cat:'kultur',city:'St. Gallen',venue:'Grabenhalle',date:'2026-12-16',start:'19:00',price:28,interested:130}\n];\nEVENTS.forEach(e=>{e.off=Math.round((evDate(e)-today)\/86400000);});\n\nconst state={date:'kommend',cat:'alle',city:'alle',q:''};\n\/* Ein Event kann mehreren Rubriken angeh\u00f6ren (z. B. Pride + Party + Community). *\/\nfunction evCats(e){return (e.cats&&e.cats.length)?e.cats:[e.cat];}\nif(localStorage.getItem('display_theme')==='light')DSP.setAttribute('data-theme','light');\n\nfunction hasImg(e){return e.cat!=='pride'&&(e.sponsored||e.highlight||e.tip)}\nfunction imgUrl(e){return e.img?e.img:'https:\/\/picsum.photos\/seed\/disp'+e.id+'\/600\/360'}\nfunction icon(n){return '<svg class=\"icon\"><use href=\"#i-'+n+'\"\/><\/svg>'}\nfunction priceLbl(p){return (p===null||p===undefined)?'':(p===0?'Gratuit':'d\u00e8s CHF '+p)}\nfunction locLbl(e){return [e.venue,cityFr(e.city)].filter(Boolean).join(', ')}\n\nfunction matches(e){\n  if(state.cat!=='alle'&&!evCats(e).includes(state.cat))return false;\n  if(state.city!=='alle'){\n    if(state.city.indexOf('r:')===0){if(cityRegion(e.city)!==state.city.slice(2))return false;}\n    else if(e.city!==state.city)return false;\n  }\n  if(state.q){const s=(e.title+' '+e.venue+' '+e.city).toLowerCase();if(!s.includes(state.q))return false;}\n  if(state.date==='heute'&&e.off!==0)return false;\n  if(state.date==='kommend'&&e.off<0)return false;\n  if(state.date==='woche'&&(e.off<0||e.off>7))return false;\n  if(state.date==='wochenende'){const w=evDate(e).getDay();if(!((w===5||w===6||w===0)&&e.off<=7&&e.off>=0))return false;}\n  return true;\n}\nfunction badgeHTML(e){let h='';\n  if(e.tip)h+='<span class=\"badge tip\">'+icon('star')+'Coup de c\u0153ur de la r\u00e9daction<\/span>';\n  if(e.highlight)h+='<span class=\"badge sponsored\">'+icon('sparkle')+'\u00c0 la une<\/span>';\n  if(e.sponsored)h+='<span class=\"badge sponsored\">'+icon('bolt')+'Sponsoris\u00e9<\/span>';\n  if(e.pending)h='<span class=\"badge\" style=\"background:#3a3846;color:#cfcdd9\">En validation<\/span>'+h;\n  return h;}\nfunction footHTML(e){\n  const l=priceLbl(e.price);\n  return l?'<div class=\"cfoot\"><span class=\"price\">'+l+'<\/span><\/div>':'';\n}\nfunction metaHTML(e){return '<p class=\"meta\">'+icon('clock')+dateLabel(e)+' \u00b7 '+(e.allday?'toute la journ\u00e9e':e.start.replace(':','h'))+'<\/p>'\n  +'<p class=\"meta\">'+icon('map-pin')+locLbl(e)+'<\/p>';}\n\nfunction cardHTML(e){\n  const c=CATS[e.cat];\n  const chipsImg='<div class=\"chips\"><span class=\"chip catlabel\">'+c.label+'<\/span>'+(e.price===0?'<span class=\"chip free\">Gratuit<\/span>':'')+'<\/div>';\n  const chipsCompact='<div class=\"chips\"><span class=\"chip catlabel\">'+c.label+'<\/span>'+badgeHTML(e)+(e.price===0?'<span class=\"chip free\">Gratuit<\/span>':'')+'<\/div>';\n  if(hasImg(e)){\n    return '<article class=\"card cat-'+e.cat+(e.sponsored||e.highlight?' sponsored':'')+'\" data-id=\"'+e.id+'\">'\n      +'<div class=\"banner\"><img decoding=\"async\" class=\"bimg\" src=\"'+imgUrl(e)+'\" alt=\"\" loading=\"lazy\" onerror=\"this.remove()\"><div class=\"bscrim\"><\/div><div class=\"badges\">'+badgeHTML(e)+'<\/div><\/div>'\n      +'<div class=\"cbody\">'+chipsImg+'<h3 class=\"ctitle\">'+e.title+'<\/h3>'+metaHTML(e)+footHTML(e)+'<\/div><\/article>';\n  }\n  const p=dateParts(e);\n  const left=e.cat==='pride'\n    ?'<div class=\"datetile\"><span class=\"dt-wd\">'+p.wd+'<\/span><span class=\"dt-day\">'+p.day+'<\/span><span class=\"dt-mon\">'+p.mon+'<\/span><\/div>'\n    :'<div class=\"thumb\"><img decoding=\"async\" class=\"bimg\" src=\"'+imgUrl(e)+'\" alt=\"\" loading=\"lazy\" onerror=\"this.remove()\"><div class=\"bscrim\"><\/div><div class=\"td\"><span class=\"w\">'+p.wd+'<\/span><span class=\"d\">'+p.day+'<\/span><\/div><\/div>';\n  return '<article class=\"card compact cat-'+e.cat+(e.sponsored||e.highlight?' sponsored':'')+'\" data-id=\"'+e.id+'\">'\n    +left\n    +'<div class=\"cbody\">'+chipsCompact+'<h3 class=\"ctitle\">'+e.title+'<\/h3>'\n    +'<p class=\"meta\">'+icon('clock')+(e.allday?'toute la journ\u00e9e':e.start.replace(':','h'))+' \u00b7 '+locLbl(e)+'<\/p>'\n    +(e.cat!=='pride'?footHTML(e):'')+'<\/div><\/article>';\n}\n\nfunction render(){\n  \/\/ Zusage des CHF-19-Highlights: \u00abZuoberst gelistet\u00bb \u2014 innerhalb seines Tages.\n  \/\/ Nicht ueber die ganze Liste, sonst stuende ein Termin in drei Wochen vor heute.\n  const list=EVENTS.filter(matches).sort((a,b)=>a.off-b.off||(b.highlight?1:0)-(a.highlight?1:0)||a.start.localeCompare(b.start));\n  const g=byIdEl('grid');\n  if(!list.length){g.innerHTML='<div class=\"empty\">\u00c9largis un peu les filtres\u202f: d\u2019autres soir\u00e9es t\u2019attendent.<\/div>';}\n  else{let html='',last='';list.forEach(e=>{if(e.date!==last){html+='<h3 class=\"daygroup\">'+dayHeader(e)+'<\/h3>';last=e.date;}html+=cardHTML(e);});g.innerHTML=html;}\n  byIdEl('cnt').textContent=list.length;\n  byIdEl('cntlbl').textContent=list.length===1?'\u00e9v\u00e9nement':'\u00e9v\u00e9nements';\n}\n\nfunction openDetail(e){\n  const c=CATS[e.cat];\n  const head=e.cat!=='pride'\n    ?'<div class=\"d-banner\"><img decoding=\"async\" class=\"bimg\" src=\"'+imgUrl(e)+'\" alt=\"\" onerror=\"this.remove()\"><div class=\"bscrim\"><\/div><div class=\"badges\">'+badgeHTML(e)+'<\/div><\/div>'\n    :'<div class=\"d-banner slim\"><\/div>';\n  byIdEl('detailSheet').innerHTML='<div class=\"closebar\"><button class=\"closebtn\" data-close>'+icon('x')+'<\/button><\/div>'\n    +'<div class=\"cat-'+e.cat+'\">'+head\n    +'<div class=\"d-body\"><div class=\"chips\"><span class=\"chip catlabel\">'+c.label+'<\/span>'+(e.price===0?'<span class=\"chip free\">Gratuit<\/span>':'')\n      +(!hasImg(e)?badgeHTML(e):'')+'<\/div>'\n    +'<h2 class=\"d-title\">'+e.title+'<\/h2>'\n    +'<div class=\"d-row\">'+icon('clock')+'<span>'+dateLabel(e)+' \u00b7 '+(e.allday?'toute la journ\u00e9e':e.start.replace(':','h'))+'<\/span><\/div>'\n    +'<div class=\"d-row\">'+icon('map-pin')+'<span>'+locLbl(e)+'<\/span><\/div>'\n    +(priceLbl(e.price)?'<div class=\"d-row\">'+icon('ticket')+'<span>'+priceLbl(e.price)+'<\/span><\/div>':'')\n    +(e.interested?'<div class=\"d-row\">'+icon('users')+'<span>'+e.interested+' int\u00e9ress\u00e9\u00b7es<\/span><\/div>':'')\n    +(e.desc?'<p class=\"d-desc\">'+e.desc+'<\/p>':'')\n    +linkHTML(e)+'<\/div><\/div>';\n  byIdEl('detailOverlay').classList.add('open');\n}\n\nfunction ics(e){const d=evDate(e);const p=e.start.split(':');const pad=n=>String(n).padStart(2,'0');\n  const dt=''+d.getFullYear()+pad(d.getMonth()+1)+pad(d.getDate())+'T'+pad(p[0])+pad(p[1])+'00';\n  const body=['BEGIN:VCALENDAR','VERSION:2.0','PRODID:-\/\/DISPLAY\/\/Events\/\/FR','BEGIN:VEVENT','UID:display-'+e.id+'@display-magazin.ch',\n    'DTSTART:'+dt,'SUMMARY:'+e.title,'LOCATION:'+e.venue+'\\\\, '+e.city,'DESCRIPTION:'+(e.desc||'').replace(\/,\/g,'\\\\,'),'END:VEVENT','END:VCALENDAR'].join(String.fromCharCode(13,10));\n  const a=document.createElement('a');a.href='data:text\/calendar;charset=utf-8,'+encodeURIComponent(body);\n  a.download=e.title.replace(\/[^a-z0-9]+\/gi,'-').toLowerCase()+'.ics';a.click();toast('Ajout\u00e9 \u00e0 ton agenda');}\nfunction share(e){const url='https:\/\/www.display-magazin.ch\/fr\/evenements\/';\n  if(navigator.share){navigator.share({title:e.title,text:e.title+' \u00b7 '+locLbl(e),url}).catch(()=>{});}\n  else{navigator.clipboard&&navigator.clipboard.writeText(url);toast('Lien copi\u00e9');}}\nlet toastT;function toast(msg){const t=byIdEl('toast');byIdEl('toastMsg').textContent=msg;t.classList.add('show');clearTimeout(toastT);toastT=setTimeout(()=>t.classList.remove('show'),2400);}\nfunction byId(id){return EVENTS.find(x=>x.id==id)}\n\/* Links des Events als Button-Reihe: Tickets\/Webseite als Haupt-Aktion,\n * Social-Kan\u00e4le daneben. Nur echte http(s)-Adressen werden ausgegeben. *\/\nfunction safeUrl(u){u=String(u||'');return \/^https?:\\\/\\\/\/i.test(u)?escHtml(u):'';}\nfunction linkHTML(e){\n  const tickets=safeUrl(e.tickets),site=safeUrl(e.website),ig=safeUrl(e.instagram),fb=safeUrl(e.facebook);\n  const out=[];\n  if(tickets)out.push('<a class=\"btn primary\" href=\"'+tickets+'\" target=\"_blank\" rel=\"noopener\">'+icon('ticket')+(e.price===0?'S\u2019inscrire':'Acheter des billets')+'<\/a>');\n  else if(site)out.push('<a class=\"btn primary\" href=\"'+site+'\" target=\"_blank\" rel=\"noopener\">'+icon('ticket')+(e.price===0?'Infos & inscription':'Billets & infos')+'<\/a>');\n  if(tickets&&site)out.push('<a class=\"btn\" href=\"'+site+'\" target=\"_blank\" rel=\"noopener\">'+icon('globe')+'Site web<\/a>');\n  if(ig)out.push('<a class=\"btn\" href=\"'+ig+'\" target=\"_blank\" rel=\"noopener\">'+icon('instagram')+'Instagram<\/a>');\n  if(fb)out.push('<a class=\"btn\" href=\"'+fb+'\" target=\"_blank\" rel=\"noopener\">'+icon('facebook')+'Facebook<\/a>');\n  return out.length?'<div class=\"d-actions\">'+out.join('')+'<\/div>':'';\n}\n\nlet HERO=null;\nfunction loadHero(){\n  const e=byId(FEATURED)||EVENTS.filter(x=>x.off>=0).sort((a,b)=>a.off-b.off).find(x=>x.contest||x.sponsored||x.highlight)||EVENTS.filter(x=>x.off>=0).sort((a,b)=>a.off-b.off).find(x=>x.img)||EVENTS[0];\n  if(!e)return;HERO=e;\n  DSP.querySelector('.hero-eyebrow').innerHTML='<svg class=\"icon\"><use href=\"#i-star\"\/><\/svg> '+'Coup de c\u0153ur de la semaine';\n  byIdEl('heroCta').textContent='En savoir plus';\n  byIdEl('heroTitle').textContent=e.title;\n  byIdEl('heroSub').innerHTML=dateLabel(e)+', '+e.venue+' '+cityFr(e.city);\n  const hc=byIdEl('heroCount');\n  if(e.interested){hc.parentElement.style.display='';hc.textContent=e.interested+' participant\u00b7es';}\n  else hc.parentElement.style.display='none';}\n\nbyIdEl('grid').addEventListener('click',ev=>{const card=ev.target.closest('.card');if(card)openDetail(byId(card.dataset.id));});\nbyIdEl('heroCard').addEventListener('click',()=>{if(HERO)openDetail(HERO);});\n\nbyIdEl('dateChips').addEventListener('click',ev=>{const b=ev.target.closest('[data-date]');if(!b)return;\n  ev.currentTarget.querySelectorAll('[data-date]').forEach(c=>c.classList.remove('on'));b.classList.add('on');state.date=b.dataset.date;render();});\nbyIdEl('catChips').addEventListener('click',ev=>{const b=ev.target.closest('[data-cat]');if(!b)return;\n  [...ev.currentTarget.children].forEach(c=>c.classList.remove('on'));b.classList.add('on');state.cat=b.dataset.cat;render();});\nbyIdEl('citySel').addEventListener('change',e=>{state.city=e.target.value;render();});\nbyIdEl('q').addEventListener('input',e=>{state.q=e.target.value.toLowerCase().trim();render();});\n\nDSP.querySelectorAll('.overlay').forEach(o=>o.addEventListener('click',ev=>{if(ev.target===o||ev.target.closest('[data-close]'))o.classList.remove('open');}));\nfunction escHtml(s){return String(s==null?'':s).replace(\/[&<>\"]\/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;'}[c]));}\n\/* Regionen-Filter: feste St\u00e4dte + Regionen (Zuordnung \u00fcber St\u00e4dte-Lexikon).\n * St\u00e4dte, die keiner Region zugeordnet sind, erscheinen als eigene Option \u2013\n * so bleibt jedes Event auffindbar. Zuordnung bei Bedarf einfach erg\u00e4nzen. *\/\nconst REGIONS={ostschweiz:'Suisse orientale',graubuenden:'Grisons',innerschweiz:'Suisse centrale',romandie:'Suisse romande'};\nconst CITY_REGION={\n  'st. gallen':'ostschweiz','st.gallen':'ostschweiz','winterthur':'ostschweiz','schaffhausen':'ostschweiz','frauenfeld':'ostschweiz','kreuzlingen':'ostschweiz','romanshorn':'ostschweiz','arbon':'ostschweiz','wil':'ostschweiz','rapperswil':'ostschweiz','rapperswil-jona':'ostschweiz','herisau':'ostschweiz','appenzell':'ostschweiz',\n  'chur':'graubuenden','davos':'graubuenden','st. moritz':'graubuenden','arosa':'graubuenden','flims':'graubuenden','laax':'graubuenden','lenzerheide':'graubuenden','silvaplana':'graubuenden','pontresina':'graubuenden',\n  'luzern':'innerschweiz','zug':'innerschweiz','schwyz':'innerschweiz','stans':'innerschweiz','sarnen':'innerschweiz','altdorf':'innerschweiz','kriens':'innerschweiz','emmen':'innerschweiz','k\u00fcssnacht':'innerschweiz','brunnen':'innerschweiz',\n  'lausanne':'romandie','genf':'romandie','gen\u00e8ve':'romandie','geneva':'romandie','fribourg':'romandie','freiburg':'romandie','neuch\u00e2tel':'romandie','neuenburg':'romandie','sion':'romandie','montreux':'romandie','vevey':'romandie','yverdon':'romandie'\n};\nfunction cityRegion(c){return CITY_REGION[(c||'').toLowerCase().trim()]||'';}\nfunction populateCities(){\n  var sel=byIdEl('citySel'),cur=sel.value;\n  var fixed=['Z\u00fcrich','Bern','Basel','Luzern'];\n  var extra=[...new Set(EVENTS.map(e=>e.city))].filter(Boolean)\n    .filter(c=>fixed.indexOf(c)===-1&&!cityRegion(c)).sort((a,b)=>a.localeCompare(b));\n  var html='<option value=\"alle\">Toute la Suisse<\/option>';\n  html+='<optgroup label=\"Villes\">'+fixed.concat(extra).map(c=>'<option value=\"'+c.replace(\/\"\/g,'&quot;')+'\">'+cityFr(c)+'<\/option>').join('')+'<\/optgroup>';\n  html+='<optgroup label=\"R\u00e9gions\">'+Object.keys(REGIONS).map(k=>'<option value=\"r:'+k+'\">'+REGIONS[k]+'<\/option>').join('')+'<\/optgroup>';\n  sel.innerHTML=html;\n  sel.value=(cur==='alle'||[...sel.options].some(o=>o.value===cur))?cur:'alle';\n  \/\/ Dieselben Orte als Vorschlag im Einreiche-Formular \u2014 dort aber als Datalist,\n  \/\/ damit auch ein Ort eingetippt werden kann, der noch in keinem Event steht.\n  var dl=byIdEl('citylist');\n  if(dl)dl.innerHTML=fixed.concat(extra).map(c=>'<option value=\"'+c.replace(\/\"\/g,'&quot;')+'\">').join('');}\npopulateCities();\nbyIdEl('themeBtn').addEventListener('click',()=>{const light=DSP.getAttribute('data-theme')==='light';\n  if(light){DSP.removeAttribute('data-theme');localStorage.setItem('display_theme','dark');}\n  else{DSP.setAttribute('data-theme','light');localStorage.setItem('display_theme','light');}});\n\nloadHero();render();\n\n\/* ---------- Live-Daten ----------\n * API-Quelle konfigurierbar. Umschalten aufs eigene Plugin: window.DSPEV_API vor\n * diesem Script setzen ODER hier die Konstante \u00e4ndern auf\n *   '\u2026\/wp-json\/display\/v1\/events'  (DISPLAY-Events-Plugin, Option B)\n * Format beider Endpunkte ist identisch \u2013 sonst keine \u00c4nderung n\u00f6tig.\n *\/\nconst API=(typeof window!=='undefined'&&window.DSPEV_API)||'https:\/\/www.display-magazin.ch\/wp-json\/tribe\/events\/v1\/events';\nconst CATMAP={'party & nightlife':'party','pride & festivals':'pride','film & kino':'kultur','konzerte & musik':'kultur','kunst & kultur':'kultur','kunst & ausstellungen':'kultur','theater & b\u00fchne':'kultur','literatur & talks':'kultur','comedy':'comedy','comedy & kabarett':'comedy','sport & outdoor':'sport','community & stammtisch':'community','bildung & politik':'community','weitere':'community','food & drinks':'bar'};\nfunction deent(s){const t=document.createElement('textarea');t.innerHTML=s||'';return t.value;}\nfunction stripHtml(s){const d=document.createElement('div');d.innerHTML=s||'';return (d.textContent||'').replace(\/\\s+\/g,' ').trim();}\n\/* Eintritt: null = KEINE ANGABE, 0 = ausdr\u00fccklich gratis. Der Unterschied ist der ganze Punkt.\n   Vorher lieferte ein leeres Preisfeld eine 0 und die Seite schrieb \u00abGratis\u00bb an jeden Event,\n   von dem wir den Eintritt schlicht nicht kennen (am 29.08.2026 waren das 205 von 382). *\/\nfunction parseCost(c){if(c===0)return 0;if(!c||!String(c).trim())return null;const t=String(c).toLowerCase();\n  if(t.includes('kostenlos')||t.includes('gratis')||t.includes('frei')||t.includes('libre'))return 0;\n  const m=String(c).replace(\/['\u2019]\/g,'').match(\/(\\d+(?:[.,]\\d{1,2})?)\/);return m?Math.round(parseFloat(m[1].replace(',','.'))):null;}\nfunction cleanCity(s){return (s||'').replace(\/^\\d{4,5}\\s*\/,'').trim();}\nfunction mapEvent(a){\n  const raw=(a.categories||[]).map(c=>deent(c.name).toLowerCase());\n  const cats=[...new Set(raw.map(c=>CATMAP[c]).filter(Boolean))];\n  const cat=cats[0]||'community';\n  const v=(a.venue&&!Array.isArray(a.venue))?a.venue:{};\n  const sd=a.start_date||'',ed=a.end_date||'';\n  const desc=stripHtml(a.description);\n  const img=a.image&&a.image.url?((a.image.sizes&&a.image.sizes.medium_large&&a.image.sizes.medium_large.url)||a.image.url):null;\n  return {id:a.id,title:deent(a.title),cat,cats:cats.length?cats:[cat],\n    city:cleanCity(deent(v.city||'')),venue:deent(v.venue||''),\n    date:sd.slice(0,10),start:sd.slice(11,16),end:(ed&&ed!==sd)?ed.slice(11,16):'',\n    allday:!!a.all_day,price:parseCost(a.cost),img,\n    \/\/ Nur echte Veranstalter-Links; der Permalink des Event-Posts ist keiner.\n    website:a.website||'',tickets:a.tickets||'',instagram:a.instagram||'',facebook:a.facebook||'',\n    desc:desc,interested:0,\n    \/\/ Der Wettbewerbs-Haken und die Verlosung dazu. Ohne diese beiden Zeilen\n    \/\/ kommt die Verlosung nie im Kalender an \u2014 mapEvent() liess bisher alle\n    \/\/ Zusatz-Flags der API fallen.\n    \/\/ Bezahltes CHF-19-Highlight, bezahlte Berichterstattung, Redaktionstipp.\n    \/\/ Die REST-Route setzt highlight NUR bei bestaetigter Zahlung\n    \/\/ (class-dspev-rest.php: highlight && paid) \u2014 hier also nichts nachpruefen.\n    \/\/ `sponsored` bewusst NICHT uebernehmen: das Flag kommt aus dem\n    \/\/ Einreicheformular (\u00abBezahlte Berichterstattung gewuenscht\u00bb) und ist ein\n    \/\/ Wunsch des Veranstalters, keine bestaetigte Zahlung. Als goldenes Badge\n    \/\/ mit Leuchtrahmen bekaemen sonst Events die bezahlte Darstellung, die\n    \/\/ nichts bezahlt haben. `highlight` ist dagegen sauber: die REST-Route\n    \/\/ liefert es erst bei bestaetigter Zahlung (highlight && paid), und `tip`\n    \/\/ ist laut CPT nur intern setzbar.\n    highlight:!!a.highlight,tip:!!a.tip,\n    contest:!!a.contest,raffle:a.raffle||null};}\n\/* Live-Daten laden.\n * WICHTIG: Sobald eine echte API konfiguriert ist (window.DSPEV_API, gesetzt vom\n * Shortcode), werden die Demo-Events SOFORT verworfen \u2013 sonst s\u00e4hen Besucher\n * sekundenlang erfundene Events. Gerendert wird fortlaufend nach jeder Seite,\n * damit die ersten Events sichtbar sind, w\u00e4hrend der Rest noch l\u00e4dt.\n *\/\n(async function loadLive(){\n  const isLive=typeof window!=='undefined'&&!!window.DSPEV_API;\n  if(isLive){EVENTS=[];HERO=null;DSP.querySelector('.hero').style.display='none';\n    byIdEl('grid').innerHTML='<div class=\"empty\">Chargement des \u00e9v\u00e9nements\u2026<\/div>';}\n  try{\n    const iso=today.getFullYear()+'-'+String(today.getMonth()+1).padStart(2,'0')+'-'+String(today.getDate()).padStart(2,'0');\n    let page=1,pages=1,all=[];\n    while(page<=pages&&page<=10){\n      const r=await fetch(API+'?per_page=50&page='+page+'&start_date='+iso);\n      if(!r.ok)break;\n      const d=await r.json();\n      pages=d.total_pages||1;\n      all=all.concat((d.events||[]).map(mapEvent));\n      page++;\n      \/\/ Zwischenstand sofort anzeigen (erste Seite = erste Events auf dem Schirm).\n      EVENTS=all.slice();\n      EVENTS.forEach(e=>{e.off=Math.round((evDate(e)-today)\/86400000);});\n      populateCities();\n      if(all.length){DSP.querySelector('.hero').style.display='';loadHero();}\n      render();}\n    if(all.length){console.info('DISPLAY: '+all.length+' Live-Events geladen.');}\n    else if(isLive){byIdEl('grid').innerHTML='<div class=\"empty\">Les prochains \u00e9v\u00e9nements arrivent tr\u00e8s bient\u00f4t.<\/div>';}\n  }catch(err){\n    console.warn('Live-Events nicht erreichbar.',err);\n    if(isLive&&!EVENTS.length)byIdEl('grid').innerHTML='<div class=\"empty\">Recharge la page pour afficher les \u00e9v\u00e9nements.<\/div>';\n  }\n})();\n\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-24851","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u00c9v\u00e9nements \u2013 Soir\u00e9es, Pride et culture queer en Suisse | DISPLAY Magazin<\/title>\n<meta name=\"description\" content=\"Trouve ta prochaine soir\u00e9e queer en Suisse\u202f: Pride, f\u00eates, culture et rencontres LGBTQ+, r\u00e9unies dans le calendrier de DISPLAY.\" \/>\n<meta name=\"robots\" content=\"noindex, nofollow\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00c9v\u00e9nements \u2013 Soir\u00e9es, Pride et culture queer en Suisse | DISPLAY Magazin\" \/>\n<meta property=\"og:description\" content=\"Trouve ta prochaine soir\u00e9e queer en Suisse\u202f: Pride, f\u00eates, culture et rencontres LGBTQ+, r\u00e9unies dans le calendrier de DISPLAY.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.display-magazin.ch\/fr\/evenements\/\" \/>\n<meta property=\"og:site_name\" content=\"DISPLAY Magazin\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/displaymagazin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/evenements\\\/\",\"url\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/evenements\\\/\",\"name\":\"\u00c9v\u00e9nements \u2013 Soir\u00e9es, Pride et culture queer en Suisse | DISPLAY Magazin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/#website\"},\"datePublished\":\"2026-09-29T06:21:03+00:00\",\"description\":\"Trouve ta prochaine soir\u00e9e queer en Suisse\u202f: Pride, f\u00eates, culture et rencontres LGBTQ+, r\u00e9unies dans le calendrier de DISPLAY.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/evenements\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/evenements\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/evenements\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/home\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u00c9v\u00e9nements\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/\",\"name\":\"DISPLAY Magazin\",\"description\":\"Das Schweizer Lifestyle-Magazin f\u00fcr Gay and Friends\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/#organization\",\"name\":\"DISPLAY Magazin\",\"url\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.display-magazin.ch\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/display_web-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.display-magazin.ch\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/display_web-logo.png\",\"width\":411,\"height\":546,\"caption\":\"DISPLAY Magazin\"},\"image\":{\"@id\":\"https:\\\/\\\/www.display-magazin.ch\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/displaymagazin\",\"https:\\\/\\\/www.instagram.com\\\/display.magazin\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u00c9v\u00e9nements \u2013 Soir\u00e9es, Pride et culture queer en Suisse | DISPLAY Magazin","description":"Trouve ta prochaine soir\u00e9e queer en Suisse\u202f: Pride, f\u00eates, culture et rencontres LGBTQ+, r\u00e9unies dans le calendrier de DISPLAY.","robots":{"index":"noindex","follow":"nofollow"},"og_locale":"fr_FR","og_type":"article","og_title":"\u00c9v\u00e9nements \u2013 Soir\u00e9es, Pride et culture queer en Suisse | DISPLAY Magazin","og_description":"Trouve ta prochaine soir\u00e9e queer en Suisse\u202f: Pride, f\u00eates, culture et rencontres LGBTQ+, r\u00e9unies dans le calendrier de DISPLAY.","og_url":"https:\/\/www.display-magazin.ch\/fr\/evenements\/","og_site_name":"DISPLAY Magazin","article_publisher":"https:\/\/www.facebook.com\/displaymagazin","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.display-magazin.ch\/fr\/evenements\/","url":"https:\/\/www.display-magazin.ch\/fr\/evenements\/","name":"\u00c9v\u00e9nements \u2013 Soir\u00e9es, Pride et culture queer en Suisse | DISPLAY Magazin","isPartOf":{"@id":"https:\/\/www.display-magazin.ch\/fr\/#website"},"datePublished":"2026-09-29T06:21:03+00:00","description":"Trouve ta prochaine soir\u00e9e queer en Suisse\u202f: Pride, f\u00eates, culture et rencontres LGBTQ+, r\u00e9unies dans le calendrier de DISPLAY.","breadcrumb":{"@id":"https:\/\/www.display-magazin.ch\/fr\/evenements\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.display-magazin.ch\/fr\/evenements\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.display-magazin.ch\/fr\/evenements\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.display-magazin.ch\/fr\/home\/"},{"@type":"ListItem","position":2,"name":"\u00c9v\u00e9nements"}]},{"@type":"WebSite","@id":"https:\/\/www.display-magazin.ch\/fr\/#website","url":"https:\/\/www.display-magazin.ch\/fr\/","name":"DISPLAY Magazin","description":"Das Schweizer Lifestyle-Magazin f\u00fcr Gay and Friends","publisher":{"@id":"https:\/\/www.display-magazin.ch\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.display-magazin.ch\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.display-magazin.ch\/fr\/#organization","name":"DISPLAY Magazin","url":"https:\/\/www.display-magazin.ch\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.display-magazin.ch\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/www.display-magazin.ch\/wp-content\/uploads\/2026\/03\/display_web-logo.png","contentUrl":"https:\/\/www.display-magazin.ch\/wp-content\/uploads\/2026\/03\/display_web-logo.png","width":411,"height":546,"caption":"DISPLAY Magazin"},"image":{"@id":"https:\/\/www.display-magazin.ch\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/displaymagazin","https:\/\/www.instagram.com\/display.magazin\/"]}]}},"publishpress_future_action":{"enabled":false,"date":"2026-10-06 10:32:58","action":"change-status","newStatus":"draft","terms":[],"taxonomy":"translation_priority","extraData":[]},"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/www.display-magazin.ch\/fr\/wp-json\/wp\/v2\/pages\/24851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.display-magazin.ch\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.display-magazin.ch\/fr\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/www.display-magazin.ch\/fr\/wp-json\/wp\/v2\/comments?post=24851"}],"version-history":[{"count":0,"href":"https:\/\/www.display-magazin.ch\/fr\/wp-json\/wp\/v2\/pages\/24851\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.display-magazin.ch\/fr\/wp-json\/wp\/v2\/media?parent=24851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}