feat: implementation du role Gestionnaire RH et refonte de la gestion des offres
This commit is contained in:
@@ -51,6 +51,10 @@ defineProps({
|
||||
<span v-if="job.fpt_metadata?.infos_poste?.categorie" class="text-xs font-bold text-anthracite/50 uppercase tracking-widest bg-neutral px-2 py-1 rounded">
|
||||
Catégorie {{ job.fpt_metadata.infos_poste.categorie }}
|
||||
</span>
|
||||
<span v-if="job.expires_at" class="text-[10px] font-black text-accent uppercase tracking-widest bg-accent/10 px-2 py-1 rounded flex items-center gap-1.5 border border-accent/20">
|
||||
<svg class="w-3 h-3" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
||||
Expire le {{ new Date(job.expires_at).toLocaleDateString('fr-FR') }}
|
||||
</span>
|
||||
<span class="text-xs font-bold text-anthracite/50 uppercase tracking-widest">Temps plein</span>
|
||||
</div>
|
||||
<h2 class="text-2xl font-bold font-serif text-primary group-hover:text-highlight transition-colors mb-4">
|
||||
|
||||
@@ -10,11 +10,22 @@ const props = defineProps({
|
||||
});
|
||||
|
||||
const form = useForm({
|
||||
name: '',
|
||||
email: '',
|
||||
phone: '',
|
||||
linkedin_url: '',
|
||||
birth_name: '',
|
||||
usage_name: '',
|
||||
first_name: '',
|
||||
address: '',
|
||||
zip_code: '',
|
||||
city: '',
|
||||
phone: '',
|
||||
email: '',
|
||||
email_confirmation: '',
|
||||
birth_date: '',
|
||||
birth_place: '',
|
||||
nationality: '',
|
||||
current_situation: '',
|
||||
education_level: '',
|
||||
has_driving_license: '',
|
||||
privacy_policy: false,
|
||||
cv: null,
|
||||
cover_letter: null,
|
||||
});
|
||||
@@ -26,6 +37,10 @@ const submit = () => {
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const scrollToForm = () => {
|
||||
document.getElementById('application-form').scrollIntoView({ behavior: 'smooth' });
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -34,7 +49,7 @@ const submit = () => {
|
||||
<div class="min-h-screen bg-neutral text-anthracite font-sans">
|
||||
<!-- Navigation Bar -->
|
||||
<nav class="bg-white border-b border-anthracite/10 p-6">
|
||||
<div class="max-w-4xl mx-auto flex items-center justify-between">
|
||||
<div class="max-w-6xl mx-auto flex items-center justify-between">
|
||||
<Link href="/" class="flex items-center gap-3">
|
||||
<img src="/images/logo.png" alt="Logo CABM" class="h-12 object-contain" />
|
||||
</Link>
|
||||
@@ -44,7 +59,7 @@ const submit = () => {
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="max-w-4xl mx-auto py-12 px-6">
|
||||
<main class="max-w-6xl mx-auto py-12 px-6">
|
||||
<div class="mb-6">
|
||||
<Link :href="route('jobs.index')" class="inline-flex items-center gap-2 text-sm font-bold text-anthracite/60 hover:text-primary transition-colors">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"></path></svg>
|
||||
@@ -54,108 +69,287 @@ const submit = () => {
|
||||
|
||||
<div class="bg-white rounded-2xl shadow-xl overflow-hidden">
|
||||
<!-- Header -->
|
||||
<div class="bg-primary/5 border-b border-primary/10 px-8 py-10">
|
||||
<h1 class="text-3xl font-serif font-bold text-primary mb-2">{{ jobPosition.title }}</h1>
|
||||
<div class="flex items-center gap-4 text-sm text-anthracite/70">
|
||||
<span class="inline-flex items-center gap-1">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 13.255A23.931 23.931 0 0112 15c-3.183 0-6.22-.62-9-1.745M16 6V4a2 2 0 00-2-2h-4a2 2 0 00-2 2v2m4 6h.01M5 20h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path></svg>
|
||||
Offre d'emploi
|
||||
</span>
|
||||
<span v-if="jobPosition.fpt_metadata?.infos_poste?.categorie" class="px-3 py-1 bg-white/50 rounded-full font-bold uppercase tracking-widest text-[10px]">
|
||||
Catégorie {{ jobPosition.fpt_metadata.infos_poste.categorie }} - {{ jobPosition.fpt_metadata.infos_poste.cadre_emplois }}
|
||||
</span>
|
||||
<div class="bg-primary/5 border-b border-primary/10 px-8 py-10 flex flex-col md:flex-row md:items-center justify-between gap-6">
|
||||
<div>
|
||||
<h1 class="text-3xl font-serif font-bold text-primary mb-2">{{ jobPosition.title }}</h1>
|
||||
<div class="flex items-center gap-4 text-sm text-anthracite/70">
|
||||
<span class="inline-flex items-center gap-1">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 13.255A23.931 23.931 0 0112 15c-3.183 0-6.22-.62-9-1.745M16 6V4a2 2 0 00-2-2h-4a2 2 0 00-2 2v2m4 6h.01M5 20h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path></svg>
|
||||
Offre d'emploi
|
||||
</span>
|
||||
<span v-if="jobPosition.fpt_metadata?.infos_poste?.categorie" class="px-3 py-1 bg-white/50 rounded-full font-bold uppercase tracking-widest text-[10px]">
|
||||
Catégorie {{ jobPosition.fpt_metadata.infos_poste.categorie }} - {{ jobPosition.fpt_metadata.infos_poste.cadre_emplois }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="p-8 grid grid-cols-1 md:grid-cols-2 gap-12">
|
||||
<button @click="scrollToForm" class="shrink-0 py-3 px-8 bg-primary text-white rounded-xl font-bold font-subtitle uppercase tracking-widest text-sm hover:brightness-110 shadow-lg shadow-primary/20 transition-all">
|
||||
Postuler à cette offre
|
||||
</button>
|
||||
</div> <div class="p-8 space-y-12">
|
||||
<!-- Job Details -->
|
||||
<div class="space-y-6">
|
||||
<div>
|
||||
<h2 class="text-xl font-bold font-subtitle text-anthracite mb-3 border-b pb-2">Description du poste</h2>
|
||||
<div v-if="jobPosition.description_html" class="prose prose-sm prose-indigo text-anthracite/80 max-w-none" v-html="jobPosition.description_html"></div>
|
||||
<div v-else class="prose prose-sm prose-neutral text-anthracite/80 whitespace-pre-line">{{ jobPosition.description }}</div>
|
||||
<div class="grid grid-cols-1 lg:grid-cols-3 gap-12">
|
||||
<div class="lg:col-span-2 space-y-8">
|
||||
<div>
|
||||
<h2 class="text-xl font-bold font-subtitle text-anthracite mb-4 border-b border-anthracite/5 pb-2">Description du poste</h2>
|
||||
<div v-if="jobPosition.description_html" class="prose prose-sm prose-indigo text-anthracite/80 max-w-none" v-html="jobPosition.description_html"></div>
|
||||
<div v-else class="prose prose-sm prose-neutral text-anthracite/80 whitespace-pre-line">{{ jobPosition.description }}</div>
|
||||
</div>
|
||||
|
||||
<div v-if="jobPosition.requirements && jobPosition.requirements.length > 0">
|
||||
<h2 class="text-xl font-bold font-subtitle text-anthracite mb-4 border-b border-anthracite/5 pb-2">Prérequis</h2>
|
||||
<ul class="list-disc list-inside text-anthracite/80 space-y-2">
|
||||
<li v-for="(req, i) in jobPosition.requirements" :key="i">{{ req }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="jobPosition.requirements && jobPosition.requirements.length > 0">
|
||||
<h2 class="text-xl font-bold font-subtitle text-anthracite mb-3 border-b pb-2">Prérequis</h2>
|
||||
<ul class="list-disc list-inside text-anthracite/80 space-y-1">
|
||||
<li v-for="(req, i) in jobPosition.requirements" :key="i">{{ req }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div v-if="jobPosition.fpt_metadata" class="bg-neutral/30 rounded-xl p-5 border border-anthracite/10 mt-8">
|
||||
<h2 class="text-sm font-bold font-subtitle uppercase tracking-widest text-primary mb-4 flex items-center gap-2">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3" />
|
||||
</svg>
|
||||
Informations Statutaires (FPT)
|
||||
</h2>
|
||||
<div class="space-y-3 text-sm text-anthracite/80">
|
||||
<p><strong class="text-anthracite">Grade(s) recherché(s) :</strong> {{ jobPosition.fpt_metadata.infos_poste?.grade_mini }} à {{ jobPosition.fpt_metadata.infos_poste?.grade_maxi }}</p>
|
||||
<p><strong class="text-anthracite">Fondement :</strong> {{ jobPosition.fpt_metadata.conformite?.fondement_juridique_recrutement }}</p>
|
||||
|
||||
<div class="pt-3 border-t border-anthracite/10">
|
||||
<strong class="text-anthracite block mb-2 text-xs uppercase tracking-wider">Mentions Légales :</strong>
|
||||
<ul class="list-disc list-inside space-y-1 text-xs">
|
||||
<li v-for="(mention, idx) in jobPosition.fpt_metadata.conformite?.mentions_legales_obligatoires" :key="idx">{{ mention }}</li>
|
||||
</ul>
|
||||
<div class="space-y-6">
|
||||
<div v-if="jobPosition.fpt_metadata" class="bg-neutral rounded-2xl p-6 border border-anthracite/10">
|
||||
<h2 class="text-xs font-black font-subtitle uppercase tracking-[0.2em] text-primary/50 mb-6 flex items-center gap-2">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3" />
|
||||
</svg>
|
||||
Infos Statutaires (FPT)
|
||||
</h2>
|
||||
<div class="space-y-4 text-sm">
|
||||
<div class="flex flex-col gap-1">
|
||||
<span class="text-[10px] font-black uppercase text-anthracite/30 tracking-widest">Grade(s) recherché(s)</span>
|
||||
<span class="font-bold text-anthracite">{{ jobPosition.fpt_metadata.infos_poste?.grade_mini }} à {{ jobPosition.fpt_metadata.infos_poste?.grade_maxi }}</span>
|
||||
</div>
|
||||
<div class="flex flex-col gap-1">
|
||||
<span class="text-[10px] font-black uppercase text-anthracite/30 tracking-widest">Fondement</span>
|
||||
<span class="font-bold text-anthracite">{{ jobPosition.fpt_metadata.conformite?.fondement_juridique_recrutement }}</span>
|
||||
</div>
|
||||
|
||||
<div class="pt-4 border-t border-anthracite/5">
|
||||
<span class="text-[10px] font-black uppercase text-anthracite/30 tracking-widest block mb-2">Mentions Légales</span>
|
||||
<ul class="space-y-2">
|
||||
<li v-for="(mention, idx) in jobPosition.fpt_metadata.conformite?.mentions_legales_obligatoires" :key="idx" class="flex items-start gap-2 text-[11px] leading-relaxed font-semibold text-anthracite/60">
|
||||
<div class="w-1 h-1 rounded-full bg-primary/30 mt-1.5 shrink-0"></div>
|
||||
{{ mention }}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Application Form -->
|
||||
<div class="bg-neutral/50 p-6 rounded-xl border border-anthracite/10">
|
||||
<h2 class="text-xl font-bold font-subtitle text-primary mb-6">Soumettre votre candidature</h2>
|
||||
<div id="application-form" class="bg-neutral/50 p-10 rounded-3xl border border-anthracite/10">
|
||||
<div class="mb-10 border-b border-anthracite/10 pb-6">
|
||||
<h2 class="text-3xl font-serif font-black text-primary">Formulaire de candidature</h2>
|
||||
<p class="text-sm font-semibold text-anthracite/40 mt-1">Veuillez renseigner avec précision les informations ci-dessous.</p>
|
||||
</div>
|
||||
|
||||
<form @submit.prevent="submit" class="space-y-5">
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1">Nom complet <span class="text-red-500">*</span></label>
|
||||
<input type="text" v-model="form.name" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5" />
|
||||
<div v-if="form.errors.name" class="text-red-500 text-xs mt-1">{{ form.errors.name }}</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1">Adresse Email <span class="text-red-500">*</span></label>
|
||||
<input type="email" v-model="form.email" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5" />
|
||||
<div v-if="form.errors.email" class="text-red-500 text-xs mt-1">{{ form.errors.email }}</div>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1">Téléphone</label>
|
||||
<input type="text" v-model="form.phone" class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5" />
|
||||
<div v-if="form.errors.phone" class="text-red-500 text-xs mt-1">{{ form.errors.phone }}</div>
|
||||
<form @submit.prevent="submit" class="space-y-8">
|
||||
<!-- État Civil -->
|
||||
<div class="space-y-4">
|
||||
<h3 class="text-lg font-bold text-anthracite/80 flex items-center gap-2">
|
||||
<span class="w-8 h-8 rounded-full bg-primary text-white flex items-center justify-center text-xs font-black">1</span>
|
||||
État Civil
|
||||
</h3>
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Nom de naissance <span class="text-red-500">*</span></label>
|
||||
<input type="text" v-model="form.birth_name" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm" />
|
||||
<div v-if="form.errors.birth_name" class="text-red-500 text-xs mt-1">{{ form.errors.birth_name }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Nom d'usage <span class="text-red-500">*</span></label>
|
||||
<input type="text" v-model="form.usage_name" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm" />
|
||||
<div v-if="form.errors.usage_name" class="text-red-500 text-xs mt-1">{{ form.errors.usage_name }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Prénom <span class="text-red-500">*</span></label>
|
||||
<input type="text" v-model="form.first_name" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm" />
|
||||
<div v-if="form.errors.first_name" class="text-red-500 text-xs mt-1">{{ form.errors.first_name }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1">Ville</label>
|
||||
<input type="text" v-model="form.city" class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5" />
|
||||
<div v-if="form.errors.city" class="text-red-500 text-xs mt-1">{{ form.errors.city }}</div>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Date de naissance <span class="text-red-500">*</span></label>
|
||||
<input type="date" v-model="form.birth_date" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm" />
|
||||
<div v-if="form.errors.birth_date" class="text-red-500 text-xs mt-1">{{ form.errors.birth_date }}</div>
|
||||
</div>
|
||||
<div class="md:col-span-1">
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Lieu de naissance <span class="text-red-500">*</span></label>
|
||||
<input type="text" v-model="form.birth_place" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm" />
|
||||
<div v-if="form.errors.birth_place" class="text-red-500 text-xs mt-1">{{ form.errors.birth_place }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Nationalité <span class="text-red-500">*</span></label>
|
||||
<input type="text" v-model="form.nationality" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm" />
|
||||
<div v-if="form.errors.nationality" class="text-red-500 text-xs mt-1">{{ form.errors.nationality }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1">URL LinkedIn</label>
|
||||
<input type="url" v-model="form.linkedin_url" placeholder="https://linkedin.com/in/..." class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5" />
|
||||
<div v-if="form.errors.linkedin_url" class="text-red-500 text-xs mt-1">{{ form.errors.linkedin_url }}</div>
|
||||
<!-- Coordonnées -->
|
||||
<div class="space-y-4 pt-6 border-t border-anthracite/5">
|
||||
<h3 class="text-lg font-bold text-anthracite/80 flex items-center gap-2">
|
||||
<span class="w-8 h-8 rounded-full bg-primary text-white flex items-center justify-center text-xs font-black">2</span>
|
||||
Coordonnées
|
||||
</h3>
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Adresse <span class="text-red-500">*</span></label>
|
||||
<input type="text" v-model="form.address" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm" />
|
||||
<div v-if="form.errors.address" class="text-red-500 text-xs mt-1">{{ form.errors.address }}</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 md:grid-cols-4 gap-6">
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Code postal <span class="text-red-500">*</span></label>
|
||||
<input type="text" v-model="form.zip_code" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm" />
|
||||
<div v-if="form.errors.zip_code" class="text-red-500 text-xs mt-1">{{ form.errors.zip_code }}</div>
|
||||
</div>
|
||||
<div class="md:col-span-2">
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Ville <span class="text-red-500">*</span></label>
|
||||
<input type="text" v-model="form.city" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm" />
|
||||
<div v-if="form.errors.city" class="text-red-500 text-xs mt-1">{{ form.errors.city }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Mobile <span class="text-red-500">*</span></label>
|
||||
<input type="text" v-model="form.phone" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm" />
|
||||
<div v-if="form.errors.phone" class="text-red-500 text-xs mt-1">{{ form.errors.phone }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Email <span class="text-red-500">*</span></label>
|
||||
<input type="email" v-model="form.email" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm" />
|
||||
<div v-if="form.errors.email" class="text-red-500 text-xs mt-1">{{ form.errors.email }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Confirmer Email <span class="text-red-500">*</span></label>
|
||||
<input type="email" v-model="form.email_confirmation" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm" />
|
||||
<div v-if="form.errors.email_confirmation" class="text-red-500 text-xs mt-1">{{ form.errors.email_confirmation }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1">CV (PDF) <span class="text-red-500">*</span></label>
|
||||
<input type="file" @input="form.cv = $event.target.files[0]" accept=".pdf" required class="w-full text-sm text-anthracite/70 file:mr-4 file:py-2 file:px-4 file:rounded-full file:border-0 file:text-sm file:font-semibold file:bg-primary/10 file:text-primary hover:file:bg-primary/20" />
|
||||
<div v-if="form.errors.cv" class="text-red-500 text-xs mt-1">{{ form.errors.cv }}</div>
|
||||
<!-- Profil & Situation -->
|
||||
<div class="space-y-4 pt-6 border-t border-anthracite/5">
|
||||
<h3 class="text-lg font-bold text-anthracite/80 flex items-center gap-2">
|
||||
<span class="w-8 h-8 rounded-full bg-primary text-white flex items-center justify-center text-xs font-black">3</span>
|
||||
Profil & Situation
|
||||
</h3>
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Situation actuelle <span class="text-red-500">*</span></label>
|
||||
<select v-model="form.current_situation" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm bg-white">
|
||||
<option value="" disabled>Sélectionnez votre situation</option>
|
||||
<option value="Titulaire">Titulaire</option>
|
||||
<option value="Lauréat(e) d'un concours">Lauréat(e) d'un concours</option>
|
||||
<option value="contractuel">Contractuel</option>
|
||||
<option value="En recherche d'emplois">En recherche d'emplois</option>
|
||||
</select>
|
||||
<div v-if="form.errors.current_situation" class="text-red-500 text-xs mt-1">{{ form.errors.current_situation }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Niveau de diplôme <span class="text-red-500">*</span></label>
|
||||
<select v-model="form.education_level" required class="w-full rounded-lg border-anthracite/20 focus:border-primary focus:ring-primary text-sm p-2.5 shadow-sm bg-white">
|
||||
<option value="" disabled>Sélectionnez votre niveau</option>
|
||||
<option value="Aucun diplome">Aucun diplome</option>
|
||||
<option value="Brevet">Brevet</option>
|
||||
<option value="CAP/BEP">CAP/BEP</option>
|
||||
<option value="Bac">Bac</option>
|
||||
<option value="Bac + 1">Bac + 1</option>
|
||||
<option value="Bac + 2">Bac + 2</option>
|
||||
<option value="Bac + 3">Bac + 3</option>
|
||||
<option value="Bac + 4">Bac + 4</option>
|
||||
<option value="Bac + 5">Bac + 5</option>
|
||||
<option value="Autre">Autre</option>
|
||||
</select>
|
||||
<div v-if="form.errors.education_level" class="text-red-500 text-xs mt-1">{{ form.errors.education_level }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Permis de conduire <span class="text-red-500">*</span></label>
|
||||
<div class="flex gap-4 mt-2">
|
||||
<label class="inline-flex items-center">
|
||||
<input type="radio" v-model="form.has_driving_license" :value="1" required class="text-primary focus:ring-primary h-4 w-4" />
|
||||
<span class="ml-2 text-sm text-anthracite/80">Oui</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center">
|
||||
<input type="radio" v-model="form.has_driving_license" :value="0" required class="text-primary focus:ring-primary h-4 w-4" />
|
||||
<span class="ml-2 text-sm text-anthracite/80">Non</span>
|
||||
</label>
|
||||
</div>
|
||||
<div v-if="form.errors.has_driving_license" class="text-red-500 text-xs mt-1">{{ form.errors.has_driving_license }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1">Lettre de motivation (PDF)</label>
|
||||
<input type="file" @input="form.cover_letter = $event.target.files[0]" accept=".pdf" class="w-full text-sm text-anthracite/70 file:mr-4 file:py-2 file:px-4 file:rounded-full file:border-0 file:text-sm file:font-semibold file:bg-primary/10 file:text-primary hover:file:bg-primary/20" />
|
||||
<div v-if="form.errors.cover_letter" class="text-red-500 text-xs mt-1">{{ form.errors.cover_letter }}</div>
|
||||
<!-- Documents -->
|
||||
<div class="space-y-4 pt-6 border-t border-anthracite/5">
|
||||
<h3 class="text-lg font-bold text-anthracite/80 flex items-center gap-2">
|
||||
<span class="w-8 h-8 rounded-full bg-primary text-white flex items-center justify-center text-xs font-black">4</span>
|
||||
Documents
|
||||
</h3>
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">CV (PDF) <span class="text-red-500">*</span></label>
|
||||
<div class="mt-1 flex justify-center px-6 pt-5 pb-6 border-2 border-anthracite/10 border-dashed rounded-xl hover:border-primary/30 transition-colors bg-white">
|
||||
<div class="space-y-1 text-center">
|
||||
<svg class="mx-auto h-10 w-10 text-anthracite/20" stroke="currentColor" fill="none" viewBox="0 0 48 48" aria-hidden="true">
|
||||
<path d="M28 8H12a4 4 0 00-4 4v20m32-12v8m0 0v8a4 4 0 01-4 4H12a4 4 0 01-4-4v-4m32-4l-3.172-3.172a4 4 0 00-5.656 0L28 28M8 32l9.172-9.172a4 4 0 015.656 0L28 28m0 0l4 4m4-24h8m-4-4v8m-12 4h.02" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||
</svg>
|
||||
<div class="flex text-sm text-anthracite/60">
|
||||
<label class="relative cursor-pointer rounded-md font-bold text-primary hover:text-primary-dark">
|
||||
<span>Choisir un fichier</span>
|
||||
<input type="file" @input="form.cv = $event.target.files[0]" accept=".pdf" required class="sr-only" />
|
||||
</label>
|
||||
</div>
|
||||
<p class="text-xs text-anthracite/40">PDF uniquement, Max 5 Mo</p>
|
||||
<p v-if="form.cv" class="text-xs text-success font-bold mt-2">✓ {{ form.cv.name }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="form.errors.cv" class="text-red-500 text-xs mt-1">{{ form.errors.cv }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm font-medium text-anthracite mb-1.5">Lettre de motivation (PDF)</label>
|
||||
<div class="mt-1 flex justify-center px-6 pt-5 pb-6 border-2 border-anthracite/10 border-dashed rounded-xl hover:border-primary/30 transition-colors bg-white">
|
||||
<div class="space-y-1 text-center">
|
||||
<svg class="mx-auto h-10 w-10 text-anthracite/20" stroke="currentColor" fill="none" viewBox="0 0 48 48" aria-hidden="true">
|
||||
<path d="M28 8H12a4 4 0 00-4 4v20m32-12v8m0 0v8a4 4 0 01-4 4H12a4 4 0 01-4-4v-4m32-4l-3.172-3.172a4 4 0 00-5.656 0L28 28M8 32l9.172-9.172a4 4 0 015.656 0L28 28m0 0l4 4m4-24h8m-4-4v8m-12 4h.02" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||
</svg>
|
||||
<div class="flex text-sm text-anthracite/60">
|
||||
<label class="relative cursor-pointer rounded-md font-bold text-primary hover:text-primary-dark">
|
||||
<span>Choisir un fichier</span>
|
||||
<input type="file" @input="form.cover_letter = $event.target.files[0]" accept=".pdf" class="sr-only" />
|
||||
</label>
|
||||
</div>
|
||||
<p class="text-xs text-anthracite/40">PDF uniquement, Max 5 Mo</p>
|
||||
<p v-if="form.cover_letter" class="text-xs text-success font-bold mt-2">✓ {{ form.cover_letter.name }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="form.errors.cover_letter" class="text-red-500 text-xs mt-1">{{ form.errors.cover_letter }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" :disabled="form.processing" class="w-full mt-6 py-3 px-4 bg-highlight text-[#3a2800] rounded-xl font-bold font-subtitle uppercase tracking-wider text-sm hover:brightness-110 shadow-lg shadow-highlight/30 transition-all disabled:opacity-50 flex justify-center items-center">
|
||||
<span v-if="form.processing">Envoi en cours...</span>
|
||||
<span v-else>Postuler maintenant</span>
|
||||
</button>
|
||||
<!-- Validation -->
|
||||
<div class="space-y-4 pt-6 border-t border-anthracite/10">
|
||||
<div class="flex items-start bg-white p-4 rounded-xl border border-anthracite/10">
|
||||
<div class="flex items-center h-5">
|
||||
<input type="checkbox" v-model="form.privacy_policy" required class="h-5 w-5 text-primary border-anthracite/20 rounded focus:ring-primary cursor-pointer" />
|
||||
</div>
|
||||
<div class="ml-4 text-xs leading-relaxed text-anthracite/70">
|
||||
<label class="cursor-pointer font-semibold">
|
||||
En soumettant ce formulaire, j'accepte que les informations saisies dans cet espace soient utilisées pour permettre de me recontacter. J'affirme avoir pris connaissance de notre <Link :href="route('privacy-policy')" target="_blank" class="text-primary hover:underline">politique de confidentialité</Link>. <span class="text-red-500">*</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="form.errors.privacy_policy" class="text-red-500 text-xs mt-1">{{ form.errors.privacy_policy }}</div>
|
||||
|
||||
<button type="submit" :disabled="form.processing" class="w-full py-4 px-6 bg-highlight text-[#3a2800] rounded-xl font-bold font-subtitle uppercase tracking-widest text-base hover:brightness-105 shadow-xl shadow-highlight/20 transition-all disabled:opacity-50 flex justify-center items-center gap-3">
|
||||
<svg v-if="form.processing" class="animate-spin h-5 w-5 text-current" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg>
|
||||
<span v-if="form.processing">Traitement de votre candidature...</span>
|
||||
<span v-else>Soumettre ma candidature</span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
184
resources/js/Pages/Public/PrivacyPolicy.vue
Normal file
184
resources/js/Pages/Public/PrivacyPolicy.vue
Normal file
@@ -0,0 +1,184 @@
|
||||
<script setup>
|
||||
import { Head, Link } from '@inertiajs/vue3';
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Head title="Politique de Confidentialité" />
|
||||
|
||||
<div class="min-h-screen bg-sand/30 font-sans text-anthracite selection:bg-highlight selection:text-anthracite">
|
||||
<!-- Navigation -->
|
||||
<nav class="relative z-50 flex items-center justify-between px-6 py-8 md:px-12 max-w-7xl mx-auto">
|
||||
<Link href="/" class="flex items-center gap-3 group">
|
||||
<img src="/images/logo.png" alt="Logo" class="h-12 object-contain group-hover:scale-105 transition-transform duration-300" />
|
||||
</Link>
|
||||
|
||||
<div class="flex items-center gap-4">
|
||||
<Link :href="route('login')" class="px-8 py-3 bg-highlight text-[#3a2800] rounded-lg font-subtitle font-bold text-sm hover:brightness-110 hover:-translate-y-0.5 hover:shadow-xl hover:shadow-highlight/20 transition-all duration-300">
|
||||
Connexion
|
||||
</Link>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="max-w-4xl mx-auto py-16 px-6">
|
||||
<div class="bg-white rounded-[40px] shadow-sm border border-anthracite/5 p-8 md:p-16">
|
||||
<h1 class="text-4xl md:text-5xl font-serif font-black text-primary mb-8 tracking-tight">
|
||||
Politique de Confidentialité <br/>
|
||||
<span class="text-highlight text-2xl md:text-3xl">& Mentions Légales</span>
|
||||
</h1>
|
||||
|
||||
<div class="prose prose-slate max-w-none space-y-12 text-anthracite/80 leading-relaxed">
|
||||
|
||||
<section>
|
||||
<h2 class="text-xl font-black uppercase tracking-widest text-primary mb-4 border-b border-highlight/30 pb-2 w-fit">Définitions</h2>
|
||||
<div class="space-y-4 text-sm font-medium">
|
||||
<p><strong class="text-primary">Utilisateur :</strong> Tout internaute qui navigue, lit, visionne et utilise le site https://recruit.galiniere.net.</p>
|
||||
<p><strong class="text-primary">Contenu :</strong> Ensemble des éléments constituants l’information présente sur le Site (textes, images, vidéos).</p>
|
||||
<p><strong class="text-primary">Informations personnelles :</strong> « Les informations qui permettent, sous quelque forme que ce soit, directement ou non, l'identification des personnes physiques auxquelles elles s'appliquent » (article 4 de la loi n° 78-17 du 6 janvier 1978). Cela inclut : nom, prénom, date de naissance, téléphone, email, CV et lettre de motivation.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2 class="text-xl font-black uppercase tracking-widest text-primary mb-6 border-b border-highlight/30 pb-2 w-fit">1. Présentation du site internet</h2>
|
||||
<p class="text-sm mb-4">En vertu de l'article 6 de la loi n° 2004-575 du 21 juin 2004, l'identité des intervenants est précisée :</p>
|
||||
<div class="grid md:grid-cols-2 gap-4">
|
||||
<div class="bg-sand/20 p-5 rounded-2xl border border-anthracite/5">
|
||||
<span class="text-[10px] font-black uppercase tracking-widest text-anthracite/40 block mb-1">Propriétaire</span>
|
||||
<p class="text-sm font-bold">Communauté d'agglomération Béziers Méditerranée (CABM)</p>
|
||||
<p class="text-xs text-anthracite/60">39 boulevard de Verdun, 34500 Béziers</p>
|
||||
</div>
|
||||
<div class="bg-sand/20 p-5 rounded-2xl border border-anthracite/5">
|
||||
<span class="text-[10px] font-black uppercase tracking-widest text-anthracite/40 block mb-1">Hébergeur</span>
|
||||
<p class="text-sm font-bold">Communauté d'agglomération Béziers Méditerranée</p>
|
||||
<p class="text-xs text-anthracite/60">39 boulevard de Verdun, 34500 Béziers</p>
|
||||
</div>
|
||||
<div class="bg-sand/20 p-5 rounded-2xl border border-anthracite/5">
|
||||
<span class="text-[10px] font-black uppercase tracking-widest text-anthracite/40 block mb-1">Responsable Publication & Webmaster</span>
|
||||
<p class="text-sm font-bold">Robert Ménard</p>
|
||||
<p class="text-xs text-primary font-bold">informatique@beziers-mediterranee.fr</p>
|
||||
</div>
|
||||
<div class="bg-sand/20 p-5 rounded-2xl border border-anthracite/5">
|
||||
<span class="text-[10px] font-black uppercase tracking-widest text-anthracite/40 block mb-1">Délégué à la protection des données (DPO)</span>
|
||||
<p class="text-sm font-bold">Robert Ménard</p>
|
||||
<p class="text-xs text-primary font-bold">dpo@beziers-mediterranee.fr</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2 class="text-xl font-black uppercase tracking-widest text-primary mb-4 border-b border-highlight/30 pb-2 w-fit">2. Conditions générales d’utilisation (CGU)</h2>
|
||||
<div class="space-y-4 text-sm font-medium">
|
||||
<p>Le Site est une œuvre de l’esprit protégée par le Code de la Propriété Intellectuelle. L’utilisation du site implique l’acceptation pleine et entière des conditions d’utilisation.</p>
|
||||
<p>Le site est normalement accessible à tout moment. Une interruption pour maintenance technique peut être décidée par la CABM, qui s’efforcera de communiquer préalablement les dates et heures de l’intervention.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2 class="text-xl font-black uppercase tracking-widest text-primary mb-4 border-b border-highlight/30 pb-2 w-fit">3. Description des services fournis</h2>
|
||||
<div class="space-y-4 text-sm font-medium">
|
||||
<p>Le site https://recruit.galiniere.net a pour objet de fournir une information concernant les offres d’emploi diffusées par la CABM. En tant que responsable, la CABM s’efforce de fournir des informations précises, mais ne pourra être tenue responsable des omissions ou inexactitudes dans la mise à jour, qu'elles soient de son fait ou du fait de tiers partenaires.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2 class="text-xl font-black uppercase tracking-widest text-primary mb-4 border-b border-highlight/30 pb-2 w-fit">4. Limitations contractuelles sur les données techniques</h2>
|
||||
<div class="space-y-4 text-sm font-medium">
|
||||
<p>Le site utilise la technologie JavaScript. La CABM ne pourra être tenue responsable de dommages matériels liés à l’utilisation du site. L’utilisateur s’engage à accéder au site avec un matériel récent, sans virus et avec un navigateur de dernière génération mis à jour. L'hébergement est assuré sur le territoire de l’Union Européenne conformément au RGPD.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2 class="text-xl font-black uppercase tracking-widest text-primary mb-4 border-b border-highlight/30 pb-2 w-fit">5. Propriété intellectuelle</h2>
|
||||
<div class="space-y-4 text-sm font-medium">
|
||||
<p>La CABM est propriétaire des droits de propriété intellectuelle sur tous les éléments du site (textes, graphismes, logos, etc.). Toute reproduction ou adaptation est interdite sans autorisation écrite préalable. Toute exploitation non autorisée sera considérée comme une contrefaçon (articles L.335-2 et suivants du Code de Propriété Intellectuelle).</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="bg-primary p-8 md:p-12 rounded-[32px] text-white">
|
||||
<h2 class="text-xl font-black uppercase tracking-widest text-highlight mb-6 border-b border-white/20 pb-2 w-fit">6. Gestion des données personnelles</h2>
|
||||
<div class="space-y-8 text-sm opacity-90 leading-relaxed">
|
||||
<div>
|
||||
<h3 class="font-black uppercase text-xs mb-2 text-white">7.1 Responsable de la collecte</h3>
|
||||
<p>Le responsable du traitement des Données Personnelles est la Communauté d'agglomération Béziers Méditerranée (CABM), représentée par Robert Ménard.</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 class="font-black uppercase text-xs mb-2 text-white">7.2 Finalité des données collectées</h3>
|
||||
<p class="mb-4">Le site est susceptible de traiter les données pour :</p>
|
||||
<ul class="list-disc list-inside space-y-2 ml-2">
|
||||
<li>Permettre la navigation et la gestion des candidatures (dépôt de CV, lettres de motivation).</li>
|
||||
<li>Prévenir et lutter contre la fraude informatique (hacking, spamming).</li>
|
||||
<li>Améliorer la navigation et mener des enquêtes de satisfaction facultatives.</li>
|
||||
<li>Mener des campagnes de communication (mail, SMS, téléphone) liées au recrutement.</li>
|
||||
</ul>
|
||||
<p class="mt-4 font-black text-highlight italic">Note : Vos données ne sont jamais commercialisées.</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 class="font-black uppercase text-xs mb-2 text-white">7.3 Droits des utilisateurs</h3>
|
||||
<p class="mb-4">Conformément au RGPD, les utilisateurs disposent des droits suivants :</p>
|
||||
<ul class="list-disc list-inside space-y-2 ml-2">
|
||||
<li>Droit d’accès, de rectification, de mise à jour et d'effacement des données.</li>
|
||||
<li>Droit de retirer un consentement à tout moment.</li>
|
||||
<li>Droit à la limitation et à l’opposition du traitement.</li>
|
||||
<li>Droit à la portabilité des données fournies.</li>
|
||||
</ul>
|
||||
<div class="mt-6 bg-white/10 p-5 rounded-2xl border border-white/10">
|
||||
<p class="font-black mb-2">Pour exercer ces droits, vous pouvez contacter :</p>
|
||||
<p>CABM – DPO, Robert Ménard</p>
|
||||
<p>39 Boulevard de Verdun, 34500 Béziers</p>
|
||||
<p class="font-black mt-2">Email : dpo@beziers-mediterranee.fr</p>
|
||||
</div>
|
||||
<p class="mt-6">L’utilisateur peut également supprimer son compte candidat à tout moment via le bouton dédié dans son espace personnel. En cas de litige, une réclamation peut être déposée auprès de la CNIL.</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 class="font-black uppercase text-xs mb-2 text-white">7.4 Non-communication des données personnelles</h3>
|
||||
<p>La CABM s’interdit de transférer les informations de ses utilisateurs en dehors de l’Union Européenne sans information préalable. Les données sont accessibles uniquement par les services internes de la CABM dédiés à la gestion des offres d’emploi et ses sous-traitants techniques.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2 class="text-xl font-black uppercase tracking-widest text-primary mb-4 border-b border-highlight/30 pb-2 w-fit">8. Notification d’incident et Sécurité</h2>
|
||||
<div class="space-y-4 text-sm font-medium">
|
||||
<p>Aucune méthode de transmission sur Internet n'est sûre à 100 %. En cas de brèche de sécurité, nous avertirons les utilisateurs concernés.</p>
|
||||
<p>Pour assurer la confidentialité, nous utilisons des dispositifs standards :</p>
|
||||
<ul class="list-disc list-inside space-y-2 ml-2">
|
||||
<li>Pare-feu (Firewall).</li>
|
||||
<li>Pseudonymisation et chiffrement (Encryption).</li>
|
||||
<li>Accès sécurisés par mots de passe.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2 class="text-xl font-black uppercase tracking-widest text-primary mb-4 border-b border-highlight/30 pb-2 w-fit">9. Droit applicable et juridiction</h2>
|
||||
<div class="space-y-4 text-sm font-medium">
|
||||
<p>Tout litige en relation avec l’utilisation du site https://recruit.galiniere.net est soumis au droit français. Il est fait attribution exclusive de juridiction aux tribunaux compétents de Béziers.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-12 text-center">
|
||||
<Link href="/" class="inline-flex items-center gap-2 text-xs font-black uppercase tracking-widest text-primary hover:text-highlight transition-all">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M10 19l-7-7m0 0l7-7m-7 7h18" /></svg>
|
||||
Retour à l'accueil
|
||||
</Link>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="py-12 border-t border-anthracite/5 text-center">
|
||||
<p class="text-[10px] font-black uppercase tracking-[0.2em] text-anthracite/30">
|
||||
© {{ new Date().getFullYear() }} — Communauté d'Agglomération Béziers Méditerranée
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.prose h2 {
|
||||
margin-top: 0;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user