1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 7 8 9 <title>Contact us - Berges Institute Spanish Classes</title> 10 11 <meta name="description" content="Send us your question and we will get back to you by email."> 12 13 <link rel="canonical" href="https://www.bergesinstitutespanish.com/help/contact"> 14 15 16 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 17 <link rel="preconnect" href="https://unpkg.com" crossorigin> 18 19 <style> 20 /* latin-ext */ 21 @font-face { 22 font-family: 'Roboto'; 23 font-style: italic; 24 font-weight: 100 900; 25 font-stretch: 100%; 26 font-display: swap; 27 src: url(https://fonts.gstatic.com/s/roboto/v50/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCHkaSTbQWt4N.woff2) format('woff2'); 28 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; 29 } 30 /* latin */ 31 @font-face { 32 font-family: 'Roboto'; 33 font-style: italic; 34 font-weight: 100 900; 35 font-stretch: 100%; 36 font-display: swap; 37 src: url(https://fonts.gstatic.com/s/roboto/v50/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBnkaSTbQWg.woff2) format('woff2'); 38 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 39 } 40 /* latin-ext */ 41 @font-face { 42 font-family: 'Roboto'; 43 font-style: normal; 44 font-weight: 100 900; 45 font-stretch: 100%; 46 font-display: swap; 47 src: url(https://fonts.gstatic.com/s/roboto/v50/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBHMdazTgWw.woff2) format('woff2'); 48 unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; 49 } 50 /* latin */ 51 @font-face { 52 font-family: 'Roboto'; 53 font-style: normal; 54 font-weight: 100 900; 55 font-stretch: 100%; 56 font-display: swap; 57 src: url(https://fonts.gstatic.com/s/roboto/v50/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBHMdazQ.woff2) format('woff2'); 58 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 59 } 60</style> 61 62 <link rel="preload" as="style" href="https://www.bergesinstitutespanish.com/build/assets/app-x_qLNQJa.css" /><link rel="stylesheet" href="https://www.bergesinstitutespanish.com/build/assets/app-x_qLNQJa.css" data-navigate-track="reload" /> 63 <style> 64 #navbar .navbar-logo { 65 width: 230px; 66 height: auto; 67 } 68 69 #navbar .nav-link { 70 color: var(--bs-body-color); 71 } 72 73 @media (hover: hover) { 74 #navbar .nav-link:hover { 75 text-decoration: underline; 76 } 77 } 78 79 @media (min-width: 992px) { 80 #navbar .navbar-logo { 81 width: 250px; 82 } 83 } 84 </style> 85 86 87 <meta property="og:title" content="Contact us - Berges Institute Spanish Classes"> 88 <meta property="og:description" content="Send us your question and we will get back to you by email."> 89 <meta property="og:url" content="https://www.bergesinstitutespanish.com/help/contact"> 90 <meta property="og:type" content="website"> 91 <meta property="og:site_name" content="Berges Institute Spanish Classes"> 92 <meta property="og:locale" content="en_US"> 93 <meta property="og:image" content="https://www.bergesinstitutespanish.com/img/app.jpg"> 94 <meta name="twitter:card" content="summary_large_image"> 95 <meta name="twitter:title" content="Contact us - Berges Institute Spanish Classes"> 96 <meta name="twitter:description" content="Send us your question and we will get back to you by email."> 97 <meta name="twitter:image" content="https://www.bergesinstitutespanish.com/img/app.jpg"> 98 99 <!-- Favicon --> 100 <link rel="icon" href="https://www.bergesinstitutespanish.com/img/favicon.png"> 101</head> 102<body class="bg-white"> 103 <header> 104 <div id="navbar" class="container-fluid px-0 border-bottom bg-white" style="z-index: 40"> 105 <nav class="d-flex align-items-center px-4 py-2" style="min-height: 64px" aria-label="Main"> 106 <a href="https://www.bergesinstitutespanish.com" 107 class="d-flex align-items-center text-black flex-shrink-0 me-lg-4"> 108 <img class="navbar-logo" alt="Berges Institute" width="250" height="26" 109 src="https://www.bergesinstitutespanish.com/img/berges_logo.svg"> 110 </a> 111 112 113 <ul class="nav d-none d-lg-flex align-items-center"> 114 <li class="nav-item"><a class="nav-link px-2" href="/levels-and-schedule">Spanish courses</a></li> 115<li class="nav-item"><a class="nav-link px-2" href="/online-tests/online-placement-test?source=main_menu">Placement test</a></li> 116<li class="nav-item"><a class="nav-link px-2" href="/prices">Prices</a></li> 117<li class="nav-item"><a class="nav-link px-2" href="/deal-for-beginners">Deal for absolute beginners</a></li> 118 </ul> 119 <ul class="nav d-none d-lg-flex align-items-center ms-auto"> 120 <li class="nav-item"><a class="nav-link px-2" href="https://www.bergesinstitutespanish.com/login">Sign in</a></li> 121 <li class="nav-item"><a class="nav-link px-2" href="https://www.bergesinstitutespanish.com/register">Sign up</a></li> 122 </ul> 123 124 125 <div class="dropdown d-lg-none d-flex align-items-center ms-auto"> 126 <button type="button" 127 class="nav-button d-flex align-items-center justify-content-center text-black border-0 bg-white p-1" 128 id="dropdownMenuButton" 129 data-bs-toggle="dropdown" 130 aria-expanded="false" 131 aria-label="Open the menu"> 132 <i data-feather="menu" class="d-block" style="width: 30px; height: 30px;"></i> 133 </button> 134 135 <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="dropdownMenuButton"> 136 <li><a class="dropdown-item py-2 px-3" href="/levels-and-schedule">Spanish courses</a></li> 137<li><a class="dropdown-item py-2 px-3" href="/online-tests/online-placement-test?source=main_menu">Placement test</a></li> 138<li><a class="dropdown-item py-2 px-3" href="/prices">Prices</a></li> 139<li><a class="dropdown-item py-2 px-3" href="/deal-for-beginners">Deal for absolute beginners</a></li> 140 <li><hr class="dropdown-divider"></li> 141 <li><a class="dropdown-item py-2 px-3" href="https://www.bergesinstitutespanish.com/login">Sign in</a></li> 142 <li><a class="dropdown-item py-2 px-3" href="https://www.bergesinstitutespanish.com/register">Sign up</a></li> 143 </ul> 144 </div> 145 </nav> 146 </div> 147</header> 148 149 150 151 <main role="main"> 152 <div class="pb-5"> 153 <div class="container col-xxl-6 px-4 py-5"> 154 <h1 class="mb-4">Contact us</h1> 155 156 <p class="mb-4"> 157 Send us your question and we will get back to you by email. We try to respond within 3 business days.
158 </p> 159 160 <form method="POST"> 161 <input type="hidden" name="_token" value="pMHpHxK7pY6f2UgoxZDnzrYzS6eoQwwJdULYu4Br" autocomplete="off"> 162 <div style="position: absolute; left: -9999px;" aria-hidden="true"> 163 <label>Company <input type="text" name="company" tabindex="-1" autocomplete="off"></label> 164 </div> 165 166 <div class="mb-3"> 167 <label class="form-label" for="name">Name</label> 168 <input class="form-control " type="text" id="name" 169 name="name" value=""> 170 </div> 171 172 <div class="mb-3"> 173 <label class="form-label" for="email">Email</label> 174 <input class="form-control " type="email" id="email" 175 name="email" value="" required> 176 </div> 177 178 <div class="mb-3"> 179 <label class="form-label" for="subject">Subject</label> 180 <input class="form-control " type="text" id="subject" 181 name="subject" value="" required> 182 </div> 183 184 <div class="mb-4"> 185 <label class="form-label" for="message">Message</label> 186 <textarea class="form-control " id="message" 187 name="message" rows="7" required></textarea> 188 </div> 189 190 <button type="submit" class="btn btn-dark"> 191 Send 192 </button> 193 </form> 194 </div> 195 </div> 196 </main> 197 198 <footer class="footer mt-auto pb-2 small bg-dark"> 199 <div class="bg-light"> 200 <div class="container col-xxl-8 px-4 py-5"> 201 <div class="h3">Spanish Learning Categories</div> 202 <ul class="d-flex flex-wrap px-0" style="list-style: none"> 203 <li class="mb-2"> 204 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-learning-categories/spanish-for-professionals"> 205 Spanish for Professionals 206 </a> 207 <span class="mx-2">|</span> </li> 208 <li class="mb-2"> 209 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-learning-categories/spanish-by-learning-goal"> 210 Spanish by Learning Goal 211 </a> 212 </li> 213 </ul> 214 215 <div class="h3">Learn Spanish in your city</div> 216 <ul class="d-flex flex-wrap px-0" style="list-style: none"> 217 <li class="mb-2"> 218 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/new-york-city"> 219 Spanish classes in New York City 220 </a> 221 <span class="mx-2">|</span> </li> 222 <li class="mb-2"> 223 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/chicago"> 224 Spanish classes in Chicago 225 </a> 226 <span class="mx-2">|</span> </li> 227 <li class="mb-2"> 228 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classe
228s/cities/los-angeles"> 229 Spanish classes in Los Angeles 230 </a> 231 <span class="mx-2">|</span> </li> 232 <li class="mb-2"> 233 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/san-francisco"> 234 Spanish classes in San Francisco 235 </a> 236 <span class="mx-2">|</span> </li> 237 <li class="mb-2"> 238 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/miami"> 239 Spanish classes in Miami 240 </a> 241 <span class="mx-2">|</span> </li> 242 <li class="mb-2"> 243 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/boston"> 244 Spanish classes in Boston 245 </a> 246 <span class="mx-2">|</span> </li> 247 <li class="mb-2"> 248 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/toronto"> 249 Spanish classes in Toronto 250 </a> 251 <span class="mx-2">|</span> </li> 252 <li class="mb-2"> 253 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/vancouver"> 254 Spanish classes in Vancouver 255 </a> 256 <span class="mx-2">|</span> </li> 257 <li class="mb-2"> 258 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/london"> 259 Spanish classes in London 260 </a> 261 <span class="mx-2">|</span> </li> 262 <li class="mb-2"> 263 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/dublin"> 264 Spanish classes in Dublin 265 </a> 266 <span class="mx-2">|</span> </li> 267 <li class="mb-2"> 268 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/mumbai"> 269 Spanish classes in Mumbai 270 </a> 271 <span class="mx-2">|</span> </li> 272 <li class="mb-2"> 273 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/new-delhi"> 274 Spanish classes in New Delhi 275 </a> 276 <span class="mx-2">|</span> </li> 277 <li class="mb-2"> 278 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/dubai"> 279 Spanish classes in Dubai 280 </a> 281 <span class="mx-2">|</span> </li> 282 <li class="mb-2"> 283 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/melbourne"> 284 Spanish classes in Melbourne 285 </a>
286 <span class="mx-2">|</span> </li> 287 <li class="mb-2"> 288 <a class="text-dark" href="https://www.bergesinstitutespanish.com/spanish-classes/cities/sydney"> 289 Spanish classes in Sydney 290 </a> 291 </li> 292 </ul> 293 </div> 294 </div> 295 <div class="container col-xxl-8 px-4 py-5"> 296 <div class="row"> 297 <div class="col-md-3"> 298 <div class="h4 my-3 text-white">Company</div> 299 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/help">Help center</a></div> 300 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/help/contact">Contact us</a></div> 301 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/the-berges-story">The Berges story</a></div> 302 <div class="mt-2"><a href="/people">Instructors</a></div> 303 </div> 304 <div class="col-md-3"> 305 <div class="h4 my-3 text-white">Resources</div> 306 <div class="mt-2"><a href="/levels-and-schedule">Spanish courses</a></div> 307 <div class="mt-2"><a href="/prices">Prices</a></div> 308 <div class="mt-2"><a href="/deal-for-beginners">Deal for absolute beginners</a></div> 309 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/the-graf-method">The Graf Method</a></div> 310 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/holiday-schedule">Holiday schedule</a></div> 311 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/blog">Blog</a></div> 312 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/spanish-verb-conjugations">Spanish verb conjugations</a></div> 313 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/how-to-say-in-spanish">Common words and phrases in Spanish</a></div> 314 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/podcasts">Podcasts</a></div> 315 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/papers">Papers</a></div> 316 <div class="mt-2"><a href="/online-tests/online-placement-test?source=footer">Online placement test</a></div> 317 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/spanish-speaking-countries">Spanish-speaking countries</a></div> 318 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/spanish-native-speakers">Native Spanish speakers worldwide: an estimate</a></div> 319 </div> 320 <div class="col-md-3"> 321 <div class="h4 my-3 text-white">Stuff</div> 322 <div class="mt-2"><a href="/affiliate-program">Affiliate program</a></div> 323 <div class="mt-2"><a href="/gift-cards">Gift cards</a></div> 324 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/deep-spanish">Deep Spanish</a></div> 325 <div class="mt-2"><a href="https://www.amazon.com/s?k=graf+method+spanish&i=stripbooks&ref=nb_sb_noss">Books</a></div> 326 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/download">Desktop app</a></div> 327 <div class="mt-2"><a href="https://apps.apple.com/app/berges-textbooks/id6759491393">Berges Textbooks for iOS</a></div> 328 <div class="mt-2"><a href="https://play.google.com/store/apps/details?id=com.berges.spanishclasses">Berges Textbooks for Android</a></div> 329 <div class="mt-2"><a href="https://www.bergesinstitutespanish.com/in-the-press">In the press</a></div> 330 <div class="mt-2"><a href="https://www.bergesenglish.com">Clases de inglés</a></div> 331 <div class="mt-2"><a href="https://berges.ai">Berges AI</a></div> 332 </div> 333 <div class="col-md-3"> 334 <div class="h4 my-3 text-white">Social</div> 335 <div class="mt-2"><a href="https://www.youtube.com/c/BergesInstitute">YouTube</a></div> 336 <div class="mt-2"><a href="https://www.linkedin.com/company/berges-institute">LinkedIn</a></div> 337 <div class="mt-2"><a href="https://x.com/bergesinstitute">Twitter</a></div> 338 <div class="mt-2"><a href="https://www.instagram.com/berges_institute">Instagram</a></div> 339 <div class="mt-2"><a href="https://www.facebook.com/bergesinstitute">Facebook</a></div> 340 </div> 341 </div> 342 343 <hr class="my-4 border border-white"> 344 345 <div class="row"> 346 <div class="col-md-12"> 347 <div class="h4 mb-3 text-white">Mailing Address</div> 348 <div class="mt-2 text-white"> 349 <div class="mt-2"> 350 <div>Berges Institute SLU</div> 351 <div>Calle Valgrande 8, Pl. 2</div> 352 <div>28108 Alcobendas, Comunidad de Madrid, Spain</div> 353</div> 354 </div> 355 </div> 356 </div> 357 358 <hr class="my-4 border border-white"> 359 360 <div class="h4 mt-3 text-white mb-3">Spanish Classes Near You</div> 361 <div class="d-flex flex-wrap"> 362 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classe
362s/states-and-countries/new-york">Spanish classes in New York</a></div> 363 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/california">Spanish classes in California</a></div> 364 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/illinois">Spanish classes in Illinois</a></div> 365 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/texas">Spanish classes in Texas</a></div> 366 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/florida">Spanish classes in Florida</a></div> 367 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/massachusetts">Spanish classes in Massachusetts</a></div> 368 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/new-jersey">Spanish classes in New Jersey</a></div> 369 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/british-columbia">Spanish classes in British Columbia</a></div> 370 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/quebec">Spanish classes in Quebec</a></div> 371 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/england">Spanish classes in England</a></div> 372 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classe
372s/states-and-countries/scotland">Spanish classes in Scotland</a></div> 373 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/ireland">Spanish classes in Ireland</a></div> 374 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/maharashtra">Spanish classes in Maharashtra</a></div> 375 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/delhi">Spanish classes in Delhi</a></div> 376 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/victoria">Spanish classes in Victoria</a></div> 377 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/states-and-countries/new-south-wales">Spanish classes in New South Wales</a></div> 378 <div class="me-3 mb-3"><a class="text-white" href="https://www.bergesinstitutespanish.com/spanish-classes/all-states-and-countries"> 379 Spanish classes in other states and countries</a></div> 380 </div> 381 382 <div class="my-5 pt-5 text-white"> 383 <div>© 2026, Berges Institute SLU</div> 384 <div class="mt-2"> 385 <a href="https://www.bergesinstitutespanish.com/privacy-policy">Privacy Policy</a> 386 | <a href="https://www.bergesinstitutespanish.com/cookie-policy">Cookie Policy</a> 387 | <a href="#" onclick="event.preventDefault(); window.showCookiePreferences && window.showCookiePreferences();">Cookie preferences</a> 388 | <a href="https://www.bergesinstitutespanish.com/terms-of-service">Terms of Service</a> 389 </div> 390 </div> 391 </div> 392 </footer> 393 394 <link rel="modulepreload" as="script" href="https://www.bergesinstitutespanish.com/build/assets/pages-DrmaPRPz.js" /><link rel="modulepreload" as="script" href="https://www.bergesinstitutespanish.com/build/assets/bootstrap.esm-CjE0EDlS.js" />
394<script type="module" src="https://www.bergesinstitutespanish.com/build/assets/pages-DrmaPRPz.js" data-navigate-track="reload"></script>
394<script> 395 (function () { 396 const popImages = document.querySelectorAll('.pop'); 397 398 pop(); 399 400 window.addEventListener('scroll', () => pop()); 401 402 function pop() { 403 popImages.forEach(item => { 404 if (item.getBoundingClientRect().top < window.innerHeight && item.getBoundingClientRect().bottom >= 0) { 405 if (!item.classList.contains('top')) item.classList.add('img-popup'); 406 } 407 }); 408 } 409 410 const zoomEls = document.querySelectorAll('.zoom'); 411 412 zoom(); 413 414 window.addEventListener('scroll', () => zoom()); 415 416 function zoom() { 417 zoomEls.forEach(item => { 418 if (item.getBoundingClientRect().top < window.innerHeight && item.getBoundingClientRect().bottom >= 0) { 419 item.classList.add('el-zoom'); 420 } 421 }); 422 } 423 424 // No zoom on iOS Safari 425 if (navigator.userAgent.indexOf('iPhone') > -1) { 426 document.querySelector("[name=viewport]") 427 .setAttribute("content", "width=device-width, initial-scale=1, maximum-scale=1"); 428 } 429 })(); 430</script>
430 431 432 433
433<script> 434 document.addEventListener('DOMContentLoaded', function() { 435 // Handle close button click 436 const closeButton = document.getElementById('closeMenuButton'); 437 const dropdownToggle = document.getElementById('dropdownMenuButton'); 438 439 if (closeButton && dropdownToggle) { 440 closeButton.addEventListener('click', function() { 441 // Use Bootstrap's dropdown instance to hide 442 const dropdown = bootstrap.Dropdown.getInstance(dropdownToggle); 443 if (dropdown) { 444 dropdown.hide(); 445 } 446 }); 447 } 448 }); 449 </script>
449 450
450<script> 451 if (window.electronAPI?.isElectron) { 452 // Electron app: no analytics, no cookie banner 453 window.dataLayer = window.dataLayer || []; 454 window.gtag = function() {}; 455 } 456</script>
456 457 458<style> 459 body { padding-bottom: var(--cookie-bar-height, 0); } 460 #consent-bar .consent-configure { display: none; } 461 #consent-bar.is-configuring .consent-configure { display: block; } 462 #consent-bar.is-configuring #consent-configure-btn { display: none; } 463 #consent-bar.is-configuring .consent-primary-actions #cookie-consent-btn, 464 #consent-bar.is-configuring .consent-primary-actions #cookie-reject-btn { display: none; } 465</style> 466<div id="consent-bar" class="fixed-bottom bg-white border-top border-bottom d-none p-4" role="dialog" aria-live="polite" aria-label="Your privacy"> 467 <div> 468 <div class="small mb-3"> 469 We use our own and third-party cookies for analytics and advertising. You can accept, reject, or configure them. 470 <a href="https://www.bergesinstitutespanish.com/cookie-policy" target="_blank" rel="noopener">Cookie policy</a>. 471 </div> 472 <div class="d-flex gap-2 flex-wrap consent-primary-actions"> 473 <a href="#" id="consent-configure-btn" class="btn btn-sm btn-outline-dark">Manage</a> 474 <a href="#" id="cookie-reject-btn" class="btn btn-sm btn-primary">Reject</a> 475 <a href="#" id="cookie-consent-btn" class="btn btn-sm btn-primary">Accept</a> 476 </div> 477 </div> 478 <div class="consent-configure"> 479 <div class="small"> 480 <div class="mb-2"> 481 <label class="d-flex align-items-center gap-2"> 482 <input type="checkbox" disabled checked> 483 <span><strong>Strictly necessary</strong> â always on</span> 484 </label> 485 </div> 486 <div class="mb-2"> 487 <label class="d-flex align-items-center gap-2"> 488 <input type="checkbox" id="consent-analytics"> 489 <span><strong>Analytics</strong> â Google Analytics, Microsoft Clarity</span> 490 </label> 491 </div> 492 <div class="mb-3"> 493 <label class="d-flex align-items-center gap-2"> 494 <input type="checkbox" id="consent-advertising"> 495 <span><strong>Advertising</strong> â Google Ads, Meta Pixel</span> 496 </label> 497 </div> 498 </div> 499 <div> 500 <a href="#" id="consent-save-btn" class="btn btn-sm btn-primary">Save preferences</a> 501 </div> 502 </div> 503</div> 504
505<script> 506 document.addEventListener('DOMContentLoaded', () => { 507 if (window.electronAPI?.isElectron) return; 508 509 const GA_ID = "G-ZSV58WYSZ0"; 510 const CLARITY_ID = "u2fd8n3b0i"; 511 const FB_PIXEL_ID = "2327647080993486"; 512 513 // Load GA script dynamically 514 const gaScript = document.createElement('script'); 515 gaScript.defer = true; 516 gaScript.src = 'https://www.googletagmanager.com/gtag/js?id=' + GA_ID; 517 document.head.appendChild(gaScript); 518 519 window.dataLayer = window.dataLayer || []; 520 window.gtag = function() {dataLayer.push(arguments);} 521 522 gtag('consent', 'default', { 523 'ad_storage': 'denied', 524 'ad_user_data': 'denied', 525 'ad_personalization': 'denied', 526 'analytics_storage': 'denied' 527 }); 528 529 gtag('js', new Date()); 530 gtag('config', GA_ID); 531 532 const consentBarEl = document.getElementById('consent-bar'); 533 const acceptBtn = document.getElementById('cookie-consent-btn'); 534 const rejectBtn = document.getElementById('cookie-reject-btn'); 535 const configureBtn = document.getElementById('consent-configure-btn'); 536 const saveBtn = document.getElementById('consent-save-btn'); 537 const analyticsToggle = document.getElementById('consent-analytics'); 538 const advertisingToggle = document.getElementById('consent-advertising'); 539 540 // Consent storage â JSON shape {v:1, analytics, advertising, ts}. 541 // Legacy values ('granted'/'denied') are migrated on first read. 542 const readPrefs = () => { 543 const raw = window.localStorage.getItem('cookieConsent'); 544 if (!raw) return null; 545 if (raw === 'granted') return { v: 1, analytics: true, advertising: true, ts: Date.now() }; 546 if (raw === 'denied') return { v: 1, analytics: false, advertising: false, ts: Date.now() }; 547 try { 548 const parsed = JSON.parse(raw); 549 if (parsed && typeof parsed === 'object') return parsed; 550 } catch (_) {} 551 return null; 552 }; 553 554 const writePrefs = (prefs) => { 555 const payload = { v: 1, analytics: !!prefs.analytics, advertising: !!prefs.advertising, ts: Date.now() }; 556 window.localStorage.setItem('cookieConsent', JSON.stringify(payload)); 557 const cats = []; 558 if (payload.analytics) cats.push('analytics'); 559 if (payload.advertising) cats.push('advertising'); 560 const cookieValue = cats.length ? cats.join(',') : 'none'; 561 document.cookie = `cookie_consent=${cookieValue}; max-age=31536000; path=/; SameSite=Lax; Secure`; 562 }; 563 564 // Honor Global Privacy Control: treat as reject-all, never show the bar. 565 const gpcEnabled = navigator.globalPrivacyControl === true; 566 567 const stored = readPrefs(); 568 569 // Re-affirm the server-visible cookie on every load so it can't drift 570 // from localStorage (cookie expires after a year, localStorage forever). 571 if (stored) writePrefs(stored); 572 573 const updateBarHeight = () => { 574 document.documentElement.style.setProperty('--cookie-bar-height', consentBarEl.offsetHeight + 'px'); 575 }; 576 const barResizeObserver = new ResizeObserver(updateBarHeight); 577 578 const hideBar = () => { 579 barResizeObserver.unobserve(consentBarEl); 580 consentBarEl.classList.add('d-none'); 581 consentBarEl.classList.remove('is-configuring'); 582 document.documentElement.style.removeProperty('--cookie-bar-height'); 583 }; 584 585 const showBar = (prefill) => { 586 analyticsToggle.checked = !!(prefill && prefill.analytics); 587 advertisingToggle.checked = !!(prefill && prefill.advertising); 588 consentBarEl.classList.remove('d-none'); 589 consentBarEl.classList.remove('is-configuring'); 590 updateBarHeight(); 591 barResizeObserver.observe(consentBarEl); 592 }; 593 594 const commit = (prefs) => { 595 writePrefs(prefs); 596 applyConsent(prefs); 597 hideBar(); 598 }; 599 600 acceptBtn.addEventListener('click', (e) => { 601 e.preventDefault(); 602 commit({ analytics: true, advertising: true }); 603 }); 604 605 rejectBtn.addEventListener('click', (e) => { 606 e.preventDefault();
607 commit({ analytics: false, advertising: false }); 608 }); 609 610 configureBtn.addEventListener('click', (e) => { 611 e.preventDefault(); 612 consentBarEl.classList.add('is-configuring'); 613 updateBarHeight(); 614 }); 615 616 saveBtn.addEventListener('click', (e) => { 617 e.preventDefault(); 618 commit({ analytics: analyticsToggle.checked, advertising: advertisingToggle.checked }); 619 }); 620 621 // Fetch geo client-side so the response cache can't freeze it to one visitor's location. 622 const resolveCountry = () => { 623 const cached = window.sessionStorage.getItem('geoCountry'); 624 if (cached) return Promise.resolve(cached); 625 626 return fetch('https://www.bergesinstitutespanish.com/geo', { headers: { 'Accept': 'application/json' } }) 627 .then((res) => res.json()) 628 .then((data) => { 629 if (data.country) { 630 window.sessionStorage.setItem('geoCountry', data.country); 631 } 632 return data.country || null; 633 }) 634 .catch(() => null); 635 }; 636 637 if (gpcEnabled && !stored) { 638 // GPC: record a reject and move on without showing the bar. 639 writePrefs({ analytics: false, advertising: false }); 640 } else if (stored) { 641 applyConsent(stored); 642 } else { 643 resolveCountry().then((country) => { 644 if (country === 'US' || country === 'MX') { 645 // Outside GDPR scope â treat auto-skip as implicit consent for ad attribution. 646 const prefs = { analytics: true, advertising: true }; 647 writePrefs(prefs); 648 applyConsent(prefs); 649 } else { 650 showBar(null); 651 } 652 }); 653 } 654 655 // Footer "Cookie preferences" link calls this. 656 window.showCookiePreferences = () => { 657 const current = readPrefs() || { analytics: false, advertising: false }; 658 showBar(current); 659 consentBarEl.classList.add('is-configuring'); 660 updateBarHeight(); 661 }; 662 663 function applyConsent(prefs) { 664 gtag('consent', 'update', { 665 'analytics_storage': prefs.analytics ? 'granted' : 'denied', 666 'ad_storage': prefs.advertising ? 'granted' : 'denied', 667 'ad_user_data': prefs.advertising ? 'granted' : 'denied', 668 'ad_personalization': prefs.advertising ? 'granted' : 'denied' 669 }); 670 671 if (prefs.analytics && !window.__clarityLoaded) { 672 window.__clarityLoaded = true; 673 (function(c,l,a,r,i,t,y){ 674 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 675 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 676 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 677 })(window, document, "clarity", "script", CLARITY_ID); 678 } 679 680 if (prefs.advertising && !window.__fbPixelLoaded) { 681 window.__fbPixelLoaded = true; 682 !function(f,b,e,v,n,t,s) 683 {if(f.fbq)return;n=f.fbq=function(){n.callMethod? 684 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 685 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 686 n.queue=[];t=b.createElement(e);t.async=!0; 687 t.src=v;s=b.getElementsByTagName(e)[0]; 688 s.parentNode.insertBefore(t,s)}(window, document,'script', 689 'https://connect.facebook.net/en_US/fbevents.js'); 690 fbq('init', FB_PIXEL_ID); 691 fbq('track', 'PageView'); 692 } 693 } 694 }); 695</script>
vendor: 1 bytes, line 695
695
696<script> 697 if (window.electronAPI?.isElectron) { 698 const s = document.createElement('script'); 699 s.defer = true; 700 s.src = 'https://cloud.umami.is/script.js'; 701 s.dataset.websiteId = '2e842327-995f-40ff-96f6-f13f98e2bd08'; 702 document.head.appendChild(s); 703 } 704</script>
vendor: 1 bytes, line 704
704
705<script defer src="https://unpkg.com/feather-icons" onload="feather.replace()"></script>
705 706</body> 707</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.