/* Couleurs des badges de classe de composant (militaire/civil/industriel/furtif/compétition,
   voir plus bas .part-class-badge) — variables locales à ce fichier, comme --gain/--warn dans
   main.css, avec une variante clarté pour le thème clair (même mécanisme que main.css). */
:root{
  --class-military:#D9534F; --class-civilian:#4F8FE0; --class-industrial:#B08B4F;
  --class-stealth:#9B6FD1; --class-competition:#4FB088;
}
@media (prefers-color-scheme: light){
  :root[data-theme="auto"]{
    --class-military:#B23B31; --class-civilian:#1E5FB0; --class-industrial:#8A6A2E;
    --class-stealth:#6B3FA0; --class-competition:#157A56;
  }
}
:root[data-theme="light"]{
  --class-military:#B23B31; --class-civilian:#1E5FB0; --class-industrial:#8A6A2E;
  --class-stealth:#6B3FA0; --class-competition:#157A56;
}

/* Onglet Vaisseaux : recherche + fiche technique (armes, bouclier, vitesse) */

/* Coquille applicative v14 (28 sept. 2026 — remplace la v10/v13 à 3 zones fixes côte à côte).
   Cripsis, après la v13 (qui avait déjà déplacé Bouclier/Générateur d'énergie/Refroidissement/
   Support vie vers la colonne de droite, mais gardait 3 zones fixes gauche/centre/droite) :
   « c'est pas le meme rendu [...] recopie la TOTALITER de la disposition du site ERKUL, mise en
   page, visuel ect ». Reconnaissance en direct sur https://erkul.games/calculator (DOM réel via
   getBoundingClientRect()/getComputedStyle(), pas juste des captures, 28 sept. 2026) : chez Erkul
   il n'y a PAS 3 colonnes fixes côte à côte. C'est UNE SEULE colonne centrée (.dash-content,
   max-width mesuré 1272px, soit 3 "pistes" de 413.33px + 2 x 16px de marge — recoupé exactement
   par le calcul (1272-32)/3=413.33), organisée en 3 sections empilées :
   1. une en-tête (recherche + identité du vaisseau) ;
   2. une rangée à 3 COLONNES ÉGALES juste en dessous (Damage/Defense/Hull, `.dash-center`,
      grid-template-columns mesuré "413.328px 413.328px 413.344px") ;
   3. une zone en "masonry" (empilement façon Pinterest, chaque carte casée dans la piste la moins
      remplie plutôt qu'alignée en grille rigide) qui contient TOUT le reste : chaque panneau porte
      un attribut `data-span="1"` ou `"2"` posé par LEUR JS (vérifié en lisant le DOM : le panneau
      Armament fait 843px = 2 pistes + 1 marge, Shields/Power plant/Coolers/Radar/Life support
      font chacun 413px = 1 piste, empilés dans la 3e piste).
   On reproduit ce même PRINCIPE (une colonne, 3 pistes de largeur égale, un algorithme de
   "masonry" qui case chaque carte selon sa hauteur réelle) plutôt que de recopier des pixels
   figés qui ne survivraient pas à nos propres données. Voir packMasonry()/blockSpan() dans
   ships.js pour l'algorithme. "Rien n'est supprimé" (règle absolue de Cripsis) : chaque bloc qui
   existait déjà — y compris les 2 sans équivalent chez Erkul, Gestion de l'énergie condensée et
   Carburant & contre-mesures, gardés par Cripsis dès la v12 — reste affiché, seulement replacé
   dans cette nouvelle disposition à une seule colonne.
   Correction au passage (constatée sur le DOM réel, contredit un commentaire v13 qui supposait
   l'inverse sans l'avoir mesuré) : chez Erkul, Radar est bien une carte ÉTROITE (1 piste) rangée
   avec Shields/Power plant/Coolers/Life support, PAS une carte large à côté de Quantum drive —
   voir MASONRY_SPAN_OVERRIDE dans ships.js. */
body.view-ships .page{
  /* v18 (28 sept. 2026) : ce plafond était fixé à 1900px depuis la v10 (déjà augmenté par rapport
     aux 1440px des 4 autres onglets, MAIS toujours un nombre fixe, choisi à l'époque sans mesurer
     l'écran réel de Cripsis). Nouvelles captures envoyées : sur son moniteur (visiblement plus
     large que 1900px — bandeau HUD "IPS N/A" typique d'un écran de jeu ultrawide/large format),
     un grand vide restait à droite même après le correctif v17 (qui n'avait retiré QUE le plafond
     intérieur de .ship-app, pas celui-ci, plus extérieur, sur .page lui-même). Message de Cripsis,
     rectangles rouges à l'appui : « Regarde les capture eux [Erkul] ça prend TOUT l'ecran et nous
     non ». Plafond retiré ici, UNIQUEMENT pour l'onglet Vaisseaux (les 4 autres onglets gardent
     1440px, inchangé, via layout.css) : .page utilise maintenant toute la largeur de l'écran, sans
     nombre fixe à deviner/re-deviner à chaque nouveau moniteur signalé. Sûr grâce au correctif v17
     déjà en place : packMasonry() (js/ships.js) fait déjà grandir le nombre de pistes avec la
     largeur réelle du conteneur pour garder chaque piste proche de 413-450px (la largeur mesurée
     chez Erkul) au lieu de laisser une seule piste s'étirer sans limite — vérifié explicitement
     jusqu'à 3440px de large (voir vérifications dans cargo-loop-contexte.md, section v18). */
  max-width:none;
}
.ship-app{
  display:flex;flex-direction:column;gap:16px;
  /* v17 (28 sept. 2026) : ce plafond était fixé à 1272px (largeur exacte de .dash-content mesurée
     chez Erkul), mais Erkul REMPLIT quand même tout l'écran de Cripsis grâce à sa propre colonne
     de navigation à gauche (~200-250px, jamais reproduite chez nous — notre barre d'onglets en
     haut joue ce rôle à la place) : leur page TOTALE est donc plus large que leurs seules 1272px
     de contenu, alors que la nôtre, sans cette colonne, se retrouvait limitée à 1272px pile,
     laissant un grand vide visible de chaque côté sur un écran large (~1900px, capture envoyée
     par Cripsis comparant le plein écran d'Erkul au nôtre). Plafond retiré ici : .ship-app utilise
     maintenant toute la largeur laissée par .page (déjà plafonnée à 1900px juste au-dessus, pour
     cet onglet seulement) — packMasonry() (js/ships.js) calcule maintenant lui-même un nombre de
     pistes qui grandit avec la largeur réelle, pour que chaque piste garde une largeur proche de
     celle mesurée chez Erkul (413px) plutôt que de s'étirer sans limite. */
  margin:0 auto;
}
.ship-app>*{min-width:0}

#shipHeader{display:flex;flex-direction:column;gap:12px}

/* Rangée Dégâts/Défense/Coque : 3 colonnes ÉGALES (façon `.dash-center` d'Erkul), jamais côte à
   côte avec d'autres blocs, jamais empilées avant 900px de large — jusque-là chaque bloc garde sa
   propre grille interne, donc reste dense même en 2 colonnes.
   v19 (30 sept. 2026) : cette règle ne donne plus que la valeur par défaut/de repli (3 pistes, le
   cas le plus courant, 860-1700px de large utile) — packMasonry() (js/ships.js) pose maintenant un
   style en ligne qui la remplace dès que le nombre RÉEL de pistes de la maçonnerie dépasse 3 (ce
   bloc porte data-span-fill="true" : il s'étire toujours sur la totalité des pistes disponibles,
   pour ne plus jamais en laisser une seule orpheline sur un écran large — voir le commentaire dans
   packMasonry()). En dessous de 3 pistes, l'override est effacé et la media query ci-dessous
   reprend la main normalement. */
.ship-app-top{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;align-items:start}
@media (max-width:900px){
  .ship-app-top{grid-template-columns:1fr}
  /* v19 : sans ce reset, .stats-col3{grid-column:3/-1} (plus bas) demande toujours la piste 3, qui
     n'existe plus dans cette grille à 1 seule piste explicite — la grille en créait alors une
     implicite pour l'accueillir (comportement CSS normal, mais pas voulu ici), cassant l'empilement
     mobile en 2 pistes inégales au lieu d'une seule. auto laisse .stats-col3 se placer normalement
     à la suite de Dégâts/Défense dans l'unique piste, comme avant la v19. */
  .ship-app-top .stats-col3{grid-column:auto}
}

/* v15 (28 sept. 2026) : 3e piste de la rangée du haut — empile Coque, puis Actions/Répartition par
   composant/Vol condensé, exactement l'ordre Hull → Actions → Power Management → Flight mesuré sur
   le DOM réel d'erkul.games/calculator (voir le commentaire v15 dans ships.js, renderShip()).
   Simple flux normal (aucun positionnement JS ici, contrairement à .ship-app-masonry) : ces 4 blocs
   ne bougent jamais indépendamment les uns des autres, un espacement vertical fixe suffit — même
   principe que .sum-group{margin-bottom:14px} plus bas, répété ici pour couvrir aussi le
   .ship-block "Coque" (qui n'a pas la classe .sum-group et n'a donc pas cette marge par défaut). */
.stats-col3{display:flex;flex-direction:column;grid-column:3 / -1}
.stats-col3>*{margin-bottom:14px}
.stats-col3>*:last-child{margin-bottom:0}
/* grid-column:3/-1 (v19, 30 sept. 2026) : Dégâts et Défense (les 2 premiers enfants de
   .ship-app-top) restent chacun sur 1 seule piste, auto-placés normalement — c'est .stats-col3
   (3e enfant) qui absorbe désormais TOUTES les pistes en plus quand packMasonry() en ajoute (voir
   data-span-fill dans js/ships.js) : "-1" désigne toujours la dernière piste de la grille, quel
   que soit leur nombre total, donc cette règle n'a besoin d'aucun ajustement si ce nombre change
   encore à l'avenir. À exactement 3 pistes (le cas par défaut ci-dessus), 3/-1 ne couvre que la
   3e piste — comportement strictement identique à avant cette règle (aucune régression). */

/* Zone masonry : positionnement en absolu posé par packMasonry() (ships.js), qui mesure la vraie
   hauteur de chaque carte et la case dans la piste la moins remplie — voir ce commentaire plus
   haut pour le principe. .masonry-stacked est le repli petit écran (packMasonry() désactive le
   positionnement absolu sous ~560px de conteneur utile) : simple empilement en flux normal, une
   carte par ligne, pleine largeur. */
.ship-app-masonry{position:relative}
.ship-app-masonry:not(.masonry-stacked)>*{position:absolute;margin:0 !important;max-width:none}
.ship-app-masonry.masonry-stacked{display:flex;flex-direction:column;gap:16px}

/* Barre de recherche compacte en tête de la colonne gauche (façon Erkul : recherche + variantes
   au-dessus de l'identité du vaisseau, dans la même colonne, pas dans une zone séparée). */
.ship-toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px;margin-bottom:12px}
.ship-toolbar .field{flex:1;min-width:0;margin-bottom:0}
.ship-toolbar .status{text-align:left;min-height:0}

.ship-card{background:var(--panel);border:1px solid var(--line);border-radius:8px;overflow:hidden}
.ship-head{display:flex;flex-wrap:wrap;gap:14px;padding:14px 16px;border-bottom:1px solid var(--line)}
.ship-img{width:130px;max-width:100%;height:auto;border-radius:6px;object-fit:cover;background:var(--panel-2)}
/* flex:0 1 auto (11 oct. 2026, correctif du même jour que l'ajout des pastilles/de la description
   ci-dessous) : était flex:1 (grandit pour remplir tout l'espace dispo) depuis l'origine de ce
   bloc — invisible tant que .ship-id était le DERNIER élément de la rangée (rien après lui pour
   révéler l'espace vide qu'il réservait). Depuis l'ajout de .ship-desc juste après (même rangée,
   lui aussi flex:1), les deux se partageaient l'espace restant 50/50 : .ship-id s'étirait bien
   au-delà du nom/des pastilles, repoussant le paragraphe de présentation très loin à droite avec un
   grand vide entre les deux (capture de Cripsis, 11 oct. 2026, « Notre rendu a rien à voir »).
   flex:0 1 auto : la colonne identité ne prend que la largeur de son contenu (nom/pastilles),
   .ship-desc (toujours flex:1 1 280px) absorbe seul l'espace restant, directement à sa suite. */
.ship-id{flex:0 1 auto;min-width:220px;max-width:320px}
.ship-id h2{font-family:var(--display);font-weight:700;font-size:1.4rem;margin:0 0 4px}
.ship-sub{margin:0 0 6px;color:var(--muted)}

/* Pastilles taille/carrière/rôle/équipage sous le nom (11 oct. 2026, façon Erkul : "S2 · Combat ·
   Medium Fighter · 1 crew"), et paragraphe de présentation à côté de l'identité — voir le
   commentaire au-dessus de leur construction dans renderShip() (ships.js) pour la source des
   données (déjà dans la réponse API, simplement pas affichée avant). Pastilles neutres (fond
   panel-2) sauf la taille, en ambre plein comme les autres badges "taille" du site
   (.part-size-badge) pour rester reconnaissable au premier coup d'oeil. */
.ship-id-badges{display:flex;flex-wrap:wrap;gap:5px;margin:0 0 8px}
.ship-id-badge{display:inline-flex;align-items:center;padding:3px 8px;border-radius:5px;
  background:var(--panel-2);border:1px solid var(--line);color:var(--muted);
  font-size:.74rem;font-weight:600;white-space:nowrap}
.ship-id-badge-size{background:var(--amber);border-color:var(--amber);color:var(--amber-ink);
  font-family:var(--display)}
.ship-desc{flex:1 1 280px;min-width:220px;margin:0;align-self:center;color:var(--muted);
  font-size:.86rem;line-height:1.45}

/* Emplacements de configuration (26 sept. 2026, façon Erkul) : rangée de 4 boutons + un bouton de
   réinitialisation globale, au-dessus de l'identité du vaisseau (même emplacement que chez Erkul).
   Volontairement discret (fond neutre) sauf l'emplacement actif (bordure ambre, comme le reste du
   site pour "en cours"/"sélectionné") et les emplacements personnalisés (petit point ambre, pour
   les repérer sans avoir à cliquer dessus un par un). */
.ship-loadout-slots{display:flex;flex-wrap:wrap;gap:6px;padding:10px 16px;border-bottom:1px solid var(--line)}
.slot-btn{position:relative;padding:5px 10px;border-radius:5px;border:1px solid var(--line);background:var(--panel-2);color:var(--muted);font-size:0.85rem;cursor:pointer}
.slot-btn:hover{border-color:var(--amber);color:var(--ink)}
.slot-btn.is-active{border-color:var(--amber);color:var(--amber);background:var(--panel)}
.slot-btn.has-data:not(.is-active)::after{content:"";position:absolute;top:3px;right:3px;width:6px;height:6px;border-radius:50%;background:var(--amber)}
.slot-reset-btn{margin-left:auto;font-size:0.8rem}
@media (max-width:420px){ .slot-reset-btn{margin-left:0;width:100%} }

/* Paire fixe à 2 colonnes (Dégâts/Défense côte à côte en haut de la colonne gauche, v10) : colonnes
   fixes 1fr/1fr plutôt qu'une grille auto-fit à largeur minimale — dans une colonne gauche déjà
   étroite (~380px), un auto-fit(220px) désempilerait la paire à la moindre réduction de largeur ;
   ici on veut qu'elle reste toujours côte à côte (validé sur la maquette statique à 1024/1300px). */
.pair-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media (max-width:420px){ .pair-row{grid-template-columns:1fr} }

/* Chaque bloc est un panneau technique à part entière (bordure propre, fond légèrement distinct),
   plutôt que des sections empilées séparées par un simple filet — c'est ce qui donne l'impression
   de "panneaux" façon logiciel plutôt que de sections de page web. */
.ship-block{background:var(--panel-2);border:1px solid var(--line);border-radius:6px;padding:10px 12px}
.ship-block.wide{grid-column:1/-1}

/* En-tête de panneau compact : icône + titre + bouton replier/déplier (voir blockHead() dans
   ships.js). Remplace le simple <h3>. */
.block-head{display:flex;align-items:center;gap:7px;margin:0 0 8px}
.block-head h3{font-family:var(--display);font-weight:600;font-size:.98rem;margin:0;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.block-icon{flex:none;width:15px;height:15px;color:var(--amber);display:inline-flex}
.block-icon svg{width:100%;height:100%;display:block}
.block-toggle{flex:none;background:none;border:none;color:var(--muted);cursor:pointer;padding:2px 4px;font-size:.85rem;line-height:1}
.block-toggle:hover{color:var(--ink)}
.block-toggle .chev{display:inline-block;transition:transform .12s}
.ship-block.collapsed .block-body{display:none}
.ship-block.collapsed .block-toggle .chev{transform:rotate(-90deg)}

.ship-kpis{display:flex;flex-wrap:wrap;gap:6px 16px;margin-bottom:6px}
.kpi{display:flex;flex-direction:column;gap:2px}
.kpi-label{font-size:.75rem;color:var(--muted)}
.kpi-val{font-family:var(--display);font-weight:700;font-size:1.15rem}

.ship-weapons,.ship-parts{width:100%;border-collapse:collapse;font-size:.88rem;margin-top:10px}
.ship-weapons th,.ship-parts th{text-align:left;font-weight:500;color:var(--muted);font-size:.78rem;padding:2px 8px 4px}
.ship-weapons td,.ship-parts td{padding:8px;border-top:1px solid var(--line);vertical-align:top}
.ship-weapons th.r,.ship-weapons td.r,.ship-parts th.r,.ship-parts td.r{text-align:right;white-space:nowrap}
.ship-weapons th:first-child,.ship-weapons td:first-child,.ship-parts th:first-child,.ship-parts td:first-child{padding-left:0}
.ship-parts td.r{padding-top:12px}

.ship-note{margin:10px 0 0;font-size:.85rem;color:var(--muted)}

/* Info-bulle (Tooltip) compacte : remplace un paragraphe explicatif toujours visible par une
   petite icône que l'on survole/active au clavier — le texte complet reste identique (rien
   n'est supprimé), juste replié derrière un point d'interrogation façon logiciel plutôt
   qu'affiché en permanence et gonflant la hauteur du panneau. Utilise l'attribut title natif du
   navigateur (déjà le mécanisme employé par .gamever ailleurs dans ships.js) : pas de nouveau
   composant JS à maintenir. */
.info-tip{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;
  border-radius:50%;border:1px solid var(--muted);color:var(--muted);font-size:.68rem;
  font-family:var(--display);line-height:1;cursor:help;flex:none;margin-left:3px;vertical-align:middle}
.info-tip:hover,.info-tip:focus-visible{border-color:var(--amber);color:var(--amber)}

/* Sous-titre à l'intérieur d'un bloc (ex. "Segments d'énergie" / "Segments de refroidissement"
   dans le bloc Énergie, "Parties détachables" dans le bloc Coque) — plusieurs sous-sections dans
   un même ship-block, nouveau depuis le tableau de bord façon Erkul (v5, 24 sept. 2026). */
.ship-subhead{font-family:var(--display);font-weight:600;font-size:.95rem;margin:14px 0 8px;color:var(--muted)}
.ship-block .ship-subhead:first-child{margin-top:0}

/* Tableau défilable (liste des parties détachables de la coque, potentiellement longue) : évite
   qu'un bloc "Coque" avec un vaisseau à beaucoup de pièces (ex. 23 sur le Gladius) n'étire toute
   la grille verticalement. */
.ship-scroll-table{max-height:260px;overflow-y:auto}

/* Configurateur : bouton "échanger" par point d'ancrage (1re colonne du tableau, ouvre la
   popup), et bouton de réinitialisation aligné avec les indicateurs quand le loadout a été
   modifié — .reset-part-btn est utilisé pour les 5 catégories (armes, boucliers,
   refroidisseurs, générateurs, propulseurs quantiques). */
.part-swap-btn{display:inline-flex;flex-wrap:wrap;align-items:center;gap:5px 7px;width:100%;max-width:320px;
  background:var(--panel-2);color:var(--ink);border:1px solid var(--line);border-radius:6px;
  padding:7px 10px;font-size:.86rem;font-family:inherit;cursor:pointer;text-align:left}
.part-swap-btn:hover:not(:disabled){border-color:var(--amber)}
.part-swap-btn:disabled{opacity:.55;cursor:default}
.ship-kpis{align-items:center}
.ship-kpis .reset-part-btn{margin-left:auto}

/* Grille de "cartes" de composant façon Erkul (armes, bouclier, refroidisseur, générateur,
   propulseur quantique, radar) — v6 (24 sept. 2026), remplace l'ancien tableau .ship-parts pour
   ces 6 catégories. Redessinée v11 (24 sept. 2026, sur demande explicite de Cripsis après qu'il
   nous a montré la vignette "Life support" d'Erkul en capture) : une seule rangée d'en-tête
   (badges+nom+fabricant à gauche, gros chiffre+légende à droite) au lieu de deux rangées
   empilées — plus dense, plus proche de la disposition réelle d'Erkul, toujours avec la charte
   du site (panel/amber), pas ses couleurs. Le tableau .ship-parts reste utilisé ailleurs (parties
   détachables de la coque, propulseurs) où une vraie liste tabulaire reste plus lisible qu'une
   grille de cartes. */
.parts-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(205px,1fr));gap:8px;margin-top:8px;align-items:start}
/* minmax 185px -> 205px (v11) : la nouvelle en-tête à une rangée doit loger badges + nom +
   fabricant ET le gros chiffre côte à côte ; avec 3 badges (taille+classe+grade, cas des
   boucliers/refroidisseurs/etc.) 185px ne laissait presque plus rien au nom (tronqué à 2-3
   lettres). auto-fill -> auto-fit (v11) : un bloc qui n'a qu'1 ou 2 pièces (bouclier, générateur,
   propulseur quantique...) réservait quand même 3 colonnes fantômes vides dans un bloc large,
   écrasant la vraie carte à 205px et tronquant le nom à "Sh…" malgré toute la place disponible à
   côté ; auto-fit supprime les colonnes vides et laisse la ou les cartes réelles se partager
   toute la largeur. Sans effet quand le bloc a déjà assez de pièces pour remplir ses colonnes
   (armes) ; align-items:start (déjà utilisé ailleurs pour la même raison, voir .ship-overview) :
   filet de sécurité pour qu'une carte plus courte qu'une voisine sur la même rangée ne soit
   jamais étirée en hauteur par la grille — évite de recréer les "grandes cartes vides". */
.part-card{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:8px 34px 6px 10px;
  display:flex;flex-direction:column;gap:2px;min-width:0}
/* padding-right porté à 34px (26 sept. 2026, corrigé après test en direct) : le bouton
   .part-power-btn est positionné en absolu dans ce coin — sans cette marge réservée, il
   recouvrait la fin du gros chiffre principal (ex. "1 266" DPS devenait "1 26" + le bouton par
   dessus le dernier chiffre). */
/* min-width:0 ci-dessus : sans ça, un item de grille CSS garde sa largeur de contenu minimale
   ("min-width:auto" par défaut) même quand sa piste de grille est plus étroite — piège du même
   genre que le fameux overflow-x/overflow-y (voir plus haut dans ce fichier). Conséquence
   concrète repérée en testant la v11 : un nom d'arme long ("Revenant Gatling") forçait la carte
   à s'élargir au-delà de sa piste de 185px, et le gros chiffre à droite débordait, rogné, sur la
   carte voisine au lieu de forcer le nom à tronquer avec l'ellipse déjà prévue pour ça. */
/* Toute la carte cliquable (24 sept. 2026) : le <button> englobe maintenant tout le contenu
   (titre, gros chiffre, note) au lieu de juste la ligne titre — Cripsis a signalé que cliquer sur
   le gros chiffre (visuellement la majorité de la carte) ne faisait rien. Le bouton devient donc
   une colonne flex pleine largeur/hauteur plutôt qu'une simple rangée ; .part-card-head reprend
   l'ancien comportement de rangée (icône/nom/fabricant/badges) qui vivait avant directement dans
   le bouton. */
.part-card .part-swap-btn{max-width:none;background:none;border:none;padding:0;margin:0;
  display:flex;flex-direction:column;align-items:stretch;gap:6px;width:100%;min-width:0;text-align:left;
  font:inherit;color:inherit;border-radius:4px}
.part-card .part-swap-btn:disabled{cursor:default}
.part-card:has(.part-swap-btn:hover:not(:disabled)){border-color:var(--amber)}
.part-card .part-swap-btn:hover:not(:disabled) .swap-name{color:var(--amber)}

/* En-tête à une rangée (v11) : badges+nom/fabricant à gauche (.part-card-left, peut rétrécir),
   gros chiffre principal à droite (.part-card-primary, largeur fixe) — même principe que la
   vignette "Life support" d'Erkul ; c'est le nom qui cède de la place en premier, jamais le
   gros chiffre qui ne bouge pas de largeur.
   Le nom passe sur 2 lignes (line-clamp) plutôt qu'une seule tronquée à l'ellipse : dans les
   colonnes étroites (ex. bloc à une seule carte dans .ship-app-left), avec 2-3 badges + un
   chiffre principal à unité longue ("189.3 Mm/s"), il ne reste parfois qu'une poignée de
   pixels sur une ligne — un nom comme "Expedition" tronquait en "Expe…", illisible. Sur 2
   lignes il tient en entier dans la quasi-totalité des cas réels ; au-delà de 2 lignes on
   tronque quand même (garde-fou pour un nom vraiment très long). */
.part-card-head{display:flex;flex-wrap:nowrap;align-items:center;justify-content:space-between;gap:8px;width:100%;min-width:0}
.part-card-left{display:flex;align-items:center;gap:7px;min-width:0;flex:1 1 auto;overflow:hidden}
.part-card-nameblock{display:flex;flex-direction:column;gap:1px;min-width:0;overflow:hidden}
.part-card-nameblock .swap-name{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;
  font-weight:700;font-size:1rem;line-height:1.15;color:var(--ink);overflow:hidden;text-overflow:ellipsis;
  overflow-wrap:anywhere}
.part-card-nameblock .swap-mfr{display:block;color:var(--muted);font-size:.76rem;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.part-card-primary{display:flex;flex-direction:column;align-items:flex-end;text-align:right;flex:none}
.part-card-primary-val{font-family:var(--display);font-weight:700;font-size:1.5rem;color:var(--amber);line-height:1.05}
.part-card-primary-label{font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}

/* Ligne de statistiques secondaires (armes : DPS soutenu/alpha) : sous l'en-tête, en une ligne
   compacte façon Erkul plutôt qu'empilée verticalement — n'apparaît que pour les catégories qui
   ont plus d'une colonne (def.columns()), donc absente pour la plupart (bouclier/refroidisseur/
   générateur/quantique/radar n'ont qu'une seule statistique, déjà dans .part-card-primary). */
.part-card-stats{display:flex;flex-wrap:wrap;gap:3px 14px;font-size:.76rem;color:var(--muted)}
.part-card-stats b{color:var(--ink);font-weight:600}
.part-card-note{display:block;margin:2px 0 0;font-size:.7rem}

/* Carte de monture au-dessus de la carte d'arme/outil (26 sept. 2026, façon Erkul : une carte
   pour la monture — nom, fabricant, vitesse de rotation — séparée de la carte de l'arme
   elle-même). Non interactive (aucun <button>, juste des <span>) : c'est une propriété du point
   d'ancrage lui-même, pas un composant qu'on peut échanger indépendamment — d'où le style
   volontairement plus discret (bordure en tirets, légèrement transparente) pour ne pas laisser
   croire qu'elle se clique comme la carte juste en dessous. */
.part-mount-pair{display:flex;flex-direction:column;gap:6px;min-width:0}
.mount-card{background:var(--panel);border:1px dashed var(--line);border-radius:6px;
  padding:6px 10px;display:flex;flex-direction:column;gap:2px;min-width:0;opacity:.82}
.mount-card-head{display:flex;flex-wrap:nowrap;align-items:center;justify-content:space-between;gap:8px;width:100%;min-width:0}
.mount-card-left{display:flex;align-items:center;gap:7px;min-width:0;flex:1 1 auto;overflow:hidden}
.mount-card-nameblock{display:flex;flex-direction:column;gap:1px;min-width:0;overflow:hidden}
.mount-card-name{font-weight:600;font-size:.85rem;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mount-card-mfr{display:block;color:var(--muted);font-size:.72rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mount-card-label{font-size:.65rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;flex:none}
.mount-card-stats{display:flex;flex-wrap:wrap;gap:3px 14px;font-size:.72rem;color:var(--muted);margin-top:2px}
.mount-card-stats b{color:var(--ink);font-weight:600}

/* Bouton "Power off" par composant (26 sept. 2026) : bascule visuelle seule (voir OFF dans
   ships.js) — un composant "éteint" n'est plus compté dans le DPS (armes) mais garde toutes ses
   autres stats affichées telles quelles (choix honnête : pas de fausse extinction ailleurs que
   là où on peut réellement le prouver, voir cargo-loop-contexte.md). Positionné en superposition
   dans le coin de .part-card plutôt qu'imbriqué dans .part-swap-btn : un <button> ne peut pas
   contenir un autre <button> en HTML valide, les deux sont donc des enfants FRÈRES de
   .part-card, .part-power-btn placé par-dessus via position absolue. */
.part-card{position:relative}
.part-power-btn{position:absolute;top:6px;right:6px;z-index:2;width:22px;height:22px;
  display:inline-flex;align-items:center;justify-content:center;border-radius:50%;
  border:1px solid var(--line);background:var(--panel-2);color:var(--muted);
  font-size:.85rem;line-height:1;cursor:pointer;padding:0}
.part-power-btn:hover{border-color:var(--amber);color:var(--amber)}
.part-power-btn.is-off{border-color:var(--amber);color:var(--amber);background:var(--amber-ink)}
.part-card.is-off{opacity:.55}
.part-card.is-off .part-card-primary-val{color:var(--muted)}

/* Groupes compacts (Actions, Gestion de l'énergie condensée, Vol condensé — voir shipSummaryHTML()
   dans ships.js) : une ligne par métrique, réutilisant les mêmes données que les blocs détaillés.
   margin-bottom sert de repli hors de la zone masonry (ex. si un de ces groupes est utilisé
   ailleurs un jour) ; DANS .ship-app-masonry l'espacement vient du masonry lui-même (gap posé par
   packMasonry() en mode carte, `gap` flex en mode .masonry-stacked) — la règle juste en dessous
   neutralise donc ce margin-bottom pour ne pas le cumuler avec cet espacement. */
.sum-group{margin-bottom:14px}
.sum-group:last-child{margin-bottom:0}
.ship-app-masonry .sum-group,.ship-app-masonry .ship-block{margin-bottom:0}
.sum-group-title{display:flex;align-items:center;gap:6px;font-family:var(--display);font-weight:600;
  font-size:.8rem;margin:0 0 6px;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}
.sum-metric{display:flex;justify-content:space-between;gap:10px;font-size:.85rem;padding:3px 0;border-top:1px solid var(--line)}
.sum-group .segment-bar + .sum-metric,.sum-group .sum-metric:first-of-type{border-top:0}
.sum-label{color:var(--muted)}
.sum-val{font-weight:600;color:var(--ink)}

/* Bloc Actions (Tout réinitialiser/replier/déplier) en tête de la colonne résumé, v9 — voir
   sumActionsHTML() dans ships.js. Empilés verticalement (comme le panneau "Actions" d'Erkul,
   une vraie liste de boutons, pas une rangée) plutôt qu'en 3 boutons côte à côte : à 260px de
   large la colonne n'a pas la place pour 3 libellés complets sur une ligne, et les forcer en
   flex:1/nowrap les faisait déborder hors du panneau, invisiblement rognés par le
   overflow-y:auto du parent (qui rend aussi overflow-x auto côté navigateur). */
.sum-actions-group{margin-bottom:14px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.sum-actions{display:flex;flex-direction:column;gap:6px}
.sum-actions .btn{width:100%;text-align:center}

/* Barre de segments façon Erkul (pastilles de refroidissement/énergie) : voir segmentBarHTML()
   dans ships.js. Purement décoratif, les chiffres exacts restent affichés à côté en toutes
   lettres. */
.segment-bar{display:flex;flex-wrap:wrap;gap:2px;margin:2px 0 10px}
.segment-pip{width:9px;height:14px;border-radius:2px;background:var(--panel-2);border:1px solid var(--line)}
.segment-pip.filled{background:var(--amber);border-color:var(--amber)}

/* Panneau "Répartition par composant" (26 sept. 2026, estimation Verse-Dynamics, voir le long
   commentaire au-dessus de getPowerDraw() dans ships.js). Redessiné le 27 sept. 2026 pour
   reprendre la mise en page du widget "Power Management" d'Erkul, puis REFONTE STRUCTURELLE le
   11 oct. 2026 (deux captures annotées envoyées par Cripsis, comparaison précise côte à côte —
   voir le long commentaire au-dessus de powerBudgetHTML() dans ships.js) : la 1re passe gardait
   des cartes individuelles par composant (fond + bordure propres à chaque colonne) et un bandeau
   de stats étiré en flex:1 sur toute la largeur du panneau, deux écarts majeurs avec le vrai
   graphique Erkul. Cette refonte : (1) plafonne la largeur du panneau (il ne doit plus s'étirer
   pour remplir tout l'espace disponible) ; (2) compacte le bandeau IR/EM/CS-Z, aligné à gauche,
   ordre icône→valeur→libellé (inversé par rapport à avant) ; (3) déplace "Visée" du bandeau vers
   une 2e barre de progression, même format que "Refroidissement" ; (4) retire tout fond/bordure
   des colonnes de composants (différenciées seulement par l'espacement/les pips/l'icône, comme
   chez Erkul) et déplace leur libellé texte (visible avant) en infobulle au survol ; (5) regroupe
   MODE SCM + MODE NAV en un seul contrôle segmenté, Auto redevenant un bouton compact séparé à
   droite plutôt qu'un tiers de ligne égal. Interaction et chiffres inchangés : toujours nos
   propres données (jamais inventées), SCM/NAV/Auto toujours désactivés avec les mêmes infobulles
   honnêtes (aucune logique d'allocation par mode de vol retrouvée dans les fichiers de jeu). */
.pwmgmt{display:flex;flex-direction:column;gap:2px;margin:4px 0 8px;padding:10px;max-width:380px;
  background:var(--panel);border:1px solid var(--line);border-radius:8px}
.pwmgmt.is-over{border-color:var(--warn)}

.pwmgmt-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.pwmgmt-title{display:flex;align-items:center;gap:6px;margin:0;font-family:var(--display);
  font-weight:600;font-size:.86rem;color:var(--ink)}
.pwmgmt-count{flex:none;font-size:.8rem;font-weight:700;color:var(--amber)}
.pwmgmt.is-over .pwmgmt-count{color:var(--warn)}

/* Bandeau IR/EM/CS-Z : groupe compact aligné à gauche (plus de flex:1 qui étirait chaque pastille
   sur toute la largeur disponible, poussant sa valeur très loin de son icône/libellé — voir le
   commentaire de refonte ci-dessus). Ordre icône→valeur→libellé, valeur mise en évidence, comme
   chez Erkul (chez nous l'ordre précédent était icône→libellé→valeur). */
.pwmgmt-stats{display:flex;align-items:center;flex-wrap:wrap;gap:14px;margin-bottom:8px;
  padding-bottom:8px;border-bottom:1px solid var(--line)}
.pwmgmt-stat{display:flex;align-items:center;gap:4px;flex:none}
.pwmgmt-stat-icon svg{width:14px;height:14px;color:var(--amber);display:block}
.pwmgmt-stat-na .pwmgmt-stat-icon svg{color:var(--muted)}
.pwmgmt-stat-val{font-size:.84rem;font-weight:700;color:var(--ink)}
.pwmgmt-stat-na .pwmgmt-stat-val{color:var(--muted)}
.pwmgmt-stat-label{font-size:.6rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}

/* Refroidissement + Visée : deux lignes au même format (icône/libellé/barre/valeur), Visée
   rejoint ici depuis le bandeau ci-dessus (refonte du 11 oct. 2026). Sa barre n'a pas d'échelle de
   comparaison pertinente (pas de "maximum" connu) : affichée pleine par convention visuelle dès
   qu'une valeur existe, façon Erkul — la vraie donnée reste le chiffre en toutes lettres à droite,
   rien n'est inventé. */
.pwmgmt-bars{display:flex;flex-direction:column;gap:5px;margin-bottom:8px}
.pwmgmt-bar-row{display:flex;align-items:center;gap:6px}
.pwmgmt-bar-icon svg{width:13px;height:13px;color:var(--amber);display:block}
.pwmgmt-bar-label{flex:0 0 84px;font-size:.68rem;color:var(--muted)}
.pwmgmt-bar{flex:1 1 auto;height:5px;border-radius:3px;background:var(--panel-2);
  border:1px solid var(--line);overflow:hidden}
.pwmgmt-bar-fill{height:100%;background:var(--amber)}
.pwmgmt-bar-val{flex:none;min-width:38px;text-align:right;font-size:.7rem;color:var(--muted)}

/* Grille des composants : colonnes tassées côte à côte, SANS carte individuelle (plus de fond ni
   de bordure par colonne depuis la refonte du 11 oct. 2026 — "interdiction de conserver la
   présentation sous forme de cartes", demande explicite de Cripsis). Les colonnes ne se
   distinguent plus que par l'espacement, les pips et l'icône, exactement comme chez Erkul. Le nom
   du composant (visible en toutes lettres avant) est maintenant une infobulle sur la colonne
   entière (voir title="" posé en JS dans powerBudgetHTML()), rien n'est perdu, juste déplacé au
   survol pour ne pas surcharger le graphique. */
.pwmgmt-grid{display:flex;flex-wrap:wrap;align-items:flex-end;gap:11px;margin-bottom:8px}
.pwmgmt-col{display:flex;flex-direction:column;align-items:center;gap:4px;flex:none}
.pwmgmt-col-badge{font-size:.7rem;font-weight:700;color:var(--ink);background:var(--panel-2);
  border-radius:3px;padding:0 4px;line-height:1.5}
/* 27 sept. 2026, 4e/5e passes (inchangées par la refonte du 11 oct. 2026, toujours valables) : la
   hauteur de la pile reflète la vraie somme du tirage StarBreaker par palier (voir
   pipGroupsForCategory()/levelSumsForCategory() dans ships.js), groupes Bas/Moyen/Haut marqués par
   .pwmgmt-pip-gap (posée en JS sur le premier pip de chaque groupe) plutôt qu'un repère fixe en
   CSS, et deux tons d'ambre (--amber-dim pour "acquis mais pas le palier choisi", --amber plein
   pour .is-current) pour le dégradé façon Erkul. */
.pwmgmt-col-pips{display:flex;flex-direction:column;gap:3px;justify-content:flex-end}
.pwmgmt-col-pips>.pwmgmt-pip-gap{margin-top:6px}
.pwmgmt-pip{width:22px;height:10px;border-radius:3px;background:var(--panel-2);border:1px solid var(--line)}
.pwmgmt-pip.filled{background:var(--amber);border-color:var(--amber)}
/* Icône plate (27 sept. 2026 : rond bordé ambre ; 11 oct. 2026 : bordure retirée, Erkul n'affiche
   que l'icône seule, sans pastille autour, dans son graphique). */
.pwmgmt-col-icon{display:flex;align-items:center;justify-content:center;width:20px;height:20px}
.pwmgmt-col-icon svg{width:14px;height:14px;color:var(--amber);display:block}
.pwmgmt-col-fixed{opacity:.92}
.pwmgmt-col-prod{opacity:.85}
.pwmgmt-col-prod .pwmgmt-col-badge{color:var(--gain)}

/* Pips cliquables (27 sept. 2026, 2e passe façon Erkul, demande explicite de Cripsis : « qu'on
   puisse les selectionner directement en cliquant sur les point comme ERKUL ») — un <button> par
   palier réel (voir pipButtonsHTML() dans ships.js) : reset des styles de bouton natifs puis même
   gabarit visuel que .pwmgmt-pip (utilisée telle quelle par la pile fixe de Support vie). */
.pwmgmt-pip-btn{width:22px;height:10px;padding:0;margin:0;border-radius:3px;
  background:var(--panel-2);border:1px solid var(--line);cursor:pointer;display:block}
.pwmgmt-pip-btn:hover{border-color:var(--amber)}
.pwmgmt-pip-btn:focus-visible{outline:2px solid var(--amber);outline-offset:1px}
.pwmgmt-pip-btn.filled{background:var(--amber-dim);border-color:var(--amber-dim)}
.pwmgmt-pip-btn.is-current{background:var(--amber);border-color:var(--amber);
  box-shadow:0 0 0 1px var(--amber-ink, var(--panel)) inset}

/* Bas du panneau : MODE SCM + MODE NAV regroupés en UN contrôle segmenté (11 oct. 2026 — avant,
   3 boutons de largeur égale type grosses barres séparées, pas la structure d'Erkul), Auto
   redevient un bouton compact séparé à droite plutôt qu'un tiers de ligne. Toujours désactivés
   avec les mêmes infobulles honnêtes qu'avant (voir commentaire de refonte en tête de bloc) — SCM
   affiché "sélectionné" par défaut est une convention d'affichage (mode de vol le plus courant),
   pas une donnée : aucune des deux options n'est réellement pilotée par une logique d'allocation. */
.pwmgmt-modes{display:flex;align-items:stretch;justify-content:space-between;gap:8px;margin-top:2px}
.pwmgmt-mode-toggle{display:flex;flex:1 1 auto;border:1px solid var(--line);border-radius:6px;
  overflow:hidden}
.pwmgmt-mode-btn{flex:1 1 auto;padding:5px 8px;border:none;background:var(--panel-2);
  color:var(--muted);font-size:.64rem;text-transform:uppercase;letter-spacing:.03em;
  cursor:not-allowed;opacity:.85}
.pwmgmt-mode-btn+.pwmgmt-mode-btn{border-left:1px solid var(--line)}
.pwmgmt-mode-btn.is-selected{background:var(--line);color:var(--ink);opacity:1}
.pwmgmt-auto-btn{flex:none;padding:5px 14px;border-radius:6px;border:1px solid var(--amber);
  background:var(--panel-2);color:var(--amber);font-size:.64rem;text-transform:uppercase;
  letter-spacing:.03em;cursor:not-allowed;opacity:.85}

/* Badges "premier coup d'oeil" (façon Erkul) : taille (S1…S10, toutes catégories) et, quand
   star-citizen.wiki les fournit réellement (armes exclues, voir showClassGrade/partBadgesHTML
   dans ships.js), classe (militaire/civil/industriel/furtif/compétition) et grade (A-D). Dans
   le bouton d'échange ET dans chaque ligne de la popup.
   Redessinés v11 (24 sept. 2026) en petits carrés arrondis pleins, sur le modèle des badges
   "S1"/"C" de la vignette Erkul (au lieu de simples contours) — regroupés par .part-badges
   (voir partBadgesHTML dans ships.js) avec un espacement serré entre eux. */
.part-badges{display:inline-flex;flex:none;gap:4px}
.part-size-badge,.part-class-badge,.part-grade-badge,.part-shop-count{display:inline-flex;align-items:center;justify-content:center;
  flex:none;min-width:24px;height:22px;padding:0 6px;border-radius:5px;
  font-family:var(--display);font-weight:700;font-size:.74rem;white-space:nowrap}
.part-size-badge{background:var(--amber);color:var(--amber-ink)}
.part-grade-badge{background:var(--panel-2);color:var(--muted);border:1px solid var(--line)}
.part-class-badge{letter-spacing:.02em;text-transform:uppercase;color:#fff}
.part-class-badge.mil{background:var(--class-military)}
.part-class-badge.civ{background:var(--class-civilian)}
.part-class-badge.ind{background:var(--class-industrial)}
.part-class-badge.stealth{background:var(--class-stealth)}
.part-class-badge.comp{background:var(--class-competition)}

/* Popup de sélection façon Erkul (armes, boucliers, refroidisseurs, générateurs, propulseurs
   quantiques), avec le code couleur du site plutôt que celui d'Erkul. */
.part-modal{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:20px}
.part-modal.hidden{display:none}
.part-modal-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.6)}
.part-modal-panel{position:relative;background:var(--panel);border:1px solid var(--line);border-radius:10px;
  width:100%;max-width:720px;max-height:82vh;display:flex;flex-direction:column;overflow:hidden;
  box-shadow:0 20px 60px rgba(0,0,0,.5)}
.part-modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;
  border-bottom:1px solid var(--line);flex:none}
.part-modal-head h3{font-family:var(--display);font-weight:600;font-size:1.2rem;margin:0}
.part-modal-close{background:none;border:none;color:var(--muted);font-size:1.5rem;line-height:1;
  cursor:pointer;padding:2px 6px}
.part-modal-close:hover{color:var(--ink)}

/* Onglets Stats/Prix (25 sept. 2026, tâche #66 — façon Erkul, couleurs du site) : soulignement
   ambre sur l'onglet actif plutôt qu'un fond plein, cohérent avec le reste du site (ex. .tab déjà
   utilisé pour la navigation principale) — voir ensurePartModal()/updateModalTabsUI() dans
   ships.js. */
.part-modal-tabs{display:flex;gap:4px;padding:0 20px;border-bottom:1px solid var(--line);flex:none}
.part-modal-tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);
  font:inherit;font-weight:600;font-size:.86rem;padding:9px 4px;margin-bottom:-1px;cursor:pointer}
.part-modal-tab:hover{color:var(--ink)}
.part-modal-tab.is-active{color:var(--amber);border-bottom-color:var(--amber)}

.part-modal-search{margin:14px 20px;padding:9px 12px;background:var(--panel-2);border:1px solid var(--line);
  border-radius:6px;color:var(--ink);font-size:.9rem;font-family:inherit;flex:none}
.part-modal-list{overflow-y:auto;padding:0 20px 16px}
.part-modal-row{display:grid;gap:8px;align-items:center;padding:9px 10px;border-radius:6px;font-size:.86rem}
.part-modal-row[data-uuid]{cursor:pointer}
.part-modal-row[data-uuid]:hover{background:var(--panel-2)}
.part-modal-row.is-equipped{background:var(--panel-2);border:1px solid var(--amber)}
.part-modal-header{color:var(--muted);font-size:.75rem;padding:4px 10px;position:sticky;top:0;
  background:var(--panel);z-index:1}
.part-modal-row .r{text-align:right;white-space:nowrap}
.part-modal-name{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.part-modal-mfr{color:var(--muted);font-weight:400}
.part-modal-badge{background:var(--amber);color:var(--amber-ink);font-size:.68rem;font-weight:700;
  padding:2px 6px;border-radius:3px;text-transform:uppercase}

/* Mode Prix de la popup (25 sept. 2026, tâche #66) : cellule compacte cheapest+shopcount façon
   Erkul, mais en ambre (--amber) plutôt que la couleur d'Erkul — voir priceCellHTML/priceDetailHTML
   dans ships.js. .part-price-toggle réutilise le même <button> transparent que .part-swap-btn
   pour rester cohérent avec le reste du site. */
.part-price-toggle{display:flex;flex-direction:column;align-items:flex-end;gap:1px;background:none;
  border:none;padding:0;font:inherit;color:inherit;cursor:pointer;width:100%;text-align:right}
.part-price-cheapest{font-weight:700;color:var(--amber);white-space:nowrap}
/* "Où acheter ?" (retour Cripsis du 25 sept. 2026, remplace l'ancien "{n} boutique(s)") : couleur
   ambre + soulignement pointillé pour se lire comme une invite cliquable plutôt qu'une simple
   info, vu que toute la cellule (.part-price-toggle) sert déjà de bouton pour déplier le détail. */
.part-price-shops{font-size:.72rem;color:var(--amber);text-decoration:underline dotted;text-underline-offset:2px}
.part-price-none{font-size:.8rem;color:var(--muted);font-style:italic}
.part-modal-row.price-expanded{background:var(--panel-2)}

/* Bouton "Liste d'achats" (panneau Actions, colonne de droite) : même bouton que Reset/Collapse/
   Expand, juste un liseré ambre pour le distinguer visuellement des 3 autres (ce n'est pas une
   action de mise en page comme elles, mais une consultation de prix). */
.btn-shopping{border-color:var(--amber);color:var(--amber)}
.btn-shopping:hover{background:var(--amber);color:var(--amber-ink)}

/* Popup "Liste d'achats" (25 sept. 2026, voir ensureShoppingModal/renderShoppingList dans
   ships.js) : réutilise le châssis générique .part-modal/.part-modal-panel/.part-modal-list de
   la popup par composant, mais chaque ligne est un simple bandeau nom+prix (pas la grille à
   colonnes des stats) — d'où .shopping-row qui repasse .part-price-toggle en ligne plutôt qu'en
   colonne alignée à droite. */
.shopping-row .part-price-toggle{flex-direction:row;justify-content:space-between;align-items:center;
  gap:12px;text-align:left}
.shopping-row .part-modal-name{flex:1}
.shopping-row .shopping-row-price{display:flex;flex-direction:column;align-items:flex-end;gap:1px;flex-shrink:0}
/* ×N (points d'ancrage identiques regroupés en une ligne, décision de Cripsis) : retour Cripsis du
   25 sept. 2026, même pastille pleine arrondie que les badges taille/classe/grade (voir
   .part-size-badge un peu plus haut) plutôt qu'un simple texte discret — mais dans --class-stealth
   (violet, déjà utilisé pour le badge de classe "Furtif") pour ne se confondre ni avec l'ambre du
   prix/de la taille, ni avec le --gain du badge "Nouveau" juste en dessous. */
.part-shop-count{background:var(--class-stealth);color:#fff;margin-left:6px;vertical-align:middle}
/* Badge "Nouveau" (composant swappé par rapport à l'origine du vaisseau, en --gain plutôt qu'en
   ambre pour ne pas se confondre avec le prix) : voir buildShoppingGroups()/renderShoppingList()
   dans ships.js. */
.part-new-badge{border:1px solid var(--gain);color:var(--gain);font-size:.62rem;font-weight:700;
  padding:1px 5px;border-radius:3px;text-transform:uppercase;margin-left:6px;vertical-align:middle}
.shopping-total{padding:12px 20px;border-top:1px solid var(--line);flex:none;font-size:.92rem;
  display:flex;flex-direction:column;gap:2px}
.shopping-total-note{font-size:.72rem;color:var(--muted);font-style:italic}

/* Détail groupé déplié (accordéon, une seule ligne à la fois — voir expandedPriceUuid) : système
   → planète/lune/"Stations" → boutique, chaque niveau trié du moins cher au plus cher côté JS
   (groupPrices()) — ici purement la mise en forme visuelle. */
.part-price-detail-row{padding:0 10px 10px !important}
.part-price-detail{width:100%;border-top:1px solid var(--line);padding-top:10px;
  display:flex;flex-direction:column;gap:10px}
.part-price-system{display:flex;flex-direction:column;gap:4px}
.part-price-system-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;
  font-family:var(--display);font-weight:600;font-size:.85rem;color:var(--ink)}
.part-price-group{margin-left:8px;display:flex;flex-direction:column;gap:2px}
.part-price-group-label{font-size:.72rem;color:var(--muted);text-transform:uppercase;
  letter-spacing:.02em;margin-top:4px}
.part-price-shop-row{display:flex;justify-content:space-between;gap:10px;font-size:.82rem;
  padding:2px 0 2px 8px}
.part-price-freshness{margin-top:0}

/* Responsive (24 sept. 2026, v7) — l'onglet Vaisseaux est le plus récent et le plus dense du
   site, il n'avait encore aucun point de rupture alors que le reste (layout.css/mining.css/
   routes.css) en a déjà. .ship-app-mid et .parts-grid s'adaptent déjà tout seuls grâce à
   repeat(auto-fit/auto-fill, minmax(...)) ; il restait deux points concrets :
   1) .ship-card a overflow:hidden (pour les coins arrondis de l'image) : un tableau .ship-parts
      trop large (coque/propulseurs) ne provoquerait pas un défilement de toute la PAGE, mais
      serait silencieusement rogné, invisible, sans barre de défilement. .block-body reçoit son
      propre défilement horizontal local — même principe que .ore-table-wrap/.items-wrap
      ailleurs dans le site, adapté ici à un conteneur déjà existant plutôt qu'un nouveau div.
   2) La grille de la popup (part-modal-row) a des colonnes de largeur FIXE en pixels posées en
      style inline par ships.js (ex. "1fr repeat(3,96px)") : illisible sous ~480px de large. Sur
      petit écran, elle repasse en une seule colonne (chaque ligne empile nom puis statistiques),
      d'où le !important pour l'emporter sur le style inline. */
.block-body{overflow-x:auto}
@media (max-width:480px){
  .part-modal-row{grid-template-columns:1fr !important;row-gap:2px}
  .part-modal-header{display:none}
  .part-modal-row .r{text-align:left}
  .part-modal-panel{max-width:none}
  .ship-block{padding:8px 10px}
  .part-card{padding:6px 8px 5px}
  /* Mode Prix (tâche #66) : la cellule prix, alignée à droite en grille large, repasse à gauche
     comme le reste de la ligne une fois empilée en une seule colonne. */
  .part-price-toggle{align-items:flex-start;text-align:left}
}

/* ================= Onglet "Vaisseaux" (catalogue façon erkul.games/ships, 30 sept. 2026) =====
   Grille de cartes + recherche (#view-shipsList) et sa fiche à 3 onglets Stats/Buy/Rent
   (#shipFinderModal, réutilise .part-modal/.part-modal-panel/.part-modal-tabs/.part-modal-list,
   voir ensureFinderModal() dans ships.js — mêmes classes que la popup d'échange de composants,
   pour un look cohérent, sans dupliquer ces règles). Onglet DISTINCT du Configurateur Vaisseaux
   (body.view-ships, plus haut dans ce fichier) : voir le grand commentaire au-dessus de
   initShipsFinder() dans ships.js pour le pourquoi des deux onglets séparés. */
body.view-shipsList .page{
  /* Même raisonnement que body.view-ships .page ci-dessus (v18) : la grille de cartes profite
     de toute la largeur de l'écran plutôt que d'un plafond fixe deviné à l'avance. */
  max-width:none;
}
.finder-app{display:flex;flex-direction:column;gap:16px}
.finder-toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px 20px}
.finder-toolbar .field{flex:1 1 320px;max-width:480px}
.finder-toolbar input{width:100%;padding:9px 12px;background:var(--panel-2);border:1px solid var(--line);
  border-radius:6px;color:var(--ink);font-size:.95rem;font-family:inherit}
.finder-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}
.finder-card{display:flex;flex-direction:column;text-align:left;background:var(--panel);
  border:1px solid var(--line);border-radius:8px;overflow:hidden;cursor:pointer;padding:0;
  font:inherit;color:inherit}
.finder-card:hover{border-color:var(--muted)}
.finder-card-img{aspect-ratio:16/9;background:var(--panel-2);overflow:hidden}
.finder-card-img img{width:100%;height:100%;object-fit:cover;display:block}
.finder-card-body{display:flex;flex-direction:column;gap:8px;padding:12px}
.finder-card-head{display:flex;align-items:flex-start;gap:8px}
.finder-size-badge{display:inline-flex;align-items:center;justify-content:center;flex:none;
  min-width:24px;height:22px;padding:0 6px;border-radius:5px;font-family:var(--display);
  font-weight:700;font-size:.74rem;white-space:nowrap;background:var(--amber);color:var(--amber-ink)}
.finder-card-identity{min-width:0}
.finder-card-name{margin:0;font-family:var(--display);font-weight:600;font-size:1.02rem;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.finder-card-mfr{margin:2px 0 0;color:var(--muted);font-size:.8rem}
.finder-card-tags{display:flex;flex-wrap:wrap;gap:5px}
.finder-tag{display:inline-block;padding:2px 8px;border-radius:99px;background:var(--panel-2);
  border:1px solid var(--line);color:var(--muted);font-size:.72rem}
.finder-card-price{display:flex;flex-direction:column;gap:1px;margin-top:auto;padding-top:6px;
  border-top:1px solid var(--line)}
.finder-price{font-weight:700}
.finder-shops{color:var(--muted);font-size:.78rem}
.finder-stats-rows{display:flex;flex-direction:column;gap:2px;margin-bottom:14px}
.finder-stats-row{display:flex;justify-content:space-between;gap:10px;padding:7px 0;
  border-bottom:1px solid var(--line);font-size:.88rem}
.finder-stats-row span:first-child{color:var(--muted)}
#shipFinderModalBody{padding-top:14px}
@media (max-width:480px){
  .finder-grid{grid-template-columns:1fr}
}
