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

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>TMAG Marketing Command Center — Login</title>
    <meta name="robots" content="noindex, nofollow">
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
    <style>
        *, *::before, *::after {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
            background: #05060a;
            color: #e2e4e9;
            min-height: 100vh;
            display: flex;
            align-items: center;
            justify-content: center;
            overflow: hidden;
        }

        /* ── WebGL Canvas ───────────────────────────────────── */
        #webgl-canvas {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: 0;
            pointer-events: none;
        }

        /* ── Login Container ────────────────────────────────── */
        .login-wrapper {
            position: relative;
            z-index: 10;
            width: 100%;
            max-width: 440px;
            padding: 20px;
        }

        .login-card {
            background: rgba(12, 14, 20, 0.85);
            backdrop-filter: blur(24px);
            -webkit-backdrop-filter: blur(24px);
            border: 1px solid rgba(212, 168, 67, 0.15);
            border-radius: 24px;
            padding: 48px 40px 40px;
            box-shadow:
                0 0 80px rgba(212, 168, 67, 0.06),
                0 32px 64px rgba(0, 0, 0, 0.5),
                inset 0 1px 0 rgba(255, 255, 255, 0.05);
            animation: cardEntry 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards;
            opacity: 0;
            transform: translateY(30px) scale(0.97);
        }

        @keyframes cardEntry {
            to {
                opacity: 1;
                transform: translateY(0) scale(1);
            }
        }

        /* ── Logo & Branding ────────────────────────────────── */
        .login-logo {
            text-align: center;
            margin-bottom: 8px;
        }

        .login-logo .logo-icon {
            width: 64px;
            height: 64px;
            margin: 0 auto 16px;
            background: linear-gradient(135deg, #d4a843, #f0d78c);
            border-radius: 16px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 28px;
            box-shadow: 0 0 30px rgba(212, 168, 67, 0.3);
        }

        .login-logo h1 {
            font-size: 22px;
            font-weight: 800;
            letter-spacing: -0.02em;
            background: linear-gradient(135deg, #d4a843, #f0d78c, #d4a843);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
            line-height: 1.2;
        }

        .login-logo .subtitle {
            font-size: 13px;
            color: rgba(255, 255, 255, 0.4);
            margin-top: 4px;
            font-weight: 400;
            letter-spacing: 0.03em;
        }

        /* ── Error Message ──────────────────────────────────── */
        .login-error {
            background: rgba(239, 68, 68, 0.1);
            border: 1px solid rgba(239, 68, 68, 0.3);
            color: #fca5a5;
            border-radius: 12px;
            padding: 12px 16px;
            font-size: 13px;
            margin-bottom: 24px;
            display: flex;
            align-items: center;
            gap: 10px;
            animation: shake 0.5s ease-in-out;
        }

        @keyframes shake {
            0%, 100% { transform: translateX(0); }
            20% { transform: translateX(-8px); }
            40% { transform: translateX(8px); }
            60% { transform: translateX(-4px); }
            80% { transform: translateX(4px); }
        }

        /* ── Form Styles ────────────────────────────────────── */
        .login-form {
            margin-top: 32px;
        }

        .form-group {
            margin-bottom: 20px;
        }

        .form-group label {
            display: block;
            font-size: 12px;
            font-weight: 600;
            text-transform: uppercase;
            letter-spacing: 0.08em;
            color: rgba(255, 255, 255, 0.5);
            margin-bottom: 8px;
        }

        .form-group input {
            width: 100%;
            padding: 14px 16px;
            background: rgba(255, 255, 255, 0.04);
            border: 1px solid rgba(255, 255, 255, 0.1);
            border-radius: 12px;
            color: #e2e4e9;
            font-size: 15px;
            font-family: 'Inter', sans-serif;
            transition: all 0.3s ease;
            outline: none;
        }

        .form-group input:focus {
            border-color: rgba(212, 168, 67, 0.5);
            background: rgba(255, 255, 255, 0.06);
            box-shadow: 0 0 0 3px rgba(212, 168, 67, 0.1);
        }

        .form-group input::placeholder {
            color: rgba(255, 255, 255, 0.2);
        }

        /* ── Submit Button ──────────────────────────────────── */
        .login-btn {
            width: 100%;
            padding: 15px 24px;
            background: linear-gradient(135deg, #d4a843, #c49a3a);
            border: none;
            border-radius: 12px;
            color: #0a0b0f;
            font-size: 15px;
            font-weight: 700;
            font-family: 'Inter', sans-serif;
            cursor: pointer;
            transition: all 0.3s ease;
            letter-spacing: 0.02em;
            position: relative;
            overflow: hidden;
            margin-top: 8px;
        }

        .login-btn:hover {
            background: linear-gradient(135deg, #e0b84d, #d4a843);
            transform: translateY(-1px);
            box-shadow: 0 8px 24px rgba(212, 168, 67, 0.3);
        }

        .login-btn:active {
            transform: translateY(0);
        }

        .login-btn .btn-shimmer {
            position: absolute;
            top: 0;
            left: -100%;
            width: 100%;
            height: 100%;
            background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
            animation: shimmer 3s infinite;
        }

        @keyframes shimmer {
            0% { left: -100%; }
            100% { left: 100%; }
        }

        /* ── Footer ─────────────────────────────────────────── */
        .login-footer {
            text-align: center;
            margin-top: 24px;
            padding-top: 20px;
            border-top: 1px solid rgba(255, 255, 255, 0.06);
        }

        .login-footer p {
            font-size: 11px;
            color: rgba(255, 255, 255, 0.25);
            letter-spacing: 0.02em;
        }

        .login-footer .security-badge {
            display: inline-flex;
            align-items: center;
            gap: 6px;
            font-size: 11px;
            color: rgba(255, 255, 255, 0.3);
            margin-top: 8px;
        }

        .login-footer .security-badge .dot {
            width: 6px;
            height: 6px;
            border-radius: 50%;
            background: #22c55e;
            animation: pulse-dot 2s infinite;
        }

        @keyframes pulse-dot {
            0%, 100% { opacity: 1; }
            50% { opacity: 0.4; }
        }

        /* ── Responsive ─────────────────────────────────────── */
        @media (max-width: 480px) {
            .login-card {
                padding: 36px 24px 32px;
                border-radius: 20px;
            }
            .login-logo h1 {
                font-size: 19px;
            }
        }

        /* ── Reduced Motion ─────────────────────────────────── */
        @media (prefers-reduced-motion: reduce) {
            *, *::before, *::after {
                animation-duration: 0.01ms !important;
                transition-duration: 0.01ms !important;
            }
            .login-card {
                opacity: 1;
                transform: none;
            }
        }
    </style>
</head>
<body style="background:#0a0a0f !important; color:#ffffff !important; margin:0 !important; padding:0 !important; overflow:auto !important; display:block !important;">
    <canvas id="webgl-canvas"></canvas>

    <div class="login-wrapper">
        <div class="login-card">
            <!-- Logo -->
            <div class="login-logo">
                <div class="logo-icon">&#9881;</div>
                <h1>Marketing Command Center</h1>
                <p class="subtitle">Tim Moran Auto Group</p>
            </div>

            <!-- Error -->
            
            <!-- Form -->
            <form class="login-form" method="POST" action="">
                <input type="hidden" name="tmag_login_action" value="1">
                <input type="hidden" name="tmag_csrf" value="daac041721db703dcf474fb2a3e050f3bd8a57c71869a3d65a32bdce0800a8f5">
                <input type="hidden" name="tmag_redirect" value="/sitemap.xml">

                <div class="form-group">
                    <label for="tmag_username">Username</label>
                    <input type="text" id="tmag_username" name="tmag_username"
                           placeholder="Enter your username"
                           autocomplete="username"
                           required autofocus>
                </div>

                <div class="form-group">
                    <label for="tmag_password">Password</label>
                    <input type="password" id="tmag_password" name="tmag_password"
                           placeholder="Enter your password"
                           autocomplete="current-password"
                           required>
                </div>

                <button type="submit" class="login-btn">
                    <span class="btn-shimmer"></span>
                    Access Command Center
                </button>
            </form>

            <!-- Footer -->
            <div class="login-footer">
                <p>&copy; 2026 Tim Moran Auto Group</p>
                <div class="security-badge">
                    <span class="dot"></span>
                    <span>Session-secured &bull; Encrypted</span>
                </div>
            </div>
        </div>
    </div>

    <!-- WebGL Background -->
    <script>
    (function() {
        var isMobile = /Mobi|Android/i.test(navigator.userAgent) || window.innerWidth < 768;
        var PARTICLE_COUNT = isMobile ? 300 : 1200;
        var canvas = document.getElementById('webgl-canvas');
        var renderer, scene, camera, particles, positions, velocities, colors;
        var mouseX = 0, mouseY = 0;
        var contextLost = false;

        try {
            renderer = new THREE.WebGLRenderer({
                canvas: canvas,
                alpha: true,
                antialias: false,
                powerPreference: 'high-performance'
            });
            renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
            renderer.setSize(window.innerWidth, window.innerHeight);
            renderer.setClearColor(0x05060a, 1);
        } catch (e) {
            canvas.style.background = '#05060a';
            return;
        }

        canvas.addEventListener('webglcontextlost', function(e) {
            e.preventDefault(); contextLost = true;
        });
        canvas.addEventListener('webglcontextrestored', function() {
            contextLost = false; initParticles();
        });

        scene = new THREE.Scene();
        camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000);
        camera.position.z = 300;

        function initParticles() {
            if (particles) scene.remove(particles);
            var geo = new THREE.BufferGeometry();
            positions = new Float32Array(PARTICLE_COUNT * 3);
            velocities = new Float32Array(PARTICLE_COUNT * 3);
            colors = new Float32Array(PARTICLE_COUNT * 3);
            var sizes = new Float32Array(PARTICLE_COUNT);

            var palette = [
                [0.83, 0.66, 0.26],
                [0.18, 0.55, 0.78],
                [0.94, 0.85, 0.55],
                [0.4, 0.3, 0.15],
            ];

            for (var i = 0; i < PARTICLE_COUNT; i++) {
                positions[i*3]   = (Math.random() - 0.5) * 700;
                positions[i*3+1] = (Math.random() - 0.5) * 700;
                positions[i*3+2] = (Math.random() - 0.5) * 500;
                velocities[i*3]   = (Math.random() - 0.5) * 0.08;
                velocities[i*3+1] = (Math.random() - 0.5) * 0.08;
                velocities[i*3+2] = (Math.random() - 0.5) * 0.05;
                var c = palette[Math.floor(Math.random() * palette.length)];
                colors[i*3] = c[0]; colors[i*3+1] = c[1]; colors[i*3+2] = c[2];
                sizes[i] = Math.random() * 2.5 + 0.5;
            }

            geo.setAttribute('position', new THREE.BufferAttribute(positions, 3));
            geo.setAttribute('color', new THREE.BufferAttribute(colors, 3));
            geo.setAttribute('size', new THREE.BufferAttribute(sizes, 1));

            var mat = new THREE.ShaderMaterial({
                vertexColors: true,
                transparent: true,
                depthWrite: false,
                blending: THREE.AdditiveBlending,
                vertexShader: [
                    'attribute float size;',
                    'varying vec3 vColor;',
                    'void main() {',
                    '  vColor = color;',
                    '  vec4 mv = modelViewMatrix * vec4(position, 1.0);',
                    '  gl_PointSize = size * (200.0 / -mv.z);',
                    '  gl_Position = projectionMatrix * mv;',
                    '}'
                ].join('\n'),
                fragmentShader: [
                    'varying vec3 vColor;',
                    'void main() {',
                    '  float d = length(gl_PointCoord - 0.5);',
                    '  if (d > 0.5) discard;',
                    '  float a = 1.0 - smoothstep(0.2, 0.5, d);',
                    '  gl_FragColor = vec4(vColor, a * 0.5);',
                    '}'
                ].join('\n')
            });

            particles = new THREE.Points(geo, mat);
            scene.add(particles);
        }
        initParticles();

        var clock = new THREE.Clock();
        function animate() {
            requestAnimationFrame(animate);
            if (contextLost || !renderer) return;
            var time = clock.getElapsedTime();

            camera.position.x += (mouseX * 15 - camera.position.x) * 0.015;
            camera.position.y += (mouseY * 10 - camera.position.y) * 0.015;
            camera.lookAt(0, 0, 0);

            var posAttr = particles.geometry.attributes.position;
            var B = 350;
            for (var i = 0; i < PARTICLE_COUNT; i++) {
                positions[i*3]   += velocities[i*3];
                positions[i*3+1] += velocities[i*3+1];
                positions[i*3+2] += velocities[i*3+2];
                if (positions[i*3] > B) positions[i*3] = -B;
                if (positions[i*3] < -B) positions[i*3] = B;
                if (positions[i*3+1] > B) positions[i*3+1] = -B;
                if (positions[i*3+1] < -B) positions[i*3+1] = B;
                if (positions[i*3+2] > 250) positions[i*3+2] = -250;
                if (positions[i*3+2] < -250) positions[i*3+2] = 250;
            }
            posAttr.needsUpdate = true;

            particles.rotation.y = time * 0.01;
            particles.rotation.x = Math.sin(time * 0.005) * 0.03;

            renderer.render(scene, camera);
        }
        animate();

        document.addEventListener('mousemove', function(e) {
            mouseX = (e.clientX / window.innerWidth) * 2 - 1;
            mouseY = -(e.clientY / window.innerHeight) * 2 + 1;
        });
        window.addEventListener('resize', function() {
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize(window.innerWidth, window.innerHeight);
        });
    })();
    </script>
</body>
</html>
