PageSourceSearch

https://www.bergesinstitutespanish.com/levels-and-schedule

html bergesinstitutespanish.com collected 2026-10-02 03:00:43 UTC 49,994 bytes, 704 lines download raw bytes

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>Berges Institute Spanish Classes</title>
10
11    <meta name="description" content="">
12
13    <link rel="canonical" href="https://www.bergesinstitutespanish.com/levels-and-schedule">
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        html, body {
65            height: 100%;
66            overflow: hidden;
67        }
68
69        #app {
70            height: 100vh;
71            overflow: hidden;
72        }
73
74        #app-content {
75            flex: 1;
76            min-height: 0;
77            overflow-y: auto;
78        }
79
80        @media (pointer: fine) {
81            #app-content,
82            .fixed-side-menus {
83                scrollbar-gutter: stable;
84            }
85        }
86
87        .fixed-side-menus {
88            height: 100vh;
89            overflow-y: auto;
90            pointer-events: none;
91        }
92
93        .fixed-side-menus .side-section {
94            pointer-events: auto;
95        }
96
97        .electron-app .border-bottom {
98            border-bottom: none !important;
99        }
100
101        /** Disable context menu in mobile */
102        .nocontext {
103            -webkit-touch-callout: none; /* Safari Touch */
104            -webkit-user-select: none; /* Webkit */
105            -moz-user-select: none; /* Firefox */
106            -ms-user-select: none; /* Edge*/
107            user-select: none; /* Future-proof*/
108            -webkit-user-drag: none;
109            -moz-user-drag: none;
110            -o-user-drag: none;
111            user-drag: none;
112        }
113
114        .my-logo-section {
115            position: fixed;
116            top: 0;
117            left: 0;
118            width: 100vw;
119            height: 100vh;
120            background-color: white;
121            z-index: 9999;
122            display: flex;
123            justify-content: center;
124            align-items: center;
125            /* Full screen white overlay */
126        }
127
128        .my-logo {
129            opacity: 0;
130            transform: scale(0.5) translateY(50px);
131            transition: all 0.3s ease;
132            display: flex;
133            justify-content: center;
134        }
135
136        .my-logo img {
137            max-width: 300px;
138            height: auto;
139            display: block;
140        }
141
142        @media only screen and (max-width: 575px) {
143            .center-div {
144                border-right: none !important;
145                border-left: none !important;
146            }
147        }
148
149        .side-section {
150            display: none;
151        }
152
153        .side-section-container {
154            display: none;
155        }
156
157        @media only screen and (min-width: 993px) {
158            .left-menu-container {
159                display: block;
160            }
161
162            .left-menu {
163                display: block;
164                padding-top: 64px;
165                max-width: 280px !important;
166            }
167        }
168
169        @media only screen and (min-width: 1401px) {
170            .right-menu-container {
171                display: block;
172            }
173
174            .right-menu {
175                display: block;
176                padding-top: 64px;
177                max-width: 300px !important;
178            }
179        }
180    </style>
181
182        <meta property="og:image" content="https://www.bergesinstitutespanish.com/img/app.jpg"/>
183
184    <meta property="og:title" content="Berges Institute Spanish Classes">
185    <meta property="og:description" content="">
186    <meta property="og:url" content="https://www.bergesinstitutespanish.com/levels-and-schedule">
187    <meta property="og:type" content="website">
188    <meta property="og:site_name" content="Berges Institute Spanish Classes">
189    <meta property="og:locale" content="en_US">
190            <meta property="og:image" content="https://www.bergesinstitutespanish.com/img/app.jpg">
191        <meta name="twitter:card" content="summary_large_image">
192    <meta name="twitter:title" content="Berges Institute Spanish Classes">
193    <meta name="twitter:description" content="">
194            <meta name="twitter:image" content="https://www.bergesinstitutespanish.com/img/app.jpg">
195    
196    <!-- Favicon -->
197    <link rel="icon" href="https://www.bergesinstitutespanish.com/img/favicon.png">
198</head>
199<body class="bg-white">
200
201    <div class="my-logo-section" style="display: flex">
202        <div class="my-logo">
203            <img alt="Berges Institute" width="300" height="31" src="https://www.bergesinstitutespanish.com/img/berges_logo.svg">
204        </div>
205    </div>
206
207    <div id="app" class="d-flex flex-column">
208        <header>
209            <navbar></navbar>
210        </header>
211
212        <div id="app-content" class="w-100 d-flex justify-content-center flex-grow-1">
213            <div class="row mx-0 flex-grow-1" style="max-width: 1600px">
214                <div class="side-section-container left-menu-container col-lg-3 px-0"></div>
215                <div class="mx-auto col-12 col-sm-11 col-md-10 mx-lg-0 col-lg-8 col-xl-7 col-xxl-6 px-0 border-end border-start center-div"
216                     style="z-index: 1">
217                    <main role="main" class="w-100">
218                        <not-found-handler class="w-100"></not-found-handler>
219                        
220                        <router-view v-slot="{ Component }">
221                            <keep-alive exclude="Menu,Account" max="1">
222                                <component :is="Component" class="w-100"></component>
223                            </keep-alive>
224                        </router-view>
225                    </main>
226                </div>
227                <div class="side-section-container right-menu-container col-xxl-3 px-0"></div>
228            </div>
229        </div>
230
231        <div class="position-fixed top-0 start-0 w-100 d-flex justify-content-center fixed-side-menus">
232            <div class="row mx-0 flex-grow-1" style="max-width: 1600px">
233                <div class="side-section-container left-menu-container col-lg-3 px-0">
234                    <left-menu class="side-section left-menu ms-auto"></left-menu>
235                </div>
236                <div class="col-xxl-6" style="z-index: 0"></div>
237                <div class="side-section-container right-menu-container col-xxl-3 px-0">
238                    <right-menu class="side-section right-menu me-auto"></right-menu>
239                </div>
240            </div>
241        </div>
242    </div>
243
244    
244<script>
245        // Set currency
246        (function () {
247            if (!window.localStorage.getItem('bergesCurrency')) {
248                const currencyCode = "USD";
249                const availableCurrencies = ["USD","AED","AUD","CAD","EUR","GBP","INR","NZD","SGD","ZAR"];
250
251                if (currencyCode && availableCurrencies.includes(currencyCode)) {
252                    window.localStorage.setItem('bergesCurrency', currencyCode);
253                } else {
254                    window.localStorage.setItem('bergesCurrency', 'USD');
255                }
256            }
257        })();
258    </script>
258
259
260    
260<script>
261        // Splash
262        (function () {
263            // Scoped CSS for logo animation
264            const logoStyles = `
265        @keyframes myLogoEntrance {
266            0% {
267                opacity: 0;
268                transform: scale(0.5) translateY(50px);
269            }
270            50% {
271                opacity: 0.8;
272                transform: scale(1.1) translateY(0);
273            }
274            100% {
275                opacity: 1;
276                transform: scale(1) translateY(0);
277            }
278        }
279
280        @keyframes myLogoFloat {
281            0%, 100% {
282                transform: translateY(0);
283            }
284            50% {
285                transform: translateY(-10px);
286            }
287        }
288
289        @keyframes myLogoPulse {
290            0%, 100% {
291                transform: scale(1);
292            }
293            50% {
294                transform: scale(1.05);
295            }
296        }
297    `;
298
299            // Inject styles only if they don't exist
300            if (!document.querySelector('#my-logo-styles')) {
301                const style = document.createElement('style');
302                style.id = 'my-logo-styles';
303                style.textContent = logoStyles;
304                document.head.appendChild(style);
305            }
306
307            // Animation functions
308            function animateMyLogo(options = {}) {
309                const {
310                    selector = '.my-logo',
311                    duration = 500,
312                    delay = 0,
313                    type = 'entrance'
314                } = options;
315
316                const logo = document.querySelector(selector);
317                if (!logo) return;
318
319                setTimeout(() => {
320                    switch (type) {
321                        case 'entrance':
322                            logo.style.animation = `myLogoEntrance ${duration / 1000}s ease-out forwards`;
323                            break;
324                        case 'float':
325                            logo.style.animation = `myLogoFloat ${duration / 1000}s ease-in-out infinite`;
326                            break;
327                        case 'pulse':
328                            logo.style.animation = `myLogoPulse ${duration / 1000}s ease-in-out infinite`;
329                            break;
330                    }
331                }, delay);
332            }
333
334            // Add click interaction and auto-hide
335            function addAutoHide() {
336                const logo = document.querySelector('.my-logo');
337                const section = document.querySelector('.my-logo-section');
338                if (!logo || !section) return;
339
340                // Auto-hide the splash screen after animation
341                setTimeout(() => {
342                    section.style.transition = 'opacity 1s ease-out';
343                    section.style.opacity = '0';
344
345                    // Remove from DOM after fade out
346                    setTimeout(() => {
347                        section.remove();
348                    }, 500);
349                }, 1000); // Hide after 1 second
350            }
351
352            // Initialize when DOM is ready
353            function initMyLogo() {
354                animateMyLogo({type: 'entrance'});
355                addAutoHide();
356
357                // Add floating animation after entrance
358                setTimeout(() => {
359                    animateMyLogo({type: 'float', duration: 800});
360                }, 800);
361            }
362
363            // Wait for DOM or run immediately if already loaded
364            if (document.readyState === 'loading') {
365                document.addEventListener('DOMContentLoaded', initMyLogo);
366            } else {
367                initMyLogo();
368            }
369        })();
370    </script>
370
371
372    
373    
374    
375    
375<script>
376        window.Tests = [{"id":13,"name":"Level 1 Copy 2023-05-17 15:58:33","display_name":"Beginners","slug":"level-1","buleria_level_id":3,"description":"\u003Cp\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EPlease note once you start you will have to complete the test in one session, as you will not be able to save it and continue at a later time.\u003C\/span\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cstrong style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EScoring:\u0026nbsp;\u003C\/strong\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003E+1 point for every correct answer; 0 points subtracted for incorrect answers; 0 points subtracted for questions you don\u2019t answer.\u003C\/span\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cstrong style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EPassing score:\u0026nbsp;\u003C\/strong\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003E55 points\u003C\/span\u003E\u003C\/p\u003E","is_active":1,"created_at":"2023-05-17T15:58:33.000000Z","updated_at":"2026-02-24T14:49:18.000000Z","results_text":null,"passing_score":55,"website":1,"adds_to_newsletter":0},{"id":14,"name":"Level 2 Copy 2023-05-17 17:25:20","display_name":"Level 2","slug":"level-2","buleria_level_id":4,"description":"\u003Cp\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EPlease note once you start you will have to complete the test in one session, as you will not be able to save it and continue at a later time.\u003C\/span\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cstrong style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EScoring:\u0026nbsp;\u003C\/strong\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003E+1 point for every correct answer; 0 points subtracted for incorrect answers; 0 points subtracted for questions you don\u2019t answer.\u003C\/span\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cstrong style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EPassing score:\u0026nbsp;\u003C\/strong\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003E55 points\u003C\/span\u003E\u003C\/p\u003E","is_active":1,"created_at":"2023-05-17T17:25:20.000000Z","updated_at":"2026-02-24T14:49:29.000000Z","results_text":null,"passing_score":55,"website":1,"adds_to_newsletter":0},{"id":15,"name":"Level 3 Copy 2023-05-18 15:48:34","display_name":"Level 3","slug":"level-3","buleria_level_id":5,"description":"\u003Cp\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EPlease note once you start you will have to complete the test in one session, as you will not be able to save it and continue at a later time.\u003C\/span\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cstrong style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EScoring:\u0026nbsp;\u003C\/strong\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003E+1 point for every correct answer; 0 points subtracted for incorrect answers; 0 points subtracted for questions you don\u2019t answer.\u003C\/span\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cstrong style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EPassing score:\u0026nbsp;\u003C\/strong\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003E55 points\u003C\/span\u003E\u003C\/p\u003E","is_active":1,"created_at":"2023-05-18T15:48:34.000000Z","updated_at":"2026-02-24T14:49:39.000000Z","results_text":null,"passing_score":55,"website":1,"adds_to_newsletter":0},{"id":17,"name":"Level 4 Copy 2023-05-18 15:58:27","display_name":"Level 4","slug":"level-4","buleria_level_id":6,"description":"\u003Cp\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EPlease note once you start you will have to complete the test in one session, as you will not be able to save it and continue at a later time.\u003C\/span\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cstrong style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EScoring:\u0026nbsp;\u003C\/strong\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003E+1 point for every correct answer; 0 points subtracted for incorrect answers; 0 points subtracted for questions you don\u2019t answer.\u003C\/span\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cstrong style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EPassing score:\u0026nbsp;\u003C\/strong\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003E55 points\u003C\/span\u003E\u003C\/p\u003E","is_active":1,"created_at":"2023-05-18T15:58:27.000000Z","updated_at":"2026-02-24T14:49:50.000000Z","results_text":null,"passing_score":55,"website":1,"adds_to_newsletter":0},{"id":18,"name":"Level 5 Copy 2023-05-18 16:00:30","display_name":"Level 5","slug":"level-5","buleria_level_id":8,"description":"\u003Cp\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EPlease note once you start you will have to complete the test in one session, as you will not be able to save it and continue at a later time.\u003C\/span\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cstrong style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EScoring:\u0026nbsp;\u003C\/strong\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003E+1 point for every correct answer; 0 points subtracted for incorrect answers; 0 points subtracted for questions you don\u2019t answer.\u003C\/span\u003E\u003C\/p\u003E\u003Cp\u003E\u003Cstrong style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003EPassing score:\u0026nbsp;\u003C\/strong\u003E\u003Cspan style=\u0022color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\u0022\u003E55 points\u003C\/span\u003E\u003C\/p\u003E","is_active":1,"created_at":"2023-05-18T16:00:30.000000Z","updated_at":"2026-02-24T14:50:01.000000Z","results_text":null,"passing_score":55,"website":1,"adds_to_newsletter":0}];
377        window.Timezones = ["Africa\/Abidjan","Africa\/Accra","Africa\/Addis_Ababa","Africa\/Algiers","Africa\/Asmara","Africa\/Bamako","Africa\/Bangui","Africa\/Banjul","Africa\/Bissau","Africa\/Blantyre","Africa\/Brazzaville","Africa\/Bujumbura","Africa\/Cairo","Africa\/Casablanca","Africa\/Ceuta","Africa\/Conakry","Africa\/Dakar","Africa\/Dar_es_Salaam","Africa\/Djibouti","Africa\/Douala","Africa\/El_Aaiun","Africa\/Freetown","Africa\/Gaborone","Africa\/Harare","Africa\/Johannesburg","Africa\/Juba","Africa\/Kampala","Africa\/Khartoum","Africa\/Kigali","Africa\/Kinshasa","Africa\/Lagos","Africa\/Libreville","Africa\/Lome","Africa\/Luanda","Africa\/Lubumbashi","Africa\/Lusaka","Africa\/Malabo","Africa\/Maputo","Africa\/Maseru","Africa\/Mbabane","Africa\/Mogadishu","Africa\/Monrovia","Africa\/Nairobi","Africa\/Ndjamena","Africa\/Niamey","Africa\/Nouakchott","Africa\/Ouagadougou","Africa\/Porto-Novo","Africa\/Sao_Tome","Africa\/Tripoli","Africa\/Tunis","Africa\/Windhoek","America\/Adak","America\/Anchorage","America\/Anguilla","America\/Antigua","America\/Araguaina","America\/Argentina\/Buenos_Aires","America\/Argentina\/Catamarca","America\/Argentina\/Cordoba","America\/Argentina\/Jujuy","America\/Argentina\/La_Rioja","America\/Argentina\/Mendoza","America\/Argentina\/Rio_Gallegos","America\/Argentina\/Salta","America\/Argentina\/San_Juan","America\/Argentina\/San_Luis","America\/Argentina\/Tucuman","America\/Argentina\/Ushuaia","America\/Aruba","America\/Asuncion","America\/Atikokan","America\/Bahia","America\/Bahia_Banderas","America\/Barbados","America\/Belem","America\/Belize","America\/Blanc-Sablon","America\/Boa_Vista","America\/Bogota","America\/Boise","America\/Cambridge_Bay","America\/Campo_Grande","America\/Cancun","America\/Caracas","America\/Cayenne","America\/Cayman","America\/Chicago","America\/Chihuahua","America\/Ciudad_Juarez","America\/Costa_Rica","America\/Coyhaique","America\/Creston","America\/Cuiaba","America\/Curacao","America\/Danmarkshavn","America\/Dawson","America\/Dawson_Creek","America\/Denver","America\/Detroit","America\/Dominica","America\/Edmonton","America\/Eirunepe","America\/El_Salvador","America\/Fort_Nelson","America\/Fortaleza","America\/Glace_Bay","America\/Goose_Bay","America\/Grand_Turk","America\/Grenada","America\/Guadeloupe","America\/Guatemala","America\/Guayaquil","America\/Guyana","America\/Halifax","America\/Havana","America\/Hermosillo","America\/Indiana\/Indianapolis","America\/Indiana\/Knox","America\/Indiana\/Marengo","America\/Indiana\/Petersburg","America\/Indiana\/Tell_City","America\/Indiana\/Vevay","America\/Indiana\/Vincennes","America\/Indiana\/Winamac","America\/Inuvik","America\/Iqaluit","America\/Jamaica","America\/Juneau","America\/Kentucky\/Louisville","America\/Kentucky\/Monticello","America\/Kralendijk","America\/La_Paz","America\/Lima","America\/Los_Angeles","America\/Lower_Princes","America\/Maceio","America\/Managua","America\/Manaus","America\/Marigot","America\/Martinique","America\/Matamoros","America\/Mazatlan","America\/Menominee","America\/Merida","America\/Metlakatla","America\/Mexico_City","America\/Miquelon","America\/Moncton","America\/Monterrey","America\/Montevideo","America\/Montserrat","America\/Nassau","America\/New_York","America\/Nome","America\/Noronha","America\/North_Dakota\/Beulah","America\/North_Dakota\/Center","America\/North_Dakota\/New_Salem","America\/Nuuk","America\/Ojinaga","America\/Panama","America\/Paramaribo","America\/Phoenix","America\/Port-au-Prince","America\/Port_of_Spain","America\/Porto_Velho","America\/Puerto_Rico","America\/Punta_Arenas","America\/Rankin_Inlet","America\/Recife","America\/Regina","America\/Resolute","America\/Rio_Branco","America\/Santarem","America\/Santiago","America\/Santo_Domingo","America\/Sao_Paulo","America\/Scoresbysund","America\/Sitka","America\/St_Barthelemy","America\/St_Johns","America\/St_Kitts","America\/St_Lucia","America\/St_Thomas","America\/St_Vincent","America\/Swift_Current","America\/Tegucigalpa","America\/Thule","America\/Tijuana","America\/Toronto","America\/Tortola","America\/Vancouver","America\/Whitehorse","America\/Winnipeg","America\/Yakutat","Antarctica\/Casey","Antarctica\/Davis","Antarctica\/DumontDUrville","Antarctica\/Macquarie","Antarctica\/Mawson","Antarctica\/McMurdo","Antarctica\/Palmer","Antarctica\/Rothera","Antarctica\/Syowa","Antarctica\/Troll","Antarctica\/Vostok","Arctic\/Longyearbyen","Asia\/Aden","Asia\/Almaty","Asia\/Amman","Asia\/Anadyr","Asia\/Aqtau","Asia\/Aqtobe","Asia\/Ashgabat","Asia\/Atyrau","Asia\/Baghdad","Asia\/Bahrain","Asia\/Baku","Asia\/Bangkok","Asia\/Barnaul","Asia\/Beirut","Asia\/Bishkek","Asia\/Brunei","Asia\/Chita","Asia\/Colombo","Asia\/Damascus","Asia\/Dhaka","Asia\/Dili","Asia\/Dubai","Asia\/Dushanbe","Asia\/Famagusta","Asia\/Gaza","Asia\/Hebron","Asia\/Ho_Chi_Minh","Asia\/Hong_Kong","Asia\/Hovd","Asia\/Irkutsk","Asia\/Jakarta","Asia\/Jayapura","Asia\/Jerusalem","Asia\/Kabul","Asia\/Kamchatka","Asia\/Karachi","Asia\/Kathmandu","Asia\/Khandyga","Asia\/Kolkata","Asia\/Krasnoyarsk","Asia\/Kuala_Lumpur","Asia\/Kuching","Asia\/Kuwait","Asia\/Macau","Asia\/Magadan","Asia\/Makassar","Asia\/Manila","Asia\/Muscat","Asia\/Nicosia","Asia\/Novokuznetsk","Asia\/Novosibirsk","Asia\/Omsk","Asia\/Oral","Asia\/Phnom_Penh","Asia\/Pontianak","Asia\/Pyongyang","Asia\/Qatar","Asia\/Qostanay","Asia\/Qyzylorda","Asia\/Riyadh","Asia\/Sakhalin","Asia\/Samark
377and","Asia\/Seoul","Asia\/Shanghai","Asia\/Singapore","Asia\/Srednekolymsk","Asia\/Taipei","Asia\/Tashkent","Asia\/Tbilisi","Asia\/Tehran","Asia\/Thimphu","Asia\/Tokyo","Asia\/Tomsk","Asia\/Ulaanbaatar","Asia\/Urumqi","Asia\/Ust-Nera","Asia\/Vientiane","Asia\/Vladivostok","Asia\/Yakutsk","Asia\/Yangon","Asia\/Yekaterinburg","Asia\/Yerevan","Atlantic\/Azores","Atlantic\/Bermuda","Atlantic\/Canary","Atlantic\/Cape_Verde","Atlantic\/Faroe","Atlantic\/Madeira","Atlantic\/Reykjavik","Atlantic\/South_Georgia","Atlantic\/St_Helena","Atlantic\/Stanley","Australia\/Adelaide","Australia\/Brisbane","Australia\/Broken_Hill","Australia\/Darwin","Australia\/Eucla","Australia\/Hobart","Australia\/Lindeman","Australia\/Lord_Howe","Australia\/Melbourne","Australia\/Perth","Australia\/Sydney","Europe\/Amsterdam","Europe\/Andorra","Europe\/Astrakhan","Europe\/Athens","Europe\/Belgrade","Europe\/Berlin","Europe\/Bratislava","Europe\/Brussels","Europe\/Bucharest","Europe\/Budapest","Europe\/Busingen","Europe\/Chisinau","Europe\/Copenhagen","Europe\/Dublin","Europe\/Gibraltar","Europe\/Guernsey","Europe\/Helsinki","Europe\/Isle_of_Man","Europe\/Istanbul","Europe\/Jersey","Europe\/Kaliningrad","Europe\/Kirov","Europe\/Kyiv","Europe\/Lisbon","Europe\/Ljubljana","Europe\/London","Europe\/Luxembourg","Europe\/Madrid","Europe\/Malta","Europe\/Mariehamn","Europe\/Minsk","Europe\/Monaco","Europe\/Moscow","Europe\/Oslo","Europe\/Paris","Europe\/Podgorica","Europe\/Prague","Europe\/Riga","Europe\/Rome","Europe\/Samara","Europe\/San_Marino","Europe\/Sarajevo","Europe\/Saratov","Europe\/Simferopol","Europe\/Skopje","Europe\/Sofia","Europe\/Stockholm","Europe\/Tallinn","Europe\/Tirane","Europe\/Ulyanovsk","Europe\/Vaduz","Europe\/Vatican","Europe\/Vienna","Europe\/Vilnius","Europe\/Volgograd","Europe\/Warsaw","Europe\/Zagreb","Europe\/Zurich","Indian\/Antananarivo","Indian\/Chagos","Indian\/Christmas","Indian\/Cocos","Indian\/Comoro","Indian\/Kerguelen","Indian\/Mahe","Indian\/Maldives","Indian\/Mauritius","Indian\/Mayotte","Indian\/Reunion","Pacific\/Apia","Pacific\/Auckland","Pacific\/Bougainville","Pacific\/Chatham","Pacific\/Chuuk","Pacific\/Easter","Pacific\/Efate","Pacific\/Fakaofo","Pacific\/Fiji","Pacific\/Funafuti","Pacific\/Galapagos","Pacific\/Gambier","Pacific\/Guadalcanal","Pacific\/Guam","Pacific\/Honolulu","Pacific\/Kanton","Pacific\/Kiritimati","Pacific\/Kosrae","Pacific\/Kwajalein","Pacific\/Majuro","Pacific\/Marquesas","Pacific\/Midway","Pacific\/Nauru","Pacific\/Niue","Pacific\/Norfolk","Pacific\/Noumea","Pacific\/Pago_Pago","Pacific\/Palau","Pacific\/Pitcairn","Pacific\/Pohnpei","Pacific\/Port_Moresby","Pacific\/Rarotonga","Pacific\/Saipan","Pacific\/Tahiti","Pacific\/Tarawa","Pacific\/Tongatapu","Pacific\/Wake","Pacific\/Wallis","UTC"];
378        window.Website = 1;
379        window.Locale = "en";
380        window.WebsiteName = 'Berges Institute Spanish Classes';
381        window.HelpCenterUrl = 'https://www.bergesinstitutespanish.com/help';
382        window.SpaSlugs = {"home":"\/home","how-it-works":"\/how-it-works","levels-and-schedule":"\/levels-and-schedule","browse-courses":"\/browse-courses","browse-classes":"\/browse-classes","course":"\/course","prices":"\/prices","private-lessons":"\/private-lessons","buy-packages":"\/buy-packages","gift-cards":"\/gift-cards","deal-for-beginners":"\/deal-for-beginners","affiliate-program":"\/affiliate-program","confirm-purchase":"\/confirm-purchase","subscribe":"\/subscribe","video":"\/video","people":"\/people","profile":"\/profile","force-password-reset":"\/force-password-reset","select-timezone":"\/select-timezone","attribution-survey":"\/attribution-survey","roadmap":"\/roadmap","upcoming":"\/upcoming","billing":"\/billing","past-visits":"\/past-visits","comments":"\/comments","private-lesson-discussion":"\/private-lesson-discussion","notifications":"\/notifications","study-groups":"\/study-groups","study-group-discussion":"\/study-group-discussion","new-study-group":"\/new-study-group","edit-study-group":"\/edit-study-group","schedule-meeting":"\/schedule-meeting","menu":"\/menu","account":"\/account"};
383        window.Cashback = {"USD":30,"AED":100,"AUD":40,"CAD":40,"EUR":30,"GBP":20,"INR":2500,"NZD":50,"SGD":40,"ZAR":500};
384        window.HowItWorks = {"sections":[{"heading":"Our Spanish courses","body":"\u003Cp\u003EEach course consists of ten 90-minute live classes, taught via Zoom.\u003C\/p\u003E\u003Cp\u003EClass dates are flexible: click Change on any date to see alternatives, before or after enrolling.\u003C\/p\u003E"},{"heading":"Production practice","body":"\u003Cp\u003EProduction (speaking and writing) is the hardest part of learning a language. Most learners practice it far less than reading and listening. We flip that. Our courses aim to supercharge your production abilities through three pillars:\u003C\/p\u003E\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EGrammar.\u003C\/strong\u003E The rules are presented clearly, so the language makes sense.\u003C\/li\u003E\u003Cli\u003E\u003Cstrong\u003ETranslation.\u003C\/strong\u003E You translate lots of sentences, so your brain starts recognizing patterns.\u003C\/li\u003E\u003Cli\u003E\u003Cstrong\u003ESpeaking.\u003C\/strong\u003E You use what you\u0027ve learned in live conversations with your instructor and classmates, scoped to what you know.\u003C\/li\u003E\u003C\/ul\u003E\u003Cp\u003EMost classes include all three. Some lean toward one: conversation classes, for example, are mostly speaking.\u003C\/p\u003E"},{"heading":"Levels build on each other","body":"\u003Cp\u003EEach level builds on the one before it, so nothing gets skipped. If you\u0027re new to Spanish, you start at the Beginners level. If you already know some Spanish, a short placement test helps you find your level. If you sign up for the wrong level, just tell us and we\u0027ll move you to the correct one.\u003C\/p\u003E"},{"heading":"Why we teach grammar first","body":"\u003Cp\u003EMost apps ask you to guess the patterns from examples. That\u0027s how children pick up their first language, but adults are different: research shows we learn faster when we\u0027re taught the rules first, then practice them. Once you understand the rules, you can build correct sentences from your first class, instead of waiting for the language to click.\u003C\/p\u003E"},{"heading":"The Graf Method","body":"\u003Cp\u003EThe Graf Method is a modern twist on the classic grammar-translation approach. It keeps the translation work, but shifts the weight toward writing and speaking. We\u0027ve refined it over ten-plus years of teaching adults.\u003C\/p\u003E"}],"about":{"paragraphs":["I opened Berges Institute in 2013, after running a small Spanish tutoring studio on New York\u0027s Upper East Side for a few years. My business partner Vanessa and I had met in Barcelona back in 2004, playing in a pop-jazz band that rehearsed in the suburbs and booked very few gigs. Teaching turned out to work better than the band. ","We started with two classrooms at 36th Street and Fifth Avenue, in a beautiful building from 1920, and wrote our own textbooks: the five volumes of the Graf Method, our grammar-first approach to teaching adults. In 2018 we opened a second school in the Chicago Loop, right next to City Hall. At our peak we had two campuses, 25 teachers, and over 1,200 monthly students.","Then Covid hit, and we moved everything online. We\u0027d already been teaching online classes for a 
384while, so the transition was smooth. It also revealed something: given the choice, most students preferred live online classes. No commute, and you can attend from an office in Los Angeles or a hotel lobby in Bali. We reopened the physical classrooms in 2021, but in 2022 we followed our students and went fully online. Today we teach almost 2,000 students every month, more than we ever did in person. ","That freed me to move back home to Madrid, and the company came with me. Berges is now headquartered just north of the city, in Alcobendas. Coming home also sparked our newest project: Berges English, live English classes taught with the same philosophy behind our Spanish classes since 2013.","Thousands of students have learned with us, and many have gone from zero to conversational and from conversational to fluent. Watching that happen never gets old.","Un saludo,","Dan Berges"],"image":"\/img\/dan3.webp","imageAlt":"Dan Berges, founder of Berges Institute","aboutMe":{"heading":"About me (Dan Berges)","body":"I am, among other things, a teacher, \u003Ca href=\u0022https:\/\/a.co\/d\/6s2A8lf\u0022 target=\u0022_blank\u0022\u003Eauthor\u003C\/a\u003E, programmer, and Linux sysadmin. Apart from my work at Berges Institute, I also make content about descriptive grammar, semantics, and pragmatics on \u003Ca href=\u0022https:\/\/www.instagram.com\/danberges\/\u0022 target=\u0022_blank\u0022\u003EInstagram\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/www.youtube.com\/@danberges\u0022 target=\u0022_blank\u0022\u003EYouTube\u003C\/a\u003E, and \u003Ca href=\u0022https:\/\/www.tiktok.com\/@dan_berges\u0022 target=\u0022_blank\u0022\u003ETikTok\u003C\/a\u003E."}}};
385        window.Faqs = [["How long does it take to learn Spanish with Berges?","Most students become conversational after completing five levels (about 12-15 months of regular classes)."],["I\u0027ve never studied Spanish before. Is this right for me?","Yes! We designed our Beginners level specifically for people with zero Spanish experience."],["Will I be embarrassed in class as a beginner?","No. All Beginners students start at zero. Our instructors create a supportive environment where making mistakes is part of learning."],["How is this different from Spanish apps?","We teach grammar rules first, then practice. Apps make you guess patterns. Our method is faster for adults."],["Do you teach Castilian or Latin American Spanish?","Spanish is one language with regional differences (mostly accent and a handful of everyday words). We teach standard Spanish, so what you learn works wherever Spanish is spoken."],["Are classes recorded?","No. Classes are live only, which protects everyone\u0027s privacy and keeps students comfortable speaking up. "],["Do I need to keep my camera on?","Yes. Classes are live and interactive. Your instructor and classmates need to see you, just as you see them."],["How old do I need to be to enroll?","Our classes are for adults. If you\u0027re 16 or 17, you can enroll as long as a parent or legal guardian accepts our terms on your behalf."]];
386        window.CourseDiscountPercentage = 20;
387    </script>
387
388
389    <link rel="preload" as="style" href="https://www.bergesinstitutespanish.com/build/assets/app-Bv3iErd9.css" /><link rel="modulepreload" as="script" href="https://www.bergesinstitutespanish.com/build/assets/app-CEQWladX.js" /><link rel="modulepreload" as="script" href="https://www.bergesinstitutespanish.com/build/assets/online-tools-Ce_6Y_KH.js" /><link rel="modulepreload" as="script" href="https://www.bergesinstitutespanish.com/build/assets/_commonjsHelpers-_d1bhYXs.js" /><link rel="modulepreload" as="script" href="https://www.bergesinstitutespanish.com/build/assets/bootstrap.esm-CjE0EDlS.js" /><link rel="modulepreload" as="script" href="https://www.bergesinstitutespanish.com/build/assets/vue-router-CSEP06dd.js" /><link rel="modulepreload" as="script" href="https://www.bergesinstitutespanish.com/build/assets/en-DhIVTV6R.js" /><link rel="modulepreload" as="script" href="https://www.bergesinstitutespanish.com/build/assets/vue-feather.esm-CuFuH1hV.js" /><link rel="modulepreload" as="script" href="https://www.bergesinstitutespanish.com/build/assets/_plugin-vue_export-helper-DlAUqK2U.js" /><link rel="stylesheet" href="https://www.bergesinstitutespanish.com/build/assets/app-Bv3iErd9.css" data-navigate-track="reload" />
389<script type="module" src="https://www.bergesinstitutespanish.com/build/assets/app-CEQWladX.js" data-navigate-track="reload"></script>
389
390    
390<script>
391        // Disable context button and dragging
392
393        const body = document.querySelector('body');
394        body.addEventListener('contextmenu', e => {
395            if (e.target.classList.contains('nocontext')) {
396                e.preventDefault();
397                return false;
398            }
399        });
400
401        body.addEventListener('dragstart', e => {
402            e.preventDefault();
403            return false;
404        });
405
406        // End of disable context button and dragging
407    </script>
vendor: 1 bytes, line 407
407
408<script>
409    (function () {
410        const popImages = document.querySelectorAll('.pop');
411
412        pop();
413
414        window.addEventListener('scroll', () => pop());
415
416        function pop() {
417            popImages.forEach(item => {
418                if (item.getBoundingClientRect().top < window.innerHeight && item.getBoundingClientRect().bottom >= 0) {
419                    if (!item.classList.contains('top')) item.classList.add('img-popup');
420                }
421            });
422        }
423
424        const zoomEls = document.querySelectorAll('.zoom');
425
426        zoom();
427
428        window.addEventListener('scroll', () => zoom());
429
430        function zoom() {
431            zoomEls.forEach(item => {
432                if (item.getBoundingClientRect().top < window.innerHeight && item.getBoundingClientRect().bottom >= 0) {
433                    item.classList.add('el-zoom');
434                }
435            });
436        }
437
438        // No zoom on iOS Safari
439        if (navigator.userAgent.indexOf('iPhone') > -1) {
440            document.querySelector("[name=viewport]")
441                .setAttribute("content", "width=device-width, initial-scale=1, maximum-scale=1");
442        }
443    })();
444</script>
444
445
446
447    
447<script>
448    if (window.electronAPI?.isElectron) {
449        // Electron app: no analytics, no cookie banner
450        window.dataLayer = window.dataLayer || [];
451        window.gtag = function() {};
452    }
453</script>
453
454
455<style>
456    body { padding-bottom: var(--cookie-bar-height, 0); }
457    #consent-bar .consent-configure { display: none; }
458    #consent-bar.is-configuring .consent-configure { display: block; }
459    #consent-bar.is-configuring #consent-configure-btn { display: none; }
460    #consent-bar.is-configuring .consent-primary-actions #cookie-consent-btn,
461    #consent-bar.is-configuring .consent-primary-actions #cookie-reject-btn { display: none; }
462</style>
463<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">
464    <div>
465        <div class="small mb-3">
466            We use our own and third-party cookies for analytics and advertising. You can accept, reject, or configure them.
467            <a href="https://www.bergesinstitutespanish.com/cookie-policy" target="_blank" rel="noopener">Cookie policy</a>.
468        </div>
469        <div class="d-flex gap-2 flex-wrap consent-primary-actions">
470            <a href="#" id="consent-configure-btn" class="btn btn-sm btn-outline-dark">Manage</a>
471            <a href="#" id="cookie-reject-btn" class="btn btn-sm btn-primary">Reject</a>
472            <a href="#" id="cookie-consent-btn" class="btn btn-sm btn-primary">Accept</a>
473        </div>
474    </div>
475    <div class="consent-configure">
476        <div class="small">
477            <div class="mb-2">
478                <label class="d-flex align-items-center gap-2">
479                    <input type="checkbox" disabled checked>
480                    <span><strong>Strictly necessary</strong> — always on</span>
481                </label>
482            </div>
483            <div class="mb-2">
484                <label class="d-flex align-items-center gap-2">
485                    <input type="checkbox" id="consent-analytics">
486                    <span><strong>Analytics</strong> — Google Analytics, Microsoft Clarity</span>
487                </label>
488            </div>
489            <div class="mb-3">
490                <label class="d-flex align-items-center gap-2">
491                    <input type="checkbox" id="consent-advertising">
492                    <span><strong>Advertising</strong> — Google Ads, Meta Pixel</span>
493                </label>
494            </div>
495        </div>
496        <div>
497            <a href="#" id="consent-save-btn" class="btn btn-sm btn-primary">Save preferences</a>
498        </div>
499    </div>
500</div>
501
502<script>
503    document.addEventListener('DOMContentLoaded', () => {
504        if (window.electronAPI?.isElectron) return;
505
506        const GA_ID = "G-ZSV58WYSZ0";
507        const CLARITY_ID = "u2fd8n3b0i";
508        const FB_PIXEL_ID = "2327647080993486";
509
510        // Load GA script dynamically
511        const gaScript = document.createElement('script');
512        gaScript.defer = true;
513        gaScript.src = 'https://www.googletagmanager.com/gtag/js?id=' + GA_ID;
514        document.head.appendChild(gaScript);
515
516        window.dataLayer = window.dataLayer || [];
517        window.gtag = function() {dataLayer.push(arguments);}
518
519        gtag('consent', 'default', {
520            'ad_storage': 'denied',
521            'ad_user_data': 'denied',
522            'ad_personalization': 'denied',
523            'analytics_storage': 'denied'
524        });
525
526        gtag('js', new Date());
527        gtag('config', GA_ID);
528
529        const consentBarEl = document.getElementById('consent-bar');
530        const acceptBtn = document.getElementById('cookie-consent-btn');
531        const rejectBtn = document.getElementById('cookie-reject-btn');
532        const configureBtn = document.getElementById('consent-configure-btn');
533        const saveBtn = document.getElementById('consent-save-btn');
534        const analyticsToggle = document.getElementById('consent-analytics');
535        const advertisingToggle = document.getElementById('consent-advertising');
536
537        // Consent storage — JSON shape {v:1, analytics, advertising, ts}.
538        // Legacy values ('granted'/'denied') are migrated on first read.
539        const readPrefs = () => {
540            const raw = window.localStorage.getItem('cookieConsent');
541            if (!raw) return null;
542            if (raw === 'granted') return { v: 1, analytics: true, advertising: true, ts: Date.now() };
543            if (raw === 'denied')  return { v: 1, analytics: false, advertising: false, ts: Date.now() };
544            try {
545                const parsed = JSON.parse(raw);
546                if (parsed && typeof parsed === 'object') return parsed;
547            } catch (_) {}
548            return null;
549        };
550
551        const writePrefs = (prefs) => {
552            const payload = { v: 1, analytics: !!prefs.analytics, advertising: !!prefs.advertising, ts: Date.now() };
553            window.localStorage.setItem('cookieConsent', JSON.stringify(payload));
554            const cats = [];
555            if (payload.analytics) cats.push('analytics');
556            if (payload.advertising) cats.push('advertising');
557            const cookieValue = cats.length ? cats.join(',') : 'none';
558            document.cookie = `cookie_consent=${cookieValue}; max-age=31536000; path=/; SameSite=Lax; Secure`;
559        };
560
561        // Honor Global Privacy Control: treat as reject-all, never show the bar.
562        const gpcEnabled = navigator.globalPrivacyControl === true;
563
564        const stored = readPrefs();
565
566        // Re-affirm the server-visible cookie on every load so it can't drift
567        // from localStorage (cookie expires after a year, localStorage forever).
568        if (stored) writePrefs(stored);
569
570        const updateBarHeight = () => {
571            document.documentElement.style.setProperty('--cookie-bar-height', consentBarEl.offsetHeight + 'px');
572        };
573        const barResizeObserver = new ResizeObserver(updateBarHeight);
574
575        const hideBar = () => {
576            barResizeObserver.unobserve(consentBarEl);
577            consentBarEl.classList.add('d-none');
578            consentBarEl.classList.remove('is-configuring');
579            document.documentElement.style.removeProperty('--cookie-bar-height');
580        };
581
582        const showBar = (prefill) => {
583            analyticsToggle.checked = !!(prefill && prefill.analytics);
584            advertisingToggle.checked = !!(prefill && prefill.advertising);
585            consentBarEl.classList.remove('d-none');
586            consentBarEl.classList.remove('is-configuring');
587            updateBarHeight();
588            barResizeObserver.observe(consentBarEl);
589        };
590
591        const commit = (prefs) => {
592            writePrefs(prefs);
593            applyConsent(prefs);
594            hideBar();
595        };
596
597        acceptBtn.addEventListener('click', (e) => {
598            e.preventDefault();
599            commit({ analytics: true, advertising: true });
600        });
601
602        rejectBtn.addEventListener('click', (e) => {
603            e.preventDefault();
604            commit({ analytics: false, advertising: false });
605        });
606
607        configureBtn.addEventListener('click', (e) => {
608            e.preventDefault();
609            consentBarEl.classList.add('is-configuring');
610            updateBarHeight();
611        });
612
613        saveBtn.addEventListener('click', (e) => {
614            e.preventDefault();
615            commit({ analytics: analyticsToggle.checked, advertising: advertisingToggle.checked });
616        });
617
618        // Fetch geo client-side so the response cache can't freeze it to one visitor's location.
619        const resolveCountry = () => {
620            const cached = window.sessionStorage.getItem('geoCountry');
621            if (cached) return Promise.resolve(cached);
622
623            return fetch('https://www.bergesinstitutespanish.com/geo', { headers: { 'Accept': 'application/json' } })
624                .then((res) => res.json())
625                .then((data) => {
626                    if (data.country) {
627                        window.sessionStorage.setItem('geoCountry', data.country);
628                    }
629                    return data.country || null;
630                })
631                .catch(() => null);
632        };
633
634        if (gpcEnabled && !stored) {
635            // GPC: record a reject and move on without showing the bar.
636            writePrefs({ analytics: false, advertising: false });
637        } else if (stored) {
638            applyConsent(stored);
639        } else {
640            resolveCountry().then((country) => {
641                if (country === 'US' || country === 'MX') {
642                    // Outside GDPR scope — treat auto-skip as implicit consent for ad attribution.
643                    const prefs = { analytics: true, advertising: true };
644                    writePrefs(prefs);
645                    applyConsent(prefs);
646                } else {
647                    showBar(null);
648                }
649            });
650        }
651
652        // Footer "Cookie preferences" link calls this.
653        window.showCookiePreferences = () => {
654            const current = readPrefs() || { analytics: false, advertising: false };
655            showBar(current);
656            consentBarEl.classList.add('is-configuring');
657            updateBarHeight();
658        };
659
660        function applyConsent(prefs) {
661            gtag('consent', 'update', {
662                'analytics_storage': prefs.analytics ? 'granted' : 'denied',
663                'ad_storage': prefs.advertising ? 'granted' : 'denied',
664                'ad_user_data': prefs.advertising ? 'granted' : 'denied',
665                'ad_personalization': prefs.advertising ? 'granted' : 'denied'
666            });
667
668            if (prefs.analytics && !window.__clarityLoaded) {
669                window.__clarityLoaded = true;
670                (function(c,l,a,r,i,t,y){
671                    c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
672                    t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
673                    y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
674                })(window, document, "clarity", "script", CLARITY_ID);
675            }
676
677            if (prefs.advertising && !window.__fbPixelLoaded) {
678                window.__fbPixelLoaded = true;
679                !function(f,b,e,v,n,t,s)
680                {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
681                    n.callMethod.apply(n,arguments):n.queue.push(arguments)};
682                    if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
683                    n.queue=[];t=b.createElement(e);t.async=!0;
684                    t.src=v;s=b.getElementsByTagName(e)[0];
685                    s.parentNode.insertBefore(t,s)}(window, document,'script',
686                    'https://connect.facebook.net/en_US/fbevents.js');
687                fbq('init', FB_PIXEL_ID);
688                fbq('track', 'PageView');
689            }
690        }
691    });
692</script>
vendor: 1 bytes, line 692
692
693<script>
694    if (window.electronAPI?.isElectron) {
695        const s = document.createElement('script');
696        s.defer = true;
697        s.src = 'https://cloud.umami.is/script.js';
698        s.dataset.websiteId = '2e842327-995f-40ff-96f6-f13f98e2bd08';
699        document.head.appendChild(s);
700    }
701</script>
vendor: 1 bytes, line 701
701
702<script defer src="https://unpkg.com/feather-icons" onload="feather.replace()"></script>
702
703</body>
704</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.