{"id":35946,"date":"2026-02-27T05:53:12","date_gmt":"2026-02-27T05:53:12","guid":{"rendered":"https:\/\/globalindianschool.org\/noida\/?page_id=35946"},"modified":"2026-03-23T05:10:45","modified_gmt":"2026-03-23T05:10:45","slug":"our-campuses","status":"publish","type":"page","link":"https:\/\/globalindianschool.org\/noida\/our-campuses\/","title":{"rendered":"Our Campuses"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"35946\" class=\"elementor elementor-35946\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section data-exad-particle-enable=\"false\" class=\"elementor-section elementor-top-section elementor-element elementor-element-700b31d elementor-section-boxed elementor-section-height-default elementor-section-height-default exad-parallax-effect-no exad-background-color-change-no exad-glass-effect-no exad-sticky-section-no\" data-id=\"700b31d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-de57174 exad-glass-effect-no exad-sticky-section-no\" data-id=\"de57174\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-37a5b5d exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"37a5b5d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Our Campuses<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bda11e3 exad-sticky-section-no exad-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"bda11e3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"gsg-filter-section\">\r\n\t<div style=\"display: flex; justify-content: space-between; align-items: flex-start; min-width: 0; overflow: hidden\">\r\n\t\t<div style=\"flex: 1; min-width: 0\">\r\n\t\t\t<div id=\"gsg-country-filters\" class=\"gsg-filter-row\">\r\n\t\t\t\t<div id=\"gsg-country-list\" class=\"gsg-filter-inner\"><\/div>\r\n\t\t\t<\/div>\r\n\t\t\t<div id=\"gsg-city-filters\" class=\"gsg-filter-row\">\r\n\t\t\t\t<div id=\"gsg-city-list\" class=\"gsg-filter-inner\"><\/div>\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t<button id=\"gsg-open-drawer\" class=\"gsg-drawer-trigger\">\r\n\t\t\t<svg\r\n\t\t\t\twidth=\"16\"\r\n\t\t\t\theight=\"16\"\r\n\t\t\t\tviewBox=\"0 0 24 24\"\r\n\t\t\t\tfill=\"none\"\r\n\t\t\t\tstroke=\"currentColor\"\r\n\t\t\t\tstroke-width=\"2\"\r\n\t\t\t\tstroke-linecap=\"round\"\r\n\t\t\t\tstroke-linejoin=\"round\"\r\n\t\t\t>\r\n\t\t\t\t<line x1=\"4\" y1=\"21\" x2=\"4\" y2=\"14\"><\/line>\r\n\t\t\t\t<line x1=\"4\" y1=\"10\" x2=\"4\" y2=\"3\"><\/line>\r\n\t\t\t\t<line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"12\"><\/line>\r\n\t\t\t\t<line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"3\"><\/line>\r\n\t\t\t\t<line x1=\"20\" y1=\"21\" x2=\"20\" y2=\"16\"><\/line>\r\n\t\t\t\t<line x1=\"20\" y1=\"12\" x2=\"20\" y2=\"3\"><\/line>\r\n\t\t\t\t<line x1=\"1\" y1=\"14\" x2=\"7\" y2=\"14\"><\/line>\r\n\t\t\t\t<line x1=\"9\" y1=\"8\" x2=\"15\" y2=\"8\"><\/line>\r\n\t\t\t\t<line x1=\"17\" y1=\"16\" x2=\"23\" y2=\"16\"><\/line>\r\n\t\t\t<\/svg>\r\n\t\t\tFilters\r\n\t\t<\/button>\r\n\t<\/div>\r\n<\/div>\r\n\r\n<div id=\"gsg-blur-area\">\r\n\t<div id=\"gsg-results-wrapper\">\r\n\t\t<div id=\"gsg-campus-grid\" class=\"gsg-grid\">\r\n\t\t\t<div class=\"gsg-skeleton-card\"><\/div>\r\n\t\t\t<div class=\"gsg-skeleton-card\"><\/div>\r\n\t\t\t<div class=\"gsg-skeleton-card\"><\/div>\r\n\t\t\t<div class=\"gsg-skeleton-card\"><\/div>\r\n\t\t<\/div>\r\n\t<\/div>\r\n<\/div>\r\n\r\n<div id=\"gsg-drawer-overlay\" class=\"gsg-overlay\"><\/div>\r\n<div id=\"gsg-filter-drawer\" class=\"gsg-drawer\">\r\n\t<div class=\"gsg-drawer-header\">\r\n\t\t<button id=\"gsg-close-drawer\" class=\"gsg-close-btn\">&times;<\/button>\r\n\t<\/div>\r\n\t<div class=\"gsg-drawer-body\">\r\n\t\t<div id=\"gsg-age-section\" class=\"gsg-drawer-section\">\r\n\t\t\t<h3 class=\"gsg-drawer-title\">Age<\/h3>\r\n\t\t\t<div id=\"gsg-age-list\" class=\"gsg-tag-group\"><\/div>\r\n\t\t<\/div>\r\n\t\t<div id=\"gsg-facility-section\" class=\"gsg-drawer-section\">\r\n\t\t\t<h3 class=\"gsg-drawer-title\">Facilities<\/h3>\r\n\t\t\t<div id=\"gsg-facility-list\" class=\"gsg-tag-group\"><\/div>\r\n\t\t\t<button id=\"gsg-toggle-facilities\" class=\"gsg-show-more\">+ Show All<\/button>\r\n\t\t<\/div>\r\n\t<\/div>\r\n\t<div class=\"gsg-drawer-footer\">\r\n\t\t<button id=\"gsg-clear-filters\" class=\"gsg-footer-link\">Remove filters<\/button>\r\n\t\t<button id=\"gsg-apply-drawer\" class=\"gsg-footer-apply\">Apply filters<\/button>\r\n\t<\/div>\r\n<\/div>\r\n\r\n<style>\r\n\t#gsg-filter-section {\r\n\t\tmargin-bottom: 30px;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tgap: 16px;\r\n\t\tpadding: 10px 0;\r\n\t}\r\n\t.gsg-filter-row {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tgap: 15px;\r\n\t\tmargin-bottom: 15px;\r\n\t}\r\n\t.gsg-filter-label {\r\n\t\tfont-size: 14px;\r\n\t\tfont-weight: 700;\r\n\t\tcolor: #1a365d;\r\n\t\tmin-width: 75px;\r\n\t}\r\n\t.gsg-filter-inner {\r\n\t\tdisplay: flex;\r\n\t\tflex-wrap: wrap;\r\n\t\tgap: 15px;\r\n\t}\r\n\t#gsg-country-filters .gsg-filter-btn {\r\n\t\tbackground: transparent !important;\r\n\t\tborder: none !important;\r\n\t\tbox-shadow: none !important;\r\n\t\tpadding: 4px 0 !important;\r\n\t\tmargin: 0 !important;\r\n\t\tfont-size: 15px;\r\n\t\tfont-weight: 500;\r\n\t\tcolor: #64748b;\r\n\t\tcursor: pointer;\r\n\t\ttransition: color 0.2s ease;\r\n\t\tposition: relative;\r\n\t\toutline: none !important;\r\n\t}\r\n\t#gsg-country-filters .gsg-filter-btn.active {\r\n\t\tcolor: #1a365d !important;\r\n\t\tfont-weight: 700;\r\n\t\tborder-bottom: 2px solid #1a365d !important;\r\n\t\tborder-radius: 0 !important;\r\n\t}\r\n\t#gsg-city-filters {\r\n\t\toverflow-x: auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\t\tpadding-bottom: 8px;\r\n\t\twidth: 100%;\r\n\t\tmin-width: 0;\r\n\t\tscrollbar-width: thin !important;\r\n\t}\r\n\t#gsg-city-filters::-webkit-scrollbar {\r\n\t\theight: 4px !important;\r\n\t\twidth: auto !important;\r\n\t\tdisplay: block !important;\r\n\t}\r\n\r\n\t#gsg-city-filters::-webkit-scrollbar-track {\r\n\t\tbackground: #f1f5f9;\r\n\t\tborder-radius: 4px;\r\n\t}\r\n\r\n\t#gsg-city-filters::-webkit-scrollbar-thumb {\r\n\t\tbackground: #e2e8f0;\r\n\t\tborder-radius: 4px;\r\n\t}\r\n\t#gsg-city-filters .gsg-filter-inner {\r\n\t\tflex-wrap: nowrap;\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\t#gsg-city-filters .gsg-filter-btn {\r\n\t\tbackground: #f1f5f9 !important;\r\n\t\tborder: 1px solid #e2e8f0 !important;\r\n\t\tpadding: 5px 15px !important;\r\n\t\tborder-radius: 20px !important;\r\n\t\tfont-size: 13px;\r\n\t\tcolor: #475569;\r\n\t\tfont-weight: 400;\r\n\t\tcursor: pointer;\r\n\t\ttransition: all 0.2s ease;\r\n\t\toutline: none !important;\r\n\t}\r\n\t#gsg-city-filters .gsg-filter-btn.active {\r\n\t\tbackground: #1a365d !important;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: #ffffff !important;\r\n\t\tborder-color: #1a365d !important;\r\n\t}\r\n\r\n\t.gsg-grid {\r\n\t\tdisplay: grid;\r\n\t\tgrid-template-columns: repeat(4, 1fr);\r\n\t\tgap: 20px;\r\n\t\tpadding: 20px 0;\r\n\t}\r\n\t@media (max-width: 1024px) {\r\n\t\t.gsg-grid {\r\n\t\t\tgrid-template-columns: repeat(2, 1fr);\r\n\t\t}\r\n\t}\r\n\t@media (max-width: 640px) {\r\n\t\t.gsg-grid {\r\n\t\t\tgrid-template-columns: 1fr;\r\n\t\t}\r\n\t}\r\n\r\n\t.gsg-card {\r\n\t\tbackground: #ffffff;\r\n\t\tborder-radius: 12px;\r\n\t\toverflow: hidden;\r\n\t\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\r\n\t\tborder: 1px solid #e2e8f0;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tposition: relative;\r\n\t\theight: 440px;\r\n\t}\r\n\t.gsg-img-wrapper {\r\n\t\twidth: 100%;\r\n\t\theight: 180px;\r\n\t\toverflow: hidden;\r\n\t}\r\n\t.gsg-card-img {\r\n\t\twidth: 100% !important;\r\n\t\theight: 100% !important;\r\n\t\tobject-fit: fill !important;\r\n\t\tdisplay: block;\r\n\t}\r\n\t.gsg-card-content {\r\n\t\tpadding: 18px;\r\n\t\tflex-grow: 1;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tposition: relative;\r\n\t}\r\n\t.gsg-card-title {\r\n\t\tfont-size: 16px;\r\n\t\tcolor: #1e293b;\r\n\t\tmargin: 5px 0 12px 0;\r\n\t\tfont-weight: 700;\r\n\t\tline-height: 1.3;\r\n\t\tmin-height: 42px;\r\n\t}\r\n\t.gsg-label {\r\n\t\tfont-size: 10px;\r\n\t\tcolor: #94a3b8;\r\n\t\ttext-transform: uppercase;\r\n\t\tfont-weight: 600;\r\n\t}\r\n\t.gsg-card-tags {\r\n\t\tdisplay: flex;\r\n\t\tflex-wrap: wrap;\r\n\t\tgap: 5px;\r\n\t\tmargin-top: 0.5em;\r\n\t\tpadding-bottom: 5px;\r\n\t}\r\n\t.gsg-card-tag {\r\n\t\tbackground: #f8fafc;\r\n\t\tpadding: 3px 8px;\r\n\t\tborder-radius: 4px;\r\n\t\tfont-size: 10px;\r\n\t\tcolor: #64748b;\r\n\t\tborder: 1px solid #f1f5f9;\r\n\t}\r\n\r\n\t.gsg-hover-details {\r\n\t\tposition: absolute;\r\n\t\tbottom: 0;\r\n\t\tleft: 0;\r\n\t\twidth: 100%;\r\n\t\theight: 0;\r\n\t\tbackground: #ffffff;\r\n\t\tpadding: 0 18px;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tgap: 12px;\r\n\t\topacity: 0;\r\n\t\tvisibility: hidden;\r\n\t\ttransition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);\r\n\t\tz-index: 5;\r\n\t\tbox-sizing: border-box;\r\n\t\toverflow: hidden;\r\n\t}\r\n\r\n\t.gsg-hover-details.active {\r\n\t\theight: calc(100% + 40px);\r\n\t\topacity: 1;\r\n\t\tvisibility: visible;\r\n\t\tpadding-top: 20px;\r\n\t\tbox-shadow: 0 -5px 15px rgba(0, 0, 0, 0.05);\r\n\t}\r\n\r\n\t.gsg-detail-header {\r\n\t\tfont-weight: 800;\r\n\t\tcolor: #1a365d;\r\n\t\tfont-size: 13px;\r\n\t\ttext-transform: uppercase;\r\n\t\tmargin-bottom: 5px;\r\n\t\tborder-bottom: 1px solid #f1f5f9;\r\n\t\tpadding-bottom: 5px;\r\n\t}\r\n\t.gsg-info-row {\r\n\t\tfont-size: 12px;\r\n\t\tcolor: #475569;\r\n\t\tline-height: 1.4;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tmargin-bottom: 8px;\r\n\t}\r\n\t.gsg-info-row strong {\r\n\t\tcolor: #1e293b;\r\n\t\tfont-size: 11px;\r\n\t\ttext-transform: uppercase;\r\n\t\tmargin-bottom: 2px;\r\n\t\tletter-spacing: 0.5px;\r\n\t}\r\n\t.gsg-info-row.email-row {\r\n\t\tword-break: break-all;\r\n\t}\r\n\r\n\t.gsg-card-footer {\r\n\t\tdisplay: flex;\r\n\t\tborder-top: 1px solid #f1f5f9;\r\n\t\tbackground: #fff;\r\n\t\tposition: relative;\r\n\t\tz-index: 10;\r\n\t\theight: 46px;\r\n\t}\r\n\t.gsg-footer-btn {\r\n\t\tflex: 1;\r\n\t\tpadding: 0 5px;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t\ttext-decoration: none;\r\n\t\tfont-size: 12px;\r\n\t\tfont-weight: 700;\r\n\t\tcursor: pointer;\r\n\t\tborder: none;\r\n\t\ttransition: background 0.2s;\r\n\t}\r\n\t.btn-details {\r\n\t\tcolor: #1a365d;\r\n\t\tbackground: #fff;\r\n\t\tborder-right: 1px solid #f1f5f9;\r\n\t}\r\n\t.btn-website {\r\n\t\tbackground: #1a365d;\r\n\t\tcolor: #ffffff !important;\r\n\t}\r\n\t.btn-website:hover {\r\n\t\tcolor: #ffffff !important;\r\n\t}\r\n\r\n\t@keyframes gsg-shimmer {\r\n\t\t0% {\r\n\t\t\tbackground-position: -468px 0;\r\n\t\t}\r\n\t\t100% {\r\n\t\t\tbackground-position: 468px 0;\r\n\t\t}\r\n\t}\r\n\t.gsg-skeleton-card {\r\n\t\theight: 380px;\r\n\t\tborder-radius: 12px;\r\n\t\tbackground: #f6f7f8;\r\n\t\tbackground-image: linear-gradient(to right, #f6f7f8 0%, #edeef1 20%, #f6f7f8 40%, #f6f7f8 100%);\r\n\t\tbackground-size: 800px 100%;\r\n\t\tanimation: gsg-shimmer 1.5s infinite linear;\r\n\t}\r\n\t#gsg-blur-area {\r\n\t\ttransition: filter 0.3s ease;\r\n\t}\r\n\t.gsg-blur {\r\n\t\tfilter: blur(8px);\r\n\t\tpointer-events: none;\r\n\t}\r\n\t.gsg-drawer-trigger {\r\n\t\tbackground: #f1f5f9;\r\n\t\tborder: 1px solid #e2e8f0;\r\n\t\tpadding: 8px 16px;\r\n\t\tborder-radius: 20px;\r\n\t\tfont-size: 13px;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: #475569;\r\n\t\tcursor: pointer;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tgap: 8px;\r\n\t}\r\n\t.gsg-overlay {\r\n\t\tposition: fixed;\r\n\t\ttop: 0;\r\n\t\tleft: 0;\r\n\t\twidth: 100%;\r\n\t\theight: 100%;\r\n\t\tbackground: rgba(0, 0, 0, 0.1);\r\n\t\topacity: 0;\r\n\t\tvisibility: hidden;\r\n\t\ttransition: 0.3s;\r\n\t\tz-index: 9999;\r\n\t}\r\n\t.gsg-overlay.active {\r\n\t\topacity: 1;\r\n\t\tvisibility: visible;\r\n\t}\r\n\t.gsg-drawer {\r\n\t\tposition: fixed;\r\n\t\ttop: 0;\r\n\t\tright: -400px;\r\n\t\twidth: 350px;\r\n\t\theight: 100%;\r\n\t\tbackground: #fff;\r\n\t\tbox-shadow: -5px 0 25px rgba(0, 0, 0, 0.05);\r\n\t\ttransition: 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);\r\n\t\tz-index: 10000;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t}\r\n\t.gsg-drawer.active {\r\n\t\tright: 0;\r\n\t}\r\n\t.gsg-drawer-header {\r\n\t\tpadding: 20px;\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: flex-end;\r\n\t}\r\n\t.gsg-close-btn {\r\n\t\tbackground: none;\r\n\t\tborder: none;\r\n\t\tfont-size: 28px;\r\n\t\tcursor: pointer;\r\n\t\tcolor: #1a365d;\r\n\t}\r\n\t.gsg-drawer-body {\r\n\t\tpadding: 0 30px;\r\n\t\toverflow-y: auto;\r\n\t\tflex-grow: 1;\r\n\t}\r\n\t.gsg-drawer-title {\r\n\t\tfont-size: 24px;\r\n\t\tcolor: #1a365d;\r\n\t\tmargin-bottom: 15px;\r\n\t\tfont-weight: 700;\r\n\t}\r\n\t.gsg-drawer-section {\r\n\t\tmargin-bottom: 35px;\r\n\t}\r\n\t.gsg-tag-group {\r\n\t\tdisplay: flex;\r\n\t\tflex-wrap: wrap;\r\n\t\tgap: 10px;\r\n\t}\r\n\t.gsg-drawer-tag {\r\n\t\tbackground: #f8fafc;\r\n\t\tborder: 1px solid #e2e8f0;\r\n\t\tpadding: 6px 14px;\r\n\t\tborder-radius: 8px;\r\n\t\tfont-size: 12px;\r\n\t\tcolor: #64748b;\r\n\t\tcursor: pointer;\r\n\t\ttransition: all 0.2s;\r\n\t}\r\n\t.gsg-drawer-tag.active {\r\n\t\tbackground: #1a365d;\r\n\t\tcolor: #fff;\r\n\t\tborder-color: #1a365d;\r\n\t}\r\n\t.gsg-show-more {\r\n\t\tbackground: none;\r\n\t\tborder: none;\r\n\t\tcolor: #1a365d;\r\n\t\tfont-weight: 700;\r\n\t\tfont-size: 13px;\r\n\t\tmargin-top: 15px;\r\n\t\tcursor: pointer;\r\n\t}\r\n\t.gsg-drawer-footer {\r\n\t\tpadding: 20px 30px;\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between;\r\n\t\talign-items: center;\r\n\t\tborder-top: 1px solid #f1f5f9;\r\n\t}\r\n\t.gsg-footer-link {\r\n\t\tbackground: none;\r\n\t\tborder: none;\r\n\t\tcolor: #1a365d;\r\n\t\tfont-weight: 700;\r\n\t\tcursor: pointer;\r\n\t\ttext-decoration: underline;\r\n\t\tfont-size: 14px;\r\n\t}\r\n\t.gsg-footer-apply {\r\n\t\tbackground: #1a365d;\r\n\t\tcolor: #fff;\r\n\t\tborder: none;\r\n\t\tpadding: 12px 25px;\r\n\t\tborder-radius: 30px;\r\n\t\tfont-weight: 700;\r\n\t\tcursor: pointer;\r\n\t}\r\n<\/style>\r\n\r\n<script>\r\n\tdocument.addEventListener(\"DOMContentLoaded\", async function () {\r\n\t\tconst grid = document.getElementById(\"gsg-campus-grid\");\r\n\t\tconst countryList = document.getElementById(\"gsg-country-list\");\r\n\t\tconst cityList = document.getElementById(\"gsg-city-list\");\r\n\r\n\t\tconst apiURL = \"https:\/\/globalschools.com\/wp-json\/gsg\/v1\/brand-details\/global-indian-international-school\";\r\n\r\n\t\tconst drawer = document.getElementById(\"gsg-filter-drawer\");\r\n\t\tconst overlay = document.getElementById(\"gsg-drawer-overlay\");\r\n\t\tconst blurArea = document.getElementById(\"gsg-blur-area\");\r\n\r\n\t\tconst ageList = document.getElementById(\"gsg-age-list\");\r\n\t\tconst facilityList = document.getElementById(\"gsg-facility-list\");\r\n\t\tconst facToggleBtn = document.getElementById(\"gsg-toggle-facilities\");\r\n\r\n\t\tlet apiData = null;\r\n\t\tlet allCampuses = [];\r\n\t\tlet showAllFacs = false;\r\n\r\n\t\t\/* ================= URL STATE ================= *\/\r\n\r\n\t\tconst params = new URLSearchParams(window.location.search);\r\n\r\n\t\tconst stripSlash = (v) => v.replace(\/\\\/+$\/, \"\");\r\n\t\tlet selectedCityIds = params.get(\"city_id\") ? params.get(\"city_id\").split(\",\").map(stripSlash).filter(Boolean) : [];\r\n\t\tlet selectedCurriculumIds = params.get(\"currs\") ? params.get(\"currs\").split(\",\").map(Number) : [];\r\n\r\n\t\tlet selectedAgeIds = [];\r\n\t\tlet selectedFacilityIds = [];\r\n\r\n\t\t\/* ================= HELPERS ================= *\/\r\n\r\n\t\tfunction getCountryIdForCity(cityId) {\r\n\t\t\tconst idStr = String(cityId);\r\n\t\t\tfor (const campus of allCampuses) {\r\n\t\t\t\tif (campus.cities.some((ct) => ct.id.toString() === idStr)) {\r\n\t\t\t\t\treturn campus.country_ids.length > 0 ? campus.country_ids[0] : null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfunction getCityIdsInCountry(countryId) {\r\n\t\t\tconst ids = new Set();\r\n\t\t\tallCampuses.filter((c) => c.country_ids.includes(countryId)).forEach((c) => c.cities.forEach((ct) => ids.add(ct.id.toString())));\r\n\t\t\treturn [...ids];\r\n\t\t}\r\n\r\n\t\t\/\/ Get all country IDs represented in selectedCityIds\r\n\t\tfunction getActiveCountryIds() {\r\n\t\t\tconst countries = new Set();\r\n\t\t\tselectedCityIds.forEach((item) => {\r\n\t\t\t\tif (item.startsWith(\"country_\")) {\r\n\t\t\t\t\tcountries.add(parseInt(item.replace(\"country_\", \"\")));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst cid = getCountryIdForCity(item);\r\n\t\t\t\t\tif (cid !== null) countries.add(cid);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn countries;\r\n\t\t}\r\n\r\n\t\tfunction getIndividualCityIds() {\r\n\t\t\treturn selectedCityIds.filter((id) => !id.startsWith(\"country_\"));\r\n\t\t}\r\n\r\n\t\tfunction getCountryCodes() {\r\n\t\t\treturn selectedCityIds.filter((id) => id.startsWith(\"country_\"));\r\n\t\t}\r\n\r\n\t\t\/\/ Check whether ALL countries have their country code in selectedCityIds\r\n\t\tfunction hasAllCountryCodes() {\r\n\t\t\tif (!apiData) return false;\r\n\t\t\treturn apiData.filters.all_available_countries.every((c) => selectedCityIds.includes(`country_${c.id}`));\r\n\t\t}\r\n\r\n\t\t\/\/ Set selectedCityIds to all country codes (= \"All Countries\" + \"All Cities\")\r\n\t\tfunction selectAllCountries() {\r\n\t\t\tselectedCityIds = apiData.filters.all_available_countries.map((c) => `country_${c.id}`);\r\n\t\t}\r\n\r\n\t\t\/\/ Check if a city is \"effectively selected\" for highlighting:\r\n\t\t\/\/ Either directly as an individual ID, or via its country code\r\n\t\tfunction isCityEffectivelySelected(cityIdStr) {\r\n\t\t\tif (selectedCityIds.includes(cityIdStr)) return true;\r\n\t\t\tconst countryId = getCountryIdForCity(cityIdStr);\r\n\t\t\treturn countryId !== null && selectedCityIds.includes(`country_${countryId}`);\r\n\t\t}\r\n\r\n\t\t\/* ================= FETCH ================= *\/\r\n\r\n\t\ttry {\r\n\t\t\tconst CACHE_KEY = \"gsg_brand_api\";\r\n\t\t\tconst CACHE_TTL = 60 * 60 * 1000;\r\n\r\n\t\t\tconst cached = sessionStorage.getItem(CACHE_KEY);\r\n\t\t\tif (cached) {\r\n\t\t\t\tconst { data, ts } = JSON.parse(cached);\r\n\t\t\t\tif (Date.now() - ts < CACHE_TTL) {\r\n\t\t\t\t\tapiData = data;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsessionStorage.removeItem(CACHE_KEY);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!apiData) {\r\n\t\t\t\tconst res = await fetch(apiURL);\r\n\t\t\t\tapiData = await res.json();\r\n\t\t\t\tsessionStorage.setItem(CACHE_KEY, JSON.stringify({ data: apiData, ts: Date.now() }));\r\n\t\t\t}\r\n\r\n\t\t\tallCampuses = apiData.campuses;\r\n\r\n\t\t\tif (selectedCityIds.length === 0) {\r\n\t\t\t\tselectAllCountries();\r\n\t\t\t}\r\n\r\n\t\t\tupdateUI();\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(err);\r\n\t\t\tgrid.innerHTML = \"<p>Error loading campuses<\/p>\";\r\n\t\t}\r\n\r\n\t\t\/* ================= CORE ================= *\/\r\n\r\n\t\tfunction updateUI() {\r\n\t\t\trenderFilters();\r\n\t\t\trenderDrawer();\r\n\t\t\tfilterAndRender();\r\n\t\t}\r\n\r\n\t\t\/* ================= FILTER RENDER ================= *\/\r\n\r\n\t\tfunction renderFilters() {\r\n\t\t\tconst activeCountryIds = getActiveCountryIds();\r\n\t\t\tconst countryCodes = getCountryCodes();\r\n\t\t\tconst individualCities = getIndividualCityIds();\r\n\r\n\t\t\t\/\/ \"All Countries\" only when truly all codes present,\r\n\t\t\t\/\/ OR multiple countries via individual cities only (no country codes mixed in)\r\n\t\t\tconst allCountriesActive = hasAllCountryCodes() || (activeCountryIds.size > 1 && countryCodes.length === 0);\r\n\r\n\t\t\t\/\/ \"All Cities\" only when no individual IDs AND truly all country codes present\r\n\t\t\t\/\/ (prevents partial country-code state from wrongly activating \"All Cities\")\r\n\t\t\tconst allCitiesActive = individualCities.length === 0 && (hasAllCountryCodes() || activeCountryIds.size === 1);\r\n\r\n\t\t\t\/* ---------- COUNTRY TABS ---------- *\/\r\n\t\t\tcountryList.innerHTML = \"\";\r\n\r\n\t\t\tcountryList.appendChild(\r\n\t\t\t\tcreateBtn(\"All Countries\", \"all\", allCountriesActive, () => {\r\n\t\t\t\t\tselectAllCountries();\r\n\t\t\t\t\tselectedCurriculumIds = [];\r\n\t\t\t\t\tselectedAgeIds = [];\r\n\t\t\t\t\tselectedFacilityIds = [];\r\n\t\t\t\t\tupdateUI();\r\n\t\t\t\t}),\r\n\t\t\t);\r\n\r\n\t\t\tapiData.filters.all_available_countries.forEach((country) => {\r\n\t\t\t\tconst isOnlyCountry = activeCountryIds.size === 1 && activeCountryIds.has(country.id);\r\n\r\n\t\t\t\tcountryList.appendChild(\r\n\t\t\t\t\tcreateBtn(country.name, `country_${country.id}`, isOnlyCountry, () => {\r\n\t\t\t\t\t\tselectedCityIds = [`country_${country.id}`];\r\n\t\t\t\t\t\tselectedCurriculumIds = [];\r\n\t\t\t\t\t\tselectedAgeIds = [];\r\n\t\t\t\t\t\tselectedFacilityIds = [];\r\n\t\t\t\t\t\tupdateUI();\r\n\t\t\t\t\t}),\r\n\t\t\t\t);\r\n\t\t\t});\r\n\r\n\t\t\t\/* ---------- CITY PILLS ---------- *\/\r\n\t\t\tcityList.innerHTML = \"\";\r\n\r\n\t\t\t\/\/ Which cities to display \u2014 original logic preserved:\r\n\t\t\t\/\/ Single country mode: only that country's cities\r\n\t\t\t\/\/ All Countries mode (or multi-country individual): all cities\r\n\t\t\tlet countriesToShow;\r\n\t\t\tif (activeCountryIds.size === 1 && !allCountriesActive) {\r\n\t\t\t\tcountriesToShow = activeCountryIds;\r\n\t\t\t} else {\r\n\t\t\t\tcountriesToShow = new Set(apiData.filters.all_available_countries.map((c) => c.id));\r\n\t\t\t}\r\n\r\n\t\t\tconst cityMap = new Map();\r\n\t\t\tallCampuses\r\n\t\t\t\t.filter((c) => c.country_ids.some((cid) => countriesToShow.has(cid)))\r\n\t\t\t\t.flatMap((c) => c.cities)\r\n\t\t\t\t.forEach((city) => cityMap.set(city.id, city));\r\n\t\t\tconst availableCities = Array.from(cityMap.values()).sort((a, b) => a.name.localeCompare(b.name));\r\n\r\n\t\t\t\/\/ \"All Cities\" button\r\n\t\t\tcityList.appendChild(\r\n\t\t\t\tcreateBtn(\"All Cities\", \"all_cities\", allCitiesActive, () => {\r\n\t\t\t\t\tif (activeCountryIds.size > 1) {\r\n\t\t\t\t\t\t\/\/ Multi-country state (including partial) \u2192 full reset\r\n\t\t\t\t\t\tselectAllCountries();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\/\/ Single country mode \u2192 restore all cities within that country only\r\n\t\t\t\t\t\tconst currentCountries = getActiveCountryIds();\r\n\t\t\t\t\t\tselectedCityIds = [...currentCountries].map((cid) => `country_${cid}`);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tupdateUI();\r\n\t\t\t\t}),\r\n\t\t\t);\r\n\r\n\t\t\t\/\/ Individual city pills\r\n\t\t\tavailableCities.forEach((city) => {\r\n\t\t\t\tconst idStr = String(city.id);\r\n\r\n\t\t\t\tconst active = !allCitiesActive && isCityEffectivelySelected(idStr);\r\n\r\n\t\t\t\tcityList.appendChild(\r\n\t\t\t\t\tcreateBtn(city.name, city.id, active, (id) => {\r\n\t\t\t\t\t\tconst str = String(id);\r\n\t\t\t\t\t\tconst cityCountryId = getCountryIdForCity(str);\r\n\r\n\t\t\t\t\t\tif (allCitiesActive) {\r\n\t\t\t\t\t\t\tselectedCityIds = [str];\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tconst countryCode = cityCountryId !== null ? `country_${cityCountryId}` : null;\r\n\t\t\t\t\t\t\tconst isDirectlySelected = selectedCityIds.includes(str);\r\n\t\t\t\t\t\t\tconst isViaCountryCode = countryCode && selectedCityIds.includes(countryCode);\r\n\r\n\t\t\t\t\t\t\tif (isDirectlySelected || isViaCountryCode) {\r\n\t\t\t\t\t\t\t\t\/\/ --- DESELECTING this city ---\r\n\t\t\t\t\t\t\t\tif (isViaCountryCode) {\r\n\t\t\t\t\t\t\t\t\tselectedCityIds = selectedCityIds.filter((x) => x !== countryCode);\r\n\t\t\t\t\t\t\t\t\tconst allInCountry = getCityIdsInCountry(cityCountryId);\r\n\t\t\t\t\t\t\t\t\tallInCountry.forEach((cId) => {\r\n\t\t\t\t\t\t\t\t\t\tif (cId !== str && !selectedCityIds.includes(cId)) {\r\n\t\t\t\t\t\t\t\t\t\t\tselectedCityIds.push(cId);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tselectedCityIds = selectedCityIds.filter((x) => x !== str);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif (selectedCityIds.length === 0) {\r\n\t\t\t\t\t\t\t\t\tif (cityCountryId !== null && activeCountryIds.size === 1) {\r\n\t\t\t\t\t\t\t\t\t\tselectedCityIds = [`country_${cityCountryId}`];\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tselectAllCountries();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\/\/ --- SELECTING a new city ---\r\n\t\t\t\t\t\t\t\tif (isViaCountryCode) {\r\n\t\t\t\t\t\t\t\t\tselectedCityIds = selectedCityIds.filter((x) => x !== countryCode);\r\n\t\t\t\t\t\t\t\t\tconst allInCountry = getCityIdsInCountry(cityCountryId);\r\n\t\t\t\t\t\t\t\t\tallInCountry.forEach((cId) => {\r\n\t\t\t\t\t\t\t\t\t\tif (!selectedCityIds.includes(cId)) {\r\n\t\t\t\t\t\t\t\t\t\t\tselectedCityIds.push(cId);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif (!selectedCityIds.includes(str)) {\r\n\t\t\t\t\t\t\t\t\tselectedCityIds.push(str);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\/\/ Collapse all-cities-in-country back to country code\r\n\t\t\t\t\t\t\tconst relevantCountries = new Set(\r\n\t\t\t\t\t\t\t\tselectedCityIds\r\n\t\t\t\t\t\t\t\t\t.filter((x) => !x.startsWith(\"country_\"))\r\n\t\t\t\t\t\t\t\t\t.map((x) => getCountryIdForCity(x))\r\n\t\t\t\t\t\t\t\t\t.filter((x) => x !== null),\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\trelevantCountries.forEach((cid) => {\r\n\t\t\t\t\t\t\t\tconst allInCountry = getCityIdsInCountry(cid);\r\n\t\t\t\t\t\t\t\tconst allSelected = allInCountry.every((c) => selectedCityIds.includes(c));\r\n\t\t\t\t\t\t\t\tif (allSelected) {\r\n\t\t\t\t\t\t\t\t\tselectedCityIds = selectedCityIds.filter((x) => !allInCountry.includes(x));\r\n\t\t\t\t\t\t\t\t\tif (!selectedCityIds.includes(`country_${cid}`)) {\r\n\t\t\t\t\t\t\t\t\t\tselectedCityIds.push(`country_${cid}`);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tupdateUI();\r\n\t\t\t\t\t}),\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t\/* ================= DRAWER ================= *\/\r\n\r\n\t\tfunction renderDrawer() {\r\n\t\t\t\/\/ Scope to campuses matching current selection\r\n\t\t\tlet cityScoped = allCampuses;\r\n\t\t\tif (selectedCityIds.length > 0) {\r\n\t\t\t\tcityScoped = allCampuses.filter((c) => {\r\n\t\t\t\t\treturn selectedCityIds.some((item) => {\r\n\t\t\t\t\t\tif (item.startsWith(\"country_\")) {\r\n\t\t\t\t\t\t\tconst countryId = parseInt(item.replace(\"country_\", \"\"));\r\n\t\t\t\t\t\t\treturn c.country_ids.includes(countryId);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn c.cities.some((ct) => ct.id.toString() === item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t\/* ---------- AGE ---------- *\/\r\n\t\t\tageList.innerHTML = \"\";\r\n\t\t\tconst ageIds = [...new Set(cityScoped.flatMap((c) => c.ages.map((a) => a.id)))];\r\n\r\n\t\t\tapiData.filters.all_available_ages.forEach((age) => {\r\n\t\t\t\tif (ageIds.includes(age.id)) {\r\n\t\t\t\t\tconst tag = document.createElement(\"div\");\r\n\t\t\t\t\ttag.className = \"gsg-drawer-tag\" + (selectedAgeIds.includes(age.id) ? \" active\" : \"\");\r\n\t\t\t\t\ttag.textContent = age.name;\r\n\t\t\t\t\ttag.onclick = () => {\r\n\t\t\t\t\t\tselectedAgeIds = selectedAgeIds.includes(age.id)\r\n\t\t\t\t\t\t\t? selectedAgeIds.filter((x) => x !== age.id)\r\n\t\t\t\t\t\t\t: [...selectedAgeIds, age.id];\r\n\t\t\t\t\t\tupdateUI();\r\n\t\t\t\t\t};\r\n\t\t\t\t\tageList.appendChild(tag);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t\/* ---------- FACILITY ---------- *\/\r\n\t\t\tfacilityList.innerHTML = \"\";\r\n\t\t\tconst facIds = [...new Set(cityScoped.flatMap((c) => c.facilities.map((f) => f.id)))];\r\n\t\t\tconst facilities = apiData.filters.all_available_facilities.filter((f) => facIds.includes(f.id));\r\n\r\n\t\t\tfacToggleBtn.style.display = facilities.length > 6 ? \"block\" : \"none\";\r\n\t\t\tfacToggleBtn.textContent = showAllFacs ? \"- Show Less\" : \"+ Show All\";\r\n\r\n\t\t\t(showAllFacs ? facilities : facilities.slice(0, 6)).forEach((f) => {\r\n\t\t\t\tconst tag = document.createElement(\"div\");\r\n\t\t\t\ttag.className = \"gsg-drawer-tag\" + (selectedFacilityIds.includes(f.id) ? \" active\" : \"\");\r\n\t\t\t\ttag.textContent = f.name;\r\n\t\t\t\ttag.onclick = () => {\r\n\t\t\t\t\tselectedFacilityIds = selectedFacilityIds.includes(f.id)\r\n\t\t\t\t\t\t? selectedFacilityIds.filter((x) => x !== f.id)\r\n\t\t\t\t\t\t: [...selectedFacilityIds, f.id];\r\n\t\t\t\t\tupdateUI();\r\n\t\t\t\t};\r\n\t\t\t\tfacilityList.appendChild(tag);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t\/* ================= FILTER & RENDER ================= *\/\r\n\r\n\t\tfunction filterAndRender() {\r\n\t\t\tconst results = allCampuses.filter((c) => {\r\n\t\t\t\tif (selectedCityIds.length > 0) {\r\n\t\t\t\t\tconst matchesCity = selectedCityIds.some((item) => {\r\n\t\t\t\t\t\tif (item.startsWith(\"country_\")) {\r\n\t\t\t\t\t\t\tconst countryId = parseInt(item.replace(\"country_\", \"\"));\r\n\t\t\t\t\t\t\treturn c.country_ids.includes(countryId);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn c.cities.some((ct) => ct.id.toString() === item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (!matchesCity) return false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (selectedCurriculumIds.length && !c.curriculums.some((cr) => selectedCurriculumIds.includes(cr.id))) return false;\r\n\t\t\t\tif (selectedAgeIds.length && !c.ages.some((a) => selectedAgeIds.includes(a.id))) return false;\r\n\t\t\t\tif (selectedFacilityIds.length && !selectedFacilityIds.every((fid) => c.facilities.some((f) => f.id === fid))) return false;\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\r\n\t\t\trenderGrid(results);\r\n\t\t}\r\n\r\n\t\tfunction renderGrid(campuses) {\r\n\t\t\tgrid.innerHTML = \"\";\r\n\t\t\tif (!campuses.length) {\r\n\t\t\t\tgrid.innerHTML = \"<p style='grid-column:1\/-1;text-align:center'>No campuses found<\/p>\";\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tcampuses.forEach((c) => {\r\n\t\t\t\tgrid.insertAdjacentHTML(\r\n\t\t\t\t\t\"beforeend\",\r\n\t\t\t\t\t`\r\n                <div class=\"gsg-card\">\r\n                    <div class=\"gsg-img-wrapper\">\r\n                        <img decoding=\"async\" src=\"${c.featured_img || \"\"}\" class=\"gsg-card-img\">\r\n                    <\/div>\r\n                    <div class=\"gsg-card-content\">\r\n                        <div class=\"gsg-label\">Campus<\/div>\r\n                        <h3 class=\"gsg-card-title\">${c.title}<\/h3>\r\n                        <div class=\"gsg-label\">Curriculum<\/div>\r\n                        <div class=\"gsg-card-tags\">\r\n                            ${c.curriculums.map((cr) => `<span class=\"gsg-card-tag\">${cr.name}<\/span>`).join(\"\")}\r\n                        <\/div>\r\n                        <div class=\"gsg-hover-details\">\r\n                                <div class=\"gsg-detail-header\">Details<\/div>\r\n                                <div class=\"gsg-info-row\"><strong>Address<\/strong><span>${c.meta.address || \"N\/A\"}<\/span><\/div>\r\n                                <div class=\"gsg-info-row\"><strong>Tel<\/strong><span>${c.meta.phone || \"N\/A\"}<\/span><\/div>\r\n                                <div class=\"gsg-info-row email-row\"><strong>Email<\/strong><span>${c.meta.email || \"N\/A\"}<\/span><\/div>\r\n                            <\/div>\r\n                    <\/div>\r\n                    <div class=\"gsg-card-footer\">\r\n                        <div class=\"gsg-footer-btn btn-details\">Details<\/div>\r\n                        <a href=\"${c.meta.website || \"#\"}\" target=\"_blank\" class=\"gsg-footer-btn btn-website\">Visit Website<\/a>\r\n                    <\/div>\r\n                <\/div>\r\n            `,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\tattachListeners();\r\n\t\t}\r\n\r\n\t\t\/* ================= HELPERS ================= *\/\r\n\r\n\t\tfunction createBtn(label, id, active, cb) {\r\n\t\t\tconst b = document.createElement(\"button\");\r\n\t\t\tb.className = \"gsg-filter-btn\" + (active ? \" active\" : \"\");\r\n\t\t\tb.textContent = label;\r\n\t\t\tb.onclick = (e) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcb(id);\r\n\t\t\t};\r\n\t\t\treturn b;\r\n\t\t}\r\n\r\n\t\tfunction attachListeners() {\r\n\t\t\tdocument.querySelectorAll(\".gsg-card\").forEach((card) => {\r\n\t\t\t\tconst btn = card.querySelector(\".btn-details\");\r\n\t\t\t\tconst details = card.querySelector(\".gsg-hover-details\");\r\n\t\t\t\tbtn.addEventListener(\"mouseenter\", () => details.classList.add(\"active\"));\r\n\t\t\t\tcard.addEventListener(\"mouseleave\", () => details.classList.remove(\"active\"));\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t\/* ================= DRAWER EVENTS ================= *\/\r\n\r\n\t\tdocument.getElementById(\"gsg-open-drawer\").onclick = () => {\r\n\t\t\tdrawer.classList.add(\"active\");\r\n\t\t\toverlay.classList.add(\"active\");\r\n\t\t\tblurArea.classList.add(\"gsg-blur\");\r\n\t\t};\r\n\r\n\t\tconst closeDrawer = () => {\r\n\t\t\tdrawer.classList.remove(\"active\");\r\n\t\t\toverlay.classList.remove(\"active\");\r\n\t\t\tblurArea.classList.remove(\"gsg-blur\");\r\n\t\t};\r\n\r\n\t\tdocument.getElementById(\"gsg-close-drawer\").onclick = closeDrawer;\r\n\t\toverlay.onclick = closeDrawer;\r\n\t\tdocument.getElementById(\"gsg-apply-drawer\").onclick = closeDrawer;\r\n\r\n\t\tdocument.getElementById(\"gsg-clear-filters\").onclick = () => {\r\n\t\t\tselectAllCountries();\r\n\t\t\tselectedCurriculumIds = [];\r\n\t\t\tselectedAgeIds = [];\r\n\t\t\tselectedFacilityIds = [];\r\n\t\t\tupdateUI();\r\n\t\t\tcloseDrawer();\r\n\t\t};\r\n\r\n\t\tfacToggleBtn.onclick = () => {\r\n\t\t\tshowAllFacs = !showAllFacs;\r\n\t\t\trenderDrawer();\r\n\t\t};\r\n\t});\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Our Campuses Filters &times; Age Facilities + Show All Remove filters Apply filters<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"content-type":"","footnotes":""},"class_list":["post-35946","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Our Campuses - GIIS Noida<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/globalindianschool.org\/noida\/our-campuses\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Our Campuses - GIIS Noida\" \/>\n<meta property=\"og:description\" content=\"Our Campuses Filters &times; Age Facilities + Show All Remove filters Apply filters\" \/>\n<meta property=\"og:url\" content=\"https:\/\/globalindianschool.org\/noida\/our-campuses\/\" \/>\n<meta property=\"og:site_name\" content=\"GIIS Noida\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-23T05:10:45+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/our-campuses\\\/\",\"url\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/our-campuses\\\/\",\"name\":\"Our Campuses - GIIS Noida\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/#website\"},\"datePublished\":\"2026-02-27T05:53:12+00:00\",\"dateModified\":\"2026-03-23T05:10:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/our-campuses\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/our-campuses\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/our-campuses\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Our Campuses\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/#website\",\"url\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/\",\"name\":\"GIIS Noida\",\"description\":\"GIIS Noida stands out as a top international school, offering a global curriculum, world-class education, and a vibrant community that nurtures tomorrow\u2019s leaders. Enrol today in this award-winning institution.\",\"publisher\":{\"@id\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/#organization\",\"name\":\"GIIS Noida\",\"url\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/logo.svg\",\"width\":454.8,\"height\":219.2,\"caption\":\"GIIS Noida\"},\"image\":{\"@id\":\"https:\\\/\\\/globalindianschool.org\\\/noida\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Our Campuses - GIIS Noida","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/globalindianschool.org\/noida\/our-campuses\/","og_locale":"en_US","og_type":"article","og_title":"Our Campuses - GIIS Noida","og_description":"Our Campuses Filters &times; Age Facilities + Show All Remove filters Apply filters","og_url":"https:\/\/globalindianschool.org\/noida\/our-campuses\/","og_site_name":"GIIS Noida","article_modified_time":"2026-03-23T05:10:45+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/globalindianschool.org\/noida\/our-campuses\/","url":"https:\/\/globalindianschool.org\/noida\/our-campuses\/","name":"Our Campuses - GIIS Noida","isPartOf":{"@id":"https:\/\/globalindianschool.org\/noida\/#website"},"datePublished":"2026-02-27T05:53:12+00:00","dateModified":"2026-03-23T05:10:45+00:00","breadcrumb":{"@id":"https:\/\/globalindianschool.org\/noida\/our-campuses\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/globalindianschool.org\/noida\/our-campuses\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/globalindianschool.org\/noida\/our-campuses\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/globalindianschool.org\/noida\/"},{"@type":"ListItem","position":2,"name":"Our Campuses"}]},{"@type":"WebSite","@id":"https:\/\/globalindianschool.org\/noida\/#website","url":"https:\/\/globalindianschool.org\/noida\/","name":"GIIS Noida","description":"GIIS Noida stands out as a top international school, offering a global curriculum, world-class education, and a vibrant community that nurtures tomorrow\u2019s leaders. Enrol today in this award-winning institution.","publisher":{"@id":"https:\/\/globalindianschool.org\/noida\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/globalindianschool.org\/noida\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/globalindianschool.org\/noida\/#organization","name":"GIIS Noida","url":"https:\/\/globalindianschool.org\/noida\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/globalindianschool.org\/noida\/#\/schema\/logo\/image\/","url":"https:\/\/globalindianschool.org\/noida\/wp-content\/uploads\/2023\/09\/logo.svg","contentUrl":"https:\/\/globalindianschool.org\/noida\/wp-content\/uploads\/2023\/09\/logo.svg","width":454.8,"height":219.2,"caption":"GIIS Noida"},"image":{"@id":"https:\/\/globalindianschool.org\/noida\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/globalindianschool.org\/noida\/wp-json\/wp\/v2\/pages\/35946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/globalindianschool.org\/noida\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/globalindianschool.org\/noida\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/globalindianschool.org\/noida\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/globalindianschool.org\/noida\/wp-json\/wp\/v2\/comments?post=35946"}],"version-history":[{"count":6,"href":"https:\/\/globalindianschool.org\/noida\/wp-json\/wp\/v2\/pages\/35946\/revisions"}],"predecessor-version":[{"id":36275,"href":"https:\/\/globalindianschool.org\/noida\/wp-json\/wp\/v2\/pages\/35946\/revisions\/36275"}],"wp:attachment":[{"href":"https:\/\/globalindianschool.org\/noida\/wp-json\/wp\/v2\/media?parent=35946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}