dd-timer/refonte_graphique/reapprovisionnement.html
POL Mickaël 62ae4c54eb feat: design Obsidienne + composants UI + toast/undo/backup
- Design system glassmorphism avec Material Design 3
- 14 composants : App, Sidebar, Dashboard, EnclosView, DragodindeCard,
  AccouplementView, ReapproView, InventaireView, WorkflowsView,
  StatistiquesView, ParametresView, UpdateBanner, Toast, ConfirmModal
- UndoManager pour annulation des actions destructives (Ctrl+Z)
- Toast notifications (success/error) avec bouton Annuler
- Modale de confirmation glassmorphism (remplace confirm() natif)
- Export/import global des données depuis Paramètres
- Maquettes HTML/PNG de la refonte graphique

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 05:43:20 +02:00

464 lines
24 KiB
HTML
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="dark" lang="fr"><head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>L'Archive d'Obsidienne - Réapprovisionnement</title>
<link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&amp;family=Inter:wght@300;400;500;600&amp;family=Material+Icons+Round&amp;display=swap" rel="stylesheet"/>
<script src="https://cdn.tailwindcss.com?plugins=forms,typography"></script>
<script>
tailwind.config = {
darkMode: "class",
theme: {
extend: {
colors: {
primary: "#9d4edd", // Amethyst Purple
"background-light": "#f8f9fa",
"background-dark": "#0d0b14", // Deep Obsidian
secondary: "#ff006e", // Pink accent
surface: "#1a1625",
},
fontFamily: {
display: ["Cinzel", "serif"],
sans: ["Inter", "sans-serif"],
},
borderRadius: {
DEFAULT: "0.5rem",
'xl': '1rem',
},
},
},
};
</script>
<style>
body {
font-family: 'Inter', sans-serif;
}
.font-display {
font-family: 'Cinzel', serif;
}
.glass-panel {
background: rgba(26, 22, 37, 0.7);
backdrop-filter: blur(12px);
border: 1px solid rgba(157, 78, 221, 0.2);
}
.scroll-custom::-webkit-scrollbar {
width: 6px;
}
.scroll-custom::-webkit-scrollbar-track {
background: transparent;
}
.scroll-custom::-webkit-scrollbar-thumb {
background: #3c3350;
border-radius: 10px;
}
.no-scrollbar::-webkit-scrollbar {
display: none;
}
.no-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
}
@keyframes pulse-bounce {
0%, 100% {
transform: translateY(0) scale(1);
opacity: 0.4;
}
50% {
transform: translateY(6px) scale(1.1);
opacity: 0.8;
}
}
.animate-pulse-bounce {
animation: pulse-bounce 2s ease-in-out infinite;
}
</style>
</head>
<body class="text-slate-800 dark:text-slate-200 min-h-screen" style="background: radial-gradient(circle at top right, #1e1b4b, #0a0a0f);">
<main class="flex flex-col h-screen overflow-hidden">
<header class="h-16 border-b border-slate-200 dark:border-white/10 flex items-center px-8 bg-white/50 dark:bg-surface/50 backdrop-blur-md sticky top-0 z-50">
<nav class="flex items-center gap-8 h-full">
<a class="h-full flex items-center text-sm font-bold tracking-widest text-slate-400 hover:text-primary transition-colors border-b-2 border-transparent uppercase font-display" href="#" style="">
Tableau de bord
</a>
<a class="h-full flex items-center text-sm font-bold tracking-widest text-slate-400 hover:text-primary transition-colors border-b-2 border-transparent uppercase font-display" href="#" style="">
Enclos
</a>
<a class="h-full flex items-center text-sm font-bold tracking-widest text-slate-400 hover:text-primary transition-colors border-b-2 border-transparent uppercase font-display" href="#" style="">
Statistiques
</a>
</nav>
<div class="ml-auto flex items-center gap-4">
<span class="text-[10px] bg-primary/20 text-primary px-2 py-0.5 rounded font-mono font-bold" style="">v1.1.5</span>
</div>
</header>
<div class="flex-1 overflow-y-auto p-8 scroll-custom space-y-12">
<!-- Target Selection -->
<section class="max-w-[1600px] mx-auto w-full space-y-6">
<div class="flex items-center justify-between">
<div>
<h2 class="text-xs uppercase tracking-[0.2em] text-slate-400 font-bold" style="">Sélectionne ta cible</h2>
<div class="h-1 w-12 bg-primary mt-1 rounded-full"></div>
</div>
<div class="flex gap-2 overflow-x-auto pb-2 no-scrollbar">
<button class="px-4 py-1.5 rounded-full text-xs font-semibold bg-primary text-white" style="">Toutes</button>
<button class="px-4 py-1.5 rounded-full text-xs font-semibold bg-slate-200 dark:bg-white/5 hover:bg-primary/20 transition-colors text-slate-600 dark:text-slate-400" style="">Gen 1</button>
<button class="px-4 py-1.5 rounded-full text-xs font-semibold bg-slate-200 dark:bg-white/5 hover:bg-primary/20 transition-colors text-slate-600 dark:text-slate-400" style="">Gen 2</button>
<button class="px-4 py-1.5 rounded-full text-xs font-semibold bg-slate-200 dark:bg-white/5 hover:bg-primary/20 transition-colors text-slate-600 dark:text-slate-400" style="">Gen 5</button>
<button class="px-4 py-1.5 rounded-full text-xs font-semibold bg-slate-200 dark:bg-white/5 hover:bg-primary/20 transition-colors text-slate-600 dark:text-slate-400" style="">Gen 10</button>
</div>
</div>
<div class="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-6 xl:grid-cols-10 gap-4" id="target-grid">
<div class="glass-panel p-3 rounded-xl border border-primary ring-2 ring-primary/50 relative cursor-pointer group hover:scale-105 transition-all">
<div class="absolute top-2 right-2 flex gap-1">
<span class="text-[9px] font-bold bg-primary text-white px-1.5 rounded shadow-sm" style="">Gen 5</span>
</div>
<div class="w-full aspect-square bg-slate-800/50 rounded-lg mb-2 flex items-center justify-center overflow-hidden">
<img alt="Dragodinde Pourpre" class="w-16 h-16 object-contain" src="https://lh3.googleusercontent.com/aida-public/AB6AXuAubvgfO9M_y6AI1RIslf8TR7z3dfXXDUaysxgQy9rn-mtjeRREg862eXeC5nazwn5SncSd6jgNY0vXdogwhX9_voY2jWgX836Z3f9zDY2_3tECSqV9xQ805xrIloAj2P8diUPNoH6rI8A1cpFkJlCepeUbic0VdZ5OY60vgWz_46pO2sWy29QZgsVTrgBrzvasr_bRJbqJ23IXw_tWOuSYdGYPI2mQY7M2oaYk6i0ZymH2DNkPzFxU-w0UrdcgTWmHq0doypPjC41D" style=""/>
</div>
<p class="text-xs font-bold text-center truncate" style="">Pourpre</p>
<div class="absolute inset-0 bg-primary/5 rounded-xl opacity-0 group-hover:opacity-100 transition-opacity"></div>
</div>
<!-- Other cards are injected via JS -->
</div>
</section>
<!-- Replenishment Plan -->
<section class="max-w-[1600px] mx-auto w-full space-y-6">
<div>
<h2 class="text-xs uppercase tracking-[0.2em] text-slate-400 font-bold" style="">Plan de Croisement</h2>
<div class="h-1 w-12 bg-secondary mt-1 rounded-full"></div>
</div>
<div class="space-y-4 pb-24">
<!-- GEN 1 -->
<div class="glass-panel rounded-2xl overflow-hidden border-l-4 border-l-primary">
<div class="bg-primary/10 px-6 py-3 flex justify-between items-center">
<h3 class="font-display text-sm tracking-wider flex items-center gap-2" style="">
<span class="bg-primary text-white w-6 h-6 rounded flex items-center justify-center text-xs" style="">1</span>
MATIÈRES PREMIÈRES — GÉNÉRATION 1
</h3>
<span class="text-xs text-slate-400 font-bold" style="">Total : 16 dragodindes requises</span>
</div>
<div class="p-8 flex flex-wrap gap-8 justify-center">
<div class="text-center group">
<div class="w-16 h-16 bg-slate-800 rounded-full border-2 border-amber-500 p-1 mb-2 shadow-lg transition-transform group-hover:scale-110">
<div class="w-full h-full rounded-full bg-amber-500/20"></div>
</div>
<p class="text-[10px] font-bold" style="">Amande ♂</p>
<p class="text-secondary font-bold text-sm" style="">×6</p>
</div>
<div class="text-center group">
<div class="w-16 h-16 bg-slate-800 rounded-full border-2 border-orange-500 p-1 mb-2 shadow-lg transition-transform group-hover:scale-110">
<div class="w-full h-full rounded-full bg-orange-500/20"></div>
</div>
<p class="text-[10px] font-bold" style="">Rousse ♂</p>
<p class="text-secondary font-bold text-sm" style="">×2</p>
</div>
<div class="text-center group">
<div class="w-16 h-16 bg-slate-800 rounded-full border-2 border-orange-500 p-1 mb-2 shadow-lg transition-transform group-hover:scale-110">
<div class="w-full h-full rounded-full bg-orange-500/20"></div>
</div>
<p class="text-[10px] font-bold" style="">Rousse ♀</p>
<p class="text-secondary font-bold text-sm" style="">×4</p>
</div>
<div class="text-center group">
<div class="w-16 h-16 bg-slate-800 rounded-full border-2 border-yellow-500 p-1 mb-2 shadow-lg transition-transform group-hover:scale-110">
<div class="w-full h-full rounded-full bg-yellow-500/20"></div>
</div>
<p class="text-[10px] font-bold" style="">Dorée ♀</p>
<p class="text-secondary font-bold text-sm" style="">×4</p>
</div>
</div>
</div>
<div class="flex justify-center py-2">
<span class="material-icons-round text-primary/40 animate-pulse-bounce" style="">expand_more</span>
</div>
<!-- GEN 2 -->
<div class="glass-panel rounded-2xl overflow-hidden border-l-4 border-l-slate-500">
<div class="bg-white/5 px-6 py-3 flex justify-between items-center">
<h3 class="font-display text-sm tracking-wider flex items-center gap-2" style="">
<span class="bg-slate-700 text-white w-6 h-6 rounded flex items-center justify-center text-xs" style="">2</span>
CROISEMENTS — GÉNÉRATION 2
</h3>
</div>
<div class="p-6 grid grid-cols-1 md:grid-cols-2 gap-6">
<!-- Pairing A -->
<div class="flex flex-col items-center gap-4 bg-white/5 p-4 rounded-xl border border-white/5 ring-1 ring-primary/30">
<div class="flex items-center gap-4">
<div class="text-center">
<div class="w-12 h-12 bg-slate-800 rounded-full border border-amber-500/50 mb-1"></div>
<p class="text-[8px] text-slate-400 uppercase" style="">Amande ♂</p>
</div>
<span class="material-icons-round text-slate-600 text-xs" style="">add</span>
<div class="text-center">
<div class="w-12 h-12 bg-slate-800 rounded-full border border-orange-500/50 mb-1"></div>
<p class="text-[8px] text-slate-400 uppercase" style="">Rousse ♀</p>
</div>
<span class="material-icons-round text-primary text-sm" style="">arrow_forward</span>
<div class="text-center">
<div class="w-14 h-14 bg-slate-800 rounded-full border-2 border-primary mb-1 relative flex items-center justify-center">
<span class="absolute -top-1 -right-1 bg-primary text-[7px] px-1 rounded font-bold" style="">G2</span>
<div class="w-8 h-8 rounded-full bg-primary/20"></div>
</div>
<p class="text-[9px] font-bold" style="">Amande &amp; Rousse</p>
</div>
</div>
<div class="flex items-center gap-4 pt-3 border-t border-white/5 w-full justify-center">
<label class="flex items-center gap-2 cursor-pointer group" style="">
<input checked="" class="rounded-sm border-slate-700 bg-slate-900 text-primary focus:ring-primary h-4 w-4" type="checkbox"/>
<span class="text-[10px] font-medium text-slate-400" style="">Reproducteur</span>
</label>
<div class="flex items-center gap-2 bg-slate-900/80 rounded-lg px-3 py-1 border border-white/5">
<input class="bg-transparent border-none text-xs w-8 p-0 focus:ring-0 text-center font-bold text-primary" type="number" value="3"/>
<span class="text-[8px] text-slate-500 uppercase font-bold tracking-wider" style="">Couples</span>
</div>
</div>
</div>
<!-- Pairing B -->
<div class="flex flex-col items-center gap-4 bg-white/5 p-4 rounded-xl border border-white/5 ring-1 ring-primary/30">
<div class="flex items-center gap-4">
<div class="text-center">
<div class="w-12 h-12 bg-slate-800 rounded-full border border-yellow-500/50 mb-1"></div>
<p class="text-[8px] text-slate-400 uppercase" style="">Dorée ♂</p>
</div>
<span class="material-icons-round text-slate-600 text-xs" style="">add</span>
<div class="text-center">
<div class="w-12 h-12 bg-slate-800 rounded-full border border-orange-500/50 mb-1"></div>
<p class="text-[8px] text-slate-400 uppercase" style="">Rousse ♀</p>
</div>
<span class="material-icons-round text-primary text-sm" style="">arrow_forward</span>
<div class="text-center">
<div class="w-14 h-14 bg-slate-800 rounded-full border-2 border-primary mb-1 relative flex items-center justify-center">
<span class="absolute -top-1 -right-1 bg-primary text-[7px] px-1 rounded font-bold" style="">G2</span>
<div class="w-8 h-8 rounded-full bg-amber-500/20"></div>
</div>
<p class="text-[9px] font-bold" style="">Dorée &amp; Rousse</p>
</div>
</div>
<div class="flex items-center gap-4 pt-3 border-t border-white/5 w-full justify-center">
<label class="flex items-center gap-2 cursor-pointer group" style="">
<input checked="" class="rounded-sm border-slate-700 bg-slate-900 text-primary focus:ring-primary h-4 w-4" type="checkbox"/>
<span class="text-[10px] font-medium text-slate-400" style="">Reproducteur</span>
</label>
<div class="flex items-center gap-2 bg-slate-900/80 rounded-lg px-3 py-1 border border-white/5">
<input class="bg-transparent border-none text-xs w-8 p-0 focus:ring-0 text-center font-bold text-primary" type="number" value="2"/>
<span class="text-[8px] text-slate-500 uppercase font-bold tracking-wider" style="">Couples</span>
</div>
</div>
</div>
</div>
</div>
<div class="flex justify-center py-2">
<span class="material-icons-round text-primary/40 animate-pulse-bounce" style="">expand_more</span>
</div>
<!-- GEN 3 -->
<div class="glass-panel rounded-2xl overflow-hidden border-l-4 border-l-slate-500">
<div class="bg-white/5 px-6 py-3 flex justify-between items-center">
<h3 class="font-display text-sm tracking-wider flex items-center gap-2" style="">
<span class="bg-slate-700 text-white w-6 h-6 rounded flex items-center justify-center text-xs" style="">3</span>
CROISEMENTS — GÉNÉRATION 3
</h3>
</div>
<div class="p-6">
<div class="flex flex-col items-center gap-4 bg-white/5 p-4 rounded-xl border border-white/5 max-w-md mx-auto ring-1 ring-primary/30">
<div class="flex items-center gap-4">
<div class="text-center">
<div class="w-12 h-12 bg-slate-800 rounded-full border border-purple-500/50 mb-1"></div>
<p class="text-[8px] text-slate-400 uppercase" style="">Amande/Rousse</p>
</div>
<span class="material-icons-round text-slate-600 text-xs" style="">add</span>
<div class="text-center">
<div class="w-12 h-12 bg-slate-800 rounded-full border border-amber-700/50 mb-1"></div>
<p class="text-[8px] text-slate-400 uppercase" style="">Dorée/Rousse</p>
</div>
<span class="material-icons-round text-primary text-sm" style="">arrow_forward</span>
<div class="text-center">
<div class="w-14 h-14 bg-slate-800 rounded-full border-2 border-primary mb-1 relative flex items-center justify-center">
<span class="absolute -top-1 -right-1 bg-primary text-[7px] px-1 rounded font-bold" style="">G3</span>
<div class="w-8 h-8 rounded-full bg-slate-900"></div>
</div>
<p class="text-[9px] font-bold" style="">Ebène</p>
</div>
</div>
<div class="flex items-center gap-4 pt-3 border-t border-white/5 w-full justify-center">
<label class="flex items-center gap-2 cursor-pointer group" style="">
<input checked="" class="rounded-sm border-slate-700 bg-slate-900 text-primary focus:ring-primary h-4 w-4" type="checkbox"/>
<span class="text-[10px] font-medium text-slate-400" style="">Reproducteur</span>
</label>
<div class="flex items-center gap-2 bg-slate-900/80 rounded-lg px-3 py-1 border border-white/5">
<input class="bg-transparent border-none text-xs w-8 p-0 focus:ring-0 text-center font-bold text-primary" type="number" value="2"/>
<span class="text-[8px] text-slate-500 uppercase font-bold tracking-wider" style="">Couples</span>
</div>
</div>
</div>
</div>
</div>
<div class="flex justify-center py-2">
<span class="material-icons-round text-primary/40 animate-pulse-bounce" style="">expand_more</span>
</div>
<!-- GEN 4 -->
<div class="glass-panel rounded-2xl overflow-hidden border-l-4 border-l-slate-500">
<div class="bg-white/5 px-6 py-3 flex justify-between items-center">
<h3 class="font-display text-sm tracking-wider flex items-center gap-2" style="">
<span class="bg-slate-700 text-white w-6 h-6 rounded flex items-center justify-center text-xs" style="">4</span>
CROISEMENTS — GÉNÉRATION 4
</h3>
</div>
<div class="p-6">
<div class="flex flex-col items-center gap-4 bg-white/5 p-4 rounded-xl border border-white/5 max-w-md mx-auto ring-1 ring-primary/30">
<div class="flex items-center gap-4">
<div class="text-center">
<div class="w-12 h-12 bg-slate-800 rounded-full border border-slate-900 mb-1"></div>
<p class="text-[8px] text-slate-400 uppercase" style="">Ebène ♂</p>
</div>
<span class="material-icons-round text-slate-600 text-xs" style="">add</span>
<div class="text-center">
<div class="w-12 h-12 bg-slate-800 rounded-full border border-blue-600/50 mb-1"></div>
<p class="text-[8px] text-slate-400 uppercase" style="">Indigo ♀</p>
</div>
<span class="material-icons-round text-primary text-sm" style="">arrow_forward</span>
<div class="text-center">
<div class="w-14 h-14 bg-slate-800 rounded-full border-2 border-primary mb-1 relative flex items-center justify-center">
<span class="absolute -top-1 -right-1 bg-primary text-[7px] px-1 rounded font-bold" style="">G4</span>
<div class="w-8 h-8 rounded-full bg-cyan-500/20"></div>
</div>
<p class="text-[9px] font-bold" style="">Turquoise</p>
</div>
</div>
<div class="flex items-center gap-4 pt-3 border-t border-white/5 w-full justify-center">
<label class="flex items-center gap-2 cursor-pointer group" style="">
<input checked="" class="rounded-sm border-slate-700 bg-slate-900 text-primary focus:ring-primary h-4 w-4" type="checkbox"/>
<span class="text-[10px] font-medium text-slate-400" style="">Reproducteur</span>
</label>
<div class="flex items-center gap-2 bg-slate-900/80 rounded-lg px-3 py-1 border border-white/5">
<input class="bg-transparent border-none text-xs w-8 p-0 focus:ring-0 text-center font-bold text-primary" type="number" value="1"/>
<span class="text-[8px] text-slate-500 uppercase font-bold tracking-wider" style="">Couples</span>
</div>
</div>
</div>
</div>
</div>
<div class="flex justify-center py-2">
<span class="material-icons-round text-primary animate-pulse-bounce" style="">expand_more</span>
</div>
<!-- FINAL STEP GEN 5 -->
<div class="glass-panel rounded-2xl overflow-hidden border-l-4 border-l-primary ring-1 ring-primary/20">
<div class="bg-primary/20 px-6 py-3 flex justify-between items-center">
<h3 class="font-display text-sm tracking-wider flex items-center gap-2" style="">
<span class="bg-primary text-white w-6 h-6 rounded flex items-center justify-center text-xs" style="">5</span>
ÉTAPE FINALE — GÉNÉRATION 5
</h3>
<span class="text-[10px] uppercase font-bold tracking-widest text-primary" style="">Objectif final</span>
</div>
<div class="p-8">
<div class="flex flex-col items-center gap-6 bg-primary/5 p-6 rounded-2xl border border-primary/20 opacity-60 grayscale-[0.5]">
<div class="flex items-center gap-8">
<div class="text-center">
<div class="w-16 h-16 bg-slate-800 rounded-full border-2 border-emerald-500/50 mb-1"></div>
<p class="text-[10px] text-slate-400" style="">Émeraude ♂</p>
</div>
<span class="material-icons-round text-slate-500" style="">add</span>
<div class="text-center">
<div class="w-16 h-16 bg-slate-800 rounded-full border-2 border-cyan-500/50 mb-1"></div>
<p class="text-[10px] text-slate-400" style="">Turquoise ♀</p>
</div>
<span class="material-icons-round text-primary" style="">arrow_forward</span>
<div class="text-center">
<div class="w-24 h-24 bg-slate-800 rounded-full border-4 border-primary mb-1 relative flex items-center justify-center shadow-xl shadow-primary/20">
<span class="absolute -top-2 -right-2 bg-primary text-xs px-2 py-0.5 rounded-full font-bold shadow-lg" style="">CIBLE</span>
<img alt="Pourpre" class="w-16 h-16 object-contain" src="https://lh3.googleusercontent.com/aida-public/AB6AXuAubvgfO9M_y6AI1RIslf8TR7z3dfXXDUaysxgQy9rn-mtjeRREg862eXeC5nazwn5SncSd6jgNY0vXdogwhX9_voY2jWgX836Z3f9zDY2_3tECSqV9xQ805xrIloAj2P8diUPNoH6rI8A1cpFkJlCepeUbic0VdZ5OY60vgWz_46pO2sWy29QZgsVTrgBrzvasr_bRJbqJ23IXw_tWOuSYdGYPI2mQY7M2oaYk6i0ZymH2DNkPzFxU-w0UrdcgTWmHq0doypPjC41D" style=""/>
</div>
<p class="text-sm font-bold text-slate-100 mt-2" style="">Pourpre</p>
<p class="text-secondary font-bold text-lg" style="">×1</p>
</div>
</div>
<div class="flex items-center gap-6 pt-4 border-t border-white/5 w-full justify-center">
<label class="flex items-center gap-3 cursor-pointer group" style="">
<input class="rounded-md border-slate-700 bg-slate-900 text-primary focus:ring-primary h-5 w-5 transition-all" type="checkbox"/>
<span class="text-sm font-medium text-slate-400 group-hover:text-slate-200 transition-colors" style="">Garder comme Reproducteur</span>
</label>
<div class="flex items-center gap-3 bg-slate-900/80 rounded-xl px-4 py-2 border border-white/5">
<span class="material-icons-round text-sm text-slate-500" style="">group</span>
<input class="bg-transparent border-none text-sm w-12 p-0 focus:ring-0 text-center font-bold text-primary" type="number" value="1"/>
<span class="text-[10px] text-slate-500 uppercase font-bold tracking-wider" style="">Couples</span>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
<footer class="p-6 border-t border-slate-200 dark:border-white/10 bg-white dark:bg-surface flex justify-between items-center shadow-2xl relative z-[60]">
<div class="flex items-center gap-4">
<div class="px-4 py-2 bg-slate-100 dark:bg-white/5 rounded-2xl flex items-center gap-4 border border-slate-200 dark:border-white/5">
<div class="w-10 h-10 rounded-full bg-gradient-to-br from-primary to-purple-700 flex items-center justify-center text-white shadow-lg">
<span class="material-icons-round" style="">auto_awesome</span>
</div>
<div>
<p class="text-[10px] text-slate-400 font-bold uppercase tracking-wider leading-none mb-1" style="">Cible de réapprovisionnement</p>
<p class="text-sm font-bold text-primary" style="">Pourpre (Génération 5)</p>
</div>
</div>
</div>
<div class="flex gap-4">
<button class="px-6 py-3 rounded-xl border border-slate-300 dark:border-white/10 font-bold text-sm hover:bg-slate-100 dark:hover:bg-white/5 transition-all text-slate-600 dark:text-slate-400" style="">
Annuler
</button>
<button class="px-10 py-3 rounded-xl bg-gradient-to-r from-primary to-purple-600 text-white font-bold text-sm flex items-center gap-3 shadow-xl shadow-primary/30 hover:shadow-primary/50 hover:-translate-y-1 active:translate-y-0 transition-all" style="">
<span class="material-icons-round text-lg" style="">save</span>
Sauvegarder ce plan
</button>
</div>
</footer>
</main>
<script>
// Mounts data for the grid
const targetGrid = document.getElementById('target-grid');
const mounts = [
{ name: 'Amande et Rousse', gen: 2, color: 'bg-amber-500' },
{ name: 'Dorée et Rousse', gen: 2, color: 'bg-amber-700' },
{ name: 'Ebène', gen: 3, color: 'bg-slate-900' },
{ name: 'Indigo', gen: 3, color: 'bg-blue-600' },
{ name: 'Turquoise', gen: 4, color: 'bg-cyan-500' },
{ name: 'Emeraude', gen: 5, color: 'bg-emerald-600' },
{ name: 'Prune', gen: 6, color: 'bg-fuchsia-800' },
{ name: 'Ivoire', gen: 7, color: 'bg-slate-100' },
{ name: 'Smaragdine', gen: 10, color: 'bg-emerald-400' }
];
mounts.forEach(m => {
const card = document.createElement('div');
card.className = "glass-panel p-3 rounded-xl border border-white/5 hover:border-primary/50 cursor-pointer group transition-all relative";
card.innerHTML = `
<div class="absolute top-2 right-2">
<span class="text-[9px] font-bold bg-slate-700 text-white px-1.5 rounded">Gen ${m.gen}</span>
</div>
<div class="w-full aspect-square bg-slate-800/30 rounded-lg mb-2 flex items-center justify-center overflow-hidden">
<div class="w-12 h-12 rounded-full ${m.color} opacity-40 blur-md group-hover:scale-125 transition-transform"></div>
</div>
<p class="text-xs font-medium text-center truncate dark:text-slate-400 group-hover:text-primary transition-colors">${m.name}</p>
`;
targetGrid.appendChild(card);
});
// Interactive state simulation for checkboxes
document.querySelectorAll('input[type="checkbox"]').forEach(checkbox => {
const updateState = (cb) => {
const parent = cb.closest('.flex-col');
if (!parent) return;
if (cb.checked) {
parent.classList.remove('opacity-60', 'grayscale-[0.5]');
parent.classList.add('ring-1', 'ring-primary/30');
} else {
parent.classList.add('opacity-60', 'grayscale-[0.5]');
parent.classList.remove('ring-1', 'ring-primary/30');
}
};
checkbox.addEventListener('change', (e) => updateState(e.target));
// Initial run
updateState(checkbox);
});
</script>
</body></html>