PageSourceSearch

https://cinnamon-brockley.co.uk/account/login

html cinnamon-brockley.co.uk collected 2026-10-08 20:40:25 UTC 16,781 bytes, 408 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <title>Login - Cinnamon Brockley</title>
7    <link rel="manifest" href="/manifest.json">
8    <meta name="theme-color" content="#006a4e">
9    <meta name="mobile-web-app-capable" content="yes">
10    <meta name="apple-mobile-web-app-status-bar-style" content="default">
11
12    <meta name="description" content="Great tasting Indian takeaway and delivery. Cinnamon Brockley offers traditional and authentic Indian food for home deliery around South East London">
13    <meta name="robots" content="noindex, nofollow">
14
15    <link rel="icon" type="image/png" href="https://images.alaan.co.uk/cinnamon-brockley/branding/favicon-32.png">
16    <link rel="apple-touch-icon" href="https://images.alaan.co.uk/cinnamon-brockley/branding/icon_192.png">
17
18
19    <link rel="preconnect" href="https://fonts.googleapis.com">
20    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
21    <link href="https://fonts.googleapis.com/css2?family=Fraunces:wght@400;600;700&family=Baloo+2:wght@300;400;500;600;700&display=swap" rel="stylesheet">
22    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
23    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css">
24    <link rel="stylesheet" href="/assets/css/custom.css?v=1.2.4">
25    <link rel="stylesheet" href="/assets/css/fonts.css">
26    <link rel="stylesheet" href="/assets/css/brand.css">
27    <link rel="stylesheet" href="/assets/css/a2hs.css">
28    
28<script src="/assets/js/a2hs.js"></script>
28
29
30    <style>
31        :root {
32            --font-heading: Fraunces;
33            --font-body: Baloo 2;
34            /* Brand colors available as utility classes */
35            --brand-color-one: #006a4e;
36            --brand-color-one-rgb: 0, 106, 78;
37            --brand-color-two: #e03a3e;
38            --brand-color-accent: #e0a526;
39            --brand-success: #38a169;
40            --brand-danger: #e53e3e;
41            --theme-text: #1f2a24;
42            --theme-text-light: #5c665f;
43            --theme-background: #ffffff;
44            --theme-background-alt: #f7f3ea;
45            /* Navbar-specific variables */
46            --navbar-bg: #fff;
47            --navbar-text: #006a4e;
48            --navbar-hover: #0b3d2e;
49            --navbar-active: #0b3d2e;
50            --navbar-cta-bg: var(--brand-color-one);
51            --navbar-cta-text: var(--navbar-bg);
52                }
53
54        /* Brand color utility classes */
55        .brand-color-one { color: var(--brand-color-one) !important; }
56        .bg-brand-color-one { background-color: var(--brand-color-one) !important; }
57        .border-brand-color-one { border-color: var(--brand-color-one) !important; }
58
59        .brand-color-two { color: var(--brand-color-two) !important; }
60        .bg-brand-color-two { background-color: var(--brand-color-two) !important; }
61        .border-brand-color-two { border-color: var(--brand-color-two) !important; }
62
63        .brand-color-accent { color: var(--brand-color-accent) !important; }
64        .bg-brand-color-accent { background-color: var(--brand-color-accent) !important; }
65        .border-brand-color-accent { border-color: var(--brand-color-accent) !important; }
66
67        /* Homepage-specific theme application */
68        body.page-home .bg-primary {
69            background-color: var(--brand-color-one) !important;
70        }
71        body.page-home .btn-primary {
72            background-color: var(--brand-color-one);
73            border-color: var(--brand-color-one);
74        }
75
76        body.page-home .btn-primary:hover {
77            background-color: color-mix(in srgb, var(--brand-color-one) 85%, black);
78            border-color: color-mix(in srgb, var(--brand-color-one) 85%, black);
79        }
80
81        body.page-home .text-primary {
82            color: var(--brand-color-one) !important;
83        }
84
85        /* Navbar uses brand color on all pages */
86        .navbar {
87            background-color: var(--navbar-bg) !important;
88        }
89
90        .navbar,
91        .navbar .navbar-brand,
92        .navbar .nav-link,
93        .navbar .navbar-text {
94            color: var(--navbar-text) !important;
95        }
96
97        .navbar .nav-link:hover,
98        .navbar .nav-link:focus {
99            color: var(--navbar-hover) !important;
100        }
101
102        .navbar .nav-link.active {
103            color: var(--navbar-active) !important;
104        }
105
106        /* Order button in the navbar - only rendered when navbar.order_button is true */
107        .navbar .nav-link.nav-cta,
108        .navbar .nav-link.nav-cta.active {
109            background-color: var(--navbar-cta-bg);
110            color: var(--navbar-cta-text) !important;
111            border-radius: 6.25rem;
112            padding: 0.5rem 1.125rem;
113            font-weight: 700;
114            line-height: 1.2;
115            transition: background-color 0.15s ease;
116        }
117        .navbar .nav-link.nav-cta:hover,
118        .navbar .nav-link.nav-cta:focus {
119            background-color: color-mix(in srgb, var(--navbar-cta-bg) 85%, black);
120            color: var(--navbar-cta-text) !important;
121        }
122        @media (min-width: 992px) {
123            .navbar .nav-item:has(> .nav-cta) {
124                display: flex;
125                align-items: center;
126                margin-left: 0.5rem;
127            }
128        }
129        @media (max-width: 991.98px) {
130            .navbar .nav-link.nav-cta {
131                display: inline-block;
132                margin: 0.5rem 0;
133            }
134        }
135
136        /* Darker navbar, use the variable */
137        /*.navbar {
138            background-color: color-mix(in srgb, var(--navbar-bg) 80%, black) !important;
139        }/*
140
141        /* Navbar color utilities */
142        .text-navbar { color: var(--navbar-text) !important; }
143        .bg-navbar { background-color: var(--navbar-bg) !important; }
144        .text-navbar-hover:hover { color: var(--navbar-hover) !important; }
145        .navbar-toggler { background-color: var(--navbar-text) !important;}
146        /* Logo area — live-tune knobs: navbar padding, brand padding, logo height */
147        .navbar { --bs-navbar-padding-y: 0.25rem; }
148        .navbar-brand {
149            display: inline-flex;
150            align-items: center;
151            gap: 0.625rem;
152            padding-top: 0.125rem;
153            padding-bottom: 0.125rem;
154        }
155        .navbar-logo { max-height: 3.5rem; width: auto; }
156        .navbar-brand-text {
157            font-family: var(--font-heading, serif);
158            font-size: 1.25rem;
159            font-weight: 600;
160            line-height: 1.1;
161        }
162    </style>
163    
163<script>
164        const BASE_PATH = "";
165        window.STORE_SLUG = null;
166        window.STORE_NAME = null;
167        window.IS_MULTI_STORE = false;
168        window.MENU_URL = "/order-online";
169        window.STORE_PATH = window.STORE_SLUG ? BASE_PATH + '/' + window.STORE_SLUG : BASE_PATH;
170    </script>
170
171
172<style>
173.auth-page {
174    min-height: 60vh;
175    display: flex;
176    align-items: center;
177}
178
179.auth-card {
180    max-width: 28rem;
181    margin: 0 auto;
182}
183
184.auth-divider {
185    display: flex;
186    align-items: center;
187    margin: 1.5rem 0;
188}
189
190.auth-divider::before,
191.auth-divider::after {
192    content: '';
193    flex: 1;
194    border-bottom: 0.0625rem solid #dee2e6;
195}
196
197.auth-divider span {
198    padding: 0 1rem;
199    color: #6c757d;
200    font-size: 0.875rem;
201}
202</style>
203</head>
204<body data-currency="£" class="bg-light page-login">
205    
206        <nav class="navbar navbar-expand-lg">
207            <div class="container">
208                <a class="navbar-brand" href="/">
209                        <img src="https://images.alaan.co.uk/cinnamon-brockley/branding/logo.png" alt="Cinnamon Brockley" class="navbar-logo">
210                </a>
211                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
212                    <span class="navbar-toggler-icon"></span>
213                </button>
214                <div class="collapse navbar-collapse" id="navbarNav">
215                    <ul class="navbar-nav ms-auto">
216                        <li class="nav-item">
217                            <a class="nav-link" href="/">Home</a>
218                        </li>
219                        <li class="nav-item">
220                            <a class="nav-link nav-cta" href="/order-online">Order Online</a>
221                        </li>
222                        <li class="nav-item">
223                            <a class="nav-link" href="/info">Info</a>
224                        </li>
225                        <li class="nav-item">
226                            <a class="nav-link active" href="/account/login">Login</a>
227                        </li>
228                    </ul>
229                </div>
230            </div>
231        </nav>
232    <main>
233<div class="auth-page">
234    <div class="container py-5">
235        <div class="auth-card">
236            <div class="text-center mb-4">
237                <h1 class="h3 mb-2">Welcome Back</h1>
238                <p class="text-muted">Sign in to your account</p>
239            </div>
240            
241            <div class="card shadow-sm">
242                <div class="card-body p-4">
243                    <div id="loginError" class="alert alert-danger d-none" role="alert"></div>
244                    
245                    <form id="loginForm" novalidate>
246                        <input type="hidden" name="csrf_token" value="34bdf5aa28fe5b8a8bf121d693e36544168cd30d82db805d992d57f715f671b0">
247                        
248                        <div class="mb-3">
249                            <label for="email" class="form-label">Email address</label>
250                            <input type="email" class="form-control" id="email" name="email" required autofocus>
251                            <div class="invalid-feedback">Please enter a valid email address</div>
252                        </div>
253                        
254                        <div class="mb-3">
255                            <label for="password" class="form-label">Password</label>
256                            <div class="input-group">
257                                <input type="password" class="form-control" id="password" name="password" required minlength="8">
258                                <button class="btn btn-outline-secondary" type="button" id="togglePassword" aria-label="Toggle password visibility">
259                                    <i class="bi bi-eye"></i>
260                                </button>
261                            </div>
262                            <div class="invalid-feedback">Password is required</div>
263                        </div>
264                        
265                        <div class="d-flex justify-content-between align-items-center mb-4">
266                            <div class="form-check">
267                                <input class="form-check-input" type="checkbox" id="remember" name="remember">
268                                <label class="form-check-label" for="remember">Remember me</label>
269                            </div>
270                            <a href="/account/forgot-password" class="text-decoration-none small">Forgot password?</a>
271                        </div>
272                        
273                        <button type="submit" class="btn btn-primary w-100" id="loginBtn">
274                            <span class="btn-text">Sign In</span>
275                            <span class="btn-loading d-none">
276                                <span class="spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
277                                Signing in...
278                            </span>
279                        </button>
280                    </form>
281                    
282                    <div class="auth-divider">
283                        <span>or</span>
284                    </div>
285                    
286                    <div class="text-center">
287                        <p class="mb-0">Don't have an account? <a href="/account/register" class="text-decoration-none">Create one</a></p>
288                    </div>
289                </div>
290            </div>
291            
292            <div class="text-center mt-4">
293                <a href="/order-online" class="text-muted text-decoration-none small">
294                    <i class="bi bi-arrow-left me-1"></i>Continue as guest
295                </a>
296            </div>
297        </div>
298    </div>
299</div>
300    </main>
301    <div class="cookie-notice" id="cookieNotice">
302        <div class="container">
303            <p>We use essential cookies to make ordering work. <a href="/privacy-policy">Learn more</a></p>
304            <button type="button" class="btn btn-sm btn-light" onclick="dismissCookieNotice()">OK</button>
305        </div>
306    </div>
307    <footer class="bg-dark text-white py-4">
308        <div class="container text-center">
309            <p class="mb-0">&copy; 2026 Cinnamon Brockley. All rights reserved.</p>
310            <p class="mb-0 mt-2">
311                <a href="/privacy-policy" class="text-white-50">Privacy</a> | 
312                <a href="/terms-conditions" class="text-white-50">Terms</a>
313                 | <a href="/subscribe" class="text-white-50">Subscribe</a>
314            </p>
315            <p class="mb-0 mt-2 small text-white-50">
316                <span class="menyu-credit">
317                    tech by <a href="https://menyu.co.uk" target="_blank" rel="noopener">menyu</a>
318                    <span class="menyu-popover">We love making tech that looks brilliant but works even better.</span>
319                </span>
320            </p>
321        </div>
322    </footer>
323
324    
324<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
324
325    
325<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
325
326    
326<script src="/assets/js/cart.js?v=1.2.4"></script>
326
327    
327<script>
328    function dismissCookieNotice() {
329        document.getElementById('cookieNotice').style.display = 'none';
330        localStorage.setItem('cookieNoticeAck', '1');
331    }
332
333    if (localStorage.getItem('cookieNoticeAck')) {
334        document.getElementById('cookieNotice').style.display = 'none';
335    }
336    </script>
vendor: 1 bytes, line 336
336
337<script>
338document.addEventListener('DOMContentLoaded', function() {
339    const form = document.getElementById('loginForm');
340    const errorAlert = document.getElementById('loginError');
341    const loginBtn = document.getElementById('loginBtn');
342    const togglePassword = document.getElementById('togglePassword');
343    
344    // Toggle password visibility
345    togglePassword.addEventListener('click', function() {
346        const passwordInput = document.getElementById('password');
347        const icon = this.querySelector('i');
348        
349        if (passwordInput.type === 'password') {
350            passwordInput.type = 'text';
351            icon.classList.remove('bi-eye');
352            icon.classList.add('bi-eye-slash');
353        } else {
354            passwordInput.type = 'password';
355            icon.classList.remove('bi-eye-slash');
356            icon.classList.add('bi-eye');
357        }
358    });
359    
360    form.addEventListener('submit', async function(e) {
361        e.preventDefault();
362        
363        // Reset error state
364        errorAlert.classList.add('d-none');
365        form.classList.remove('was-validated');
366        
367        // Validate form
368        if (!form.checkValidity()) {
369            form.classList.add('was-validated');
370            return;
371        }
372        
373        // Show loading state
374        loginBtn.disabled = true;
375        loginBtn.querySelector('.btn-text').classList.add('d-none');
376        loginBtn.querySelector('.btn-loading').classList.remove('d-none');
377        
378        try {
379            const formData = new FormData(form);
380            
381            const response = await fetch(BASE_PATH+'/account/login', {
382                method: 'POST',
383                body: new URLSearchParams(formData)
384            });
385            
386            const data = await response.json();
387            
388            if (data.success) {
389                window.location.href = BASE_PATH+data.redirect || BASE_PATH+'/account';
390            } else {
391                errorAlert.textContent = data.error || 'Login failed. Please try again.';
392                errorAlert.classList.remove('d-none');
393            }
394        } catch (error) {
395            console.error('Login error:', error);
396            errorAlert.textContent = 'An error occurred. Please try again.';
397            errorAlert.classList.remove('d-none');
398        } finally {
399            // Reset button state
400            loginBtn.disabled = false;
401            loginBtn.querySelector('.btn-text').classList.remove('d-none');
402            loginBtn.querySelector('.btn-loading').classList.add('d-none');
403        }
404    });
405});
406</script>
406
407</body>
408</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.