✨ feat(templates): Ajoute des schémas JSON-LD pour SEO et améliore l'accessibilité.
This commit is contained in:
@@ -40,7 +40,9 @@
|
||||
"name": "dystopix_photography"
|
||||
},
|
||||
"copyrightNotice": "dystopix_photography"
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org/",
|
||||
"@type": "ImageObject",
|
||||
@@ -49,9 +51,9 @@
|
||||
"acquireLicensePage": "https://example.com/how-to-use-my-images",
|
||||
"creditText": "https://www.instagram.com/marta_gator/",
|
||||
"creator": {
|
||||
"@type": "Person",
|
||||
"@type": "Person",
|
||||
"name": "Marta Gator"
|
||||
},
|
||||
},
|
||||
"copyrightNotice": "https://www.instagram.com/marta_gator/"
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -9,13 +9,15 @@
|
||||
|
||||
{# OPEN GRAPH / TWITTER CARD / SEO META #}
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="{{ url(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}">
|
||||
<meta property="og:url"
|
||||
content="{{ url(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}">
|
||||
<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">
|
||||
<meta name="twitter:url" content="{{ url(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}">
|
||||
<meta name="twitter:url"
|
||||
content="{{ url(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}">
|
||||
<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') }}">
|
||||
@@ -29,29 +31,31 @@
|
||||
{% endif %}
|
||||
|
||||
{# FAVICONS & Manifest #}
|
||||
<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') }}" />
|
||||
<link rel="stylesheet" href="{{ asset('assets/css/all.min.css') }}" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
||||
<meta name="google-site-verification" content="D6YvgLKg4oj2Ksk_cYhO3fijbmxZWib7wqqHTJyfftQ" />
|
||||
<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') }}"/>
|
||||
<link rel="stylesheet" href="{{ asset('assets/css/all.min.css') }}" crossorigin="anonymous"
|
||||
referrerpolicy="no-referrer"/>
|
||||
<meta name="google-site-verification" content="D6YvgLKg4oj2Ksk_cYhO3fijbmxZWib7wqqHTJyfftQ"/>
|
||||
<script src="https://js.stripe.com/clover/stripe.js"></script>
|
||||
<meta name="env" content="{{ app.environment}}">
|
||||
<meta name="env" content="{{ app.environment }}">
|
||||
{% block canonical_url %}{% endblock %}
|
||||
|
||||
{# SCHÉMAS JSON-LD #}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@graph": [
|
||||
{
|
||||
"@type": "WebSite",
|
||||
"name": "E-Cosplay",
|
||||
"url": "{{ app.request.schemeAndHttpHost }}"
|
||||
},
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
"name": "E-Cosplay",
|
||||
"url": "{{ app.request.schemeAndHttpHost }}"
|
||||
}
|
||||
</script>
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"name": "Association E-Cosplay",
|
||||
"url": "{{ app.request.schemeAndHttpHost }}",
|
||||
@@ -66,36 +70,52 @@
|
||||
"addressLocality": "Beautor",
|
||||
"postalCode": "02800",
|
||||
"addressCountry": "FR"
|
||||
},
|
||||
"member": [
|
||||
{ "@id": "#shoko" },
|
||||
{ "@id": "#marta" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"@type": "Person",
|
||||
"@id": "#shoko",
|
||||
"name": "ShokoCosplay",
|
||||
"jobTitle": "Président",
|
||||
"memberOf": { "@id": "{{ app.request.schemeAndHttpHost }}#organization" }
|
||||
},
|
||||
{
|
||||
"@type": "Person",
|
||||
"@id": "#marta",
|
||||
"name": "Marta Gator",
|
||||
"jobTitle": "Secrétaire",
|
||||
"memberOf": { "@id": "{{ app.request.schemeAndHttpHost }}#organization" }
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@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">
|
||||
{
|
||||
"@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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
</script>
|
||||
|
||||
{% block breadcrumb_schema %}{% endblock %}
|
||||
{% block stylesheets %}{% endblock %}
|
||||
<script type="text/javascript" src="/ts.js" async></script>
|
||||
{{ vite_asset('app.js', []) }}
|
||||
{% if app.environment == "prod" %}
|
||||
<script defer src="https://datas.e-cosplay.fr/vs.js" data-website-id="b929d372-fbea-403e-9ae2-781433828787"></script> {% endif %}
|
||||
<script defer src="https://datas.e-cosplay.fr/vs.js"
|
||||
data-website-id="b929d372-fbea-403e-9ae2-781433828787"></script> {% endif %}
|
||||
|
||||
</head>
|
||||
{# Le corps aura un fond gris clair pour correspondre au fond du logo #}
|
||||
@@ -114,7 +134,8 @@
|
||||
{# LOGO / NOM DU SITE #}
|
||||
<div class="flex-shrink-0 flex items-center">
|
||||
<a href="{{ path('app_home') }}" class="flex items-center space-x-2 text-xl font-bold text-gray-900">
|
||||
<img class="h-8 w-auto" src="{{ asset('assets/images/logo.jpg') | imagine_filter('webp') }}" alt="E-Cosplay Logo">
|
||||
<img class="h-8 w-auto" src="{{ asset('assets/images/logo.jpg') | imagine_filter('webp') }}"
|
||||
alt="E-Cosplay Logo">
|
||||
{# Le texte du nom du site peut rester en noir pour la lisibilité #}
|
||||
<span class="text-gray-900">E-Cosplay</span>
|
||||
</a>
|
||||
@@ -158,44 +179,59 @@
|
||||
</div>
|
||||
|
||||
{# BOUTON PANIER (Desktop) #}
|
||||
<button id="openCartDesktop" type="button" class="relative p-2 text-gray-700 hover:text-red-600 rounded-full transition duration-150 ease-in-out">
|
||||
<button id="openCartDesktop" type="button"
|
||||
class="relative p-2 text-gray-700 hover:text-red-600 rounded-full transition duration-150 ease-in-out">
|
||||
<span class="sr-only">{{ 'open_cart_sr'|trans }}</span>
|
||||
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<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" />
|
||||
<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"/>
|
||||
</svg>
|
||||
{# Compteur Panier - Initialisé à 0 #}
|
||||
<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">
|
||||
<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">
|
||||
0
|
||||
</span>
|
||||
</button>
|
||||
|
||||
{# NOUVEAU: COMPTE / MENU DÉROULANT (Desktop) #}
|
||||
<div class="relative">
|
||||
<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">
|
||||
<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">
|
||||
<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">
|
||||
<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" />
|
||||
<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"/>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
{# Menu déroulant (Masqué par défaut avec 'hidden') #}
|
||||
<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">
|
||||
<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">
|
||||
<div class="py-1" role="none">
|
||||
{% if is_granted('ROLE_USER') %}
|
||||
{# Afficher le nom de l'utilisateur et la déconnexion si connecté #}
|
||||
<div class="block px-4 py-2 text-sm text-gray-900 font-semibold border-b border-gray-100">
|
||||
<div
|
||||
class="block px-4 py-2 text-sm text-gray-900 font-semibold border-b border-gray-100">
|
||||
{{ 'logged_in_as'|trans }} {{ app.user.username|default('Compte') }}
|
||||
</div>
|
||||
<a href="{{ path('admin_dashboard') }}" class="block px-4 py-2 text-sm text-cyan-600 hover:bg-gray-100" role="menuitem" tabindex="-1">
|
||||
<a href="{{ path('admin_dashboard') }}"
|
||||
class="block px-4 py-2 text-sm text-cyan-600 hover:bg-gray-100" role="menuitem"
|
||||
tabindex="-1">
|
||||
{{ 'logged_admin'|trans }}
|
||||
</a>
|
||||
<a href="{{ path('app_logout') }}" class="block px-4 py-2 text-sm text-red-600 hover:bg-gray-100" role="menuitem" tabindex="-1">
|
||||
<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>
|
||||
{% else %}
|
||||
{# Afficher la connexion si non connecté #}
|
||||
<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">
|
||||
<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">
|
||||
{{ 'login_link'|trans }}
|
||||
</a>
|
||||
{% endif %}
|
||||
@@ -208,25 +244,35 @@
|
||||
<div class="md:hidden flex items-center space-x-2">
|
||||
{# NOUVEAU: COMPTE / MENU DÉROULANT (Mobile) #}
|
||||
<div class="relative">
|
||||
<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">
|
||||
<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">
|
||||
<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">
|
||||
<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" />
|
||||
<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"/>
|
||||
</svg>
|
||||
</button>
|
||||
{# Le menu déroulant Mobile peut être affiché via le JS global si l'espace le permet #}
|
||||
<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">
|
||||
<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">
|
||||
<div class="py-1" role="none">
|
||||
{% if is_granted('ROLE_USER') %}
|
||||
<div class="block px-4 py-2 text-sm text-gray-900 font-semibold border-b border-gray-100">
|
||||
<div
|
||||
class="block px-4 py-2 text-sm text-gray-900 font-semibold border-b border-gray-100">
|
||||
{{ 'logged_in_as'|trans }} {{ app.user.username|default('Compte') }}
|
||||
</div>
|
||||
<a href="{{ path('app_logout') }}" class="block px-4 py-2 text-sm text-red-600 hover:bg-gray-100" role="menuitem" tabindex="-1">
|
||||
<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>
|
||||
{% else %}
|
||||
<a href="{{ path('app_login') }}" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100" role="menuitem" tabindex="-1">
|
||||
<a href="{{ path('app_login') }}"
|
||||
class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100" role="menuitem"
|
||||
tabindex="-1">
|
||||
{{ 'login_link'|trans }}
|
||||
</a>
|
||||
{% endif %}
|
||||
@@ -253,22 +299,29 @@
|
||||
</div>
|
||||
|
||||
{# BOUTON PANIER (Mobile) #}
|
||||
<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">
|
||||
<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">
|
||||
<span class="sr-only">{{ 'open_cart_sr'|trans }}</span>
|
||||
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<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" />
|
||||
<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"/>
|
||||
</svg>
|
||||
{# Compteur Panier - Initialisé à 0 #}
|
||||
<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">
|
||||
<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">
|
||||
0
|
||||
</span>
|
||||
</button>
|
||||
|
||||
{# BOUTON MOBILE (Burger Icon) #}
|
||||
<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">
|
||||
<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">
|
||||
<span class="sr-only">{{ 'open_main_menu_sr'|trans }}</span>
|
||||
<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" />
|
||||
<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"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
@@ -300,15 +353,17 @@
|
||||
{# PANIER LATÉRAL (OFF-CANVAS CART) #}
|
||||
{# Utilise Tailwind pour les transitions et l'accessibilité #}
|
||||
{# Le panier sera masqué par défaut (translate-x-full) #}
|
||||
<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">
|
||||
<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">
|
||||
|
||||
{# Entête du panier #}
|
||||
<div class="p-4 border-b border-gray-200 flex justify-between items-center">
|
||||
<h2 class="text-xl font-bold text-gray-900">{{ 'your_cart'|trans }}</h2>
|
||||
<button id="closeCartButton" type="button" class="text-gray-400 hover:text-gray-600 p-2 rounded-full transition duration-150 ease-in-out">
|
||||
<button id="closeCartButton" type="button"
|
||||
class="text-gray-400 hover:text-gray-600 p-2 rounded-full transition duration-150 ease-in-out">
|
||||
<span class="sr-only">{{ 'close_cart_sr'|trans }}</span>
|
||||
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
@@ -318,7 +373,8 @@
|
||||
{# 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">
|
||||
<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" />
|
||||
<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"/>
|
||||
</svg>
|
||||
<p class="mt-1">{{ 'cart_empty'|trans }}</p>
|
||||
</div>
|
||||
@@ -330,7 +386,8 @@
|
||||
<span>{{ 'subtotal_label'|trans }}:</span>
|
||||
<span id="cartSubtotal">0.00 €</span>
|
||||
</div>
|
||||
<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">
|
||||
<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">
|
||||
{{ 'checkout_button'|trans }}
|
||||
</a>
|
||||
<p class="text-xs text-gray-500 text-center mt-2">{{ 'shipping_disclaimer'|trans }}</p>
|
||||
@@ -338,7 +395,8 @@
|
||||
</div>
|
||||
|
||||
{# FONDU NOIR (Backdrop) - S'affiche lorsque le panier est ouvert #}
|
||||
<div id="cartBackdrop" class="fixed inset-0 bg-op z-40 hidden transition-opacity duration-300 ease-in-out" aria-hidden="true"></div>
|
||||
<div id="cartBackdrop" class="fixed inset-0 bg-op z-40 hidden transition-opacity duration-300 ease-in-out"
|
||||
aria-hidden="true"></div>
|
||||
{# ========================================================== #}
|
||||
|
||||
|
||||
@@ -357,7 +415,8 @@
|
||||
02800 Beautor, FRANCE
|
||||
</p>
|
||||
<p class="text-sm text-gray-700 mt-2">
|
||||
<a href="mailto:contact@e-cosplay.fr" class="hover:text-red-600 transition duration-150 ease-in-out">contact@e-cosplay.fr</a>
|
||||
<a href="mailto:contact@e-cosplay.fr"
|
||||
class="hover:text-red-600 transition duration-150 ease-in-out">contact@e-cosplay.fr</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -365,15 +424,24 @@
|
||||
<div>
|
||||
<h3 class="text-lg font-semibold mb-3 text-gray-900">{{ 'footer_follow_us_title'|trans }}</h3>
|
||||
<div class="flex space-x-4">
|
||||
<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">
|
||||
<svg class="h-6 w-6 fill-current" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M14.07 3.59h2.36v3.2h-2.36c-1.2 0-1.42.57-1.42 1.4v2.02h3.76l-.6 3.96h-3.16v9.81H8.56v-9.81H5.43v-3.96h3.13V7.12c0-3.1 1.84-4.78 4.7-4.78z"/>
|
||||
<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">
|
||||
<svg class="h-6 w-6 fill-current" viewBox="0 0 24 24" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M14.07 3.59h2.36v3.2h-2.36c-1.2 0-1.42.57-1.42 1.4v2.02h3.76l-.6 3.96h-3.16v9.81H8.56v-9.81H5.43v-3.96h3.13V7.12c0-3.1 1.84-4.78 4.7-4.78z"/>
|
||||
</svg>
|
||||
</a>
|
||||
<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">
|
||||
<svg class="h-6 w-6 fill-current" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M7.8 2h8.4C18.15 2 20 3.85 20 6.2v8.4c0 2.35-1.85 4.2-4.2 4.2H7.8C5.45 18.8 3.6 16.95 3.6 14.6V6.2C3.6 3.85 5.45 2 7.8 2zm8.4 1.8H7.8C6.44 3.8 5.4 4.84 5.4 6.2v8.4c0 1.36 1.04 2.4 2.4 2.4h8.4c1.36 0 2.4-1.04 2.4-2.4V6.2c0-1.36-1.04-2.4-2.4-2.4z"/>
|
||||
<path d="M12 7.6c-2.43 0-4.4 1.97-4.4 4.4s1.97 4.4 4.4 4.4 4.4-1.97 4.4-4.4-1.97-4.4-4.4-4.4zm0 6.6c-1.21 0-2.2-0.99-2.2-2.2s0.99-2.2 2.2-2.2 2.2 0.99 2.2 2.2-0.99 2.2-2.2 2.2z"/>
|
||||
<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">
|
||||
<svg class="h-6 w-6 fill-current" viewBox="0 0 24 24" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M7.8 2h8.4C18.15 2 20 3.85 20 6.2v8.4c0 2.35-1.85 4.2-4.2 4.2H7.8C5.45 18.8 3.6 16.95 3.6 14.6V6.2C3.6 3.85 5.45 2 7.8 2zm8.4 1.8H7.8C6.44 3.8 5.4 4.84 5.4 6.2v8.4c0 1.36 1.04 2.4 2.4 2.4h8.4c1.36 0 2.4-1.04 2.4-2.4V6.2c0-1.36-1.04-2.4-2.4-2.4z"/>
|
||||
<path
|
||||
d="M12 7.6c-2.43 0-4.4 1.97-4.4 4.4s1.97 4.4 4.4 4.4 4.4-1.97 4.4-4.4-1.97-4.4-4.4-4.4zm0 6.6c-1.21 0-2.2-0.99-2.2-2.2s0.99-2.2 2.2-2.2 2.2 0.99 2.2 2.2-0.99 2.2-2.2 2.2z"/>
|
||||
<circle cx="16.4" cy="7.2" r="0.8"/>
|
||||
</svg>
|
||||
</a>
|
||||
@@ -384,7 +452,9 @@
|
||||
<div>
|
||||
<h3 class="text-lg font-semibold mb-3 text-gray-900">E-Cosplay</h3>
|
||||
{{ 'footer_mission_description'|trans|raw }}
|
||||
<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">
|
||||
<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">
|
||||
<a href="https://fr.trustpilot.com/review/e-cosplay.fr" target="_blank" rel="noopener">Trustpilot</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -407,12 +477,18 @@
|
||||
|
||||
{# Liens Légaux #}
|
||||
<div class="flex flex-wrap justify-center md:justify-end space-x-4 text-sm font-medium">
|
||||
<a href="{{ path('app_legal') }}" class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out">{{ 'legal_notice_link'|trans }}</a>
|
||||
<a href="{{ path('app_cookies') }}" class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out">{{ 'cookie_policy_link'|trans }}</a>
|
||||
<a href="{{ path('app_hosting') }}" class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out">{{ 'hosting_link'|trans }}</a>
|
||||
<a href="{{ path('app_rgpd') }}" class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out">{{ 'rgpd_policy_link'|trans }}</a>
|
||||
<a href="{{ path('app_cgu') }}" class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out">{{ 'cgu_link'|trans }}</a>
|
||||
<a href="{{ path('app_cgv') }}" class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out">{{ 'cgv_link'|trans }}</a>
|
||||
<a href="{{ path('app_legal') }}"
|
||||
class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out">{{ 'legal_notice_link'|trans }}</a>
|
||||
<a href="{{ path('app_cookies') }}"
|
||||
class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out">{{ 'cookie_policy_link'|trans }}</a>
|
||||
<a href="{{ path('app_hosting') }}"
|
||||
class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out">{{ 'hosting_link'|trans }}</a>
|
||||
<a href="{{ path('app_rgpd') }}"
|
||||
class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out">{{ 'rgpd_policy_link'|trans }}</a>
|
||||
<a href="{{ path('app_cgu') }}"
|
||||
class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out">{{ 'cgu_link'|trans }}</a>
|
||||
<a href="{{ path('app_cgv') }}"
|
||||
class="text-gray-800 hover:text-red-600 transition duration-150 ease-in-out">{{ 'cgv_link'|trans }}</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -421,6 +497,5 @@
|
||||
</footer>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user