PageSourceSearch

https://www.bergesinstitutespanish.com/login

html bergesinstitutespanish.com collected 2026-10-02 03:00:38 UTC 22,258 bytes, 473 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>Sign in - Berges Institute Spanish Classes</title>
10
11    <meta name="description" content="">
12
13    <link rel="canonical" href="https://www.bergesinstitutespanish.com/login">
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    
64    
65    <meta property="og:title" content="Sign in - Berges Institute Spanish Classes">
66    <meta property="og:description" content="">
67    <meta property="og:url" content="https://www.bergesinstitutespanish.com/login">
68    <meta property="og:type" content="website">
69    <meta property="og:site_name" content="Berges Institute Spanish Classes">
70    <meta property="og:locale" content="en_US">
71            <meta property="og:image" content="https://www.bergesinstitutespanish.com/img/app.jpg">
72        <meta name="twitter:card" content="summary_large_image">
73    <meta name="twitter:title" content="Sign in - Berges Institute Spanish Classes">
74    <meta name="twitter:description" content="">
75            <meta name="twitter:image" content="https://www.bergesinstitutespanish.com/img/app.jpg">
76    
77    <!-- Favicon -->
78    <link rel="icon" href="https://www.bergesinstitutespanish.com/img/favicon.png">
79</head>
80<body class="bg-white">
81    <main role="main">
82        <div class="min-vh-100 d-flex flex-column justify-content-center align-items-center px-3 py-4">
83            <div class="w-100 border rounded-3 p-4" style="max-width: 440px;">
84                <div class="mb-5 pt-1">
85                    <a href="https://www.bergesinstitutespanish.com" class="d-block">
86                        <img alt="Berges Institute" width="250" height="26" class="w-100 h-auto" src="https://www.bergesinstitutespanish.com/img/berges_logo.svg">
87                    </a>
88                </div>
89                    
90    <div class="mt-2">
91        <a href="https://www.bergesinstitutespanish.com/google-redirect" class="btn btn-light bg-white border border-dark w-100 d-flex align-items-center justify-content-center">
92            <span class="d-flex align-items-center"><svg viewBox="0 0 24 24" width="20" height="20" xmlns="http://www.w3.org/2000/svg">
93    <g transform="matrix(1, 0, 0, 1, 27.009001, -39.238998)">
94        <path fill="#4285F4" d="M -3.264 51.509 C -3.264 50.719 -3.334 49.969 -3.454 49.239 L -14.754 49.239 L -14.754 53.749 L -8.284 53.749 C -8.574 55.229 -9.424 56.479 -10.684 57.329 L -10.684 60.329 L -6.824 60.329 C -4.564 58.239 -3.264 55.159 -3.264 51.509 Z"/>
95        <path fill="#34A853" d="M -14.754 63.239 C -11.514 63.239 -8.804 62.159 -6.824 60.329 L -10.684 57.329 C -11.764 58.049 -13.134 58.489 -14.754 58.489 C -17.884 58.489 -20.534 56.379 -21.484 53.529 L -25.464 53.529 L -25.464 56.619 C -23.494 60.539 -19.444 63.239 -14.754 63.239 Z"/>
96        <path fill="#FBBC05" d="M -21.484 53.529 C -21.734 52.809 -21.864 52.039 -21.864 51.239 C -21.864 50.439 -21.724 49.669 -21.484 48.949 L -21.484 45.859 L -25.464 45.859 C -26.284 47.479 -26.754 49.299 -26.754 51.239 C -26.754 53.179 -26.284 54.999 -25.464 56.619 L -21.484 53.529 Z"/>
97        <path fill="#EA4335" d="M -14.754 43.989 C -12.984 43.989 -11.404 44.599 -10.154 45.789 L -6.734 42.369 C -8.804 40.429 -11.514 39.239 -14.754 39.239 C -19.444 39.239 -23.494 41.939 -25.464 45.859 L -21.484 48.949 C -20.534 46.099 -17.884 43.989 -14.754 43.989 Z"/>
98    </g>
99</svg></span>
100            <span class="ms-2">Continue with Google</span>
101        </a>
102    </div>
103
104    <div class="d-flex justify-content-center align-items-center py-3">
105        <div class="flex-grow-1 border-bottom border-dark"></div>
106        <div class="mx-1">or</div>
107        <div class="flex-grow-1 border-bottom border-dark"></div>
108    </div>
109
110    
111    <form class="form" method="POST" action="https://www.bergesinstitutespanish.com/login">
112        <input type="hidden" name="_token" value="hacjXna10Ltjxk8xBhCLCX2vDla8SvBCA7RD28qw" autocomplete="off">
113        <div class="mb-3">
114            <input type="text" class="form-control" id="email" name="email" value="" placeholder="[email protected]">
115        </div>
116
117        <div class="mb-3">
118            <div class="d-flex">
119                <input type="password" class="form-control" id="password" name="password" placeholder="Password">
120                <a href="" id="reveal-password" class="ms-2 align-items-center text-dark px-2 border" style="display: flex">
121    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-eye"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg></a>
122<a href="" id="hide-password" class="ms-2 align-items-center text-dark px-2 border" style="display:none">
123    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-eye-off"><path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path><line x1="1" y1="1" x2="23" y2="23"></line></svg>
124</a>
125
126<script>
127    (function() {
128        let passwordShown = false;
129        const eyeOpen = document.querySelector('#reveal-password');
130        const eyeClose = document.querySelector('#hide-password');
131        const passwordInput = document.querySelector('#password');
132
133        eyeOpen.addEventListener('click', e => {
134            e.preventDefault();
135            passwordShown = true;
136            eyeOpen.style.display = 'none';
137            eyeClose.style.display = 'flex';
138            passwordInput.type = 'text';
139        });
140
141        eyeClose.addEventListener('click', e => {
142            e.preventDefault();
143            passwordShown = false;
144            eyeOpen.style.display = 'flex';
145            eyeClose.style.display = 'none';
146            passwordInput.type = 'password';
147        });
148    }) ();
149</script>
149            </div>
150        </div>
151
152        <input type="submit" class="btn btn-dark w-100 mb-2" value="Sign in">
153
154        <div class="d-flex align-items-center mt-1 small fw-bold">
155            <a href="https://www.bergesinstitutespanish.com/forgot-password">Forgot password?</a>
156        </div>
157
158        <hr>
159
160        <div class="mt-3 text-start small">
161            <span>Don&#039;t have an account yet?</span>
162            <a class="fw-bold" href="https://www.bergesinstitutespanish.com/register">Sign up!</a>
163        </div>
164    </form>
165            </div>
166
167            <footer class="d-flex justify-content-center align-items-center flex-wrap mt-3 text-xs">
168                                    <div><a href="https://www.bergesinstitutespanish.com/privacy-policy" class="text-gray">Privacy Policy</a></div>
169                    <div class="ms-2"><a href="https://www.bergesinstitutespanish.com/terms-of-service" class="text-gray">Terms of Service</a></div>
170                            </footer>
171        </div>
172    </main>
173
174    
174<script>
175        if (window.localStorage.getItem('bergesToken')) window.location.href = '/upcoming';
176    </script>
vendor: 1 bytes, line 176
176
177<script>
178    (function () {
179        const popImages = document.querySelectorAll('.pop');
180
181        pop();
182
183        window.addEventListener('scroll', () => pop());
184
185        function pop() {
186            popImages.forEach(item => {
187                if (item.getBoundingClientRect().top < window.innerHeight && item.getBoundingClientRect().bottom >= 0) {
188                    if (!item.classList.contains('top')) item.classList.add('img-popup');
189                }
190            });
191        }
192
193        const zoomEls = document.querySelectorAll('.zoom');
194
195        zoom();
196
197        window.addEventListener('scroll', () => zoom());
198
199        function zoom() {
200            zoomEls.forEach(item => {
201                if (item.getBoundingClientRect().top < window.innerHeight && item.getBoundingClientRect().bottom >= 0) {
202                    item.classList.add('el-zoom');
203                }
204            });
205        }
206
207        // No zoom on iOS Safari
208        if (navigator.userAgent.indexOf('iPhone') > -1) {
209            document.querySelector("[name=viewport]")
210                .setAttribute("content", "width=device-width, initial-scale=1, maximum-scale=1");
211        }
212    })();
213</script>
213
214
215
216    
216<script>
217    if (window.electronAPI?.isElectron) {
218        // Electron app: no analytics, no cookie banner
219        window.dataLayer = window.dataLayer || [];
220        window.gtag = function() {};
221    }
222</script>
222
223
224<style>
225    body { padding-bottom: var(--cookie-bar-height, 0); }
226    #consent-bar .consent-configure { display: none; }
227    #consent-bar.is-configuring .consent-configure { display: block; }
228    #consent-bar.is-configuring #consent-configure-btn { display: none; }
229    #consent-bar.is-configuring .consent-primary-actions #cookie-consent-btn,
230    #consent-bar.is-configuring .consent-primary-actions #cookie-reject-btn { display: none; }
231</style>
232<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">
233    <div>
234        <div class="small mb-3">
235            We use our own and third-party cookies for analytics and advertising. You can accept, reject, or configure them.
236            <a href="https://www.bergesinstitutespanish.com/cookie-policy" target="_blank" rel="noopener">Cookie policy</a>.
237        </div>
238        <div class="d-flex gap-2 flex-wrap consent-primary-actions">
239            <a href="#" id="consent-configure-btn" class="btn btn-sm btn-outline-dark">Manage</a>
240            <a href="#" id="cookie-reject-btn" class="btn btn-sm btn-primary">Reject</a>
241            <a href="#" id="cookie-consent-btn" class="btn btn-sm btn-primary">Accept</a>
242        </div>
243    </div>
244    <div class="consent-configure">
245        <div class="small">
246            <div class="mb-2">
247                <label class="d-flex align-items-center gap-2">
248                    <input type="checkbox" disabled checked>
249                    <span><strong>Strictly necessary</strong> — always on</span>
250                </label>
251            </div>
252            <div class="mb-2">
253                <label class="d-flex align-items-center gap-2">
254                    <input type="checkbox" id="consent-analytics">
255                    <span><strong>Analytics</strong> — Google Analytics, Microsoft Clarity</span>
256                </label>
257            </div>
258            <div class="mb-3">
259                <label class="d-flex align-items-center gap-2">
260                    <input type="checkbox" id="consent-advertising">
261                    <span><strong>Advertising</strong> — Google Ads, Meta Pixel</span>
262                </label>
263            </div>
264        </div>
265        <div>
266            <a href="#" id="consent-save-btn" class="btn btn-sm btn-primary">Save preferences</a>
267        </div>
268    </div>
269</div>
270
271<script>
272    document.addEventListener('DOMContentLoaded', () => {
273        if (window.electronAPI?.isElectron) return;
274
275        const GA_ID = "G-ZSV58WYSZ0";
276        const CLARITY_ID = "u2fd8n3b0i";
277        const FB_PIXEL_ID = "2327647080993486";
278
279        // Load GA script dynamically
280        const gaScript = document.createElement('script');
281        gaScript.defer = true;
282        gaScript.src = 'https://www.googletagmanager.com/gtag/js?id=' + GA_ID;
283        document.head.appendChild(gaScript);
284
285        window.dataLayer = window.dataLayer || [];
286        window.gtag = function() {dataLayer.push(arguments);}
287
288        gtag('consent', 'default', {
289            'ad_storage': 'denied',
290            'ad_user_data': 'denied',
291            'ad_personalization': 'denied',
292            'analytics_storage': 'denied'
293        });
294
295        gtag('js', new Date());
296        gtag('config', GA_ID);
297
298        const consentBarEl = document.getElementById('consent-bar');
299        const acceptBtn = document.getElementById('cookie-consent-btn');
300        const rejectBtn = document.getElementById('cookie-reject-btn');
301        const configureBtn = document.getElementById('consent-configure-btn');
302        const saveBtn = document.getElementById('consent-save-btn');
303        const analyticsToggle = document.getElementById('consent-analytics');
304        const advertisingToggle = document.getElementById('consent-advertising');
305
306        // Consent storage — JSON shape {v:1, analytics, advertising, ts}.
307        // Legacy values ('granted'/'denied') are migrated on first read.
308        const readPrefs = () => {
309            const raw = window.localStorage.getItem('cookieConsent');
310            if (!raw) return null;
311            if (raw === 'granted') return { v: 1, analytics: true, advertising: true, ts: Date.now() };
312            if (raw === 'denied')  return { v: 1, analytics: false, advertising: false, ts: Date.now() };
313            try {
314                const parsed = JSON.parse(raw);
315                if (parsed && typeof parsed === 'object') return parsed;
316            } catch (_) {}
317            return null;
318        };
319
320        const writePrefs = (prefs) => {
321            const payload = { v: 1, analytics: !!prefs.analytics, advertising: !!prefs.advertising, ts: Date.now() };
322            window.localStorage.setItem('cookieConsent', JSON.stringify(payload));
323            const cats = [];
324            if (payload.analytics) cats.push('analytics');
325            if (payload.advertising) cats.push('advertising');
326            const cookieValue = cats.length ? cats.join(',') : 'none';
327            document.cookie = `cookie_consent=${cookieValue}; max-age=31536000; path=/; SameSite=Lax; Secure`;
328        };
329
330        // Honor Global Privacy Control: treat as reject-all, never show the bar.
331        const gpcEnabled = navigator.globalPrivacyControl === true;
332
333        const stored = readPrefs();
334
335        // Re-affirm the server-visible cookie on every load so it can't drift
336        // from localStorage (cookie expires after a year, localStorage forever).
337        if (stored) writePrefs(stored);
338
339        const updateBarHeight = () => {
340            document.documentElement.style.setProperty('--cookie-bar-height', consentBarEl.offsetHeight + 'px');
341        };
342        const barResizeObserver = new ResizeObserver(updateBarHeight);
343
344        const hideBar = () => {
345            barResizeObserver.unobserve(consentBarEl);
346            consentBarEl.classList.add('d-none');
347            consentBarEl.classList.remove('is-configuring');
348            document.documentElement.style.removeProperty('--cookie-bar-height');
349        };
350
351        const showBar = (prefill) => {
352            analyticsToggle.checked = !!(prefill && prefill.analytics);
353            advertisingToggle.checked = !!(prefill && prefill.advertising);
354            consentBarEl.classList.remove('d-none');
355            consentBarEl.classList.remove('is-configuring');
356            updateBarHeight();
357            barResizeObserver.observe(consentBarEl);
358        };
359
360        const commit = (prefs) => {
361            writePrefs(prefs);
362            applyConsent(prefs);
363            hideBar();
364        };
365
366        acceptBtn.addEventListener('click', (e) => {
367            e.preventDefault();
368            commit({ analytics: true, advertising: true });
369        });
370
371        rejectBtn.addEventListener('click', (e) => {
372            e.preventDefault();
373            commit({ analytics: false, advertising: false });
374        });
375
376        configureBtn.addEventListener('click', (e) => {
377            e.preventDefault();
378            consentBarEl.classList.add('is-configuring');
379            updateBarHeight();
380        });
381
382        saveBtn.addEventListener('click', (e) => {
383            e.preventDefault();
384            commit({ analytics: analyticsToggle.checked, advertising: advertisingToggle.checked });
385        });
386
387        // Fetch geo client-side so the response cache can't freeze it to one visitor's location.
388        const resolveCountry = () => {
389            const cached = window.sessionStorage.getItem('geoCountry');
390            if (cached) return Promise.resolve(cached);
391
392            return fetch('https://www.bergesinstitutespanish.com/geo', { headers: { 'Accept': 'application/json' } })
393                .then((res) => res.json())
394                .then((data) => {
395                    if (data.country) {
396                        window.sessionStorage.setItem('geoCountry', data.country);
397                    }
398                    return data.country || null;
399                })
400                .catch(() => null);
401        };
402
403        if (gpcEnabled && !stored) {
404            // GPC: record a reject and move on without showing the bar.
405            writePrefs({ analytics: false, advertising: false });
406        } else if (stored) {
407            applyConsent(stored);
408        } else {
409            resolveCountry().then((country) => {
410                if (country === 'US' || country === 'MX') {
411                    // Outside GDPR scope — treat auto-skip as implicit consent for ad attribution.
412                    const prefs = { analytics: true, advertising: true };
413                    writePrefs(prefs);
414                    applyConsent(prefs);
415                } else {
416                    showBar(null);
417                }
418            });
419        }
420
421        // Footer "Cookie preferences" link calls this.
422        window.showCookiePreferences = () => {
423            const current = readPrefs() || { analytics: false, advertising: false };
424            showBar(current);
425            consentBarEl.classList.add('is-configuring');
426            updateBarHeight();
427        };
428
429        function applyConsent(prefs) {
430            gtag('consent', 'update', {
431                'analytics_storage': prefs.analytics ? 'granted' : 'denied',
432                'ad_storage': prefs.advertising ? 'granted' : 'denied',
433                'ad_user_data': prefs.advertising ? 'granted' : 'denied',
434                'ad_personalization': prefs.advertising ? 'granted' : 'denied'
435            });
436
437            if (prefs.analytics && !window.__clarityLoaded) {
438                window.__clarityLoaded = true;
439                (function(c,l,a,r,i,t,y){
440                    c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
441                    t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
442                    y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
443                })(window, document, "clarity", "script", CLARITY_ID);
444            }
445
446            if (prefs.advertising && !window.__fbPixelLoaded) {
447                window.__fbPixelLoaded = true;
448                !function(f,b,e,v,n,t,s)
449                {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
450                    n.callMethod.apply(n,arguments):n.queue.push(arguments)};
451                    if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
452                    n.queue=[];t=b.createElement(e);t.async=!0;
453                    t.src=v;s=b.getElementsByTagName(e)[0];
454                    s.parentNode.insertBefore(t,s)}(window, document,'script',
455                    'https://connect.facebook.net/en_US/fbevents.js');
456                fbq('init', FB_PIXEL_ID);
457                fbq('track', 'PageView');
458            }
459        }
460    });
461</script>
vendor: 1 bytes, line 461
461
462<script>
463    if (window.electronAPI?.isElectron) {
464        const s = document.createElement('script');
465        s.defer = true;
466        s.src = 'https://cloud.umami.is/script.js';
467        s.dataset.websiteId = '2e842327-995f-40ff-96f6-f13f98e2bd08';
468        document.head.appendChild(s);
469    }
470</script>
vendor: 1 bytes, line 470
470
471<script defer src="https://unpkg.com/feather-icons" onload="feather.replace()"></script>
471
472</body>
473</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.