File size: 7,405 Bytes
b1fb35d
974696d
b1fb35d
 
 
974696d
b1fb35d
974696d
 
b1fb35d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
974696d
b1fb35d
 
974696d
 
 
 
 
b1fb35d
 
 
974696d
b1fb35d
 
974696d
b1fb35d
 
 
 
 
 
 
974696d
 
b1fb35d
 
 
974696d
b1fb35d
 
 
 
 
 
 
 
 
974696d
 
 
 
b1fb35d
974696d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b1fb35d
 
974696d
b1fb35d
 
974696d
b1fb35d
 
 
974696d
 
 
 
b1fb35d
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Zauth - Smart Check-In</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <!-- ScrollReveal CDN -->
    <script src="https://unpkg.com/scrollreveal"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
    <link rel="stylesheet" href="/static/css/styles.css">
    <style>
        /* Scan effect in a slight spiral motion */
        .scan-effect {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            border-radius: 50%;
            background: rgba(255, 255, 255, 0.1);
            opacity: 0;
            z-index: 1;
        }

        /* Animation spiral */
        @keyframes spiral-scan {
            0% {
                transform: scale(0.8) rotate(0deg);
                opacity: 0;
            }
            50% {
                transform: scale(1.2) rotate(180deg);
                opacity: 1;
            }
            100% {
                transform: scale(1.5) rotate(360deg);
                opacity: 0;
            }
        }

        /* Active class for scan effect */
        .scan-active {
            animation: spiral-scan 3s ease-in-out;
        }
    </style>
</head>

<body class="bg-gray-900 text-white min-h-screen flex flex-col" style="background-image: url('/static/images/background.jpg');">
    
    <!-- Header Aligné en Haut à Gauche -->
    <header class="container mx-auto p-6">
        <h1 class="text-4xl font-bold text-left text-white icon-geistmono">Zauth.</h1>
    </header>

    <main class="flex-grow container mx-auto p-6 flex flex-col lg:flex-row items-center justify-center space-y-16 lg:space-y-0 lg:space-x-28">
    
        <!-- Camera Section -->
        <div class="max-w-md w-full flex justify-center items-center video-reveal">
            <div class="relative">
                <!-- Vidéo circulaire centrée -->
                <video id="camera-feed" autoplay muted class="w-full max-w-md max-h-md aspect-square bg-black rounded-full object-cover shadow-2xl ring-4 ring-gray-300 ring-opacity-50 hover:ring-blue-500 hover:ring-opacity-75 transition-all duration-300 ease-in-out transform hover:scale-105"></video>
    
                <!-- Scan Effect -->
                <div id="scan-effect" class="scan-effect"></div>
            </div>
        </div>
    
        <!-- Form Section -->
        <div class="max-w-sm w-full bg-gray-800/40 backdrop-blur-md rounded-xl shadow-lg p-6 lg:w-1/3 transform transition-all duration-300 hover:scale-102 hover:shadow-md form-reveal">
            <h2 class="text-xl font-semibold mb-4 text-center icon-geistmono">Smart Check-In</h2>
            
            <div class="text-center">
                <!-- Taille réduite du bouton -->
                <button id="begin-scan-btn" class="w-3/4 bg-blue-600 hover:bg-blue-700 text-white font-bold py-2 px-3 rounded-lg transition-all duration-300 ease-in-out transform hover:scale-102 text-sm icon-geistmono">
                    Scan 🔍
                </button>
            </div>
        
            <div id="error-message" class="mt-4 text-center text-red-500"></div>
        </div>
        
    </main>

    <!-- <footer class="bg-gray-800 p-4 text-center">
        <p>&copy; 2023 TechMart. Tous droits réservés.</p>
    </footer> -->

    <script>
        document.addEventListener('DOMContentLoaded', function() {
            // Initialisation de ScrollReveal avec les animations pour différents éléments

            // Animation pour le header "Zauth."
            ScrollReveal().reveal('header h1', {
                duration: 1000,
                origin: 'left',
                distance: '50px',
                opacity: 0,
                easing: 'ease-in-out',
                delay: 100
            });

            // Animation pour la section vidéo avec un zoom-in et glissement vers le bas
            ScrollReveal().reveal('.video-reveal', {
                duration: 1200,          // Durée de l'animation
                scale: 0.9,              // Zoom initial (90%)
                distance: '30px',        // Glissement vers le haut
                origin: 'bottom',        // Animation qui part du bas
                opacity: 0,              // Apparition progressive
                easing: 'ease-in-out',   // Transition fluide
                delay: 200               // Délai avant le début
            });

            // Animation pour la section formulaire avec un glissement depuis la droite
            ScrollReveal().reveal('.form-reveal', {
                duration: 1200,          // Durée de l'animation
                distance: '60px',        // Distance de glissement depuis la droite
                origin: 'right',         // Animation qui part de la droite
                opacity: 0,              // Apparition progressive
                easing: 'ease-in-out',   // Transition fluide
                delay: 400               // Délai un peu plus long pour que l'effet soit coordonné
            });

            // Appelle les fonctions de remplissage de l'email et de démarrage de la caméra après le chargement de la page
            fillEmailFromUrl();
            startCamera();
        });

        // Fonction pour remplir l'email à partir des paramètres de l'URL
        function fillEmailFromUrl() {
            const urlParams = new URLSearchParams(window.location.search);
            const email = urlParams.get('email');
            if (email) {
                document.getElementById('email').value = decodeURIComponent(email);
            }
        }

        // Fonction pour démarrer la caméra
        async function startCamera() {
            const cameraFeed = document.getElementById('camera-feed');

            if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
                try {
                    const stream = await navigator.mediaDevices.getUserMedia({ video: true });
                    cameraFeed.srcObject = stream;
                } catch (error) {
                    console.error('Erreur lors de l\'accès à la caméra:', error);
                    document.getElementById('error-message').innerText = 'Erreur lors de l\'accès à la caméra. Veuillez vérifier vos permissions.';
                }
            } else {
                document.getElementById('error-message').innerText = 'Votre navigateur ne supporte pas l\'accès à la caméra.';
            }
        }

        // Gestionnaire d'événements pour le bouton "Scan"
        document.getElementById('begin-scan-btn').addEventListener('click', function () {
            const scanEffect = document.getElementById('scan-effect');
            // Ajouter la classe d'animation
            scanEffect.classList.add('scan-active');

            // Supprimer la classe après 3 secondes
            setTimeout(function () {
                scanEffect.classList.remove('scan-active');
            }, 3000);  // L'effet dure 3 secondes

            // Ajoutez ici la logique de scan (par exemple, utiliser une bibliothèque de reconnaissance d'image)
            // Exemple :
            // startScan();
        });
    </script>
</body>
</html>