{
    "timestamp": "2026-04-10 21:02:56.663822",
    "ip_address": "104.164.173.78",
    "http_code": 200,
    "method": "GET",
    "uri": "\/public\/login",
    "response_time_ms": 71.49291038513184,
    "request_headers": {
        "accept": "text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/avif,image\/webp,image\/apng,*\/*;q=0.8,application\/signed-exchange;v=b3;q=0.7",
        "accept-language": "en-US,en;q=0.9",
        "content-length": "0",
        "cookie": "***REDACTED***",
        "host": "shop.yimalabs.com",
        "user-agent": "Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/116.0.0.0 Safari\/537.36",
        "x-country-code": "US",
        "x-autonomous-system": "18779",
        "x-real-ip": "104.164.173.78",
        "x-forwarded-proto": "https",
        "x-forwarded-port": "443",
        "x-ssl": "yes",
        "sec-ch-ua": "Google Chrome\";v=\"111\", \"Not(A:Brand\";v=\"8\", \"Chromium\";v=\"111",
        "sec-fetch-mode": "navigate",
        "x-php-ob-level": "1"
    },
    "request_body": null,
    "response_headers": {
        "cache-control": "max-age=0, must-revalidate, private",
        "date": "Fri, 10 Apr 2026 21:02:56 GMT",
        "content-type": "text\/html; charset=UTF-8",
        "x-debug-token": "782297",
        "x-debug-token-link": "https:\/\/shop.yimalabs.com\/public\/_profiler\/782297",
        "x-robots-tag": "noindex",
        "expires": "Fri, 10 Apr 2026 21:02:56 GMT",
        "set-cookie": "***REDACTED***"
    },
    "response_body": "<!DOCTYPE html>\n<html lang=\"fr\" class=\"h-full\">\n    <head>\n        <meta charset=\"UTF-8\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\n        \n        <title>Connexion - 2AB Group<\/title>\n\n                <link rel=\"icon\" type=\"image\/x-icon\" href=\"\/public\/favicon.ico\">\n        <link rel=\"icon\" type=\"image\/svg+xml\" href=\"\/public\/favicon.svg\">\n        <link rel=\"icon\" type=\"image\/png\" sizes=\"96x96\" href=\"\/public\/favicon-96x96.png\">\n        <link rel=\"apple-touch-icon\" href=\"\/public\/apple-touch-icon.png\">\n        <link rel=\"manifest\" href=\"\/public\/site.webmanifest\">\n\n                <meta name=\"theme-color\" content=\"#1e40af\">\n        <meta name=\"mobile-web-app-capable\" content=\"yes\">\n        <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n        <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\">\n        <meta name=\"apple-mobile-web-app-title\" content=\"2AB Portal\">\n\n                <script>\n            \/\/ Récupérer le thème sauvegardé ou utiliser la préférence système\n            (function() {\n                const savedTheme = localStorage.getItem('theme');\n                const systemPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n                const theme = savedTheme || (systemPrefersDark ? 'dark' : 'light');\n\n                if (theme === 'dark') {\n                    document.documentElement.classList.add('dark');\n                } else {\n                    document.documentElement.classList.remove('dark');\n                }\n            })();\n        <\/script>\n\n                                <link rel=\"stylesheet\" href=\"\/build\/922.2c79845c.css\"><link rel=\"stylesheet\" href=\"\/build\/app-webpack.0bd3b04b.css\">\n        \n                                <script src=\"\/build\/runtime.544b3ba4.js\" defer><\/script><script src=\"\/build\/365.5511127b.js\" defer><\/script><script src=\"\/build\/922.87430409.js\" defer><\/script><script src=\"\/build\/app-webpack.ecb78414.js\" defer><\/script>\n            <\/head>\n    <body class=\"h-full bg-gray-50 dark:bg-gray-900\" data-controller=\"page-loader flowbite\">\n        <div class=\"fixed top-4 right-4 z-50 w-full max-w-sm\" data-turbo-temporary>\n    \n<div id=\"toast-container\" class=\"space-y-3 sm:space-y-4\">\n      <\/div>\n\n<script>\n   document.addEventListener('DOMContentLoaded', function() {\n      var toasts = document.querySelectorAll('#toast-container > div[id^=\"toast-\"]');\n      var isMobile = window.innerWidth < 640;\n\n      toasts.forEach(function(toast) {\n         toast.style.opacity = '0';\n         toast.style.transform = isMobile ? 'translateY(-100%)' : 'translateX(100%)';\n\n         setTimeout(function() {\n            toast.style.transition = 'all 0.3s ease-in-out';\n            toast.style.opacity = '1';\n            toast.style.transform = 'translate(0, 0)';\n         }, 100);\n\n         setTimeout(function() {\n            toast.style.opacity = '0';\n            toast.style.transform = isMobile ? 'translateY(-100%)' : 'translateX(100%)';\n\n            setTimeout(function() {\n               toast.remove();\n            }, 300);\n         }, 5000);\n      });\n   });\n<\/script>\n\n<style>\n   @keyframes slide-in {\n      from { opacity: 0; transform: translateX(100%); }\n      to { opacity: 1; transform: translateX(0); }\n   }\n\n   @keyframes slide-in-top {\n      from { opacity: 0; transform: translateY(-100%); }\n      to { opacity: 1; transform: translateY(0); }\n   }\n\n   @media (max-width: 639px) {\n      .animate-slide-in {\n         animation: slide-in-top 0.3s ease-in-out;\n      }\n   }\n\n   @media (min-width: 640px) {\n      .animate-slide-in {\n         animation: slide-in 0.3s ease-in-out;\n      }\n   }\n<\/style>\n<\/div>\n\n<div class=\"min-h-screen flex items-center justify-center px-4 sm:px-6 lg:px-8 dark:bg-gray-900\">\n    <div class=\"max-w-md w-full\">\n        <div class=\"bg-white dark:bg-gray-800 rounded-xl shadow-2xl overflow-hidden\">\n            <div class=\"px-8 pt-8 pb-6\">\n                <div>\n        <div class=\"text-center mb-10\">\n        <div class=\"flex justify-center mb-6\">\n            <img src=\"\/public\/logo.png\" alt=\"2AB Group Logo\" class=\"h-24 w-auto\">\n        <\/div>\n        <h2 class=\"text-3xl font-extrabold text-gray-900 dark:text-white\">\n            Bienvenue\n        <\/h2>\n        <p class=\"mt-2 text-sm text-gray-600 dark:text-gray-400\">\n            Connectez-vous à votre espace 2AB Group\n        <\/p>\n    <\/div>\n\n    \n    <form method=\"post\" action=\"\/public\/login\" class=\"space-y-6\" data-controller=\"login-form\" data-action=\"submit->login-form#handleSubmit\">\n        <div>\n            <label for=\"email\" class=\"block text-sm font-semibold text-gray-900 dark:text-white mb-2\">\n                Adresse email\n            <\/label>\n            <div class=\"relative\">\n                <div class=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n                    <svg class=\"h-5 w-5 text-gray-400 dark:text-gray-500\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M16 12a4 4 0 10-8 0 4 4 0 008 0zm0 0v1.5a2.5 2.5 0 005 0V12a9 9 0 10-9 9m4.5-1.206a8.959 8.959 0 01-4.5 1.207\"\/>\n                    <\/svg>\n                <\/div>\n                <input\n                    type=\"email\"\n                    id=\"email\"\n                    name=\"email\"\n                    value=\"\"\n                    required\n                    autofocus\n                    autocomplete=\"email\"\n                    class=\"appearance-none block w-full pl-10 px-4 py-3.5 border-2 border-gray-300 dark:border-gray-600 rounded-xl placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent bg-white dark:bg-gray-700 dark:text-white transition-all duration-200\"\n                    placeholder=\"votre@email.com\">\n            <\/div>\n        <\/div>\n\n        <div>\n            <label for=\"password\" class=\"block text-sm font-semibold text-gray-900 dark:text-white mb-2\">\n                Mot de passe\n            <\/label>\n            <div class=\"relative\">\n                <div class=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n                    <svg class=\"h-5 w-5 text-gray-400 dark:text-gray-500\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z\"\/>\n                    <\/svg>\n                <\/div>\n                <input\n                    type=\"password\"\n                    id=\"password\"\n                    name=\"password\"\n                    required\n                    autocomplete=\"current-password\"\n                    data-login-form-target=\"password\"\n                    class=\"appearance-none block w-full pl-10 pr-12 px-4 py-3.5 border-2 border-gray-300 dark:border-gray-600 rounded-xl placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent bg-white dark:bg-gray-700 dark:text-white transition-all duration-200\"\n                    placeholder=\"••••••••\">\n                <button\n                    type=\"button\"\n                    data-action=\"click->login-form#togglePassword\"\n                    class=\"absolute inset-y-0 right-0 pr-3 flex items-center text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300 focus:outline-none transition-colors duration-200\">\n                    <span data-login-form-target=\"toggleIcon\">\n                        <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\/>\n                            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\"\/>\n                        <\/svg>\n                    <\/span>\n                <\/button>\n            <\/div>\n        <\/div>\n\n        <div class=\"flex items-center justify-between\">\n            <div class=\"flex items-center\">\n                <input\n                    type=\"checkbox\"\n                    id=\"_remember_me\"\n                    name=\"_remember_me\"\n                    class=\"h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 dark:border-gray-600 dark:bg-gray-700 rounded cursor-pointer transition-colors duration-200\">\n                <label for=\"_remember_me\" class=\"ml-2 block text-sm text-gray-700 dark:text-gray-300 cursor-pointer hover:text-gray-900 dark:hover:text-white transition-colors duration-200\">\n                    Se souvenir de moi\n                <\/label>\n            <\/div>\n\n            <div class=\"text-sm\">\n                <a href=\"\/public\/password-reset\/request\" class=\"font-medium text-blue-600 dark:text-blue-400 hover:text-blue-700 dark:hover:text-blue-300 transition-colors duration-200\">\n                    Mot de passe oublié ?\n                <\/a>\n            <\/div>\n        <\/div>\n\n        <input type=\"hidden\" name=\"_csrf_token\" value=\"4f8b6162edfa4c0.7vBkfYuklPC8_h7Fhi4Qc5vzLfd96Fv_ebXeLfUQ4yE.3JoBK-774KrtnHCi9kN5KdSsFIZM2DPMIMyEcoBb02-HozExpungvOqOKg\">\n\n        <div class=\"pt-2\">\n            <button\n                type=\"submit\"\n                data-login-form-target=\"submit\"\n                class=\"group relative w-full flex justify-center items-center py-3.5 px-4 rounded-xl text-base font-semibold text-white bg-gradient-to-r from-blue-600 to-blue-700 hover:from-blue-700 hover:to-blue-800 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:focus:ring-offset-gray-800 shadow-lg hover:shadow-xl transition-all duration-300 ease-in-out transform hover:-translate-y-0.5 active:translate-y-0\">\n                <span class=\"absolute left-0 inset-y-0 flex items-center pl-3\">\n                    <svg class=\"h-5 w-5 text-blue-400 group-hover:text-blue-300 transition-colors duration-200\" fill=\"none\" stroke=\"currentColor\" viewB...[TRUNCATED]"
}
