Files
LoreMind/web/src/styles.scss
IETM_FIXE\ietm6 a9242ba1e1
All checks were successful
Build & Push Images / build (brain) (push) Successful in 1m27s
Build & Push Images / build (web) (push) Successful in 1m50s
Build & Push Images / build (core) (push) Successful in 3m29s
Build & Push Images / build-switcher (push) Successful in 18s
Nettoyage post-revue : factorisation, code mort et fiabilité (reorder/lore/foundry/PDF)
Corrections fonctionnelles
- order initialisé à la création des pages et dossiers de lore (nextOrderFor) :
  un nouvel élément se place désormais en dernier de sa fratrie au lieu de 0
- storePortrait : type MIME canonique dérivé de l'extension du fichier
  (un data URL "image/jpg" n'est plus rejeté silencieusement)
- takeUntilDestroyed ajouté sur les abonnements paramMap de arc-view,
  folder-view et campaign-detail (fuites mémoire)

Factorisation (suppression de duplication)
- shared/folder-grouping.util.ts : groupByFolder + byOrder + byFolderName
  mutualisés entre npc-list, enemy-list, campaign-detail et la sidebar
  (folderChildren). Le tri des dossiers est désormais cohérent entre la
  sidebar et les vues cartes (insensible casse/accents partout)
- DataSyncService.onChange()/persist() remplacent le câblage
  changed$ + reorder recopié dans 5 vues
- campaign-detail : loadCampaignBundle()/applyCampaignBundle() éliminent
  le forkJoin dupliqué entre ngOnInit et reload
- ReorderSupport (domain/shared) : squelette générique remplaçant les
  8 boucles de réordonnancement copiées dans les services
- FoundryExportService : GameSystem résolu une seule fois dans buildBundle
- module Foundry : walkScalars mutualise la récursion de flattenStats et
  flattenStructure (comportements préservés) ; esc() de l'importer aligné
  sur foundry.utils.escapeHTML

Suppression de code mort
- characterService/characters retirés de loadCampaignTreeData et de ses
  16 appelants (arguments, injections, imports et littéraux CampaignTreeData)
- CSS orphelin : .tree-row.cdk-drop-list-receiving et .btn-back
- BottomPanel.initiallyOpen (jamais lu) retiré de l'interface et de l'appelant
- commentaire trompeur du PDF corrigé

Tests
- mise à jour de 3 tests obsolètes de campaign-tree.helper.spec qui
  vérifiaient encore l'ancien comportement (tri alphabétique, non-classés
  en enfants directs) → alignés sur le modèle actuel (tri par order +
  pseudo-dossier "Sans dossier")
2026-06-26 09:10:20 +02:00

67 lines
2.6 KiB
SCSS

// ==========================================================================
// Feuille de style globale — point d'entrée unique pour les règles partagées
// ==========================================================================
// Les partials dans @app/../styles/ contiennent les patterns réutilisés par
// plusieurs composants (boutons, champs de formulaire, etc.). Extraits ici
// pour éliminer la duplication qui existait dans 16+ fichiers SCSS.
@use './styles/buttons';
@use './styles/forms';
@use './styles/view';
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: #0a0a14;
color: #e0e0e0;
}
/* ===== Glisser-déposer (Angular CDK) — retours visuels GLOBAUX =====
Globaux car l'aperçu (cdk-drag-preview) est déplacé dans <body> : les styles
encapsulés des composants ne s'y appliquent pas. */
/* Aperçu qui suit le curseur : ligne compacte et opaque (jamais transparente). */
.cdk-drag-preview {
box-sizing: border-box;
border-radius: 6px;
background: #1b1b2b;
box-shadow: 0 8px 22px rgba(0, 0, 0, 0.55);
color: #e0e0e0;
font-size: 0.9rem;
padding: 2px 6px;
}
/* Ne pas traîner tout un sous-arbre déplié quand on déplace un dossier/arc/quête. */
.cdk-drag-preview .tree-children,
.cdk-drag-preview .node-actions { display: none; }
/* Emplacement cible : on GARDE la hauteur de la ligne (visibility, pas display) pour
qu'un vrai trou s'ouvre, et on affiche une barre d'insertion en pointillés. */
.cdk-drag-placeholder {
opacity: 1;
background: rgba(138, 123, 200, 0.18);
border: 1px dashed #8a7bc8;
border-radius: 4px;
box-sizing: border-box;
}
/* On masque le contenu (visibility = on garde la hauteur d'UNE ligne) mais on REPLIE
le sous-arbre (display:none) pour que le trou d'insertion fasse une seule ligne. */
.cdk-drag-placeholder > * { visibility: hidden; }
.cdk-drag-placeholder .tree-children { display: none; }
/* Les voisins glissent pour ouvrir/refermer l'espace pendant le déplacement. */
.cdk-drag-animating { transition: transform 180ms cubic-bezier(0, 0, 0.2, 1); }
.cdk-drop-list-dragging .cdk-drag:not(.cdk-drag-placeholder) {
transition: transform 180ms cubic-bezier(0, 0, 0.2, 1);
}
/* Curseurs de préhension (le drag part de la poignée). */
[cdkDrag] { cursor: default; }
.cdk-drag-handle, [cdkDragHandle] { cursor: grab; }
.cdk-drag-handle:active, [cdkDragHandle]:active { cursor: grabbing; }
/* Surbrillance d'une zone de dépôt qui reçoit un élément (ex: page sur dossier). */
.cdk-drop-list-receiving { outline: 2px dashed #6c63ff; outline-offset: 2px; }