{"id":9468,"date":"2026-08-22T03:28:43","date_gmt":"2026-08-22T00:28:43","guid":{"rendered":"https:\/\/russianschool.ae\/?page_id=9468"},"modified":"2026-10-03T08:40:44","modified_gmt":"2026-10-03T05:40:44","slug":"calendar","status":"publish","type":"page","link":"https:\/\/russianschool.ae\/ru\/calendar\/","title":{"rendered":"Calendar"},"content":{"rendered":"\n<!-- Tailwind CDN & Config -->\n<script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n<script>\n    tailwind.config = {\n        theme: {\n            extend: {\n                colors: {\n                    brand: {\n                        black: '#202124',\n                        red: '#f15d57',\n                        green: '#35a169',\n                        grey: '#cbd5e1',\n                        greyDark: '#64748b',\n                        white: '#FFFFFF',\n                        pastelGreen: '#4ade80',\n                        pastelBlue: '#60a5fa',\n                        pastelOrange: '#fbbf24',\n                        pastelPurple: '#c084fc'\n                    }\n                }\n            }\n        }\n    }\n<\/script>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Lato:wght@100;300;400;700;900&amp;display=swap\" rel=\"stylesheet\">\n\n<style>\n    :root {\n        --glass-bg: rgba(255, 255, 255, 0.84);\n        --glass-border: rgba(255, 255, 255, 0.7);\n        --glass-shadow: 0 20px 40px rgba(0, 0, 0, 0.04), inset 0 1px 0 rgba(255, 255, 255, 0.9);\n    }\n\n    .calendar-app-wrapper {\n        font-family: 'Lato', sans-serif;\n    }\n\n    \/* \u0410\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0440\u0443\u0433 *\/\n    .calendar-day-btn {\n        width: 100% !important;\n        max-width: 27px !important;\n        aspect-ratio: 1 \/ 1 !important;\n        height: auto !important;\n        border-radius: 50% !important;\n        margin: 0 auto;\n        display: flex !important;\n        flex-direction: column !important;\n        align-items: center !important;\n        justify-content: center !important;\n        padding: 0 !important;\n        position: relative;\n        box-sizing: border-box !important;\n    }\n\n    .day-num {\n        font-size: 10.5px;\n        line-height: 1 !important;\n        font-weight: 700;\n    }\n\n    \/* \u041c\u0438\u043a\u0440\u043e-\u0442\u043e\u0447\u043a\u0438 \u043f\u043e\u0434 \u0447\u0438\u0441\u043b\u043e\u043c *\/\n    .dots-row {\n        height: 3px;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 1.5px;\n        margin-top: 1.5px;\n    }\n\n    .glass-box {\n        background: var(--glass-bg) !important;\n        border: 1px solid var(--glass-border) !important;\n        border-radius: 24px !important;\n        box-shadow: var(--glass-shadow) !important;\n        backdrop-filter: blur(20px) !important;\n        -webkit-backdrop-filter: blur(20px) !important;\n    }\n\n    \/* \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f Scroll Reveal *\/\n    .rsad-reveal {\n        opacity: 0;\n        transform: translateY(35px);\n        transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1), transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);\n        will-change: opacity, transform;\n    }\n\n    .rsad-reveal.active {\n        opacity: 1;\n        transform: translateY(0);\n    }\n\n    .filter-btn.active {\n        background-color: #202124 !important;\n        color: #ffffff !important;\n        box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n    }\n\n    @media print {\n        @page {\n            size: landscape;\n            margin: 8mm;\n        }\n        body {\n            background-color: #ffffff !important;\n            padding: 0 !important;\n        }\n        .no-print, header, footer, .gdlr-core-header-wrap, .filter-container {\n            display: none !important;\n        }\n        .print-container {\n            max-width: 100% !important;\n            padding: 0 !important;\n            margin: 0 !important;\n            box-shadow: none !important;\n            border: none !important;\n            background: #ffffff !important;\n        }\n        .month-grid {\n            gap: 0.4rem !important;\n        }\n        .month-card {\n            border: 1px solid #e4e4e7 !important;\n            break-inside: avoid;\n            background: #ffffff !important;\n        }\n        .sidebar {\n            border-left: 1px solid #e4e4e7 !important;\n            padding-left: 1rem !important;\n            background: #ffffff !important;\n        }\n        .main-grid {\n            display: grid !important;\n            grid-template-columns: 3.2fr 1fr !important;\n            gap: 1rem !important;\n        }\n        .rsad-reveal {\n            opacity: 1 !important;\n            transform: none !important;\n        }\n    }\n\n    .editor-post-title,\n    .wp-block-post-title,\n    .entry-title,\n    .page-title,\n    h1.entry-title,\n    .entry-header {\n        display: none !important;\n        margin: 0 !important;\n        padding: 0 !important;\n        height: 0 !important;\n        visibility: hidden !important;\n    }\n<\/style>\n\n<div class=\"calendar-app-wrapper text-brand-black selection:bg-brand-red selection:text-brand-white my-6\">\n    <div class=\"print-container max-w-[96rem] mx-auto glass-box overflow-hidden\">\n        \n        <!-- Header -->\n        <header class=\"px-6 py-6 md:px-8 md:py-7 border-b border-white\/40 flex flex-col xl:flex-row justify-between items-start xl:items-center gap-6 bg-white\/50 backdrop-blur-md rsad-reveal\">\n            <div>\n                <div class=\"mb-1\">\n                    <h2 class=\"text-xs font-bold tracking-widest text-brand-greyDark uppercase\">The Russian School of Abu Dhabi<\/h2>\n                <\/div>\n                <h1 class=\"text-2xl md:text-3xl font-extrabold tracking-tight text-brand-black flex flex-wrap items-center gap-x-2\">\n                    <span>Academic Calendar<\/span> \n                    <span class=\"text-brand-red whitespace-nowrap\">2026\u20132027<\/span>\n                <\/h1>\n                <p class=\"text-brand-greyDark text-xs md:text-sm mt-1 flex items-center gap-1.5\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4 text-brand-red inline\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"><\/path><\/svg>\n                    <span>Events, Term Dates &amp; Activities for Students &amp; Families<\/span>\n                <\/p>\n            <\/div>\n\n            <!-- Controls: Filter & Print -->\n            <div class=\"flex flex-col sm:flex-row items-start sm:items-center gap-4 w-full xl:w-auto justify-between xl:justify-end\">\n                \n                <!-- Interactive Department Filter -->\n                <div class=\"filter-container flex items-center bg-white\/80 p-1.5 rounded-full border border-white\/90 shadow-sm backdrop-blur-md text-xs font-bold text-brand-greyDark\">\n                    <button type=\"button\" onclick=\"setDepartment('all')\" class=\"filter-btn active px-3.5 py-1.5 rounded-full transition-all duration-200\" id=\"filter-all\">All<\/button>\n                    <button type=\"button\" onclick=\"setDepartment('kg')\" class=\"filter-btn px-3.5 py-1.5 rounded-full transition-all duration-200\" id=\"filter-kg\">KG<\/button>\n                    <button type=\"button\" onclick=\"setDepartment('primary')\" class=\"filter-btn px-3.5 py-1.5 rounded-full transition-all duration-200\" id=\"filter-primary\">Primary<\/button>\n                    <button type=\"button\" onclick=\"setDepartment('secondary')\" class=\"filter-btn px-3.5 py-1.5 rounded-full transition-all duration-200\" id=\"filter-secondary\">Secondary<\/button>\n                <\/div>\n\n                <button onclick=\"window.print()\" class=\"no-print hidden md:flex items-center gap-2 bg-brand-black hover:bg-opacity-85 text-brand-white px-5 py-2.5 rounded-full text-xs md:text-sm font-semibold transition-all shadow-md hover:shadow-lg active:scale-95 whitespace-nowrap\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4 text-brand-red fill=\" none\"=\"\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h6a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z\"><\/path><\/svg>\n                    Print PDF\n                <\/button>\n            <\/div>\n        <\/header>\n\n        <!-- Legend Ribbon -->\n        <div class=\"px-6 py-3 border-b border-white\/40 bg-white\/40 backdrop-blur-sm flex flex-wrap items-center gap-x-5 gap-y-2 text-xs\">\n            <div class=\"flex items-center gap-1.5\">\n                <span class=\"w-2.5 h-2.5 rounded-full bg-brand-green shadow-sm shrink-0\"><\/span>\n                <span class=\"font-bold text-brand-black text-[11px]\">Term Dates<\/span>\n            <\/div>\n            <div class=\"flex items-center gap-1.5\">\n                <span class=\"w-2.5 h-2.5 rounded-full bg-brand-red shadow-sm shrink-0\"><\/span>\n                <span class=\"font-bold text-brand-black text-[11px]\">Public Holidays<\/span>\n            <\/div>\n            <div class=\"flex items-center gap-1.5\">\n                <span class=\"w-2.5 h-2.5 rounded-full bg-brand-grey shadow-sm shrink-0\"><\/span>\n                <span class=\"font-bold text-brand-black text-[11px]\">Breaks<\/span>\n            <\/div>\n            <span class=\"hidden sm:inline-block text-gray-300\">|<\/span>\n            <div class=\"flex items-center gap-1.5\">\n                <span class=\"w-2.5 h-2.5 rounded-full bg-brand-pastelGreen shadow-sm shrink-0\"><\/span>\n                <span class=\"font-semibold text-brand-greyDark text-[11px]\">Tests &amp; Assessments<\/span>\n            <\/div>\n            <div class=\"flex items-center gap-1.5\">\n                <span class=\"w-2.5 h-2.5 rounded-full bg-brand-pastelBlue shadow-sm shrink-0\"><\/span>\n                <span class=\"font-semibold text-brand-greyDark text-[11px]\">Tournaments &amp; Contests<\/span>\n            <\/div>\n            <div class=\"flex items-center gap-1.5\">\n                <span class=\"w-2.5 h-2.5 rounded-full bg-brand-pastelOrange shadow-sm shrink-0\"><\/span>\n                <span class=\"font-semibold text-brand-greyDark text-[11px]\">Shows &amp; Assemblies<\/span>\n            <\/div>\n            <div class=\"flex items-center gap-1.5\">\n                <span class=\"w-2.5 h-2.5 rounded-full bg-brand-pastelPurple shadow-sm shrink-0\"><\/span>\n                <span class=\"font-semibold text-brand-greyDark text-[11px]\">Academies &amp; Meetings<\/span>\n            <\/div>\n        <\/div>\n\n        <div class=\"p-4 md:p-6 lg:p-8 main-grid flex flex-col xl:flex-row gap-6 lg:gap-8 bg-transparent\">\n            \n            <!-- Calendar Grid Container -->\n            <div class=\"flex-1 rsad-reveal\">\n                <div id=\"calendar-container\" class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-3.5 md:gap-4 month-grid\">\n                <\/div>\n            <\/div>\n\n            <!-- Sidebar \/ Key Dates List -->\n            <aside class=\"sidebar w-full xl:w-80 shrink-0 flex flex-col gap-5 bg-white\/50 p-4 md:p-5 rounded-2xl border border-white\/60 backdrop-blur-md shadow-sm rsad-reveal\">\n                <div>\n                    <h3 class=\"text-sm md:text-base font-bold text-brand-black border-b-2 border-brand-red pb-2 mb-4 flex items-center justify-between\">\n                        <span id=\"sidebar-headline\">All Events &amp; Dates<\/span>\n                        <span class=\"text-xs font-semibold px-2 py-0.5 rounded-full bg-brand-black text-brand-white\" id=\"events-count\">0<\/span>\n                    <\/h3>\n                    <div id=\"events-list\" class=\"space-y-2.5 max-h-[750px] overflow-y-auto pr-1\">\n                    <\/div>\n                <\/div>\n                \n                <div class=\"mt-auto pt-3 border-t border-brand-grey\/40 text-[11px] text-brand-greyDark leading-relaxed\">\n                    <p class=\"font-medium text-brand-black\/70\">* Click on any marked day in the calendar to view its complete schedule.<\/p>\n                <\/div>\n            <\/aside>\n            \n        <\/div>\n    <\/div>\n\n    <!-- Modal Popup -->\n    <div id=\"event-modal\" class=\"fixed inset-0 z-50 hidden bg-black\/40 backdrop-blur-sm opacity-0 transition-opacity duration-300 no-print flex items-center justify-center p-4\">\n        <div class=\"relative glass-box text-left transform transition-all w-full max-w-lg p-6\" onclick=\"event.stopPropagation()\">\n            <div class=\"flex items-start justify-between mb-4\">\n                <div>\n                    <span class=\"text-[11px] font-bold text-brand-greyDark uppercase tracking-wider\">Scheduled Events<\/span>\n                    <h3 class=\"text-lg md:text-xl font-black text-brand-black\" id=\"modal-date-title\"><\/h3>\n                <\/div>\n                <button type=\"button\" onclick=\"closeModal()\" class=\"text-gray-400 hover:text-brand-red transition-colors focus:outline-none bg-white\/80 hover:bg-red-50 p-1.5 rounded-full shadow-sm\">\n                    <svg class=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"><\/path>\n                    <\/svg>\n                <\/button>\n            <\/div>\n            <div class=\"space-y-2.5 max-h-[60vh] overflow-y-auto pr-1 mb-5\" id=\"modal-events-list\"><\/div>\n            <button type=\"button\" onclick=\"closeModal()\" class=\"w-full inline-flex justify-center rounded-full px-4 py-3 bg-brand-black text-xs md:text-sm font-bold text-brand-white hover:bg-opacity-85 transition-colors focus:outline-none shadow-md\">\n                Close\n            <\/button>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n    (function() {\n        const academicYearStart = new Date(2026, 7);\n        const monthsToRender = 13;\n        let activeDepartment = 'all';\n\n        const fillStyles = {\n            green_fill: 'bg-brand-green text-brand-white font-bold rounded-full shadow-xs z-10 relative ring-1 ring-brand-green\/40',\n            red_fill: 'bg-brand-red text-brand-white font-bold rounded-full shadow-xs z-10 relative ring-1 ring-brand-red\/40',\n            grey_fill: 'bg-brand-grey text-slate-800 font-bold rounded-full shadow-xs z-10 relative ring-1 ring-brand-greyDark\/20'\n        };\n\n        const dotStyles = {\n            academic: 'bg-brand-pastelGreen',\n            contest: 'bg-brand-pastelBlue',\n            event: 'bg-brand-pastelOrange',\n            meeting: 'bg-brand-pastelPurple'\n        };\n\n        const deptTags = {\n            all: { label: 'All School', bg: 'bg-gray-100 text-gray-700' },\n            kg: { label: 'Kindergarten', bg: 'bg-emerald-50 text-emerald-700 border border-emerald-200' },\n            primary: { label: 'Primary', bg: 'bg-amber-50 text-amber-700 border border-amber-200' },\n            secondary: { label: 'Secondary', bg: 'bg-indigo-50 text-indigo-700 border border-indigo-200' }\n        };\n\n        const events = [\n            \/\/ OFFICIAL TERM DATES & BREAKS (FILLS)\n            { start: '2026-08-28', end: '2026-08-28', display: 'fill', type: 'red_fill', section: 'all', title: \"Prophet Muhammad's Birthday\" },\n            { start: '2026-08-31', end: '2026-08-31', display: 'fill', type: 'green_fill', section: 'all', title: 'Academic Year Beginning [Term 1 Starts]' },\n            { start: '2026-10-12', end: '2026-10-16', display: 'fill', type: 'grey_fill', section: 'all', title: 'Mid Term Break 1 for Students' },\n            { start: '2026-12-02', end: '2026-12-03', display: 'fill', type: 'red_fill', section: 'all', title: 'Eid Al Etihad [UAE National Day]' },\n            { start: '2026-12-11', end: '2026-12-11', display: 'fill', type: 'green_fill', section: 'all', title: 'Term 1 for Students Ends' },\n            { start: '2026-12-14', end: '2027-01-01', display: 'fill', type: 'grey_fill', section: 'all', title: 'Winter Break for Students' },\n            { start: '2027-01-01', end: '2027-01-01', display: 'fill', type: 'red_fill', section: 'all', title: 'New Year' },\n            { start: '2027-01-04', end: '2027-01-04', display: 'fill', type: 'green_fill', section: 'all', title: 'Term 2 for Students Starts' },\n            { start: '2027-03-08', end: '2027-03-12', display: 'fill', type: 'red_fill', section: 'all', title: 'Eid al-Fitr Holiday' },\n            { start: '2027-04-02', end: '2027-04-02', display: 'fill', type: 'green_fill', section: 'all', title: 'Term 2 for Students Ends' },\n            { start: '2027-04-05', end: '2027-04-09', display: 'fill', type: 'grey_fill', section: 'all', title: 'Spring Break for Students' },\n            { start: '2027-04-12', end: '2027-04-12', display: 'fill', type: 'green_fill', section: 'all', title: 'Term 3 for Students Starts' },\n            { start: '2027-05-14', end: '2027-05-18', display: 'fill', type: 'red_fill', section: 'all', title: 'Day of Arafat, Eid al-Adha' },\n            { start: '2027-06-07', end: '2027-06-07', display: 'fill', type: 'red_fill', section: 'all', title: 'Islamic New Year' },\n            { start: '2027-07-02', end: '2027-07-02', display: 'fill', type: 'green_fill', section: 'all', title: 'Academic Year for Students Ends' },\n            { start: '2027-07-05', end: '2027-08-27', display: 'fill', type: 'grey_fill', section: 'all', title: 'Summer Break for Students' },\n            { start: '2027-08-13', end: '2027-08-13', display: 'fill', type: 'red_fill', section: 'all', title: \"Prophet Muhammad's Birthday\" },\n\n            \/\/ SEPTEMBER 2026\n            { start: '2026-09-01', end: '2026-09-01', display: 'dot', type: 'event', section: 'all', title: 'Official Assembly & First Bell' },\n            { start: '2026-09-01', end: '2026-09-01', display: 'dot', type: 'meeting', section: 'kg', title: 'Lessons with Parents' },\n            { start: '2026-09-01', end: '2026-09-01', display: 'dot', type: 'event', section: 'secondary', title: 'Flag Raising Ceremony (RF Council \/ Gr 12)' },\n            { start: '2026-09-03', end: '2026-09-03', display: 'dot', type: 'meeting', section: 'kg', title: 'Parent Meetings' },\n            { start: '2026-09-03', end: '2026-09-03', display: 'dot', type: 'event', section: 'kg', title: 'Extra-curricular Fair \/ Food Tasting' },\n            { start: '2026-09-04', end: '2026-09-04', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2026-09-07', end: '2026-09-07', display: 'dot', type: 'academic', section: 'primary', title: 'Whole School Writing Day (Russian)' },\n            { start: '2026-09-07', end: '2026-09-07', display: 'dot', type: 'academic', section: 'secondary', title: 'Whole School Writing Day (Russian) Lesson 1' },\n            { start: '2026-09-08', end: '2026-09-08', display: 'dot', type: 'event', section: 'primary', title: 'Languages of the Peoples of Russia Day' },\n            { start: '2026-09-08', end: '2026-09-08', display: 'dot', type: 'contest', section: 'all', title: 'Chess Qualifying Round (Stage 1)' },\n            { start: '2026-09-08', end: '2026-09-08', display: 'dot', type: 'contest', section: 'secondary', title: 'Arabic Writing Competition Announcement' },\n            { start: '2026-09-09', end: '2026-09-09', display: 'dot', type: 'contest', section: 'primary', title: 'Arabic Writing & Dictation Competition Announcement' },\n            { start: '2026-09-10', end: '2026-09-10', display: 'dot', type: 'contest', section: 'all', title: 'Chess Qualifying Round (Stage 2)' },\n            { start: '2026-09-10', end: '2026-09-10', display: 'dot', type: 'event', section: 'primary', title: 'Pinboards Filled with Students\u2019 Works' },\n            { start: '2026-09-11', end: '2026-09-11', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2026-09-14', end: '2026-09-14', display: 'dot', type: 'academic', section: 'secondary', title: '\"How to set goals\" Workshop' },\n            { start: '2026-09-18', end: '2026-09-18', display: 'dot', type: 'event', section: 'all', title: 'Assembly (Culture)' },\n            { start: '2026-09-21', end: '2026-09-21', display: 'dot', type: 'academic', section: 'kg', title: 'Baseline Assessments' },\n            { start: '2026-09-21', end: '2026-09-21', display: 'dot', type: 'meeting', section: 'kg', title: 'Parents Committee Meeting' },\n            { start: '2026-09-23', end: '2026-09-23', display: 'dot', type: 'contest', section: 'primary', title: 'Quiz Please! (Inter-age event)' },\n           \n            { start: '2026-09-24', end: '2026-09-24', display: 'dot', type: 'meeting', section: 'kg', title: 'Parent Academy \u2014 Inclusion Team' },\n            { start: '2026-09-25', end: '2026-09-25', display: 'dot', type: 'event', section: 'all', title: 'Assembly (Culture)' },\n            { start: '2026-09-30', end: '2026-09-30', display: 'dot', type: 'meeting', section: 'kg', title: 'Step-Up Activity (Grade 1A & 2A)' },\n\n            \/\/ OCTOBER 2026\n            { start: '2026-10-01', end: '2026-10-01', display: 'dot', type: 'event', section: 'primary', title: 'International Day of Older Persons' },\n            { start: '2026-10-01', end: '2026-10-01', display: 'dot', type: 'academic', section: 'secondary', title: 'Food Science Challenge (Grades 9\u201312)' },\n            { start: '2026-10-02', end: '2026-10-02', display: 'dot', type: 'event', section: 'kg', title: 'Self-Governance Day (Grade 11\u201312)' },\n            { start: '2026-10-02', end: '2026-10-02', display: 'dot', type: 'event', section: 'all', title: 'World Animal Day' },\n            { start: '2026-10-02', end: '2026-10-02', display: 'dot', type: 'event', section: 'all', title: 'Assembly (Culture)' },\n            { start: '2026-10-05', end: '2026-10-05', display: 'dot', type: 'event', section: 'all', title: \"Teachers' Day Celebration \/ RSAD is 5 Years! (HIGH FIVE)\" },\n            { start: '2026-10-07', end: '2026-10-07', display: 'dot', type: 'contest', section: 'secondary', title: 'Technology Quiz: From ARPANET to AI' },\n            { start: '2026-10-09', end: '2026-10-09', display: 'dot', type: 'event', section: 'all', title: 'Assembly (Culture)' },\n            { start: '2026-10-19', end: '2026-10-23', display: 'dot', type: 'event', section: 'kg', title: 'KG Theme Week' },\n            { start: '2026-10-19', end: '2026-10-19', display: 'dot', type: 'event', section: 'all', title: \"Russian Fathers Day (\u0420\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u044b \u043e \u0432\u0430\u0436\u043d\u043e\u043c)\" },\n            { start: '2026-10-19', end: '2026-10-19', display: 'dot', type: 'event', section: 'secondary', title: 'Lyceum Day' },\n            { start: '2026-10-20', end: '2026-10-22', display: 'dot', type: 'academic', section: 'secondary', title: 'Russian Literature Week' },\n            { start: '2026-10-21', end: '2026-10-21', display: 'dot', type: 'event', section: 'primary', title: 'Inter-age Event' },\n            { start: '2026-10-22', end: '2026-10-22', display: 'dot', type: 'meeting', section: 'kg', title: 'Parent Academy (08:20\u201309:40)' },\n            { start: '2026-10-23', end: '2026-10-23', display: 'dot', type: 'event', section: 'all', title: 'Assembly (Culture)' },\n            { start: '2026-10-26', end: '2026-10-26', display: 'dot', type: 'meeting', section: 'primary', title: 'Individual Meeting with Parents' },\n            { start: '2026-10-26', end: '2026-10-26', display: 'dot', type: 'event', section: 'primary', title: 'International School Library Day' },\n            { start: '2026-10-26', end: '2026-10-27', display: 'dot', type: 'contest', section: 'all', title: 'Oral Counting Tournament (Stage 1)' },\n            { start: '2026-10-27', end: '2026-10-27', display: 'dot', type: 'event', section: 'kg', title: 'Healthy Eating Day' },\n            { start: '2026-10-28', end: '2026-10-28', display: 'dot', type: 'event', section: 'primary', title: 'Grade 2 Initiation' },\n            { start: '2026-10-28', end: '2026-10-28', display: 'dot', type: 'contest', section: 'secondary', title: 'Oral Counting Tournament (Stage 2)' },\n            { start: '2026-10-29', end: '2026-10-29', display: 'dot', type: 'contest', section: 'primary', title: 'Oral Counting Tournament (Stage 2)' },\n            { start: '2026-10-30', end: '2026-10-30', display: 'dot', type: 'event', section: 'kg', title: 'Decorate Class with UAE Symbols' },\n            { start: '2026-10-30', end: '2026-10-30', display: 'dot', type: 'event', section: 'secondary', title: 'RSAD 30x30 Challenge' },\n            { start: '2026-10-30', end: '2026-10-30', display: 'dot', type: 'event', section: 'all', title: 'Assembly (Culture)' },\n\n            \/\/ NOVEMBER 2026\n            { start: '2026-11-02', end: '2026-11-02', display: 'dot', type: 'event', section: 'kg', title: 'ADHD Awareness Day Activities' },\n            { start: '2026-11-02', end: '2026-11-03', display: 'dot', type: 'event', section: 'all', title: 'UAE Flag Day' },\n            { start: '2026-11-02', end: '2026-11-03', display: 'dot', type: 'contest', section: 'primary', title: 'Spelling Bee (Primary)' },\n            { start: '2026-11-03', end: '2026-11-03', display: 'dot', type: 'contest', section: 'secondary', title: 'Spelling Bee (Secondary)' },\n            { start: '2026-11-04', end: '2026-11-04', display: 'dot', type: 'event', section: 'kg', title: 'Russian Unity Day' },\n            { start: '2026-11-06', end: '2026-11-06', display: 'dot', type: 'event', section: 'all', title: 'Assembly (Values)' },\n            { start: '2026-11-06', end: '2026-11-06', display: 'dot', type: 'event', section: 'secondary', title: 'HSBC Golf Trip (Classes 7 & 9)' },\n            { start: '2026-11-09', end: '2026-11-13', display: 'dot', type: 'academic', section: 'kg', title: 'KG Assessment Week' },\n            { start: '2026-11-09', end: '2026-11-13', display: 'dot', type: 'academic', section: 'secondary', title: 'RSE Mock Tests & Mock Essay' },\n            { start: '2026-11-10', end: '2026-11-10', display: 'dot', type: 'academic', section: 'secondary', title: 'Module Test: Russian (10:00)' },\n            { start: '2026-11-11', end: '2026-11-11', display: 'dot', type: 'academic', section: 'secondary', title: 'Module Test: Maths (10:00)' },\n            { start: '2026-11-11', end: '2026-11-11', display: 'dot', type: 'event', section: 'primary', title: 'International Energy Saving Day' },\n            { start: '2026-11-12', end: '2026-11-12', display: 'dot', type: 'academic', section: 'secondary', title: 'Module Test: Science (10:00)' },\n            { start: '2026-11-13', end: '2026-11-13', display: 'dot', type: 'event', section: 'all', title: 'Assembly (Values)' },\n            { start: '2026-11-16', end: '2026-11-20', display: 'dot', type: 'event', section: 'kg', title: 'Abu Dhabi Early Childhood Week' },\n            { start: '2026-11-16', end: '2026-11-16', display: 'dot', type: 'academic', section: 'secondary', title: 'Module Test: English' },\n            { start: '2026-11-16', end: '2026-11-16', display: 'dot', type: 'event', section: 'secondary', title: 'Tolerance Day' },\n            { start: '2026-11-17', end: '2026-11-17', display: 'dot', type: 'academic', section: 'secondary', title: 'Module Test: MoE' },\n            { start: '2026-11-17', end: '2026-11-17', display: 'dot', type: 'meeting', section: 'kg', title: 'Step-Up Activity (Gr 1B & 2B)' },\n            { start: '2026-11-17', end: '2026-11-17', display: 'dot', type: 'event', section: 'kg', title: 'Pre KG Winter Show' },\n            { start: '2026-11-18', end: '2026-11-18', display: 'dot', type: 'event', section: 'kg', title: 'KG 1A Winter Show' },\n            { start: '2026-11-19', end: '2026-11-19', display: 'dot', type: 'event', section: 'kg', title: 'KG 1B Winter Show' },\n            { start: '2026-11-19', end: '2026-11-19', display: 'dot', type: 'meeting', section: 'kg', title: 'Parent Academy \u2014 Inclusion & Curriculum' },\n            { start: '2026-11-20', end: '2026-11-20', display: 'dot', type: 'event', section: 'kg', title: 'Family Fun Day' },\n            { start: '2026-11-20', end: '2026-11-20', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2026-11-24', end: '2026-11-24', display: 'dot', type: 'event', section: 'kg', title: 'KG 2 Winter Show' },\n            { start: '2026-11-24', end: '2026-11-24', display: 'dot', type: 'event', section: 'primary', title: 'Inter-age Event' },\n            { start: '2026-11-25', end: '2026-11-25', display: 'dot', type: 'event', section: 'primary', title: 'Grade 1A Winter Show' },\n            { start: '2026-11-26', end: '2026-11-26', display: 'dot', type: 'event', section: 'primary', title: 'Grade 1B Winter Show' },\n            { start: '2026-11-26', end: '2026-11-26', display: 'dot', type: 'academic', section: 'primary', title: 'Project Topics Presentation (Gr 1\u20135)' },\n            { start: '2026-11-26', end: '2026-11-26', display: 'dot', type: 'event', section: 'secondary', title: 'Science or Myth?' },\n            { start: '2026-11-27', end: '2026-11-27', display: 'dot', type: 'event', section: 'all', title: \"Russian Mother's Day & Assembly\" },\n\n            \/\/ DECEMBER 2026\n            { start: '2026-12-07', end: '2026-12-07', display: 'dot', type: 'academic', section: 'all', title: 'Term Test: MoE' },\n            { start: '2026-12-08', end: '2026-12-08', display: 'dot', type: 'academic', section: 'all', title: 'Term Test: Science' },\n            { start: '2026-12-09', end: '2026-12-09', display: 'dot', type: 'academic', section: 'all', title: 'Term Test: Maths' },\n            { start: '2026-12-10', end: '2026-12-10', display: 'dot', type: 'event', section: 'primary', title: 'PRIMARY WINTER SHOW (ENS)' },\n            { start: '2026-12-10', end: '2026-12-10', display: 'dot', type: 'event', section: 'kg', title: 'Winter Jumper Day' },\n            { start: '2026-12-10', end: '2026-12-10', display: 'dot', type: 'meeting', section: 'kg', title: 'Parent Academy \u2014 Inclusion Team' },\n            { start: '2026-12-11', end: '2026-12-11', display: 'dot', type: 'event', section: 'all', title: 'School Term 1 Assembly' },\n\n            \/\/ JANUARY 2027\n            { start: '2027-01-06', end: '2027-01-06', display: 'dot', type: 'contest', section: 'primary', title: 'What? Where? When? (Grades 4 & 5)' },\n            { start: '2027-01-08', end: '2027-01-08', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2027-01-11', end: '2027-01-11', display: 'dot', type: 'academic', section: 'all', title: 'Whole School Writing Day 2 (English)' },\n            { start: '2027-01-12', end: '2027-01-12', display: 'dot', type: 'event', section: 'kg', title: 'Teddy Bears Picnic' },\n            { start: '2027-01-12', end: '2027-01-12', display: 'dot', type: 'event', section: 'primary', title: 'Winter Exhibition & Storytelling' },\n            { start: '2027-01-15', end: '2027-01-15', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2027-01-18', end: '2027-01-18', display: 'dot', type: 'contest', section: 'all', title: 'Arabic Calligraphy Competition (TBC)' },\n            { start: '2027-01-19', end: '2027-01-19', display: 'dot', type: 'event', section: 'primary', title: 'Arabic Music Integration' },\n            { start: '2027-01-19', end: '2027-01-19', display: 'dot', type: 'contest', section: 'secondary', title: 'Model UN: Global Issues Debate' },\n            { start: '2027-01-20', end: '2027-01-20', display: 'dot', type: 'event', section: 'primary', title: 'Inter-age Event' },\n            { start: '2027-01-20', end: '2027-01-20', display: 'dot', type: 'academic', section: 'secondary', title: 'Educational & Fun Activities \/ Arabic' },\n            { start: '2027-01-21', end: '2027-01-21', display: 'dot', type: 'event', section: 'kg', title: 'Educational & Fun Activities' },\n            { start: '2027-01-21', end: '2027-01-21', display: 'dot', type: 'contest', section: 'secondary', title: 'Debate Competition \/ Arabic Classes' },\n            { start: '2027-01-22', end: '2027-01-22', display: 'dot', type: 'contest', section: 'primary', title: 'Handwriting Contest (Handwriting Day)' },\n            { start: '2027-01-22', end: '2027-01-22', display: 'dot', type: 'event', section: 'secondary', title: 'Arabic Music Integration' },\n            { start: '2027-01-22', end: '2027-01-22', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2027-01-28', end: '2027-01-28', display: 'dot', type: 'event', section: 'primary', title: 'International Data Protection Day' },\n            { start: '2027-01-30', end: '2027-01-30', display: 'dot', type: 'event', section: 'all', title: 'Saturday Assembly' },\n\n            \/\/ FEBRUARY 2027\n            { start: '2027-02-01', end: '2027-02-01', display: 'dot', type: 'contest', section: 'all', title: 'Arabic Writing & Dictation Competition Due' },\n            { start: '2027-02-03', end: '2027-02-03', display: 'dot', type: 'event', section: 'primary', title: 'ABC Celebration' },\n            { start: '2027-02-05', end: '2027-02-05', display: 'dot', type: 'academic', section: 'primary', title: 'Primary Poster Conference' },\n            { start: '2027-02-05', end: '2027-02-05', display: 'dot', type: 'event', section: 'all', title: 'Beginning of Ramadan Assembly' },\n            { start: '2027-02-08', end: '2027-02-08', display: 'dot', type: 'event', section: 'all', title: 'Ramadan Starts' },\n            { start: '2027-02-12', end: '2027-02-12', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2027-02-15', end: '2027-02-15', display: 'dot', type: 'event', section: 'kg', title: 'KG Theme Week' },\n            { start: '2027-02-15', end: '2027-02-15', display: 'dot', type: 'event', section: 'primary', title: 'International Book Giving Day' },\n            { start: '2027-02-15', end: '2027-02-18', display: 'dot', type: 'contest', section: 'all', title: 'Speed Typing Championship (Heats & Finals)' },\n            { start: '2027-02-16', end: '2027-02-16', display: 'dot', type: 'contest', section: 'all', title: 'Quran Reading Competition' },\n            { start: '2027-02-16', end: '2027-02-16', display: 'dot', type: 'event', section: 'kg', title: '100 Days of School' },\n            { start: '2027-02-19', end: '2027-02-19', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2027-02-24', end: '2027-02-24', display: 'dot', type: 'contest', section: 'all', title: 'Quran Competition' },\n            { start: '2027-02-26', end: '2027-02-26', display: 'dot', type: 'event', section: 'primary', title: 'Arctic Day (Total White Dress Code)' },\n            { start: '2027-02-26', end: '2027-02-26', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n\n            \/\/ MARCH 2027\n            { start: '2027-03-03', end: '2027-03-03', display: 'dot', type: 'event', section: 'primary', title: \"World Writers' Day \/ 'Favourite author' Expo\" },\n            { start: '2027-03-05', end: '2027-03-05', display: 'dot', type: 'event', section: 'all', title: 'Eid Al Fitr Assembly \/ Ramadan Ends' },\n            { start: '2027-03-16', end: '2027-03-17', display: 'dot', type: 'meeting', section: 'kg', title: 'Grade 1 visits Tutor Time in Primary (Step Up)' },\n            { start: '2027-03-18', end: '2027-03-18', display: 'dot', type: 'event', section: 'primary', title: 'Inter-age Event' },\n            { start: '2027-03-19', end: '2027-03-19', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2027-03-22', end: '2027-03-26', display: 'dot', type: 'academic', section: 'kg', title: 'KG Assessment Week' },\n            { start: '2027-03-22', end: '2027-03-22', display: 'dot', type: 'event', section: 'secondary', title: 'World Water Day Challenge' },\n            { start: '2027-03-23', end: '2027-03-23', display: 'dot', type: 'event', section: 'kg', title: 'Rock n Roll Day' },\n            { start: '2027-03-25', end: '2027-03-25', display: 'dot', type: 'meeting', section: 'kg', title: 'Parent Academy \u2014 Inclusion' },\n            { start: '2027-03-26', end: '2027-03-26', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n\n            \/\/ APRIL 2027\n            { start: '2027-04-02', end: '2027-04-02', display: 'dot', type: 'event', section: 'all', title: 'Final Assembly of Term 2' },\n            { start: '2027-04-12', end: '2027-04-12', display: 'dot', type: 'event', section: 'secondary', title: 'Space Day (Grades 6\u20138)' },\n            { start: '2027-04-13', end: '2027-04-13', display: 'dot', type: 'event', section: 'primary', title: 'World Health Day Exhibition' },\n            { start: '2027-04-13', end: '2027-04-13', display: 'dot', type: 'event', section: 'primary', title: 'Cosmonautics Day (Inter-age event)' },\n            { start: '2027-04-16', end: '2027-04-16', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2027-04-19', end: '2027-04-19', display: 'dot', type: 'academic', section: 'all', title: 'Whole School Writing Day 3 (Arabic)' },\n            { start: '2027-04-21', end: '2027-04-21', display: 'dot', type: 'academic', section: 'secondary', title: 'TED Talks: Library Day' },\n            { start: '2027-04-22', end: '2027-04-22', display: 'dot', type: 'event', section: 'all', title: 'Earth Day Activities' },\n            { start: '2027-04-23', end: '2027-04-23', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2027-04-27', end: '2027-04-29', display: 'dot', type: 'event', section: 'all', title: 'STU Photo Session Days' },\n            { start: '2027-04-29', end: '2027-04-29', display: 'dot', type: 'event', section: 'primary', title: 'Vocal Concert (16:00)' },\n            { start: '2027-04-30', end: '2027-04-30', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n\n            \/\/ MAY 2027\n            { start: '2027-05-03', end: '2027-05-03', display: 'dot', type: 'event', section: 'all', title: 'STU Catch-up Day for Absentees' },\n            { start: '2027-05-06', end: '2027-05-06', display: 'dot', type: 'event', section: 'kg', title: 'Victory Day Presentations' },\n            { start: '2027-05-07', end: '2027-05-07', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2027-05-11', end: '2027-05-11', display: 'dot', type: 'contest', section: 'kg', title: 'Spelling Bee (KG)' },\n            { start: '2027-05-14', end: '2027-05-14', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2027-05-20', end: '2027-05-20', display: 'dot', type: 'contest', section: 'secondary', title: 'Map Challenge' },\n            { start: '2027-05-21', end: '2027-05-21', display: 'dot', type: 'event', section: 'secondary', title: 'Good Luck Day: Assembly' },\n            { start: '2027-05-24', end: '2027-05-28', display: 'dot', type: 'event', section: 'kg', title: 'KG Theme Week' },\n            { start: '2027-05-24', end: '2027-05-24', display: 'dot', type: 'event', section: 'primary', title: 'Inter-age Event' },\n            { start: '2027-05-24', end: '2027-05-26', display: 'dot', type: 'contest', section: 'secondary', title: 'Abacus Math Game Tournaments' },\n            { start: '2027-05-27', end: '2027-05-27', display: 'dot', type: 'meeting', section: 'all', title: 'Step Up Day (Gr 1 to Primary, Gr 5 to Secondary)' },\n            { start: '2027-05-27', end: '2027-05-27', display: 'dot', type: 'event', section: 'primary', title: 'Russian Library Day' },\n            { start: '2027-05-28', end: '2027-05-28', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            \/\/ \u041f\u0435\u0440\u0438\u043e\u0434 \u0413\u0418\u0410-9 \u0438 \u0413\u0418\u0410-11: \u0441 31 \u043c\u0430\u044f \u043f\u043e 25 \u0438\u044e\u043d\u044f\n            { start: '2027-05-31', end: '2027-06-25', display: 'dot', type: 'academic', section: 'secondary', title: 'State Exams: GIA-9 & GIA-11 (OGE \/ EGE)' },\n\n            \/\/ JUNE 2027\n            { start: '2027-06-04', end: '2027-06-04', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2027-06-08', end: '2027-06-08', display: 'dot', type: 'event', section: 'kg', title: 'Career Day' },\n            { start: '2027-06-11', end: '2027-06-11', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2027-06-18', end: '2027-06-18', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n            { start: '2027-06-21', end: '2027-06-21', display: 'dot', type: 'academic', section: 'kg', title: 'KG Assessments' },\n            { start: '2027-06-22', end: '2027-06-22', display: 'dot', type: 'event', section: 'kg', title: 'T-shirt Painting Day' },\n            { start: '2027-06-25', end: '2027-06-25', display: 'dot', type: 'event', section: 'all', title: 'Weekly Assembly' },\n\n            \/\/ JULY 2027\n            { start: '2027-07-02', end: '2027-07-02', display: 'dot', type: 'event', section: 'primary', title: 'Splash Day Celebration' },\n            { start: '2027-07-02', end: '2027-07-02', display: 'dot', type: 'event', section: 'all', title: 'Final End of Year School Assembly' }\n        ];\n\n        function parseDateString(dateStr) {\n            const parts = dateStr.split('-');\n            return new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10));\n        }\n\n        function formatTitle(title) {\n            return title.replace(\/\\[(.*?)\\]\/g, '<span class=\"font-normal text-gray-500\">[$1]<\/span>');\n        }\n\n        function getFilteredEvents() {\n            if (activeDepartment === 'all') return events;\n            return events.filter(e => e.section === 'all' || e.section === activeDepartment || e.display === 'fill');\n        }\n\n        function getEventsForDate(date) {\n            const checkTime = new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n            const currentEvents = getFilteredEvents();\n            let matchedEvents = [];\n            for (let i = 0; i < currentEvents.length; i++) {\n                const ev = currentEvents[i];\n                const start = parseDateString(ev.start).getTime();\n                const end = parseDateString(ev.end).getTime();\n                if (checkTime >= start && checkTime <= end) {\n                    matchedEvents.push(ev);\n                }\n            }\n            return matchedEvents;\n        }\n\n        const monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n                            \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n\n        function formatDateRange(startStr, endStr) {\n            const startDate = parseDateString(startStr);\n            const endDate = parseDateString(endStr);\n            const startDay = startDate.getDate();\n            const startMonth = monthNames[startDate.getMonth()].slice(0, 3);\n            \n            if (startStr === endStr) {\n                return startDay + ' ' + startMonth;\n            } else {\n                const endDay = endDate.getDate();\n                const endMonth = monthNames[endDate.getMonth()].slice(0, 3);\n                if (startDate.getMonth() === endDate.getMonth()) {\n                    return startDay + ' - ' + endDay + ' ' + startMonth;\n                }\n                return startDay + ' ' + startMonth + ' - ' + endDay + ' ' + endMonth;\n            }\n        }\n\n        function renderCalendar() {\n            const container = document.getElementById('calendar-container');\n            if(!container) return;\n            container.innerHTML = '';\n            let currentYear = academicYearStart.getFullYear();\n            let currentMonth = academicYearStart.getMonth();\n\n            for (let i = 0; i < monthsToRender; i++) {\n                const firstDayOfMonth = new Date(currentYear, currentMonth, 1);\n                const daysInMonth = new Date(currentYear, currentMonth + 1, 0).getDate();\n                let startDayOfWeek = firstDayOfMonth.getDay() === 0 ? 6 : firstDayOfMonth.getDay() - 1;\n                const shortYear = \"'\" + String(currentYear).slice(-2);\n\n                const monthCard = document.createElement('div');\n                monthCard.className = 'month-card bg-white\/70 backdrop-blur-md p-2.5 sm:p-3 rounded-2xl border border-white\/60 shadow-sm flex flex-col h-full';\n                \n                let html = '<div class=\"mb-2 px-1 flex justify-between items-center border-b border-gray-100 pb-1.5 leading-tight\">';\n                html += '<span class=\"text-[13px] sm:text-sm font-black text-brand-black tracking-tight truncate\">' + monthNames[currentMonth] + '<\/span>';\n                html += '<span class=\"text-[11px] sm:text-xs text-brand-red font-black shrink-0 ml-1\">' + shortYear + '<\/span>';\n                html += '<\/div>';\n                html += '<div class=\"grid grid-cols-7 gap-x-0.5 text-center text-[9px] sm:text-[10px] font-bold text-brand-greyDark uppercase tracking-wider mb-2\">';\n                html += '<div>M<\/div><div>T<\/div><div>W<\/div><div>T<\/div><div>F<\/div>';\n                html += '<div class=\"text-brand-red font-black\">S<\/div><div class=\"text-brand-red font-black\">S<\/div>';\n                html += '<\/div>';\n                \n                html += '<div class=\"grid grid-cols-7 gap-x-0.5 gap-y-2 text-center text-xs flex-1\">';\n\n                for (let j = 0; j < startDayOfWeek; j++) {\n                    html += '<div style=\"aspect-ratio: 1\/1;\"><\/div>';\n                }\n\n                for (let day = 1; day <= daysInMonth; day++) {\n                    const cellDate = new Date(currentYear, currentMonth, day);\n                    const dayOfWeek = cellDate.getDay();\n                    const isWeekend = (dayOfWeek === 0 || dayOfWeek === 6);\n                    \n                    let textClass = isWeekend ? 'text-gray-400 bg-gray-100\/60' : 'text-brand-black';\n                    let bgClass = 'hover:bg-gray-200\/60 transition-colors';\n                    let onClickAttr = '';\n                    let cursorClass = 'cursor-default';\n                    let dotsHtml = '';\n\n                    const dateStr = currentYear + '-' + String(currentMonth + 1).padStart(2, '0') + '-' + String(day).padStart(2, '0');\n                    const dayEvents = getEventsForDate(cellDate);\n\n                    if (dayEvents.length > 0) {\n                        cursorClass = 'cursor-pointer transform hover:scale-110 hover:shadow-md hover:z-20 transition-all duration-150';\n                        onClickAttr = 'data-date=\"' + dateStr + '\"';\n\n                        \/\/ 1. \u0417\u0430\u043b\u0438\u0432\u043a\u0438\n                        const fillEvent = dayEvents.find(e => e.display === 'fill');\n                        if (fillEvent && (!isWeekend || fillEvent.type === 'red_fill')) {\n                            bgClass = fillStyles[fillEvent.type];\n                            textClass = '';\n                        }\n\n                        \/\/ 2. \u041c\u0438\u043a\u0440\u043e-\u0442\u043e\u0447\u043a\u0438\n                        const dotEvents = dayEvents.filter(e => e.display === 'dot');\n                        if (dotEvents.length > 0) {\n                            dotsHtml = '<div class=\"dots-row\">';\n                            dotEvents.slice(0, 3).forEach(d => {\n                                const dotBg = dotStyles[d.type] || 'bg-brand-greyDark';\n                                const whiteRing = fillEvent ? 'ring-1 ring-white\/90' : '';\n                                dotsHtml += '<span class=\"w-[3px] h-[3px] rounded-full ' + dotBg + ' ' + whiteRing + ' shrink-0\"><\/span>';\n                            });\n                            dotsHtml += '<\/div>';\n                        }\n                    }\n\n                    if (!dotsHtml) {\n                        dotsHtml = '<div class=\"dots-row\"><\/div>';\n                    }\n\n                    html += '<div class=\"flex items-center justify-center relative min-w-0\">';\n                    html += '<button ' + onClickAttr + ' class=\"calendar-day-btn ' + bgClass + ' ' + textClass + ' ' + cursorClass + '\">';\n                    html += '<span class=\"day-num\">' + day + '<\/span>';\n                    html += dotsHtml;\n                    html += '<\/button>';\n                    html += '<\/div>';\n                }\n\n                html += '<\/div>';\n                monthCard.innerHTML = html;\n                container.appendChild(monthCard);\n\n                currentMonth++;\n                if (currentMonth > 11) {\n                    currentMonth = 0;\n                    currentYear++;\n                }\n            }\n\n            document.querySelectorAll('.calendar-day-btn[data-date]').forEach(function(btn) {\n                btn.addEventListener('click', function() {\n                    openModal(btn.getAttribute('data-date'));\n                });\n            });\n        }\n\n        function renderSidebar() {\n            const listContainer = document.getElementById('events-list');\n            const countEl = document.getElementById('events-count');\n            const headlineEl = document.getElementById('sidebar-headline');\n            if(!listContainer) return;\n            listContainer.innerHTML = '';\n\n            \/\/ \u0422\u041e\u0427\u041d\u0410\u042f \u0425\u0420\u041e\u041d\u041e\u041b\u041e\u0413\u0418\u0427\u0415\u0421\u041a\u0410\u042f \u0421\u041e\u0420\u0422\u0418\u0420\u041e\u0412\u041a\u0410\n            const currentEvents = getFilteredEvents().slice().sort(function(a, b) {\n                const timeA = parseDateString(a.start).getTime();\n                const timeB = parseDateString(b.start).getTime();\n                if (timeA !== timeB) {\n                    return timeA - timeB;\n                }\n                if (a.display === 'fill' && b.display !== 'fill') return -1;\n                if (b.display === 'fill' && a.display !== 'fill') return 1;\n                return parseDateString(a.end).getTime() - parseDateString(b.end).getTime();\n            });\n\n            if (countEl) countEl.textContent = currentEvents.length;\n            if (headlineEl) {\n                headlineEl.textContent = activeDepartment === 'all' ? 'All Events & Dates' : (deptTags[activeDepartment].label + ' Schedule');\n            }\n\n            currentEvents.forEach(function(ev) {\n                const dateStr = formatDateRange(ev.start, ev.end);\n                const tag = deptTags[ev.section] || deptTags.all;\n                let dotClass = 'bg-brand-greyDark';\n\n                if (ev.display === 'fill') {\n                    if (ev.type === 'green_fill') dotClass = 'bg-brand-green ring-1 ring-brand-green\/40';\n                    if (ev.type === 'red_fill') dotClass = 'bg-brand-red ring-1 ring-brand-red\/40';\n                    if (ev.type === 'grey_fill') dotClass = 'bg-brand-grey ring-1 ring-brand-greyDark\/30';\n                } else {\n                    dotClass = dotStyles[ev.type] || 'bg-brand-greyDark';\n                }\n\n                const itemHTML = '<div class=\"flex items-start gap-2.5 p-2 rounded-xl hover:bg-white\/80 transition-colors border border-transparent hover:border-white\/80 shadow-sm\">' +\n                    '<div class=\"mt-1.5 min-w-[8px]\">' +\n                        '<div class=\"w-2 h-2 rounded-full ' + dotClass + ' shadow-sm\"><\/div>' +\n                    '<\/div>' +\n                    '<div class=\"flex-1 min-w-0\">' +\n                        '<div class=\"flex items-center gap-1.5 mb-0.5\">' +\n                            '<span class=\"text-[9px] font-bold px-1.5 py-0.2 rounded-full ' + tag.bg + '\">' + tag.label + '<\/span>' +\n                        '<\/div>' +\n                        '<p class=\"text-xs font-bold text-brand-black leading-snug break-words\">' + formatTitle(ev.title) + '<\/p>' +\n                        '<p class=\"text-[10px] font-bold text-brand-greyDark mt-0.5 whitespace-nowrap\">' + dateStr + '<\/p>' +\n                    '<\/div>' +\n                '<\/div>';\n                \n                listContainer.insertAdjacentHTML('beforeend', itemHTML);\n            });\n        }\n\n        window.setDepartment = function(dept) {\n            activeDepartment = dept;\n            document.querySelectorAll('.filter-btn').forEach(btn => btn.classList.remove('active'));\n            const activeBtn = document.getElementById('filter-' + dept);\n            if(activeBtn) activeBtn.classList.add('active');\n            renderCalendar();\n            renderSidebar();\n        };\n\n        window.openModal = function(dateStr) {\n            const parts = dateStr.split('-');\n            const date = new Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10));\n            const dayEvents = getEventsForDate(date);\n            if (dayEvents.length === 0) return;\n\n            const titleEl = document.getElementById('modal-date-title');\n            const listEl = document.getElementById('modal-events-list');\n            titleEl.textContent = parseInt(parts[2], 10) + ' ' + monthNames[date.getMonth()] + ' ' + parts[0];\n            listEl.innerHTML = '';\n\n            dayEvents.forEach(function(ev) {\n                const tag = deptTags[ev.section] || deptTags.all;\n                let dotClass = 'bg-brand-greyDark';\n\n                if (ev.display === 'fill') {\n                    if (ev.type === 'green_fill') dotClass = 'bg-brand-green';\n                    if (ev.type === 'red_fill') dotClass = 'bg-brand-red';\n                    if (ev.type === 'grey_fill') dotClass = 'bg-brand-grey';\n                } else {\n                    dotClass = dotStyles[ev.type] || 'bg-brand-greyDark';\n                }\n\n                const itemHTML = '<div class=\"flex items-start gap-3.5 p-3.5 bg-white\/70 rounded-2xl border border-white\/80 shadow-sm\">' +\n                    '<div class=\"mt-1.5 min-w-[10px]\">' +\n                        '<div class=\"w-3 h-3 rounded-full ' + dotClass + ' shadow-sm\"><\/div>' +\n                    '<\/div>' +\n                    '<div class=\"flex-1\">' +\n                        '<div class=\"flex items-center gap-1.5 mb-1\">' +\n                            '<span class=\"text-[10px] font-bold px-2 py-0.5 rounded-full ' + tag.bg + '\">' + tag.label + '<\/span>' +\n                        '<\/div>' +\n                        '<p class=\"text-sm font-bold text-brand-black leading-snug\">' + formatTitle(ev.title) + '<\/p>' +\n                        '<p class=\"text-xs font-semibold text-brand-greyDark mt-1 whitespace-nowrap\">' + formatDateRange(ev.start, ev.end) + '<\/p>' +\n                    '<\/div>' +\n                '<\/div>';\n                listEl.insertAdjacentHTML('beforeend', itemHTML);\n            });\n\n            const modal = document.getElementById('event-modal');\n            modal.classList.remove('hidden');\n            void modal.offsetWidth;\n            modal.classList.remove('opacity-0');\n            modal.classList.add('opacity-100');\n        };\n\n        window.closeModal = function() {\n            const modal = document.getElementById('event-modal');\n            modal.classList.remove('opacity-100');\n            modal.classList.add('opacity-0');\n            setTimeout(function() { modal.classList.add('hidden'); }, 300);\n        };\n\n        function initApp() {\n            renderCalendar();\n            renderSidebar();\n\n            const modal = document.getElementById('event-modal');\n            if (modal) {\n                modal.addEventListener('click', function(e) {\n                    if (e.target.id === 'event-modal') closeModal();\n                });\n            }\n            document.addEventListener('keydown', function(e) {\n                if (e.key === 'Escape') closeModal();\n            });\n\n            const observer = new IntersectionObserver((entries, observer) => {\n                entries.forEach(entry => {\n                    if (entry.isIntersecting) {\n                        entry.target.classList.add('active');\n                        observer.unobserve(entry.target);\n                    }\n                });\n            }, { rootMargin: '0px 0px -40px 0px', threshold: 0.1 });\n\n            document.querySelectorAll('.rsad-reveal').forEach(el => observer.observe(el));\n        }\n\n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initApp);\n        } else {\n            initApp();\n        }\n    })();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>The Russian School of Abu Dhabi Academic Calendar 2026\u20132027 Events, Term Dates &amp; Activities for Students &amp; Families All KG Primary Secondary<\/p>","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"Academic calendar 2026\u20132027 at the Russian School of Abu Dhabi: term dates, events and activities for KG, Primary and Secondary students.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_zipai_imported":false,"_zipai_import_id":"","_joinchat":[],"footnotes":""},"class_list":["post-9468","page","type-page","status-publish","hentry"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7},"has_hero_section":"disabled"},"spectra_blocks_featured_image_url":null,"spectra_blocks_author_info":{"display_name":"The Russian School of Abu Dhabi","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/ed06dac784736dfe8a8375134123a7c109f86abc062de83c896de8e6be2f6297?s=96&d=mm&r=g","author_link":"https:\/\/russianschool.ae\/ru\/author\/gulfeducation\/","description":""},"_links":{"self":[{"href":"https:\/\/russianschool.ae\/ru\/wp-json\/wp\/v2\/pages\/9468","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/russianschool.ae\/ru\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/russianschool.ae\/ru\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/russianschool.ae\/ru\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/russianschool.ae\/ru\/wp-json\/wp\/v2\/comments?post=9468"}],"version-history":[{"count":5,"href":"https:\/\/russianschool.ae\/ru\/wp-json\/wp\/v2\/pages\/9468\/revisions"}],"predecessor-version":[{"id":9906,"href":"https:\/\/russianschool.ae\/ru\/wp-json\/wp\/v2\/pages\/9468\/revisions\/9906"}],"wp:attachment":[{"href":"https:\/\/russianschool.ae\/ru\/wp-json\/wp\/v2\/media?parent=9468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}