<style>
                            [data-view='listMonthWithFeaturedImage'] .fc-list-event-title {
                                display: grid;
                                grid-template-columns: 1fr 1fr 1fr;
                                grid-gap: 32px;

                                &amp; div {
                                    grid-column: span 2;
                                    display: flex;
                                    flex-direction: column;
                                }

                                &amp; div &gt; span {
                                    font-size: 1rem;
                                }
        
                                &amp; a {
                                    font-size: 1.5rem;
                                    font-weight: bold;
                                }
        
                                &amp; img {
                                    aspect-ratio: 1 / 1;
                                    width: 100%;
                                    object-fit: cover;
                                }
                            }

                            [data-view='listMonthWithFeaturedImage'] .fc-day th[scope='colgroup'] {
                                background: none;
                                position: static;
                            }
                                
                            [data-view='listMonthWithFeaturedImage'] .fc-list-event-time {
                                display: none;
                            }

                            [data-view='listMonthWithFeaturedImage'] .fc-list-day-cushion.fc-cell-shaded {
                                background: none;
                                text-align: start;
                                display: flex;
                                align-items: center;
                                white-space: nowrap;
                                gap: 32px;
                                padding: 32px 0;
                            }

                            [data-view='listMonthWithFeaturedImage'] .fc-list-day-cushion::after {
                                width: 100%;
                                height: 1px;
                                background: var(--fc-border-color);
                            }

                            [data-view='listMonthWithFeaturedImage'] :is(.fc-list-event-title, th, .fc-list-event-graphic, .fc-listMonthWithFeaturedImage-view.fc-view){
                                border: none;
                            }

                            [data-view='listMonthWithFeaturedImage'] .fc-list-day-side-text {
                                display: none;
                            }

                            @media (max-width: 768px) {
                                [data-view='listMonthWithFeaturedImage'] .fc-list-event-title {
                                    grid-template-columns:  1fr;
                                }

                                [data-view='listMonthWithFeaturedImage'] .fc-list-event-title img {
                                    grid-row-start: 1;
                                }   
                            }
                        </style>{"id":1388,"date":"2026-05-04T10:49:20","date_gmt":"2026-05-04T08:49:20","guid":{"rendered":"https:\/\/dagmarcee.de\/upcoming-dates\/"},"modified":"2026-08-16T13:24:45","modified_gmt":"2026-08-16T11:24:45","slug":"upcoming-dates","status":"publish","type":"page","link":"https:\/\/dagmarcee.de\/en\/upcoming-dates\/","title":{"rendered":"Upcoming Dates"},"content":{"rendered":"<div class=\"pie-upcoming\">\n    <script>\n            let piecalAJAX = {\n            ajaxURL: \"https:\/\/dagmarcee.de\/wp-admin\/admin-ajax.php\",\n            ajaxNonce: \"b969210b6f\"\n            }\n\n            let alreadyExpandedOccurrences = [];\n\n            function piecalPrepareCustomViewsForCalendar( views ) {\n                let supportedEventHandlers = [\n                    'eventDataTransform',\n                    'dateClick',\n                    'eventClick', \n                    'eventDidMount', \n                    'dayCellDidMount', \n                    'viewDidMount', \n                    'viewWillUnmount',\n                    'dayHeaderContent',\n                    'dayHeaderDidMount'\n                ];\n\n                for( let view in views ) {\n                    let viewProps = views[view];\n\n                    for( let prop in viewProps ) {\n                        if( supportedEventHandlers.includes( prop ) ) {\n                            let eventHandlerCode = viewProps[prop];\n\n                            let handlerFunction = new Function( 'info', eventHandlerCode );\n\n                            viewProps[prop] = handlerFunction;\n                        }\n                    }\n\n                    \/\/ Remove customProps since we don't want those output inside the calendar object\n                    delete viewProps.customProps;\n\n                    \/\/ Add in the $atts['duration'] value if the view has a duration property.\n                    if( viewProps.duration ) {\n                        viewProps.duration = {\n                            months: 12                        };\n                    }\n                }\n\n                return views;\n            }\n            \n            document.addEventListener('DOMContentLoaded', function() {\n                var pieCalendarFirstLoad = true;\n                var calendarEl = document.getElementById('calendar');\n                var calendar = new FullCalendar.Calendar(calendarEl, {\n                    headerToolbar: false,\n                    initialView: \"listUpcoming\",\n                    editable: false,\n                    eventSources: [[{\"title\":\"summer retreat &#8211; dagmar cee &#038; bettina leuckert\",\"start\":\"2027-07-28T16:00:00+02:00\",\"end\":\"2027-08-01T16:00:00+02:00\",\"details\":\"A Waves and Heartbeat Summer Retreat with Bettina Leuckert and Dagmar Cee\\nDescription to follow!\\nThis workshop can be credited towards the Teacher Training as 2.5 days of Waves and 2.5 days of Heartbe...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/summer-retreat-dagmar-cee-bettina-leuckert\\\/\",\"postType\":\"Event\",\"postId\":6123,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"shadowplay &#8211; hannover\",\"start\":\"2027-03-12T19:00:00+01:00\",\"end\":\"2027-03-14T17:00:00+01:00\",\"details\":\"\\u201cTo confront a person with their shadow is to show them their light.\\u201d C.G. Jung\\nWhen our energy does not begin to flow and we drag ourselves through the days feeling sluggish, tense, confused, or ungr...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/shadowplay-hannover\\\/\",\"postType\":\"Event\",\"postId\":6113,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"heartbeat workshop &#8211; berlin\",\"start\":\"2027-02-19T20:00:00+01:00\",\"end\":\"2027-02-21T17:00:00+01:00\",\"details\":\"detailed information coming soon!\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/heartbeat-workshop-berlin\\\/\",\"postType\":\"Event\",\"postId\":6102,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"winter journey &#8211; hollerb&uuml;hl\",\"start\":\"2026-12-28T17:30:00+01:00\",\"end\":\"2027-01-01T15:00:00+01:00\",\"details\":\"\\u201cIf, for just one night, you could look inside your luggage and see what you\\u2019ve been given along the way, what would you discover?\\u201d  Theater Anu\\nWe will use this time of the longest nights to move thr...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/winterreise-hollerbuehl\\\/\",\"postType\":\"Event\",\"postId\":6097,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"Heartbeat Retreat &#8211; Hollerb&uuml;hl\",\"start\":\"2027-05-05T17:30:00+02:00\",\"end\":\"2027-05-09T15:00:00+02:00\",\"details\":\"A Heartbeat Retreat\\nDescription to follow!\\nThe Hollerb\\u00fchl seminar house is a wonderful place where I have enjoyed giving intensive, moving workshops for over 20 years. Very familiar and well-kept, loc...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/heartbeat-retreat-hollerbuehl\\\/\",\"postType\":\"Event\",\"postId\":6088,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"moving stillness &#8211; vienna\",\"start\":\"2026-12-04T18:30:00+01:00\",\"end\":\"2026-12-05T17:30:00+01:00\",\"details\":\"A Waves Workshop\\nPre-Christmas season. The end of the year is approaching. The days usually become fuller, faster, louder. And in the midst of it all: the longing for peace, reflection, and one's own ...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/moving-stillness-vienna\\\/\",\"postType\":\"Event\",\"postId\":6080,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"compassion &ndash; poznan\",\"start\":\"2026-10-23T19:00:00+02:00\",\"end\":\"2026-10-25T17:00:00+01:00\",\"details\":\"\\u201cRecognizing that your struggle and your suffering is the same as everyone else\\u2019s, I think that\\u2019s the beginning of a responsible live. Otherwise, we are in a continual savage battle with each other wi...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/compassion-poznan\\\/\",\"postType\":\"Event\",\"postId\":5941,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"waves &#038; voice &#8211; litauen\",\"start\":\"2027-04-09T19:00:00+02:00\",\"end\":\"2027-04-11T17:00:00+02:00\",\"details\":\"What is my body telling me, and what does my voice sound like? What becomes the expression of my inner self beyond what is thought? Where are body and voice more than just tools for everyday life, and...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/waves-voice\\\/\",\"postType\":\"Event\",\"postId\":5898,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"wild waves &#8211; Karlsruhe\",\"start\":\"2026-12-11T19:30:00+01:00\",\"end\":\"2026-12-11T22:00:00+01:00\",\"details\":\"is a guided Wave evening, open to everyone, to deepen the 5Rhythms\\u2122 practice.\\n&nbsp;\\nWhat to bring:Comfortable layered clothing to change into, water. We dance barefoot or in dance shoes.\\nFirst-time d...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/wild-waves-karlsruhe\\\/\",\"postType\":\"Event\",\"postId\":5854,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"}]],\n                    direction: \"ltr\",\n                    contentHeight: \"auto\",\n                    locale: \"en-US\",\n                    eventTimeFormat: {\"hour\":\"2-digit\",\"minute\":\"2-digit\"},\n                    dayHeaderFormat: { weekday: 'long' },\n                    views: piecalPrepareCustomViewsForCalendar({\"listUpcoming\":{\"type\":\"listMonth\",\"duration\":{\"months\":2},\"customProps\":{\"niceName\":\"List - Upcoming\"}},\"listMonthWithFeaturedImage\":{\"type\":\"listMonth\",\"duration\":{\"months\":1},\"customProps\":{\"niceName\":\"Month - List with Image\",\"styles\":\"\\n                            [data-view='listMonthWithFeaturedImage'] .fc-list-event-title {\\n                                display: grid;\\n                                grid-template-columns: 1fr 1fr 1fr;\\n                                grid-gap: 32px;\\n\\n                                & div {\\n                                    grid-column: span 2;\\n                                    display: flex;\\n                                    flex-direction: column;\\n                                }\\n\\n                                & div > span {\\n                                    font-size: 1rem;\\n                                }\\n        \\n                                & a {\\n                                    font-size: 1.5rem;\\n                                    font-weight: bold;\\n                                }\\n        \\n                                & img {\\n                                    aspect-ratio: 1 \\\/ 1;\\n                                    width: 100%;\\n                                    object-fit: cover;\\n                                }\\n                            }\\n\\n                            [data-view='listMonthWithFeaturedImage'] .fc-day th[scope='colgroup'] {\\n                                background: none;\\n                                position: static;\\n                            }\\n                                \\n                            [data-view='listMonthWithFeaturedImage'] .fc-list-event-time {\\n                                display: none;\\n                            }\\n\\n                            [data-view='listMonthWithFeaturedImage'] .fc-list-day-cushion.fc-cell-shaded {\\n                                background: none;\\n                                text-align: start;\\n                                display: flex;\\n                                align-items: center;\\n                                white-space: nowrap;\\n                                gap: 32px;\\n                                padding: 32px 0;\\n                            }\\n\\n                            [data-view='listMonthWithFeaturedImage'] .fc-list-day-cushion::after {\\n                                width: 100%;\\n                                height: 1px;\\n                                background: var(--fc-border-color);\\n                            }\\n\\n                            [data-view='listMonthWithFeaturedImage'] :is(.fc-list-event-title, th, .fc-list-event-graphic, .fc-listMonthWithFeaturedImage-view.fc-view){\\n                                border: none;\\n                            }\\n\\n                            [data-view='listMonthWithFeaturedImage'] .fc-list-day-side-text {\\n                                display: none;\\n                            }\\n\\n                            @media (max-width: 768px) {\\n                                [data-view='listMonthWithFeaturedImage'] .fc-list-event-title {\\n                                    grid-template-columns:  1fr;\\n                                }\\n\\n                                [data-view='listMonthWithFeaturedImage'] .fc-list-event-title img {\\n                                    grid-row-start: 1;\\n                                }   \\n                            }\\n                        \"},\"eventDidMount\":\"\\n                        info = piecalJS.eventDidMount( info );\\n\\n                        let row = info.el;\\n                        let titleContainer = info.el.querySelector('.fc-list-event-title');\\n                        let titleLink = titleContainer.querySelector('a');\\n                        let column = document.createElement('div');\\n                        \\n                        let descriptionText = info.event._def.extendedProps.details;\\n                        let decoder = document.createElement('textarea');\\n                        decoder.innerHTML = descriptionText;\\n\\n                        let eventTimeText = document.createElement('span');\\n                        eventTimeText.innerText = info.el.querySelector('.fc-list-event-time').innerText;\\n                        \\n                        let description = document.createElement('p');\\n                        description.innerHTML = decoder.value;\\n                        \\n                        titleContainer.append(column);\\n                        column.append(eventTimeText);\\n                        column.append(titleLink);\\n\\n                        if( description.innerText != '' ) {\\n                            column.append(description);\\n                        }\\n                        \\n                        if( info.event._def.extendedProps.featuredimage ) {\\n                            let image = document.createElement('img');\\n                            image.setAttribute('src', info.event._def.extendedProps.featuredimage);\\n                            image.setAttribute('alt', info.event._def.extendedProps.featuredimagealt);\\n                            titleContainer.append(image);\\n                        }\\n                    \"}}),\n                    eventClick: function( info ) {\n                        info = piecalJS.eventClick( info, {\n                            appendOffset: true                        } );\n\n                        Alpine.store('calendarEngine').showPopover = false;\nwindow.location.href = Alpine.store('calendarEngine').eventUrl ?? Alpine.store('calendarEngine').permalink;\n    Alpine.store(\"calendarEngine\").featuredImage = info.event._def.extendedProps.featuredimage;\n    Alpine.store(\"calendarEngine\").featuredImageAlt = info.event._def.extendedProps.featuredimagealt;\n                        },\n                    eventDataTransform: function(event) {  \n                        event = piecalJS.eventDataTransform( event );\n\n                        \n                        return event;  \n                    },\n                    dateClick: function( info ) {\n                        info = piecalJS.dateClick( info );\n\n                                            },\n                    eventDidMount: function( info ) {\n                        info = piecalJS.eventDidMount( info );\n\n                                            },\n                    dayCellDidMount: function( info ) {\n                        info = piecalJS.dayCellDidMount( info );\n\n                                            },\n                    dayHeaderContent: function( info ) {\n                        info = piecalJS.dayHeaderContent( info );\n\n                        \n                        return info.text;\n                    },\n                    dayHeaderDidMount: function( info ) {\n                        let defaultOptions = {\n                            showDates: true,\n                            locale: \"en-US\"\n                        };\n\n                        info = piecalJS.dayHeaderDidMount( info, defaultOptions );\n\n                                            },\n                    \n    datesSet: function( dateInfo ) {\n        if( pieCalendarFirstLoad ) {\n            pieCalendarFirstLoad = false;\n            return;\n        }\n\n        let rangeStart = dateInfo.startStr;\n        let rangeEnd = dateInfo.endStr;\n\n        let useExtendedRanges = true;\n        let extendedRangeWidth = 40;\n\n        if( useExtendedRanges ) {\n            let extendedRangeStart = new Date( dateInfo.startStr );\n            let extendedRangeEnd = new Date( dateInfo.endStr );\n\n            extendedRangeStart.setDate( extendedRangeStart.getDate() - extendedRangeWidth );\n            extendedRangeEnd.setDate( extendedRangeEnd.getDate() + extendedRangeWidth );\n\n            rangeStart = extendedRangeStart.toISOString();\n            rangeEnd = extendedRangeEnd.toISOString();\n        }\n        \n        \/\/ Let's narrow events down to only the recurring ones to avoid sending more JSON in our AJAX request\n        \/\/ than is necessary.\n        let recurringEvents = [{\"title\":\"summer retreat &#8211; dagmar cee &#038; bettina leuckert\",\"start\":\"2027-07-28T16:00:00+02:00\",\"end\":\"2027-08-01T16:00:00+02:00\",\"details\":\"A Waves and Heartbeat Summer Retreat with Bettina Leuckert and Dagmar Cee\\nDescription to follow!\\nThis workshop can be credited towards the Teacher Training as 2.5 days of Waves and 2.5 days of Heartbe...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/summer-retreat-dagmar-cee-bettina-leuckert\\\/\",\"postType\":\"Event\",\"postId\":6123,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"shadowplay &#8211; hannover\",\"start\":\"2027-03-12T19:00:00+01:00\",\"end\":\"2027-03-14T17:00:00+01:00\",\"details\":\"\\u201cTo confront a person with their shadow is to show them their light.\\u201d C.G. Jung\\nWhen our energy does not begin to flow and we drag ourselves through the days feeling sluggish, tense, confused, or ungr...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/shadowplay-hannover\\\/\",\"postType\":\"Event\",\"postId\":6113,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"heartbeat workshop &#8211; berlin\",\"start\":\"2027-02-19T20:00:00+01:00\",\"end\":\"2027-02-21T17:00:00+01:00\",\"details\":\"detailed information coming soon!\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/heartbeat-workshop-berlin\\\/\",\"postType\":\"Event\",\"postId\":6102,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"winter journey &#8211; hollerb&uuml;hl\",\"start\":\"2026-12-28T17:30:00+01:00\",\"end\":\"2027-01-01T15:00:00+01:00\",\"details\":\"\\u201cIf, for just one night, you could look inside your luggage and see what you\\u2019ve been given along the way, what would you discover?\\u201d  Theater Anu\\nWe will use this time of the longest nights to move thr...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/winterreise-hollerbuehl\\\/\",\"postType\":\"Event\",\"postId\":6097,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"Heartbeat Retreat &#8211; Hollerb&uuml;hl\",\"start\":\"2027-05-05T17:30:00+02:00\",\"end\":\"2027-05-09T15:00:00+02:00\",\"details\":\"A Heartbeat Retreat\\nDescription to follow!\\nThe Hollerb\\u00fchl seminar house is a wonderful place where I have enjoyed giving intensive, moving workshops for over 20 years. Very familiar and well-kept, loc...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/heartbeat-retreat-hollerbuehl\\\/\",\"postType\":\"Event\",\"postId\":6088,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"moving stillness &#8211; vienna\",\"start\":\"2026-12-04T18:30:00+01:00\",\"end\":\"2026-12-05T17:30:00+01:00\",\"details\":\"A Waves Workshop\\nPre-Christmas season. The end of the year is approaching. The days usually become fuller, faster, louder. And in the midst of it all: the longing for peace, reflection, and one's own ...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/moving-stillness-vienna\\\/\",\"postType\":\"Event\",\"postId\":6080,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"compassion &ndash; poznan\",\"start\":\"2026-10-23T19:00:00+02:00\",\"end\":\"2026-10-25T17:00:00+01:00\",\"details\":\"\\u201cRecognizing that your struggle and your suffering is the same as everyone else\\u2019s, I think that\\u2019s the beginning of a responsible live. Otherwise, we are in a continual savage battle with each other wi...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/compassion-poznan\\\/\",\"postType\":\"Event\",\"postId\":5941,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"waves &#038; voice &#8211; litauen\",\"start\":\"2027-04-09T19:00:00+02:00\",\"end\":\"2027-04-11T17:00:00+02:00\",\"details\":\"What is my body telling me, and what does my voice sound like? What becomes the expression of my inner self beyond what is thought? Where are body and voice more than just tools for everyday life, and...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/waves-voice\\\/\",\"postType\":\"Event\",\"postId\":5898,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"},{\"title\":\"wild waves &#8211; Karlsruhe\",\"start\":\"2026-12-11T19:30:00+01:00\",\"end\":\"2026-12-11T22:00:00+01:00\",\"details\":\"is a guided Wave evening, open to everyone, to deepen the 5Rhythms\\u2122 practice.\\n&nbsp;\\nWhat to bring:Comfortable layered clothing to change into, water. We dance barefoot or in dance shoes.\\nFirst-time d...\",\"permalink\":\"https:\\\/\\\/dagmarcee.de\\\/en\\\/event\\\/wild-waves-karlsruhe\\\/\",\"postType\":\"Event\",\"postId\":5854,\"color\":\"var(--primary-semi-dark\",\"textColor\":\"white\",\"featuredimage\":\"https:\\\/\\\/dagmarcee.de\\\/wp-content\\\/uploads\\\/Ocean-Wave.webp\",\"featuredimagealt\":\"Atmospheric image of an ocean wave\"}];\n\n        \/\/ Let's add the original event to our alreadyExpandedOccurrences array to avoid duplication.\n        for( let event of recurringEvents ) {\n            let eventID = encodeURI(event.title.replace(' ', '').toLowerCase())+event.start+event.postId;\n\n            alreadyExpandedOccurrences = [...alreadyExpandedOccurrences, eventID];\n        }\n\n        \/\/ Now we need to submit this range to an AJAX function that does some things and returns some events\n        fetch(piecalAJAX.ajaxURL, {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application\/x-www-form-urlencoded', \/\/ Sending our data as URL encoded form data\n                'Accept': 'application\/json', \/\/ We expect JSON in return\n            },\n            body: new URLSearchParams({ \/\/ This is a way to easily convert our data into URL encoded form data\n                'action': 'piecal_expand_occurrences_in_view',\n                'nonce': piecalAJAX.ajaxNonce,\n                'rangeStart': rangeStart,\n                'rangeEnd': rangeEnd,\n                'appendOffset': true,\n                'events': JSON.stringify( recurringEvents )\n            })\n        })\n        .then(response => response.json()) \/\/ Parsing the returned JSON\n        .then(data => {\n            if (data.success) {\n                occurrencesInRange = data.events;\n\n                for( let occurrence of data.events ) {\n                    let occurrenceID = encodeURI(occurrence.title.replace(' ', '').toLowerCase())+occurrence.start+occurrence.postId;\n\n                    if( !alreadyExpandedOccurrences.includes( occurrenceID ) ) {\n                        let scrubber = document.createElement('textarea');\n                        scrubber.innerHTML = occurrence.title;\n                        occurrence.title = scrubber.value;\n\n                        if(occurrence.allDay && occurrence.end && !occurrence.extendedProps?.isBlackoutSegment && !occurrence.isBlackoutSegment) {\n                            \/\/ Extend end date for all day events that span multiple days\n                            let { actualEnd, end } = piecalUtils.getAlldayMultidayEventEnd( occurrence ) ?? {};\n\n                            if( actualEnd && end ) {    \n                                occurrence.actualEnd = actualEnd;\n                                occurrence.end = end;\n                            }\n                        }\n                        \n                        this.addEvent( occurrence );\n                        alreadyExpandedOccurrences = [...alreadyExpandedOccurrences, occurrenceID];\n                    } else {\n                        continue;\n                    }\n                }\n            } else {\n                console.error('Recurring occurrences were not expanded due to an AJAX error.');\n            }\n        })\n        .catch(error => {\n            console.error('Error:', error);\n        });\n    },\n                    });\n                    calendar.render();\n                    window.calendar = calendar;\n            });\n\n            function piecalChangeView( view ) {\n                piecalCleanView( document.querySelector('.piecal-wrapper').getAttribute('data-view'), view );\n                document.querySelector('.piecal-wrapper').setAttribute('data-view', view);\n                window.calendar.changeView(view);\n                Alpine.store('calendarEngine').calendarView = view;\n                Alpine.store('calendarEngine').viewTitle = window.calendar.currentData.viewTitle;\n                Alpine.store('calendarEngine').viewSpec = window.calendar.currentData.viewSpec.buttonTextDefault;\n            }\n\n            \/\/ This function forces the calendar to re-render events when the view is changed, but only\n            \/\/ when necessary. This prevents artifacts from custom views from persisting between view changes\n            \/\/ when those views have the same or similar types, e.g. listMonth and listUpcoming.\n            function piecalCleanView( oldView, newView ) {\n                if( oldView.toLowerCase().includes( 'list' ) && newView.toLowerCase().includes( 'grid' ) ) {\n                    return false;\n                }\n\n                if( oldView.toLowerCase().includes( 'list' ) && newView.toLowerCase().includes( 'list' ) ) {\n                    window.calendar.changeView('dayGridMonth');\n                }\n\n                if( oldView.toLowerCase().includes( 'grid' ) && newView.toLowerCase().includes( 'grid' ) ) {\n                    window.calendar.changeView('listMonth');\n                }\n            }\n\n            function piecalGotoToday() {\n                console.log('today');\n            }\n\n            function piecalNextInView() {\n                window.calendar.next();\n            }\n\n            function piecalPreviousInView() {\n                console.log('prev');\n            }\n\n            function piecalSkipCalendar() {\n                let focusedCalendar = document.querySelector('.piecal-wrapper:focus-within');\n                let focusablesInCalendar = focusedCalendar.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"]');\n                let lastFocusable = focusablesInCalendar[focusablesInCalendar.length - 1];\n\n                let focusablesInDocument = document.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"]');\n                let targetFocusable = Array.prototype.indexOf.call(focusablesInDocument, lastFocusable) + 1;\n\n                focusablesInDocument[targetFocusable].focus();\n            }\n\n            document.addEventListener('alpine:init', () => {\n                Alpine.store('calendarEngine', {\n                    viewTitle: \"Loading\",\n                    viewSpec: \"Loading\",\n                    buttonText: {},\n                    showPopover: false,\n                    locale: \"en-US\",\n                    localeDateStringFormat: {\"hour\":\"2-digit\",\"minute\":\"2-digit\"},\n                    allDayLocaleDateStringFormat: [],\n                    calendarView: \"listUpcoming\",\n                    eventTitle: \"Loading...\",\n                    eventDetails: \"Loading...\",\n                    eventType: \"Loading...\",\n                    eventStart: \"Loading...\",\n                    eventAllDay: false,\n                    eventActualEnd: null,\n                    eventEnd: \"Loading...\",\n                    eventUrl: \"\/\",\n                    safeOutput( input ) {\n                        let scrubber = document.createElement('textarea');\n                        scrubber.innerHTML = input;\n                        return scrubber.value;\n                    }\n                })\n            })\n\n            window.addEventListener('DOMContentLoaded', () => {\n                Alpine.store('calendarEngine').viewTitle = window.calendar.currentData.viewTitle;\n                Alpine.store('calendarEngine').viewSpec = window.calendar.currentData.viewSpec.buttonTextDefault;\n                Alpine.store('calendarEngine').buttonText = window.calendar.currentData.localeDefaults.buttonText;\n            })\n\n            window.addEventListener('keydown', (e) => {\n                if( e.keyCode == 27 || e.key == 'Escape' ) Alpine.store('calendarEngine').showPopover = false;\n\n            })\n        <\/script>\n        <div\n        class=\"piecal-wrapper\"\n        data-view=\"listUpcoming\";\n        x-data\n        >\n            <div class=\"piecal-controls fc\">\n                <button\n                    class=\"piecal-controls__skip-calendar fc-button fc-button-primary\"\n                    onClick=\"piecalSkipCalendar()\">\n                        Skip Calendar                <\/button>\n                <div\n                class=\"piecal-controls__view-title\" \n                aria-live=\"polite\"\n                role=\"status\"\n                >\n                  <span class=\"visually-hidden\" x-text=\"$store.calendarEngine.viewTitle + ' - current view is ' + $store.calendarEngine.calendarView\"><\/span>\n                  <span aria-hidden=\"true\" x-text=\"$store.calendarEngine.viewTitle\"><\/span>\n                <\/div>\n                <label class=\"piecal-controls__view-chooser\">\n                    Choose View                    <select x-model=\"$store.calendarEngine.calendarView\" @change=\"piecalChangeView($store.calendarEngine.calendarView)\">\n                                                    <option value=\"dayGridMonth\">\n                                Month - Classic                            <\/option>\n                                                    <option value=\"listMonth\">\n                                Month - List                            <\/option>\n                                                    <option value=\"timeGridWeek\">\n                                Week - Time Grid                            <\/option>\n                                                    <option value=\"listWeek\">\n                                Week - List                            <\/option>\n                                                    <option value=\"dayGridWeek\">\n                                Week - Day Grid                            <\/option>\n                                                    <option value=\"listDay\">\n                                Day - List                            <\/option>\n                                                    <option value=\"listUpcoming\">\n                                List - Upcoming                            <\/option>\n                                                    <option value=\"listMonthWithFeaturedImage\">\n                                Month - List with Image                            <\/option>\n                                            <\/select>\n                <\/label>\n                <div class=\"piecal-controls__navigation-button-group\">\n                    <button \n                        class=\"piecal-controls__back-to-month fc-button fc-button-primary\"\n                        aria-label=\"Back to full month view.\"\n                        onClick=\"piecalChangeView('dayGridMonth')\">\n                            Back To Full Month                    <\/button>\n                    <button \n                    class=\"fc-button fc-button-primary piecal-controls__today-button\"\n                    @click=\"window.calendar.today(); $store.calendarEngine.viewTitle = window.calendar.currentData.viewTitle\"\n                    x-text=\"$store.calendarEngine.buttonText.today ?? 'Today'\">\n                    <\/button>\n                    <button \n                    class=\"fc-button fc-button-primary piecal-controls__prev-button\"\n                    @click=\"window.calendar.prev(); $store.calendarEngine.viewTitle = window.calendar.currentData.viewTitle\"\n                    :aria-label=\"$store.calendarEngine.buttonText.prev + ' ' + $store.calendarEngine.viewSpec\"><<\/button>\n                    <button \n                    class=\"fc-button fc-button-primary piecal-controls__next-button\"\n                    @click=\"window.calendar.next(); $store.calendarEngine.viewTitle = window.calendar.currentData.viewTitle\" \n                    :aria-label=\"$store.calendarEngine.buttonText.next + ' ' + $store.calendarEngine.viewSpec\">><\/button>\n                <\/div>\n            <\/div>\n            <div id=\"calendar\"><\/div>\n            <div \n                class=\"piecal-popover\" \n                x-show=\"$store.calendarEngine.showPopover\"\n                style=\"display: none;\">\n                    <div \n                    class=\"piecal-popover__inner\" \n                    role=\"dialog\"\n                    aria-labelledby=\"piecal-popover__title--01\"\n                    aria-describedby=\"piecal-popover__details--01\"\n                    @click.outside=\"$store.calendarEngine.showPopover = false\"\n                    x-trap.noscroll=\"$store.calendarEngine.showPopover\">\n                        <button \n                        class=\"piecal-popover__close-button\" \n                        title=\"Close event details\"\n                        @click=\"$store.calendarEngine.showPopover = false\">\n                        <\/button>\n                                                <p class=\"piecal-popover__title\" id=\"piecal-popover__title--01\" x-text=\"$store.calendarEngine.safeOutput( $store.calendarEngine.eventTitle )\">Event Title<\/p>\n                                                <hr>\n                        <div class=\"piecal-popover__meta\">\n                                                        <p>\n                            Starts                            <\/p>\n                            <p \n                            aria-labelledby=\"piecal-event-start-date\" \n                            x-text=\"!$store.calendarEngine.eventAllDay ? new Date($store.calendarEngine.eventStart).toLocaleDateString( $store.calendarEngine.locale, $store.calendarEngine.localeDateStringFormat ) : new Date($store.calendarEngine.eventStart).toLocaleDateString( $store.calendarEngine.locale, $store.calendarEngine.allDayLocaleDateStringFormat )\"><\/p>\n                            <p x-show=\"$store.calendarEngine.eventEnd\">\n                            Ends                            <\/p>\n                            <p \n                            x-show=\"$store.calendarEngine.eventEnd\" \n                            x-text=\"!$store.calendarEngine.eventAllDay ? new Date($store.calendarEngine.eventEnd).toLocaleDateString( $store.calendarEngine.locale, $store.calendarEngine.localeDateStringFormat ) : new Date($store.calendarEngine.eventActualEnd).toLocaleDateString( $store.calendarEngine.locale, $store.calendarEngine.allDayLocaleDateStringFormat )\"><\/p>\n                                                    <\/div>\n                        <hr>\n                                                <p x-show=\"$store.calendarEngine.eventDetails\" class=\"piecal-popover__details\" id=\"piecal-popover__details--01\" x-text=\"$store.calendarEngine.safeOutput( $store.calendarEngine.eventDetails )\"><\/p>                                                                        <a x-show=\"$store.calendarEngine.eventUrl\" class=\"piecal-popover__view-link\" :href=\"$store.calendarEngine.eventUrl\">\n                        View                             <span x-text=\"$store.calendarEngine.eventType\"><\/span>\n                                                    <\/a>\n                                            <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"piecal-footer\">\n            Event times are listed in your local time zone: <span x-data x-text='Intl.DateTimeFormat().resolvedOptions().timeZone'><\/span>        <\/div>\n        \n<\/div>\n<div class=\"container\" style=\"justify-content: center; padding-block-start: var(--space-m);\">\n<h3 class=\"back-to\"><a style=\"text-decoration: underline;\" href=\"https:\/\/dagmarcee.de\/en\/dates\/\">View Calendar<\/a><\/h3>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>View Calendar<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"custom-index","meta":{"_acf_changed":false,"_piecal_is_recurring":false,"_piecal_recurring_interval":1,"_piecal_recurring_frequency":"","_piecal_recurring_exact_position":false,"_piecal_recurring_end":"","_piecal_color":"","_piecal_text_color":"","_piecal_global_color_master":false,"_piecal_rsets":"[]","_piecal_is_event":false,"_piecal_start_date":"","_piecal_end_date":"","_piecal_is_allday":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-1388","page","type-page","status-publish","hentry"],"acf":[],"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/dagmarcee.de\/en\/wp-json\/wp\/v2\/pages\/1388","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dagmarcee.de\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dagmarcee.de\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dagmarcee.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dagmarcee.de\/en\/wp-json\/wp\/v2\/comments?post=1388"}],"version-history":[{"count":3,"href":"https:\/\/dagmarcee.de\/en\/wp-json\/wp\/v2\/pages\/1388\/revisions"}],"predecessor-version":[{"id":5924,"href":"https:\/\/dagmarcee.de\/en\/wp-json\/wp\/v2\/pages\/1388\/revisions\/5924"}],"wp:attachment":[{"href":"https:\/\/dagmarcee.de\/en\/wp-json\/wp\/v2\/media?parent=1388"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dagmarcee.de\/en\/wp-json\/wp\/v2\/categories?post=1388"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dagmarcee.de\/en\/wp-json\/wp\/v2\/tags?post=1388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}