# Fonctionnalités par écran — Obsidienne

---

## 1. Shell principal (App)

### Header
- Bouton hamburger (☰) pour ouvrir/fermer la sidebar
- Logo "⚔ MINUTEUR DRAGODINDE"
- Sous-titre "Dofus 3 · Gestion multi-enclos en temps réel · vX.X.X"
- Version injectée dynamiquement via Electron API
- Badge "DEV" en mode développement

### Barre d'onglets
- Onglet Dashboard (📊)
- Un onglet par enclos :
  - Icône 🐉 + nom de l'enclos
  - Dot animé : vert pulsant si timer en cours, gris si inactif
  - Bouton supprimer (✕), visible si plus d'1 enclos
  - Drag-and-drop pour réordonner les onglets
- Bouton "+ Enclos" (désactivé si max atteint)

### Bannière de mise à jour
- États : disponible → téléchargement (barre de progression %) → prête → erreur
- Bouton "Installer et redémarrer"
- Bouton fermer (✕) sur erreur

### Zoom clavier
- Ctrl + (+) : zoom avant
- Ctrl + (-) : zoom arrière
- Ctrl + 0 : reset 100%

---

## 2. Sidebar — Navigation latérale

- **Dashboard** (📊)
- **Section "Enclos"** : liste dynamique de chaque enclos
  - Icône 🐉 + nom + dot coloré (vert=running, gris=idle)
- **Section "Outils"** :
  - Accouplement (💑)
  - Réappro (🧬)
  - Inventaire (📦)
  - Workflows (📋)
- **Paramètres** (⚙)
- Indicateur visuel de la vue active
- Fermeture auto au clic sur l'overlay

---

## 3. Dashboard — Vue d'ensemble

### Cartes des enclos
Pour chaque enclos :
- Nom de l'enclos
- Dot animé + statut textuel ("En cours" / "Pause" / "Inactif")
- Liste des jauges actives (badges colorés avec icônes)
- Nombre de dragodindes + terminées (ex: "5 DD · 3/5 ✅")
- Temps restant (countdown live) ou "✅ Terminé !"
- Temps écoulé (live)
- Bouton "→ Gérer cet enclos" (navigation)

### Statistiques globales
- **KPI** :
  - Bébés au total
  - Dragodindes actives
  - Couples accouplés
  - Taux de réussite (%)
  - Races obtenues
- **Histogramme des races** : barres horizontales triées par quantité, colorées par race
- **Bouton "Réinitialiser"** : efface stats et accouplements

### Temps réel
- Countdowns et temps écoulés mis à jour en continu
- Dots animés sur les enclos en cours

---

## 4. Enclos — Vue timer principale

### En-tête
- **Nom de l'enclos** : input éditable (focus vide, blur sauvegarde, Escape annule, Enter valide)
- **Bouton "🗑 Vider l'enclos"** : supprime toutes les DD et reset

### Carte Jauges (max 2 actives)
- **6 boutons toggle** : Baffeur (➖), Caresseur (➕), Foudroyeur (⚡), Abreuvoir (💧), Dragofesse (❤), Mangeoire (🍖)
  - État actif : bordure colorée
  - Verrouillé si timer en cours
  - **Exclusion mutuelle** baffeur ↔ caresseur (l'un bloque l'autre)
- **Par jauge active** :
  - Icône + nom + badge Tier ("Tier X · ±Y/tick")
  - Input niveau (0–100 000, step 1000)
    - Avant timer : modifie le niveau
    - Pendant timer : recharge la jauge (style visuel distinct)
  - Barre de progression (% de remplissage)
  - Info : "Jauge : {niveau} · Vide en {durée}"

### Barre timer
- **Bouton** : "▶ Démarrer" / "⏸ Pause" / "▶ Reprendre"
- **Temps écoulé** (gauche) : HH:MM:SS live
- **Alarme dans** (droite) : countdown global ou "✅" ou "--:--:--"

### Bannière de fin
- "✅ Session terminée !" (visible quand toutes les cibles atteintes)
- Bouton "🔄 Nouvelle fournée" (reset timer, conserve les niveaux de jauges)

### Section Dragodindes
- Compteur "X/10"
- Bouton "＋ Ajouter une Dragodinde" (désactivé si 10 atteint)
- Grille de cartes DD (drag-and-drop pour réordonner)

---

## 5. Carte Dragodinde (sous-composant d'Enclos)

### En-tête
- Poignée de drag (⠿)
- Nom éditable (même comportement focus/blur)
- Bouton supprimer (✕)

### Pilules de stats (5)
| Stat | Icône | Plage | Couleur |
|------|-------|-------|---------|
| Sérénité | 😊 | -5000 à +5000 | Violet |
| Endurance | ⚡ | 0 à 20 000 | Jaune |
| Maturité | 💧 | 0 à 20 000 | Cyan |
| Amour | ❤️ | 0 à 20 000 | Rouge |
| XP (niveau) | ⭐ | 1 à 200 | Orange |

- Input éditable par pilule (focus/blur)
- Mise à jour live pendant le timer
- Effet lumineux (glow) quand la stat atteint un cap
- Animation delta (+X / -X) qui pop à chaque tick de 10s

### Cible sérénité (😊)
- Input numérique (bornes selon jauge active : négatif si baffeur, positif si caresseur)
- Bouton effacer (✕)
- ETA affiché : "~Xm XXs" ou "✅" ou "➕/➖" (si jauge nécessaire non active)
- Placeholder dynamique ("-5000 à 0" ou "0 à 5000")

### Cible niveau (⭐)
- Input numérique (1–200)
- Bouton effacer (✕)
- ETA affiché

### Blocs jauges actives
**Pour chaque jauge active :**

**Mangeoire (XP) — bloc spécial :**
- En-tête : icône + "XP / NIVEAU"
- ETA niveau 200 : "→ NIV. 200 : ~Xj Xh"
- Barre de progression vers 200 + pourcentage
- Valeur live (NIV. X), delta (+X xp), countdown

**Autres jauges :**
- En-tête : icône + nom (coloré)
- Valeur live, delta (pop animé), countdown
- Barre de progression vers la cible

### Badge "✓ TERMINÉ"
- Affiché quand toutes les jauges actives de cette DD ont atteint leur cible

---

## 6. Accouplement — Enregistrement de croisements

### Étape 1 : Sélection du parent 1
- Barre de recherche (🔍) avec bouton effacer
- Filtres par génération (onglets colorés : Toutes, Gen 1–10)
- Grille de cartes race (image, nom, badge gen)
- Message vide si aucun résultat

### Étape 2 : Sélection du parent 2
- Bouton "← Retour"
- Carte du parent 1 affichée (non cliquable)
- Label "Choisir le partenaire :"
- Grille des partenaires compatibles uniquement
  - Chaque carte montre "→ {bébé}" en dessous

### Étape 3 : Résultat
- Bouton "← Retour"
- Affichage en ligne : Parent 1 + Parent 2 = Bébé (cartes avec images et badges gen)
- Input "Couples" (nombre)
- Input "Bébés obtenus" (nombre)
- Bouton "Enregistrer" → commande `register-accouplement`

---

## 7. Réapprovisionnement — Calcul de plan d'élevage

### Étape 1 : Sélection de la race cible
- Barre de recherche (🔍) avec bouton effacer
- Filtres par génération (Gen 2–10 uniquement)
- Grille de cartes race (gen 2+ seulement)

### Étape 2 : Plan d'élevage
- Bouton "← Retour"
- Carte cible + input quantité (mise à jour live du plan)

**Matériaux (Gen 1) :**
- Mini-cartes par race de base : image, nom, badge gen, ♂X ♀Y

**Étapes (Gen 2+) :**
Par génération, pour chaque croisement :
- En-tête "Étape X — Gen Y" (coloré)
- Affichage : Parent A + Parent B → Bébé (mini-cartes)
- Input "Reproducteurs" (nombre, par croisement)
- Bouton inversion ♂/♀ (swap la direction de reproduction)

**Actions :**
- Bouton "Sauvegarder le workflow"

---

## 8. Inventaire — Gestion du stock & simulation

### Saisie du stock
- Résumé : "X DD en stock (Y races)"
- Bouton "Réinitialiser" (remet tout à 0)
- Bouton "Calculer les bébés" (lance la simulation)
- Barre de recherche (🔍)
- Filtres par génération (Gen 1–10)
- Grille de cartes race :
  - Image, nom, badge gen
  - Input ♂ (mâles) + input ♀ (femelles)
  - Mise à jour du résumé en temps réel pendant la saisie
- Persistance automatique du stock entre les changements d'écran

### Résultats de simulation
- En-tête global : "{N} bébés possibles sur {G} génération(s)"
- Bouton "Sauvegarder le workflow"
- Par génération :
  - Badge gen + total bébés
  - Par croisement : Parent A (♂X ♀Y) + Parent B (♂X ♀Y) → Bébé (×Z)
- Section "DD restantes (non utilisées)" : mini-cartes du stock inutilisé

### Algorithme
- Allocation proportionnelle (pas glouton) : chaque parent est réparti équitablement entre les croisements qui l'utilisent
- Cascade multi-générations (Gen 2 → Gen 10)

---

## 9. Workflows — Suivi des plans d'élevage

### Vue liste
- Titre "Plans d'élevage"
- Barre de recherche (🔍)
- Filtres par génération (uniquement les gens qui ont des workflows)
- Message vide si aucun workflow

**Par carte workflow :**
- Image de la race cible + badge gen
- Nom du workflow (tronqué)
- "Cible × Quantité — Date de création"
- Barre de progression globale (colorée) + "X/Y — Z%"
- Bouton supprimer (✕)
- Clic → vue détail

### Vue détail
- Bouton "← Retour"
- **Carte d'en-tête** :
  - Image + badge gen
  - Nom, cible × quantité, date
  - Barre de progression globale + pourcentage

**Section Matériaux de base (si présents) :**
- Par matériau :
  - Nom de la race (coloré)
  - Mini barre de progression
  - Input de progression (nombre)
  - Label "X / Y"

**Sections par génération :**
- En-tête "Génération X" (coloré)
- Par croisement :
  - Nom race (coloré)
  - "ParentA × ParentB — X couples, repro ×Y"
  - Input de progression (nombre)
  - Label "X / Y"
  - Mini barre de progression

### Temps réel
- La barre de progression globale se met à jour pendant la saisie
- Les barres individuelles se mettent à jour en direct

---

## 10. Paramètres

### Carte 🔊 Son d'alarme
- Select : Arpège, Pulsation, Fanfare, Cloche
- Bouton ▶ (test du son sélectionné, joue directement via WebAudio)

### Carte 🔔 Notifications
- **Bouton Notifs PC** : "🔔 Notifs PC activées" / "🔕 Notifs PC désactivées" (toggle)
- **Bouton Mobile** : "📱 Mobile activé" / "📱 Activer mobile" (ouvre la modal)

### Modal ntfy (notifications mobiles)
**Si non activé :**
- Texte explicatif
- Bouton "🔔 Activer les notifications mobiles" (génère un topic automatique)

**Si activé :**
- ① QR code pour télécharger l'app ntfy (Play Store / App Store)
- ② QR code pour s'abonner automatiquement aux notifications
- Bouton "🔔 Tester" (envoie une notification de test)
- Bouton "✕ Désactiver" (supprime le topic)
- Bouton "Fermer"

---

## Comportements transversaux

### Focus/blur des inputs (tous les écrans)
- Focus : vide le champ, sauvegarde la valeur précédente
- Blur sans valeur : restaure la valeur précédente
- Blur avec valeur : applique et sauvegarde
- Escape : annule et restaure
- Enter : valide (blur)

### Système de timer
- Snapshot des jauges et stats au démarrage
- Calcul par segments (recharges en cours de session)
- Gel au cap absolu de chaque stat
- Alarme unique quand toutes les cibles sont atteintes (son + notification PC + ntfy mobile)
- Temps réel : requestAnimationFrame continu

### Persistance
- Sauvegarde automatique après chaque mutation d'état
- LocalStorage (web) ou fichier JSON (Electron userData)
- Isolation des données DEV / production

### Drag-and-drop
- Onglets enclos : réordonnancement par glisser-déposer
- Cartes dragodindes : réordonnancement dans le même enclos
