2025-11-16 19:41:07 +01:00
<!doctype html>
2025-11-16 21:57:24 +01:00
<html lang=" {{ app .request .locale }} ">
2025-11-16 19:41:07 +01:00
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>E-Cosplay | {% block title %} Accueil {% endblock %} </title>
<meta name="description" content=" {% block meta_description '' %} ">
{# OPEN GRAPH / TWITTER CARD / SEO META #}
<meta property="og:type" content="website">
2025-11-18 09:24:19 +01:00
<meta property="og:url"
2025-11-18 20:48:34 +01:00
content=" {{ url ( app .request .attributes .get ( '_route' , 'app_home' ) , app .request .attributes .get ( '_route_params' , [ ] ) ) }} ">
2025-11-16 19:41:07 +01:00
<meta property="og:title" content="E-Cosplay | {{ block ( 'title' ) }} ">
<meta property="og:description" content=" {{ block ( 'meta_description' ) }} ">
<meta property="og:image" content=" {{ asset ( 'assets/images/logo.jpg' ) | imagine_filter ( 'webp' ) }} ">
<meta name="twitter:card" content="summary_large_image">
2025-11-18 09:24:19 +01:00
<meta name="twitter:url"
2025-11-18 20:48:34 +01:00
content=" {{ url ( app .request .attributes .get ( '_route' , 'app_home' ) , app .request .attributes .get ( '_route_params' , [ ] ) ) }} ">
2025-11-16 19:41:07 +01:00
<meta name="twitter:title" content="E-Cosplay | {{ block ( 'title' ) }} ">
<meta name="twitter:description" content=" {{ block ( 'meta_description' ) }} ">
<meta name="twitter:image" content=" {{ asset ( 'assets/images/logo.jpg' ) | imagine_filter ( 'webp' ) }} ">
<meta name="twitter:site" content="@E_Cosplay_asso">
<meta name="author" content="Association E-Cosplay">
<meta name="keywords" content="cosplay, concours cosplay, organisation, événement, geek">
2025-11-21 22:13:17 +01:00
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
2025-11-16 19:41:07 +01:00
{% if no_index is defined %}
<meta name="robots" content="noindex, nofollow">
{% endif %}
{# FAVICONS & Manifest #}
2025-11-18 09:24:19 +01:00
<link rel="icon" type="image/png" href=" {{ asset ( 'favicon/favicon-96x96.png' ) }} " sizes="96x96"/>
<link rel="icon" type="image/svg+xml" href=" {{ asset ( 'favicon/favicon.svg' ) }} "/>
<link rel="shortcut icon" href=" {{ asset ( 'favicon/favicon.ico' ) }} "/>
<link rel="apple-touch-icon" sizes="180x180" href=" {{ asset ( 'favicon/apple-touch-icon.png' ) }} "/>
<meta name="apple-mobile-web-app-title" content="E-Cosplay"/>
<link rel="manifest" href=" {{ asset ( 'site.webmanifest' ) }} "/>
2025-11-21 19:53:47 +01:00
2025-11-18 09:24:19 +01:00
<meta name="google-site-verification" content="D6YvgLKg4oj2Ksk_cYhO3fijbmxZWib7wqqHTJyfftQ"/>
<meta name="env" content=" {{ app .environment }} ">
2025-11-16 19:41:07 +01:00
{% block canonical_url %} {% endblock %}
{# SCHÉMAS JSON-LD #}
<script type="application/ld+json">
{
2025-11-18 09:24:19 +01:00
"@context": "https://schema.org",
"@type": "WebSite",
"name": "E-Cosplay",
"url": " {{ app .request .schemeAndHttpHost }} "
}
</script>
<script type="application/ld+json">
2025-11-16 19:41:07 +01:00
{
2025-11-18 09:24:19 +01:00
"@context": "https://schema.org",
2025-11-16 19:41:07 +01:00
"@type": "Organization",
"name": "Association E-Cosplay",
"url": " {{ app .request .schemeAndHttpHost }} ",
"logo": " {{ asset ( 'assets/images/logo.jpg' ) | imagine_filter ( 'webp' ) }} ",
"sameAs": [
"https://www.facebook.com/assocationecosplay",
"https://www.instagram.com/asso_ecosplay/"
],
"address": {
"@type": "PostalAddress",
"streetAddress": "42 rue de Saint-Quentin",
"addressLocality": "Beautor",
"postalCode": "02800",
2025-11-18 09:10:59 +01:00
"addressCountry": "FR"
2025-11-18 09:24:19 +01:00
}
}
</script>
<script type="application/ld+json">
2025-11-16 19:41:07 +01:00
{
2025-11-18 09:24:19 +01:00
"@context": "https://schema.org/",
"@type": "Person",
"name": "ShokoCosplay",
"image": " {{ asset ( 'assets/images/shoko.jpg' ) | imagine_filter ( 'webp' ) }} ",
"jobTitle": "Président",
"sameAs": [
"https://www.instagram.com/cosplay_shoko/",
"https://www.tiktok.com/@cosshoko?lang=fr",
"https://www.facebook.com/CosplayShoko"
],
"worksFor": {
"@type": "Organization",
"name": "E-Cosplay"
}
}
</script>
<script type="application/ld+json">
2025-11-16 19:41:07 +01:00
{
2025-11-18 09:24:19 +01:00
"@context": "https://schema.org/",
"@type": "Person",
"name": "Marta Gator",
"image": " {{ asset ( 'assets/images/marta.jpg' ) | imagine_filter ( 'webp' ) }} ",
"jobTitle": "Secrétaire",
"sameAs": [
"https://www.facebook.com/profile.php?id=100081002010111",
"https://www.tiktok.com/@marta_gator",
"https://www.instagram.com/marta_gator/"
],
"worksFor": {
"@type": "Organization",
"name": "E-Cosplay"
}
2025-11-16 19:41:07 +01:00
}
</script>
{% block breadcrumb_schema %} {% endblock %}
{% block stylesheets %} {% endblock %}
2025-11-17 09:37:02 +01:00
<script type="text/javascript" src="/ts.js" async></script>
2025-11-16 19:41:07 +01:00
{{ vite_asset ( 'app.js' , [ ] ) }}
2025-11-17 10:51:25 +01:00
{% if app .environment == "prod" %}
2025-11-21 20:53:31 +01:00
<script defer src="https://datas.e-cosplay.fr/vs.js"
data-website-id="b929d372-fbea-403e-9ae2-781433828787"></script> {% endif %}
2025-12-24 23:59:23 +01:00
<script src="/sc.js" crossorigin="anonymous"></script>
<script>
Sentry.onLoad(function() {
Sentry.init( {
tunnel:'/tunnel',
// Tracing
tracesSampleRate: 1.0, // Capture 100% of the transactions
// Session Replay
replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.
replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.
});
});
</script>
2025-11-16 19:41:07 +01:00
</head>
{# Le corps aura un fond gris clair pour correspondre au fond du logo #}
<body class="flex flex-col min-h-screen bg-gray-100">
2025-11-16 21:57:24 +01:00
{% set menu_links = [
{ 'name': 'Accueil'|trans, 'route': 'app_home' },
{ 'name': 'Qui sommes-nous'|trans, 'route': 'app_about' },
{ 'name': 'Nos membres'|trans, 'route': 'app_members' },
2025-12-03 17:35:31 +01:00
{ 'name': 'epage_cosplay'|trans, 'route': 'app_pages' },
2025-11-16 21:57:24 +01:00
{ 'name': 'Nos événements'|trans, 'route': 'app_events' },
2025-11-16 22:32:06 +01:00
{ 'name': 'Boutiques'|trans, 'route': 'app_shop' },
2025-11-23 22:57:58 +01:00
{ 'name': 'Documents'|trans, 'route': 'app_doc' },
2025-11-18 20:48:34 +01:00
{ 'name': 'Dons'|trans, 'route': 'app_dons' },
2025-12-24 23:59:23 +01:00
{ 'name': 'Nous rejoindre'|trans, 'route': 'app_recruit' },
2025-11-16 21:57:24 +01:00
{ 'name': 'Contact'|trans, 'route': 'app_contact' }
2025-11-16 19:41:07 +01:00
] %}
<header class="bg-white shadow-md sticky top-0 z-40">
2025-12-03 17:35:31 +01:00
<nav class="mx-auto px-4 sm:px-6 lg:px-8">
2025-11-16 19:41:07 +01:00
<div class="flex justify-between items-center h-16">
{# LOGO / NOM DU SITE #}
2025-11-21 22:07:41 +01:00
2025-11-16 19:41:07 +01:00
<div class="flex-shrink-0 flex items-center">
2025-11-21 22:07:41 +01:00
2025-11-16 19:41:07 +01:00
<a href=" {{ path ( 'app_home' ) }} " class="flex items-center space-x-2 text-xl font-bold text-gray-900">
2025-11-21 22:08:56 +01:00
<img class="h-8 w-auto" width="57px" height="32px" src=" {{ asset ( 'assets/images/logo.jpg' ) | imagine_filter ( 'logo' ) }} "
2025-11-18 09:24:19 +01:00
alt="E-Cosplay Logo">
2025-11-16 19:41:07 +01:00
{# Le texte du nom du site peut rester en noir pour la lisibilité #}
<span class="text-gray-900">E-Cosplay</span>
</a>
</div>
{# LIENS DE NAVIGATION (Desktop) #}
2025-11-16 20:08:49 +01:00
<div class="hidden md:flex md:space-x-4 items-center">
2025-11-16 21:57:24 +01:00
{# Liens de navigation #}
2025-11-16 19:41:07 +01:00
<div class="hidden md:flex md:space-x-1">
2025-11-16 21:57:24 +01:00
{% for link in menu_links %}
2025-11-16 19:41:07 +01:00
{% set is_active = ( app .request .get ( '_route' ) == link .route ) %}
<a href=" {{ path ( link .route ) }} "
2025-11-21 21:43:28 +01:00
class=" {% if is_active %} bg-gray-100 text-red-800 {% else %} text-gray-700 hover:bg-gray-100 hover:text-red-800 {% endif %} px-3 py-2 rounded-md text-sm font-medium">
2025-11-16 19:41:07 +01:00
{{ link .name }}
</a>
{% endfor %}
</div>
2025-11-16 21:57:24 +01:00
{# SÉLECTEUR DE LANGUE (Desktop) #}
<div class="flex items-center space-x-2 border-l border-gray-200 pl-4">
2025-11-18 20:48:34 +01:00
{% set current_route = app .request .attributes .get ( '_route' , 'app_home' ) %}
{% set current_params = app .request .attributes .get ( '_route_params' , [ ] ) %}
2025-11-16 21:57:24 +01:00
{# Fonction pour générer le chemin avec le paramètre 'lang' (doit être définie dans une extension Twig) #}
{# En attendant, nous générons l'URL manuellement #}
{% set current_query = app .request .query .all %}
2025-11-21 09:58:27 +01:00
{% for lang in [ 'fr' , 'en' , 'cn' ] %}
2025-11-16 21:57:24 +01:00
{% set is_active_lang = ( app .request .locale == lang ) %}
{% set lang_params = current_params | merge ( current_query ) | merge ( { 'lang' : lang } ) %}
{# Générer l'URL en conservant les paramètres existants + le paramètre 'lang' #}
{% set lang_url = path ( current_route , lang_params ) %}
<a href=" {{ lang_url }} "
class="text-xs font-bold uppercase transition duration-150 ease-in-out {% if is_active_lang %} text-red-600 border-b-2 border-red-600 {% else %} text-gray-500 hover:text-red-600 {% endif %} ">
{{ lang }}
</a>
{% endfor %}
</div>
2025-11-16 20:08:49 +01:00
{# BOUTON PANIER (Desktop) #}
2025-11-18 09:24:19 +01:00
<button id="openCartDesktop" type="button"
class="relative p-2 text-gray-700 hover:text-red-600 rounded-full transition duration-150 ease-in-out">
2025-11-16 21:57:24 +01:00
<span class="sr-only"> {{ 'open_cart_sr' | trans }} </span>
2025-11-16 20:08:49 +01:00
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2025-11-18 09:24:19 +01:00
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/>
2025-11-16 20:08:49 +01:00
</svg>
{# Compteur Panier - Initialisé à 0 #}
2025-11-18 09:24:19 +01:00
<span id="cartCountDesktop"
class="absolute top-0 right-0 inline-flex items-center justify-center px-2 py-1 text-xs font-bold leading-none text-white transform translate-x-1/2 -translate-y-1/2 bg-red-600 rounded-full">
2025-11-16 20:08:49 +01:00
0
</span>
</button>
2025-11-17 13:12:56 +01:00
{# NOUVEAU: COMPTE / MENU DÉROULANT (Desktop) #}
<div class="relative">
2025-11-18 09:24:19 +01:00
<button id="userMenuButtonDesktop" type="button"
class="p-2 text-gray-700 hover:text-red-600 rounded-full transition duration-150 ease-in-out"
aria-expanded="false" aria-haspopup="true">
2025-11-17 13:12:56 +01:00
<span class="sr-only"> {{ 'open_user_menu_sr' | trans }} </span>
{# Icône de l'utilisateur (Heroicons 'User') #}
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2025-11-18 09:24:19 +01:00
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"/>
2025-11-17 13:12:56 +01:00
</svg>
</button>
{# Menu déroulant (Masqué par défaut avec 'hidden') #}
2025-11-18 09:24:19 +01:00
<div id="userMenuDesktop"
class="origin-top-right absolute right-0 mt-2 w-48 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 hidden"
role="menu" aria-orientation="vertical" aria-labelledby="user-menu-button">
2025-11-17 13:12:56 +01:00
<div class="py-1" role="none">
{% if is_granted ( 'ROLE_USER' ) %}
{# Afficher le nom de l'utilisateur et la déconnexion si connecté #}
2025-11-18 09:24:19 +01:00
<div
class="block px-4 py-2 text-sm text-gray-900 font-semibold border-b border-gray-100">
2025-11-17 13:12:56 +01:00
{{ 'logged_in_as' | trans }} {{ app .user .username | default ( 'Compte' ) }}
</div>
2025-11-18 09:24:19 +01:00
<a href=" {{ path ( 'admin_dashboard' ) }} "
class="block px-4 py-2 text-sm text-cyan-600 hover:bg-gray-100" role="menuitem"
tabindex="-1">
2025-11-17 15:01:38 +01:00
{{ 'logged_admin' | trans }}
</a>
2025-11-23 17:06:10 +01:00
<a href=" {{ path ( 'app_logout' ) }} "
class="block px-4 py-2 text-sm text-red-600 hover:bg-gray-100" role="menuitem"
tabindex="-1">
{{ 'logout_link' | trans }}
</a>
2025-11-17 13:12:56 +01:00
{% else %}
{# Afficher la connexion si non connecté #}
2025-11-18 09:24:19 +01:00
<a href=" {{ path ( 'app_login' ) }} "
class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100" role="menuitem"
tabindex="-1" id="user-menu-item-0">
2025-11-17 13:12:56 +01:00
{{ 'login_link' | trans }}
</a>
{% endif %}
</div>
</div>
</div>
2025-11-16 19:41:07 +01:00
</div>
2025-11-17 13:12:56 +01:00
{# BOUTONS MOBILE (Burger Icon, Panier, Langue, et Compte) #}
2025-11-16 20:08:49 +01:00
<div class="md:hidden flex items-center space-x-2">
2025-11-17 13:12:56 +01:00
{# NOUVEAU: COMPTE / MENU DÉROULANT (Mobile) #}
<div class="relative">
2025-11-18 09:24:19 +01:00
<button id="userMenuButtonMobile" type="button"
class="p-2 text-gray-700 hover:text-red-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 rounded-md"
aria-expanded="false" aria-haspopup="true">
2025-11-17 13:12:56 +01:00
<span class="sr-only"> {{ 'open_user_menu_sr' | trans }} </span>
{# Icône de l'utilisateur (Heroicons 'User') #}
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2025-11-18 09:24:19 +01:00
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"/>
2025-11-17 13:12:56 +01:00
</svg>
</button>
{# Le menu déroulant Mobile peut être affiché via le JS global si l'espace le permet #}
2025-11-18 09:24:19 +01:00
<div id="userMenuMobile"
class="origin-top-right absolute right-0 mt-2 w-48 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 hidden"
role="menu" aria-orientation="vertical" aria-labelledby="user-menu-button-mobile">
2025-11-17 13:12:56 +01:00
<div class="py-1" role="none">
{% if is_granted ( 'ROLE_USER' ) %}
2025-11-18 09:24:19 +01:00
<div
class="block px-4 py-2 text-sm text-gray-900 font-semibold border-b border-gray-100">
2025-11-17 13:12:56 +01:00
{{ 'logged_in_as' | trans }} {{ app .user .username | default ( 'Compte' ) }}
</div>
2025-11-22 22:36:13 +01:00
2025-11-17 13:12:56 +01:00
{% else %}
2025-11-18 09:24:19 +01:00
<a href=" {{ path ( 'app_login' ) }} "
class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100" role="menuitem"
tabindex="-1">
2025-11-17 13:12:56 +01:00
{{ 'login_link' | trans }}
</a>
{% endif %}
</div>
</div>
</div>
2025-11-16 21:57:24 +01:00
{# SÉLECTEUR DE LANGUE (Mobile - Compact) #}
<div class="flex items-center space-x-2">
2025-11-18 20:48:34 +01:00
{% set current_route = app .request .attributes .get ( '_route' , 'app_home' ) %}
{% set current_params = app .request .attributes .get ( '_route_params' , [ ] ) %}
2025-11-16 21:57:24 +01:00
{% set current_query = app .request .query .all %}
2025-11-21 10:02:00 +01:00
{% for lang in [ 'fr' , 'en' , 'cn' ] %}
2025-11-16 21:57:24 +01:00
{% set is_active_lang = ( app .request .locale == lang ) %}
{% set lang_params = current_params | merge ( current_query ) | merge ( { 'lang' : lang } ) %}
{% set lang_url = path ( current_route , lang_params ) %}
<a href=" {{ lang_url }} "
class="text-xs font-bold uppercase transition duration-150 ease-in-out {% if is_active_lang %} text-red-600 border-b-2 border-red-600 {% else %} text-gray-500 hover:text-red-600 {% endif %} ">
{{ lang }}
</a>
{% endfor %}
</div>
2025-11-16 20:08:49 +01:00
{# BOUTON PANIER (Mobile) #}
2025-11-18 09:24:19 +01:00
<button id="openCartMobile" type="button"
class="relative p-2 text-gray-700 hover:text-red-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 rounded-md">
2025-11-16 21:57:24 +01:00
<span class="sr-only"> {{ 'open_cart_sr' | trans }} </span>
2025-11-16 20:08:49 +01:00
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2025-11-18 09:24:19 +01:00
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/>
2025-11-16 20:08:49 +01:00
</svg>
{# Compteur Panier - Initialisé à 0 #}
2025-11-18 09:24:19 +01:00
<span id="cartCountMobile"
class="absolute top-0 right-0 inline-flex items-center justify-center px-2 py-1 text-xs font-bold leading-none text-white transform translate-x-1/2 -translate-y-1/2 bg-red-600 rounded-full">
2025-11-16 20:08:49 +01:00
0
</span>
</button>
{# BOUTON MOBILE (Burger Icon) #}
2025-11-18 09:24:19 +01:00
<button id="mobileMenuButton" type="button"
class="text-red-500 hover:text-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 p-2 rounded-md"
aria-controls="mobile-menu" aria-expanded="false">
2025-11-16 21:57:24 +01:00
<span class="sr-only"> {{ 'open_main_menu_sr' | trans }} </span>
2025-11-18 09:24:19 +01:00
<svg class="h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M4 6h16M4 12h16M4 18h16"/>
2025-11-16 19:41:07 +01:00
</svg>
</button>
</div>
</div>
</nav>
{# MENU MOBILE (Contenu caché) #}
2025-11-16 20:08:49 +01:00
<div class="md:hidden hidden" id="mobile-menu">
2025-11-16 19:41:07 +01:00
<div class="px-2 pt-2 pb-3 space-y-1 sm:px-3">
2025-11-16 21:57:24 +01:00
{% for link in menu_links %}
2025-11-16 19:41:07 +01:00
{% set is_active = ( app .request .get ( '_route' ) == link .route ) %}
<a href=" {{ path ( link .route ) }} "
2025-11-16 20:08:49 +01:00
class="block {% if is_active %} bg-gray-100 text-red-600 {% else %} text-gray-700 hover:bg-gray-100 hover:text-red-600 {% endif %} px-3 py-2 rounded-md text-base font-medium">
2025-11-16 19:41:07 +01:00
{{ link .name }}
</a>
{% endfor %}
</div>
</div>
</header>
<main role="main" class="flex-grow">
2025-11-16 21:57:24 +01:00
{% block body %} {% endblock %}
2025-11-16 19:41:07 +01:00
</main>
2025-11-16 20:08:49 +01:00
{# ========================================================== #}
{# PANIER LATÉRAL (OFF-CANVAS CART) #}
{# Utilise Tailwind pour les transitions et l'accessibilité #}
{# Le panier sera masqué par défaut (translate-x-full) #}
2025-11-18 09:24:19 +01:00
<div id="cartSidebar"
class="fixed top-0 right-0 w-full md:w-96 h-full bg-white shadow-xl transform translate-x-full transition-transform duration-300 ease-in-out z-50 flex flex-col">
2025-11-16 20:08:49 +01:00
{# Entête du panier #}
<div class="p-4 border-b border-gray-200 flex justify-between items-center">
2025-11-16 21:57:24 +01:00
<h2 class="text-xl font-bold text-gray-900"> {{ 'your_cart' | trans }} </h2>
2025-11-18 09:24:19 +01:00
<button id="closeCartButton" type="button"
class="text-gray-400 hover:text-gray-600 p-2 rounded-full transition duration-150 ease-in-out">
2025-11-16 21:57:24 +01:00
<span class="sr-only"> {{ 'close_cart_sr' | trans }} </span>
2025-11-16 20:08:49 +01:00
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2025-11-18 09:24:19 +01:00
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
2025-11-16 20:08:49 +01:00
</svg>
</button>
</div>
{# Contenu du Panier (Défilement) #}
<div id="cartItemsContainer" class="flex-grow overflow-y-auto p-4 space-y-4">
{# Espace pour les articles du panier - Contenu mocké pour l'exemple #}
<div class="text-center text-gray-500 py-12">
<svg class="mx-auto h-12 w-12 text-gray-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2025-11-18 09:24:19 +01:00
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/>
2025-11-16 20:08:49 +01:00
</svg>
2025-11-16 21:57:24 +01:00
<p class="mt-1"> {{ 'cart_empty' | trans }} </p>
2025-11-16 20:08:49 +01:00
</div>
</div>
{# Pied de page du panier (Total et Paiement) #}
<div class="p-4 border-t border-gray-200">
<div class="flex justify-between font-bold text-lg mb-4">
2025-11-16 21:57:24 +01:00
<span> {{ 'subtotal_label' | trans }} :</span>
2025-11-16 20:08:49 +01:00
<span id="cartSubtotal">0.00 €</span>
</div>
2025-11-18 09:24:19 +01:00
<a href=""
class="w-full block text-center bg-red-600 text-white py-3 rounded-md hover:bg-red-700 transition duration-150 ease-in-out font-semibold">
2025-11-16 21:57:24 +01:00
{{ 'checkout_button' | trans }}
2025-11-16 20:08:49 +01:00
</a>
2025-11-16 21:57:24 +01:00
<p class="text-xs text-gray-500 text-center mt-2"> {{ 'shipping_disclaimer' | trans }} </p>
2025-11-16 20:08:49 +01:00
</div>
</div>
{# FONDU NOIR (Backdrop) - S'affiche lorsque le panier est ouvert #}
2025-11-18 09:24:19 +01:00
<div id="cartBackdrop" class="fixed inset-0 bg-op z-40 hidden transition-opacity duration-300 ease-in-out"
aria-hidden="true"></div>
2025-11-16 20:08:49 +01:00
{# ========================================================== #}
2025-11-16 19:41:07 +01:00
<footer class="bg-[#FABF04] text-gray-900 border-t border-red-600">
<div class="max-w-7xl mx-auto py-8 px-4 sm:px-6 lg:px-8">
{# BLOC DE CONTACT ET RÉSEAUX (Utilise le block footer pour l'emplacement) #}
{% block footer %}
<div class="grid grid-cols-1 md:grid-cols-3 gap-8 pb-6 mb-4 border-b border-gray-600">
{# 1. Coordonnées #}
<div>
2025-11-16 21:57:24 +01:00
<h3 class="text-lg font-semibold mb-3 text-gray-900"> {{ 'footer_contact_title' | trans }} </h3>
2025-11-16 19:41:07 +01:00
<p class="text-sm text-gray-700">
42 rue de Saint-Quentin<br>
02800 Beautor, FRANCE
</p>
<p class="text-sm text-gray-700 mt-2">
2025-11-18 09:24:19 +01:00
<a href="mailto:contact@e-cosplay.fr"
class="hover:text-red-600 transition duration-150 ease-in-out">contact@e-cosplay.fr</a>
2025-11-16 19:41:07 +01:00
</p>
</div>
{# 2. Réseaux Sociaux #}
2025-12-24 23:59:23 +01:00
<div style="height: 210px">
2025-11-16 21:57:24 +01:00
<h3 class="text-lg font-semibold mb-3 text-gray-900"> {{ 'footer_follow_us_title' | trans }} </h3>
2025-11-16 19:41:07 +01:00
<div class="flex space-x-4">
2025-11-18 09:24:19 +01:00
<a href="https://www.facebook.com/assocationecosplay" target="_blank" rel="noopener noreferrer"
class="text-gray-700 hover:text-red-600 transition duration-150 ease-in-out"
aria-label="Facebook">
2025-11-21 19:53:47 +01:00
<img src=" {{ asset ( 'assets/social/facebook.svg' ) }} " alt="logo instagram" width="30" height="30">
2025-11-16 19:41:07 +01:00
</a>
2025-11-18 09:24:19 +01:00
<a href="https://www.instagram.com/asso_ecosplay/" target="_blank" rel="noopener noreferrer"
class="text-gray-700 hover:text-red-600 transition duration-150 ease-in-out"
aria-label="Instagram">
2025-11-21 19:53:47 +01:00
<img src=" {{ asset ( 'assets/social/instagram.svg' ) }} " alt="logo instagram" width="30" height="30">
2025-11-16 19:41:07 +01:00
</a>
</div>
2025-11-24 16:59:42 +01:00
<h3 class="text-lg font-semibold mb-3 text-gray-900 py-1"> {{ 'footer_action_title' | trans }} </h3>
2025-11-24 20:14:49 +01:00
{% if isMobile ( ) %}
{% set stripeWidth = "100%" %}
{% set stripeHeight = "60" %}
{% else %}
{% set stripeWidth = "400" %}
{% set stripeHeight = "40" %}
{% endif %}
<iframe width=" {{ stripeWidth }} " height=" {{ stripeHeight }} " style="border:0;" src="https://climate.stripe.com/badge/qrsnOf?theme=light&size=small&locale= {{ app .request .locale }} - {{ app .request .locale | upper }} "></iframe>
<iframe width=" {{ stripeWidth }} " height=" {{ stripeHeight }} " style="border:0;margin-top: 0.5rem" src="https://climate.stripe.com/badge/7oAh3V?theme=light&size=small&locale= {{ app .request .locale }} - {{ app .request .locale | upper }} "></iframe>
2025-11-16 19:41:07 +01:00
</div>
2025-11-16 21:57:24 +01:00
{# 3. Bloc Personnalisable (E-Cosplay mission) #}
2025-11-16 19:41:07 +01:00
<div>
<h3 class="text-lg font-semibold mb-3 text-gray-900">E-Cosplay</h3>
2025-11-16 21:57:24 +01:00
{{ 'footer_mission_description' | trans | raw }}
2025-11-18 09:24:19 +01:00
<div class="trustpilot-widget" data-locale="fr-FR" data-template-id="56278e9abfbbba0bdcd568bc"
data-businessunit-id="687e8cb6a48c5eab447ca0f8" data-style-height="52px"
data-style-width="100%" data-token="797aa44d-2b0e-46f8-bfe9-fe0a75cbe557">
2025-11-17 09:37:02 +01:00
<a href="https://fr.trustpilot.com/review/e-cosplay.fr" target="_blank" rel="noopener">Trustpilot</a>
</div>
2025-11-16 21:57:24 +01:00
</div>
2025-11-16 19:41:07 +01:00
</div>
{% endblock %}
{# LIGNE DE COPYRIGHT ET MENTIONS LÉGALES (Bas du footer) #}
<div class="md:flex md:justify-between md:items-center">
{# Copyright et Mention Légale Association #}
<div class="text-center md:text-left mb-4 md:mb-0">
<p class="text-sm text-gray-700">
2025-11-16 21:57:24 +01:00
© {{ "now" | date ( "Y" ) }} E-Cosplay. {{ 'all_rights_reserved' | trans }} .
2025-11-16 19:41:07 +01:00
</p>
<p class="text-xs text-gray-600 mt-1">
2025-11-17 09:26:07 +01:00
{{ 'association_status' | trans }} - RNA N°W022006988
2025-11-16 19:41:07 +01:00
</p>
2025-11-24 20:14:49 +01:00
<p class="text-xs text-gray-600 mt-1">
{{ 'footer_realise' | trans }} <a target="_blank" href="https://www.siteconsei.fr">SARL SITECONSEIL</a>
</p>
2025-11-16 19:41:07 +01:00
</div>
{# Liens Légaux #}
2025-11-21 23:09:34 +01:00
{# Liens Légaux - Fixé pour l'accessibilité tactile (Touch Target) #}
<div class="flex flex-wrap justify-center md:justify-end gap-x-6 gap-y-2 text-sm font-medium">
2025-11-18 09:24:19 +01:00
<a href=" {{ path ( 'app_legal' ) }} "
2025-11-21 23:09:34 +01:00
class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out p-3 rounded-lg hover:bg-gray-100">
{{ 'legal_notice_link' | trans }}
</a>
2025-11-18 09:24:19 +01:00
<a href=" {{ path ( 'app_cookies' ) }} "
2025-11-21 23:09:34 +01:00
class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out p-3 rounded-lg hover:bg-gray-100">
{{ 'cookie_policy_link' | trans }}
</a>
2025-11-18 09:24:19 +01:00
<a href=" {{ path ( 'app_hosting' ) }} "
2025-11-21 23:09:34 +01:00
class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out p-3 rounded-lg hover:bg-gray-100">
{{ 'hosting_link' | trans }}
</a>
2025-11-18 09:24:19 +01:00
<a href=" {{ path ( 'app_rgpd' ) }} "
2025-11-21 23:09:34 +01:00
class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out p-3 rounded-lg hover:bg-gray-100">
{{ 'rgpd_policy_link' | trans }}
</a>
2025-11-18 09:24:19 +01:00
<a href=" {{ path ( 'app_cgu' ) }} "
2025-11-21 23:09:34 +01:00
class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out p-3 rounded-lg hover:bg-gray-100">
{{ 'cgu_link' | trans }}
</a>
2025-11-18 09:24:19 +01:00
<a href=" {{ path ( 'app_cgv' ) }} "
2025-11-21 23:09:34 +01:00
class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out p-3 rounded-lg hover:bg-gray-100">
{{ 'cgv_link' | trans }}
</a>
2025-11-16 19:41:07 +01:00
</div>
</div>
</div>
</footer>
2025-11-21 21:26:16 +01:00
2025-11-16 19:41:07 +01:00
2025-11-17 13:12:56 +01:00
2025-11-16 19:41:07 +01:00
</body>
</html>