{"id":9913,"date":"2026-09-06T04:02:46","date_gmt":"2026-09-06T01:02:46","guid":{"rendered":"https:\/\/russianschool.ae\/?page_id=9913"},"modified":"2026-09-06T04:11:39","modified_gmt":"2026-09-06T01:11:39","slug":"test-page","status":"publish","type":"page","link":"https:\/\/russianschool.ae\/ar\/test-page\/","title":{"rendered":"Test Page"},"content":{"rendered":"\n<!-- TAILWIND & SYSTEM FONT CONFIGURATION -->\n<script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n<script>\n  tailwind.config = {\n    theme: {\n      extend: {\n        colors: {\n          hig: {\n            canvas: 'var(--hig-canvas)',\n            card: 'var(--hig-card)',\n            labelPrimary: 'var(--hig-label-primary)',\n            labelSecondary: 'var(--hig-label-secondary)',\n            labelTertiary: 'var(--hig-label-tertiary)',\n            separator: 'var(--hig-separator)',\n            accent: 'var(--hig-accent)',\n            brandRed: '#f15d57',\n            brandGreen: '#34c759',\n            brandGrey: '#8e8e93',\n            pastelGreen: '#34c759',\n            pastelBlue: '#007aff',\n            pastelOrange: '#ff9500',\n            pastelPurple: '#af52de'\n          }\n        }\n      }\n    }\n  }\n<\/script>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Lato:wght@300;400;700;900&#038;display=swap\" rel=\"stylesheet\">\n\n<style>\n  \/* ==========================================================================\n     1. SEMANTIC APPLE HIG TOKENS (LIGHT & DARK APPEARANCES)\n     ========================================================================== *\/\n  :root {\n    --hig-canvas: #f2f2f7;\n    --hig-card: #ffffff;\n    --hig-card-border: rgba(0, 0, 0, 0.08);\n    --hig-card-specular: rgba(255, 255, 255, 0.95);\n    --hig-card-shadow: 0 10px 30px -4px rgba(0, 0, 0, 0.04), 0 2px 8px rgba(0, 0, 0, 0.02);\n\n    --hig-label-primary: #1d1d1f;\n    --hig-label-secondary: #6e6e73;\n    --hig-label-tertiary: #86868b;\n\n    --hig-separator: rgba(60, 60, 67, 0.12);\n    --hig-fill-secondary: rgba(120, 120, 128, 0.08);\n    --hig-fill-hover: rgba(120, 120, 128, 0.14);\n\n    --hig-accent: #0071e3;\n    --hig-btn-fill: #1d1d1f;\n    --hig-btn-text: #ffffff;\n  }\n\n  @media (prefers-color-scheme: dark) {\n    :root {\n      --hig-canvas: #000000;\n      --hig-card: rgba(28, 28, 30, 0.85);\n      --hig-card-border: rgba(255, 255, 255, 0.12);\n      --hig-card-specular: rgba(255, 255, 255, 0.15);\n      --hig-card-shadow: 0 16px 36px -4px rgba(0, 0, 0, 0.65);\n\n      --hig-label-primary: #f5f5f7;\n      --hig-label-secondary: #a1a1a6;\n      --hig-label-tertiary: #6e6e73;\n\n      --hig-separator: rgba(84, 84, 88, 0.35);\n      --hig-fill-secondary: rgba(255, 255, 255, 0.12);\n      --hig-fill-hover: rgba(255, 255, 255, 0.18);\n\n      --hig-accent: #2997ff;\n      --hig-btn-fill: #f5f5f7;\n      --hig-btn-text: #1d1d1f;\n    }\n  }\n\n  \/* Base typography & shell *\/\n  .calendar-app-wrapper {\n    font-family: -apple-system, BlinkMacSystemFont, \"SF Pro Text\", \"SF Pro Display\", \"Lato\", sans-serif;\n    color: var(--hig-label-primary);\n  }\n\n  .hig-surface-card {\n    background: var(--hig-card);\n    border: 1px solid var(--hig-card-border);\n    border-radius: 22px;\n    box-shadow: var(--hig-card-shadow), inset 0 1px 0 var(--hig-card-specular);\n  }\n\n  \/* Accessible Calendar Day Target: visible 28pt circle, 44x44pt hit frame *\/\n  .calendar-day-btn {\n    width: 28px !important;\n    height: 28px !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  \/* Extended hit target for mobile accessibility *\/\n  .calendar-day-btn::after {\n    content: \"\";\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    width: 44px;\n    height: 44px;\n    pointer-events: auto;\n  }\n\n  .day-num {\n    font-size: 11px;\n    line-height: 1 !important;\n    font-weight: 600;\n  }\n\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  \/* Motion: Spring-decelerated reveal *\/\n  .rsad-reveal {\n    opacity: 0;\n    transform: translateY(24px);\n    transition: opacity 0.5s cubic-bezier(0.16, 1, 0.3, 1), transform 0.5s 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  \/* HIG Accessibility: Reduce motion override *\/\n  @media (prefers-reduced-motion: reduce) {\n    .rsad-reveal {\n      opacity: 1 !important;\n      transform: none !important;\n      transition: none !important;\n    }\n    .calendar-day-btn,\n    .filter-btn {\n      transition: none !important;\n      transform: none !important;\n    }\n  }\n\n  .filter-btn.active {\n    background-color: var(--hig-btn-fill) !important;\n    color: var(--hig-btn-text) !important;\n    box-shadow: 0 3px 8px rgba(0, 0, 0, 0.12);\n  }\n\n  @media print {\n    @page { size: landscape; margin: 8mm; }\n    body { background-color: #ffffff !important; padding: 0 !important; }\n    .no-print, header, footer, .filter-container { display: none !important; }\n    .print-container { max-width: 100% !important; padding: 0 !important; margin: 0 !important; box-shadow: none !important; border: none !important; background: #ffffff !important; }\n    .month-grid { gap: 0.4rem !important; }\n    .month-card { border: 1px solid #e4e4e7 !important; break-inside: avoid; background: #ffffff !important; }\n    .sidebar { border-left: 1px solid #e4e4e7 !important; padding-left: 1rem !important; background: #ffffff !important; }\n    .main-grid { display: grid !important; grid-template-columns: 3.2fr 1fr !important; gap: 1rem !important; }\n    .rsad-reveal { opacity: 1 !important; transform: none !important; }\n  }\n\n  .editor-post-title, .wp-block-post-title, .entry-title, .page-title, h1.entry-title, .entry-header {\n    display: none !important;\n  }\n<\/style>\n\n<div class=\"calendar-app-wrapper my-6 px-3 md:px-6\">\n  <div class=\"print-container max-w-[96rem] mx-auto hig-surface-card overflow-hidden\">\n    \n    <!-- Header -->\n    <header class=\"px-6 py-6 md:px-8 md:py-7 border-b border-[var(--hig-separator)] flex flex-col xl:flex-row justify-between items-start xl:items-center gap-6 bg-transparent rsad-reveal\">\n      <div>\n        <div class=\"mb-1\">\n          <h2 class=\"text-xs font-bold tracking-wider text-[var(--hig-label-secondary)] uppercase\">The Russian School of Abu Dhabi<\/h2>\n        <\/div>\n        <h1 class=\"text-2xl md:text-3xl font-bold tracking-tight text-[var(--hig-label-primary)] flex flex-wrap items-center gap-x-2\">\n          <span>Academic Calendar<\/span>\n          <span class=\"text-[var(--hig-brandRed)] whitespace-nowrap\">2026\u20132027<\/span>\n        <\/h1>\n        <p class=\"text-[var(--hig-label-secondary)] 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-[var(--hig-brandRed)] inline\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" aria-hidden=\"true\">\n            <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>\n          <\/svg>\n          <span>Events, Term Dates &amp; Activities for Students &amp; Families<\/span>\n        <\/p>\n      <\/div>\n\n      <!-- Controls: Segment 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        <!-- Segmented Filter -->\n        <nav class=\"filter-container flex items-center bg-[var(--hig-fill-secondary)] p-1 rounded-full text-xs font-semibold text-[var(--hig-label-secondary)]\" aria-label=\"Filter calendar by section\">\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        <\/nav>\n\n        <button onclick=\"window.print()\" class=\"no-print hidden md:flex items-center gap-2 bg-[var(--hig-btn-fill)] text-[var(--hig-btn-text)] px-4 py-2 rounded-full text-xs md:text-sm font-semibold transition-all hover:opacity-90 active:scale-95 whitespace-nowrap shadow-sm\">\n          <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"h-4 w-4 text-[var(--hig-brandRed)]\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" aria-hidden=\"true\">\n            <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>\n          <\/svg>\n          <span>Print PDF<\/span>\n        <\/button>\n      <\/div>\n    <\/header>\n\n    <!-- Legend Ribbon -->\n    <div class=\"px-6 py-3 border-b border-[var(--hig-separator)] flex flex-wrap items-center gap-x-5 gap-y-2 text-xs\" role=\"region\" aria-label=\"Color Legend\">\n      <div class=\"flex items-center gap-1.5\">\n        <span class=\"w-2.5 h-2.5 rounded-full bg-emerald-500 shrink-0\"><\/span>\n        <span class=\"font-semibold text-[var(--hig-label-primary)] 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-[var(--hig-brandRed)] shrink-0\"><\/span>\n        <span class=\"font-semibold text-[var(--hig-label-primary)] 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-zinc-400 shrink-0\"><\/span>\n        <span class=\"font-semibold text-[var(--hig-label-primary)] text-[11px]\">Breaks<\/span>\n      <\/div>\n      <span class=\"hidden sm:inline-block text-[var(--hig-separator)]\">|<\/span>\n      <div class=\"flex items-center gap-1.5\">\n        <span class=\"w-2 h-2 rounded-full bg-emerald-400 shrink-0\"><\/span>\n        <span class=\"font-medium text-[var(--hig-label-secondary)] text-[11px]\">Tests &amp; Assessments<\/span>\n      <\/div>\n      <div class=\"flex items-center gap-1.5\">\n        <span class=\"w-2 h-2 rounded-full bg-blue-500 shrink-0\"><\/span>\n        <span class=\"font-medium text-[var(--hig-label-secondary)] text-[11px]\">Tournaments &amp; Contests<\/span>\n      <\/div>\n      <div class=\"flex items-center gap-1.5\">\n        <span class=\"w-2 h-2 rounded-full bg-amber-400 shrink-0\"><\/span>\n        <span class=\"font-medium text-[var(--hig-label-secondary)] text-[11px]\">Shows &amp; Assemblies<\/span>\n      <\/div>\n      <div class=\"flex items-center gap-1.5\">\n        <span class=\"w-2 h-2 rounded-full bg-purple-400 shrink-0\"><\/span>\n        <span class=\"font-medium text-[var(--hig-label-secondary)] text-[11px]\">Academies &amp; Meetings<\/span>\n      <\/div>\n    <\/div>\n\n    <!-- Main Grid -->\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      <main class=\"flex-1 rsad-reveal\" aria-label=\"Annual Calendar Overview\">\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\"><\/div>\n      <\/main>\n\n      <!-- Sidebar \/ Key Dates List -->\n      <aside class=\"sidebar w-full xl:w-80 shrink-0 flex flex-col gap-5 bg-[var(--hig-fill-secondary)] p-4 md:p-5 rounded-2xl border border-[var(--hig-card-border)] rsad-reveal\" aria-label=\"Key Dates Sidebar\">\n        <div>\n          <h3 class=\"text-sm font-bold text-[var(--hig-label-primary)] border-b border-[var(--hig-brandRed)] 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-[var(--hig-btn-fill)] text-[var(--hig-btn-text)]\" id=\"events-count\">0<\/span>\n          <\/h3>\n          <div id=\"events-list\" class=\"space-y-2 max-h-[720px] overflow-y-auto pr-1\"><\/div>\n        <\/div>\n        \n        <div class=\"mt-auto pt-3 border-t border-[var(--hig-separator)] text-[11px] text-[var(--hig-label-secondary)] leading-relaxed\">\n          <p>* Click any marked date to inspect scheduled details.<\/p>\n        <\/div>\n      <\/aside>\n      \n    <\/div>\n  <\/div>\n\n  <!-- Modal Dialog (Strictly Accessible Modal Layer) -->\n  <div id=\"event-modal\" class=\"fixed inset-0 z-50 hidden bg-black\/40 backdrop-blur-sm opacity-0 transition-opacity duration-200 no-print flex items-center justify-center p-4\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"modal-date-title\">\n    <div class=\"relative bg-[var(--hig-card)] border border-[var(--hig-card-border)] rounded-2xl shadow-2xl text-left w-full max-w-md p-6 transform transition-all\" onclick=\"event.stopPropagation()\">\n      <div class=\"flex items-start justify-between mb-4\">\n        <div>\n          <span class=\"text-[11px] font-bold text-[var(--hig-label-secondary)] uppercase tracking-wider\">Scheduled Events<\/span>\n          <h3 class=\"text-lg md:text-xl font-bold text-[var(--hig-label-primary)]\" id=\"modal-date-title\"><\/h3>\n        <\/div>\n        <button type=\"button\" onclick=\"closeModal()\" aria-label=\"Close dialog\" class=\"text-[var(--hig-label-secondary)] hover:text-[var(--hig-brandRed)] transition-colors focus:outline-none bg-[var(--hig-fill-secondary)] p-1.5 rounded-full\">\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-[55vh] 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-2.5 bg-[var(--hig-btn-fill)] text-xs md:text-sm font-semibold text-[var(--hig-btn-text)] hover:opacity-90 transition-opacity\">\n        Done\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-emerald-500 text-white font-bold',\n      red_fill: 'bg-[#f15d57] text-white font-bold',\n      grey_fill: 'bg-zinc-300 text-zinc-900 font-bold'\n    };\n\n    const dotStyles = {\n      academic: 'bg-emerald-400',\n      contest: 'bg-blue-500',\n      event: 'bg-amber-400',\n      meeting: 'bg-purple-400'\n    };\n\n    const deptTags = {\n      all: { label: 'All School', bg: 'bg-zinc-100 text-zinc-700' },\n      kg: { label: 'Kindergarten', bg: 'bg-emerald-50 text-emerald-700' },\n      primary: { label: 'Primary', bg: 'bg-amber-50 text-amber-700' },\n      secondary: { label: 'Secondary', bg: 'bg-indigo-50 text-indigo-700' }\n    };\n\n    const events = [\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      { 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      { 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      { 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      { 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      { 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      { 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      { 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      { 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      { 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      { 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      { 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      { 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      { 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-[var(--hig-label-secondary)]\">[$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-[var(--hig-card)] p-3 rounded-2xl border border-[var(--hig-card-border)] shadow-xs flex flex-col h-full';\n        \n        let html = '<div class=\"mb-2 px-1 flex justify-between items-center border-b border-[var(--hig-separator)] pb-1.5 leading-tight\">';\n        html += '<span class=\"text-[13px] font-bold text-[var(--hig-label-primary)] tracking-tight truncate\">' + monthNames[currentMonth] + '<\/span>';\n        html += '<span class=\"text-[11px] text-[var(--hig-brandRed)] font-bold 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] font-bold text-[var(--hig-label-secondary)] 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-[var(--hig-brandRed)]\">S<\/div><div class=\"text-[var(--hig-brandRed)]\">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-[var(--hig-label-tertiary)] bg-[var(--hig-fill-secondary)]' : 'text-[var(--hig-label-primary)]';\n          let bgClass = 'hover:bg-[var(--hig-fill-hover)] transition-colors';\n          let onClickAttr = '';\n          let cursorClass = 'cursor-default';\n          let dotsHtml = '';\n          let a11yEventsSummary = [];\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 active:scale-95 transition-all duration-150';\n            onClickAttr = 'data-date=\"' + dateStr + '\" aria-haspopup=\"dialog\"';\n\n            \/\/ 1. Fill Styles\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. Dots\n            const dotEvents = dayEvents.filter(e => e.display === 'dot');\n            if (dotEvents.length > 0) {\n              dotsHtml = '<div class=\"dots-row\" aria-hidden=\"true\">';\n              dotEvents.slice(0, 3).forEach(d => {\n                const dotBg = dotStyles[d.type] || 'bg-zinc-400';\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            a11yEventsSummary = dayEvents.map(e => e.title).join(', ');\n          }\n\n          if (!dotsHtml) {\n            dotsHtml = '<div class=\"dots-row\" aria-hidden=\"true\"><\/div>';\n          }\n\n          const a11yLabel = day + ' ' + monthNames[currentMonth] + ' ' + currentYear + (a11yEventsSummary ? (': ' + a11yEventsSummary) : '');\n\n          html += '<div class=\"flex items-center justify-center relative min-w-0\">';\n          html += '<button ' + onClickAttr + ' aria-label=\"' + a11yLabel.replace(\/\"\/g, '&quot;') + '\" 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      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) return timeA - timeB;\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-zinc-400';\n\n        if (ev.display === 'fill') {\n          if (ev.type === 'green_fill') dotClass = 'bg-emerald-500 ring-1 ring-emerald-500\/40';\n          if (ev.type === 'red_fill') dotClass = 'bg-[#f15d57] ring-1 ring-red-500\/40';\n          if (ev.type === 'grey_fill') dotClass = 'bg-zinc-400 ring-1 ring-zinc-400\/40';\n        } else {\n          dotClass = dotStyles[ev.type] || 'bg-zinc-400';\n        }\n\n        const itemHTML = '<div class=\"flex items-start gap-2.5 p-2 rounded-xl hover:bg-[var(--hig-card)] transition-colors border border-transparent hover:border-[var(--hig-card-border)] shadow-2xs\">' +\n          '<div class=\"mt-1.5 min-w-[8px]\">' +\n            '<div class=\"w-2 h-2 rounded-full ' + dotClass + ' shadow-2xs\"><\/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-semibold text-[var(--hig-label-primary)] leading-snug break-words\">' + formatTitle(ev.title) + '<\/p>' +\n            '<p class=\"text-[10px] font-medium text-[var(--hig-label-secondary)] 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-zinc-400';\n\n        if (ev.display === 'fill') {\n          if (ev.type === 'green_fill') dotClass = 'bg-emerald-500';\n          if (ev.type === 'red_fill') dotClass = 'bg-[#f15d57]';\n          if (ev.type === 'grey_fill') dotClass = 'bg-zinc-400';\n        } else {\n          dotClass = dotStyles[ev.type] || 'bg-zinc-400';\n        }\n\n        const itemHTML = '<div class=\"flex items-start gap-3.5 p-3.5 bg-[var(--hig-fill-secondary)] rounded-2xl border border-[var(--hig-card-border)]\">' +\n          '<div class=\"mt-1.5 min-w-[10px]\">' +\n            '<div class=\"w-3 h-3 rounded-full ' + dotClass + ' shadow-2xs\"><\/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-semibold text-[var(--hig-label-primary)] leading-snug\">' + formatTitle(ev.title) + '<\/p>' +\n            '<p class=\"text-xs font-medium text-[var(--hig-label-secondary)] 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'); }, 200);\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 prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n      if (!prefersReducedMotion) {\n        const observer = new IntersectionObserver((entries, obs) => {\n          entries.forEach(entry => {\n            if (entry.isIntersecting) {\n              entry.target.classList.add('active');\n              obs.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      } else {\n        document.querySelectorAll('.rsad-reveal').forEach(el => el.classList.add('active'));\n      }\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 Print PDF Term Dates Public Holidays Breaks | [&hellip;]<\/p>\n","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":"","_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-9913","page","type-page","status-publish","hentry"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7}},"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\/ar\/author\/gulfeducation\/","description":""},"_links":{"self":[{"href":"https:\/\/russianschool.ae\/ar\/wp-json\/wp\/v2\/pages\/9913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/russianschool.ae\/ar\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/russianschool.ae\/ar\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/russianschool.ae\/ar\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/russianschool.ae\/ar\/wp-json\/wp\/v2\/comments?post=9913"}],"version-history":[{"count":4,"href":"https:\/\/russianschool.ae\/ar\/wp-json\/wp\/v2\/pages\/9913\/revisions"}],"predecessor-version":[{"id":9917,"href":"https:\/\/russianschool.ae\/ar\/wp-json\/wp\/v2\/pages\/9913\/revisions\/9917"}],"wp:attachment":[{"href":"https:\/\/russianschool.ae\/ar\/wp-json\/wp\/v2\/media?parent=9913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}