cinqcinqdev-seo 0.1.31 → 0.1.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -65,7 +65,7 @@ const saveBrandingData = async () => {
65
65
  <p class="text-slate-500 mt-1">Gerez l'identite visuelle et la voix de votre marque</p>
66
66
  </div>
67
67
  <div class="flex gap-3">
68
- <div class="flex gap-2 bg-background p-1.5 rounded-xl border border-slate-200">
68
+ <div class="flex gap-2 bg-white p-1.5 rounded-xl border border-slate-200">
69
69
  <button @click="viewMode = 'edit'" :class="[viewMode === 'edit' ? 'bg-blue-600 text-white' : 'text-slate-600 hover:bg-slate-50']" class="px-4 py-2 rounded-lg font-semibold text-sm transition-all flex items-center gap-2">
70
70
  <Icon name="mdi:pencil" /> Edit
71
71
  </button>
@@ -88,7 +88,7 @@ const saveBrandingData = async () => {
88
88
  <h2 class="text-3xl font-bold mb-2">{{ brandingData.brand_name || "Votre Marque" }}</h2>
89
89
  <p class="text-blue-100 text-lg">{{ brandingData.tagline || "Votre tagline" }}</p>
90
90
  </div>
91
- <img v-if="brandingData.logo_primary_url" :src="brandingData.logo_primary_url" alt="Logo" class="h-16 w-auto bg-background p-2 rounded-xl" />
91
+ <img v-if="brandingData.logo_primary_url" :src="brandingData.logo_primary_url" alt="Logo" class="h-16 w-auto bg-white p-2 rounded-xl" />
92
92
  </div>
93
93
  <div class="grid grid-cols-2 gap-6">
94
94
  <div>
@@ -102,7 +102,7 @@ const saveBrandingData = async () => {
102
102
  </div>
103
103
  </div>
104
104
 
105
- <div class="bg-background rounded-3xl p-8 border border-slate-200">
105
+ <div class="bg-white rounded-3xl p-8 border border-slate-200">
106
106
  <h2 class="text-2xl font-bold text-slate-900 mb-6 flex items-center gap-2">
107
107
  <Icon name="mdi:palette" class="text-blue-600" /> Palette de Couleurs
108
108
  </h2>
@@ -115,7 +115,7 @@ const saveBrandingData = async () => {
115
115
  </div>
116
116
  </div>
117
117
 
118
- <div class="bg-background rounded-3xl p-8 border border-slate-200">
118
+ <div class="bg-white rounded-3xl p-8 border border-slate-200">
119
119
  <h2 class="text-2xl font-bold text-slate-900 mb-6 flex items-center gap-2">
120
120
  <Icon name="mdi:microphone" class="text-blue-600" /> Voix & Messaging
121
121
  </h2>
@@ -135,7 +135,7 @@ const saveBrandingData = async () => {
135
135
  </div>
136
136
  </div>
137
137
 
138
- <div class="bg-background rounded-3xl p-8 border border-slate-200">
138
+ <div class="bg-white rounded-3xl p-8 border border-slate-200">
139
139
  <h2 class="text-2xl font-bold text-slate-900 mb-6 flex items-center gap-2">
140
140
  <Icon name="mdi:link" class="text-blue-600" /> Ressources
141
141
  </h2>
@@ -160,7 +160,7 @@ const saveBrandingData = async () => {
160
160
 
161
161
  <!-- Edit View -->
162
162
  <div v-if="viewMode === 'edit'">
163
- <div class="flex gap-2 bg-background p-2 rounded-2xl border border-slate-200 inline-flex mb-8">
163
+ <div class="flex gap-2 bg-white p-2 rounded-2xl border border-slate-200 inline-flex mb-8">
164
164
  <button @click="activeTab = 'visual'" :class="[activeTab === 'visual' ? 'bg-blue-600 text-white shadow-lg' : 'text-slate-600 hover:bg-slate-50']" class="px-5 py-2.5 rounded-xl font-semibold text-sm transition-all flex items-center gap-2">
165
165
  <Icon name="mdi:palette" /> Identite Visuelle
166
166
  </button>
@@ -170,7 +170,7 @@ const saveBrandingData = async () => {
170
170
  </div>
171
171
 
172
172
  <div v-if="activeTab === 'visual'" class="space-y-8">
173
- <div class="bg-background rounded-3xl p-8 border border-slate-200">
173
+ <div class="bg-white rounded-3xl p-8 border border-slate-200">
174
174
  <h2 class="text-xl font-bold text-slate-900 mb-6">Informations de Base</h2>
175
175
  <div class="grid grid-cols-2 gap-6">
176
176
  <div>
@@ -184,7 +184,7 @@ const saveBrandingData = async () => {
184
184
  </div>
185
185
  </div>
186
186
 
187
- <div class="bg-background rounded-3xl p-8 border border-slate-200">
187
+ <div class="bg-white rounded-3xl p-8 border border-slate-200">
188
188
  <h2 class="text-xl font-bold text-slate-900 mb-6">Logos (URLs)</h2>
189
189
  <div class="grid grid-cols-2 gap-6">
190
190
  <div v-for="[key, label] in [['logo_primary_url', 'Logo Principal'], ['logo_secondary_url', 'Logo Secondaire'], ['logo_icon_url', 'Icone'], ['logo_white_url', 'Logo Blanc']]" :key="key">
@@ -197,7 +197,7 @@ const saveBrandingData = async () => {
197
197
  </div>
198
198
  </div>
199
199
 
200
- <div class="bg-background rounded-3xl p-8 border border-slate-200">
200
+ <div class="bg-white rounded-3xl p-8 border border-slate-200">
201
201
  <h2 class="text-xl font-bold text-slate-900 mb-6">Palette de Couleurs</h2>
202
202
  <div class="grid grid-cols-2 md:grid-cols-5 gap-6">
203
203
  <div v-for="[key, label] in [['color_primary', 'Principale'], ['color_secondary', 'Secondaire'], ['color_accent', 'Accent'], ['color_text', 'Texte'], ['color_background', 'Fond']]" :key="key">
@@ -210,7 +210,7 @@ const saveBrandingData = async () => {
210
210
  </div>
211
211
  </div>
212
212
 
213
- <div class="bg-background rounded-3xl p-8 border border-slate-200">
213
+ <div class="bg-white rounded-3xl p-8 border border-slate-200">
214
214
  <h2 class="text-xl font-bold text-slate-900 mb-6">Typographie</h2>
215
215
  <div class="grid grid-cols-3 gap-6">
216
216
  <div v-for="[key, label] in [['font_heading', 'Police Titres'], ['font_body', 'Police Corps'], ['font_accent', 'Police Accent']]" :key="key">
@@ -220,7 +220,7 @@ const saveBrandingData = async () => {
220
220
  </div>
221
221
  </div>
222
222
 
223
- <div class="bg-background rounded-3xl p-8 border border-slate-200">
223
+ <div class="bg-white rounded-3xl p-8 border border-slate-200">
224
224
  <h2 class="text-xl font-bold text-slate-900 mb-6">Liens</h2>
225
225
  <div class="grid grid-cols-2 gap-6">
226
226
  <div>
@@ -236,7 +236,7 @@ const saveBrandingData = async () => {
236
236
  </div>
237
237
 
238
238
  <div v-if="activeTab === 'voice'" class="space-y-8">
239
- <div class="bg-background rounded-3xl p-8 border border-slate-200">
239
+ <div class="bg-white rounded-3xl p-8 border border-slate-200">
240
240
  <h2 class="text-xl font-bold text-slate-900 mb-6">Identite de Base</h2>
241
241
  <div class="space-y-6">
242
242
  <div v-for="[key, label, ph] in [['mission', 'Mission', 'Pourquoi votre entreprise existe...'], ['vision', 'Vision', 'Ou vous voulez aller...'], ['brand_story', 'Histoire de la Marque', 'Racontez votre histoire...']]" :key="key">
@@ -246,7 +246,7 @@ const saveBrandingData = async () => {
246
246
  </div>
247
247
  </div>
248
248
 
249
- <div class="bg-background rounded-3xl p-8 border border-slate-200">
249
+ <div class="bg-white rounded-3xl p-8 border border-slate-200">
250
250
  <h2 class="text-xl font-bold text-slate-900 mb-6">Proposition de Valeur</h2>
251
251
  <div class="space-y-6">
252
252
  <div v-for="[key, label, ph] in [['unique_value_proposition', 'UVP', 'Ce qui vous differencie...'], ['elevator_pitch', 'Elevator Pitch', 'Votre pitch en 30 secondes...'], ['voice_description', 'Voix de Marque', 'Comment votre marque sonne...']]" :key="key">
@@ -256,7 +256,7 @@ const saveBrandingData = async () => {
256
256
  </div>
257
257
  </div>
258
258
 
259
- <div class="bg-background rounded-3xl p-8 border border-slate-200">
259
+ <div class="bg-white rounded-3xl p-8 border border-slate-200">
260
260
  <h2 class="text-xl font-bold text-slate-900 mb-6">Positionnement</h2>
261
261
  <div class="grid grid-cols-2 gap-6">
262
262
  <div>
@@ -93,7 +93,7 @@ onMounted(async () => {
93
93
 
94
94
  <Teleport to="body">
95
95
  <div v-if="showModal" class="fixed inset-0 bg-black/50 backdrop-blur-sm z-50 flex items-center justify-center p-4" @click.self="closeModal">
96
- <div class="bg-background rounded-[2rem] shadow-2xl max-w-3xl w-full max-h-[90vh] overflow-y-auto">
96
+ <div class="bg-white rounded-[2rem] shadow-2xl max-w-3xl w-full max-h-[90vh] overflow-y-auto">
97
97
  <div class="p-8">
98
98
  <div class="flex justify-between items-center mb-6">
99
99
  <h2 class="text-2xl font-black text-slate-900">{{ editingContent ? "Modifier le Contenu" : "Nouveau Contenu" }}</h2>
@@ -60,7 +60,7 @@ const enrichContent = (c) => {
60
60
  review: "bg-orange-100 text-orange-600",
61
61
  approved: "bg-blue-100 text-blue-700",
62
62
  published: "bg-emerald-100 text-emerald-700",
63
- archived: "bg-mgray-100 text-mgray-500"
63
+ archived: "bg-gray-100 text-gray-500"
64
64
  };
65
65
  const labelMap = { draft: "Idee", review: "Revision", approved: "Planifie", published: "Publie", archived: "Archive" };
66
66
  return {
@@ -151,7 +151,7 @@ const handleDelete = async (content) => {
151
151
  <h1 class="text-4xl font-black text-slate-900">Content Library</h1>
152
152
  <p class="text-slate-500 mt-1">Gerez votre arsenal de contenus</p>
153
153
  </div>
154
- <div class="flex items-center gap-3 bg-background p-2 rounded-2xl border border-slate-200 shadow-sm">
154
+ <div class="flex items-center gap-3 bg-white p-2 rounded-2xl border border-slate-200 shadow-sm">
155
155
  <button @click="viewMode = 'columns'" :class="[viewMode === 'columns' ? 'bg-emerald-600 text-white shadow-lg' : 'text-slate-500 hover:bg-slate-50']" class="px-5 py-2.5 rounded-xl text-xs font-black uppercase transition-all flex items-center gap-2">
156
156
  <Icon name="mdi:view-column" /> Colonnes
157
157
  </button>
@@ -162,7 +162,7 @@ const handleDelete = async (content) => {
162
162
  </div>
163
163
 
164
164
  <div class="grid grid-cols-2 lg:grid-cols-5 gap-4 mb-8">
165
- <div v-for="stat in stats" :key="stat.label" class="bg-background p-5 rounded-2xl border border-slate-100 shadow-sm">
165
+ <div v-for="stat in stats" :key="stat.label" class="bg-white p-5 rounded-2xl border border-slate-100 shadow-sm">
166
166
  <div :class="[stat.bg, 'w-10 h-10 rounded-xl flex items-center justify-center mb-3']">
167
167
  <Icon :name="stat.icon" :class="[stat.color, 'text-xl']" />
168
168
  </div>
@@ -175,7 +175,7 @@ const handleDelete = async (content) => {
175
175
  <div v-if="viewMode === 'columns'" class="overflow-x-auto pb-6">
176
176
  <div class="flex gap-6 min-w-max">
177
177
  <div v-for="platform in platforms" :key="platform" class="flex-shrink-0 w-80">
178
- <div class="bg-background rounded-2xl border border-slate-200 overflow-hidden shadow-sm">
178
+ <div class="bg-white rounded-2xl border border-slate-200 overflow-hidden shadow-sm">
179
179
  <div class="p-5 border-b border-slate-100 bg-slate-50">
180
180
  <div class="flex items-center justify-between mb-2">
181
181
  <div class="flex items-center gap-3">
@@ -192,7 +192,7 @@ const handleDelete = async (content) => {
192
192
  </div>
193
193
  <div class="p-4 space-y-3 max-h-96 overflow-y-auto">
194
194
  <div v-for="content in getContentByPlatform(platform)" :key="content.id"
195
- class="bg-background border-2 border-slate-100 rounded-xl p-4 hover:border-blue-300 hover:shadow-md transition-all cursor-pointer group"
195
+ class="bg-white border-2 border-slate-100 rounded-xl p-4 hover:border-blue-300 hover:shadow-md transition-all cursor-pointer group"
196
196
  @click="openEdit(content)">
197
197
  <span :class="['px-2 py-1 rounded-lg text-[9px] font-black uppercase', content.statusClass]">{{ content.statusLabel }}</span>
198
198
  <p class="font-bold text-slate-900 text-sm mt-2 line-clamp-2 group-hover:text-blue-600 transition-colors">{{ content.title }}</p>
@@ -214,7 +214,7 @@ const handleDelete = async (content) => {
214
214
 
215
215
  <!-- Table View -->
216
216
  <div v-else class="space-y-4">
217
- <div class="bg-background rounded-2xl p-4 border border-slate-200 shadow-sm space-y-4">
217
+ <div class="bg-white rounded-2xl p-4 border border-slate-200 shadow-sm space-y-4">
218
218
  <div class="flex flex-wrap items-center justify-between gap-4">
219
219
  <div class="flex gap-2">
220
220
  <button v-for="tab in tabs" :key="tab" @click="activeTab = tab"
@@ -232,7 +232,7 @@ const handleDelete = async (content) => {
232
232
  </div>
233
233
  </div>
234
234
 
235
- <div class="bg-background rounded-2xl border border-slate-200 overflow-hidden shadow-sm">
235
+ <div class="bg-white rounded-2xl border border-slate-200 overflow-hidden shadow-sm">
236
236
  <table class="w-full text-left">
237
237
  <thead class="bg-slate-50 border-b border-slate-200">
238
238
  <tr>
@@ -278,10 +278,10 @@ const handleDelete = async (content) => {
278
278
  <!-- Modal -->
279
279
  <Teleport to="body">
280
280
  <div v-if="showModal" class="fixed inset-0 bg-slate-900/60 backdrop-blur-lg z-50 flex items-center justify-center p-4">
281
- <div class="bg-background rounded-[2rem] max-w-4xl w-full max-h-[95vh] overflow-hidden shadow-2xl flex flex-col">
281
+ <div class="bg-white rounded-[2rem] max-w-4xl w-full max-h-[95vh] overflow-hidden shadow-2xl flex flex-col">
282
282
  <div class="bg-gradient-to-r from-slate-900 to-slate-800 p-8 text-white flex justify-between items-center">
283
283
  <h2 class="text-2xl font-black">{{ editingContent ? "Editer le Contenu" : "Nouveau Contenu" }}</h2>
284
- <button @click="closeModal" class="w-12 h-12 bg-background/10 hover:bg-red-500 rounded-2xl flex items-center justify-center transition-all">
284
+ <button @click="closeModal" class="w-12 h-12 bg-white/10 hover:bg-red-500 rounded-2xl flex items-center justify-center transition-all">
285
285
  <Icon name="mdi:close" class="text-2xl" />
286
286
  </button>
287
287
  </div>
@@ -295,7 +295,7 @@ const handleDelete = async (content) => {
295
295
  <label class="text-xs font-black uppercase text-slate-500 mb-2 block">Plateforme</label>
296
296
  <div class="grid grid-cols-3 gap-2">
297
297
  <button v-for="p in platforms" :key="p" @click="formData.platform = p"
298
- :class="[formData.platform === p ? 'bg-blue-600 text-white scale-105' : 'bg-background border-2 border-slate-200 text-slate-600 hover:border-blue-300']"
298
+ :class="[formData.platform === p ? 'bg-blue-600 text-white scale-105' : 'bg-white border-2 border-slate-200 text-slate-600 hover:border-blue-300']"
299
299
  class="px-3 py-2 rounded-xl text-xs font-black uppercase transition-all">{{ p }}</button>
300
300
  </div>
301
301
  </div>
@@ -303,7 +303,7 @@ const handleDelete = async (content) => {
303
303
  <label class="text-xs font-black uppercase text-slate-500 mb-2 block">Type Instagram</label>
304
304
  <div class="grid grid-cols-2 gap-2">
305
305
  <button v-for="t in instagramTypes" :key="t" @click="formData.instagram_type = t"
306
- :class="[formData.instagram_type === t ? 'bg-pink-600 text-white' : 'bg-background border-2 border-slate-200 text-pink-600 hover:border-pink-300']"
306
+ :class="[formData.instagram_type === t ? 'bg-pink-600 text-white' : 'bg-white border-2 border-slate-200 text-pink-600 hover:border-pink-300']"
307
307
  class="px-3 py-2 rounded-xl text-xs font-black uppercase transition-all">{{ t }}</button>
308
308
  </div>
309
309
  </div>
@@ -319,7 +319,7 @@ const handleDelete = async (content) => {
319
319
  <div class="grid grid-cols-2 gap-4">
320
320
  <div>
321
321
  <label class="text-xs font-black uppercase text-slate-500 mb-2 block">Persona</label>
322
- <select v-model="formData.persona_id" @change="updatePersonaName" class="w-full bg-background border-2 border-slate-200 rounded-xl px-4 py-3 font-bold text-slate-700">
322
+ <select v-model="formData.persona_id" @change="updatePersonaName" class="w-full bg-white border-2 border-slate-200 rounded-xl px-4 py-3 font-bold text-slate-700">
323
323
  <option value="">Generique</option>
324
324
  <option v-for="p in personas" :key="p.id" :value="p.id">{{ p.name }}</option>
325
325
  </select>
@@ -329,7 +329,7 @@ const handleDelete = async (content) => {
329
329
  <div class="grid grid-cols-2 gap-1.5">
330
330
  <button v-for="s in [{ v: 'draft', l: 'Idee' }, { v: 'review', l: 'Revision' }, { v: 'approved', l: 'Planifie' }, { v: 'published', l: 'Publie' }, { v: 'archived', l: 'Archive' }]" :key="s.v"
331
331
  @click="formData.status = s.v"
332
- :class="[formData.status === s.v ? 'bg-blue-600 text-white scale-105' : 'bg-background border-2 border-slate-200 text-slate-600 hover:border-blue-300']"
332
+ :class="[formData.status === s.v ? 'bg-blue-600 text-white scale-105' : 'bg-white border-2 border-slate-200 text-slate-600 hover:border-blue-300']"
333
333
  class="px-3 py-2 rounded-xl text-[10px] font-black uppercase transition-all">{{ s.l }}</button>
334
334
  </div>
335
335
  </div>
@@ -337,16 +337,16 @@ const handleDelete = async (content) => {
337
337
  <div class="grid grid-cols-2 gap-4">
338
338
  <div>
339
339
  <label class="text-xs font-black uppercase text-slate-500 mb-2 block">Date prevue</label>
340
- <input v-model="formData.scheduled_date" type="datetime-local" class="w-full bg-background border-2 border-indigo-200 rounded-xl px-4 py-3 font-bold text-indigo-900" />
340
+ <input v-model="formData.scheduled_date" type="datetime-local" class="w-full bg-white border-2 border-indigo-200 rounded-xl px-4 py-3 font-bold text-indigo-900" />
341
341
  </div>
342
342
  <div>
343
343
  <label class="text-xs font-black uppercase text-slate-500 mb-2 block">URL publie</label>
344
- <input v-model="formData.content_url" type="url" placeholder="https://..." class="w-full bg-background border-2 border-cyan-200 rounded-xl px-4 py-3 font-bold text-cyan-900" />
344
+ <input v-model="formData.content_url" type="url" placeholder="https://..." class="w-full bg-white border-2 border-cyan-200 rounded-xl px-4 py-3 font-bold text-cyan-900" />
345
345
  </div>
346
346
  </div>
347
347
  </div>
348
348
  <div class="p-6 bg-slate-50 border-t-2 border-slate-200 flex justify-end gap-3">
349
- <button @click="closeModal" class="px-8 py-3 rounded-xl font-black text-sm uppercase text-slate-600 bg-background border-2 border-slate-200 hover:bg-slate-100 transition-all">Annuler</button>
349
+ <button @click="closeModal" class="px-8 py-3 rounded-xl font-black text-sm uppercase text-slate-600 bg-white border-2 border-slate-200 hover:bg-slate-100 transition-all">Annuler</button>
350
350
  <button @click="saveContent" :disabled="saving" class="bg-gradient-to-r from-blue-600 to-purple-600 text-white px-12 py-3 rounded-xl font-black text-sm uppercase shadow-xl disabled:opacity-50 flex items-center gap-2">
351
351
  <Icon :name="saving ? 'mdi:loading' : 'mdi:content-save'" :class="{ 'animate-spin': saving }" />
352
352
  {{ saving ? "Enregistrement..." : editingContent ? "Mettre a Jour" : "Creer" }}