{"id":1111,"date":"2025-09-17T14:49:36","date_gmt":"2025-09-17T14:49:36","guid":{"rendered":"https:\/\/projects.45press.com\/castro-theater\/?page_id=1111"},"modified":"2025-09-25T20:10:20","modified_gmt":"2025-09-25T20:10:20","slug":"calendar","status":"publish","type":"page","link":"https:\/\/projects.45press.com\/castro-theater\/calendar\/","title":{"rendered":"Calendar"},"content":{"rendered":"\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-1111_2f5f39-c8\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><\/div><\/div>\n\n\n<style> \n\/* Target post templates within shows-query *\/\n.shows-query .wp-block-post-template .wp-block-post {\nborder: 1px solid #fb283f !important; \n}\n\n.shows-query .wp-block-post-template .wp-block-post {\n    position: relative;\n    background-color: transparent; \/* No green by default *\/\nborder-radius: 30px !important;\n    transition: background-color 0.3s ease;\n}\n\n\/* Make the entire post box clickable *\/\n.shows-query .wp-block-post-template .wp-block-post a {\n    display: block;\n    text-decoration: none;\n    transition: color 0.3s ease;\n}\n\n\/* If you have a featured image link, make it fill the container *\/\n.shows-query .wp-block-post-template .wp-block-post-featured-image a {\n    display: block;\n}\n\n\/* Apply green color ONLY on hover *\/\n.shows-query .wp-block-post-template .wp-block-post:hover {\n    background-color: #D5F7B0 !important;\n    cursor: pointer;\nborder-radius: 30px !important;\n}\n\n\/* Change text color on hover - BUT exclude the date pill *\/\n.shows-query .wp-block-post-template .wp-block-post:hover *:not(.event-start-date-pill):not(.shows-date) {\n    color: #3d1410 !important;\n}\n\n.shows-query .wp-block-post-template .shows-date .wp-block-post:hover {\ncolor: #ffffff;\n}\n\n.shows-query .wp-block-post:hover .wp-block-kadence-spacer .kt-divider {\n    border-top-color: #3A0204 !important;\n}\n\n\n\/* Make absolutely sure the date pill stays its original color *\/\n.event-start-date-pill.shows-date {\n    color: white !important; \/* Change to whatever color your date pill should be *\/\n}\n\n\/* Ensure all content stays above the clickable overlay *\/\n.shows-query .wp-block-post-template .wp-block-post > * {\n    position: relative;\n    z-index: 2;\n}\n<\/style>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ Target all posts within the shows-query\n    const showPosts = document.querySelectorAll('.shows-query .wp-block-post-template .wp-block-post');\n    \n    showPosts.forEach(function(post) {\n        \/\/ Find the permalink (the single event page link)\n        const postLink = post.querySelector('a[href*=\"\/events\/\"]') || post.querySelector('a');\n        \n        if (postLink) {\n            const eventUrl = postLink.href;\n            \n            \/\/ Make cursor pointer on hover\n            post.style.cursor = 'pointer';\n            \n            \/\/ Click anywhere on the post to go to single event page\n            post.addEventListener('click', function(e) {\n                \/\/ Go to the single event page\n                window.location.href = eventUrl;\n            });\n        }\n    });\n});\n<\/script>\n\n<div class=\"kb-row-layout-wrap kb-row-layout-id1190_022010-bb alignnone wp-block-kadence-rowlayout\"><div class=\"kt-row-column-wrap kt-has-1-columns kt-row-layout-equal kt-tab-layout-inherit kt-mobile-layout-row kt-row-valign-top\">\n\n<div class=\"wp-block-kadence-column kadence-column1190_f422f0-eb\"><div class=\"kt-inside-inner-col\">\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-97829e9f wp-block-group-is-layout-constrained\" style=\"padding-right:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\">\n<h1 class=\"wp-block-heading has-text-align-center\">Upcoming Shows<\/h1>\n\n\n<div id=\"event-nav-69f4e13f11abc\" class=\"event-tags-navigation\" data-nav-container=\"true\" style=\"margin: 20px 0;\"><style>\n            .event-tags-navigation {\n                display: flex;\n                gap: 10px;\n                justify-content: center;\n                align-items: center;\n                flex-wrap: wrap;\n            }\n            .event-tag-button {\n                display: inline-block;\n                padding: 6px 12px;\n                background-color: transparent;\n                border: 1px solid #FB283F;\n                border-radius: 25px;\n                color: white;\n                text-decoration: none;\n                font-size: 15px;\n                text-transform: uppercase;\n                letter-spacing: 1px; \n                white-space: nowrap;\n                cursor: pointer;\n                font-family: \"Nineties Headliner\" !important; \n            }\n            .event-tag-button:hover {\n                background-color: #d2381a;\n                color: white;\n                text-decoration: none;\n                transform: translateY(-2px);\n                box-shadow: 0 6px 20px rgba(210, 56, 26, 0.4);\n            }\n            .event-tag-button.active {\n                background-color: #d2381a !important;\n                color: white !important;\n                box-shadow: 0 4px 15px rgba(210, 56, 26, 0.5);\n            }\n            \n            .search-wrapper {\n                position: relative;\n                display: inline-flex;\n                align-items: center;\n            }\n            \n            .search-icon {\n                position: absolute;\n                left: 12px;\n                pointer-events: none;\n                display: flex;\n                align-items: center;\n            }\n            \n            .search-icon svg {\n                width: 16px;\n                height: 16px;\n            }\n            \n            .event-search-box {\n                padding: 8px 12px 8px 36px;\n                border: 1px solid #FB283F;\n                border-radius: 25px;\n                background: transparent;\n                color: white;\n                font-size: 14px;\n                outline: none;\n                width: 200px;\n                font-family: \"Name Sans\", sans-serif;\n                font-weight: 400;\n            }\n       \n            .event-search-box::placeholder {\n                 color: #eeded7;\n                 font-family: \"Name Sans\", sans-serif;\n                 font-weight: 400;\n               }\n\n            .event-search-box:focus::placeholder {\n                color: #ffffff;\n             }\n\n            .event-search-box:focus {\n                 border-color: #d2381a;\n                 box-shadow: 0 0 15px rgba(210, 56, 26, 0.4);\n                  color: #ffffff;\n            }\n            \n            .calendar-link {\n                display: inline-flex;\n                align-items: center;\n                justify-content: center;\n                padding: 8px 12px;\n                background: transparent;\n                transition: all 0.3s ease;\n                text-decoration: none;\n            }\n            \n            .calendar-link:hover {\n                transform: translateY(-2px);\n            }\n            \n            .calendar-link svg {\n                display: block;\n                width: 23px;\n                height: 25px;\n            }\n\n            \n            \/* No animations - just show\/hide *\/\n            .nav-event-nav-69f4e13f11abc-event {\n                margin-bottom: 20px;\n            }\n            .nav-event-nav-69f4e13f11abc-hidden {\n                display: none !important;\n            }\n            \n            \/* View All Events button *\/\n            .view-all-btn-event-nav-69f4e13f11abc {\n                display: block;\n                padding: 12px 24px;\n                background: linear-gradient(135deg, transparent, rgba(251, 40, 63, 0.1));\n                border: 1px solid #FB283F;\n                border-radius: 30px;\n                color: white;\n                font-size: 16px;\n                text-transform: uppercase;\n                letter-spacing: 1px;\n                white-space: nowrap;\n                cursor: pointer;\n                font-family: \"Nineties Headliner\" !important;\n                margin: 40px auto 20px auto;\n                text-align: center;\n                width: fit-content;\n                backdrop-filter: blur(10px);\n            }\n            .view-all-btn-event-nav-69f4e13f11abc:hover {\n                background: linear-gradient(135deg, #d2381a, #FB283F);\n                color: white;\n                text-decoration: none;\n                transform: translateY(-3px);\n                box-shadow: 0 10px 30px rgba(210, 56, 26, 0.4);\n            }\n            \n            \/* No results message *\/\n            .no-events-message-event-nav-69f4e13f11abc {\n                text-align: center;\n                color: rgba(255, 255, 255, 0.8);\n                font-size: 18px;\n                padding: 60px 20px;\n                font-style: italic;\n                display: none;\n            }\n            .no-events-message-event-nav-69f4e13f11abc.show {\n                display: block;\n            }\n            \n            \/* Back to top button *\/\n            .back-to-top-event-nav-69f4e13f11abc {\n                position: sticky;\n                bottom: 20px;\n                left: 50%;\n                transform: translateX(-50%);\n                z-index: 100;\n                display: none;\n                margin-top: 40px;\n            }\n            .back-to-top-event-nav-69f4e13f11abc.visible {\n                display: block !important;\n            }\n            .back-to-top-event-nav-69f4e13f11abc button {\n                background: linear-gradient(135deg, #90EE90, #7FD67F);\n                border: 3px solid #2D5016;\n                border-radius: 25px;\n                color: #2D5016;\n                font-weight: bold;\n                font-size: 14px;\n                text-transform: uppercase;\n                letter-spacing: 0.5px;\n                padding: 12px 20px;\n                cursor: pointer;\n                box-shadow: 0 4px 15px rgba(0,0,0,0.2);\n                display: flex;\n                align-items: center;\n                gap: 8px;\n                font-family: inherit;\n                backdrop-filter: blur(10px);\n            }\n            .back-to-top-event-nav-69f4e13f11abc button:hover {\n                transform: translateY(-4px);\n                box-shadow: 0 8px 25px rgba(0,0,0,0.3);\n                background: linear-gradient(135deg, #7FD67F, #6BC66B);\n            }\n            \n            @media (max-width: 1200px) {\n                .event-tags-navigation {\n                    justify-content: flex-start;\n                    overflow-x: auto;\n                    padding: 10px 0;\n                    -webkit-overflow-scrolling: touch;\n                }\n                .event-tag-button {\n                    flex-shrink: 0;\n                    padding: 10px 20px;\n                    font-size: 12px;\n                }\n                .event-search-box {\n                    width: 150px;\n                    flex-shrink: 0;\n                }\n                .calendar-link {\n                    flex-shrink: 0;\n                }\n            }\n        <\/style><button class=\"event-tag-button active\" data-filter=\"all\">All Events<\/button><button class=\"event-tag-button\" data-filter=\"music\">Music<\/button><button class=\"event-tag-button\" data-filter=\"film\">Film<\/button><button class=\"event-tag-button\" data-filter=\"comedy-more\">Comedy &#038; More<\/button><button class=\"event-tag-button\" data-filter=\"community\">Community<\/button><div class=\"search-wrapper\"><span class=\"search-icon\">\n            <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#FB283F\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <circle cx=\"11\" cy=\"11\" r=\"8\"><\/circle>\n                <path d=\"m21 21-4.35-4.35\"><\/path>\n            <\/svg>\n        <\/span><input type=\"text\" class=\"event-search-box\" placeholder=\"Search events...\" id=\"event-search-input-event-nav-69f4e13f11abc\"><\/div><a href=\"https:\/\/projects.45press.com\/castro-theater\/calendar\/\" class=\"calendar-link\" title=\"View Calendar\">\n            <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"23\" height=\"25\" viewBox=\"0 0 23 25\" fill=\"none\">\n                <path d=\"M2.55556 25C1.85278 25 1.25116 24.7552 0.750694 24.2656C0.250232 23.776 0 23.1875 0 22.5V5C0 4.3125 0.250232 3.72396 0.750694 3.23438C1.25116 2.74479 1.85278 2.5 2.55556 2.5H3.83333V0H6.38889V2.5H16.6111V0H19.1667V2.5H20.4444C21.1472 2.5 21.7488 2.74479 22.2493 3.23438C22.7498 3.72396 23 4.3125 23 5V22.5C23 23.1875 22.7498 23.776 22.2493 24.2656C21.7488 24.7552 21.1472 25 20.4444 25H2.55556ZM2.55556 22.5H20.4444V10H2.55556V22.5ZM2.55556 7.5H20.4444V5H2.55556V7.5ZM11.5 15C11.138 15 10.8345 14.8802 10.5896 14.6406C10.3447 14.401 10.2222 14.1042 10.2222 13.75C10.2222 13.3958 10.3447 13.099 10.5896 12.8594C10.8345 12.6198 11.138 12.5 11.5 12.5C11.862 12.5 12.1655 12.6198 12.4104 12.8594C12.6553 13.099 12.7778 13.3958 12.7778 13.75C12.7778 14.1042 12.6553 14.401 12.4104 14.6406C12.1655 14.8802 11.862 15 11.5 15ZM6.38889 15C6.02685 15 5.72338 14.8802 5.47847 14.6406C5.23356 14.401 5.11111 14.1042 5.11111 13.75C5.11111 13.3958 5.23356 13.099 5.47847 12.8594C5.72338 12.6198 6.02685 12.5 6.38889 12.5C6.75093 12.5 7.0544 12.6198 7.29931 12.8594C7.54421 13.099 7.66667 13.3958 7.66667 13.75C7.66667 14.1042 7.54421 14.401 7.29931 14.6406C7.0544 14.8802 6.75093 15 6.38889 15ZM16.6111 15C16.2491 15 15.9456 14.8802 15.7007 14.6406C15.4558 14.401 15.3333 14.1042 15.3333 13.75C15.3333 13.3958 15.4558 13.099 15.7007 12.8594C15.9456 12.6198 16.2491 12.5 16.6111 12.5C16.9731 12.5 17.2766 12.6198 17.5215 12.8594C17.7664 13.099 17.8889 13.3958 17.8889 13.75C17.8889 14.1042 17.7664 14.401 17.5215 14.6406C17.2766 14.8802 16.9731 15 16.6111 15ZM11.5 20C11.138 20 10.8345 19.8802 10.5896 19.6406C10.3447 19.401 10.2222 19.1042 10.2222 18.75C10.2222 18.3958 10.3447 18.099 10.5896 17.8594C10.8345 17.6198 11.138 17.5 11.5 17.5C11.862 17.5 12.1655 17.6198 12.4104 17.8594C12.6553 18.099 12.7778 18.3958 12.7778 18.75C12.7778 19.1042 12.6553 19.401 12.4104 19.6406C12.1655 19.8802 11.862 20 11.5 20ZM6.38889 20C6.02685 20 5.72338 19.8802 5.47847 19.6406C5.23356 19.401 5.11111 19.1042 5.11111 18.75C5.11111 18.3958 5.23356 18.099 5.47847 17.8594C5.72338 17.6198 6.02685 17.5 6.38889 17.5C6.75093 17.5 7.0544 17.6198 7.29931 17.8594C7.54421 18.099 7.66667 18.3958 7.66667 18.75C7.66667 19.1042 7.54421 19.401 7.29931 19.6406C7.0544 19.8802 6.75093 20 6.38889 20ZM16.6111 20C16.2491 20 15.9456 19.8802 15.7007 19.6406C15.4558 19.401 15.3333 19.1042 15.3333 18.75C15.3333 18.3958 15.4558 18.099 15.7007 17.8594C15.9456 17.6198 16.2491 17.5 16.6111 17.5C16.9731 17.5 17.2766 17.6198 17.5215 17.8594C17.7664 18.099 17.8889 18.3958 17.8889 18.75C17.8889 19.1042 17.7664 19.401 17.5215 19.6406C17.2766 19.8802 16.9731 20 16.6111 20Z\" fill=\"#CCE8A5\"\/>\n            <\/svg>\n        <\/a><\/div><script>\n        document.addEventListener(\"DOMContentLoaded\", function() {\n            setTimeout(function() {\n                const navigation = document.getElementById(\"event-nav-69f4e13f11abc\");\n                if (!navigation) return;\n                \n                console.log(\"\ud83c\udfad Starting navigation setup\");\n                \n                \/\/ Find container and events - using your original logic\n                let container = navigation.parentElement;\n                let events = [];\n                let searchDepth = 0;\n                \n                while (container && searchDepth < 15) {\n                    const selectors = [\n                        \".wp-block-post\",\n                        \"[class*=\\\"tm_event\\\"]\", \n                        \"[data-post-index]\",\n                        \".post\",\n                        \"li[class*=\\\"post-\\\"]\",\n                        \"article\"\n                    ];\n                    \n                    for (const selector of selectors) {\n                        const foundEvents = Array.from(container.querySelectorAll(selector));\n                        if (foundEvents.length > 0) {\n                            events = foundEvents;\n                            console.log(\"\ud83c\udfaf Found\", events.length, \"events with:\", selector);\n                            break;\n                        }\n                    }\n                    \n                    if (events.length > 0) break;\n                    container = container.parentElement;\n                    searchDepth++;\n                }\n                \n                if (events.length === 0) {\n                    console.error(\"\u274c No events found\");\n                    return;\n                }\n                \n                \/\/ Filter out sidebar events - only work with main events\n                events = events.filter(event => {\n                    return !event.closest(\".sidebar-events, .four-events, .query-loop-just-announced\");\n                });\n                \n                console.log(\"\u2705 Found\", events.length, \"main events (excluding sidebar)\");\n                \n                \/\/ Get controls\n                const tagButtons = navigation.querySelectorAll(\".event-tag-button\");\n                const searchInput = document.getElementById(\"event-search-input-event-nav-69f4e13f11abc\");\n                \n                let currentFilter = \"all\";\n                let currentSearch = \"\";\n                let allEventsVisible = false;\n                const initialShowCount = 12;\n                let viewAllBtn = null;\n                let noEventsMsg = null;\n                let backToTopBtn = null;\n                \n                \/\/ Add classes and category detection\n                events.forEach((event, index) => {\n                    event.classList.add(\"nav-event-nav-69f4e13f11abc-event\");\n                    \n                    \/\/ Category detection\n                    let hasCategory = false;\n                    Array.from(event.classList).forEach(className => {\n                        if (className.startsWith(\"event_category-\")) {\n                            const category = className.replace(\"event_category-\", \"\");\n                            event.setAttribute(\"data-category\", category);\n                            hasCategory = true;\n                        }\n                    });\n                    \n                    \/\/ Fallback content-based detection\n                    if (!hasCategory) {\n                        const text = event.textContent.toLowerCase();\n                        const categoryKeywords = {\n                            \"music\": \"music\",\n                            \"concert\": \"music\", \n                            \"band\": \"music\",\n                            \"comedy\": \"comedy\",\n                            \"stand-up\": \"comedy\",\n                            \"comedian\": \"comedy\",\n                            \"arts\": \"arts-theatre\",\n                            \"theatre\": \"arts-theatre\",\n                            \"theater\": \"arts-theatre\",\n                            \"film\": \"film\",\n                            \"movie\": \"film\",\n                            \"community\": \"community\",\n                            \"sports\": \"sports\",\n                            \"miscellaneous\": \"miscellaneous\"\n                        };\n                        \n                        for (const [keyword, slug] of Object.entries(categoryKeywords)) {\n                            if (text.includes(keyword)) {\n                                event.setAttribute(\"data-category\", slug);\n                                break;\n                            }\n                        }\n                    }\n                });\n                \n                \/\/ Create View All button\n                function createViewAllButton() {\n                    if (!viewAllBtn) {\n                        viewAllBtn = document.createElement(\"button\");\n                        viewAllBtn.className = \"view-all-btn-event-nav-69f4e13f11abc\";\n                        viewAllBtn.textContent = \"View All Events\";\n                        container.insertAdjacentElement(\"afterend\", viewAllBtn);\n                        \n                        viewAllBtn.addEventListener(\"click\", function() {\n                            allEventsVisible = !allEventsVisible;\n                            filterEvents();\n                            \n                            if (!allEventsVisible) {\n                                navigation.scrollIntoView({ \n                                    behavior: \"smooth\", \n                                    block: \"start\",\n                                    inline: \"nearest\"\n                                });\n                            }\n                        });\n                    }\n                }\n                \n                \/\/ Create no events message\n                function createNoEventsMessage() {\n                    if (!noEventsMsg) {\n                        noEventsMsg = document.createElement(\"div\");\n                        noEventsMsg.className = \"no-events-message-event-nav-69f4e13f11abc\";\n                        noEventsMsg.innerHTML = \"No upcoming events in this category\";\n                        container.insertAdjacentElement(\"afterend\", noEventsMsg);\n                    }\n                }\n                \n                \/\/ Create back to top button\n                function createBackToTop() {\n                    if (!backToTopBtn) {\n                        backToTopBtn = document.createElement(\"div\");\n                        backToTopBtn.className = \"back-to-top-event-nav-69f4e13f11abc\";\n                        backToTopBtn.innerHTML = `\n                            <button type=\"button\">\n                                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"#2D5016\">\n                                    <path d=\"M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z\"\/>\n                                <\/svg>\n                                Back to Top\n                            <\/button>\n                        `;\n                        container.insertAdjacentElement(\"afterend\", backToTopBtn);\n                        \n                        backToTopBtn.querySelector(\"button\").addEventListener(\"click\", () => {\n                            navigation.scrollIntoView({ \n                                behavior: \"smooth\", \n                                block: \"start\",\n                                inline: \"nearest\"\n                            });\n                        });\n                    }\n                }\n                \n                \/\/ Simple filtering function with \"Comedy & More\" logic\n                function filterEvents() {\n                    let visibleCount = 0;\n                    let totalMatches = 0;\n                    \n                    console.log(\"\ud83d\udd04 Filtering:\", currentFilter, currentSearch);\n                    \n                    events.forEach((event) => {\n                        let shouldShow = true;\n                        \n                        \/\/ Category filter\n                        if (currentFilter !== \"all\") {\n                            const eventCategory = event.getAttribute(\"data-category\");\n                            \n                            if (currentFilter === \"comedy-more\") {\n                                \/\/ Show comedy, sports, arts-theatre, and miscellaneous\n                                const moreCategories = [\"comedy\", \"sports\", \"arts-theatre\", \"miscellaneous\"];\n                                if (!eventCategory || !moreCategories.includes(eventCategory)) {\n                                    shouldShow = false;\n                                }\n                            } else {\n                                \/\/ Regular category filtering\n                                if (!eventCategory || eventCategory !== currentFilter) {\n                                    shouldShow = false;\n                                }\n                            }\n                        }\n                        \n                        \/\/ Search filter\n                        if (currentSearch && shouldShow) {\n                            const eventText = event.textContent.toLowerCase();\n                            if (!eventText.includes(currentSearch.toLowerCase())) {\n                                shouldShow = false;\n                            }\n                        }\n                        \n                        if (shouldShow) {\n                            totalMatches++;\n                            \n                            if (allEventsVisible || visibleCount < initialShowCount) {\n                                event.style.display = \"\";\n                                event.classList.remove(\"nav-event-nav-69f4e13f11abc-hidden\");\n                                visibleCount++;\n                            } else {\n                                event.style.display = \"none\";\n                                event.classList.add(\"nav-event-nav-69f4e13f11abc-hidden\");\n                            }\n                        } else {\n                            event.style.display = \"none\";\n                            event.classList.add(\"nav-event-nav-69f4e13f11abc-hidden\");\n                        }\n                    });\n                    \n                    console.log(\"\u2705 Filter complete:\", totalMatches, \"matches,\", visibleCount, \"visible\");\n                    \n                    \/\/ Update controls\n                    updateControls(totalMatches, visibleCount);\n                }\n                \n                \/\/ Update UI controls\n                function updateControls(totalMatches, visibleCount) {\n                    \/\/ View All button\n                    if (viewAllBtn) {\n                        if (totalMatches > initialShowCount) {\n                            viewAllBtn.style.display = \"block\";\n                            viewAllBtn.textContent = allEventsVisible ? \n                                \"Show Less Events\" : \"View All Events\";\n                        } else {\n                            viewAllBtn.style.display = \"none\";\n                        }\n                    }\n                    \n                    \/\/ No events message\n                    if (noEventsMsg) {\n                        if (totalMatches === 0) {\n                            noEventsMsg.classList.add(\"show\");\n                        } else {\n                            noEventsMsg.classList.remove(\"show\");\n                        }\n                    }\n                    \n                    \/\/ Back to top - only visible when all events are shown\n                    if (backToTopBtn) {\n                        if (allEventsVisible && totalMatches > initialShowCount) {\n                            backToTopBtn.classList.add(\"visible\");\n                        } else {\n                            backToTopBtn.classList.remove(\"visible\");\n                        }\n                    }\n                }\n                \n                \/\/ Button event handlers\n                tagButtons.forEach(button => {\n                    button.addEventListener(\"click\", function(e) {\n                        e.preventDefault();\n                        \n                        if (this.classList.contains(\"active\")) return;\n                        \n                        currentFilter = this.getAttribute(\"data-filter\");\n                        allEventsVisible = false;\n                        \n                        console.log(\"\ud83c\udfaf Category selected:\", currentFilter);\n                        \n                        \/\/ Update active state\n                        tagButtons.forEach(btn => {\n                            btn.classList.remove(\"active\");\n                        });\n                        \n                        this.classList.add(\"active\");\n                        \n                        filterEvents();\n                    });\n                });\n                \n                \/\/ Search with debounce\n                let searchTimeout;\n                if (searchInput) {\n                    searchInput.addEventListener(\"input\", function() {\n                        clearTimeout(searchTimeout);\n                        searchTimeout = setTimeout(() => {\n                            currentSearch = this.value;\n                            allEventsVisible = false;\n                            filterEvents();\n                        }, 300);\n                    });\n                    \n                    searchInput.addEventListener(\"keydown\", function(e) {\n                        if (e.key === \"Escape\") {\n                            this.value = \"\";\n                            currentSearch = \"\";\n                            allEventsVisible = false;\n                            filterEvents();\n                        }\n                    });\n                }\n                \n                \/\/ Initialize everything\n                createViewAllButton();\n                createNoEventsMessage(); \n                createBackToTop();\n                \n                setTimeout(() => {\n                    filterEvents();\n                    console.log(\"\ud83d\ude80 Navigation ready!\");\n                }, 100);\n                \n            }, 800);\n        });\n        <\/script><\/div>\n\n\n<div class=\"kb-row-layout-wrap kb-row-layout-id1126_da9dbc-4d alignnone wp-block-kadence-rowlayout\"><div class=\"kt-row-column-wrap kt-has-2-columns kt-row-layout-left-golden kt-tab-layout-inherit kt-mobile-layout-row kt-row-valign-top\">\n\n<div class=\"wp-block-kadence-column kadence-column1126_b81521-fe\"><div class=\"kt-inside-inner-col\"><div class=\"kb-row-layout-wrap kb-row-layout-id1126_357046-06 alignnone wp-block-kadence-rowlayout\"><div class=\"kt-row-column-wrap kt-has-1-columns kt-row-layout-equal kt-tab-layout-inherit kt-mobile-layout-row kt-row-valign-top\">\n\n<div class=\"wp-block-kadence-column kadence-column1126_5d20b4-8a\"><div class=\"kt-inside-inner-col\">\n<div class=\"wp-block-query shows-query has-global-padding is-layout-constrained wp-container-core-query-is-layout-12243e0f wp-block-query-is-layout-constrained\"><\/div>\n<\/div><\/div>\n\n<\/div><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-kadence-column kadence-column1126_0c257c-9f kvs-sm-false just-announced-section\"><div class=\"kt-inside-inner-col\">\n<div class=\"wp-block-kadence-column kadence-column1126_9f11af-e1 kb-section-dir-vertical venue-info-toggle\"><div class=\"kt-inside-inner-col\">\n<div class=\"wp-block-kadence-column kadence-column1126_4a6771-18 kb-section-dir-vertical\"><div class=\"kt-inside-inner-col\">\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-3f8c44ea wp-block-group-is-layout-constrained\" style=\"padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--40)\">\n<h2 class=\"wp-block-heading cursive-text has-custom-color-3-color has-text-color has-link-color has-damion-font-family wp-elements-b095018e2b52abc4eb6da5e5d2e22b84\" style=\"font-size:3.7rem;font-style:normal;font-weight:400\">just<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left has-nineties-headliner-font-family\" style=\"font-size:2.5rem;font-style:normal;font-weight:400;letter-spacing:1px\">ANNOUNCED<\/h2>\n<\/div>\n\n\n\n<div class=\"wp-block-query announced-query sidebar-events is-layout-flow wp-block-query-is-layout-flow\"><\/div>\n<\/div><\/div>\n<\/div><\/div>\n<\/div><\/div>\n\n<\/div><\/div><\/div><\/div>\n\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1111","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Calendar - Castro Theatre<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/projects.45press.com\/castro-theater\/calendar\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Calendar - Castro Theatre\" \/>\n<meta property=\"og:url\" content=\"https:\/\/projects.45press.com\/castro-theater\/calendar\/\" \/>\n<meta property=\"og:site_name\" content=\"Castro Theatre\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-25T20:10:20+00:00\" \/>\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:\\\/\\\/projects.45press.com\\\/castro-theater\\\/calendar\\\/\",\"url\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/calendar\\\/\",\"name\":\"Calendar - Castro Theatre\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/#website\"},\"datePublished\":\"2025-09-17T14:49:36+00:00\",\"dateModified\":\"2025-09-25T20:10:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/calendar\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/calendar\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/calendar\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Calendar\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/#website\",\"url\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/\",\"name\":\"Castro Theatre\",\"description\":\"The long-awaited renovation and historic restoration are finally underway! Stay in-the-know and follow along for updates as we get a glow up!\",\"publisher\":{\"@id\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/#organization\",\"name\":\"Castro Theatre\",\"url\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/The-Castro-Core-Logo-Horizontal-Mint-on-Night.svg\",\"contentUrl\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/The-Castro-Core-Logo-Horizontal-Mint-on-Night.svg\",\"width\":593,\"height\":79,\"caption\":\"Castro Theatre\"},\"image\":{\"@id\":\"https:\\\/\\\/projects.45press.com\\\/castro-theater\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Calendar - Castro Theatre","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/projects.45press.com\/castro-theater\/calendar\/","og_locale":"en_US","og_type":"article","og_title":"Calendar - Castro Theatre","og_url":"https:\/\/projects.45press.com\/castro-theater\/calendar\/","og_site_name":"Castro Theatre","article_modified_time":"2025-09-25T20:10:20+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/projects.45press.com\/castro-theater\/calendar\/","url":"https:\/\/projects.45press.com\/castro-theater\/calendar\/","name":"Calendar - Castro Theatre","isPartOf":{"@id":"https:\/\/projects.45press.com\/castro-theater\/#website"},"datePublished":"2025-09-17T14:49:36+00:00","dateModified":"2025-09-25T20:10:20+00:00","breadcrumb":{"@id":"https:\/\/projects.45press.com\/castro-theater\/calendar\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/projects.45press.com\/castro-theater\/calendar\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/projects.45press.com\/castro-theater\/calendar\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/projects.45press.com\/castro-theater\/"},{"@type":"ListItem","position":2,"name":"Calendar"}]},{"@type":"WebSite","@id":"https:\/\/projects.45press.com\/castro-theater\/#website","url":"https:\/\/projects.45press.com\/castro-theater\/","name":"Castro Theatre","description":"The long-awaited renovation and historic restoration are finally underway! Stay in-the-know and follow along for updates as we get a glow up!","publisher":{"@id":"https:\/\/projects.45press.com\/castro-theater\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/projects.45press.com\/castro-theater\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/projects.45press.com\/castro-theater\/#organization","name":"Castro Theatre","url":"https:\/\/projects.45press.com\/castro-theater\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/projects.45press.com\/castro-theater\/#\/schema\/logo\/image\/","url":"https:\/\/projects.45press.com\/castro-theater\/wp-content\/uploads\/2025\/09\/The-Castro-Core-Logo-Horizontal-Mint-on-Night.svg","contentUrl":"https:\/\/projects.45press.com\/castro-theater\/wp-content\/uploads\/2025\/09\/The-Castro-Core-Logo-Horizontal-Mint-on-Night.svg","width":593,"height":79,"caption":"Castro Theatre"},"image":{"@id":"https:\/\/projects.45press.com\/castro-theater\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/projects.45press.com\/castro-theater\/wp-json\/wp\/v2\/pages\/1111","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/projects.45press.com\/castro-theater\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/projects.45press.com\/castro-theater\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/projects.45press.com\/castro-theater\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/projects.45press.com\/castro-theater\/wp-json\/wp\/v2\/comments?post=1111"}],"version-history":[{"count":9,"href":"https:\/\/projects.45press.com\/castro-theater\/wp-json\/wp\/v2\/pages\/1111\/revisions"}],"predecessor-version":[{"id":2007,"href":"https:\/\/projects.45press.com\/castro-theater\/wp-json\/wp\/v2\/pages\/1111\/revisions\/2007"}],"wp:attachment":[{"href":"https:\/\/projects.45press.com\/castro-theater\/wp-json\/wp\/v2\/media?parent=1111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}