:root {
  --bg: #111214;
  --bg-soft: #181a1f;
  --panel: #20232a;
  --panel-2: #272b33;
  --text: #f2f2f2;
  --muted: #a8adb7;
  --orange: #ff8a00;
  --orange-dark: #c95f00;
  --danger: #d94b4b;
  --ok: #4ad27a;
  --border: rgba(255,255,255,.09);
  --shadow: 0 16px 50px rgba(0,0,0,.35);
  /* nouvel en-tête (v1.9) : accent cyan secondaire + polices dédiées,
     n'affecte que la zone marque/navigation/statut/ressources -- le reste
     du jeu garde ses styles d'origine. */
  --cyan: #4fd6f0;
  --cyan-dim: rgba(79,214,240,.12);
  --font-display: 'Chakra Petch', sans-serif;
  --font-mono2: 'IBM Plex Mono', ui-monospace, monospace;
  /* teintes de fond très légères par famille de minerai (~10% d'opacité),
     voir .resource-chip.family-* -- couleurs alignées sur celles déjà
     choisies pour la maquette validée. */
  --tint-iron: rgba(201,138,92,.10);
  --tint-copper: rgba(224,122,74,.10);
  --tint-caterium: rgba(224,193,92,.10);
  --tint-limestone: rgba(180,180,180,.09);
  --tint-coal: rgba(120,130,145,.11);
  --tint-steel: rgba(150,160,168,.12);
  --tint-oil: rgba(60,50,45,.14);
  --tint-misc: rgba(124,201,107,.09);
}

* { box-sizing: border-box; }
.fc-icon {
  display: inline-block;
  width: 1.35em;
  height: 1.35em;
  object-fit: contain;
  vertical-align: -0.25em;
  filter: drop-shadow(0 2px 4px rgba(0,0,0,.45));
  pointer-events: none;
  user-select: none;
}

body {
  margin: 0;
  min-height: 100vh;
  font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  color: var(--text);
  background:
    radial-gradient(circle at top left, rgba(255,138,0,.17), transparent 36rem),
    linear-gradient(135deg, #0d0e10, var(--bg));
}

button {
  border: 0;
  border-radius: 12px;
  padding: .75rem 1rem;
  color: #111;
  background: var(--orange);
  font-weight: 800;
  cursor: pointer;
  transition: transform .08s ease, opacity .15s ease, background .15s ease;
}

button:active { transform: translateY(1px); }
button:disabled { opacity: .42; cursor: not-allowed; transform: none; }
button.secondary { color: var(--text); background: var(--panel-2); border: 1px solid var(--border); }
button.danger { color: white; background: var(--danger); }
.account-delete-link {
  background: none;
  border: none;
  color: var(--muted);
  font-size: .74rem;
  text-decoration: underline;
  cursor: pointer;
  padding: 0;
}
.account-delete-link:hover { color: var(--danger); }

.save-transfer-card {
  margin-top: 1.25rem;
  padding: 1rem;
  border: 1px solid rgba(79,214,240,.22);
  border-radius: 14px;
  background: linear-gradient(145deg, rgba(79,214,240,.075), rgba(255,138,0,.035));
}
.save-transfer-card h3 { margin: 0 0 .35rem; font-size: 1rem; }
.save-transfer-card h4 { margin: 0 0 .35rem; font-size: .92rem; }
.save-management-actions { margin-top: .75rem; }
.save-management-section {
  margin-top: 1rem;
  padding-top: 1rem;
  border-top: 1px solid var(--border);
}
.save-management-danger { border-top-color: rgba(255, 79, 99, .32); }
.save-transfer-source { margin-top: .9rem; }
.save-transfer-code-view {
  margin-top: .75rem;
  padding: .85rem;
  border-radius: 12px;
  border: 1px solid var(--border);
  background: rgba(0,0,0,.24);
  text-align: center;
}
.save-transfer-code-view code {
  display: block;
  color: var(--cyan);
  font: 800 clamp(.95rem, 4.5vw, 1.25rem)/1.35 var(--font-mono2);
  letter-spacing: .055em;
  overflow-wrap: anywhere;
  user-select: all;
}
.save-transfer-code-view p { margin: .45rem 0 0; }
.save-transfer-actions {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: .8rem;
  margin-top: .75rem;
  flex-wrap: wrap;
}
.save-transfer-divider {
  display: flex;
  align-items: center;
  gap: .65rem;
  margin: 1rem 0;
  color: var(--muted);
  font-size: .72rem;
  text-transform: uppercase;
  letter-spacing: .08em;
}
.save-transfer-divider::before,
.save-transfer-divider::after { content: ''; flex: 1; height: 1px; background: var(--border); }
.save-transfer-destination { margin: 0; }
.save-transfer-destination input {
  width: 100%;
  font-family: var(--font-mono2);
  text-transform: uppercase;
  letter-spacing: .045em;
}
.save-transfer-security { margin: .85rem 0 0; }

/* tap sur mobile déclenche :hover sans jamais le relâcher (pas de vraie
   souris) : le bouton restait visuellement enfoncé jusqu'au tap suivant
   ailleurs sur la page. Tous les survols passent donc par cette media
   query, qui ne s'active que sur un vrai pointeur précis (souris/trackpad). */
@media (hover: hover) and (pointer: fine) {
  button:hover { transform: translateY(-1px); background: #ffa733; }
  .big-button.biomass:hover { background: #82c94a; }
  .tab-btn:hover { color: var(--text); }
  .lang-btn:hover { opacity: .8; }
  .footer-link:hover { color: var(--orange); }
  .cc-manual-btn:hover:not(:disabled) { transform: translateY(-1px); }
  .restore-server-save-btn:hover { background: rgba(255, 139, 0, .16); }
  .cc-util-btn:hover { border-color: var(--orange); color: var(--orange); }
  .cc-util-discord:hover {
    border-color: #5865f2;
    color: #5865f2;
  }
  .cc-nav-tab:hover { color: var(--text); }
  .cc-more-item:hover { background: rgba(255,255,255,.06); color: var(--text); }
  .shop-sink-buy:hover:not(:disabled) { background:rgba(255,139,0,.16); border-color:var(--orange); }
  .event-choice-btn:hover {
    border-color: var(--orange);
    background: rgba(255, 140, 26, .12);
    transform: translateY(-1px);
  }
  .machine-control-btn:hover:not(:disabled) {
    border-color: var(--orange);
    color: var(--orange);
  }
  .validate-tier-btn:hover { background: rgba(246, 159, 26, .20); }
  .purchase-confirm-btn:hover { background: rgba(246, 159, 26, .20); }
  .purchase-confirm-cancel:hover { border-color: var(--text); color: var(--text); }
  .factory-buy-btn:hover:not(:disabled) { filter: brightness(1.2); border-color: var(--orange); }
  .factory-toolbar button:hover { border-color: var(--orange); color: #fff; }
  .sink-recipe-option:hover:not(:disabled) { border-color:#ffc169; }
  .factory-detail-actions button:hover:not(:disabled) { border-color:#58cbe8; color:#fff; }
}


.app-shell { width: min(1400px, calc(100% - 2rem)); margin: 0 auto; padding: 2rem 0; }
.topbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1rem;
  margin-bottom: 1rem;
}
.eyebrow { color: var(--orange); font-weight: 800; letter-spacing: .08em; text-transform: uppercase; margin: 0 0 .4rem; font-size: .75rem; }
h1, h2, h3, p { margin-top: 0; }
h1 { margin-bottom: 0; font-size: clamp(2rem, 5vw, 4rem); line-height: .95; }
h2 { font-size: 1.15rem; margin-bottom: 1rem; }
h3 { margin-bottom: .35rem; }
p, small { color: var(--muted); }
.header-actions { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; justify-content: flex-end; }
.version { background: var(--panel); border: 1px solid var(--border); padding: .55rem .75rem; border-radius: 999px; color: var(--muted); }

.ada-card {
  background: linear-gradient(90deg, rgba(255,138,0,.2), rgba(255,138,0,.04));
  border: 1px solid rgba(255,138,0,.35);
  border-radius: 16px;
  padding: 1rem;
  margin-bottom: 1rem;
  box-shadow: var(--shadow);
  font-weight: 700;
}

.grid {
  display: grid;
  grid-template-columns: 1.1fr .9fr;
  gap: 1rem;
}
.panel {
  background: rgba(32,35,42,.92);
  border: 1px solid var(--border);
  border-radius: 18px;
  padding: 1.2rem;
  box-shadow: var(--shadow);
}
.production-panel, .shop-panel { grid-column: span 1; }
.shop-panel { grid-row: span 3; }
.big-button {
  width: 100%;
  min-height: 150px;
  font-size: 1.8rem;
  display: grid;
  place-items: center;
  gap: .3rem;
  text-transform: uppercase;
  box-shadow: inset 0 -8px 0 rgba(0,0,0,.16);
}
.big-button small { color: rgba(0,0,0,.7); font-size: .9rem; }
.stats-grid {
  margin-top: 1rem;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: .7rem;
}
.stat, .resource-row {
  background: var(--panel-2);
  border: 1px solid var(--border);
  border-radius: 14px;
  padding: .8rem;
}
.stat { display: grid; }
.resource-main { display: flex; justify-content: space-between; gap: .8rem; }
.stat span, .resource-list span { color: var(--muted); font-size: .9rem; }
.stat strong, .resource-list strong { color: var(--orange); font-size: 1.2rem; }
.resource-flow { margin-top: .3rem; font-size: .78rem; color: var(--muted); display: flex; gap: .5rem; }
.resource-flow .flow-in { color: var(--ok); }
.resource-flow .flow-out { color: var(--danger); }
.resource-list { display: grid; gap: .7rem; }
.shop-list { display: grid; gap: .8rem; }
.shop-item {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 1rem;
  align-items: center;
  background: var(--panel-2);
  border: 1px solid var(--border);
  border-radius: 16px;
  padding: 1rem;
}
.shop-item p { margin-bottom: .45rem; }
.buy-btn { min-width: 180px; }
.progress-wrap { height: 20px; background: #111; border: 1px solid var(--border); border-radius: 999px; overflow: hidden; }
.progress-bar { width: 0%; height: 100%; background: linear-gradient(90deg, var(--orange-dark), var(--orange)); transition: width .2s ease; }
.progress-label { margin: .7rem 0 1rem; }
.reward { margin-top: .8rem; padding: .8rem; border-radius: 12px; background: rgba(74,210,122,.12); color: var(--ok); border: 1px solid rgba(74,210,122,.3); font-weight: 800; }
.hidden { display: none !important; }
.log-panel ul { margin: 0; padding-left: 1rem; max-height: 250px; overflow: auto; color: var(--muted); }
.log-panel li { margin-bottom: .5rem; }

/* ---- v0.2 : énergie, paliers, événements, sync ---- */

:root {
  --power: #4ad2d2;
  --power-dark: #2f9a9a;
}

.sync-status {
  color: var(--muted);
  font-size: .8rem;
  padding: 0 .3rem;
  border-radius: 6px;
  transition: color .2s ease, background .2s ease, border-color .2s ease, box-shadow .2s ease;
}

.sync-status[data-sync-state="ok"] { color: var(--ok); }
.sync-status[data-sync-state="notice"] {
  color: #ffd166;
  font-weight: 800;
  background: rgba(255, 166, 0, .12);
  border: 1px solid rgba(255, 166, 0, .55);
  padding: .18rem .45rem;
}
.sync-status[data-sync-state="alert"] {
  color: #fff;
  font-weight: 900;
  background: rgba(218, 50, 62, .22);
  border: 1px solid #ff4d5e;
  padding: .22rem .5rem;
  box-shadow: 0 0 0 1px rgba(255, 77, 94, .18), 0 0 14px rgba(255, 45, 65, .24);
  animation: sync-alert-pulse 1.5s ease-in-out infinite;
}
@keyframes sync-alert-pulse {
  0%, 100% { box-shadow: 0 0 0 1px rgba(255, 77, 94, .18), 0 0 10px rgba(255, 45, 65, .2); }
  50% { box-shadow: 0 0 0 3px rgba(255, 77, 94, .28), 0 0 22px rgba(255, 45, 65, .48); }
}

.multi-tab-warning {
  position: fixed;
  inset: 0;
  z-index: 100000;
  display: grid;
  place-items: center;
  padding: 1rem;
  background: rgba(7, 12, 18, .88);
  backdrop-filter: blur(6px);
}

.multi-tab-warning-card {
  width: min(520px, 100%);
  padding: 1.4rem;
  border: 1px solid var(--orange-dark);
  border-radius: 16px;
  background: var(--panel);
  box-shadow: 0 20px 70px rgba(0, 0, 0, .5);
  text-align: center;
}

.multi-tab-warning-card strong { color: var(--orange); font-size: 1.1rem; }
.multi-tab-warning-card p { color: var(--text); line-height: 1.5; }
.multi-tab-warning-card .multi-tab-warning-en { color: var(--muted); font-size: .9rem; }
.multi-tab-warning-card button { margin-top: .4rem; }

.ada-card { position: relative; }
.event-banner {
  margin-top: .6rem;
  padding: .6rem .8rem;
  border-radius: 10px;
  background: rgba(255,255,255,.08);
  border: 1px dashed rgba(255,255,255,.25);
  font-weight: 600;
  font-size: .9rem;
  color: var(--text);
  display: inline-flex;
  align-items: center;
  gap: .35rem;
}
.event-icon { width: 1.1rem; height: 1.1rem; }

.manual-actions { display: grid; gap: .8rem; }
.big-button.biomass { background: #6fae3f; }

.power-panel .power-summary {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: .7rem;
  margin-bottom: .8rem;
}
.power-stat {
  background: var(--panel-2);
  border: 1px solid var(--border);
  border-radius: 14px;
  padding: .7rem .8rem;
  display: flex;
  justify-content: space-between;
  gap: .5rem;
}
.power-stat span { color: var(--muted); font-size: .85rem; }
.power-stat strong { color: var(--power); }
.power-bar-wrap { height: 16px; background: #111; border: 1px solid var(--border); border-radius: 999px; overflow: hidden; }
.power-bar { width: 100%; height: 100%; background: linear-gradient(90deg, var(--power-dark), var(--power)); transition: width .2s ease, background .2s ease; }
.power-bar.power-warning { background: linear-gradient(90deg, var(--danger), #ff9a5a); }
.power-caption { margin-top: .6rem; font-size: .85rem; }

.shop-category { margin-bottom: 1.2rem; }
.shop-category:last-child { margin-bottom: 0; }
.shop-category h3 {
  text-transform: uppercase;
  letter-spacing: .06em;
  font-size: .8rem;
  color: var(--muted);
  margin-bottom: .6rem;
}
.shop-item.locked { opacity: .55; }
.shop-item.locked h3 { color: var(--muted); }

.tiers-caption { font-size: .85rem; margin-bottom: 1rem; }

/* --- Fenêtre Options --- */
.options-list { display: flex; flex-direction: column; gap: .8rem; }
.options-row {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 12px;
  padding: .9rem 1rem;
}
.options-row strong { display: block; font-size: .92rem; margin-bottom: .2rem; }
.options-row p { margin: 0; font-size: .78rem; color: var(--muted); max-width: 34rem; }
.options-row button { flex-shrink: 0; white-space: nowrap; }

/* --- Mode testeur (v2.12) : discret dans Options, panneau distinct une
   fois débloqué -- pas fait pour attirer l'œil d'un joueur normal. */
.debug-unlock-form { display: flex; gap: .5rem; flex-shrink: 0; }
.debug-unlock-form input {
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px;
  padding: .5rem .7rem; color: var(--text); font-size: .82rem; width: 9rem;
}
.debug-panel {
  margin-top: .8rem; padding: 1rem; border-radius: 12px;
  background: rgba(255,138,0,.06); border: 1px dashed var(--orange-dark);
}
.debug-panel h3 { margin: 0 0 .3rem; font-size: .95rem; color: var(--orange); }
.debug-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: .6rem; margin: .8rem 0; }
.debug-field { display: flex; flex-direction: column; gap: .25rem; font-size: .74rem; color: var(--muted); }
.debug-field input {
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px;
  padding: .4rem .55rem; color: var(--text); font-size: .82rem; font-variant-numeric: tabular-nums;
}
.debug-json-details { margin-top: .8rem; }
.debug-json-details summary { cursor: pointer; font-size: .8rem; color: var(--muted); }
.debug-json-details textarea {
  width: 100%; margin-top: .6rem; background: var(--panel-2); border: 1px solid var(--border);
  border-radius: 8px; padding: .6rem; color: var(--text); font-family: var(--font-mono2); font-size: .74rem;
  resize: vertical;
}
.debug-json-details textarea.debug-json-error { border-color: var(--danger); }
.debug-panel-exit { margin-top: 1rem; padding-top: .8rem; border-top: 1px dashed var(--border); }

.report-field { display: flex; flex-direction: column; gap: .4rem; }
.report-field label { font-size: .82rem; color: var(--muted); font-weight: 600; }
.report-field input[type="text"], .report-field input[type="password"], .report-field input[type="email"], .report-field input[type="number"], .report-field textarea {
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 10px;
  color: var(--text); padding: .6rem .75rem; font: inherit; resize: vertical;
  /* Sans ceci, ces trois types de champ retombent sur le style par défaut
     du navigateur (fond blanc, police système) — jamais couverts jusqu'ici
     puisque seul input[type="text"] était visé, alors que les comptes
     (mot de passe/e-mail) et la contribution aux événements (nombre) s'en
     servent aussi. */
  -webkit-appearance: none;
  appearance: none;
}
.report-field input[type="text"]:focus, .report-field input[type="password"]:focus, .report-field input[type="email"]:focus, .report-field input[type="number"]:focus, .report-field textarea:focus { outline: none; border-color: var(--orange); }
.report-field input[type="password"] { letter-spacing: .15em; }
.report-field input:disabled { opacity: .5; cursor: not-allowed; }
/* Chrome/Edge forcent un fond clair sur un champ auto-rempli, en ignorant
   le background normal — ce délai de transition énorme est le contournement
   standard (le navigateur applique bien le fond, juste "après" une
   transition qui ne finit jamais en pratique). */
.report-field input:-webkit-autofill,
.report-field input:-webkit-autofill:hover,
.report-field input:-webkit-autofill:focus {
  -webkit-text-fill-color: var(--text);
  -webkit-box-shadow: 0 0 0px 1000px var(--panel-2) inset;
  transition: background-color 9999s ease-in-out 0s;
}
.report-checkbox-label { display: flex; align-items: center; gap: .5rem; font-size: .85rem; cursor: pointer; }
.report-screenshot-preview { margin-top: .5rem; border-radius: 10px; overflow: hidden; border: 1px solid var(--border); max-width: 320px; }
.report-screenshot-preview img { display: block; width: 100%; height: auto; }
#reportSubmitBtn { align-self: flex-start; }
#reportSubmitBtn:disabled { opacity: .5; cursor: not-allowed; }
#reportStatus:empty { display: none; }
#reportStatus.report-status-error { color: var(--danger); }
#reportStatus.report-status-ok { color: var(--ok); }

/* --- Fenêtre Statistiques --- */
.stats-section { margin-bottom: 1.3rem; }
.stats-section:last-child { margin-bottom: 0; }
.stats-section h3 {
  text-transform: uppercase; letter-spacing: .06em; font-size: .8rem;
  color: var(--muted); margin: 0 0 .6rem;
}
.stats-table { display: flex; flex-direction: column; gap: .3rem; }
.stats-row {
  display: grid; grid-template-columns: 1fr auto auto; gap: 1rem; align-items: center;
  padding: .5rem .8rem; border-radius: 9px; background: var(--panel-2);
  font-size: .85rem;
}
.stats-row.stats-header {
  background: transparent; padding: 0 .8rem; font-size: .68rem;
  text-transform: uppercase; letter-spacing: .04em; color: var(--muted);
}
.stats-row-label { display: flex; align-items: center; gap: .4rem; }
.stats-row-run, .stats-row-life { text-align: right; min-width: 5rem; font-weight: 700; }
.stats-row-life { color: var(--orange); }
.stats-header .stats-row-run, .stats-header .stats-row-life { font-weight: 500; }
.stats-prestige-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(145px,1fr)); gap:.55rem; }
.stats-prestige-card { min-height:92px; padding:.7rem .8rem; border:1px solid var(--border); border-radius:10px; background:var(--panel-2); }
.stats-prestige-card.primary { border-color:var(--orange-dark); background:rgba(255,139,0,.08); }
.stats-prestige-card > span { display:block; color:var(--muted); font-size:.67rem; text-transform:uppercase; letter-spacing:.04em; }
.stats-prestige-card > strong { display:block; margin:.25rem 0; color:var(--text); font-size:1.35rem; }
.stats-prestige-card.primary > strong { color:var(--orange); }
.stats-prestige-card > small { display:block; color:var(--muted); font-size:.62rem; line-height:1.35; }

/* --- Fenêtre Statistiques : grille de trophées --- */
.trophy-category { margin-top: 1rem; }
.trophy-category:first-child { margin-top: 0; }
.trophy-category h4 {
  text-transform: uppercase; letter-spacing: .05em; font-size: .72rem;
  color: var(--muted); margin: 0 0 .5rem;
}
.trophy-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: .6rem; }
.trophy-card {
  display: flex; gap: .65rem; align-items: flex-start;
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 10px;
  padding: .6rem .7rem;
}
.trophy-card.locked { opacity: .55; }
.trophy-card.unlocked { border-color: rgba(255, 138, 0, .4); background: linear-gradient(135deg, rgba(255, 138, 0, .07), var(--panel-2)); }
.trophy-icon { flex-shrink: 0; line-height: 0; }
.trophy-icon-img { width: 2rem; height: 2rem; object-fit: contain; }
.trophy-card.locked .trophy-icon-img { filter: grayscale(1) brightness(.75); }
.trophy-label { font-weight: 700; font-size: .82rem; margin-bottom: .15rem; }
.trophy-card.locked .trophy-label { color: var(--muted); letter-spacing: .08em; }
.trophy-card.unlocked .trophy-label { color: var(--orange); }
.trophy-desc { font-size: .74rem; color: var(--muted); line-height: 1.3; }
.tier-row {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: .8rem;
  padding: .7rem .8rem;
  border-radius: 12px;
  background: var(--panel-2);
  border: 1px solid var(--border);
  margin-bottom: .6rem;
  opacity: .6;
}
.tier-row.unlocked { opacity: 1; border-color: rgba(74,210,122,.35); }
.tier-status { font-size: 1.1rem; display: grid; place-items: center; }
.tier-icon { width: 1.15rem; height: 1.15rem; }
.tier-label { font-weight: 700; }
.tier-progress { color: var(--muted); font-size: .85rem; text-align: right; display: flex; align-items: center; justify-content: flex-end; gap: .5rem; }
.tier-progress-cost { white-space: nowrap; }

.assembly-req { margin-bottom: 1rem; }
.assembly-req:last-of-type { margin-bottom: 1.2rem; }
.assembly-req-label { display: flex; justify-content: space-between; font-size: .85rem; color: var(--muted); margin-bottom: .35rem; }

/* ---- v0.3 : onglets, boutique AWESOME ---- */

.tab-bar {
  display: flex;
  gap: .5rem;
  margin-bottom: 1.2rem;
  border-bottom: 1px solid var(--border);
}
.tab-btn {
  background: transparent;
  border: none;
  color: var(--muted);
  font-weight: 700;
  font-size: .95rem;
  padding: .8rem 1.1rem;
  cursor: pointer;
  border-bottom: 2px solid transparent;
  transition: color .15s ease, border-color .15s ease;
}

.tab-btn.active { color: var(--orange); border-bottom-color: var(--orange); }

.awesome-shop-panel { grid-column: 1 / -1; }
.owned-badge {
  display: inline-block;
  background: rgba(74,210,122,.15);
  color: var(--ok);
  border: 1px solid rgba(74,210,122,.35);
  border-radius: 999px;
  padding: .4rem .9rem;
  font-weight: 700;
  font-size: .85rem;
  white-space: nowrap;
}
.shop-item.locked .buy-upgrade-btn { display: none; }

/* ---- v0.4 : switch de langue ---- */

.lang-switch {
  display: flex;
  gap: .3rem;
  background: var(--panel-2);
  border: 1px solid var(--border);
  border-radius: 999px;
  padding: .25rem;
}
.lang-btn {
  background: transparent;
  border: none;
  border-radius: 999px;
  padding: .3rem .55rem;
  font-size: 1.1rem;
  line-height: 1;
  cursor: pointer;
  opacity: .5;
  filter: grayscale(60%);
  transition: opacity .15s ease, filter .15s ease, background .15s ease;
}

.lang-btn.active { opacity: 1; filter: none; background: rgba(255,255,255,.08); }

.app-footer {
  margin-top: 2rem;
  padding: 1.5rem 0 .5rem;
  border-top: 1px solid var(--border);
  text-align: center;
}
.footer-link {
  background: none;
  border: none;
  color: var(--muted);
  font-size: .85rem;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: .2em;
  padding: .4rem;
}

/* ---- v0.5 : page Évolutions (changelog) ---- */

.changelog-entry {
  border: 1px solid var(--border);
  border-radius: 14px;
  background: var(--panel-2);
  margin-bottom: .8rem;
  overflow: hidden;
}
.changelog-header {
  width: 100%;
  display: flex;
  align-items: center;
  gap: .8rem;
  background: transparent;
  border: none;
  color: var(--text);
  padding: .9rem 1.1rem;
  cursor: pointer;
  text-align: left;
  font-size: 1rem;
}
.changelog-version {
  font-weight: 800;
  color: var(--orange);
  min-width: 3.5rem;
}
.changelog-title { flex: 1; font-weight: 600; }
.changelog-chevron { color: var(--muted); transition: transform .15s ease; }
.changelog-entry.open .changelog-chevron { transform: rotate(180deg); }
.changelog-items {
  list-style: disc;
  margin: 0;
  padding: 0 1.4rem 1.1rem 2.2rem;
  color: var(--muted);
  font-size: .92rem;
  line-height: 1.6;
  display: none;
}
.changelog-entry.open .changelog-items { display: block; }
.changelog-items li { margin-bottom: .4rem; }
.changelog-items li:last-child { margin-bottom: 0; }

@media (max-width: 980px) {
  .grid { grid-template-columns: 1fr; }
  .shop-panel { grid-row: auto; }
  .stats-grid { grid-template-columns: repeat(2, 1fr); }
  .shop-item { grid-template-columns: 1fr; }
  .topbar { align-items: flex-start; flex-direction: column; }
  .header-actions { justify-content: flex-start; }
}

@media (max-width: 560px) {
  .app-shell { width: min(100% - 1rem, 1400px); padding: .75rem 0; }
  .panel { padding: 1rem; }
  .stats-grid { grid-template-columns: 1fr; }
  .big-button { min-height: 120px; font-size: 1.4rem; }
  .power-panel .power-summary { grid-template-columns: 1fr; }
  .tier-row { grid-template-columns: auto 1fr; }
  .tier-progress { grid-column: span 2; text-align: left; justify-content: flex-start; }
}

/* =========================================================================
 * Branche GRAPH2 — présentation façon Cookie Clicker (rangées + boutique)
 * ========================================================================= */

* { box-sizing: border-box; }
.fc-icon {
  display: inline-block;
  width: 1.35em;
  height: 1.35em;
  object-fit: contain;
  vertical-align: -0.25em;
  filter: drop-shadow(0 2px 4px rgba(0,0,0,.45));
  pointer-events: none;
  user-select: none;
}

body { margin: 0; }

.cc-shell {
  display: grid;
  grid-template-columns: 42% 58%;
  height: 100vh;
  overflow: hidden;
  transition: grid-template-columns .25s ease;
}
/* Une fois qu'au moins une Foreuse de Fer automatise le minage, le panneau
   gauche n'a plus besoin de dominer l'écran : on lui laisse une largeur fixe
   modeste et on rend le reste (tableau de bord + boutique) à la Boutique,
   qui est ce que les joueurs regardent réellement une fois lancés. */
.cc-shell.compact {
  grid-template-columns: 260px 1fr;
}

/* ---- Panneau gauche : zone cliquable ---- */
.cc-left {
  background: radial-gradient(circle at 50% 40%, #1c1f26 0%, #0d0e12 100%);
  display: flex;
  flex-direction: column;
  padding: 1rem 1.4rem;
  position: relative;
  overflow: hidden;
}
.cc-left-header { display: flex; justify-content: space-between; align-items: center; }
.cc-left-header .eyebrow { margin: 0; }

.cc-click-zone {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: relative;
  gap: .6rem;
  transition: gap .2s ease;
}
.cc-clutter {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  z-index: 0;
  --clutter-speed: 2.2s;
}
.cc-clutter span {
  position: absolute;
  opacity: .35;
  filter: saturate(.6);
  animation: clutter-pulse var(--clutter-speed, 2.2s) ease-in-out infinite;
  animation-delay: calc(var(--i, 0) * -0.17s); /* déphasage : évite que toutes les icônes pulsent à l'unisson */
  animation-play-state: running;
}
/* Aucune extraction en cours (tout début de partie, avant le premier
   extracteur) : pas de pulsation plutôt qu'un rythme figé à vide. */
.cc-clutter.idle span { animation-play-state: paused; opacity: .28; }
@keyframes clutter-pulse {
  0%, 100% { opacity: .3; filter: saturate(.6) brightness(1); }
  50% { opacity: .75; filter: saturate(.9) brightness(1.4); }
}
.clutter-icon { width: 1.4rem; height: 1.4rem; }

.cc-hint { position: relative; z-index: 1; font-size: .8rem; color: var(--muted); margin: 0; transition: opacity .2s ease, height .2s ease; }

/* Mode compact : le panneau gauche devient un simple rappel, la vraie place
   revient au tableau de bord et à la Boutique dans le panneau droit. */
.cc-shell.compact .cc-click-zone { gap: .3rem; }
.cc-shell.compact .cc-hint { display: none; }
.cc-shell.compact .cc-secondary-actions { transform: none; }

.cc-secondary-actions {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  flex-wrap: nowrap;
  gap: .6rem;
  align-items: stretch;
  justify-content: center;
  width: 100%;
  max-width: 220px;
  margin-top: .35rem;
}

.cc-manual-action { width: 100%; }
.cc-auto-explore-toggle {
  display: flex;
  align-items: center;
  gap: .5rem;
  margin-top: .4rem;
  font-size: .72rem;
  color: var(--muted);
  cursor: pointer;
}
.cc-auto-explore-toggle input[type="checkbox"] {
  appearance: none;
  -webkit-appearance: none;
  flex-shrink: 0;
  width: 34px;
  height: 19px;
  margin: 0;
  border: 1px solid var(--border);
  border-radius: 999px;
  background: var(--panel-2);
  position: relative;
  cursor: pointer;
  transition: background .18s ease, border-color .18s ease;
}
.cc-auto-explore-toggle input[type="checkbox"]::before {
  content: '';
  position: absolute;
  top: 1px;
  left: 1px;
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: var(--muted);
  transition: transform .18s ease, background .18s ease;
}
.cc-auto-explore-toggle input[type="checkbox"]:checked {
  background: rgba(255, 140, 26, .22);
  border-color: var(--orange);
}
.cc-auto-explore-toggle input[type="checkbox"]:checked::before {
  transform: translateX(15px);
  background: var(--orange);
}
.cc-auto-explore-toggle input[type="checkbox"]:focus-visible {
  outline: 2px solid var(--orange);
  outline-offset: 2px;
}

.options-toggle { display: flex; align-items: center; gap: .5rem; font-size: .82rem; color: var(--text); cursor: pointer; }
.options-toggle input { accent-color: var(--orange); cursor: pointer; width: 18px; height: 18px; }

/* coupe toute animation/transition CSS d'un coup — option Options, pour le
   confort visuel ou les préférences de mouvement réduit. */
body.no-animations *, body.no-animations *::before, body.no-animations *::after {
  animation: none !important;
  transition: none !important;
}
.cc-manual-btn {
  position: relative;
  overflow: hidden;
  width: 100%;
  padding: .55rem .7rem;
  border-radius: 12px;
  border: 2px solid var(--tint, var(--orange-dark));
  background: radial-gradient(circle at 20% 20%, #383c44, #202329 75%);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--tint, #ff8a00) 18%, transparent), 0 6px 12px rgba(0,0,0,.35);
  cursor: pointer;
  color: var(--text);
  transition: transform .08s ease;
}

.cc-manual-btn:active:not(:disabled) { transform: scale(.97); }
.cc-manual-btn:disabled { opacity: .5; cursor: not-allowed; }
/* Remplissage de progression À L'INTÉRIEUR du bouton (pas une barre séparée
   en dessous) : une bande colorée avance de gauche à droite au fil du
   minuteur, directement en fond du bouton lui-même. */
.cc-manual-btn-fill {
  position: absolute;
  inset: 0;
  width: 0%;
  z-index: 0;
  background: linear-gradient(90deg, color-mix(in srgb, var(--tint, var(--orange)) 55%, transparent), color-mix(in srgb, var(--tint, var(--orange)) 30%, transparent));
  transition: width .3s linear;
}
.cc-manual-btn-content {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  gap: .5rem;
  width: 100%;
}
.cc-manual-icon { width: 1.7rem; height: 1.7rem; flex-shrink: 0; filter: drop-shadow(0 2px 4px rgba(0,0,0,.5)); }
.cc-manual-label { flex: 1; text-align: left; font-size: .82rem; font-weight: 700; }
.cc-manual-dur { font-size: .64rem; color: var(--muted); font-family: ui-monospace, Consolas, monospace; }

.cc-manual-progress { margin-top: .3rem; padding: 0 .2rem; }
.cc-manual-progress-text { display: block; font-size: .62rem; color: var(--muted); text-align: center; }

/* --- Fenêtre Récolter : sélection de ressources + aperçu ---
   Demande explicite : puces "en photo" -- grande icône en avant plutôt
   qu'une icône minuscule à côté du texte. Carte verticale plutôt qu'une
   ligne icône+texte. */
.res-pick-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: .6rem; margin: .8rem 0; }
.res-pick-chip {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .45rem;
  padding: .9rem .5rem; border-radius: 12px;
  background: var(--panel-2); border: 1px solid var(--border);
  color: var(--text); font-size: .72rem; font-weight: 600; text-align: center; cursor: pointer;
  transition: border-color .12s ease, background .12s ease, transform .12s ease;
}
.res-pick-chip:hover { transform: translateY(-2px); }
.res-pick-chip.sel { border-color: var(--orange); background: color-mix(in srgb, var(--orange) 12%, var(--panel-2)); }
.res-pick-icon { width: 2.6rem; height: 2.6rem; filter: drop-shadow(0 3px 6px rgba(0,0,0,.4)); }
.yield-preview { background: var(--bg-soft); border-radius: 9px; padding: .6rem .8rem; margin-bottom: .9rem; font-size: .78rem; }
.yield-preview .yield-line { display: flex; justify-content: space-between; padding: .1rem 0; color: var(--ok); }
.yield-preview .yield-malus { color: var(--danger); font-size: .7rem; margin-top: .3rem; }
.biomass-automation-panel {
  margin: .8rem 0 1rem; padding: .75rem .85rem;
  border: 1px solid color-mix(in srgb, var(--power) 55%, var(--border));
  border-radius: 9px; background: color-mix(in srgb, var(--power) 7%, var(--panel-2));
}
.biomass-automation-panel.is-full { border-color: var(--orange); background: color-mix(in srgb, var(--orange) 9%, var(--panel-2)); }
.biomass-automation-heading { display: flex; justify-content: space-between; gap: .7rem; color: var(--text); font-size: .78rem; }
.biomass-automation-heading span { color: var(--power); font-family: ui-monospace, Consolas, monospace; font-weight: 700; }
.biomass-automation-track { height: 7px; margin: .55rem 0 .4rem; overflow: hidden; border-radius: 99px; background: var(--bg-soft); }
.biomass-automation-track span { display: block; height: 100%; border-radius: inherit; background: var(--power); transition: width .2s ease; }
.biomass-automation-panel.is-full .biomass-automation-track span { background: var(--orange); }
.biomass-empty-btn { width: 100%; margin-top: .35rem; }

/* --- Fenêtre Produire : liste de cibles + bannière active --- */
.prod-target-list { display: flex; flex-direction: column; gap: .4rem; margin: .8rem 0; }
.prod-target-row {
  display: flex; align-items: center; gap: .5rem;
  padding: .55rem .7rem; border-radius: 9px;
  background: var(--panel-2); border: 1px solid var(--border);
  color: var(--text); font-size: .8rem; cursor: pointer; text-align: left;
}
.prod-target-row span { flex: 1; }
.prod-target-row b { color: var(--power); }
.prod-target-row.sel { border-color: var(--power); background: color-mix(in srgb, var(--power) 10%, var(--panel-2)); }
.active-banner {
  background: color-mix(in srgb, var(--power) 12%, var(--panel));
  border: 1px solid var(--power); border-radius: 9px;
  padding: .6rem .8rem; font-size: .78rem; margin-top: .6rem;
  display: flex; align-items: center; justify-content: space-between; gap: .6rem;
}
.stop-produce-btn { background: var(--panel-2); color: var(--text); border: 1px solid var(--border); border-radius: 7px; padding: .3rem .6rem; font-size: .7rem; cursor: pointer; white-space: nowrap; }

.cc-left-footer {
  display: flex;
  align-items: center;
  gap: .6rem;
  flex-wrap: wrap;
  position: relative;
  z-index: 1;
}
.cc-left-footer .sync-status { color: var(--muted); font-size: .75rem; margin-right: auto; }
.cc-left-footer .sync-status[data-sync-state="ok"] { color: var(--ok); }
.cc-left-footer .sync-status[data-sync-state="notice"] { color: #ffd166; }
.cc-left-footer .sync-status[data-sync-state="alert"] { color: #fff; }
.mobile-sync-status { display:none; }
.footer-disclaimer { color: var(--muted); font-size: .7rem; opacity: .65; }
.footer-privacy-link { color: var(--muted); font-size: .7rem; opacity: .65; text-decoration: underline; margin-left: .5rem; }
.footer-privacy-link:hover { opacity: 1; }
.options-disclaimer {
  margin-top: 1.2rem;
  padding-top: .9rem;
  border-top: 1px solid var(--border);
  font-size: .74rem;
  opacity: .75;
}

.help-sections {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  margin-top: 1.2rem;
}
.help-section {
  border: 1px solid rgba(92,185,208,.22);
  border-left: 3px solid var(--orange);
  background: rgba(10,17,22,.72);
  padding: .75rem .9rem;
}
.help-section summary {
  cursor: pointer;
  list-style: none;
  display: flex;
  align-items: center;
  gap: .55rem;
  min-height: 1.7rem;
}
.help-section summary::-webkit-details-marker { display: none; }
.help-section summary::before {
  content: '＋';
  flex: 0 0 auto;
  color: var(--orange);
  font-family: ui-monospace, Consolas, monospace;
  font-weight: 900;
}
.help-section[open] summary::before { content: '−'; }
.help-section summary h3 { flex: 1; }
.help-section p { padding-left: 1.45rem; margin-top: .55rem; }
.help-section h3 {
  margin: 0 0 .3rem;
  font-size: .95rem;
}
.help-section p {
  margin: 0;
  color: var(--muted);
  font-size: .88rem;
  line-height: 1.5;
}
@media (max-width: 700px) {
  .help-sections { gap: .55rem; margin-top: .9rem; }
  .help-section { padding: .65rem .7rem; }
  .help-section h3 { font-size: .86rem; }
  .help-section p { padding-left: 1.25rem; font-size: .8rem; line-height: 1.45; }
}
.restore-server-save-btn {
  padding: .45rem .7rem;
  border: 1px solid var(--orange-dark);
  border-radius: 999px;
  background: rgba(255, 139, 0, .08);
  color: var(--orange);
  font-size: .72rem;
  font-weight: 700;
  cursor: pointer;
}

/* ---- Panneau droit ---- */
.cc-right {
  display: flex;
  flex-direction: column;
  background: var(--panel);
  border-left: 1px solid var(--border);
  overflow: hidden;
}
/* ===================== En-tête v1.9 (marque + navigation + statut) ===================== */
.cc-header-v2 { background: var(--bg-soft); border-bottom: 1px solid var(--border); }
.cc-brand-row { display: flex; align-items: center; justify-content: space-between; padding: .55rem .9rem .45rem; flex-wrap: wrap; gap: .5rem; }
.cc-brand { display: flex; align-items: center; gap: .5rem; }
.cc-brand-mark {
  width: 26px; height: 26px;
  background: rgba(255,138,0,.15); border: 1px solid rgba(255,138,0,.4);
  clip-path: polygon(20% 0, 100% 0, 100% 80%, 80% 100%, 0 100%, 0 20%);
  display: flex; align-items: center; justify-content: center;
  color: var(--orange); font-family: var(--font-display); font-weight: 700; font-size: .72rem;
}
.cc-brand-word { font-family: var(--font-display); font-weight: 700; font-size: .88rem; letter-spacing: .05em; color: var(--text); }
.cc-brand-word span { color: var(--orange); }
.cc-brand-sub { font-family: var(--font-mono2); font-size: .58rem; color: var(--muted); letter-spacing: .07em; margin-left: .3rem; text-transform: uppercase; }

.cc-util-row { display: flex; align-items: center; gap: .35rem; flex-wrap: wrap; }
.cc-util-btn {
  font-family: var(--font-mono2); font-size: .68rem; color: var(--muted);
  background: transparent; border: 1px solid var(--border); border-radius: 3px;
  padding: .3rem .55rem; cursor: pointer; display: inline-flex; align-items: center; gap: .3rem;
  text-decoration: none; transition: border-color .15s, color .15s;
}
.cc-util-discord { color: #8ea6ff; border-color: rgba(142,166,255,.3); }

.cc-more-wrap { position: relative; }
.cc-more-panel {
  position: absolute; top: calc(100% + 5px); right: 0; z-index: 20;
  background: var(--panel-2); border: 1px solid var(--border);
  border-radius: 6px; padding: .35rem; min-width: 180px;
  box-shadow: var(--shadow); display: grid; gap: .1rem;
}
.cc-more-item {
  display: flex; align-items: center; gap: .5rem;
  padding: .45rem .6rem; border-radius: 4px; cursor: pointer;
  font-size: .78rem; color: var(--muted); background: transparent; border: none;
  text-align: left; width: 100%; transition: background .12s, color .12s;
}
.cc-more-divider { height: 1px; background: var(--border); margin: .25rem .15rem; }
.cc-more-language {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .7rem;
  padding: .4rem .55rem;
  color: var(--muted);
  font: 700 .68rem/1 var(--font-display);
}
.cc-more-language-buttons { display: flex; gap: 3px; }
.cc-more-lang-btn {
  min-width: 30px;
  height: 25px;
  padding: 0 6px;
  border: 1px solid rgba(255,255,255,.1);
  border-radius: 3px;
  background: #10161b;
  color: #65717b;
  font: 700 9px/1 var(--font-mono2);
  cursor: pointer;
}
.cc-more-lang-btn:hover { color: var(--text); border-color: rgba(255,138,0,.38); }
.cc-more-lang-btn.active { color: #111; background: var(--orange); border-color: var(--orange); }

.cc-main-tabs { display: flex; gap: .25rem; padding: 0 .7rem; flex-wrap: wrap; }
.cc-nav-tab {
  font-family: var(--font-display); font-weight: 600; font-size: .74rem; letter-spacing: .01em;
  color: var(--muted); background: transparent; border: none; cursor: pointer;
  padding: .55rem .8rem .5rem;
  clip-path: polygon(8px 0, 100% 0, 100% 100%, 0 100%, 0 8px);
  position: relative; top: 1px;
  display: flex; align-items: center; gap: .4rem;
  transition: color .15s;
}
.cc-tab-dot { width: 5px; height: 5px; border-radius: 50%; background: var(--muted); opacity: .5; flex-shrink: 0; }
.cc-nav-tab.active {
  color: var(--text); background: var(--bg);
  border: 1px solid var(--border); border-bottom: 1px solid var(--bg);
}
.cc-nav-tab.active .cc-tab-dot { background: var(--orange); opacity: 1; box-shadow: 0 0 5px rgba(255,138,0,.7); }
.cc-nav-tab.cc-tab-soon { color: var(--muted); opacity: .6; cursor: default; }
.cc-nav-tab.cc-tab-soon:disabled { pointer-events: none; }
.cc-soon-badge {
  font-family: var(--font-mono2); font-size: .55rem; letter-spacing: .05em;
  color: var(--cyan); background: var(--cyan-dim); border: 1px solid rgba(79,214,240,.35);
  padding: 1px 5px; border-radius: 2px; text-transform: uppercase;
}

.cc-status-strip {
  display: flex; align-items: center; gap: 0; flex-wrap: wrap; row-gap: .4rem;
  padding: .5rem .9rem; border-bottom: 1px solid var(--border); background: var(--panel);
}
.cc-status-ada {
  flex: 1 1 260px; min-width: 200px; display: flex; align-items: center; gap: .5rem;
  font-size: .78rem; color: var(--muted); overflow: hidden;
}
.cc-status-ada-tag {
  font-family: var(--font-mono2); font-size: .58rem; letter-spacing: .08em;
  color: var(--cyan); background: var(--cyan-dim); border: 1px solid rgba(79,214,240,.3);
  padding: 1px 5px; border-radius: 2px; flex-shrink: 0;
}
.cc-status-chip { display: flex; align-items: center; gap: .5rem; padding: .3rem .7rem; margin-left: .3rem; border-left: 1px solid var(--border); }
.cc-status-tier .cc-tier-mini { margin-left: 0; white-space: nowrap; font-size: .7rem; }
.cc-status-tier .cc-tier-mini-bar { width: 90px; max-width: 90px; }

.cc-power-panel, .cc-currency-panel {
  background: transparent; border: none; border-left: 1px solid var(--border);
  border-radius: 0; display: flex; align-items: center; gap: .5rem; padding: .3rem .7rem;
}
/* v2.4.3 : le panneau pouvait grandir sans limite (flex 0 0 auto) et son
   texte ne se repliait jamais -- avec le message de délestage complet
   (« Délestage : 98% alimenté · 295.0 MW demandés »), il débordait à
   droite sur téléphone. Même schéma que le Tableau de bord corrigé en
   v2.4.0-e : nowrap + refus de rétrécir. */
.cc-power-panel { flex: 1 1 auto; min-width: 0; }
.cc-currency-panel { flex: 0 1 auto; min-width: 0; flex-wrap: wrap; row-gap: .3rem; }
.cc-community-event-widget {
  flex: 1 1 260px; min-width: 200px;
  display: flex; align-items: center; gap: .5rem;
  background: linear-gradient(90deg, transparent, rgba(255,138,0,.06));
  border: none; border-left: 1px solid var(--border); border-radius: 0 4px 4px 0;
  padding: .35rem .7rem; margin-left: .3rem; cursor: pointer; color: inherit; font-family: inherit; text-align: left;
}
.cc-community-event-widget:hover { background: linear-gradient(90deg, transparent, rgba(255,140,26,.1)); }
.cc-community-event-widget .fc-icon { width: 1.5rem; height: 1.5rem; flex-shrink: 0; }
.cc-community-event-info { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: .2rem; }
.cc-community-event-title { font-size: .68rem; color: var(--orange); white-space: normal; line-height: 1.2; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; }
.cc-community-event-track { display: block; height: 5px; background: #111; border-radius: 999px; overflow: hidden; }
.cc-community-event-end { display: block; font-size: .58rem; color: var(--muted); margin-top: .1rem; }
.cc-community-event-fill { display: block; height: 100%; background: var(--orange); transition: width .3s ease; }
.community-contribute-input-row { display: flex; gap: .5rem; }
.community-contribute-input-row input { flex: 1; min-width: 0; }
.community-contribute-input-row button { flex-shrink: 0; }
@media (max-width: 720px) {
  .cc-community-event-widget { flex-basis: 100%; order: 3; border-left: none; border-top: 1px solid var(--border); margin-left: 0; padding-top: .5rem; }
}
.cc-currency-panel .event-banner { margin-top: 0; }
.cc-event-status {
  margin: 0;
  flex: 0 1 auto;
  min-width: 0;
  max-width: min(420px, 36vw);
  white-space: normal;
  line-height: 1.25;
}
@media (max-width: 720px) {
  .cc-event-status:not(.hidden) {
    display: flex;
    order: 4;
    width: 100%;
    max-width: none;
    margin-top: .15rem;
    padding: .48rem .65rem;
    border-color: rgba(255,138,0,.45);
    background: rgba(255,138,0,.09);
    font-size: .68rem;
  }
}
.cc-power-panel .power-gauge-svg { flex-shrink: 0; }
.cc-power-panel .power-gauge-track { fill: none; stroke: var(--panel-2); }
.cc-power-panel .power-gauge-fill { fill: none; stroke: var(--power); stroke-linecap: round; transition: stroke-dashoffset .6s ease; }
.cc-power-panel.warning .power-gauge-fill { stroke: var(--danger); }
.cc-power-panel .power-gauge-text { display: flex; align-items: baseline; gap: .4rem; line-height: 1.2; white-space: nowrap; font-family: var(--font-mono2); min-width: 0; flex-wrap: wrap; }
.cc-power-panel .power-gauge-value { font-size: .88rem; font-weight: 700; }
.cc-power-panel .power-gauge-value small { font-size: .6rem; color: var(--muted); font-weight: 600; }
.cc-power-panel .power-gauge-sub { font-size: .6rem; color: var(--muted); white-space: normal; min-width: 0; }
/* Sur téléphone, la jauge et son texte passent sur deux niveaux plutôt
   que de se disputer une largeur qui n'existe pas. */
@media (max-width: 720px) {
  .cc-power-panel .power-gauge-text { flex-direction: column; align-items: flex-start; gap: .1rem; }
  .cc-power-panel .power-gauge-sub { font-size: .58rem; line-height: 1.25; }
}
.cc-power-panel.warning .power-gauge-sub { color: var(--danger); }
.cc-power-panel .power-gauge-none { font-size: .7rem; color: var(--muted); }
.cc-currency-panel .cc-currency-icon { margin-left: 0; }

.cc-currency-icon { display: inline-flex; align-items: center; }
.cc-currency-icon .fc-icon { width: 1.25rem; height: 1.25rem; }
.cc-currency-panel strong { font-family: var(--font-mono2); font-size: .92rem; color: var(--orange); }
.cc-tier-mini { font-size: .7rem; color: var(--muted); margin-left: .5rem; font-family: var(--font-mono2); }
.cc-tier-mini-bar { flex: 1; max-width: 180px; height: 6px; background: #111; border-radius: 999px; overflow: hidden; }
.cc-tier-mini-fill { height: 100%; background: var(--orange); }

.cc-body { flex: 1; display: flex; flex-direction: column; overflow: hidden; min-height: 0; }

.tab-badge {
  position: absolute;
  top: -3px;
  right: -3px;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--danger);
  border: 1.5px solid var(--bg);
}
.cc-main-panel {
  display: none;
  flex: 1;
  min-height: 0;
  overflow: hidden;
}
.cc-main-panel.active { display: flex; }

/* ---- Tableau de bord de production : une ligne par bâtiment possédé, avec
   le total agrégé (débit réel, MW consommés/produits). ---- */
.cc-dash-heading {
  font-size: .82rem;
  text-transform: uppercase;
  letter-spacing: .05em;
  color: var(--muted);
  margin: 0;
  padding: .6rem .9rem;
  border-bottom: 1px solid var(--border);
  background: var(--panel-2);
}
.cc-lanes {
  flex: 1;
  overflow-y: auto;
}
.cc-dash-empty {
  padding: 1.2rem;
  color: var(--muted);
  font-size: .82rem;
  text-align: center;
}
.cc-dash-row {
  display: flex;
  align-items: center;
  gap: .7rem;
  padding: .5rem .9rem;
  border-bottom: 1px solid var(--border);
  border-left: 3px solid var(--dash-tint, var(--border));
  background: color-mix(in srgb, var(--dash-tint, #333) 7%, var(--panel));
}
.cc-dash-row.dragging { opacity: .5; }
.dash-drag-handle {
  cursor: grab;
  color: var(--muted);
  touch-action: none;
  flex-shrink: 0;
  padding: 0 .1rem;
  user-select: none;
  -webkit-user-select: none;
}
.cc-dash-row.dragging .dash-drag-handle { cursor: grabbing; }
.cc-dash-ring-wrap { position: relative; width: 2.1rem; height: 2.1rem; flex-shrink: 0; }
.cc-dash-ring-wrap .cc-dash-icon { width: 1.6rem; height: 1.6rem; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
.cc-dash-ring { position: absolute; inset: 0; }
.cc-dash-ring .ring-track { fill: none; stroke: var(--panel-2); stroke-width: 3; }
.cc-dash-ring .ring-fill { fill: none; stroke: var(--orange); stroke-width: 3; stroke-linecap: round; transition: stroke-dashoffset .5s ease; }
.cc-dash-info { flex: 1; min-width: 0; }
.cc-dash-name { font-size: .82rem; font-weight: 700; display: flex; gap: .4rem; align-items: baseline; flex-wrap: wrap; }
.cc-dash-name .dash-count { color: var(--orange); }
.cc-dash-name .dash-mk { font-size: .64rem; color: var(--ok); }
.cc-dash-name .dash-active { color: var(--muted); font-size: .68rem; }
.cc-dash-detail { font-size: .72rem; color: var(--muted); }
/* Colonne de droite (débits). Signalé : avec les recettes à 3-4 intrants
   des Paliers 5/6 ("0.03/s Cadres Modulaires + 0.03/s Stators
   Électromagnétiques + ..."), l'ancien couple white-space:nowrap +
   flex-shrink:0 exigeait une largeur énorme -- elle débordait de la carte
   ET écrasait la colonne de gauche à quelques pixels, d'où le nom du
   bâtiment qui s'empilait un mot par ligne. Peut désormais se replier et
   rétrécir plutôt que de pousser tout le reste. */
.cc-dash-flow { display: flex; flex-direction: column; align-items: flex-end; gap: .15rem; font-size: .74rem; font-weight: 700; white-space: normal; text-align: right; flex-shrink: 1; min-width: 0; max-width: 55%; overflow-wrap: anywhere; }
.cc-dash-flow .recipe-out { font-size: .8rem; }
.cc-dash-flow .recipe-in { font-weight: 500; font-size: .68rem; }
.cc-dash-flow .recipe-elec { font-weight: 500; font-size: .68rem; }
.cc-dash-flow.warning .recipe-out { color: var(--danger); }
/* Sur téléphone, deux colonnes côte à côte n'ont pas la place : la ligne
   passe sur deux niveaux, les débits sous le nom du bâtiment, alignés à
   gauche comme le reste. */
@media (max-width: 620px) {
  .cc-dash-row { flex-wrap: wrap; }
  .cc-dash-info { flex: 1 1 100%; }
  .cc-dash-flow { max-width: none; flex: 1 1 100%; align-items: flex-start; text-align: left; padding-left: 2.8rem; }
}

.cc-lanes-col {
  flex-direction: column;
  border-bottom: 1px solid var(--border);
}

.cc-shop {
  flex-direction: column;
  width: auto;
  border-left: none;
  padding: 1rem 1.2rem;
  overflow-y: auto;
  background: var(--panel-2);
}
.cc-shop h2 { font-size: 1rem; margin: 0 0 .6rem; }
.cc-qty-toggle { display: flex; align-items: center; gap: .4rem; margin-bottom: .8rem; font-size: .78rem; color: var(--muted); }
.qty-btn {
  background: var(--panel);
  border: 1px solid var(--border);
  color: var(--text);
  border-radius: 6px;
  padding: .25rem .6rem;
  cursor: pointer;
  font-size: .78rem;
}
.qty-btn.active { border-color: var(--orange); color: var(--orange); }

.report-type-toggle { display: flex; gap: .5rem; }
.report-type-btn {
  flex: 1;
  background: var(--panel);
  border: 1px solid var(--border);
  color: var(--text);
  border-radius: 8px;
  padding: .5rem;
  cursor: pointer;
  font-weight: 700;
}
.report-type-btn.active { border-color: var(--orange); color: var(--orange); background: rgba(255, 140, 26, .1); }

#shopList {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
  gap: .6rem;
  align-content: start;
  align-items: start;
}
.shop-row {
  display: flex;
  flex-direction: column;
  background: var(--panel);
  border: 1px solid var(--border);
  border-left: 4px solid var(--tint, var(--border));
  border-radius: 6px;
  overflow: hidden;
  cursor: pointer;
  width: 100%;
  text-align: left;
  color: var(--text);
  padding: 0;
  transition: border-color .15s;
}
/* Signalé : la carte devenait orange et illisible en interagissant avec.
   Cause probable : la règle générique `button { background: var(--orange); }`
   (pensée pour les gros boutons d'action comme "Acheter") -- la spécificité
   de classe devrait suffire à la repousser en temps normal, mais mieux vaut
   fixer le fond explicitement sur CHAQUE état d'interaction plutôt que de
   compter dessus, au cas où un état précis (focus tactile, etc.) la
   laisserait passer. */
.shop-row,
.shop-row:hover,
.shop-row:focus,
.shop-row:focus-visible,
.shop-row:active {
  background: var(--panel);
}
.shop-row:hover { border-top-color: rgba(255,255,255,.2); border-right-color: rgba(255,255,255,.2); border-bottom-color: rgba(255,255,255,.2); }
.shop-row:focus, .shop-row:focus-visible { outline: 2px solid var(--orange); outline-offset: -2px; }
.shop-row:disabled { opacity: .4; cursor: not-allowed; }
.shop-row.locked { opacity: .4; cursor: default; padding: .6rem .65rem; }
.shop-row-top { display: flex; align-items: flex-start; gap: .55rem; padding: .55rem .6rem .3rem; }
.shop-row.locked .shop-row-top { padding: 0; }
.shop-row-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 1.9rem; height: 1.9rem; flex-shrink: 0; margin-top: .1rem;
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 5px;
}
.shop-row-icon .fc-icon { width: 1.25rem; height: 1.25rem; }
.shop-row-title-wrap { flex: 1; min-width: 0; }
/* réserve toujours 2 lignes pour le nom, même s'il tient sur une seule --
   sans ça, un nom de bâtiment plus long passant sur 2 lignes décale toute
   la carte vers le bas par rapport à ses voisines dans la même rangée. */
.shop-row-name {
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  font-size: .82rem; line-height: 1.25; min-height: 2.5em;
}
.shop-row-name .count { color: var(--orange); }
.shop-row-locked-hint { display: block; color: var(--muted); font-size: .68rem; margin-top: .3rem; }
.shop-row-power {
  display: inline-flex; align-items: center; gap: .2rem; margin-top: .3rem;
  font-size: .64rem; font-weight: 600; padding: .1rem .4rem; border-radius: 3px;
  background: rgba(217,75,75,.15); color: #ff9d95; border: 1px solid rgba(217,75,75,.3);
  min-height: 1.2em; box-sizing: content-box;
}
/* Signalé (capture réelle) : un bâtiment sans coût électrique (ex. la toute
   première Foreuse de Fer) faisait complètement disparaître cette ligne
   (display:none), rendant sa carte plus courte que ses voisines qui, elles,
   affichaient un badge -- effet "dents de scie" dans la grille. .empty
   garde exactement le même espace réservé, juste sans contenu ni couleur. */
.shop-row-power.empty { background: transparent; border-color: transparent; }
.shop-row-power .fc-icon { width: .9em; height: .9em; }
/* Segments de recette (IN/OUT) -- rouge doux = consommé (normal, pas une
   alerte), vert = produit. */
.recipe-in { color: #ff9d85; }
.recipe-out { color: var(--ok); font-weight: 700; }
.recipe-arrow { color: var(--muted); margin: 0 .25em; }
/* Réserve toujours 2 lignes, comme pour le titre -- sans ça, une recette
   sur 1 ligne (la plupart) à côté d'une qui déborde sur 2 (nom de ressource
   plus long, ou plusieurs intrants) décale les cartes entre elles. */
/* Signalé (capture réelle) : min-height réservait bien un minimum de 2
   lignes, mais ne plafonnait rien -- une recette avec des noms de
   ressources longs ("Minerai de Caterium", "Lingots de Caterium") pouvait
   déborder sur 3 lignes et repousser la carte plus haut que ses voisines.
   Même technique que le titre : -webkit-line-clamp impose un vrai plafond,
   pas juste un minimum. */
.shop-row-flow {
  padding: 0 .6rem .55rem; color: var(--muted); line-height: 1.35; font-size: .7rem;
  height: 54px; box-sizing: border-box;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
.shop-row-buybar {
  margin-top: auto; display: flex; flex-direction: column; gap: .15rem;
  background: var(--panel-2); border-top: 1px solid var(--border);
  padding: .45rem .6rem; font-size: .72rem;
}
.shop-row:hover .shop-row-buybar { background: rgba(255,138,0,.08); }
.shop-row-buy-label { font-weight: 700; text-transform: uppercase; letter-spacing: .02em; color: var(--muted); font-size: .68rem; }
.shop-row-price { font-size: .78rem; color: var(--orange); font-weight: 700; white-space: nowrap; }
.sink-shop-row { display:block; cursor:default; padding:.65rem; }
.shop-sink-main { display:flex; flex-direction: column; gap:.5rem; }
.shop-sink-main .shop-row-top { padding: 0; }
.shop-sink-buy { min-width:92px; padding:.45rem .55rem; border:1px solid var(--orange-dark); border-radius:7px; background:rgba(255,139,0,.08); color:var(--orange); cursor:pointer; align-self: flex-start; }

.shop-sink-buy:disabled { opacity:.4; cursor:not-allowed; }
.shop-sink-buy-label { display:block; margin-bottom:.15rem; color:var(--muted); font-size:.58rem; text-transform:uppercase; }
.shop-sink-slot .sink-recipe-selector { margin-top:.65rem; }
.shop-sink-selector .sink-recipe-options { grid-template-columns:1fr; }
.shop-sink-selector .sink-recipe-option { grid-template-columns:1fr; }

/* Signalé (capture mobile) : les cartes de la Boutique réservaient une
   hauteur fixe pour le titre (2 lignes) et la ligne de débit (3 lignes),
   même quand le contenu réel tenait sur une seule -- beaucoup de scroll
   pour peu d'information. Nécessaire sur desktop (#shopList est une grille
   à plusieurs colonnes, il faut que les cartes d'une même rangée
   s'alignent), mais sous 980px la grille passe de toute façon à 1 colonne
   (minmax(230px,1fr) ne laisse plus de place pour un 2e) -- aucune rangée
   à aligner, la réservation ne fait plus que gaspiller de l'espace. */
@media (max-width: 980px) {
  .shop-row-name { min-height: 0; }
  .shop-row-flow { height: auto; min-height: 0; }
  /* Le message de saturation est plus long qu'un prix normal : il doit
     pouvoir occuper deux lignes sur les petits écrans. */
  .shop-row-price-cap {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    overflow: hidden;
    white-space: normal;
    line-height: 1.25;
    min-height: 2.5em;
  }
}
.shop-sink-selector .sink-recipe-option > strong { grid-column:1; }
/* v2.4.4 : devenu un <button> repliable. Apparence volontairement
   identique à l'ancien titre (même couleur, même cadre, même graisse) --
   seuls la flèche et le compteur s'ajoutent, pour que le changement se
   remarque le moins possible. */
.shop-category-title {
  grid-column: 1 / -1;
  display: inline-flex; width: fit-content;
  align-items: center; gap: .45rem;
  font-family: var(--font-mono2, ui-monospace, monospace);
  text-transform: uppercase;
  font-size: .68rem;
  letter-spacing: .1em;
  color: var(--cyan, #4fd6f0);
  background: var(--cyan-dim, rgba(79,214,240,.12));
  border: 1px solid rgba(79,214,240,.3);
  border-radius: 3px;
  padding: .2rem .55rem;
  margin: .8rem 0 .5rem;
  cursor: pointer;
}
.shop-category-title:hover { background: rgba(79,214,240,.2); }
.shop-category-caret { transition: transform .18s ease; font-size: .8em; }
.shop-category-title.collapsed .shop-category-caret { transform: rotate(-90deg); }
.shop-category-count { opacity: .65; font-weight: 700; }
/* Section repliée : marges resserrées, pour que plusieurs sections
   fermées d'affilée forment une liste compacte et pas une suite de
   pastilles espacées dans le vide. */
.shop-category-title.collapsed { margin: .25rem 0 .1rem; }
/* Les lignes d'une section repliée disparaissent de la grille. */
.shop-row-hidden { display: none !important; }
.shop-category-title:first-child { margin-top: 0; }

/* ---- Modal (partagé avec la branche Graph) ---- */
.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,.65);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.5rem;
  /* v2.5.20 : doit rester au-dessus du header/nav mobile sticky
     (z-index 180/210) et du menu burger (400). */
  z-index: 520;
}
.modal-box {
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: 18px;
  padding: 1.6rem;
  padding-top: 2.3rem;
  max-width: 640px;
  width: 100%;
  max-height: 85vh;
  position: relative;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.modal-box.dragging { transition: none; user-select: none; }
.modal-drag-handle {
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 1.8rem;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: grab;
  color: var(--muted);
  touch-action: none;
  border-radius: 18px 18px 0 0;
}
.modal-drag-handle:active { cursor: grabbing; }
.modal-drag-handle:hover { background: rgba(255, 255, 255, .03); }
.modal-drag-handle span { font-size: .85rem; letter-spacing: .1em; pointer-events: none; }
/* Le bouton fermer (.modal-close, position: absolute par rapport à
   .modal-box) doit rester visible en permanence, même quand le contenu
   d'une longue fenêtre (ex. Statistiques + 50 trophées) dépasse la hauteur
   disponible. Avant, .modal-box portait À LA FOIS le défilement ET le
   bouton — le bouton scrollait avec le reste puisqu'il fait partie du
   contenu qui défile. Désormais, seul ce conteneur interne défile ;
   .modal-box lui-même reste fixe, donc le bouton positionné par rapport à
   lui aussi. */
.modal-scroll {
  overflow-y: auto;
  flex: 1 1 auto;
  min-height: 0; /* nécessaire pour qu'un enfant flex avec overflow se limite bien à l'espace disponible, sinon il s'étire selon son contenu */
}
.modal-close {
  position: absolute;
  top: 1rem; right: 1rem;
  background: var(--panel-2);
  border: 1px solid var(--border);
  color: var(--text);
  border-radius: 999px;
  width: 32px; height: 32px;
  min-width: 32px;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  cursor: pointer;
  font-size: .9rem;
  z-index: 5;
  flex-shrink: 0;
}
.modal-pane h2 {
  /* Laisse la place au bouton fermer (position absolue) pour que les titres
     longs ne passent pas derrière lui, notamment sur mobile où le modal est
     étroit et le titre peut occuper toute la largeur disponible. */
  padding-right: 2.75rem;
}

.v3-release-notice-pane { max-width: 560px; }
.v3-release-notice-eyebrow { margin: 0 0 .55rem; color: var(--orange); font: 700 .68rem/1.3 var(--font-mono2); letter-spacing: .12em; }
.v3-release-notice-warning { display: grid; gap: .35rem; margin: 1.1rem 0; padding: .85rem 1rem; border: 1px solid rgba(244,145,30,.45); background: rgba(244,145,30,.08); color: var(--text); }
.v3-release-notice-warning strong { color: var(--orange); }
.v3-release-notice-warning span { color: var(--muted); font-size: .85rem; line-height: 1.45; }
.v3-release-notice-actions { display: grid; grid-template-columns: 1fr 1.6fr; gap: .7rem; }
.v3-release-notice-actions button { min-height: 44px; }
.v3-release-notice-dismiss { display: block; margin: 1rem auto 0; padding: .35rem .6rem; border: 0; background: transparent; color: var(--muted); font-size: .75rem; cursor: pointer; }
.v3-release-notice-dismiss:hover { color: var(--text); text-decoration: underline; }
@media (max-width: 520px) { .v3-release-notice-actions { grid-template-columns: 1fr; } }

.event-choice-list {
  display: flex;
  flex-direction: column;
  gap: .7rem;
  margin-top: 1.2rem;
}
.event-choice-btn {
  text-align: left;
  white-space: normal;
  line-height: 1.35;
  padding: .9rem 1.1rem;
  border-radius: 12px;
  background: var(--panel-2);
  border: 1px solid var(--border);
  color: var(--text);
  font-weight: 700;
}

@media (max-width: 980px) {
  /* Sur mobile, on abandonne complètement la mise en page "app fixe sans
     scroll" du desktop (colonnes figées à 100vh avec overflow:hidden) : le
     contenu (gros bouton, boutons de récolte, boutique...) débordait de la
     hauteur allouée et se retrouvait purement invisible (coupé, pas
     scrollable). À la place : flux de page normal, tout défile ensemble. */
  .cc-shell {
    display: block;
    height: auto;
    overflow: visible;
  }
  .cc-left {
    overflow: visible;
    min-height: auto;
    padding-bottom: 1.5rem;
  }
  .cc-click-zone { flex: none; padding: 1rem 0; }
  .cc-secondary-actions { max-width: 260px; width: 100%; }

  .cc-right {
    overflow: visible;
    border-left: none;
    border-top: 1px solid var(--border);
  }
  .cc-body {
    flex-direction: column;
    overflow: visible;
  }
  .cc-main-tabs { position: sticky; top: 0; z-index: 4; flex-wrap: wrap; }
  .cc-main-panel { display: none; overflow: visible; }
  .cc-main-panel.active { display: flex; }
  .cc-lanes {
    overflow-y: visible;
    max-height: none;
  }
  .cc-lanes-col { overflow: visible; }
  .cc-log-panel { overflow-y: visible; }
  .cc-shop {
    width: auto;
    border-left: none;
    border-top: 0;
    overflow-y: visible;
    max-height: none;
  }
  .cc-brand-row { flex-wrap: wrap; }
  /* Signalé (capture mobile) : le bouton "Plus" finit par passer seul sur sa
     propre ligne (flex-wrap sur .cc-util-row) une fois que Nouveautés/Compte/
     Discord ne tiennent plus sur une seule rangée -- il se retrouve alors
     près du bord GAUCHE de l'écran. Le panneau, ancré en `right:0` sur son
     .cc-more-wrap (large comme le bouton lui-même), s'étalait donc en très
     grande partie hors écran vers la gauche (180px de large, quasi rien à
     gauche du bouton à cet endroit). Corrigé en ouvrant plutôt vers la
     droite du bouton en dessous de 980px, où il y a largement la place. */
  .cc-more-panel { left: 0; right: auto; }
  .cc-status-strip { flex-direction: column; align-items: stretch; }
  /* Signalé (capture mobile) : .cc-status-ada et les autres puces gardaient
     leur flex-grow:1 pensé pour la ligne horizontale desktop -- en colonne,
     ça les fait s'étirer pour remplir tout l'espace vertical restant,
     créant un grand vide entre le texte ADA et le reste. flex:0 0 auto
     leur redonne juste leur hauteur naturelle, comme les autres puces déjà
     corrigées ici pour la bordure/marge. */
  .cc-status-ada, .cc-currency-panel, .cc-community-event-widget { flex: 0 0 auto; }
  .cc-status-chip, .cc-power-panel, .cc-currency-panel, .cc-community-event-widget { border-left: none; border-top: 1px solid var(--border); margin-left: 0; padding-top: .4rem; }
  .cc-power-panel { justify-content: center; }
}

/* ---- graph2 : barre de ressources (version compacte, une ligne par carte) + journal ADA ---- */

/* Bandeau repliable des ressources (v2.4.2). Le bouton existait dans le
   HTML depuis un moment mais n'avait ni style ni code -- il ne servait à
   rien. Signalé : sur téléphone, les 29 ressources occupent tout l'écran
   et il faut faire défiler très bas pour atteindre le jeu. Le bouton
   n'apparaît QUE sur petit écran : sur desktop la barre tient sur
   quelques lignes et masquer serait une gêne inutile. */
.cc-resource-toggle { display: none; }
@media (max-width: 720px) {
  .cc-resource-toggle {
    display: flex;
    align-items: center;
    gap: .5rem;
    width: 100%;
    padding: .5rem .9rem;
    border: 0;
    border-bottom: 1px solid var(--border);
    background: #171a20;
    color: var(--muted);
    font: inherit;
    font-size: .74rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    cursor: pointer;
  }
  .cc-resource-toggle-caret { transition: transform .18s ease; color: var(--orange); font-size: .95rem; line-height: 1; }
  .cc-resource-toggle.collapsed .cc-resource-toggle-caret { transform: rotate(-90deg); }
  .cc-resource-toggle-count { margin-left: auto; color: var(--orange); font-weight: 700; }
  .cc-resource-bar.collapsed { display: none; }
}

.cc-resource-bar {
  display: flex;
  flex-wrap: wrap;
  gap: .4rem;
  padding: .45rem .9rem;
  border-bottom: 1px solid var(--border);
  background: #171a20;
}
.resource-chip {
  background: var(--panel-2);
  border: 1px solid var(--border);
  border-left: 3px solid var(--border);
  border-radius: 8px;
  padding: .3rem .55rem;
  display: grid;
  grid-template-columns: auto auto 1fr auto;
  grid-template-areas: "handle icon main flow";
  align-items: center;
  column-gap: .4rem;
  min-width: 128px;
  transition: border-left-color .3s ease;
}
/* remplace l'ancienne barre de flux animée par une simple bordure de
   couleur : même signal "produit / consommé / stable" en un coup d'œil,
   sans le coût vertical d'une ligne dédiée. */
.resource-chip.net-pos { border-left-color: var(--ok); }
.resource-chip.net-neg { border-left-color: var(--danger); }
/* teinte de fond très légère par famille de minerai (v1.9) -- superposée
   en linear-gradient plutôt qu'un simple background-color, pour rester au
   dessus de --panel-2 sans avoir à dupliquer sa valeur ici. Reste purement
   décoratif : le signal produit/consommé (bordure) et le contenu textuel
   ne dépendent jamais de cette couche. */
.resource-chip.family-iron { background: linear-gradient(var(--tint-iron), var(--tint-iron)), var(--panel-2); }
.resource-chip.family-copper { background: linear-gradient(var(--tint-copper), var(--tint-copper)), var(--panel-2); }
.resource-chip.family-caterium { background: linear-gradient(var(--tint-caterium), var(--tint-caterium)), var(--panel-2); }
.resource-chip.family-limestone { background: linear-gradient(var(--tint-limestone), var(--tint-limestone)), var(--panel-2); }
.resource-chip.family-coal { background: linear-gradient(var(--tint-coal), var(--tint-coal)), var(--panel-2); }
.resource-chip.family-steel { background: linear-gradient(var(--tint-steel), var(--tint-steel)), var(--panel-2); }
.resource-chip.family-oil { background: linear-gradient(var(--tint-oil), var(--tint-oil)), var(--panel-2); }
.resource-chip.family-misc { background: linear-gradient(var(--tint-misc), var(--tint-misc)), var(--panel-2); }
.chip-drag-handle {
  grid-area: handle;
  cursor: grab;
  color: var(--muted);
  touch-action: none;
  padding: 0 .1rem;
  user-select: none;
  -webkit-user-select: none;
}
.resource-chip.dragging {
  opacity: .5;
  cursor: grabbing;
}
.resource-chip .chip-icon { grid-area: icon; display: inline-flex; }
.resource-chip .chip-icon .fc-icon { width: 1.3rem; height: 1.3rem; }
.resource-chip .chip-main { grid-area: main; display: flex; align-items: baseline; gap: .35rem; min-width: 0; white-space: nowrap; }
.resource-chip .chip-label { font-size: .62rem; color: var(--muted); text-transform: uppercase; letter-spacing: .02em; overflow: hidden; text-overflow: ellipsis; }
.resource-chip strong { font-size: .84rem; color: var(--orange); }
.resource-chip .chip-flow { grid-area: flow; font-size: .62rem; display: flex; gap: .35rem; white-space: nowrap; }
.resource-chip .flow-in { color: var(--ok); }
.resource-chip .flow-out { color: var(--danger); }
.resource-chip .chip-status { display: none; }

/* ---- grande barre (option Options) : reprend l'affichage détaillé
   d'origine, sur 4 lignes par carte avec barre de flux animée, pour qui
   préfère plus d'information visible au prix de plus de hauteur. ---- */
.cc-resource-bar.big { padding: .6rem 1rem; gap: .5rem; }
.cc-resource-bar.big .resource-chip {
  border-left-width: 1px;
  border-radius: 10px;
  padding: .35rem .6rem;
  grid-template-columns: auto auto 1fr;
  grid-template-areas: "handle icon label" "handle icon amount" "handle flow flow" "handle bar bar";
  min-width: 96px;
}
.cc-resource-bar.big .resource-chip.net-pos,
.cc-resource-bar.big .resource-chip.net-neg { border-left-color: var(--border); }
.cc-resource-bar.big .resource-chip .chip-icon .fc-icon { width: 1.55rem; height: 1.55rem; }
.cc-resource-bar.big .resource-chip .chip-label { grid-area: label; font-size: .68rem; margin: 0; }
.cc-resource-bar.big .resource-chip strong { grid-area: amount; font-size: .95rem; }
.cc-resource-bar.big .resource-chip .chip-flow { grid-area: flow; font-size: .68rem; margin-top: .2rem; }
.cc-resource-bar.big .resource-chip .flowbar { grid-area: bar; height: 4px; border-radius: 3px; background: var(--panel-2); overflow: hidden; margin-top: .3rem; }
.cc-resource-bar.big .resource-chip .flowbar-fill { display: block; height: 100%; width: 100%; background-image: repeating-linear-gradient(90deg, currentColor 0 8px, transparent 8px 16px); background-size: 32px 100%; }
.cc-resource-bar.big .resource-chip .flowbar-fill.pos { color: var(--ok); animation: flowbar-pos 900ms linear infinite; }
.cc-resource-bar.big .resource-chip .flowbar-fill.neg { color: var(--danger); animation: flowbar-neg 900ms linear infinite; }
.cc-resource-bar.big .resource-chip .flowbar-fill.idle { color: var(--border); }
@keyframes flowbar-pos { from { background-position: 32px 0; } to { background-position: 0 0; } }
@keyframes flowbar-neg { from { background-position: 0 0; } to { background-position: 32px 0; } }

.cc-log-panel {
  flex-direction: column;
  border-top: 0;
  padding: .9rem 1rem;
  overflow-y: auto;
  background: var(--panel-2);
}
.cc-log-panel h2 { font-size: .82rem; margin: 0 0 .4rem; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
.cc-log-panel ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .5rem; }
.log-message { display: flex; }
.log-bubble {
  position: relative;
  max-width: 88%;
  background: var(--panel-3, #1c2027);
  border: 1px solid var(--border);
  border-radius: 14px 14px 14px 4px;
  padding: .5rem .7rem .4rem;
}
.log-sender {
  display: block;
  font-size: .65rem;
  font-weight: 800;
  color: var(--orange);
  text-transform: uppercase;
  letter-spacing: .04em;
  margin-bottom: .15rem;
}
.log-text { margin: 0; font-size: .8rem; color: var(--text); line-height: 1.4; }
.log-time { display: block; text-align: right; font-size: .65rem; color: var(--muted); margin-top: .25rem; }
.report-context-note { display:block; margin-top:.35rem; color:var(--muted); font-size:.68rem; line-height:1.4; }

/* ---- v0.7 : Prestige FICSIT ---- */
.prestige-stats {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: .75rem;
  margin: 1.15rem 0;
}
.prestige-stat {
  border: 1px solid rgba(255,255,255,.12);
  border-radius: 12px;
  min-height: 108px;
  padding: .9rem 1rem;
  background: linear-gradient(145deg, rgba(255,255,255,.055), rgba(255,255,255,.025));
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: .35rem;
  text-align: center;
}
.prestige-stat strong {
  display: block;
  color: var(--text);
  font-size: 1.65rem;
  line-height: 1;
}
.prestige-stat span {
  color: var(--muted);
  font-size: .72rem;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: .04em;
  text-transform: uppercase;
  text-wrap: balance;
}
.prestige-pane .tiers-caption {
  max-width: 54ch;
  line-height: 1.55;
}
.prestige-pane .reward {
  margin: 0 0 1rem;
  padding: .9rem 1rem;
  line-height: 1.4;
  text-align: center;
}
.prestige-pane #confirmPrestigeBtn {
  min-height: 48px;
}
@media (max-width: 360px) {
  .prestige-stats { grid-template-columns: 1fr; }
  .prestige-stat { min-height: 92px; }
}
.hidden { display: none !important; }

.assembly-req-label .req-icon { width: 1.1rem; height: 1.1rem; margin-right: .25rem; }

/* ---- v0.9 : Module de contrôle FICSIT ---- */
.shop-item.system-upgrade {
  margin-bottom: 1.2rem;
}
.machine-control {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  margin-top: .35rem;
  padding: .25rem .35rem;
  border: 1px solid var(--border);
  border-radius: 999px;
  background: rgba(0,0,0,.18);
  font-size: .72rem;
  color: var(--muted);
}
.machine-control-btn {
  width: 1.45rem;
  height: 1.45rem;
  padding: 0;
  border-radius: 999px;
  border: 1px solid var(--border);
  background: var(--panel-2);
  color: var(--text);
  line-height: 1;
  cursor: pointer;
}

.machine-control-btn:disabled {
  opacity: .35;
  cursor: not-allowed;
}

/* Le bouton reste la cible du pointeur meme quand ses compteurs internes sont
   actualises par le rendu 250 ms. Cela empeche un clic de se perdre entre le
   pointerdown et le pointerup. Le Sink est exclu car il contient son selecteur. */
button.shop-row[data-buy] > *,
button.shop-row[data-buy] > * * {
  pointer-events: none;
}

/* validation manuelle des paliers */
.tier-row.ready {
  opacity: 1;
  border-color: rgba(246, 159, 26, .55);
}
.validate-tier-btn {
  border: 1px solid rgba(246, 159, 26, .55);
  background: rgba(246, 159, 26, .12);
  color: var(--text);
  border-radius: 999px;
  padding: .35rem .7rem;
  font-weight: 800;
  cursor: pointer;
}

/* confirmation d'achat groupé (x5 / x10) */
.purchase-confirm-actions {
  display: flex;
  gap: .7rem;
  margin-top: 1.2rem;
}
.purchase-confirm-btn,
.purchase-confirm-cancel {
  flex: 1;
  padding: .7rem 1rem;
  border-radius: 12px;
  font-weight: 800;
  cursor: pointer;
}
.purchase-confirm-btn {
  border: 1px solid rgba(246, 159, 26, .55);
  background: rgba(246, 159, 26, .12);
  color: var(--text);
}

.purchase-confirm-cancel {
  border: 1px solid var(--border);
  background: transparent;
  color: var(--muted);
}

/* ==========================================================================
   PLAN D'USINE
   Blueprint industriel purement visuel, alimenté par l'état existant.
   ========================================================================== */
.cc-factory-panel { flex-direction: column; min-width: 0; background: #111820; }
.factory-panel-head {
  display: flex; align-items: center; justify-content: space-between; gap: .8rem; flex-wrap: wrap;
  padding: .5rem .9rem; border-bottom: 1px solid #294150;
  background: linear-gradient(135deg, rgba(19,46,61,.96), rgba(16,25,33,.96));
}
.factory-panel-head-title { display: flex; align-items: baseline; gap: .5rem; }
.factory-panel-head h2 { margin: 0; font-size: .92rem; color: #d9f4ff; letter-spacing: .04em; }
.factory-kicker { color: #55cce7; font-size: .58rem; font-weight: 800; letter-spacing: .14em; }
.factory-summary { display: flex; gap: .4rem; flex-wrap: wrap; }
.factory-summary span { min-width: 68px; padding: .28rem .45rem; border: 1px solid #31566a; background: rgba(8,20,27,.7); border-radius: 6px; color: #7da4b5; font-size: .56rem; text-transform: uppercase; letter-spacing: .04em; }
.factory-summary strong { display: block; color: #dff8ff; font-size: .82rem; line-height: 1.1; margin-bottom: .1rem; }
.factory-scroll { flex: 1; min-height: 0; overflow: auto; padding: 1rem; background-color: #0d151b; background-image: linear-gradient(rgba(75,145,169,.07) 1px, transparent 1px), linear-gradient(90deg, rgba(75,145,169,.07) 1px, transparent 1px), linear-gradient(rgba(75,145,169,.025) 1px, transparent 1px), linear-gradient(90deg, rgba(75,145,169,.025) 1px, transparent 1px); background-size: 40px 40px, 40px 40px, 8px 8px, 8px 8px; }
.factory-blueprint { min-width: 720px; max-width: 1220px; margin: 0 auto; color: #bfe8f4; }
.factory-hub { width: min(320px, 80%); margin: 0 auto; position: relative; text-align: center; padding: .8rem 1rem; border: 1px solid #48b5cf; background: rgba(17,54,68,.8); box-shadow: 0 0 24px rgba(61,188,218,.09), inset 0 0 20px rgba(61,188,218,.05); clip-path: polygon(12px 0, 100% 0, 100% calc(100% - 12px), calc(100% - 12px) 100%, 0 100%, 0 12px); }
.factory-hub-badge { display: inline-block; margin-right: .4rem; padding: .16rem .35rem; background: var(--orange); color: #171717; font-weight: 900; font-size: .62rem; transform: skew(-8deg); }
.factory-hub strong { font-size: .88rem; letter-spacing: .09em; }
.factory-hub small { display: block; color: #77a5b6; font-size: .64rem; margin-top: .2rem; }
.factory-trunk { width: 2px; height: 30px; margin: 0 auto; background: #3b9bb5; position: relative; }
.factory-trunk span { position: absolute; width: 7px; height: 7px; left: 50%; bottom: 4px; transform: translateX(-50%) rotate(45deg); border-right: 2px solid #65d2eb; border-bottom: 2px solid #65d2eb; }
.factory-stages { display: grid; gap: .8rem; }
.factory-stage { position: relative; border: 1px solid #27495a; background: rgba(10,25,33,.86); padding: .75rem; box-shadow: inset 0 0 24px rgba(42,129,154,.04); }
.factory-stage::before { content: ''; position: absolute; width: 2px; height: .8rem; left: 50%; top: -.8rem; background: #347e94; }
.factory-stage header { display: flex; align-items: center; gap: .55rem; margin-bottom: .7rem; color: #7fc7dc; text-transform: uppercase; letter-spacing: .12em; font-size: .67rem; }
.factory-stage header span { color: var(--orange); border: 1px solid rgba(255,139,0,.55); padding: .16rem .28rem; font-weight: 900; }
.factory-stage-line { position: absolute; left: 1.1rem; right: 1.1rem; top: 2.8rem; border-top: 1px dashed rgba(92,184,208,.22); }
.factory-node-grid { position: relative; display: grid; grid-template-columns: repeat(auto-fit, minmax(162px, 1fr)); gap: .6rem; }
.factory-node { position: relative; min-height: 108px; padding: .62rem .66rem; border: 1px solid color-mix(in srgb, var(--factory-tint) 55%, #294351); background: linear-gradient(145deg, color-mix(in srgb, var(--factory-tint) 10%, #13212a), #0e171d); clip-path: polygon(8px 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%, 0 8px); transition: transform .12s ease, border-color .12s ease; }
.factory-node.running:hover, .factory-node.stopped:hover { transform: translateY(-1px); border-color: color-mix(in srgb, var(--factory-tint) 80%, #294351); }
.factory-node::after { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--factory-tint); opacity: .75; }
.factory-node-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: .35rem; }
.factory-node-icon { width: 30px; height: 30px; border: 1px solid color-mix(in srgb, var(--factory-tint) 60%, #354a55); display: grid; place-items: center; background: rgba(0,0,0,.25); }
.factory-node-icon img { width: 21px; height: 21px; }
.factory-node-state { display: flex; align-items: center; gap: .25rem; color: #73909d; font-size: .58rem; text-transform: uppercase; letter-spacing: .06em; }
.factory-node-state i { width: 6px; height: 6px; border-radius: 50%; background: #65727a; }
.factory-node.running .factory-node-state i { background: #49d889; box-shadow: 0 0 7px rgba(73,216,137,.8); }
.factory-node.stopped .factory-node-state i { background: #ef5b5b; }
.factory-node.available { opacity: .68; border-style: dashed; }
.factory-node.locked { opacity: .3; filter: grayscale(1); }
.factory-node strong { display: block; padding-right: 2.2rem; color: #d8f2f8; font-size: .78rem; line-height: 1.28; }
.factory-node-count { position: absolute; right: .6rem; top: 2.3rem; color: var(--orange); font-weight: 900; font-size: .88rem; }
.factory-node small { display: block; margin-top: .32rem; color: #779aa8; font-size: .64rem; line-height: 1.32; }
.factory-node em { display: block; margin-top: .25rem; color: #ffbd72; font-size: .6rem; font-style: normal; }
.factory-empty { padding: 2rem; border: 1px dashed #31576a; text-align: center; color: #7ca2b2; background: rgba(10,28,37,.7); }
@media (max-width: 900px) {
  .factory-panel-head { flex-direction: column; }
  .factory-summary { justify-content: flex-start; }
  .factory-scroll { overflow-x: auto; }
  .factory-blueprint { min-width: 660px; }
}
@media (max-width: 620px) {
  .factory-panel-head { padding: .7rem; }
  .factory-summary span { min-width: 76px; }
  .factory-scroll { padding: .65rem; }
}
@media (prefers-reduced-motion: reduce) {
  .factory-node-state i { box-shadow: none !important; }
}

/* Boutique et ratios intégrés au plan d'usine */
.factory-node { min-height: 176px; display: flex; flex-direction: column; }
.factory-node-ratios {
  display: grid;
  gap: .2rem;
  margin-top: .48rem;
  padding: .42rem .46rem;
  border: 1px solid rgba(86,154,176,.25);
  background: rgba(4,13,18,.48);
  font-size: .56rem;
  line-height: 1.3;
}
.factory-node-ratios.warning { border-color: rgba(239,91,91,.7); box-shadow: inset 3px 0 0 #ef5b5b; }
.factory-node-ratios span { display: block; overflow-wrap: anywhere; }
.factory-buy-btn {
  width: 100%;
  margin-top: auto;
  padding: .45rem .5rem;
  border: 1px solid color-mix(in srgb, var(--factory-tint) 65%, #2e4d5b);
  background: color-mix(in srgb, var(--factory-tint) 16%, #101b22);
  color: #dff8ff;
  cursor: pointer;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: .5rem;
  font: inherit;
  font-size: .58rem;
  text-transform: uppercase;
  letter-spacing: .04em;
}
/* Filet de sécurité (signalé : capture d'écran, Chrome iOS) -- le bouton
   vit dans un <foreignObject> SVG de hauteur FIXE (FACTORY_CHAIN_BOX_H).
   Un retour à la ligne imprévu ici agrandit la carte au-delà de cette
   hauteur, et le débordement se fait tronquer par le moteur de rendu au
   lieu de simplement s'afficher en dessous -- jamais de retour à la ligne
   ici, quel que soit le contenu (formatNumberCompact limite déjà la
   longueur du texte lui-même, ceci est la protection de dernier recours). */
.factory-buy-btn > * { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.factory-buy-btn strong { padding: 0; color: #ffd28a; font-size: .58rem; text-align: right; flex-shrink: 0; max-width: 62%; }

.factory-buy-btn:disabled { opacity: .42; cursor: not-allowed; }
.factory-node.locked .factory-node-ratios { display: none; }

/* ==========================================================================
   Plan SVG, zoom et animations industrielles
   ========================================================================== */
.factory-toolbar {
  display: flex; align-items: center; gap: .32rem; flex-wrap: wrap;
}
.factory-toolbar button {
  min-width: 30px; min-height: 26px; border: 1px solid #356479; background: #122934;
  color: #cceef6; cursor: pointer; font: inherit; font-size: .65rem; font-weight: 800;
  text-transform: uppercase; letter-spacing: .05em;
}

.factory-toolbar span { min-width: 46px; text-align: center; color: #73aabd; font-size: .6rem; }
.factory-toolbar button.active { background: var(--orange); border-color: var(--orange); color: #1a1200; }
.factory-svg.cards-locked { outline: 2px solid rgba(255,159,44,.35); outline-offset: -2px; }
/* v2.4.0-b : les cartes ne sont plus DANS le svg, la regle doit partir
   du conteneur commun pour continuer d'atteindre la poignee. */
.factory-blueprint:has(.factory-svg.cards-locked) .factory-drag-zone { cursor: default; }
.factory-scroll { padding: 0; overflow: hidden; touch-action: none; }
/* position:relative : ancre le calque HTML des cartes (v2.4.0-b), qui est en position absolue. */
.factory-blueprint { width: 100%; height: 100%; min-width: 0; max-width: none; margin: 0; position: relative; }
/* v2.5.1 (correctif audit) : min-height fixe à 520px alors que la zone
   réellement visible peut faire 358px (fenêtre 1280×900 avec l'en-tête et
   la barre de ressources au-dessus) -- le SVG dépassait donc le cadre, une
   partie du plan restait hors écran quoi qu'on fasse. Borné par la hauteur
   de fenêtre disponible : on garde 520px quand il y a la place, jamais
   plus que ce que l'écran peut afficher. */
.factory-svg { display: block; width: 100%; height: 100%; min-height: min(520px, 55vh); cursor: grab; user-select: none; }
.factory-svg.panning { cursor: grabbing; }
.factory-stage-svg rect { fill: rgba(9,28,37,.78); stroke: #28536a; stroke-width: 1.5; }
.factory-stage-index { fill: #ff9c2a; font-size: 16px; font-weight: 900; font-family: system-ui, sans-serif; }
.factory-stage-title { fill: #83d2e6; font-size: 16px; font-weight: 800; letter-spacing: 2px; font-family: system-ui, sans-serif; text-transform: uppercase; }

.factory-connector { fill: none; stroke: #317f98; stroke-width: 2; stroke-dasharray: 7 7; opacity: .55; }
.factory-connector.active { stroke: #54cce9; opacity: .95; animation: factory-flow-line 1.5s linear infinite; }
.factory-cargo { fill: #ffad42; filter: url(#factory-glow); pointer-events: none; }
/* v2.4.0-b : calque HTML des cartes, superpose au SVG des connecteurs.
   Suit exactement le meme cadrage (transform pose par
   applyFactoryViewBox). pointer-events none sur le calque pour ne pas
   bloquer le pan/pinch sur le fond, auto sur les cartes elles-memes. */
.factory-cards-layer { position: absolute; inset: 0; transform-origin: 0 0; pointer-events: none; }
.factory-card-pos { position: absolute; pointer-events: auto; }
.factory-drag-zone {
  /* Zone invisible mais volontairement large : le canevas Usine est mis à
     l'échelle pour tenir dans le conteneur visible (souvent 50% ou moins
     de sa taille naturelle dès quelques cartes affichées), donc une petite
     poignée en coin de 18px finissait à 3-7px réels à l'écran --
     pratiquement impossible à viser, d'où le glissement remonté comme
     "il faut y aller tout doucement". Toute la bande supérieure de la
     carte sert maintenant de zone de saisie plutôt qu'une seule icône.
     z-index au-dessus de l'icône/badge : ceux-ci ne sont pas interactifs
     par ailleurs, aucune perte fonctionnelle à les couvrir. */
  position: absolute; top: 0; left: 0; right: 0; height: 52px;
  cursor: grab; z-index: 5; touch-action: none;
}
.factory-drag-zone:hover { background: rgba(84, 204, 233, .06); }
.factory-card-dragging .factory-node { box-shadow: 0 8px 24px rgba(0,0,0,.55); border-color: #54cce9 !important; }
.factory-node {
  box-sizing: border-box; width: 100%; height: 100%; min-height: 0; padding: 10px;
  border-width: 1px; clip-path: polygon(9px 0,100% 0,100% calc(100% - 9px),calc(100% - 9px) 100%,0 100%,0 9px);
  overflow: hidden;
}
.factory-machine-visual { height: 35px; display: flex; align-items: center; position: relative; margin-bottom: 2px; }
.factory-node-icon { width: 32px; height: 32px; position: relative; z-index: 2; }
.factory-node-icon img { width: 23px; height: 23px; }
.factory-machine-pulse { position: absolute; left: 39px; right: 0; height: 3px; background: linear-gradient(90deg,var(--factory-tint),transparent); opacity: .35; }
.factory-machine-smoke { display: none; position: absolute; left: 20px; top: -5px; width: 30px; height: 25px; }
.factory-machine-smoke i { position: absolute; bottom: 0; width: 7px; height: 7px; border-radius: 50%; background: rgba(180,205,212,.45); opacity: 0; }
.factory-machine-smoke i:nth-child(2) { left: 8px; animation-delay: .55s; }
.factory-machine-smoke i:nth-child(3) { left: 15px; animation-delay: 1.05s; }
.factory-node.running.factory-machine-generator .factory-machine-smoke { display: block; }
.factory-node.running.factory-machine-generator .factory-machine-smoke i { animation: factory-smoke 2.2s ease-out infinite; }
.factory-node.running.factory-machine-processor .factory-node-icon { animation: factory-furnace 1.8s ease-in-out infinite; }
.factory-node.running.factory-machine-extractor .factory-node-icon { animation: factory-piston 1.2s ease-in-out infinite; }
.factory-node.running.factory-machine-assembler .factory-machine-pulse { animation: factory-machine-scan 1.6s linear infinite; }
.factory-node.running.factory-machine-sink .factory-node-icon { animation: factory-storage 2.4s ease-in-out infinite; }
.factory-node-top { position: absolute; right: 9px; top: 10px; margin: 0; }
.factory-node-count { top: 49px; right: 10px; }
.factory-node > strong { font-size: 11px; min-height: 27px; }
.factory-node small { font-size: 9px; margin-top: 2px; }
.factory-node em { font-size: 9px; }
.factory-node-ratios { margin-top: 5px; padding: 5px; font-size: 8.5px; gap: 2px; }
.factory-buy-btn { padding: 6px; font-size: 9px; }
.factory-buy-btn strong { font-size: 9px; }
@keyframes factory-flow-line { to { stroke-dashoffset: -28; } }
@keyframes factory-piston { 0%,100% { transform: translateY(0); } 50% { transform: translateY(3px); } }
@keyframes factory-furnace { 0%,100% { filter: drop-shadow(0 0 0 rgba(255,120,20,0)); } 50% { filter: drop-shadow(0 0 8px rgba(255,120,20,.85)); } }
@keyframes factory-machine-scan { from { transform: translateX(-30%); opacity: .15; } 50% { opacity: .75; } to { transform: translateX(30%); opacity: .15; } }
@keyframes factory-storage { 0%,100% { transform: scale(.96); } 50% { transform: scale(1.04); } }
@keyframes factory-smoke { 0% { transform: translate(0,8px) scale(.7); opacity: 0; } 30% { opacity: .55; } 100% { transform: translate(5px,-20px) scale(1.7); opacity: 0; } }
@media (max-width: 700px) {
  .factory-svg { min-height: min(430px, 55vh); }
  .factory-toolbar { justify-content: center; }
}
@media (prefers-reduced-motion: reduce) {
  .factory-connector.active, .factory-node-icon, .factory-machine-pulse, .factory-machine-smoke i { animation: none !important; }
  .factory-cargo { display: none; }
}

/* pilotage interactif de l'usine */
.factory-workspace { display:grid; grid-template-columns:minmax(0,1fr) 330px; flex: 1; min-height:0; border-top:1px solid #274856; }
.factory-workspace .factory-scroll { min-width:0; border-right:1px solid #274856; }
.factory-detail { min-height:0; padding:14px; background:linear-gradient(180deg,#0d1b22,#081217); overflow:auto; color:#b9d5df; }
.factory-detail.empty { display:grid; place-items:center; text-align:center; }
.factory-detail-placeholder strong { color:#dff8ff; font-size:.86rem; text-transform:uppercase; letter-spacing:.08em; }
.factory-detail-placeholder p { color:#688b99; font-size:.7rem; line-height:1.55; }
.factory-detail-head { display:flex; gap:10px; align-items:center; padding-bottom:12px; border-bottom:1px solid color-mix(in srgb,var(--factory-tint) 40%,#294653); position:relative; }
.factory-detail-head span { color:#6e9baa; font-size:.58rem; letter-spacing:.12em; text-transform:uppercase; }
.factory-detail-head h3 { margin:2px 28px 0 0; color:#e3fbff; font-size:.9rem; }
.factory-detail-icon { width:42px; height:42px; display:grid; place-items:center; border:1px solid var(--factory-tint); background:color-mix(in srgb,var(--factory-tint) 12%,#0c181e); }
.factory-detail-icon img { width:30px; height:30px; }
.factory-detail-close {
  position:absolute;
  right:0;
  top:0;
  width:26px;
  height:26px;
  padding:0;
  border:1px solid #345463;
  background:#111f26;
  color:#8db2bf;
  cursor:pointer;
  display:grid;
  place-items:center;
  line-height:1;
  font-family:Arial, sans-serif;
  font-size:18px;
  text-align:center;
}
.factory-efficiency { margin:12px 0; padding:10px; border:1px solid #315361; background:#0c181e; }
.factory-efficiency > div:first-child { display:flex; justify-content:space-between; align-items:center; }
.factory-efficiency span { color:#86a9b5; font-size:.62rem; text-transform:uppercase; }
.factory-efficiency strong { color:#54d897; font-size:1rem; }
.factory-efficiency.warning strong { color:#ffb14a; }.factory-efficiency.danger strong { color:#ef6767; }.factory-efficiency.muted strong { color:#73828a; }
.factory-efficiency-bar { height:6px; margin-top:7px; background:#172932; overflow:hidden; }
.factory-efficiency-bar i { display:block; height:100%; background:#54d897; transition:width .25s; }
.factory-efficiency.warning .factory-efficiency-bar i { background:#ffb14a; }.factory-efficiency.danger .factory-efficiency-bar i { background:#ef6767; }.factory-efficiency.muted .factory-efficiency-bar i { background:#66747b; }
.factory-efficiency p { margin:7px 0 0; color:#90adb8; font-size:.65rem; line-height:1.4; }
.factory-detail-grid { display:grid; gap:7px; }
.factory-detail-metric { padding:8px; border:1px solid #253f4a; background:rgba(9,24,31,.75); }
.factory-detail-metric span { display:block; color:#7196a4; font-size:.57rem; text-transform:uppercase; letter-spacing:.06em; }
.factory-detail-metric strong { display:block; margin-top:3px; padding:0; color:#d8f2f8; font-size:.76rem; }
.factory-detail-metric small { display:block; margin-top:2px; color:#557583; font-size:.56rem; }
.sink-recipe-selector { margin-top:12px; padding:10px; border:1px solid #73592f; background:rgba(41,31,15,.5); }
.sink-recipe-selector > div:first-child > strong { display:block; color:#ffd18b; font-size:.68rem; text-transform:uppercase; letter-spacing:.08em; }
.sink-recipe-selector > div:first-child > small { display:block; margin-top:4px; color:#9b835f; font-size:.58rem; line-height:1.4; }
.sink-recipe-options { display:grid; gap:6px; margin-top:9px; }
.sink-recipe-option { display:grid; grid-template-columns:1fr auto; gap:3px 8px; width:100%; padding:8px; text-align:left; border:1px solid #4a4537; background:#151a19; color:#b9c9c8; cursor:pointer; }
.sink-recipe-option > span { display:flex; align-items:center; gap:6px; font-size:.62rem; }
.sink-recipe-option img { width:18px; height:18px; }
.sink-recipe-option > strong { color:#f1d3a2; font-size:.64rem; }
.sink-recipe-option > small { grid-column:1/-1; color:#6f817e; font-size:.54rem; }
.sink-recipe-option.active { border-color:#ff9e31; background:rgba(126,72,18,.24); box-shadow:inset 3px 0 #ff9e31; }
.sink-recipe-option:disabled { opacity:.42; cursor:not-allowed; }

.factory-detail-actions { display:grid; grid-template-columns:1fr 1fr; gap:6px; margin-top:12px; }
.factory-detail-actions button:first-child { grid-column:1/-1; border-color:#d67a21; color:#ffd193; }
.factory-detail-actions button { padding:8px; border:1px solid #315463; background:#12242c; color:#9cc5d2; font-size:.62rem; font-weight:800; text-transform:uppercase; cursor:pointer; }
.factory-detail-actions button:disabled { opacity:.35; cursor:not-allowed; }
.factory-ada-ops { margin-top:12px; padding:10px; border:1px solid #38515b; background:linear-gradient(135deg,rgba(28,49,58,.85),rgba(13,25,31,.9)); }
.factory-ada-ops > span { color:#ff9e31; font-size:.57rem; letter-spacing:.12em; }.factory-ada-ops strong { display:block; margin-top:5px; color:#d8eef4; font-size:.68rem; }.factory-ada-ops p { margin:5px 0 0; color:#6e909c; font-size:.6rem; line-height:1.4; }
.factory-ada-ops.targeted { border-color:#ff9e31; box-shadow:inset 3px 0 0 #ff9e31; }
.factory-node { cursor:pointer; }
/* La card vit dans un foreignObject SVG : les ombres extérieures peuvent être
   rognées par ses limites. La sélection utilise donc un double cadre intérieur,
   visible de façon identique sur toutes les catégories de bâtiments. */
.factory-node.selected {
  border-color:#fff;
  box-shadow:
    inset 0 0 0 2px #fff,
    inset 0 0 0 5px var(--factory-tint),
    inset 0 0 22px color-mix(in srgb,var(--factory-tint) 28%,transparent);
  filter:brightness(1.14);
}
.factory-node.selected::before {
  content:'SELECT';
  position:absolute;
  z-index:7;
  left:50%;
  bottom:5px;
  transform:translateX(-50%);
  padding:2px 7px;
  border:1px solid #fff;
  background:color-mix(in srgb,var(--factory-tint) 82%,#071116);
  color:#fff;
  font-size:7px;
  font-weight:1000;
  letter-spacing:.12em;
  pointer-events:none;
}

.factory-node.ada-target::before { content:'ADA'; position:absolute; z-index:5; left:5px; top:5px; padding:2px 4px; background:#ff941f; color:#15100a; font-size:7px; font-weight:1000; letter-spacing:.08em; }
@media (max-width:980px) { .factory-workspace { grid-template-columns:1fr; }.factory-workspace .factory-scroll { border-right:0; }.factory-detail { border-top:1px solid #274856; max-height:none; }.factory-svg { min-height:min(480px, 55vh); } }

/* fiche bâtiment visible sur mobile : en vue étroite, la carte SVG peut
   mesurer plusieurs écrans de haut, donc le panneau placé après la carte
   était invisible pour les installations des premiers secteurs. Devient
   un tiroir fixé au bas de l'écran. */
@media (max-width: 980px) {
  .factory-detail:not(.empty) {
    position: fixed;
    /* Au-dessus du burger Ressources mobile (170) et de son tiroir (169).
       La fiche bâtiment est l'élément actif : rien du header secondaire ne
       doit recouvrir ses contrôles, notamment le bouton fermer. */
    z-index: 190;
    left: max(8px, env(safe-area-inset-left));
    right: max(8px, env(safe-area-inset-right));
    bottom: max(8px, env(safe-area-inset-bottom));
    max-height: min(72vh, 620px);
    overflow-y: auto;
    border: 1px solid #4c8194;
    border-top: 3px solid #ff9e31;
    box-shadow: 0 -12px 45px rgba(0, 0, 0, .72);
    background: linear-gradient(180deg, #10242d 0%, #081217 100%);
    animation: factory-detail-drawer-in .18s ease-out;
  }

  .factory-detail:not(.empty) .factory-detail-close {
    position: sticky;
    float: right;
    top: 0;
    z-index: 4;
  }
}

@keyframes factory-detail-drawer-in {
  from { transform: translateY(18px); opacity: 0; }
  to { transform: translateY(0); opacity: 1; }
}

/* Volontairement en z-index très élevé et position fixed plein écran : ce
   rattrapage peut tourner plusieurs centaines de ms sur une absence longue
   (jusqu'à ~25 000 itérations pour 30 jours), et sans indicateur visible ça
   donnait l'impression d'un blocage/bug plutôt que d'un calcul en cours. */
.offline-catchup-overlay {
  position: fixed; inset: 0; z-index: 9999;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .8rem;
  background: rgba(17,18,20,.88); backdrop-filter: blur(2px);
}
.offline-catchup-spinner {
  width: 40px; height: 40px; border-radius: 50%;
  border: 3px solid rgba(255,138,0,.25); border-top-color: var(--orange);
  animation: offline-catchup-spin .8s linear infinite;
}
.offline-catchup-text { color: #cceef6; font-size: .85rem; margin: 0; text-align: center; padding: 0 1.5rem; }
@keyframes offline-catchup-spin { to { transform: rotate(360deg); } }

@media (prefers-reduced-motion: reduce) {
  .factory-detail:not(.empty) { animation: none !important; }
}

/* =========================================================================
 * EXPLORATION — carte
 * Même charpente que la Vue Usine (panel-head / workspace deux colonnes /
 * aside détail) pour rester cohérent, mais palette dédiée "relevé
 * satellite" (grille cyan, halo, sweep radar) plutôt que le bleu blueprint
 * de l'Usine -- la carte est un terrain, pas un plan d'installation.
 * ========================================================================= */
:root {
  /* v2.2 : le relief lui-même est généré en canvas (voir
     generateExplorationTerrainDataUrl), plus par ces variables -- gardées
     seulement pour --terrain-land (repli si canvas indisponible) et
     --terrain-grid (grille de fond, décorative). */
  --terrain-land: #8c8168;
  --terrain-grid: rgba(79,214,240,.06);
}

.cc-exploration-panel { flex-direction: column; min-height: 0; }

/* =========================================================================
 * M.A.M. -- ARBRE TECHNOLOGIQUE (v2.10)
 * Remplace l'ancienne Boutique AWESOME en modale. Même famille visuelle que
 * l'entête EXPLORATION (kicker + titre + sous-menu), coins coupés partagés
 * avec les nœuds de la Vue Usine et les tuiles EXPLORATION.
 * ========================================================================= */
.cc-mam-panel { flex-direction: column; min-height: 0; }
.mam-panel-head {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  padding: .5rem 1rem; border-bottom: 1px solid #274856; flex-wrap: wrap;
}
.mam-panel-head-title { display: flex; align-items: baseline; gap: .5rem; }
.mam-panel-head h2 { margin: 0; font-size: .92rem; color: #d9f4ff; letter-spacing: .04em; font-family: var(--font-display); }
.mam-kicker { color: #55cce7; font-size: .58rem; font-weight: 800; letter-spacing: .14em; font-family: var(--font-mono2); text-transform: uppercase; }

.mam-subnav { display: flex; gap: .4rem; flex-wrap: wrap; }
.mam-subnav-btn {
  padding: .35rem .7rem; border: 1px solid #274856; background: #0d151b; color: #7196a4;
  font-family: var(--font-mono2); font-size: .62rem; letter-spacing: .06em; text-transform: uppercase;
  cursor: pointer; clip-path: polygon(6px 0, 100% 0, 100% calc(100% - 6px), calc(100% - 6px) 100%, 0 100%, 0 6px);
}
.mam-subnav-btn.active { color: #dff8ff; border-color: var(--cyan); background: rgba(79,214,240,.1); }

.mam-tree-scroll { flex: 1; min-height: 0; overflow: auto; background: var(--bg); }
.mam-tree-host { padding: 1.2rem; display: inline-block; min-width: 100%; }
.mam-tree-svg { display: block; }

.mam-lane-title { fill: var(--cyan); font-size: 11.5px; font-weight: 800; letter-spacing: .5px; font-family: var(--font-mono2); }

.mam-node-shape { fill: var(--panel-2); stroke: #3a4048; stroke-width: 1.6; transition: fill .12s ease, stroke .12s ease; }
.mam-node-icon { filter: drop-shadow(0 2px 4px rgba(0,0,0,.5)); }
.mam-node-label { fill: var(--text); font-size: 12.5px; font-weight: 700; font-family: var(--font-display); }
.mam-node-desc { fill: #8aa2ac; font-size: 10.5px; font-family: var(--font-mono2); }
.mam-node-footer { fill: #8aa2ac; font-size: 10px; font-family: var(--font-mono2); }
.mam-connector { stroke: #3a4048; stroke-width: 2; }
.mam-connector.active { stroke: var(--ok); }

/* Possédé : vert, cohérent avec le badge "Déjà possédé" du Garage. */
.mam-node-owned .mam-node-shape { stroke: var(--ok); fill: color-mix(in srgb, var(--ok) 10%, var(--panel-2)); }
.mam-node-owned .mam-node-label, .mam-node-owned .mam-node-footer { fill: var(--ok); }

/* Disponible (débloqué + prochain achat logique) : orange, comme partout
   ailleurs dans le jeu pour "action possible maintenant". Cliquable. */
/* pointer-events:all explicite : un <g> SVG sans remplissage propre n'a pas
   toujours une zone de clic fiable sur toute sa boîte englobante (repéré en
   testant -- Playwright refusait le clic "élément recouvert" alors qu'il
   ne l'était pas visuellement, même souci probable pour un vrai clic
   souris entre les éléments enfants). */
.mam-node { pointer-events: all; }
.mam-node-available { cursor: pointer; }
.mam-node-available .mam-node-shape { stroke: var(--orange); fill: color-mix(in srgb, var(--orange) 10%, var(--panel-2)); }
.mam-node-available:hover .mam-node-shape, .mam-node-available:focus-visible .mam-node-shape { fill: color-mix(in srgb, var(--orange) 22%, var(--panel-2)); }
.mam-node-available .mam-node-label, .mam-node-available .mam-node-footer { fill: var(--orange); }
.mam-node-available:focus-visible { outline: 2px solid var(--orange); outline-offset: 2px; }

/* Verrouillé (prérequis manquant, ou bâtiment de base pas encore construit
   pour un repère Mk.1) : gris, jamais cliquable. */
/* v2.5.2 : quatrième état -- débloqué (prérequis remplis) mais pas encore
   payable. Volontairement distinct des trois autres : cyan éteint plutôt
   qu'orange, pour qu'on voie d'un coup d'œil ce qui est à portée de main
   (orange) et ce qui reste un objectif (cyan). Ni le vert de l'acquis, ni
   le gris du verrouillé. Non cliquable, comme un nœud verrouillé. */
.mam-node-unaffordable .mam-node-shape { stroke: #3f7c8c; fill: color-mix(in srgb, #3f7c8c 8%, var(--panel-2)); }
.mam-node-unaffordable .mam-node-label { fill: #6fb3c4; }
.mam-node-unaffordable .mam-node-desc { fill: #5d7d87; }
/* Le coût en rouge éteint : c'est LUI qui bloque, autant le pointer. */
.mam-node-unaffordable .mam-node-footer { fill: #b4685f; }
.mam-node-unaffordable .mam-node-icon { opacity: .7; }
.mam-node-locked .mam-node-label { fill: #5a6672; }
.mam-node-locked .mam-node-desc, .mam-node-locked .mam-node-footer { fill: #4a525a; }
.mam-node-locked .mam-node-icon { opacity: .45; }

/* v2.5.13 — branche Disques durs du M.A.M. */
.hard-drive-mam { display: grid; gap: 1rem; width: min(920px, calc(100vw - 3rem)); color: var(--text); }
.hard-drive-summary { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .65rem; }
.hard-drive-summary > div { display: grid; gap: .2rem; padding: .8rem; border: 1px solid #35444c; background: var(--panel-2); }
.hard-drive-summary strong { color: var(--cyan); font: 800 1.25rem/1 var(--font-display); }
.hard-drive-summary span { color: #8aa2ac; font: 700 .67rem/1.3 var(--font-mono2); text-transform: uppercase; letter-spacing: .06em; }
.hard-drive-analysis, .alternate-unlocked { border: 1px solid #3a4048; background: var(--panel-2); padding: 1rem; }
.hard-drive-analysis h3, .alternate-unlocked-list > h3 { margin: 0 0 .75rem; color: var(--cyan); font: 800 .82rem/1.2 var(--font-display); letter-spacing: .05em; text-transform: uppercase; }
.hard-drive-analysis p, .alternate-unlocked p, .hard-drive-empty { color: #a9bbc2; line-height: 1.45; }
.hard-drive-primary, .hard-drive-reroll, .alternate-offer button, .alternate-toggle button { border: 1px solid var(--orange); background: rgba(255,143,31,.1); color: var(--orange); padding: .62rem .85rem; font-weight: 800; cursor: pointer; }
.hard-drive-primary:disabled, .hard-drive-reroll:disabled { opacity: .45; cursor: not-allowed; }
.hard-drive-progress { height: 8px; overflow: hidden; border: 1px solid #35444c; background: #10171b; }
.hard-drive-progress span { display: block; height: 100%; background: linear-gradient(90deg, var(--cyan), var(--orange)); }
.alternate-offers { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .75rem; margin: .8rem 0; }
.alternate-offer { display: grid; align-content: start; gap: .45rem; padding: .85rem; border: 1px solid #48545c; background: #151d22; }
.alternate-offer h4, .alternate-unlocked h4 { margin: 0; color: #e3f5fb; font: 800 .84rem/1.2 var(--font-display); }
.alternate-offer p, .alternate-unlocked p { margin: 0 0 .35rem; font-size: .76rem; }
.alternate-offer small { color: #d2a670; }
.alternate-kind { display: inline-block; width: max-content; color: var(--orange); font: 800 .6rem/1.2 var(--font-mono2); text-transform: uppercase; letter-spacing: .08em; }
.alternate-unlocked-list { display: grid; gap: .65rem; }
.alternate-unlocked { display: grid; grid-template-columns: minmax(170px, .8fr) 1.5fr auto; gap: .8rem; align-items: center; }
.alternate-unlocked.active { border-color: var(--ok); }
.alternate-toggle { display: grid; grid-template-columns: 1fr 1fr; min-width: 240px; }
.alternate-toggle button { border-color: #46535b; color: #8aa2ac; background: transparent; }
.alternate-toggle button.active { border-color: var(--ok); background: color-mix(in srgb, var(--ok) 12%, transparent); color: var(--ok); }
.exploration-hard-drive-marker { fill: var(--orange); stroke: #111; stroke-width: 2px; paint-order: stroke; font-size: 19px; }
.exploration-hard-drive-marker.recovered { fill: #65737a; }
.exploration-hard-drive-status { display: grid; gap: .25rem; margin: .75rem 0; padding: .7rem; border: 1px solid var(--orange); background: rgba(255,143,31,.08); }
.exploration-hard-drive-status.recovered { border-color: #4d5a61; background: rgba(100,115,122,.08); }
.exploration-hard-drive-status strong { color: var(--orange); }
.exploration-hard-drive-status.recovered strong { color: #91a0a7; }

@media (max-width: 700px) {
  .hard-drive-mam { width: calc(100vw - 2rem); }
  .hard-drive-summary { grid-template-columns: 1fr; }
  .alternate-offers { grid-template-columns: 1fr; }
  .alternate-unlocked { grid-template-columns: 1fr; }
  .alternate-toggle { min-width: 0; }
}

.exploration-panel-head {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  padding: .5rem 1rem; border-bottom: 1px solid #274856; flex-wrap: wrap;
}
.exploration-panel-head-title { display: flex; align-items: baseline; gap: .5rem; }
.exploration-panel-head h2 { margin: 0; font-size: .92rem; color: #d9f4ff; letter-spacing: .04em; font-family: var(--font-display); }
.exploration-kicker { color: #55cce7; font-size: .58rem; font-weight: 800; letter-spacing: .14em; font-family: var(--font-mono2); text-transform: uppercase; }

/* Signalé (écran 24") : le panneau de détail (site + liste d'expéditions à
   lancer) se faisait couper en bas, sans barre de défilement -- sans
   grid-template-rows explicite, la seule rangée de la grille se dimensionne
   sur son contenu (auto), pas sur la hauteur réellement disponible ; rien
   ne force alors .exploration-detail à respecter une hauteur bornée, donc
   son overflow:auto ne se déclenche jamais et l'excédent finit coupé net
   par le overflow:hidden d'un ancêtre plus haut (.cc-main-panel). Corrigé
   en forçant la rangée à la hauteur disponible (minmax(0,1fr)) plutôt que
   de la laisser suivre le contenu. */
.exploration-workspace { display: grid; grid-template-columns: minmax(0,1fr) 260px; grid-template-rows: minmax(0,1fr); flex: 1; min-height: 0; }
.exploration-viewport {
  min-width: 0; border-right: 1px solid #274856; background: #0d151b;
  display: flex; align-items: center; justify-content: center; padding: 0;
  touch-action: none; overflow: hidden;
}
/* Signalé (capture) : la carte débordait par-dessus l'entête et la barre
   d'outils. Avant, width:100%/height:auto (purement piloté par la largeur)
   masquait le problème tant que la rangée de la grille grandissait pour
   suivre son contenu -- depuis que grid-template-rows la borde à la
   hauteur réellement disponible (voir plus haut), un SVG carré dimensionné
   seulement sur la largeur peut légitimement devenir plus haut que cette
   hauteur disponible, et rien ne l'empêchait de déborder.
   Premier correctif (aspect-ratio + width/height:auto sur les divs) :
   RÉGRESSION -- des divs sans contenu propre n'ont rien pour calculer une
   taille avec width/height:auto, la carte s'effondrait à une taille
   minuscule. Le bon réflexe : le SVG sait déjà faire ça tout seul. Avec
   son comportement par défaut (preserveAspectRatio="xMidYMid meet", jamais
   modifié ici), un <svg> en width:100%/height:100% dans une boîte non
   carrée se cadre et se centre tout seul en respectant son ratio -- pas
   besoin de bricoler les divs autour, juste leur donner une vraie taille
   à remplir. overflow:hidden sur le viewport reste en filet de sécurité. */
.exploration-map { width: 100%; height: 100%; }
.exploration-stage { position: relative; width: 100%; height: 100%; }
.exploration-map-svg { width: 100%; height: 100%; display: block; cursor: grab; user-select: none; }
.exploration-map-svg.panning { cursor: grabbing; }

.exploration-toolbar { display: flex; align-items: center; gap: .32rem; padding: 0 1rem .6rem; }
.exploration-toolbar button {
  min-width: 30px; min-height: 26px; border: 1px solid #356479; background: #122934;
  color: #cceef6; cursor: pointer; font: inherit; font-size: .65rem; font-weight: 800;
  text-transform: uppercase; letter-spacing: .05em;
}
.exploration-toolbar button:hover { border-color: var(--orange); color: #fff; }
.exploration-toolbar span { min-width: 46px; text-align: center; color: #73aabd; font-size: .6rem; }

.exploration-ring-contour { fill: none; stroke: rgba(79,214,240,.14); stroke-width: 1.5; stroke-dasharray: 3 6; }
.exploration-fog-edge { fill: none; stroke: rgba(168,173,183,.16); stroke-width: 2; stroke-dasharray: 2 10; }
.exploration-road { stroke: rgba(255,138,0,.22); stroke-width: 1.5; stroke-dasharray: 1 7; stroke-linecap: round; }

/* Terrain en canvas (v2.2) relégué en texture de fond discrète -- voir
   échange du 2026-08-05. Fortement désaturé et assombri, teinté vers le
   bleu-cyan sombre du reste de l'UI plutôt que ses couleurs terre/vert
   d'origine, pour lire comme un relevé radar/thermique plutôt qu'une
   carte postale qui ferait concurrence à la grille hexagonale. */
.exploration-terrain-bg { filter: grayscale(.85) brightness(.42) sepia(.35) hue-rotate(150deg) contrast(1.15); opacity: .9; }

.exploration-hex-empty { stroke: rgba(79,214,240,.1); stroke-width: 1; }

.exploration-spawn-core { fill: var(--orange); stroke: #0c0a08; stroke-width: 2.5; } /* liseré sombre : reste visible même sur la rayure orange du fond zébré */
.exploration-hex-spawn { fill: url(#explSpawnZebra); stroke: var(--orange); stroke-width: 3; }

.exploration-site { cursor: pointer; }
.exploration-hex-site { fill: var(--panel-2); stroke: var(--cyan); stroke-width: 1.6; transition: fill .12s ease, stroke .12s ease; }
.exploration-site:hover .exploration-hex-site, .exploration-site:focus-visible .exploration-hex-site { fill: color-mix(in srgb, var(--cyan) 22%, var(--panel-2)); }
.exploration-site.active .exploration-hex-site { stroke: var(--orange); fill: color-mix(in srgb, var(--orange) 22%, var(--panel-2)); }
.exploration-site:focus-visible { outline: 2px solid var(--cyan); outline-offset: 3px; }
.exploration-site-icon { filter: drop-shadow(0 2px 4px rgba(0,0,0,.5)); }

/* Catégorie du site, lisible sans cliquer : minerai = orange (cohérent
   avec les ressources), dépôt de matériel = cyan, danger 2+ = rouge quel
   que soit le type -- le danger prime sur la catégorie. Gisement (v2.8) =
   vert (--ok) : catégorie à part, un bonus permanent de capacité, pas un
   site à "consommer" une fois via une expédition. */
.exploration-site.exploration-hex-ore .exploration-hex-site { fill: #2a1d0c; stroke: var(--orange); }
.exploration-site.exploration-hex-cache .exploration-hex-site { fill: #0f2a2e; stroke: var(--cyan); }
.exploration-site.exploration-hex-danger .exploration-hex-site { fill: #2e1418; stroke: #ff5c5c; }
.exploration-site.exploration-hex-deposit .exploration-hex-site { fill: #102418; stroke: var(--ok); }
.exploration-hex-danger-dots { fill: #8aa2ac; font-size: 11px; text-anchor: middle; }
.exploration-site.exploration-hex-danger .exploration-hex-danger-dots { fill: #ff5c5c; }
.exploration-hex-slots-badge { fill: var(--ok); font-size: 10px; text-anchor: middle; font-family: var(--font-mono2); }

.exploration-hex-fog { fill: rgba(20,28,34,.55); stroke: rgba(168,173,183,.35); stroke-dasharray: 3 3; }
.exploration-site-fog { pointer-events: none; }
.exploration-site-fog .exploration-site-icon { opacity: .45; }

.exploration-compass {
  position: absolute; top: .6rem; right: .6rem; width: 22px; height: 22px;
  display: grid; place-items: center; border: 1px solid rgba(79,214,240,.35); border-radius: 50%;
  color: var(--cyan); font-family: var(--font-mono2); font-size: .6rem; font-weight: 700;
  background: rgba(13,21,27,.6); pointer-events: none;
}

.exploration-detail {
  min-height: 0; max-height: 100%; padding: 14px; background: linear-gradient(180deg,#0d1b22,#081217);
  overflow-y: auto; overflow-x: hidden; color: #b9d5df;
}
.exploration-detail.empty { display: grid; place-items: center; text-align: center; }
.exploration-detail-placeholder strong { color: #dff8ff; font-size: .86rem; text-transform: uppercase; letter-spacing: .08em; }
.exploration-detail-placeholder p { color: #688b99; font-size: .7rem; line-height: 1.55; }
.exploration-detail-head { padding-bottom: 12px; border-bottom: 1px solid #294653; }
.exploration-ring-badge { color: #6e9baa; font-size: .58rem; letter-spacing: .12em; text-transform: uppercase; font-family: var(--font-mono2); }
.exploration-ring-badge-deposit { color: var(--ok); }
.exploration-detail-head h3 { margin: 4px 0 0; color: #e3fbff; font-size: .9rem; }
.exploration-detail-head p { margin: 6px 0 0; color: #7f9fac; font-size: .7rem; line-height: 1.5; }
.exploration-yields { margin-top: 12px; display: grid; gap: 6px; }
.exploration-yields-title { display: block; color: #6e9baa; font-size: .58rem; letter-spacing: .1em; text-transform: uppercase; margin-bottom: 2px; }
.exploration-yield-row { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border: 1px solid #253f4a; background: rgba(9,24,31,.75); font-size: .72rem; }
.exploration-yield-row span:first-of-type { flex: 1; }
.exploration-yield-range { color: var(--cyan); font-family: var(--font-mono2); }
.exploration-detail-note { margin-top: 12px; padding-top: 10px; border-top: 1px dashed #253f4a; color: #557583; font-size: .62rem; line-height: 1.5; font-style: italic; }

@media (max-width: 980px) {
  /* grid-template-rows: none annule le minmax(0,1fr) du desktop -- sinon,
     en 1 colonne, la carte (1re rangée) et le détail (2e rangée implicite)
     se partageraient une seule rangée bornée pensée pour 2 colonnes côte à
     côte, écrasant la carte au lieu de la laisser suivre son ratio 1:1. */
  .exploration-workspace { grid-template-columns: 1fr; grid-template-rows: none; }
  .exploration-viewport { border-right: 0; border-bottom: 1px solid #274856; }
}
@media (max-width: 640px) {
  .exploration-panel-head { padding: .5rem .7rem; flex-direction: column; align-items: flex-start; }
}

.exploration-subnav { display: flex; gap: .4rem; margin-top: .3rem; }
.exploration-subnav-btn {
  padding: .35rem .7rem; border: 1px solid #274856; background: #0d151b; color: #7196a4;
  font-family: var(--font-mono2); font-size: .62rem; letter-spacing: .06em; text-transform: uppercase;
  cursor: pointer; clip-path: polygon(6px 0, 100% 0, 100% calc(100% - 6px), calc(100% - 6px) 100%, 0 100%, 0 6px);
}
.exploration-subnav-btn.active { color: #dff8ff; border-color: var(--cyan); background: rgba(79,214,240,.1); }
.exploration-view { display: none; flex: 1; min-height: 0; flex-direction: column; }
.exploration-view.active { display: flex; }

/* Garage : grille de 3 cartes (une par emplacement de flotte). Empilées en
   colonne sur mobile, cf. media query plus bas -- même seuil (980px) que
   les autres panneaux à deux colonnes de ce fichier. */
.garage-intro { margin: 0; padding: .8rem 1rem 0; max-width: 60ch; color: #7196a4; font-size: .68rem; line-height: 1.5; }
.garage-slots { flex: 1; padding: 1rem; display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: .8rem; align-content: start; }
.garage-slot {
  border: 1px solid #274856; background: linear-gradient(180deg,#0d1b22,#081217);
  padding: .8rem; display: flex; flex-direction: column; gap: .6rem;
  clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px);
}
.garage-slot-title { color: #6e9baa; font-size: .58rem; letter-spacing: .12em; text-transform: uppercase; font-family: var(--font-mono2); }
.garage-slot-locked { align-items: center; text-align: center; justify-content: center; opacity: .85; }
.garage-lock-icon { width: 28px; height: 28px; opacity: .6; }
.garage-slot-locked-desc { margin: 0; color: #557583; font-size: .64rem; line-height: 1.5; }
.garage-unlock-btn {
  border: 1px solid var(--orange); background: rgba(255,138,0,.1); color: #ffd193;
  padding: .5rem .6rem; font-size: .68rem; font-weight: 700; cursor: pointer;
}
.garage-unlock-btn:disabled { opacity: .35; cursor: not-allowed; }

.garage-vehicle-options { display: flex; flex-direction: column; gap: .5rem; }
.garage-vehicle-option {
  display: grid; grid-template-columns: 34px 1fr; grid-template-rows: auto auto; column-gap: .5rem;
  border: 1px solid #253f4a; background: rgba(9,24,31,.75); color: #b9d5df;
  padding: .5rem .6rem; text-align: left; cursor: pointer; font-family: inherit;
}
.garage-vehicle-option .garage-vehicle-icon { grid-row: 1 / 3; width: 30px; height: 30px; align-self: center; }
.garage-vehicle-name { font-size: .74rem; font-weight: 700; color: #dff8ff; }
.garage-vehicle-stats { display: flex; gap: .6rem; font-size: .58rem; color: #7196a4; font-family: var(--font-mono2); }
.garage-vehicle-footer { grid-column: 2; font-size: .62rem; color: var(--cyan); font-family: var(--font-mono2); }
.garage-vehicle-option.active { border-color: var(--orange); background: rgba(255,138,0,.08); }
.garage-vehicle-option.active .garage-vehicle-footer { color: var(--orange); font-weight: 700; }
.garage-vehicle-option.locked { opacity: .45; cursor: not-allowed; }
.garage-vehicle-option.owned .garage-vehicle-footer { color: var(--ok); font-weight: 700; }
.garage-vehicle-option:disabled:not(.active) { opacity: .4; cursor: not-allowed; }
.garage-vehicle-option:not(:disabled):not(.active):hover { border-color: var(--cyan); }

@media (max-width: 980px) {
  .garage-slots { grid-template-columns: 1fr; }
}

/* Réservoirs (biomasse/munitions) et statut "en expédition" du Garage */
.garage-tanks { display: flex; flex-direction: column; gap: .4rem; padding-bottom: .5rem; border-bottom: 1px dashed #253f4a; }
.garage-tank { display: grid; grid-template-columns: 20px 1fr auto auto; align-items: center; gap: .4rem; }
.garage-tank-icon { width: 18px; height: 18px; }
.garage-tank-bar { height: 6px; background: #0d151b; border: 1px solid #253f4a; overflow: hidden; }
.garage-tank-fill { height: 100%; background: linear-gradient(90deg, var(--cyan), #2ee6d6); }
.garage-tank-label { font-size: .58rem; color: #7196a4; font-family: var(--font-mono2); white-space: nowrap; }
.garage-refuel-btn {
  border: 1px solid #315463; background: #12242c; color: #9cc5d2;
  font-size: .58rem; font-weight: 700; text-transform: uppercase; padding: .25rem .45rem; cursor: pointer;
}
.garage-refuel-btn:disabled { opacity: .35; cursor: not-allowed; }

.garage-slot-away { align-items: center; text-align: center; justify-content: center; }
.garage-away-status { display: flex; flex-direction: column; align-items: center; gap: .3rem; }
.garage-away-status .garage-vehicle-icon { width: 34px; height: 34px; }
.garage-away-site { font-size: .68rem; color: #dff8ff; }
.garage-away-countdown { font-family: var(--font-mono2); font-size: .8rem; color: var(--cyan); font-weight: 700; }
.garage-away-risk { font-size: .58rem; color: var(--danger); }

/* Lancement d'expédition, dans le panneau de détail EXPLORATION */
.exploration-launch { margin-top: 12px; padding-top: 10px; border-top: 1px dashed #253f4a; display: grid; gap: 8px; }
.exploration-launch-row { display: grid; grid-template-columns: 30px 1fr auto; gap: 8px; align-items: center; padding: 6px 8px; border: 1px solid #253f4a; background: rgba(9,24,31,.75); }
.exploration-launch-icon { width: 26px; height: 26px; }
.exploration-launch-info { display: flex; flex-direction: column; gap: 2px; }
.exploration-launch-name { font-size: .68rem; font-weight: 700; color: #dff8ff; }
.exploration-launch-stat { font-size: .58rem; color: #7196a4; font-family: var(--font-mono2); }
.exploration-launch-stat.insufficient { color: var(--danger); }
.exploration-launch-duration { font-size: .58rem; color: var(--cyan); font-family: var(--font-mono2); }
.exploration-launch-btn {
  border: 1px solid var(--orange); background: rgba(255,138,0,.12); color: #ffd193;
  padding: .4rem .7rem; font-size: .64rem; font-weight: 800; text-transform: uppercase; cursor: pointer;
  clip-path: polygon(6px 0, 100% 0, 100% calc(100% - 6px), calc(100% - 6px) 100%, 0 100%, 0 6px);
}
.exploration-launch-btn:disabled { opacity: .35; cursor: not-allowed; }

/* v2.5.16 — Directives FICSIT */
.prestige-gain-total{font-weight:700;margin-bottom:10px}
.prestige-missions-title{font-weight:800;letter-spacing:.06em;margin:12px 0 6px}
.prestige-missions-list{display:grid;gap:5px}
.prestige-mission{display:flex;justify-content:space-between;gap:12px;padding:7px 9px;border:1px solid var(--border);border-radius:6px;opacity:.72}
.prestige-mission.done{opacity:1;font-weight:700}
.prestige-mission.major{border-width:2px}
.prestige-missions-hint{font-size:.82rem;opacity:.72;margin-top:8px}

/* v2.5.17 — Directives FICSIT explicites */
.prestige-missions-info{padding:10px 12px;margin:0 0 12px;border:1px solid var(--border);border-radius:8px;line-height:1.4}
.prestige-missions-info-title{font-weight:800;margin-bottom:4px}
.prestige-mission{display:block}
.prestige-mission-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}
.prestige-mission-desc{font-size:.88rem;opacity:.78;margin:4px 0 6px;line-height:1.35}
.prestige-mission-progress{font-size:.84rem;opacity:.9;margin-top:2px}
.prestige-mission-badge{font-size:.72rem;font-weight:900;letter-spacing:.08em;margin-bottom:5px}


/* =========================================================================
 * v2.5.19 — Interface mobile compacte
 * Desktop inchangé. Sur téléphone, les contrôles permanents sont ramenés à
 * deux barres : actions principales + navigation horizontale.
 * ========================================================================= */
.mobile-game-topbar,
.mobile-game-menu { display: none; }

@media (max-width: 700px) {
  :root { --mobile-controls-height: 100px; }

  /* Bloc de contrôle principal : reste sous le chrome du navigateur pendant
     le scroll, mais ne monopolise plus tout le premier écran. */
  .cc-left {
    position: sticky;
    top: 0;
    z-index: 210;
    min-height: 0;
    padding: .35rem .5rem .4rem;
    overflow: visible;
    background: rgba(13,14,18,.98);
    border-bottom: 1px solid var(--border);
    box-shadow: 0 8px 22px rgba(0,0,0,.3);
  }

  .cc-left-header,
  .cc-left-footer,
  .cc-hint,
  .cc-clutter { display: none !important; }

  .mobile-game-topbar {
    min-height: 36px;
    display: flex;
    align-items: center;
    gap: .45rem;
  }
  .mobile-sync-status {
    display:block;
    margin:3px 0 0;
    padding:4px 7px;
    border-left:2px solid var(--ok);
    background:rgba(74,210,122,.07);
    color:var(--muted);
    font:600 .58rem/1.2 var(--font-mono2);
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
  }
  .mobile-sync-status[data-sync-state="ok"] { border-left-color: var(--ok); }
  .mobile-sync-status[data-sync-state="notice"] {
    color: #ffd166;
    font-weight: 900;
    border-left-color: #ffad24;
    background: rgba(255, 166, 0, .14);
  }
  .mobile-sync-status[data-sync-state="alert"] {
    color: #fff;
    font-weight: 900;
    border: 1px solid #ff4d5e;
    border-left: 4px solid #ff4d5e;
    background: rgba(218, 50, 62, .3);
    box-shadow: 0 0 14px rgba(255, 45, 65, .28);
    animation: sync-alert-pulse 1.5s ease-in-out infinite;
  }
  .mobile-game-brand {
    display: flex;
    align-items: center;
    gap: .35rem;
    min-width: 0;
    flex: 0 1 auto;
  }
  .mobile-game-mark {
    width: 24px;
    height: 24px;
    display: grid;
    place-items: center;
    border: 1px solid rgba(255,138,0,.55);
    background: rgba(255,138,0,.12);
    color: var(--orange);
    font-family: var(--font-display);
    font-size: .7rem;
    font-weight: 800;
  }
  .mobile-game-title {
    font-family: var(--font-display);
    font-size: .78rem;
    font-weight: 800;
    letter-spacing: .04em;
  }
  .mobile-game-version {
    color: var(--muted);
    font-family: var(--font-mono2);
    font-size: .52rem;
  }
  .mobile-game-meters {
    margin-left: auto;
    min-width: 0;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: .55rem;
    overflow: hidden;
  }
  .mobile-meter {
    display: inline-flex;
    align-items: center;
    gap: .18rem;
    white-space: nowrap;
    color: var(--muted);
    font-size: .58rem;
    min-width: 0;
  }
  .mobile-meter strong {
    color: var(--text);
    max-width: 74px;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .mobile-power-meter { color: var(--cyan); }
  .mobile-coupon-meter { color: var(--orange); }

  .mobile-menu-toggle {
    flex: 0 0 34px;
    width: 34px;
    height: 32px;
    padding: 0;
    border: 1px solid var(--border);
    border-radius: 6px;
    color: var(--text);
    background: var(--panel);
    font-size: 1.15rem;
    line-height: 1;
    cursor: pointer;
  }

  /* Les trois actions essentielles tiennent sur UNE seule ligne. */
  .cc-click-zone {
    flex: none;
    padding: .25rem 0 0;
    gap: 0;
  }
  .cc-secondary-actions {
    display: flex;
    flex-direction: row;
    align-items: stretch;
    justify-content: stretch;
    gap: .35rem;
    width: 100%;
    max-width: none;
    margin: 0;
  }
  .cc-manual-action {
    flex: 1 1 0;
    width: auto;
    min-width: 0;
  }
  .cc-manual-btn {
    height: 48px;
    min-height: 48px;
    padding: .3rem .4rem;
    border-width: 1px;
    border-radius: 8px;
    box-shadow: none;
  }
  .cc-manual-btn-content { gap: .28rem; min-width: 0; }
  .cc-manual-icon { width: 1.25rem; height: 1.25rem; }
  .cc-manual-label {
    min-width: 0;
    font-size: .66rem;
    text-align: left;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .cc-manual-dur {
    flex: 0 0 auto;
    font-size: .51rem;
  }
  .cc-auto-explore-toggle,
  .cc-manual-progress { display: none !important; }

  /* Le header desktop disparaît : seule sa barre de navigation reste, compacte
     et scrollable horizontalement. */
  .cc-header-v2 {
    position: sticky;
    top: var(--mobile-controls-height);
    z-index: 180;
    background: rgba(17,18,22,.98);
    box-shadow: 0 6px 16px rgba(0,0,0,.25);
  }
  .cc-brand-row { display: none !important; }
  .cc-main-tabs {
    position: static;
    display: flex;
    flex-wrap: nowrap;
    gap: .1rem;
    padding: 0 .3rem;
    overflow-x: auto;
    overflow-y: hidden;
    scrollbar-width: none;
    overscroll-behavior-x: contain;
    -webkit-overflow-scrolling: touch;
  }
  .cc-main-tabs::-webkit-scrollbar { display: none; }
  .cc-nav-tab {
    flex: 0 0 auto;
    min-height: 40px;
    padding: .42rem .58rem;
    font-size: .65rem;
    clip-path: none;
    white-space: nowrap;
  }
  .cc-tab-dot { display: none; }

  /* L'énergie et les coupons sont déjà résumés dans la barre du haut :
     inutile de leur refaire consommer deux grosses lignes juste dessous. */
  .cc-status-strip {
    padding: .35rem .55rem;
    gap: .25rem;
  }
  .cc-status-ada {
    min-width: 0;
    font-size: .68rem;
  }
  .cc-status-ada-tag { font-size: .52rem; }
  .cc-status-chip { padding: .25rem .2rem; margin: 0; border-left: 0; }
  .cc-status-tier { width: 100%; }
  .cc-status-tier .cc-tier-mini-bar {
    flex: 1;
    width: auto;
    max-width: none;
  }
  .cc-power-panel,
  .cc-currency-panel { display: none !important; }

  /* Menu burger plein panneau mais compact : les fonctions secondaires ne
     prennent plus de hauteur quand on joue. */
  .mobile-game-menu {
    display: block;
    position: fixed;
    z-index: 400;
    top: max(8px, env(safe-area-inset-top));
    left: max(8px, env(safe-area-inset-left));
    right: max(8px, env(safe-area-inset-right));
    max-height: calc(100dvh - 16px);
    overflow-y: auto;
    padding: .75rem;
    border: 1px solid var(--border);
    border-top: 2px solid var(--orange);
    border-radius: 12px;
    background: rgba(22,24,29,.985);
    box-shadow: 0 20px 70px rgba(0,0,0,.72);
  }
  .mobile-game-menu.hidden { display: none !important; }
  .mobile-menu-head {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: .65rem;
    font-family: var(--font-display);
  }
  .mobile-menu-close {
    width: 32px;
    height: 32px;
    border: 0;
    background: transparent;
    color: var(--muted);
    font-size: 1.4rem;
    cursor: pointer;
  }
  .mobile-menu-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: .4rem;
  }
  .mobile-menu-item,
  .mobile-prestige-item {
    min-height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: .55rem .65rem;
    border: 1px solid var(--border);
    border-radius: 7px;
    background: var(--panel);
    color: var(--text);
    font-family: var(--font-display);
    font-size: .7rem;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
  }
  .mobile-prestige-item {
    width: 100%;
    margin-top: .55rem;
    border-color: rgba(255,138,0,.45);
    color: var(--orange);
    background: rgba(255,138,0,.08);
    font-weight: 800;
  }
  .mobile-prestige-item.ready {
    background: var(--orange);
    color: #111;
    border-color: var(--orange);
  }
  .mobile-auto-explore {
    margin-top: .55rem;
    padding: .55rem .65rem;
    display: flex;
    align-items: center;
    gap: .55rem;
    border: 1px solid var(--border);
    border-radius: 7px;
    color: var(--muted);
    font-size: .68rem;
  }
  .mobile-auto-explore.hidden { display: none !important; }
  .mobile-auto-explore input { accent-color: var(--orange); }
  .mobile-menu-lang {
    display: flex;
    justify-content: center;
    gap: .35rem;
    margin-top: .55rem;
  }
  .mobile-menu-lang button {
    min-width: 54px;
    padding: .35rem .6rem;
    border: 1px solid var(--border);
    border-radius: 5px;
    background: transparent;
    color: var(--muted);
    cursor: pointer;
  }

  /* Retire l'ancien espace entre les deux grandes colonnes sur mobile. */
  .cc-right { border-top: 0; }
}

@media (max-width: 390px) {
  :root { --mobile-controls-height: 96px; }
  .mobile-meter { font-size: .53rem; }
  .mobile-meter strong { max-width: 58px; }
  .cc-manual-btn { height: 44px; min-height: 44px; }
  .cc-manual-label { font-size: .61rem; }
  .cc-manual-dur { font-size: .47rem; }
}

/* v2.5.20 — Modales au-dessus de l'UI mobile sticky */
@media (max-width: 700px) {
  .modal-overlay {
    z-index: 520;
    align-items: flex-start;
    padding:
      max(.55rem, env(safe-area-inset-top))
      max(.55rem, env(safe-area-inset-right))
      max(.55rem, env(safe-area-inset-bottom))
      max(.55rem, env(safe-area-inset-left));
  }

  .modal-box {
    width: 100%;
    max-height: calc(100dvh - max(1.1rem, env(safe-area-inset-top) + env(safe-area-inset-bottom)));
    margin: 0;
  }

  .modal-close,
  .modal-box > .close,
  .modal-box [data-modal-close] {
    z-index: 3;
  }
}

/* v2.5.21 — État électrique visible dans le header mobile */
@media (max-width: 700px) {
  .mobile-power-meter {
    position: relative;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    gap: 0;
    padding: .1rem .28rem;
    border-radius: 5px;
    transition: background .15s ease, color .15s ease;
  }
  .mobile-power-main {
    display: inline-flex;
    align-items: center;
    gap: .18rem;
    white-space: nowrap;
  }
  .mobile-power-status {
    display: block;
    max-width: 128px;
    margin-top: 1px;
    font-family: var(--font-mono2);
    font-size: .43rem;
    font-weight: 800;
    line-height: 1.05;
    letter-spacing: .025em;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .mobile-power-status.hidden { display: none !important; }

  .mobile-power-meter.strained {
    color: #ffb14a;
    background: rgba(255,177,74,.09);
  }
  .mobile-power-meter.strained strong,
  .mobile-power-meter.strained .mobile-power-status { color: #ffb14a; }

  .mobile-power-meter.brownout {
    color: #ff8a00;
    background: rgba(255,90,20,.15);
    box-shadow: inset 0 0 0 1px rgba(255,120,40,.35);
  }
  .mobile-power-meter.brownout strong,
  .mobile-power-meter.brownout .mobile-power-status { color: #ff9f43; }

  .mobile-power-meter.blackout {
    color: #ff6262;
    background: rgba(255,70,70,.15);
    box-shadow: inset 0 0 0 1px rgba(255,80,80,.42);
  }
  .mobile-power-meter.blackout strong,
  .mobile-power-meter.blackout .mobile-power-status { color: #ff7d7d; }

  /* En alerte, le bloc énergie a priorité sur les coupons : on garde
     l'information critique lisible même sur un écran étroit. */
  .mobile-power-meter.brownout,
  .mobile-power-meter.blackout { flex-shrink: 0; }
  .mobile-game-meters:has(.mobile-power-meter.brownout) .mobile-coupon-meter,
  .mobile-game-meters:has(.mobile-power-meter.blackout) .mobile-coupon-meter {
    display: none;
  }
}

@media (max-width: 390px) {
  .mobile-power-status { max-width: 108px; font-size: .4rem; }
  .mobile-power-meter.brownout #mobilePowerValue,
  .mobile-power-meter.strained #mobilePowerValue,
  .mobile-power-meter.supporting #mobilePowerValue { font-size: .5rem; }
}

/* v2.5.25 — Batteries dans la Vue USINE */
.factory-machine-storage .factory-machine-visual {
  background: linear-gradient(135deg, color-mix(in srgb, var(--factory-tint) 18%, #10161b), #10161b);
}
.factory-machine-storage.running .factory-machine-pulse {
  opacity: .45;
}
.factory-machine-storage .recipe-in {
  color: #78dff2;
}

/* v2.5.27 — M.A.M. plus lisible/compact sur téléphone */
@media (max-width: 700px) {
  .mam-tree-host {
    padding: .7rem;
  }

  /* Les cartes SVG gardent leur taille et leur zone tactile.
     Seule la typo est réduite pour éviter les retours trop serrés. */
  .mam-lane-title {
    font-size: 10px;
    letter-spacing: .35px;
  }

  .mam-node-label {
    font-size: 10.5px;
  }

  .mam-node-desc {
    font-size: 8.8px;
  }

  .mam-node-footer {
    font-size: 8.5px;
  }
}

@media (max-width: 390px) {
  .mam-node-label {
    font-size: 10px;
  }

  .mam-node-desc {
    font-size: 8.4px;
  }

  .mam-node-footer {
    font-size: 8.1px;
  }
}

/* v2.5.28 — Typographie M.A.M. uniforme sur TOUTES les branches mobiles */
@media (max-width: 700px) {
  .mam-node-label {
    font-size: 9px !important;
    font-weight: 700;
  }

  .mam-node-desc {
    font-size: 7.4px !important;
  }

  .mam-node-footer {
    font-size: 7.2px !important;
  }

  .mam-lane-title {
    font-size: 8.8px !important;
  }

  .mam-node-icon {
    transform: scale(.88);
    transform-origin: center;
  }
}

@media (max-width: 390px) {
  .mam-node-label { font-size: 8.6px !important; }
  .mam-node-desc { font-size: 7px !important; }
  .mam-node-footer { font-size: 6.9px !important; }
  .mam-lane-title { font-size: 8.4px !important; }
}

/* v2.5.29 — Numéro de version toujours visible dans le header mobile */
@media (max-width: 700px) {
  .mobile-game-brand {
    flex: 0 0 auto;
    min-width: max-content;
  }

  .mobile-game-version {
    display: inline !important;
    flex: 0 0 auto;
    font-size: .50rem;
    line-height: 1;
    white-space: nowrap;
    opacity: .78;
  }

  .mobile-game-meters {
    flex: 1 1 auto;
    min-width: 0;
    margin-left: .2rem;
  }

  .mobile-coupon-meter {
    flex: 0 1 auto;
    min-width: 0;
  }
}

@media (max-width: 390px) {
  .mobile-game-title { font-size: .72rem; }
  .mobile-game-version { font-size: .46rem; }
  .mobile-game-meters { gap: .25rem; }
  .mobile-coupon-meter {
    max-width: 64px;
    overflow: hidden;
  }
}

@media (max-width: 350px) {
  .mobile-game-title { font-size: .68rem; }
  .mobile-game-version { font-size: .43rem; }

  /* Les Coupons cèdent la place avant la version et l'état électrique. */
  .mobile-coupon-meter { display: none; }
}

/* v2.5.30 — Batterie sur la même ligne que « Réseau tendu » */
@media (max-width: 700px) {
  .mobile-power-status {
    max-width: 132px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  .mobile-power-meter.strained .mobile-power-status {
    letter-spacing: 0;
  }
}

@media (max-width: 390px) {
  .mobile-power-status {
    max-width: 116px;
  }
}

/* v2.5.31 — Pan tactile EXPLORATION depuis n'importe quel hexagone */
.exploration-map-svg {
  touch-action: none;
  -webkit-user-select: none;
}


/* =========================================================================
 * v2.5.33 — Correctif header mobile sans clipping
 * ========================================================================= */
@media (max-width: 700px) {
  html,
  body {
    width: 100%;
    max-width: 100%;
    overflow-x: clip;
  }

  .cc-shell,
  .cc-left,
  .cc-right,
  .cc-header-v2,
  .mobile-game-topbar,
  .cc-click-zone,
  .cc-secondary-actions {
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
  }

  /* IMPORTANT : ne pas mettre overflow:hidden sur .cc-left.
     Le menu burger est positionné depuis ce bloc et doit pouvoir dépasser
     verticalement lorsqu'il est ouvert. */
  .cc-left {
    overflow: visible;
    contain: none;
  }

  .mobile-game-topbar {
    width: 100%;
    min-width: 0;
  }

  /* La marque peut rétrécir sans pousser toute la page horizontalement,
     mais la version reste toujours visible. */
  .mobile-game-brand {
    flex: 0 1 auto;
    min-width: 0;
    max-width: none;
    overflow: visible;
  }

  .mobile-game-title {
    min-width: 0;
    white-space: nowrap;
  }

  .mobile-game-version {
    display: inline !important;
    flex: 0 0 auto;
    white-space: nowrap;
  }

  .mobile-game-meters {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
  }

  .mobile-power-meter {
    min-width: 0;
    overflow: hidden;
  }

  .mobile-power-main,
  .mobile-power-status {
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  /* Les Coupons restent visibles : ils se compressent avant de disparaître. */
  .mobile-coupon-meter {
    display: inline-flex !important;
    flex: 0 1 auto;
    min-width: 0;
    max-width: 76px;
    overflow: hidden;
  }

  .mobile-coupon-meter strong {
    min-width: 0;
    max-width: 58px;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  /* La barre d'onglets défile dans sa propre zone sans agrandir la page. */
  .cc-main-tabs {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
  }
}

@media (max-width: 390px) {
  .mobile-game-brand {
    gap: .22rem;
  }

  .mobile-game-title {
    font-size: .68rem;
  }

  .mobile-game-version {
    font-size: .44rem;
  }

  .mobile-game-meters {
    gap: .18rem;
  }

  .mobile-coupon-meter {
    max-width: 64px;
  }

  .mobile-coupon-meter strong {
    max-width: 46px;
  }
}

@media (max-width: 350px) {
  .mobile-game-title {
    font-size: .62rem;
    letter-spacing: .02em;
  }

  .mobile-game-version {
    font-size: .41rem;
  }

  .mobile-coupon-meter {
    max-width: 56px;
  }

  .mobile-coupon-meter strong {
    max-width: 40px;
  }
}

/* =========================================================================
 * v2.5.34 — Sélecteur auto compact directement sur REPÉRER (mobile)
 * ========================================================================= */
@media (max-width: 700px) {
  #exploreAction {
    position: relative;
  }

  /* Le toggle desktop était masqué avec les éléments secondaires mobiles.
     On le réutilise directement sur la carte, sans texte, pour éviter une
     ligne supplémentaire dans le header. */
  #autoExploreToggle:not(.hidden) {
    display: flex !important;
    position: absolute;
    z-index: 4;
    left: 50%;
    bottom: 2px;
    transform: translateX(-50%);
    margin: 0;
    padding: 0;
    width: 28px;
    height: 15px;
    align-items: center;
    justify-content: center;
    line-height: 1;
  }

  #autoExploreToggle > span {
    display: none !important;
  }

  #autoExploreToggle input[type="checkbox"] {
    width: 28px;
    height: 15px;
    border-width: 1px;
  }

  #autoExploreToggle input[type="checkbox"]::before {
    width: 11px;
    height: 11px;
    top: 1px;
    left: 1px;
  }

  #autoExploreToggle input[type="checkbox"]:checked::before {
    transform: translateX(13px);
  }

  /* Quelques pixels de réserve en bas pour que le switch ne gêne jamais
     le texte ou la durée du bouton. */
  #exploreActionBtn .cc-manual-btn-content {
    padding-bottom: 6px;
  }
}

@media (max-width: 390px) {
  #autoExploreToggle:not(.hidden) {
    bottom: 1px;
  }

  #exploreActionBtn .cc-manual-btn-content {
    padding-bottom: 5px;
  }
}


/* =========================================================================
 * v2.5.35 — Tiroir Ressources sur PC
 * Base : v2.5.34. Le comportement mobile existant reste inchangé.
 * ========================================================================= */
@media (min-width: 721px) {
  .cc-resource-toggle {
    display: flex;
    align-items: center;
    gap: .45rem;
    width: 100%;
    min-height: 32px;
    padding: .32rem .75rem;
    border: 0;
    border-bottom: 1px solid var(--border);
    border-radius: 0;
    background: #171a20;
    color: var(--muted);
    font: inherit;
    font-size: .65rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    cursor: pointer;
    text-align: left;
  }

  .cc-resource-toggle:hover {
    background: #1b1f26;
    color: var(--text);
  }

  .cc-resource-toggle-caret {
    transition: transform .18s ease;
    color: var(--orange);
    font-size: .9rem;
    line-height: 1;
  }

  .cc-resource-toggle-label::before {
    content: '☰ ';
    color: var(--cyan);
    font-size: .76rem;
  }

  .cc-resource-toggle.collapsed .cc-resource-toggle-caret {
    transform: rotate(-90deg);
  }

  .cc-resource-toggle-count {
    margin-left: auto;
    color: var(--orange);
    font-weight: 700;
  }

  .cc-resource-bar.collapsed {
    display: none;
  }
}


/* =========================================================================
 * v2.5.36 — Burger Ressources sticky sur mobile
 * ========================================================================= */
@media (max-width: 720px) {
  .cc-resource-toggle {
    position: sticky;
    /* actions principales + navigation mobile (40 px) */
    top: calc(var(--mobile-controls-height) + 40px);
    z-index: 170;
    background: rgba(23,26,32,.99);
    box-shadow: 0 5px 14px rgba(0,0,0,.28);
  }

  /* La barre ADA / Palier / statuts juste au-dessus reste dans le flux :
     elle défile et n'est volontairement pas sticky. */
  .cc-status-strip {
    position: static;
  }

  /* Quand Ressources est ouvert alors que son burger est déjà sticky,
     on transforme la liste en tiroir juste dessous pour qu'elle soit
     immédiatement visible, sans devoir remonter dans la page. */
  .cc-resource-bar.floating-drawer {
    position: fixed;
    z-index: 169;
    left: 0;
    right: 0;
    top: calc(var(--mobile-controls-height) + 80px);
    width: 100%;

    /* v2.5.51
       Ancien comportement : max-height: 46dvh (44dvh sous 390px).
       Dès que le burger atteignait sa position sticky, le panneau ouvert
       se contractait brutalement à environ la moitié de l'écran.

       Désormais le tiroir utilise TOUT l'espace réellement disponible sous
       le header sticky. Les ressources défilent dans cette zone sans laisser
       inutilement réapparaître la Boutique/M.A.M. derrière. */
    max-height: calc(
      100dvh
      - var(--mobile-controls-height)
      - 80px
      - env(safe-area-inset-bottom, 0px)
    );
    overflow-y: auto;
    overflow-x: hidden;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
    padding: .5rem;
    padding-bottom: max(.5rem, env(safe-area-inset-bottom, 0px));
    background: rgba(23,26,32,.995);
    border-bottom: 1px solid var(--border);
    box-shadow: 0 12px 30px rgba(0,0,0,.48);
  }
}


/* =========================================================================
 * v2.5.40 — Déficits directement dans le burger Ressources mobile
 * ========================================================================= */
.cc-resource-toggle-alert {
  display: none;
}

@media (max-width: 720px) {
  .cc-resource-toggle {
    min-width: 0;
  }

  .cc-resource-toggle-label,
  .cc-resource-toggle-count,
  .cc-resource-toggle-caret {
    flex: 0 0 auto;
  }

  .cc-resource-toggle.collapsed .cc-resource-toggle-alert {
    display: block;
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    margin-left: .1rem;
    color: var(--danger);
    font-size: .64rem;
    letter-spacing: .015em;
    text-transform: none;
  }

  .cc-resource-toggle.collapsed .cc-resource-toggle-alert.stable {
    color: var(--ok);
  }

  .cc-resource-alert-track {
    display: inline-flex;
    width: max-content;
    align-items: center;
    gap: 2rem;
    will-change: transform;
  }

  .cc-resource-alert-copy {
    flex: 0 0 auto;
  }

  .cc-resource-toggle-alert:not(.scrolling) .cc-resource-alert-copy-clone {
    display: none;
  }

  .cc-resource-toggle-alert.scrolling .cc-resource-alert-track {
    animation: resource-deficit-ticker var(--resource-ticker-duration, 12s) linear infinite;
  }

  .cc-resource-toggle:hover .cc-resource-alert-track,
  .cc-resource-toggle:focus-visible .cc-resource-alert-track {
    animation-play-state: paused;
  }

  @keyframes resource-deficit-ticker {
    from { transform: translateX(0); }
    to { transform: translateX(calc(-50% - 1rem)); }
  }

  /* Le compteur reste tout à droite, mais ne pousse jamais le ticker hors écran. */
  .cc-resource-toggle-count {
    margin-left: .25rem;
  }
}

@media (max-width: 390px) {
  .cc-resource-toggle.collapsed {
    gap: .35rem;
  }

  .cc-resource-toggle.collapsed .cc-resource-toggle-label {
    font-size: .68rem;
  }

  .cc-resource-toggle.collapsed .cc-resource-toggle-alert {
    font-size: .59rem;
  }
}

@media (prefers-reduced-motion: reduce) {
  .cc-resource-toggle-alert.scrolling .cc-resource-alert-track {
    animation: none;
  }
}


/* v2.5.41 — défilement horizontal automatique du résumé des déficits */
@media (max-width: 720px) {
  .cc-resource-toggle.collapsed .cc-resource-toggle-alert {
    overflow: hidden;
  }

  .cc-resource-toggle-alert.scrolling .cc-resource-alert-track {
    animation: resource-deficit-ticker var(--resource-ticker-duration, 14s) linear infinite !important;
  }
}


/* v2.5.43 — marquee Ressources piloté en pixels par JS */
@media (max-width: 720px) {
  .cc-resource-toggle-alert.scrolling .cc-resource-alert-track {
    animation: none !important;
    will-change: transform;
  }
}

/* v2.5.56 — aide d'introduction à l'Exploration */
.exploration-intro-pane .exploration-intro-sections{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:14px 0}
.exploration-intro-pane .help-section{margin:0}
.exploration-intro-pane .help-section h3{margin:0 0 6px}
.exploration-intro-pane .help-section p{margin:0}
.exploration-intro-dismiss{display:flex;align-items:center;gap:9px;margin:14px 0 12px;cursor:pointer}
.exploration-intro-dismiss input{width:18px;height:18px;accent-color:var(--orange,#ff8a00)}
#explorationIntroContinue{width:100%}
@media(max-width:700px){
  .exploration-intro-pane .exploration-intro-sections{grid-template-columns:1fr;gap:8px}
  .exploration-intro-pane .help-section{padding:10px 12px}
  .exploration-intro-pane .help-section h3{font-size:.95rem}
  .exploration-intro-pane .help-section p{font-size:.86rem;line-height:1.4}
}

/* v3.0.0 — contrats quotidiens et projet industriel */
.cc-contracts-panel{padding:clamp(16px,3vw,34px);background:linear-gradient(145deg,#0d151b,#111a21 55%,#0a1116);min-height:520px}
.daily-contracts-head,.industrial-project-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;border-bottom:1px solid rgba(92,185,208,.22);padding-bottom:18px;margin-bottom:18px}
.daily-contracts-head h2,.industrial-project-head h3{margin:5px 0 6px;color:#eaf3f5;letter-spacing:.04em}
.daily-contracts-head p,.industrial-project-head p{margin:0;color:#8da7b2;max-width:720px}
.daily-contract-counter,.industrial-project-cycle{border:1px solid #e58a2c;color:#ffad4c;padding:9px 12px;font-family:var(--font-mono,monospace);font-size:.76rem;white-space:nowrap}
.daily-contract-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:20px}
.daily-contract-card,.industrial-project-card{border:1px solid rgba(81,159,183,.28);background:rgba(8,15,20,.76);box-shadow:inset 0 2px 0 rgba(255,163,54,.6);padding:16px}
.daily-contract-card.is-complete{opacity:.64;box-shadow:inset 0 2px 0 #54c684}
.daily-contract-streak{margin-top:6px;color:#f2a43a;font-size:12px;font-weight:700}
.daily-contract-card h3{display:flex;align-items:center;gap:7px;color:#eef6f7;font-size:1rem;margin:8px 0}
.daily-contract-card p{color:#9ab0b7;margin:0 0 12px;font-family:var(--font-mono,monospace)}
.daily-contract-kicker,.factory-kicker{color:#ffa742;font-size:.62rem;letter-spacing:.16em;font-family:var(--font-mono,monospace)}
.daily-contract-reward{color:#69d68c;font-size:.82rem;margin:10px 0 14px;display:flex;align-items:center;gap:5px}
.daily-contract-card .cc-primary-btn,.industrial-project-footer .cc-primary-btn{width:100%}
.industrial-project-rows{display:grid;gap:8px}
.industrial-project-row{display:grid;grid-template-columns:minmax(140px,1.2fr) minmax(100px,.7fr) 120px auto;gap:9px;align-items:center;border-bottom:1px solid rgba(91,140,153,.16);padding:8px 0;color:#c9d8dc}
.industrial-project-row>span{display:flex;align-items:center;gap:6px}.industrial-project-row strong{font-family:var(--font-mono,monospace);font-size:.78rem;color:#7de0ee}
.industrial-project-row input{min-width:0;background:#101b22;border:1px solid #2b4b58;color:#edf7f9;padding:8px;border-radius:2px}
.industrial-project-row button{white-space:nowrap}.industrial-project-footer{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:16px;color:#91aab2;font-size:.84rem}
@media(max-width:800px){.daily-contract-grid{grid-template-columns:1fr 1fr}.industrial-project-row{grid-template-columns:1fr 1fr}.industrial-project-row input{width:100%}}
@media(max-width:520px){.daily-contract-grid{grid-template-columns:1fr}.daily-contracts-head,.industrial-project-head{flex-direction:column}.daily-contract-counter,.industrial-project-cycle{align-self:flex-start}.industrial-project-row{grid-template-columns:1fr auto}.industrial-project-row strong{grid-column:1/-1}.industrial-project-row input{grid-column:1}.industrial-project-row button{grid-column:2;grid-row:2}}

/* v2.5.62 — réponses aux rapports / boîte de réception COMPTE */
#openAccountBtn{position:relative}
.account-message-badge{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:17px;height:17px;padding:0 4px;margin-left:5px;
  border-radius:999px;background:#ff8a00;color:#111;
  font-size:.68rem;font-weight:800;line-height:1;
}
.account-message-badge.hidden{display:none}
.account-support-card{
  margin:12px 0 6px;padding:13px;border:1px solid rgba(93,202,221,.2);
  border-radius:10px;background:rgba(12,19,24,.42)
}
.account-support-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.account-support-head h3{margin:0 0 4px}
.account-support-messages{display:grid;gap:9px;margin-top:10px}
.account-support-thread{border:1px solid rgba(255,255,255,.09);border-radius:9px;overflow:hidden;background:rgba(0,0,0,.15)}
.account-support-thread-head{display:flex;align-items:center;gap:7px;padding:9px 10px;border-bottom:1px solid rgba(255,255,255,.07)}
.account-support-ref{font-family:monospace;color:#ff9a32;font-weight:700}
.account-support-status{margin-left:auto;font-size:.72rem;opacity:.8}
.account-support-origin{padding:9px 10px;font-size:.83rem;color:#aeb3bd;white-space:pre-wrap}
.account-support-reply{margin:0 9px 9px;padding:9px 10px;border-left:3px solid #ff8a00;background:rgba(255,138,0,.08);border-radius:5px}
.account-support-reply strong{display:block;color:#ff9a32;margin-bottom:3px}
.account-support-time{font-size:.7rem;color:#7f8792;margin-left:6px;font-weight:400}
.account-support-reply-text{white-space:pre-wrap;line-height:1.4}
@media(max-width:700px){
  .account-support-head{align-items:center}
  .account-support-card{padding:10px}
  .account-support-thread-head{flex-wrap:wrap}
  .account-support-status{margin-left:0;width:100%}
}

/* V3 alpha.5 — Carte d'Opérations FICSIT */
.operation-card{overflow:hidden}.operation-summary{display:flex;gap:14px;flex-wrap:wrap;margin:10px 0 14px}.operation-summary span{padding:7px 10px;border:1px solid rgba(255,255,255,.12);border-radius:8px;background:rgba(0,0,0,.18)}
.operation-map{position:relative;height:520px;max-width:760px;margin:16px auto 22px;overflow:auto;border:1px solid rgba(255,255,255,.1);border-radius:12px;background:radial-gradient(circle at center,rgba(255,166,0,.08),rgba(0,0,0,.24))}
.operation-hex{position:absolute;left:calc(50% + (var(--q) * 88px) + (var(--r) * 44px));top:calc(50% + (var(--r) * 76px));transform:translate(-50%,-50%);width:94px;height:82px;clip-path:polygon(25% 0,75% 0,100% 50%,75% 100%,25% 100%,0 50%);border:0;padding:12px 8px;background:#30343a;color:#eee;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;text-align:center;cursor:pointer}.operation-hex span{font-size:19px}.operation-hex b{font-size:10px;line-height:1.05}.operation-hex small{font-size:9px;opacity:.8}.operation-hex.available{background:#72531d}.operation-hex.engaged{background:#8a5c17}.operation-hex.secured{background:#245d3a}.operation-hex.locked{background:#24272b;color:#777;cursor:not-allowed}.operation-hex.d5:not(.secured){box-shadow:inset 0 0 0 3px #b83b32}.operation-detail{border-top:1px solid rgba(255,255,255,.1);padding-top:14px;display:flex;flex-direction:column;gap:8px}.operation-detail .social-actions input{max-width:190px}
@media(max-width:700px){.operation-map{height:430px}.operation-hex{left:calc(50% + (var(--q) * 68px) + (var(--r) * 34px));top:calc(50% + (var(--r) * 59px));width:74px;height:65px;padding:8px 5px}.operation-hex b{font-size:8px}.operation-hex small{font-size:8px}.operation-hex span{font-size:16px}}


/* V3 alpha.7 — Couche sociale alignée sur le langage visuel FPSim */
.cc-multiplayer-panel{padding:18px;overflow:auto;background:linear-gradient(180deg,rgba(7,11,14,.45),rgba(7,11,14,.15))}
.social-shell{display:block;min-height:0}
.social-content{display:flex;flex-direction:column;gap:14px;min-width:0}
.social-hero,.social-card{border:1px solid color-mix(in srgb,var(--cyan) 24%,rgba(255,255,255,.08));background:linear-gradient(145deg,rgba(11,20,25,.94),rgba(7,12,16,.94));box-shadow:0 12px 28px rgba(0,0,0,.22)}
.social-hero{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;height:auto;min-height:0;padding:18px;border-radius:12px;position:relative;overflow:hidden;margin-bottom:14px}
.social-hero::after{content:"";position:absolute;inset:auto -70px -90px auto;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,color-mix(in srgb,var(--orange) 24%,transparent),transparent 68%);pointer-events:none}
.social-hero h2,.social-card h3{margin:.15rem 0 .4rem}.social-hero p,.social-card p{margin:.25rem 0;color:var(--text-muted,#a9b1ba)}
.social-utility-bar{display:flex;justify-content:flex-end;align-items:center;min-height:0;margin:0 0 8px;padding:0 2px}
.social-utility-bar .social-notif-btn{margin:0}
.social-kicker{font:700 10px/1.2 'IBM Plex Mono',monospace;letter-spacing:.12em;color:var(--cyan);text-transform:uppercase}
.social-nav{display:flex;gap:6px;flex-wrap:wrap;padding:6px;border:1px solid rgba(255,255,255,.08);border-radius:10px;background:rgba(0,0,0,.2)}
.social-nav button{border-radius:7px;min-height:38px}.social-nav button.active{background:color-mix(in srgb,var(--orange) 18%,var(--panel-2));border-color:var(--orange);outline:0;box-shadow:inset 0 -2px 0 var(--orange)}
.social-view{display:none}.social-view.active{display:block}.social-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.social-card{padding:16px;border-radius:12px}.social-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding-bottom:10px;border-bottom:1px solid rgba(255,255,255,.07)}
.social-pill{display:inline-flex;align-items:center;gap:5px;padding:5px 9px;border-radius:4px;border:1px solid rgba(255,255,255,.15);background:rgba(255,255,255,.035);font:700 10px/1 'IBM Plex Mono',monospace;letter-spacing:.04em}.social-pill.ok{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 45%,transparent)}
.social-actions,.social-search,.social-row-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.social-actions{margin-top:12px}.social-search{margin:10px 0;padding:8px;border-radius:8px;background:rgba(0,0,0,.18)}
.social-input,.social-card input,.social-card select,.social-chat textarea{width:100%;box-sizing:border-box;margin-top:5px;background:#0b1217;color:inherit;border:1px solid rgba(255,255,255,.16);border-radius:6px;padding:10px}.social-input:focus,.social-card input:focus,.social-card select:focus,.social-chat textarea:focus{border-color:var(--cyan);outline:1px solid color-mix(in srgb,var(--cyan) 35%,transparent)}
.social-search .social-input{flex:1;min-width:180px;width:auto;margin-top:0}.social-card label{display:block;margin:10px 0;font-size:.9rem}.social-primary{font-weight:800;color:#f4f7f9}
.social-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:11px 8px;border-bottom:1px solid rgba(255,255,255,.075);transition:background .12s ease}.social-row:hover{background:rgba(255,255,255,.025)}.social-row:last-child{border-bottom:0}.social-row span:first-child{display:flex;flex-direction:column;gap:2px}.social-row small,.social-msg small{opacity:.62}
.social-notification{display:flex;justify-content:space-between;gap:14px;padding:12px 10px;border-left:3px solid transparent;border-bottom:1px solid rgba(255,255,255,.075)}.social-notification.unread{background:rgba(255,166,0,.055);border-left-color:var(--orange)}.social-notification p{margin:.2rem 0}
.social-thread{width:100%;display:flex;justify-content:space-between;align-items:center;text-align:left;margin:4px 0;padding:11px;border-radius:7px}.social-thread span:first-child{display:flex;flex-direction:column}
.social-chat{display:flex;flex-direction:column;gap:10px}.social-chat-head{display:flex;align-items:center;gap:10px}.social-chat-head h3{margin:0}.social-chat-log{min-height:240px;max-height:480px;overflow:auto;display:flex;flex-direction:column;gap:8px;padding:12px;border:1px solid rgba(255,255,255,.1);border-radius:8px;background:rgba(0,0,0,.18)}.social-msg{align-self:flex-start;max-width:75%;display:flex;flex-direction:column;gap:3px;padding:9px 11px;border-radius:8px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.06)}.social-msg.mine{align-self:flex-end;background:color-mix(in srgb,var(--orange) 11%,rgba(255,255,255,.04));border-color:color-mix(in srgb,var(--orange) 25%,transparent)}.social-chat-send{display:grid;grid-template-columns:1fr auto;gap:8px}.social-chat textarea{min-height:74px;resize:vertical;margin:0}.social-empty{text-align:center;padding:30px;color:var(--text-muted)}
.operation-card{overflow:hidden}.operation-summary{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.operation-summary span{padding:7px 10px;border:1px solid rgba(255,255,255,.1);border-radius:6px;background:rgba(0,0,0,.2);font:600 11px/1.3 'IBM Plex Mono',monospace}
.operation-map{height:560px;max-width:860px;margin:14px auto 18px;border:1px solid rgba(255,255,255,.12);border-radius:10px;background:var(--bg);overflow:hidden;box-shadow:inset 0 0 45px rgba(0,0,0,.35)}.operation-map-svg{width:100%;height:100%;display:block}.operation-sector{cursor:pointer}.operation-sector.operation-locked{cursor:default}.operation-sector-icon{font-size:20px;dominant-baseline:middle;pointer-events:none}.operation-sector-label{fill:#e9f0f3;font:700 8.5px/1 'IBM Plex Mono',monospace;letter-spacing:.01em;pointer-events:none}.operation-sector-state{font-size:8px;pointer-events:none}.operation-secured .exploration-hex-danger-dots{fill:var(--ok)}.operation-engaged .exploration-hex-site{stroke:var(--orange);stroke-width:2.3}.operation-available .exploration-hex-site{stroke-width:1.8}.operation-sector:focus-visible{outline:none}.operation-sector:focus-visible .exploration-hex-site{stroke:var(--orange);stroke-width:3}.operation-detail{border-top:1px solid rgba(255,255,255,.1);padding-top:14px;display:flex;flex-direction:column;gap:8px}.operation-detail .social-actions input{max-width:190px}
@media(max-width:800px){.social-grid{grid-template-columns:1fr}.social-hero{align-items:flex-start}.social-notification{flex-direction:column}.social-chat-send{grid-template-columns:1fr}.cc-multiplayer-panel{padding:10px}.operation-map{height:460px;margin-left:-6px;margin-right:-6px}.operation-sector-label{font-size:8px}}

/* V3 alpha.11 — navigation latérale desktop, première brique cockpit. */
@media (min-width:1101px){.cc-right{flex-direction:row}.v3-desktop-nav{width:184px;flex:0 0 184px;display:flex;flex-direction:column;gap:2px;padding:14px 9px 12px;background:linear-gradient(180deg,#0b1116,#080c10);border-right:1px solid var(--border);overflow-y:auto}.v3-desktop-main{min-width:0;flex:1 1 auto;display:flex;flex-direction:column;overflow:hidden}.v3-nav-title{padding:4px 8px 13px;color:var(--orange);font:700 12px/1 var(--font-display);letter-spacing:.11em;border-bottom:1px solid rgba(255,255,255,.08)}.v3-nav-group{margin:13px 8px 4px;color:#68747d;font:600 9px/1 var(--font-mono2);letter-spacing:.13em}.v3-nav-item{width:100%;min-height:35px;display:flex;align-items:center;gap:9px;padding:7px 9px;border:0;border-left:2px solid transparent;border-radius:0;background:transparent;color:#aab3ba;font:600 11px/1.1 var(--font-display);text-align:left;cursor:pointer}.v3-nav-item:hover{color:var(--text);background:rgba(255,255,255,.035)}.v3-nav-item.active{color:#fff;border-left-color:var(--orange);background:linear-gradient(90deg,rgba(255,138,0,.14),rgba(255,138,0,.02))}.v3-nav-item>span{flex:1}.cc-main-tabs{display:none}}@media(max-width:1100px){.v3-desktop-nav{display:none}.v3-desktop-main{display:contents}}


/* v3.0.0 — indicateur de défilement du Guide Exploration */
.exploration-intro-scroll-hint{position:absolute;left:50%;bottom:10px;z-index:8;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;min-width:84px;padding:5px 11px 3px;border:1px solid rgba(255,138,0,.55);border-radius:999px;background:rgba(9,15,20,.94);color:var(--orange,#ff8a00);box-shadow:0 0 18px rgba(0,0,0,.55),0 0 10px rgba(255,138,0,.08);cursor:pointer;pointer-events:auto}
.exploration-intro-scroll-hint.hidden{display:none!important}
.exploration-intro-scroll-hint-label{font-size:.62rem;font-weight:800;line-height:1;letter-spacing:.07em;text-transform:uppercase}
.exploration-intro-scroll-hint-arrow{display:block;margin-top:-1px;font-size:1.25rem;line-height:.8;animation:exploration-intro-scroll-bounce 1.15s ease-in-out infinite}
@keyframes exploration-intro-scroll-bounce{0%,100%{transform:translateY(-1px);opacity:.65}50%{transform:translateY(4px);opacity:1}}
@media(max-width:700px){.exploration-intro-scroll-hint{bottom:7px;min-width:76px;padding:5px 9px 3px}.exploration-intro-scroll-hint-label{font-size:.58rem}}
@media(prefers-reduced-motion:reduce){.exploration-intro-scroll-hint-arrow{animation:none}}


/* ---- v3.0.0 : Journal ADA ---- */
.ada-log-head{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;margin-bottom:.65rem;padding-bottom:.65rem;border-bottom:1px solid var(--border)}
.ada-log-kicker{display:block;font-size:.62rem;font-weight:800;letter-spacing:.12em;color:var(--orange);margin-bottom:.18rem}.ada-log-head h2{margin:0!important;color:var(--text)!important;font-size:1rem!important}.ada-log-search{width:min(320px,38vw);background:#11151b;border:1px solid var(--border);color:var(--text);padding:.48rem .65rem;border-radius:4px;outline:none}.ada-log-search:focus{border-color:var(--orange)}
.ada-log-filters{display:flex;gap:.35rem;flex-wrap:wrap;margin:0 0 .75rem}.ada-log-filter{background:#151a21;border:1px solid var(--border);color:var(--muted);padding:.35rem .6rem;border-radius:3px;font-size:.7rem;font-weight:700;cursor:pointer}.ada-log-filter:hover{color:var(--text);border-color:rgba(255,145,35,.45)}.ada-log-filter.active{background:rgba(255,145,35,.13);border-color:var(--orange);color:var(--orange)}
.ada-log-empty{padding:1rem;border:1px dashed var(--border);color:var(--muted);font-size:.78rem;text-align:center}.log-message.log-important .log-bubble{border-left:3px solid var(--orange);box-shadow:inset 10px 0 22px rgba(255,145,35,.045)}
.ada-important-toast{position:fixed;z-index:10050;top:92px;right:18px;width:min(390px,calc(100vw - 36px));text-align:left;background:#151a21;border:1px solid var(--orange);border-left:4px solid var(--orange);color:var(--text);padding:.7rem .85rem;box-shadow:0 12px 34px rgba(0,0,0,.45);border-radius:4px;opacity:0;transform:translateY(-10px);transition:opacity .22s ease,transform .22s ease;cursor:pointer}.ada-important-toast.show{opacity:1;transform:translateY(0)}.ada-important-toast-tag{display:block;color:var(--orange);font-size:.62rem;font-weight:900;letter-spacing:.1em;margin-bottom:.3rem}.ada-important-toast-text{display:block;font-size:.8rem;line-height:1.35}.ada-important-toast-hint{display:block;color:var(--muted);font-size:.62rem;margin-top:.35rem;text-align:right}
@media(max-width:700px){.ada-log-head{align-items:stretch;flex-direction:column}.ada-log-search{width:100%}.ada-log-filters{overflow-x:auto;flex-wrap:nowrap;padding-bottom:.2rem}.ada-log-filter{white-space:nowrap}.ada-important-toast{top:74px;right:10px;width:calc(100vw - 20px)}}
@media(prefers-reduced-motion:reduce){.ada-important-toast{transition:none}}

/* v3.0.0 — fusion du panneau pionnier et de la console latérale desktop. */
@media (min-width:1101px){
  #mainPanel-multiplayer.cc-main-panel.active{display:block;flex:0 0 auto;min-height:0;overflow:auto}
  .cc-shell,.cc-shell.compact{grid-template-columns:1fr}
  .cc-left{display:none!important}
  .cc-right{grid-column:1/-1;border-left:0;min-width:0}
  .v3-desktop-nav{width:228px;flex-basis:228px;padding:12px 10px 10px;overflow-y:auto;overflow-x:hidden}
  .v3-nav-heading{display:block;padding:2px 6px 7px;border-bottom:1px solid rgba(255,255,255,.08)}
  .v3-nav-title{padding:0;border:0;white-space:nowrap}
  .v3-nav-actions{display:flex;flex-direction:column;gap:7px;padding:11px 2px 9px}
  .v3-action-btn{--v3-action-tint:var(--orange);position:relative;isolation:isolate;overflow:hidden;width:100%;min-height:46px;padding:0;border:1px solid color-mix(in srgb,var(--v3-action-tint) 78%,#fff 8%);border-left-width:3px;border-radius:5px;background:linear-gradient(180deg,#1b2229,#12181e);color:var(--text);box-shadow:inset 0 0 0 1px rgba(255,255,255,.025),0 4px 10px rgba(0,0,0,.2);cursor:pointer;text-align:left}
  .v3-action-btn:hover:not(:disabled){background:linear-gradient(180deg,#232b33,#151c22);box-shadow:inset 0 0 16px color-mix(in srgb,var(--v3-action-tint) 8%,transparent),0 4px 10px rgba(0,0,0,.25)}
  .v3-action-btn:active:not(:disabled){transform:translateY(1px)}
  .v3-action-btn:disabled{opacity:.45;cursor:not-allowed}
  .v3-action-btn.hidden{display:none!important}
  .v3-action-fill{position:absolute;z-index:-1;inset:0 auto 0 0;width:0;background:linear-gradient(90deg,color-mix(in srgb,var(--v3-action-tint) 32%,transparent),color-mix(in srgb,var(--v3-action-tint) 9%,transparent));transition:width .28s linear}
  .v3-action-content{display:grid;grid-template-columns:25px 1fr auto;align-items:center;gap:7px;min-height:44px;padding:6px 8px}
  .v3-action-content .fc-icon{width:22px;height:22px}
  .v3-action-label{font:700 12px/1 var(--font-display);letter-spacing:.01em}
  .v3-action-dur{color:#aab4bd;font:600 9px/1 var(--font-mono2)}
  .v3-action-progress{display:block;margin:-3px 8px 6px;color:#77838c;font:500 8px/1.2 var(--font-mono2);text-align:center}
  .v3-action-progress.hidden{display:none}
  .v3-auto-explore{display:flex;align-items:center;gap:7px;padding:0 5px 1px;color:#87939d;font:500 9px/1.2 var(--font-display);cursor:pointer}
  .v3-auto-explore.hidden{display:none!important}
  .v3-auto-explore input{appearance:none;-webkit-appearance:none;width:29px;height:16px;flex:0 0 29px;margin:0;border:1px solid #46515b;border-radius:999px;background:#20272e;position:relative;cursor:pointer}
  .v3-auto-explore input::before{content:"";position:absolute;top:1px;left:1px;width:12px;height:12px;border-radius:50%;background:#88939c;transition:transform .16s ease,background .16s ease}
  .v3-auto-explore input:checked{border-color:var(--orange);background:rgba(255,138,0,.18)}
  .v3-auto-explore input:checked::before{transform:translateX(13px);background:var(--orange)}
  .v3-nav-divider{height:1px;margin:0 6px 1px;background:rgba(255,255,255,.08)}
  .v3-nav-group{margin-top:11px}
  .v3-nav-spacer{flex:1;min-height:14px}
  .v3-nav-footer{display:flex;flex-direction:column;align-items:flex-start;gap:7px;margin:9px 5px 0;padding:10px 5px 2px;border-top:1px solid rgba(255,255,255,.08);color:#69757f;font:500 9px/1.3 var(--font-mono2)}
  .v3-nav-version{display:inline-block;padding:4px 7px;border:1px solid rgba(255,255,255,.12);border-radius:999px;color:#aeb7be;background:rgba(255,255,255,.025)}
  .v3-nav-sync-top{display:block!important;visibility:visible!important;opacity:1!important;min-height:15px;width:100%;box-sizing:border-box;margin:5px 0 0;padding:2px 3px;color:#7f8d97;font:600 9px/15px var(--font-mono2),monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative;z-index:2}
  .v3-nav-sync-top[data-sync-state="ok"]{color:var(--ok)}
  .v3-nav-sync-top[data-sync-state="notice"]{color:#ffd166;font-weight:900;background:rgba(255,166,0,.12);border:1px solid rgba(255,166,0,.55);border-radius:6px;padding:2px 3px}
  .v3-nav-sync-top[data-sync-state="alert"]{color:#fff;font-weight:900;background:rgba(218,50,62,.24);border:1px solid #ff4d5e;border-radius:6px;padding:2px 3px;box-shadow:0 0 14px rgba(255,45,65,.3);animation:sync-alert-pulse 1.5s ease-in-out infinite}
  .v3-nav-prestige{width:100%;padding:7px 8px;border:1px solid var(--orange);border-radius:4px;background:var(--orange);color:#111;font:800 10px/1 var(--font-display);cursor:pointer}
  .v3-nav-prestige.hidden{display:none!important}
  .v3-nav-footer a{color:#6f7b85;text-decoration:underline;text-underline-offset:2px}
}

/* v3.0.0 — prototype desktop : rail vertical des ressources à droite. */
@media (min-width:1101px){
  .v3-desktop-main{
    display:grid;
    grid-template-columns:minmax(0,1fr) 214px;
    grid-template-rows:auto auto minmax(0,1fr);
    min-width:0;
    min-height:0;
    overflow:hidden;
  }
  .v3-desktop-main>.cc-header-v2{grid-column:1/-1;grid-row:1;min-width:0}
  .v3-desktop-main>.cc-resource-toggle{
    grid-column:2;
    grid-row:2;
    display:flex;
    position:static;
    z-index:3;
    align-items:center;
    gap:7px;
    width:100%;
    min-height:38px;
    padding:8px 10px;
    border:0;
    border-left:1px solid var(--border);
    border-bottom:1px solid var(--border);
    background:linear-gradient(180deg,#111820,#0d1319);
    color:#9ca8b1;
    font:700 10px/1 var(--font-display);
    text-transform:uppercase;
    letter-spacing:.08em;
    cursor:pointer;
  }
  .v3-desktop-main>.cc-resource-toggle:hover{background:#151d25;color:var(--text)}
  .v3-desktop-main>.cc-resource-toggle .cc-resource-toggle-caret{color:var(--orange);font-size:.9rem;transition:transform .18s ease}
  .v3-desktop-main>.cc-resource-toggle.collapsed .cc-resource-toggle-caret{transform:rotate(-90deg)}
  .v3-desktop-main>.cc-resource-toggle .cc-resource-toggle-count{margin-left:auto;color:var(--orange);font:800 10px/1 var(--font-mono2)}
  .v3-desktop-main>.cc-resource-toggle .cc-resource-toggle-alert{display:none}

  .v3-desktop-main>.cc-resource-bar{
    grid-column:2;
    grid-row:3;
    display:flex;
    flex-direction:column;
    flex-wrap:nowrap;
    align-content:stretch;
    gap:5px;
    min-width:0;
    min-height:0;
    overflow-x:hidden;
    overflow-y:auto;
    scrollbar-width:thin;
    padding:7px;
    border-left:1px solid var(--border);
    border-bottom:0;
    background:linear-gradient(180deg,#0d1319,#090e13);
  }
  .v3-desktop-main>.cc-resource-bar.collapsed{display:none}
  .v3-desktop-main>.cc-resource-bar.collapsed + .cc-body{grid-column:1/-1}

  .v3-desktop-main>.cc-body{
    grid-column:1;
    grid-row:2/4;
    min-width:0;
    min-height:0;
    overflow:hidden;
  }

  .v3-desktop-main>.cc-resource-bar .resource-chip{
    width:100%;
    min-width:0;
    flex:0 0 auto;
    padding:6px 7px;
    border-radius:3px;
    grid-template-columns:10px 22px minmax(0,1fr);
    grid-template-areas:"handle icon main" "handle icon flow";
    column-gap:6px;
    row-gap:2px;
    background-color:#151b21;
  }
  .v3-desktop-main>.cc-resource-bar .chip-drag-handle{padding:0;font-size:10px;opacity:.55}
  .v3-desktop-main>.cc-resource-bar .resource-chip .chip-icon .fc-icon{width:19px;height:19px}
  .v3-desktop-main>.cc-resource-bar .resource-chip .chip-main{
    justify-content:space-between;
    gap:6px;
    min-width:0;
  }
  .v3-desktop-main>.cc-resource-bar .resource-chip .chip-label{
    max-width:92px;
    color:#a0abb4;
    font-size:9px;
    letter-spacing:.025em;
  }
  .v3-desktop-main>.cc-resource-bar .resource-chip strong{
    margin-left:auto;
    color:#f0f3f5;
    font:800 10px/1 var(--font-mono2);
  }
  .v3-desktop-main>.cc-resource-bar .resource-chip .chip-flow{
    justify-content:flex-end;
    min-width:0;
    font:600 8px/1 var(--font-mono2);
  }

  /* Le mode « Grande barre » reste lisible mais adopte lui aussi le rail. */
  .v3-desktop-main>.cc-resource-bar.big{padding:7px;gap:6px}
  .v3-desktop-main>.cc-resource-bar.big .resource-chip{
    min-width:0;
    padding:7px;
    grid-template-columns:10px 22px minmax(0,1fr) auto;
    grid-template-areas:"handle icon label amount" "handle icon flow flow" "handle bar bar bar";
    column-gap:6px;
    row-gap:3px;
  }
  .v3-desktop-main>.cc-resource-bar.big .resource-chip .chip-icon .fc-icon{width:20px;height:20px}
  .v3-desktop-main>.cc-resource-bar.big .resource-chip .chip-label{font-size:9px;max-width:none}
  .v3-desktop-main>.cc-resource-bar.big .resource-chip strong{font-size:10px}
  .v3-desktop-main>.cc-resource-bar.big .resource-chip .chip-flow{margin:0;font-size:8px}
  .v3-desktop-main>.cc-resource-bar.big .resource-chip .flowbar{margin-top:1px;height:3px}
}
@media (min-width:1101px){
  .v3-desktop-main:has(>.cc-resource-bar.collapsed){grid-template-columns:minmax(0,1fr) 44px}
  .v3-desktop-main:has(>.cc-resource-bar.collapsed)>.cc-resource-toggle{justify-content:center;padding:8px 5px}
  .v3-desktop-main:has(>.cc-resource-bar.collapsed)>.cc-resource-toggle .cc-resource-toggle-label,
  .v3-desktop-main:has(>.cc-resource-bar.collapsed)>.cc-resource-toggle .cc-resource-toggle-count{display:none}
}

/* v3.0.0 — Exploration: barre de zoom masquée.
   Les contrôles restent dans le DOM pour conserver les hooks du moteur,
   le zoom molette/pincement et éviter toute régression requireEl(). */
.exploration-toolbar{display:none !important;}

/* v3.0.0 — Journal ADA: les filtres doivent primer sur display:flex historique. */
#eventLog .log-message[hidden]{display:none!important}

/* v3.0.0 — cockpit industriel desktop inspiré des maquettes, sans toucher au moteur. */
@media (min-width:1101px){
  :root{--v3-steel:#10171d;--v3-steel-2:#151e25;--v3-line:#33414c;--v3-orange:#ff8a00;--v3-cyan:#55c9df}
  body{background:#080d11}
  .cc-shell{min-height:100vh;background:radial-gradient(circle at 55% 0,rgba(55,92,105,.08),transparent 42%),#090e12}
  .cc-right{display:grid!important;grid-template-columns:244px minmax(0,1fr)!important;height:100vh;min-height:0;overflow:hidden}
  .v3-desktop-nav{width:auto;flex-basis:auto!important;height:100vh;box-sizing:border-box;background:linear-gradient(180deg,#0e151b 0%,#0a1015 100%);border-right:1px solid #3b4650;box-shadow:inset -10px 0 24px rgba(0,0,0,.25);padding:0 10px 10px!important}
  .v3-nav-brand{display:grid;grid-template-columns:38px 1fr;grid-template-rows:auto auto;gap:0 9px;align-items:center;margin:0 -10px 0;padding:12px 12px 10px;background:linear-gradient(180deg,#17212a,#10171d);border-bottom:2px solid #9a5a13;box-shadow:inset 0 -1px rgba(255,176,58,.18)}
  .v3-brand-mark{grid-row:1/3;display:grid;place-items:center;width:36px;height:36px;border:1px solid var(--v3-orange);background:#172028;color:var(--v3-orange);font:800 18px/1 var(--font-display);clip-path:polygon(15% 0,85% 0,100% 15%,100% 85%,85% 100%,15% 100%,0 85%,0 15%)}
  .v3-brand-copy{display:flex;align-items:baseline;gap:7px;min-width:0}.v3-brand-copy strong{font:800 18px/1 var(--font-display);letter-spacing:.02em}.v3-brand-copy small{color:var(--orange);font:700 8px/1 var(--font-mono2);letter-spacing:.08em;white-space:nowrap}
  .v3-brand-version{grid-column:2;color:#697984;font:500 8px/1 var(--font-mono2);margin-top:2px}
  .v3-nav-heading{margin:0 -2px;padding:9px 5px 8px!important;border-bottom:1px solid rgba(255,255,255,.07)!important}.v3-nav-title{font-size:9px!important;color:#7f919e!important;letter-spacing:.16em!important}
  .v3-nav-actions{padding:10px 0 8px!important;gap:6px!important}.v3-action-btn{min-height:42px!important;border-radius:2px!important;background:linear-gradient(180deg,#192128,#121920)!important}.v3-action-content{min-height:40px!important}.v3-action-btn:hover:not(:disabled){background:#1c252d!important}
  .v3-nav-group{margin:11px 5px 4px!important;color:#647986!important;font:700 8px/1 var(--font-mono2)!important;letter-spacing:.18em!important}
  .v3-nav-item{position:relative;width:100%;min-height:34px;margin:1px 0;padding:7px 9px!important;border:1px solid transparent!important;border-radius:1px!important;background:transparent!important;color:#c1c9cf!important;text-align:left;font:600 11px/1 var(--font-display)!important}
  .v3-nav-item:hover{background:#151d24!important;border-color:#26343e!important}.v3-nav-item.active{background:linear-gradient(90deg,rgba(255,138,0,.17),rgba(255,138,0,.025))!important;border-color:#3a3328!important;color:#fff!important}.v3-nav-item.active:before{content:"";position:absolute;left:-1px;top:-1px;bottom:-1px;width:3px;background:var(--orange)}
  .v3-ada-console{margin:9px 2px;padding:9px 10px 10px;background:linear-gradient(180deg,#111b22,#0d151b);border:1px solid #263b47;border-left:3px solid #21bfd2;box-shadow:inset 0 0 18px rgba(24,158,177,.035)}
  .v3-ada-head{display:flex;align-items:center;gap:6px;color:#38cfe1;font:700 9px/1 var(--font-mono2);letter-spacing:.08em}.v3-ada-led{width:6px;height:6px;border-radius:50%;background:#36d779;box-shadow:0 0 6px rgba(54,215,121,.65)}.v3-ada-console p{margin:7px 0 0;color:#aab6be;font:500 9px/1.35 var(--font-display)}
  .v3-nav-footer{margin-top:4px!important;padding-top:8px!important}.v3-nav-footer .v3-nav-version{display:none!important}
  .v3-desktop-main{height:100vh;grid-template-columns:minmax(0,1fr) 224px!important;grid-template-rows:auto auto minmax(0,1fr)!important;background:#0c1217}
  .cc-header-v2{background:linear-gradient(180deg,#121b22,#0d141a)!important;border-bottom:1px solid #3a4650!important;box-shadow:0 3px 13px rgba(0,0,0,.3)}
  .cc-brand-row{min-height:50px!important;padding:6px 12px!important;border-bottom:1px solid rgba(255,255,255,.06)}.cc-brand{display:flex!important;align-items:center!important;gap:9px!important}.cc-brand-mark{width:32px!important;height:32px!important;border-radius:2px!important}.cc-brand-word{font-size:15px!important}.cc-brand-sub{display:none!important}
  .cc-util-row{gap:4px!important}.cc-util-btn{min-height:30px!important;border-radius:2px!important;background:#111a21!important;border-color:#2b3943!important;font-size:9px!important;padding:6px 9px!important}.cc-util-btn:hover{border-color:#8d571b!important;color:#fff!important}
  .cc-main-tabs{display:none!important}
  .cc-status-strip{grid-column:1!important;grid-row:2!important;display:flex!important;min-height:43px;padding:5px 9px!important;gap:6px!important;background:#10171d!important;border-bottom:1px solid #303c45!important;overflow-x:auto;overflow-y:hidden}.cc-status-ada{display:none!important}.cc-status-chip,.cc-power-panel,.cc-currency-panel,.cc-event-status,.cc-community-event-widget{border-radius:2px!important;background:#151e25!important;border:1px solid #2b3943!important;min-height:30px!important}.cc-status-tier{min-width:180px}.cc-currency-panel{min-width:105px}.cc-power-panel{min-width:180px}
  .v3-desktop-main>.cc-resource-toggle{grid-row:2!important;min-height:43px!important;border-left:1px solid #3a4650!important;border-bottom:1px solid #303c45!important;background:#111920!important;color:#d5dade!important}.v3-desktop-main>.cc-resource-toggle .cc-resource-toggle-label{font-size:10px!important}.v3-desktop-main>.cc-resource-toggle .cc-resource-toggle-caret{font-size:11px!important}
  .v3-desktop-main>.cc-resource-bar{grid-row:3!important;background:#0d141a!important;border-left:1px solid #3a4650!important;padding:5px!important;gap:2px!important}.v3-desktop-main>.cc-resource-bar .resource-chip{border-radius:1px!important;border-color:#26343d!important;border-left-width:2px!important;background:#121a20!important;padding:6px!important}.v3-desktop-main>.cc-resource-bar .resource-chip:hover{background:#172129!important}.v3-desktop-main>.cc-resource-bar .resource-chip .chip-label{font-size:8px!important;text-transform:uppercase}.v3-desktop-main>.cc-resource-bar .resource-chip strong{font-size:10px!important}.v3-desktop-main>.cc-resource-bar .resource-chip .chip-flow{font-size:8px!important}
  .v3-desktop-main>.cc-body{grid-row:3!important;background:radial-gradient(circle at 50% 35%,rgba(42,71,82,.08),transparent 55%),#0b1116!important}.cc-main-panel{padding:12px 14px 18px!important}.cc-main-panel>h2,.cc-dash-heading{margin:0 0 10px!important;padding:0 0 8px;border-bottom:1px solid #2d3942;font-size:18px!important;letter-spacing:.03em}
  #mainPanel-shop{overflow:auto!important}.cc-qty-toggle{position:sticky;top:0;z-index:5;margin:-2px 0 8px!important;padding:6px 0;background:#0b1116}.qty-btn{border-radius:2px!important;background:#141d24!important}.qty-btn.active{background:rgba(255,138,0,.12)!important}
  #shopList{grid-template-columns:repeat(auto-fill,minmax(205px,1fr))!important;gap:7px!important}.shop-category-title{width:100%!important;box-sizing:border-box!important;margin:8px 0 0!important;padding:7px 9px!important;border:0!important;border-left:3px solid var(--orange)!important;border-bottom:1px solid #32404a!important;border-radius:0!important;background:linear-gradient(90deg,rgba(255,138,0,.08),transparent)!important;color:#e8ecef!important;font-size:9px!important}.shop-category-count{margin-left:auto;color:#7b8b96}.shop-row{border-radius:2px!important;border-left-width:2px!important;background:#11181e!important}.shop-row,.shop-row:hover,.shop-row:focus,.shop-row:focus-visible,.shop-row:active{background:#11181e!important}.shop-row:hover{border-color:#475761!important}.shop-row-top{padding:.48rem .52rem .25rem!important}.shop-row-icon{border-radius:2px!important;background:#182128!important}.shop-row-buybar{background:#0e151a!important;padding:.38rem .5rem!important}.shop-row:hover .shop-row-buybar{background:#161b1c!important}.shop-row-price{color:#ffad37!important}.shop-row-flow{padding:0 .52rem .45rem!important}
  #mainPanel-exploration{padding:9px!important;overflow:hidden!important}.exploration-panel-head{margin-bottom:6px!important}.exploration-subnav{border-radius:2px!important}.exploration-workspace{height:calc(100vh - 154px)!important;min-height:480px!important;gap:7px!important}.exploration-viewport{border-radius:2px!important;border-color:#33424c!important;background:#0a1014!important}.exploration-detail{border-radius:2px!important;border-color:#33424c!important;background:#10171d!important;box-shadow:none!important}.exploration-detail:not(.empty){border-top:2px solid var(--orange)!important}
  .factory-workspace,.factory-detail,.factory-scroll{border-radius:2px!important}.factory-detail{background:#10171d!important}
  .cc-log-panel,.cc-mam-panel,.cc-factory-panel,.social-card,.operation-card{border-radius:2px!important}
}
@media (min-width:1500px){.cc-right{grid-template-columns:252px minmax(0,1fr)!important}.v3-desktop-main{grid-template-columns:minmax(0,1fr) 236px!important}#shopList{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))!important}}

/* v3.0.0 — sélecteur industriel des familles de machines.
   Les huit familles restent annoncées ; une famille encore hors progression
   est visible mais désactivée, sans révéler ni débloquer ses machines. */
.v3-shop-category-bar{
  display:flex;
  flex:0 0 auto;
  align-items:stretch;
  gap:4px;
  min-width:0;
  padding:5px;
  overflow-x:auto;
  overflow-y:hidden;
  scrollbar-width:none;
  overscroll-behavior-x:contain;
  background:#0d1419;
  border:1px solid #2c3943;
  box-shadow:0 5px 16px rgba(0,0,0,.24);
}
.v3-shop-category-bar::-webkit-scrollbar{display:none}
.v3-shop-category-button{
  position:relative;
  flex:1 0 92px;
  min-height:48px;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:6px;
  padding:6px 8px;
  border:1px solid #303e48;
  border-radius:1px;
  background:linear-gradient(180deg,#172129,#11181e);
  color:#aeb8bf;
  font:700 9px/1.1 var(--font-display);
  text-transform:uppercase;
  letter-spacing:.035em;
  white-space:nowrap;
  cursor:pointer;
}
.v3-shop-category-button .fc-icon{width:20px;height:20px;flex:0 0 20px;opacity:.9}
.v3-shop-category-button:hover:not(:disabled){border-color:#745225;color:#fff;background:#1a242c}
.v3-shop-category-button.active{border-color:#87571e;color:#fff;background:linear-gradient(180deg,#202a31,#151c22);box-shadow:inset 0 -3px var(--orange)}
.v3-shop-category-button:disabled{opacity:.34;cursor:not-allowed;filter:saturate(.35)}
.shop-category-title{scroll-margin-top:64px}

/* Une notification ADA masquée par opacity restait au-dessus de l'interface
   et pouvait bloquer les commandes placées dessous après un défilement. */
.ada-important-toast{pointer-events:none}
.ada-important-toast.show{pointer-events:auto}

@media (min-width:1101px){
  .v3-shop-category-bar{position:sticky;top:45px;z-index:5;margin:0 0 8px}
  /* alpha.40 : le scroll déclenché par un bouton de catégorie doit réserver
     la barre Acheter (45 px), le sélecteur (~60 px) et un espace de lecture.
     L'ancien décalage de 64 px plaçait le titre et la première carte dessous. */
  .shop-category-title{scroll-margin-top:124px}
}

@media (max-width:700px){
  .v3-shop-category-bar{
    position:sticky;
    top:calc(var(--mobile-controls-height) + 80px);
    z-index:160;
    width:calc(100% + 1rem);
    margin:0 -.5rem 8px;
    padding:4px 5px;
    border-left:0;
    border-right:0;
    background:rgba(13,20,25,.985);
  }
  .v3-shop-category-button{flex-basis:86px;min-height:44px;flex-direction:column;gap:3px;padding:4px 6px;font-size:8px}
  .v3-shop-category-button .fc-icon{width:18px;height:18px;flex-basis:18px}
  .shop-category-title{scroll-margin-top:calc(var(--mobile-controls-height) + 134px)}
}

/* v3.0.0 — HUD desktop : header industriel segmenté inspiré de la maquette. */
@media (min-width:1101px){
  .cc-header-v2{
    position:relative;
    min-width:0;
    background:#0b1116!important;
    border-bottom:0!important;
    box-shadow:0 5px 18px rgba(0,0,0,.38)!important;
  }
  .cc-header-v2:after{
    content:"";
    position:absolute;
    left:0;right:0;bottom:-1px;height:2px;
    background:linear-gradient(90deg,#6f4216 0,#e48417 16%,#574022 42%,#273640 68%,#995814 100%);
    opacity:.75;
    pointer-events:none;
  }
  .cc-brand-row{
    display:grid!important;
    grid-template-columns:minmax(270px,320px) minmax(180px,1fr) auto;
    align-items:stretch!important;
    gap:7px!important;
    min-height:64px!important;
    padding:6px 8px!important;
    border-bottom:1px solid #35424c!important;
    background:linear-gradient(180deg,#111920 0%,#0c1319 100%)!important;
  }
  .cc-brand{
    position:relative;
    display:grid!important;
    grid-template-columns:50px 1fr!important;
    grid-template-rows:1fr auto!important;
    align-items:center!important;
    gap:0 11px!important;
    min-width:0;
    padding:7px 13px 7px 10px!important;
    border:1px solid #34424d;
    border-top-color:#6d4a25;
    background:linear-gradient(135deg,#172129 0%,#101820 65%,#0d141a 100%);
    clip-path:polygon(0 0,calc(100% - 10px) 0,100% 10px,100% 100%,0 100%);
    box-shadow:inset 0 1px rgba(255,255,255,.035),inset 4px 0 #9d5a13;
  }
  .cc-brand:after{
    content:"FPSim  //  v3.0.0";
    grid-column:2;
    align-self:start;
    margin-top:-4px;
    color:#6e7f8b;
    font:600 8px/1 var(--font-mono2);
    letter-spacing:.08em;
  }
  .cc-brand-mark{
    grid-row:1/3;
    width:46px!important;height:46px!important;
    display:grid!important;place-items:center!important;
    margin:0!important;
    border:1px solid #e0851b!important;
    border-radius:0!important;
    background:radial-gradient(circle at 50% 35%,#23313b,#111820 68%)!important;
    color:#ff9a21!important;
    font:900 23px/1 var(--font-display)!important;
    clip-path:polygon(18% 0,82% 0,100% 18%,100% 82%,82% 100%,18% 100%,0 82%,0 18%);
    box-shadow:inset 0 0 0 2px #10171d,inset 0 0 0 3px rgba(255,138,0,.25),0 0 14px rgba(255,138,0,.08);
  }
  .cc-brand-word{
    align-self:end;
    min-width:0;
    color:#f4f6f7!important;
    font:900 19px/1 var(--font-display)!important;
    letter-spacing:.045em!important;
    text-shadow:0 1px 0 #000;
  }
  .cc-brand-word span{color:#ff8a00!important}
  .cc-brand-sub{display:none!important}

  .v3-header-band{
    position:relative;
    min-width:0;
    overflow:hidden;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:14px;
    padding:8px 16px 8px 18px;
    border:1px solid #2f414b;
    border-top-color:#415965;
    background:
      linear-gradient(90deg,rgba(8,15,20,.96),rgba(18,40,46,.74) 46%,rgba(14,31,36,.88)),
      repeating-linear-gradient(120deg,transparent 0 28px,rgba(76,151,160,.05) 29px 30px),
      #101b20;
    clip-path:polygon(8px 0,100% 0,100% calc(100% - 8px),calc(100% - 8px) 100%,0 100%,0 8px);
    box-shadow:inset 0 1px rgba(255,255,255,.035),inset 0 -18px 35px rgba(0,0,0,.16);
  }
  .v3-header-band:before{
    content:"";
    position:absolute;inset:0;
    background:
      radial-gradient(ellipse at 72% 120%,rgba(64,126,119,.18),transparent 38%),
      linear-gradient(165deg,transparent 47%,rgba(76,116,119,.10) 48% 50%,transparent 51%);
    pointer-events:none;
  }
  .v3-header-band-grid{
    position:absolute;left:0;right:0;bottom:0;height:22px;
    opacity:.18;
    background-image:linear-gradient(rgba(85,150,158,.22) 1px,transparent 1px),linear-gradient(90deg,rgba(85,150,158,.18) 1px,transparent 1px);
    background-size:22px 8px,22px 8px;
    transform:perspective(80px) rotateX(56deg) scale(1.15);
    transform-origin:bottom;
  }
  .v3-header-band-copy{position:relative;z-index:1;display:flex;flex-direction:column;gap:3px;min-width:0}
  .v3-header-band-copy small{color:#718d98;font:700 8px/1 var(--font-mono2);letter-spacing:.17em;white-space:nowrap}
  .v3-header-band-copy strong{color:#bccbd1;font:800 12px/1 var(--font-display);letter-spacing:.10em;white-space:nowrap}
  /* v3.0.0 — le titre de l'Ascenseur réutilise la ligne existante du header. */
  .v3-header-title-tiers,.v3-header-title-objective{display:none;color:#ff9a21}
  body[data-v3-panel="tiers"] .v3-header-title-default{display:none}
  body[data-v3-panel="tiers"] .v3-header-title-tiers{display:inline}
  body[data-v3-panel="objective"] .v3-header-title-default{display:none}
  body[data-v3-panel="objective"] .v3-header-title-objective{display:inline}
  .v3-header-band-state{position:relative;z-index:1;display:flex;align-items:center;gap:6px;white-space:nowrap;color:#7fa896;font:700 8px/1 var(--font-mono2);letter-spacing:.10em}
  .v3-header-band-state i{width:6px;height:6px;border-radius:50%;background:#49d87d;box-shadow:0 0 8px rgba(73,216,125,.7)}
  .v3-header-band-state.legacy{color:#ffae5c}
  .v3-header-band-state.legacy i{background:#ff9a21;box-shadow:0 0 8px rgba(255,154,33,.75)}

  .cc-util-row{
    display:grid!important;
    grid-template-columns:repeat(4,minmax(66px,auto));
    align-items:stretch!important;
    gap:4px!important;
    flex-wrap:nowrap!important;
  }
  .cc-util-row>.cc-util-btn,.cc-util-row>.cc-more-wrap>.cc-util-btn{
    position:relative;
    min-width:66px;
    min-height:50px!important;
    display:flex!important;
    flex-direction:column;
    align-items:center;
    justify-content:flex-end;
    gap:4px;
    padding:23px 8px 7px!important;
    border:1px solid #34434e!important;
    border-top-color:#705027!important;
    border-radius:0!important;
    background:linear-gradient(180deg,#182129,#10171d)!important;
    color:#c8d0d5!important;
    font:700 8px/1 var(--font-display)!important;
    text-transform:uppercase;
    letter-spacing:.055em;
    clip-path:polygon(6px 0,100% 0,100% calc(100% - 6px),calc(100% - 6px) 100%,0 100%,0 6px);
    box-shadow:inset 0 1px rgba(255,255,255,.03)!important;
  }
  .cc-util-row>.cc-util-btn:before,.cc-util-row>.cc-more-wrap>.cc-util-btn:before{
    position:absolute;top:6px;left:50%;transform:translateX(-50%);
    color:#e8a24c;
    font:900 14px/1 var(--font-display);
    opacity:.95;
  }
  #openChangelogBtn:before{content:"▤"}
  #openAccountBtn:before{content:"●"}
  #joinDiscordBtn:before{content:"◆"}
  #ccMoreToggle:before{content:"⚙"}
  .cc-util-row>.cc-util-btn:hover,.cc-util-row>.cc-more-wrap>.cc-util-btn:hover{
    border-color:#8b5a24!important;
    background:linear-gradient(180deg,#202b33,#141c22)!important;
    color:#fff!important;
  }
  .cc-more-wrap{display:block!important;position:relative!important}
  .cc-more-wrap>.cc-util-btn{width:100%}
  .cc-more-panel{right:0!important;top:calc(100% + 5px)!important;z-index:90}

  .cc-status-strip{
    position:relative;
    grid-column:1!important;grid-row:2!important;
    display:grid!important;
    grid-template-columns:minmax(210px,1.05fr) minmax(210px,1fr) minmax(150px,.7fr) minmax(180px,1fr) auto;
    align-items:stretch!important;
    min-height:58px!important;
    padding:5px 7px!important;
    gap:5px!important;
    overflow-x:auto;overflow-y:hidden;
    background:linear-gradient(180deg,#0f171d,#0b1217)!important;
    border-bottom:1px solid #35434d!important;
  }
  .cc-status-strip>*{min-width:0}
  .cc-status-ada{display:none!important}
  .cc-status-chip,.cc-power-panel,.cc-currency-panel,.cc-event-status,.cc-community-event-widget{
    position:relative!important;
    box-sizing:border-box!important;
    min-height:48px!important;
    margin:0!important;
    padding:18px 10px 6px!important;
    border:1px solid #34434d!important;
    border-top-color:#725026!important;
    border-radius:0!important;
    background:linear-gradient(180deg,#172128,#11181e)!important;
    clip-path:polygon(5px 0,100% 0,100% calc(100% - 5px),calc(100% - 5px) 100%,0 100%,0 5px);
    box-shadow:inset 0 1px rgba(255,255,255,.025)!important;
  }
  .cc-status-chip:before,.cc-power-panel:before,.cc-currency-panel:before,.cc-event-status:before,.cc-community-event-widget:before{
    position:absolute;top:6px;left:9px;
    color:#6f8592;
    font:700 7px/1 var(--font-mono2);
    letter-spacing:.15em;
    text-transform:uppercase;
  }
  .cc-status-tier:before{content:"PALIER // PROGRESSION"}
  .cc-power-panel:before{content:"RÉSEAU ÉLECTRIQUE"}
  .cc-currency-panel:before{content:"COUPONS AWESOME"}
  .cc-event-status:before{content:"DIRECTIVE ADA"}
  .cc-community-event-widget:before{content:"ÉVÉNEMENT COMMUNAUTAIRE"}
  :lang(en) .cc-status-tier:before{content:"TIER // PROGRESS"}
  :lang(en) .cc-power-panel:before{content:"POWER GRID"}
  :lang(en) .cc-currency-panel:before{content:"AWESOME COUPONS"}
  :lang(en) .cc-event-status:before{content:"ADA DIRECTIVE"}
  :lang(en) .cc-community-event-widget:before{content:"COMMUNITY EVENT"}
  .cc-status-tier{min-width:210px!important;display:grid!important;grid-template-columns:auto 1fr;align-items:center;gap:9px!important}
  .cc-tier-mini{color:#f5f6f7!important;font:900 13px/1 var(--font-display)!important;white-space:nowrap}
  .cc-tier-mini-bar{height:8px!important;border:1px solid #503a21!important;background:#080d11!important;box-shadow:inset 0 0 5px #000}
  .cc-tier-mini-fill{height:100%!important;background:linear-gradient(90deg,#d96b00,#ff9a18)!important;box-shadow:0 0 7px rgba(255,138,0,.24)}
  .cc-power-panel{min-width:210px!important;display:flex!important;align-items:center!important;justify-content:flex-start!important;gap:9px!important}
  .cc-power-panel .power-gauge-svg{width:31px!important;height:31px!important}
  .cc-power-panel .power-gauge-value{color:#ecf1f3!important;font-size:12px!important}
  .cc-power-panel .power-gauge-sub{font-size:8px!important;color:#7d909b!important}
  .cc-currency-panel{min-width:150px!important;display:flex!important;align-items:center!important;gap:9px!important}
  .cc-currency-panel .cc-currency-icon .fc-icon{width:24px!important;height:24px!important}
  .cc-currency-panel strong{color:#ffb13d!important;font:900 15px/1 var(--font-mono2)!important}
  .cc-event-status{display:flex!important;align-items:center!important;min-width:180px!important;color:#bfcbd1!important;font-size:9px!important}
  .cc-event-status.hidden{display:none!important}
  .cc-community-event-widget{min-width:210px!important;align-items:center!important}

  .v3-desktop-main>.cc-resource-toggle{
    grid-row:2!important;
    min-height:58px!important;
    padding:18px 10px 7px!important;
    position:relative!important;
    border-left:1px solid #3a4650!important;
    border-bottom:1px solid #35434d!important;
    background:linear-gradient(180deg,#172128,#10171d)!important;
    clip-path:none!important;
  }
  .v3-desktop-main>.cc-resource-toggle:before{
    content:attr(data-stock-label);
    position:absolute;top:7px;left:10px;
    color:#6f8592;
    font:700 7px/1 var(--font-mono2);
    letter-spacing:.15em;
  }
  .v3-desktop-main>.cc-resource-toggle .cc-resource-toggle-caret{color:#ff9a1e!important}
  .v3-desktop-main>.cc-resource-toggle .cc-resource-toggle-label{font-size:11px!important;color:#e7ecef!important}
  .v3-desktop-main>.cc-resource-toggle .cc-resource-toggle-count{color:#ffad33!important;font-size:10px!important}
}

@media (min-width:1101px) and (max-width:1360px){
  .cc-brand-row{grid-template-columns:270px minmax(100px,1fr) auto!important}
  .v3-header-band-copy strong{font-size:10px}.v3-header-band-copy small{font-size:7px}.v3-header-band-state{display:none}
  .cc-util-row{grid-template-columns:repeat(4,58px)!important}.cc-util-row>.cc-util-btn,.cc-util-row>.cc-more-wrap>.cc-util-btn{min-width:58px!important;padding-left:4px!important;padding-right:4px!important;font-size:7px!important}
  .cc-status-strip{grid-template-columns:minmax(185px,1fr) minmax(185px,1fr) 130px minmax(160px,1fr) auto!important}
}


/* v3.0.0 — header desktop : identité unique dans la Console FICSIT. */
@media (min-width:1101px){
  .cc-brand-row{grid-template-columns:minmax(360px,1fr) auto!important;}
  .v3-header-band{grid-column:1;}
  .cc-util-row{grid-column:2;}
}
@media (min-width:1101px) and (max-width:1360px){
  .cc-brand-row{grid-template-columns:minmax(260px,1fr) auto!important;}
}

/* v3.0.0 — véhicule en exploration : activité visible sur la carte. */
.exploration-expedition-indicator{pointer-events:none}
.exploration-expedition-orbit{fill:none;vector-effect:non-scaling-stroke;stroke-linecap:round}
.exploration-expedition-orbit-outer{stroke:var(--orange);stroke-width:3;stroke-dasharray:9 6;filter:drop-shadow(0 0 4px rgba(255,139,24,.72));animation:explorationExpeditionOrbit 1.15s linear infinite}
.exploration-expedition-orbit-inner{stroke:var(--cyan);stroke-width:1.5;stroke-dasharray:3 8;opacity:.9;animation:explorationExpeditionOrbitReverse 1.7s linear infinite}
.exploration-expedition-pulse{fill:var(--orange);opacity:.88;filter:drop-shadow(0 0 5px rgba(255,139,24,.9));animation:explorationExpeditionPulse 1.15s ease-in-out infinite}
.exploration-expedition-active .exploration-hex-site{filter:drop-shadow(0 0 4px rgba(255,139,24,.34))}
.exploration-expedition-count circle{fill:#111a20;stroke:var(--orange);stroke-width:2;vector-effect:non-scaling-stroke}
.exploration-expedition-count text{fill:#fff;font:700 10px/1 var(--font-mono2);paint-order:stroke;stroke:#111a20;stroke-width:2px}
@keyframes explorationExpeditionOrbit{to{stroke-dashoffset:-30}}
@keyframes explorationExpeditionOrbitReverse{to{stroke-dashoffset:33}}
@keyframes explorationExpeditionPulse{0%,100%{r:3;opacity:.45}50%{r:5;opacity:1}}
@media (prefers-reduced-motion:reduce){.exploration-expedition-orbit,.exploration-expedition-pulse{animation:none!important}.exploration-expedition-orbit-outer{stroke-dasharray:9 6}.exploration-expedition-orbit-inner{opacity:.55}}

/* ========================================================================== 
 * v3.0.0 — EXPLORATION COOP : CONSOLE EXPÉDITIONNAIRE
 * ========================================================================== */
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
#explorationView-coop{min-width:0;overflow:auto}
.coop-shell{
  --coop-bg:#0b1217;--coop-panel:#101920;--coop-panel-2:#0d151b;--coop-line:#30414c;
  --coop-muted:#77909e;--coop-cyan:#58c9df;--coop-orange:#ff8a00;--coop-green:#48d783;--coop-red:#ff6969;
  display:flex;flex-direction:column;gap:14px;min-width:0;color:#dce4e9;
  font-family:var(--font-display);background-image:linear-gradient(rgba(79,111,126,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(79,111,126,.035) 1px,transparent 1px);background-size:32px 32px;
}
.coop-shell button,.coop-shell input{font:inherit}
.coop-command-deck[hidden]{display:none!important}
.coop-hero{position:relative;display:flex;align-items:stretch;justify-content:space-between;gap:24px;min-height:126px;padding:26px 24px 22px;border:1px solid var(--coop-line);border-left:4px solid var(--coop-orange);background:linear-gradient(105deg,#111b22 0%,#101820 70%,#151b18 100%);overflow:hidden;clip-path:polygon(0 0,calc(100% - 15px) 0,100% 15px,100% 100%,0 100%)}
.coop-hero:after{content:"";position:absolute;right:9%;top:-35px;width:240px;height:220px;background:repeating-linear-gradient(115deg,rgba(255,138,0,.12) 0 13px,transparent 13px 28px);transform:skewX(-8deg);pointer-events:none}
.coop-hero-copy{position:relative;z-index:1;max-width:680px}.coop-hero .exploration-kicker{display:block;margin-bottom:8px;color:var(--coop-cyan);font:700 10px/1 var(--font-mono2);letter-spacing:.18em}.coop-hero h3{margin:0;color:#fff;font:800 clamp(22px,2.3vw,34px)/1 var(--font-display);letter-spacing:.035em}.coop-hero p{max-width:670px;margin:9px 0 0;color:#aebdc6;font-size:13px;line-height:1.45}
.coop-specs{position:relative;z-index:1;display:grid;grid-template-columns:repeat(3,minmax(82px,1fr));align-self:center;min-width:278px;border:1px solid #41515b;background:rgba(7,12,16,.72)}.coop-specs>div{display:flex;flex-direction:column;justify-content:center;min-height:66px;padding:9px 12px;border-left:1px solid #35444e}.coop-specs>div:first-child{border-left:0}.coop-specs strong{color:#ffad39;font:800 20px/1 var(--font-mono2)}.coop-specs small{margin-top:6px;color:#7f929e;font:700 7px/1 var(--font-mono2);letter-spacing:.16em}
.coop-command-deck{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.coop-command-card{position:relative;display:grid;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;gap:14px;min-height:105px;padding:16px;border:1px solid var(--coop-line);background:linear-gradient(180deg,var(--coop-panel),var(--coop-panel-2));box-shadow:inset 0 1px rgba(255,255,255,.025)}.coop-command-card:before{content:"";position:absolute;left:-1px;top:-1px;bottom:-1px;width:3px;background:#334852}.coop-command-number{align-self:stretch;display:grid;place-items:center;border-right:1px solid #2a3943;color:#526b78;font:800 17px/1 var(--font-mono2)}.coop-eyebrow{display:block;margin-bottom:5px;color:var(--coop-cyan);font:700 7px/1 var(--font-mono2);letter-spacing:.16em}.coop-command-card h4{margin:0;color:#eef3f5;font-size:14px}.coop-command-card p{margin:5px 0 0;color:#83949f;font-size:10px;line-height:1.4}.coop-command-card button{min-height:42px;padding:9px 16px;border:1px solid #47616e;border-radius:0;background:#142129;color:#dce8ed;font-weight:800;cursor:pointer}.coop-command-card button:hover{border-color:#e2871c;color:#fff}.coop-command-card button b{margin-left:10px;color:var(--coop-orange);font-size:18px}.coop-command-card .coop-primary{border-color:#c66d0c;background:linear-gradient(180deg,#ff9016,#d96500);color:#101417;box-shadow:inset 0 1px rgba(255,255,255,.25)}.coop-command-card .coop-primary b{color:#101417}.coop-join{display:flex;min-width:250px}.coop-join input{width:128px;min-height:42px;box-sizing:border-box;padding:8px 10px;border:1px solid #41535f;border-right:0;border-radius:0;outline:0;background:#081016;color:#fff;font:800 14px/1 var(--font-mono2);letter-spacing:.08em;text-transform:uppercase}.coop-join input:focus{border-color:var(--coop-cyan);box-shadow:inset 3px 0 var(--coop-cyan)}.coop-network-status{display:none;margin:0;padding:9px 12px;border:1px solid #815d2d;background:#20180e;color:#ffc26b;font:700 10px/1.3 var(--font-mono2)}.coop-network-status:not(:empty){display:block}.coop-network-status.error{border-color:#8a3f42;background:#251214;color:#ff9c9c}
.coop-expedition-host{min-width:0}.coop-empty-panel{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,.65fr);gap:12px;border:1px solid var(--coop-line);background:var(--coop-bg)}.coop-empty-message{display:flex;align-items:center;gap:18px;padding:24px}.coop-empty-mark{display:grid;place-items:center;flex:0 0 66px;height:66px;border:1px solid #345364;background:#0b171e;color:var(--coop-cyan);font:800 30px/1 var(--font-mono2);clip-path:polygon(12px 0,100% 0,100% calc(100% - 12px),calc(100% - 12px) 100%,0 100%,0 12px)}.coop-empty-message h4{margin:0 0 5px;color:#fff;font-size:16px}.coop-empty-message p{margin:0;color:#82949f;font-size:11px;line-height:1.5}.coop-process{counter-reset:coopstep;display:grid;grid-template-columns:repeat(2,1fr);margin:0;padding:0;list-style:none;border-left:1px solid var(--coop-line)}.coop-process li{counter-increment:coopstep;display:flex;align-items:center;gap:10px;min-height:62px;padding:10px 12px;border:0 solid #293842;border-width:0 0 1px 1px;color:#9cadb6;font-size:9px;text-transform:uppercase}.coop-process li:before{content:"0" counter(coopstep);color:var(--coop-orange);font:800 12px/1 var(--font-mono2)}
.coop-expedition-card{border:1px solid var(--coop-line);background:rgba(8,15,19,.97)}.coop-operation-head{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:15px 16px;border-bottom:1px solid var(--coop-line);background:linear-gradient(90deg,#101a21,#0d151a)}.coop-operation-head small,.coop-section-label{display:block;color:#66818f;font:700 7px/1 var(--font-mono2);letter-spacing:.17em;text-transform:uppercase}.coop-code-block{display:flex;align-items:center;gap:10px;margin-top:7px}.coop-code-block strong{color:#fff;font:800 23px/1 var(--font-mono2);letter-spacing:.09em}.coop-copy-btn{min-height:30px!important;padding:6px 10px!important;border:1px solid #45606e!important;border-radius:0!important;background:#111c23!important;color:#9fc4d3!important;font:700 8px/1 var(--font-mono2)!important;text-transform:uppercase;cursor:pointer}.coop-state-group{display:flex;align-items:center;gap:8px}.coop-badge{display:inline-flex;align-items:center;min-height:28px;padding:0 12px;border:1px solid #3f5967;color:var(--coop-cyan);font:800 8px/1 var(--font-mono2);letter-spacing:.08em;text-transform:uppercase}.coop-badge.danger{border-color:#783a3e;background:#271215;color:#ff777b}.coop-badge.running{border-color:#977025;color:#ffc65d}.coop-badge.completed{border-color:#2c8156;color:#65e59e}
.coop-gauges{display:grid;grid-template-columns:repeat(3,1fr);border-bottom:1px solid var(--coop-line)}.coop-gauge{padding:14px 16px;border-left:1px solid #27363f}.coop-gauge:first-child{border-left:0}.coop-gauge-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:9px}.coop-gauge-name{display:flex;align-items:center;gap:8px;color:#7e96a3;font:700 8px/1 var(--font-mono2);letter-spacing:.12em;text-transform:uppercase}.coop-gauge-name img{width:16px;height:16px}.coop-gauge-value{color:#eaf0f3;font:800 10px/1 var(--font-mono2)}.coop-gauge-track{height:5px;border:1px solid #3e505a;background:#071015;overflow:hidden}.coop-gauge-track i{display:block;height:100%;background:repeating-linear-gradient(120deg,#39b7ca 0 8px,#25879a 8px 14px);transition:width .25s}.coop-gauge.ready .coop-gauge-track i{background:var(--coop-green)}
.coop-deadline{padding:9px 15px;border-bottom:1px solid var(--coop-line);text-align:center;color:#96a7b0;font:700 8px/1 var(--font-mono2);letter-spacing:.06em}.coop-deadline b{color:#ffb13d}.coop-deadline .coop-led{display:inline-block;width:6px;height:6px;margin-right:7px;border-radius:50%;background:#ff9b1a;box-shadow:0 0 7px rgba(255,155,26,.75)}
.coop-roster{padding:13px 14px;border-bottom:1px solid var(--coop-line)}.coop-section-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.coop-section-heading b{font:800 10px/1 var(--font-mono2)}.coop-members{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px}.coop-member-card{position:relative;min-height:84px;padding:12px;border:1px solid #30404a;background:#0c151a}.coop-member-card.you{border-color:#81561f;box-shadow:inset 3px 0 var(--coop-orange)}.coop-member-card.empty{border-style:dashed;opacity:.38}.coop-member-index{position:absolute;right:9px;top:9px;color:#40535e;font:800 14px/1 var(--font-mono2)}.coop-member-card strong{display:block;max-width:calc(100% - 20px);overflow:hidden;color:#e7edf0;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.coop-member-card small{display:block;margin-top:5px;color:#68818f;font:700 7px/1 var(--font-mono2);text-transform:uppercase}.coop-member-load{display:flex;gap:12px;margin-top:12px;padding-top:9px;border-top:1px solid #26353e;color:#869aa5;font:700 8px/1 var(--font-mono2)}.coop-member-load span{display:flex;align-items:center;gap:4px}.coop-member-load img{width:13px;height:13px}
.coop-preparation-grid{display:grid;grid-template-columns:minmax(0,1.8fr) minmax(310px,.8fr)}.coop-contribution-panel{padding:15px;border-right:1px solid var(--coop-line)}.coop-panel-intro{margin:6px 0 13px;color:#7f929e;font-size:9px;line-height:1.4}.coop-available-line{display:flex;justify-content:flex-end;gap:13px;margin:-25px 0 12px;color:#8096a2;font:700 8px/1 var(--font-mono2)}.coop-available-line span{display:flex;align-items:center;gap:4px}.coop-available-line img{width:14px;height:14px}.coop-contribution-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr)) minmax(280px,1.2fr);gap:8px}.coop-resource-field,.coop-vehicle-field{padding:10px;border:1px solid #31444f;background:#0c151a}.coop-resource-field label,.coop-vehicle-field legend{display:flex;align-items:center;gap:7px;margin:0 0 9px;padding:0;color:#d7e0e5;font-size:9px;font-weight:800}.coop-resource-field label img{width:15px;height:15px}.coop-resource-field small{margin-left:auto;color:#68818f;font:700 7px/1 var(--font-mono2)}.coop-input-row{display:grid;grid-template-columns:minmax(0,1fr) auto}.coop-input-row input{min-width:0;height:38px;box-sizing:border-box;padding:8px;border:1px solid #3b505c;border-radius:0;outline:0;background:#071015;color:#fff;font:800 11px/1 var(--font-mono2)}.coop-input-row input:focus{border-color:var(--coop-cyan)}.coop-fill-btn{min-height:38px!important;padding:7px 10px!important;border:1px solid #45606e!important;border-left:0!important;border-radius:0!important;background:#13232b!important;color:#9fd2df!important;font:700 7px/1 var(--font-mono2)!important;text-transform:uppercase}.coop-remaining{display:block;margin-top:7px;color:#6f8591;font:600 7px/1 var(--font-mono2)}.coop-vehicle-field{min-width:0;border:1px solid #31444f}.coop-vehicle-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px}.coop-vehicle-choice{position:relative;display:flex;align-items:center;gap:9px;min-height:42px;padding:7px 9px;border:1px solid #304550;background:#101b21;cursor:pointer}.coop-vehicle-choice:has(input:checked){border-color:#b86c17;background:#1d1a13;box-shadow:inset 0 -2px var(--coop-orange)}.coop-vehicle-choice.unavailable{opacity:.35;cursor:not-allowed}.coop-vehicle-choice input{position:absolute;opacity:0}.coop-vehicle-choice img{width:26px;height:26px}.coop-vehicle-choice strong{display:block;font-size:9px}.coop-vehicle-choice small{display:block;margin-top:3px;color:#6f8590;font:600 7px/1 var(--font-mono2)}.coop-vehicle-count{margin-left:auto;color:#9ab0bc;font:800 9px/1 var(--font-mono2)}.coop-submit{width:100%;min-height:44px;margin-top:9px;border:1px solid #d9780d;border-radius:0;background:linear-gradient(180deg,#f68b13,#d96800);color:#15191c;font-weight:900;letter-spacing:.03em;cursor:pointer}.coop-submit:disabled,.coop-action:disabled{opacity:.35;cursor:not-allowed}
.coop-launch-panel{padding:15px}.coop-launch-state{display:inline-block;margin-top:8px;padding:6px 8px;border:1px solid #775725;color:#ffba49;font:700 7px/1 var(--font-mono2);text-transform:uppercase}.coop-launch-state.ready{border-color:#27764f;color:#57e298}.coop-checklist{display:grid;gap:0;margin-top:9px;border:1px solid #31434d}.coop-check{display:grid;grid-template-columns:20px 1fr auto;align-items:center;gap:7px;min-height:37px;padding:6px 8px;border-top:1px solid #2b3a43;color:#8497a2;font-size:8px}.coop-check:first-child{border-top:0}.coop-check i{display:grid;place-items:center;width:14px;height:14px;border:1px solid #47606d;color:transparent;font-style:normal}.coop-check.ok{color:#b8c8d0}.coop-check.ok i{border-color:#2e9763;background:#174a33;color:#6cf0a8}.coop-check b{color:#66808e;font:700 7px/1 var(--font-mono2)}.coop-reward-box{margin-top:9px;padding:12px;border:1px solid #6f5729;background:#171710}.coop-reward-box span{display:flex;align-items:center;gap:6px;color:#a18c5e;font:700 7px/1 var(--font-mono2);letter-spacing:.1em;text-transform:uppercase}.coop-reward-box img{width:16px;height:16px}.coop-reward-box strong{display:block;margin-top:7px;color:#ffad33;font-size:14px}.coop-reward-box small{display:block;margin-top:4px;color:#756f5c;font-size:7px}.coop-action{width:100%;min-height:42px;margin-top:8px;border:1px solid #40545f;border-radius:0;background:#132029;color:#d6e1e6;font-weight:800;cursor:pointer}.coop-action.danger{border-color:#69373a;background:#211315;color:#e9989b}.coop-action.primary{border-color:#c97413;background:#df7207;color:#15191c}
.coop-running,.coop-completed{display:grid;grid-template-columns:minmax(240px,.7fr) minmax(0,1.3fr);min-height:300px}.coop-mission-visual{display:grid;place-items:center;padding:24px;border-right:1px solid var(--coop-line);background:radial-gradient(circle,rgba(48,152,177,.16),transparent 56%)}.coop-radar{position:relative;display:grid;place-items:center;width:190px;aspect-ratio:1;border:1px solid #315563;border-radius:50%;background:repeating-radial-gradient(circle,transparent 0 28px,rgba(69,143,161,.18) 29px 30px),linear-gradient(90deg,transparent 49.7%,#21434e 50%,transparent 50.3%),linear-gradient(transparent 49.7%,#21434e 50%,transparent 50.3%)}.coop-radar:before{content:"";position:absolute;width:48%;height:48%;right:50%;bottom:50%;background:linear-gradient(20deg,rgba(74,205,228,.45),transparent 65%);transform-origin:100% 100%;animation:coopRadar 3s linear infinite}.coop-radar img{width:48px;height:48px;filter:drop-shadow(0 0 10px rgba(76,209,233,.45))}@keyframes coopRadar{to{transform:rotate(360deg)}}.coop-mission-copy{padding:28px}.coop-mission-copy h4{margin:6px 0 9px;color:#fff;font-size:21px}.coop-mission-copy p{color:#8fa1ab;font-size:11px;line-height:1.5}.coop-countdown{margin:18px 0;padding:13px;border:1px solid #3b5360;background:#0b161c;color:#65d4e9;font:800 24px/1 var(--font-mono2);letter-spacing:.08em}.coop-completed .coop-radar{border-radius:0;border-color:#86712d;background:#17170f}.coop-completed .coop-radar:before{display:none}.coop-completed .coop-radar img{filter:drop-shadow(0 0 10px rgba(255,180,45,.45))}
@media(max-width:1100px){.coop-hero{min-height:auto}.coop-command-card{grid-template-columns:30px minmax(0,1fr)}.coop-command-card>button,.coop-command-card>.coop-join{grid-column:2}.coop-members{grid-template-columns:repeat(3,minmax(0,1fr))}.coop-preparation-grid{grid-template-columns:1fr}.coop-contribution-panel{border-right:0;border-bottom:1px solid var(--coop-line)}.coop-contribution-fields{grid-template-columns:repeat(2,minmax(0,1fr))}.coop-vehicle-field{grid-column:1/-1}}
@media(max-width:700px){#explorationView-coop{margin:0 -.5rem;padding:0 .15rem .75rem}.coop-shell{gap:9px}.coop-hero{display:block;padding:16px 12px 14px;border-left-width:3px;clip-path:none}.coop-hero:after{right:-120px;opacity:.65}.coop-hero h3{font-size:19px}.coop-hero p{font-size:10px}.coop-specs{width:100%;min-width:0;margin-top:13px}.coop-specs>div{min-height:50px;padding:7px 9px}.coop-specs strong{font-size:16px}.coop-command-deck{grid-template-columns:1fr}.coop-command-card{grid-template-columns:28px minmax(0,1fr);min-height:0;padding:12px;gap:10px}.coop-command-card p{font-size:9px}.coop-command-card>button,.coop-command-card>.coop-join{grid-column:1/-1}.coop-command-card button{min-height:44px}.coop-join{min-width:0}.coop-join input{width:100%;flex:1;min-width:0}.coop-empty-panel{grid-template-columns:1fr}.coop-empty-message{padding:17px 13px}.coop-empty-mark{flex-basis:48px;height:48px;font-size:22px}.coop-process{border:0}.coop-operation-head{align-items:flex-start;padding:12px}.coop-code-block strong{font-size:19px}.coop-state-group{flex-direction:column;align-items:flex-end;gap:4px}.coop-badge{min-height:24px;padding:0 8px;font-size:7px}.coop-gauges{grid-template-columns:1fr}.coop-gauge{padding:11px 10px;border-left:0;border-top:1px solid #27363f}.coop-gauge:first-child{border-top:0}.coop-roster{padding:11px 10px}.coop-members{grid-template-columns:1fr}.coop-member-card{min-height:62px}.coop-preparation-grid{grid-template-columns:1fr}.coop-contribution-panel,.coop-launch-panel{padding:11px 10px}.coop-available-line{margin:8px 0}.coop-contribution-fields{grid-template-columns:1fr}.coop-vehicle-field{grid-column:auto}.coop-submit,.coop-action{min-height:46px}.coop-running,.coop-completed{grid-template-columns:1fr}.coop-mission-visual{padding:18px;border-right:0;border-bottom:1px solid var(--coop-line)}.coop-radar{width:150px}.coop-mission-copy{padding:18px 13px}.coop-countdown{font-size:20px}}
@media(max-width:390px){.coop-process{grid-template-columns:1fr}.coop-code-block{gap:6px}.coop-code-block strong{font-size:17px}.coop-copy-btn{padding:5px 7px!important}.coop-vehicle-options{grid-template-columns:1fr}}

/* v3.0.0 — correction du mode flex du panneau Paliers actif. */
.tiers-page{
  flex-direction:column;
  height:100%;
  padding:0!important;
  overflow:hidden;
  min-height:0;
  background:
    radial-gradient(circle at 82% 8%,rgba(242,139,25,.10),transparent 28%),
    linear-gradient(rgba(62,93,105,.055) 1px,transparent 1px),
    linear-gradient(90deg,rgba(62,93,105,.055) 1px,transparent 1px),
    #0a1116;
  background-size:auto,28px 28px,28px 28px,auto;
}
.tiers-page.active{display:flex}
.tiers-page-shell{width:100%;height:100%;min-height:0;box-sizing:border-box;padding:14px;display:flex;flex:1 1 auto;flex-direction:column;gap:12px;overflow-x:hidden;overflow-y:auto}
.tiers-page-hero{
  position:relative;
  display:grid;
  grid-template-columns:minmax(310px,1fr) auto;
  gap:16px;
  padding:18px 20px;
  overflow:hidden;
  border:1px solid #34444e;
  border-left:3px solid #f28b19;
  background:linear-gradient(105deg,rgba(20,31,38,.98),rgba(12,22,28,.96) 60%,rgba(34,27,18,.94));
  clip-path:polygon(0 0,calc(100% - 12px) 0,100% 12px,100% 100%,12px 100%,0 calc(100% - 12px));
}
.tiers-page-hero,.tiers-page-progress,.tiers-page-layout{flex:none}
.tiers-page-hero:before{
  content:"";position:absolute;right:-34px;top:-65px;width:290px;height:180px;opacity:.13;transform:rotate(-13deg);
  background:repeating-linear-gradient(90deg,#f28b19 0 14px,transparent 14px 28px);
  pointer-events:none;
}
.tiers-page-heading{position:relative;z-index:1;min-width:0}
.tiers-page-kicker{display:block;color:#f28b19;font:800 9px/1.2 var(--font-mono2);letter-spacing:.16em;text-transform:uppercase}
.tiers-page-heading h2{margin:8px 0 6px;color:#f2f4f5;font:900 25px/1 var(--font-display);letter-spacing:.045em;text-transform:uppercase}
.tiers-page-heading p{max-width:70ch;margin:0;color:#9dabb3;font-size:12px;line-height:1.5}
.tiers-page-summary{position:relative;z-index:1;display:grid;grid-template-columns:repeat(3,minmax(132px,1fr));border:1px solid #3b4952;background:rgba(7,12,16,.72)}
.tiers-summary-cell{min-width:0;padding:10px 12px;border-left:1px solid #33414a}
.tiers-summary-cell:first-child{border-left:0}
.tiers-summary-cell span{display:block;color:#71838e;font:700 7px/1.2 var(--font-mono2);letter-spacing:.13em;white-space:nowrap}
.tiers-summary-cell strong{display:block;margin-top:6px;color:#e7ecee;font:900 13px/1.2 var(--font-display);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tiers-summary-current strong,.tiers-summary-cell:last-child strong{color:#ff9b22}
.tiers-page-progress{display:grid;grid-template-columns:auto minmax(180px,1fr);align-items:center;gap:18px;padding:10px 14px;border:1px solid #2d3c45;background:#0c1419}
.tiers-page-progress-copy{display:flex;align-items:center;gap:14px;color:#80909a;font:700 8px/1 var(--font-mono2);letter-spacing:.1em;white-space:nowrap}
.tiers-page-progress-copy strong{color:#f1f3f4;font-size:13px;letter-spacing:0}
.tiers-page-progress-track{height:10px;overflow:hidden;border:1px solid #3d4950;background:#070c0f;box-shadow:inset 0 0 7px rgba(0,0,0,.85)}
.tiers-page-progress-track span{display:block;height:100%;width:0;background:repeating-linear-gradient(135deg,#de720b 0 10px,#f39a26 10px 20px);box-shadow:0 0 12px rgba(242,139,25,.25);transition:width .3s ease}
.tiers-page-layout{display:grid;flex:0 0 auto;min-height:0;grid-template-columns:minmax(0,1fr) minmax(270px,320px);gap:12px;align-items:start}
.tiers-roadmap-panel,.tiers-infinite-panel{min-width:0;border:1px solid #2e3d46;background:linear-gradient(180deg,rgba(15,23,29,.98),rgba(9,15,19,.98));box-shadow:inset 0 1px rgba(255,255,255,.025)}
.tiers-roadmap-panel{padding:14px}
.tiers-section-head{display:flex;align-items:end;justify-content:space-between;gap:14px;margin-bottom:12px;padding:0 2px 10px;border-bottom:1px solid #2b3941}
.tiers-section-head span:first-child{display:block;color:#718590;font:700 8px/1 var(--font-mono2);letter-spacing:.13em}
.tiers-section-head h3{margin:5px 0 0;color:#e3e8ea;font:800 15px/1 var(--font-display);letter-spacing:.04em;text-transform:uppercase}
.tiers-section-code{color:#586872!important;font:700 8px/1 var(--font-mono2)!important;letter-spacing:.1em!important;white-space:nowrap}
.tiers-roadmap{position:relative;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
.tier-row.tier-page-card{
  position:relative;
  display:grid;
  grid-template-columns:48px minmax(0,1fr);
  gap:0;
  min-height:238px;
  margin:0;
  padding:0;
  overflow:hidden;
  opacity:1;
  border:1px solid #303e46;
  border-radius:0;
  background:#0b1318;
  clip-path:polygon(0 0,calc(100% - 8px) 0,100% 8px,100% 100%,8px 100%,0 calc(100% - 8px));
  transition:border-color .2s,background .2s,opacity .2s;
}
.tier-card-rail{position:relative;display:flex;flex-direction:column;align-items:center;padding:13px 0;background:linear-gradient(90deg,#111a1f,#18242b);border-right:1px solid #34434b}
.tier-card-rail:after{content:"";position:absolute;top:49px;bottom:0;width:2px;background:repeating-linear-gradient(180deg,#4c5a62 0 5px,transparent 5px 10px);opacity:.55}
.tier-card-node{position:relative;z-index:1;width:18px;height:18px;border:3px solid #172127;outline:1px solid #66747b;border-radius:50%;background:#3a464d;box-shadow:0 0 0 3px #0b1115}
.tier-index{position:relative;z-index:1;margin-top:12px;color:#71818b;font:900 12px/1 var(--font-mono2);letter-spacing:.08em}
.tier-card-body{min-width:0;display:flex;flex-direction:column;padding:12px}
.tier-card-head{display:flex;align-items:start;justify-content:space-between;gap:10px;padding-bottom:9px;border-bottom:1px solid #25333b}
.tier-state-label{display:block;color:#657680;font:800 7px/1 var(--font-mono2);letter-spacing:.14em}
.tier-label{display:block;margin:5px 0 0;color:#d8dfe2;font:800 13px/1.25 var(--font-display)}
.tier-status{flex:0 0 32px;width:32px;height:32px;display:grid;place-items:center;border:1px solid #394850;background:#10191e}
.tier-status .tier-icon{width:19px;height:19px;opacity:.68}
.tier-card-unlocks{flex:1;padding:10px 0}
.tier-unlocks-label{display:block;margin-bottom:7px;color:#687a85;font:700 7px/1 var(--font-mono2);letter-spacing:.14em}
.tier-unlock-list{display:flex;flex-wrap:wrap;gap:5px}
.tier-unlock-chip{min-width:0;display:inline-flex;align-items:center;gap:5px;padding:4px 6px;border:1px solid #2d3a42;background:#10191e;color:#aab5bb;font-size:8px;line-height:1.2}
.tier-unlock-chip span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px}
.tier-unlock-icon{width:15px;height:15px;flex:0 0 15px;opacity:.82}
.tier-card-footer{display:flex;flex-direction:column;align-items:stretch;gap:8px;padding-top:9px;border-top:1px solid #25333b}
.tier-cost-block span{display:block;color:#657680;font:700 6px/1 var(--font-mono2);letter-spacing:.12em}
.tier-cost-block strong{display:block;margin-top:5px;color:#cbd2d6;font:800 10px/1 var(--font-mono2);white-space:nowrap}
.tier-purchase-zone{min-width:0;display:flex;flex-direction:column;align-items:stretch;gap:6px}
.tier-card-progress{grid-column:1/-1;height:5px;overflow:hidden;border:1px solid #2f3b42;background:#070c0f}
.tier-card-progress span{display:block;height:100%;width:0;background:#53656e;transition:width .3s ease}
.tier-progress{min-width:0;color:#75858e;font:700 7px/1.25 var(--font-mono2);text-align:left;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tier-page-card .validate-tier-btn,.tiers-infinite-panel .validate-tier-btn{width:100%;min-width:0;min-height:32px;border:1px solid #e8871b;border-radius:0;padding:7px 9px;background:linear-gradient(180deg,#d9700c,#a94c00);color:#fff;font:800 8px/1 var(--font-display);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap}
.tier-page-card .validate-tier-btn:disabled,.tiers-infinite-panel .validate-tier-btn:disabled{border-color:#39464e;background:#172027;color:#66757e;cursor:not-allowed}
.tier-page-card.unlocked{border-color:#294b39;background:linear-gradient(110deg,rgba(18,61,39,.26),#0b1318 48%)}
.tier-page-card.unlocked .tier-card-node{outline-color:#55af6d;background:#4bc774}.tier-page-card.unlocked .tier-index,.tier-page-card.unlocked .tier-state-label{color:#69c981}
.tier-page-card.unlocked .tier-card-progress span{background:linear-gradient(90deg,#297646,#55c978)}
.tier-page-card.current{border-color:#5c805f;box-shadow:inset 3px 0 #55c978}
.tier-page-card.current .tier-label{color:#e9f6ec}
.tier-page-card.next{border-color:#3a5965;background:linear-gradient(110deg,rgba(27,79,96,.18),#0b1318 48%)}
.tier-page-card.next .tier-card-node{outline-color:#5992a7;background:#37758a}.tier-page-card.next .tier-index,.tier-page-card.next .tier-state-label{color:#6db6cf}
.tier-page-card.next .tier-card-progress span{background:linear-gradient(90deg,#327288,#55c7dc)}
.tier-page-card.ready{border-color:#d87814;background:linear-gradient(110deg,rgba(125,65,8,.27),#0c1418 52%);box-shadow:inset 3px 0 #f28b19,0 0 16px rgba(242,139,25,.06)}
.tier-page-card.ready .tier-card-node{outline-color:#f28b19;background:#f28b19;box-shadow:0 0 0 3px #0b1115,0 0 12px rgba(242,139,25,.45)}
.tier-page-card.ready .tier-index,.tier-page-card.ready .tier-state-label,.tier-page-card.ready .tier-cost-block strong{color:#ff9a22}
.tier-page-card.ready .tier-card-progress span{background:linear-gradient(90deg,#d66908,#ff9c25)}
.tier-page-card.locked{opacity:.48}.tier-page-card.locked .tier-unlock-icon{filter:grayscale(1)}
.tiers-infinite-panel{position:sticky;top:12px;padding:18px;overflow:hidden}
.tiers-infinite-panel:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 50% 18%,rgba(50,151,184,.13),transparent 29%);pointer-events:none}
.tiers-infinite-panel>*{position:relative;z-index:1}
.tiers-infinite-emblem{position:relative;width:126px;height:126px;margin:0 auto 18px;display:grid;place-items:center;border:1px solid #40525c;border-radius:50%;background:radial-gradient(circle,#182a33 0,#0a141a 63%,#070d11 65%);box-shadow:inset 0 0 0 8px #101a20,0 0 24px rgba(49,150,183,.10)}
.tiers-infinite-emblem:before,.tiers-infinite-emblem:after{content:"";position:absolute;inset:13px;border:1px dashed #c9761b;border-radius:50%;animation:tier-infinite-spin 18s linear infinite}.tiers-infinite-emblem:after{inset:26px;border-color:#355d6b;animation-direction:reverse;animation-duration:11s}
.tiers-infinite-emblem span{color:#f29a2f;font:900 45px/1 var(--font-display);text-shadow:0 0 15px rgba(242,139,25,.26)}
.tiers-infinite-emblem i{position:absolute;width:6px;height:6px;border-radius:50%;background:#f28b19;box-shadow:0 0 8px #f28b19}.tiers-infinite-emblem i:nth-of-type(1){top:9px}.tiers-infinite-emblem i:nth-of-type(2){right:12px;bottom:25px}.tiers-infinite-emblem i:nth-of-type(3){left:12px;bottom:25px}
.tiers-infinite-panel>h3{margin:7px 0 8px;color:#e6ecef;font:900 19px/1 var(--font-display);text-transform:uppercase;letter-spacing:.04em}
.tiers-infinite-panel>p{margin:0 0 16px;color:#8b9ca5;font-size:11px;line-height:1.5}
.tier-infinite-status,.infinite-tier-row{margin:0!important;padding:12px!important;border:1px solid #34434c!important;border-radius:0!important;background:#0b1318!important;opacity:1!important}
.tier-infinite-status-tag{display:block;margin-bottom:8px;color:#6f8792;font:800 7px/1 var(--font-mono2);letter-spacing:.14em}
.tier-infinite-status p{margin:0;color:#82939c;font-size:10px;line-height:1.5}
.tier-infinite-lock-track{height:6px;margin-top:12px;border:1px solid #34414a;background:#070b0e;overflow:hidden}.tier-infinite-lock-track span{display:block;height:100%;background:linear-gradient(90deg,#315f6d,#e08319)}
.infinite-tier-row{display:grid!important;grid-template-columns:1fr!important;gap:12px!important;border-color:#916020!important}
.infinite-tier-row .tier-infinite-status-tag{margin:0;color:#f19a2c}
.tier-infinite-level{display:grid;gap:5px}.tier-infinite-level strong{color:#f1f4f5;font:900 16px/1.2 var(--font-display)}.tier-infinite-level span{color:#72d28b;font-size:10px;line-height:1.4}
.tiers-infinite-panel #infiniteTierBtn{width:100%;min-height:42px}
@keyframes tier-infinite-spin{to{transform:rotate(360deg)}}
@media (max-width:1350px) and (min-width:1101px){.tiers-roadmap{grid-template-columns:1fr}.tiers-page-summary{grid-template-columns:repeat(3,minmax(112px,1fr))}.tiers-page-layout{grid-template-columns:minmax(0,1fr) 280px}}
@media (max-width:1100px){
  .tiers-page{padding-bottom:0!important}
  .tiers-page-shell{padding:8px 8px 72px;gap:8px}
  .tiers-page-hero{grid-template-columns:1fr;padding:14px;gap:12px}
  .tiers-page-heading h2{font-size:21px}
  .tiers-page-summary{grid-template-columns:repeat(3,minmax(0,1fr))}
  .tiers-summary-cell{padding:9px 7px}.tiers-summary-cell span{font-size:6px;white-space:normal}.tiers-summary-cell strong{font-size:10px}
  .tiers-page-progress{grid-template-columns:1fr;gap:8px;padding:9px 10px}.tiers-page-progress-copy{justify-content:space-between}
  .tiers-page-layout{grid-template-columns:1fr;gap:8px}
  .tiers-roadmap-panel{padding:9px}
  .tiers-infinite-panel{position:relative;top:auto}
}
@media (max-width:650px){
  .tiers-roadmap{grid-template-columns:1fr}
  .tier-row.tier-page-card{min-height:224px;grid-template-columns:42px minmax(0,1fr)}
  .tier-card-body{padding:10px}
  .tier-page-card .validate-tier-btn{min-height:36px}
  .tiers-section-code{display:none}
  .tiers-infinite-emblem{width:104px;height:104px}.tiers-infinite-emblem span{font-size:37px}
}
@media (prefers-reduced-motion:reduce){.tiers-infinite-emblem:before,.tiers-infinite-emblem:after{animation:none}}

/* ==========================================================================
 * v3.0.0 — ASCENSEUR ORBITAL : PAGE PRINCIPALE
 * ========================================================================== */
.assembly-page{padding:0!important;overflow:auto;min-height:0;background:
  radial-gradient(circle at 47% 32%,rgba(31,116,150,.16),transparent 34%),
  linear-gradient(180deg,#0a1117 0%,#0b1015 100%)}
.assembly-panel-title{font:700 10px/1.25 ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:.14em;color:#f28b19}
.assembly-head-phase{min-width:250px;border:1px solid #34444d;border-left:3px solid #f28b19;background:#0b1217;padding:10px 14px;clip-path:polygon(0 0,100% 0,100% calc(100% - 8px),calc(100% - 8px) 100%,0 100%)}
.assembly-head-phase span{display:block;color:#71828c;font:700 9px ui-monospace,monospace;letter-spacing:.14em}
.assembly-head-phase strong{display:block;margin-top:4px;color:#f1f3f4;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.assembly-page-grid{display:grid;grid-template-columns:minmax(270px,320px) minmax(360px,1fr) minmax(300px,360px);gap:12px;width:100%;box-sizing:border-box;flex:1;padding:14px;min-height:680px}
.assembly-current-panel,.assembly-phases-panel{border:1px solid #2b3942;background:linear-gradient(180deg,rgba(15,23,29,.98),rgba(10,16,21,.98));box-shadow:inset 0 1px rgba(255,255,255,.025);padding:15px;min-width:0}
.assembly-current-panel h3{margin:10px 0 7px;font-size:21px;line-height:1.2;text-transform:uppercase;color:#f1f1ec}
.assembly-current-panel>p{min-height:42px;color:#b2bac0;font-size:12px;line-height:1.55}
.assembly-reward-line{margin:12px 0 14px;padding:8px 10px;border-left:2px solid #f28b19;background:#111b21;color:#d6a55e;font-size:12px}
.assembly-estimate-line{margin:-6px 0 14px;padding:8px 10px;border-left:2px solid #54c7d9;background:#0c171d;color:#a7dce5;font-size:12px;font-weight:600}
.alternate-comparison{display:grid;gap:3px;margin:7px 0;color:#a7dce5;font-size:11px}
.exploration-launch-comparison{color:#a7dce5;font-size:11px}
.assembly-overall-block{margin:16px 0 20px;padding:12px;border:1px solid #263740;background:#080e12}
.assembly-overall-label{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;color:#84939d;font:700 9px ui-monospace,monospace;letter-spacing:.1em}
.assembly-overall-label strong{color:#e8edf0;font-size:17px;letter-spacing:0}
.assembly-overall-track{height:9px;background:#10171b;border:1px solid #344149;overflow:hidden}
.assembly-overall-track>div{height:100%;width:0;background:linear-gradient(90deg,#d66e0a,#ff9c24);box-shadow:0 0 12px rgba(242,139,25,.28);transition:width .35s ease}
.assembly-requirements-title{margin:18px 0 8px}
.assembly-page-requirements{display:grid;gap:8px}
.assembly-page-requirements .assembly-req{padding:10px;border:1px solid #293841;background:#0d151a}
.assembly-page-requirements .assembly-req-label{display:flex;align-items:center;justify-content:space-between;gap:8px;color:#d8dde0;font-size:12px;font-weight:700}
.assembly-page-requirements .assembly-req-label>span:first-child{display:flex;align-items:center;gap:8px;min-width:0}
.assembly-page-requirements .req-icon{width:24px;height:24px;filter:drop-shadow(0 0 5px rgba(242,139,25,.18))}
.assembly-page-requirements .progress-wrap{height:7px;margin-top:8px;background:#090d10;border:1px solid #25343c;overflow:hidden}
.assembly-page-requirements .progress-bar{height:100%;background:linear-gradient(90deg,#cf6808,#f69a24)}
.assembly-deliver-btn{width:100%;margin-top:14px;min-height:44px;border:1px solid #ff9a1c!important;background:linear-gradient(180deg,#e57a0c,#b95500)!important;color:#fff!important;font-weight:800!important;text-transform:uppercase;letter-spacing:.035em;box-shadow:inset 0 1px rgba(255,255,255,.17),0 0 18px rgba(255,130,14,.08)}
.assembly-visual-panel{position:relative;overflow:hidden;min-height:630px;border:1px solid #2a3d48;background:radial-gradient(circle at 50% 38%,rgba(24,105,151,.24),transparent 31%),linear-gradient(180deg,#07131d 0%,#09141c 58%,#0f202a 100%)}
.assembly-space-grid{position:absolute;inset:0;opacity:.16;background-image:linear-gradient(rgba(73,128,151,.18) 1px,transparent 1px),linear-gradient(90deg,rgba(73,128,151,.18) 1px,transparent 1px);background-size:32px 32px;transform:perspective(500px) rotateX(62deg) scale(1.4);transform-origin:50% 100%}
.assembly-visual-panel:before,.assembly-visual-panel:after{content:"";position:absolute;border-radius:50%;background:#b8c5ca;opacity:.22;box-shadow:54px 84px 0 -5px #657780,-78px 150px 0 -2px #8fa2aa,121px 232px 0 -6px #a6b4ba,-134px 310px 0 -5px #778c95}
.assembly-visual-panel:before{width:13px;height:13px;left:16%;top:18%}.assembly-visual-panel:after{width:9px;height:9px;right:14%;top:26%;box-shadow:-83px 109px 0 1px #788d97,55px 176px 0 -1px #96a6ad,-120px 276px 0 0 #607680}
.assembly-orbit{position:absolute;left:50%;top:42%;border:1px solid rgba(66,168,212,.24);border-radius:50%;transform:translate(-50%,-50%) rotate(-14deg);pointer-events:none}
.assembly-orbit-a{width:83%;height:25%}.assembly-orbit-b{width:65%;height:18%;transform:translate(-50%,-50%) rotate(18deg);border-color:rgba(242,139,25,.16)}
.assembly-elevator{position:absolute;left:50%;top:48%;width:235px;height:490px;transform:translate(-50%,-50%);filter:drop-shadow(0 0 18px rgba(1,8,12,.65))}
.assembly-elevator-spine{position:absolute;left:50%;top:64px;bottom:76px;width:50px;transform:translateX(-50%);background:linear-gradient(90deg,#202d34 0,#52616a 11%,#182329 24%,#0b1013 48%,#52616a 66%,#1a252b 83%,#10181c 100%);border:1px solid #66747b;box-shadow:inset 0 0 0 4px #121b20,0 0 0 2px #111}
.assembly-elevator-spine:before,.assembly-elevator-spine:after{content:"";position:absolute;top:0;bottom:0;width:5px;background:repeating-linear-gradient(180deg,#f18a18 0 5px,#42260d 5px 13px);opacity:.9}.assembly-elevator-spine:before{left:8px}.assembly-elevator-spine:after{right:8px}
.assembly-elevator-spine span{position:absolute;left:-15px;right:-15px;height:5px;background:#33434b;border-top:1px solid #69777d}.assembly-elevator-spine span:nth-child(1){top:12%}.assembly-elevator-spine span:nth-child(2){top:31%}.assembly-elevator-spine span:nth-child(3){top:50%}.assembly-elevator-spine span:nth-child(4){top:69%}.assembly-elevator-spine span:nth-child(5){top:88%}
.assembly-elevator-ring{position:absolute;left:50%;width:225px;height:62px;transform:translateX(-50%);border:12px solid #29363c;border-top-color:#5c686d;border-bottom-color:#111a1e;border-radius:50%;box-shadow:0 0 0 2px #0d1113,inset 0 0 0 2px #121719,0 0 22px rgba(241,131,15,.11)}
.assembly-elevator-ring:after{content:"";position:absolute;inset:-7px 15px;border:2px dashed rgba(255,145,24,.76);border-radius:50%;animation:assembly-ring-spin 14s linear infinite}
.assembly-elevator-ring-top{top:48px}.assembly-elevator-ring-mid{top:245px;width:185px;height:52px}
.assembly-elevator-crown,.assembly-elevator-base{position:absolute;left:50%;transform:translateX(-50%);width:116px;height:58px;background:linear-gradient(180deg,#526067,#151f24);border:2px solid #64737a;clip-path:polygon(14% 0,86% 0,100% 62%,83% 100%,17% 100%,0 62%)}
.assembly-elevator-crown{top:0}.assembly-elevator-base{bottom:27px;width:142px;height:72px}
.assembly-elevator-crown i,.assembly-elevator-base i{position:absolute;width:8px;height:8px;border-radius:2px;background:#ff9119;box-shadow:0 0 8px #ff8b0b}.assembly-elevator-crown i:nth-child(1),.assembly-elevator-base i:nth-child(1){left:22%;top:46%}.assembly-elevator-crown i:nth-child(2),.assembly-elevator-base i:nth-child(2){left:48%;top:28%}.assembly-elevator-crown i:nth-child(3),.assembly-elevator-base i:nth-child(3){right:22%;top:51%}
.assembly-planet{position:absolute;left:-12%;right:-12%;bottom:-230px;height:390px;border-radius:50% 50% 0 0;background:radial-gradient(ellipse at 50% 0,#235b72 0,#164156 25%,#0b2534 52%,#07131b 75%);box-shadow:0 -6px 30px rgba(66,174,217,.24)}
.assembly-visual-caption{position:absolute;left:18px;right:18px;bottom:17px;display:flex;justify-content:space-between;align-items:end;gap:12px;padding:9px 11px;border-left:2px solid #f28b19;background:rgba(5,10,13,.75);backdrop-filter:blur(3px)}
.assembly-visual-caption strong{font:800 11px ui-monospace,monospace;letter-spacing:.1em;color:#eceff0}.assembly-visual-caption span{font:700 8px ui-monospace,monospace;letter-spacing:.08em;color:#73909f}
@keyframes assembly-ring-spin{to{transform:rotate(360deg)}}
.assembly-phases-panel{overflow:auto}
.assembly-phase-list{display:grid;gap:7px;margin-top:10px}
.assembly-phase-card{display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:62px;padding:8px 9px;border:1px solid #27363f;background:#0c1318;transition:border-color .2s,background .2s,opacity .2s}
.assembly-phase-num{display:grid;place-items:center;width:34px;height:34px;border:1px solid #53616a;border-radius:50%;color:#adb7bc;font:800 14px ui-monospace,monospace;background:#11191e}
.assembly-phase-card strong{display:block;color:#dce1e3;font-size:11px;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.assembly-phase-card small{display:flex;align-items:center;gap:5px;margin-top:5px;color:#77868f;font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.assembly-phase-card small img{width:17px;height:17px;object-fit:contain}
.assembly-phase-state{font:800 8px ui-monospace,monospace;letter-spacing:.07em;color:#65747d;text-align:right}
.assembly-phase-card.is-complete{border-color:#294b39;background:linear-gradient(90deg,rgba(20,71,44,.34),#0c1417)}.assembly-phase-card.is-complete .assembly-phase-num{border-color:#4d9c64;color:#77d68d}.assembly-phase-card.is-complete .assembly-phase-state{color:#66cf7e}
.assembly-phase-card.is-active{border-color:#d97814;background:linear-gradient(90deg,rgba(123,63,5,.32),#111619);box-shadow:inset 3px 0 #f28b19}.assembly-phase-card.is-active .assembly-phase-num{border-color:#f28b19;color:#ff9a22}.assembly-phase-card.is-active .assembly-phase-state{color:#f28b19}
.assembly-phase-card.is-locked{opacity:.58}.assembly-phase-infinite{border-style:dashed}
@media (max-width:1450px) and (min-width:1101px){.assembly-page-grid{grid-template-columns:minmax(250px,300px) minmax(300px,1fr) minmax(270px,320px)}.assembly-elevator{transform:translate(-50%,-50%) scale(.9)}}
@media (max-width:1100px){.assembly-head-phase{width:100%;min-width:0}.assembly-page-grid{grid-template-columns:1fr;padding:8px;min-height:0}.assembly-current-panel{order:1}.assembly-visual-panel{order:2;min-height:470px}.assembly-phases-panel{order:3}.assembly-elevator{transform:translate(-50%,-50%) scale(.76)}.assembly-page{padding-bottom:72px!important}}
@media (prefers-reduced-motion:reduce){.assembly-elevator-ring:after{animation:none}}

/* v3.0.0 — rail de ressources desktop plus lisible.
   L'ancien signal de bilan avait été neutralisé par le border-color forcé
   de la refonte industrielle. Une pastille explicite complète désormais la
   bordure et les valeurs gagnent en taille sans modifier le tiroir mobile. */
@media (min-width:1101px){
  .v3-desktop-main{grid-template-columns:minmax(0,1fr) 268px!important}
  .v3-desktop-main:has(>.cc-resource-bar.collapsed){grid-template-columns:minmax(0,1fr) 44px!important}
  .v3-desktop-main>.cc-resource-bar{padding:7px!important;gap:4px!important}
  .v3-desktop-main>.cc-resource-bar .resource-chip{
    min-height:43px;
    box-sizing:border-box;
    padding:8px 9px!important;
    border-left-width:3px!important;
    grid-template-columns:10px 8px 24px minmax(0,1fr);
    grid-template-areas:"handle status icon main" "handle status icon flow";
    column-gap:7px;
    row-gap:4px;
  }
  .v3-desktop-main>.cc-resource-bar .resource-chip.net-pos{border-left-color:var(--ok)!important}
  .v3-desktop-main>.cc-resource-bar .resource-chip.net-neg{border-left-color:var(--danger)!important}
  .v3-desktop-main>.cc-resource-bar .chip-status{
    grid-area:status;
    display:block;
    width:8px;
    height:8px;
    align-self:center;
    border-radius:50%;
    background:#63717a;
    box-shadow:0 0 0 1px rgba(255,255,255,.09);
  }
  .v3-desktop-main>.cc-resource-bar .chip-status.pos{background:var(--ok);box-shadow:0 0 7px rgba(51,214,118,.55)}
  .v3-desktop-main>.cc-resource-bar .chip-status.neg{background:var(--danger);box-shadow:0 0 7px rgba(255,84,84,.55)}
  .v3-desktop-main>.cc-resource-bar .resource-chip .chip-icon .fc-icon{width:22px!important;height:22px!important}
  .v3-desktop-main>.cc-resource-bar .resource-chip .chip-main{gap:9px}
  .v3-desktop-main>.cc-resource-bar .resource-chip .chip-label{
    max-width:132px;
    color:#b7c0c6!important;
    font-size:10px!important;
    letter-spacing:.03em;
  }
  .v3-desktop-main>.cc-resource-bar .resource-chip strong{
    flex:0 0 auto;
    color:#f5f7f8!important;
    font-size:12px!important;
    white-space:nowrap;
  }
  .v3-desktop-main>.cc-resource-bar .resource-chip .chip-flow{
    gap:7px;
    font-size:10px!important;
    line-height:1.1;
  }
  .v3-desktop-main>.cc-resource-bar.big .resource-chip{
    grid-template-columns:10px 8px 24px minmax(0,1fr) auto;
    grid-template-areas:"handle status icon label amount" "handle status icon flow flow" "handle status bar bar bar";
  }
  .v3-desktop-main>.cc-resource-bar.big .resource-chip .chip-label{max-width:none;font-size:10px!important}
  .v3-desktop-main>.cc-resource-bar.big .resource-chip strong{font-size:12px!important}
  .v3-desktop-main>.cc-resource-bar.big .resource-chip .chip-flow{font-size:10px!important}
}
@media (min-width:1500px){
  .v3-desktop-main{grid-template-columns:minmax(0,1fr) 292px!important}
  .v3-desktop-main>.cc-resource-bar .resource-chip .chip-label{max-width:150px}
}

/* v3.0.0 — lecture industrielle du réseau électrique.
   Le résumé conserve exactement la hauteur du HUD ; le détail s'ouvre dans
   un panneau flottant et distingue production, demande et stockage. */
.cc-power-panel,
.mobile-power-meter{
  appearance:none;
  -webkit-appearance:none;
  color:inherit;
  font:inherit;
  text-align:left;
  cursor:pointer;
}
.cc-power-panel:focus-visible,
.mobile-power-meter:focus-visible{
  outline:2px solid var(--orange);
  outline-offset:2px;
}
.cc-power-panel{
  position:relative;
  display:grid!important;
  grid-template-columns:27px minmax(0,1fr) 10px;
  align-items:center;
  gap:8px;
  padding-right:8px!important;
  overflow:hidden;
}
.cc-power-panel .power-compact-icon{
  display:grid;
  place-items:center;
  width:27px;
  height:27px;
  border:1px solid #35515e;
  background:#0d151a;
}
.cc-power-panel .power-compact-icon .fc-icon{width:18px;height:18px}
.power-compact-copy{display:flex;min-width:0;flex-direction:column;gap:2px}
.cc-power-panel .power-gauge-value{
  display:block;
  min-width:0;
  color:#edf2f4;
  font:800 11px/1 var(--font-mono2)!important;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.cc-power-panel .power-gauge-value i{color:#687a85;font-style:normal;font-weight:600}
.cc-power-panel .power-gauge-value small{margin-left:2px;color:#83939c;font-size:8px}
.cc-power-panel .power-gauge-sub{
  display:block;
  min-width:0;
  color:#7f929d;
  font:700 7px/1.1 var(--font-mono2)!important;
  letter-spacing:.035em;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.power-compact-caret{color:#657985;font-size:9px}
.cc-power-panel.power-charging{border-left:3px solid #46cbe6!important}
.cc-power-panel.power-support{border-left:3px solid #72d3e7!important}
.cc-power-panel.power-strained{border-left:3px solid #ffb14a!important}
.cc-power-panel.power-brownout,
.cc-power-panel.power-blackout{border-left:3px solid #ff6262!important}
.cc-power-panel.power-charging .power-gauge-sub,
.cc-power-panel.power-support .power-gauge-sub{color:#64d5eb!important}
.cc-power-panel.power-strained .power-gauge-sub{color:#ffb14a!important}
.cc-power-panel.power-brownout .power-gauge-sub,
.cc-power-panel.power-blackout .power-gauge-sub{color:#ff7d7d!important}

.power-detail-panel{
  position:fixed;
  z-index:360;
  width:min(430px,calc(100vw - 16px));
  max-height:min(76vh,680px);
  overflow:auto;
  box-sizing:border-box;
  border:1px solid #4a5b66;
  border-top:2px solid var(--orange);
  background:linear-gradient(180deg,#121b22 0%,#0c1318 100%);
  color:#e8edef;
  box-shadow:0 18px 50px rgba(0,0,0,.62),inset 0 1px rgba(255,255,255,.035);
  clip-path:polygon(0 0,calc(100% - 10px) 0,100% 10px,100% 100%,0 100%);
}
.power-detail-panel.hidden{display:none!important}
.power-detail-head{
  display:grid;
  grid-template-columns:minmax(0,1fr) auto 28px;
  align-items:center;
  gap:8px;
  padding:12px 12px 10px;
  border-bottom:1px solid #34424b;
  background:linear-gradient(90deg,rgba(255,138,0,.08),transparent 58%);
}
.power-detail-head span{display:block;color:#6f8490;font:700 7px/1 var(--font-mono2);letter-spacing:.13em}
.power-detail-head h2{margin:4px 0 0;color:#f2f5f6;font:800 15px/1 var(--font-display)}
.power-detail-state{padding:5px 7px;border:1px solid #3b4b55;background:#0d151a;color:#9fb1ba!important;white-space:nowrap}
.power-detail-state.mode-charging,.power-detail-state.mode-support{border-color:#356879;color:#61d7ef!important}
.power-detail-state.mode-strained{border-color:#6b522f;color:#ffb14a!important}
.power-detail-state.mode-brownout,.power-detail-state.mode-blackout{border-color:#713c3c;color:#ff7474!important}
.power-detail-close{width:28px;height:28px;padding:0;border:1px solid #394a54;background:#10181e;color:#9babb4;font-size:19px;line-height:1;cursor:pointer}
.power-detail-close:hover{border-color:#946021;color:#fff}
.power-detail-flow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;padding:10px 10px 6px}
.power-flow-block{min-width:0;padding:8px;border:1px solid #2d3d47;border-left:2px solid #58717e;background:#0e171d}
.power-flow-block.battery{border-left-color:#4abdd4}
.power-flow-block>span{display:block;color:#718691;font:700 7px/1 var(--font-mono2);letter-spacing:.08em;text-transform:uppercase}
.power-flow-block>strong{display:block;margin-top:5px;color:#f0f3f4;font:800 13px/1 var(--font-mono2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.power-flow-block>small{display:block;margin-top:4px;color:#82939c;font:600 8px/1.2 var(--font-display)}
.power-flow-block.battery.mode-charging strong,.power-flow-block.battery.mode-discharging strong{color:#65d8ed}
.power-balance-line{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 10px;padding:7px 8px;border:1px solid #293a43;background:#0a1116}
.power-balance-line span{color:#6f8490;font:700 7px/1 var(--font-mono2);letter-spacing:.1em;text-transform:uppercase}
.power-balance-line strong{color:#cbd4d8;font:700 10px/1 var(--font-mono2)}
.power-battery-detail{margin:8px 10px;padding:9px;border:1px solid #2d4d59;background:linear-gradient(90deg,rgba(38,157,181,.09),rgba(13,21,26,.7))}
.power-battery-copy{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:3px 8px}
.power-battery-copy>span{color:#5fcde3;font:700 8px/1 var(--font-mono2);letter-spacing:.09em;text-transform:uppercase}
.power-battery-copy>strong{color:#eaf2f4;font:800 11px/1 var(--font-mono2);text-align:right}
.power-battery-copy>small{grid-column:1/-1;color:#879aa4;font:600 8px/1.25 var(--font-display)}
.power-battery-track{height:6px;margin-top:8px;border:1px solid #27424d;background:#070d10;overflow:hidden}
.power-battery-track i{display:block;height:100%;background:linear-gradient(90deg,#218ca6,#59d4eb);box-shadow:0 0 8px rgba(61,198,225,.32)}
.power-battery-detail.empty .power-battery-track{display:none}
.power-generator-list{padding:4px 10px 8px}
.power-generator-list h3{margin:5px 0 7px;color:#82949e;font:700 8px/1 var(--font-mono2);letter-spacing:.11em;text-transform:uppercase}
.power-generator-row{display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:8px;padding:7px 5px;border-top:1px solid #25343d}
.power-generator-icon{display:grid;place-items:center;width:26px;height:26px;border:1px solid #30424c;background:#0b1216}.power-generator-icon .fc-icon{width:19px;height:19px}
.power-generator-name strong,.power-generator-output strong{display:block;color:#dfe5e7;font:700 9px/1.1 var(--font-display)}
.power-generator-name small,.power-generator-output small{display:block;margin-top:3px;color:#71838d;font:600 7px/1.1 var(--font-mono2)}
.power-generator-output{text-align:right}.power-generator-row.mode-standby .power-generator-name small{color:#ffb14a}.power-generator-row.mode-no_fuel .power-generator-name small{color:#ff7474}.power-generator-row.mode-off{opacity:.56}
.power-detail-empty{margin:0;padding:8px;color:#748791;font-size:9px}
.power-detail-rule{margin:0;padding:9px 10px 11px;border-top:1px solid #2d3a43;color:#82949d;font:600 8px/1.35 var(--font-display)}

@media (max-width:700px){
  .mobile-power-meter{border:0;background:transparent}
  .mobile-power-meter.charging,.mobile-power-meter.supporting{color:#68d8ee;background:rgba(54,183,210,.09)}
  .mobile-power-meter.charging strong,.mobile-power-meter.supporting strong,.mobile-power-meter.charging .mobile-power-status,.mobile-power-meter.supporting .mobile-power-status{color:#68d8ee}
  .power-detail-panel{max-height:calc(100dvh - 58px)}
  .power-detail-head{grid-template-columns:minmax(0,1fr) auto 28px;padding:10px}
  .power-detail-head h2{font-size:13px}
  .power-detail-state{font-size:6px!important;padding:4px 5px}
  .power-detail-flow{gap:4px;padding:8px 8px 5px}
  .power-flow-block{padding:6px 5px}.power-flow-block>strong{font-size:10px}.power-flow-block>small{font-size:7px}
  .power-balance-line,.power-battery-detail{margin-left:8px;margin-right:8px}
  .power-generator-list{padding-left:8px;padding-right:8px}
}

/* v3.0.0 — résumé électrique mobile compact.
   Le header reste l'unique résumé sur téléphone ; le panneau complet demeure
   accessible en touchant ce résumé. La barre desktop n'est pas supprimée. */
@media (max-width:700px){
  #mobilePowerMeter .mobile-power-main{font-size:.52rem;gap:.14rem}
  #mobilePowerMeter .mobile-power-status{font-size:.39rem;line-height:1.05}
  .cc-status-strip > #powerMiniBar{display:none!important}
}

@media (max-width:390px){
  #mobilePowerMeter .mobile-power-main{font-size:.49rem}
  #mobilePowerMeter .mobile-power-status{font-size:.37rem}
}


/* v3.0.0 — code couleur de l'état du réseau électrique.
   Stable = vert ; batteries = gamme bleue ; tension = jaune/orange ;
   délestage = rouge-orange ; panne = rouge critique. */
.cc-power-panel.power-stable{
  border-left:3px solid #4ad27a!important;
}
.cc-power-panel.power-stable .power-gauge-sub{
  color:#69df91!important;
}
.cc-power-panel.power-charging{
  border-left-color:#45bdf2!important;
}
.cc-power-panel.power-charging .power-gauge-sub{
  color:#65ccf5!important;
}
.cc-power-panel.power-support{
  border-left-color:#4588f2!important;
}
.cc-power-panel.power-support .power-gauge-sub{
  color:#6ca1ff!important;
}
.cc-power-panel.power-strained{
  border-left-color:#f2c14e!important;
}
.cc-power-panel.power-strained .power-gauge-sub{
  color:#ffd166!important;
}
.cc-power-panel.power-brownout{
  border-left-color:#f07b32!important;
}
.cc-power-panel.power-brownout .power-gauge-sub{
  color:#ff9855!important;
}
.cc-power-panel.power-blackout{
  border-left-color:#e44747!important;
}
.cc-power-panel.power-blackout .power-gauge-sub{
  color:#ff6666!important;
}

.power-detail-state.mode-stable{
  border-color:#2f7f4d!important;
  background:rgba(42,125,72,.14)!important;
  color:#63df8b!important;
}
.power-detail-state.mode-charging{
  border-color:#347fa2!important;
  background:rgba(48,143,188,.14)!important;
  color:#63cffa!important;
}
.power-detail-state.mode-support{
  border-color:#345fa8!important;
  background:rgba(55,104,190,.14)!important;
  color:#75a8ff!important;
}
.power-detail-state.mode-strained{
  border-color:#8b702e!important;
  background:rgba(177,137,39,.14)!important;
  color:#ffd166!important;
}
.power-detail-state.mode-brownout{
  border-color:#995021!important;
  background:rgba(182,83,31,.14)!important;
  color:#ff9855!important;
}
.power-detail-state.mode-blackout{
  border-color:#8e3030!important;
  background:rgba(178,43,43,.16)!important;
  color:#ff6262!important;
}

/* Même langage couleur sur le résumé électrique mobile. */
.mobile-power-meter.stable .mobile-power-main,
.mobile-power-meter.stable .mobile-power-status{color:#69df91!important}
.mobile-power-meter.charging .mobile-power-main,
.mobile-power-meter.charging .mobile-power-status{color:#65ccf5!important}
.mobile-power-meter.supporting .mobile-power-main,
.mobile-power-meter.supporting .mobile-power-status{color:#75a8ff!important}
.mobile-power-meter.strained .mobile-power-main,
.mobile-power-meter.strained .mobile-power-status{color:#ffd166!important}
.mobile-power-meter.brownout .mobile-power-main,
.mobile-power-meter.brownout .mobile-power-status{color:#ff9855!important}
.mobile-power-meter.blackout .mobile-power-main,
.mobile-power-meter.blackout .mobile-power-status{color:#ff6262!important}


/* v3.0.0 — sites découverts pendant l'auto-exploration hors-ligne.
   L'effet reste actif jusqu'au premier survol (desktop) ou toucher (mobile). */
.exploration-site-new .exploration-hex-site{
  stroke:#57d9f4!important;
  stroke-width:2.4px!important;
  filter:drop-shadow(0 0 5px rgba(87,217,244,.8));
  animation:exploration-new-site-hex 1.65s ease-in-out infinite;
}
.exploration-new-discovery-ring{
  fill:none;
  stroke:#67def5;
  stroke-width:1.8px;
  stroke-dasharray:5 4;
  pointer-events:none;
  transform-box:fill-box;
  transform-origin:center;
  animation:exploration-new-site-ring 1.65s ease-out infinite;
}
.exploration-new-discovery-label{
  fill:#a8efff;
  stroke:#071216;
  stroke-width:1.5px;
  paint-order:stroke fill;
  font:800 6px/1 var(--font-mono2);
  letter-spacing:.08em;
  pointer-events:none;
  animation:exploration-new-site-label 1.65s ease-in-out infinite;
}
@keyframes exploration-new-site-hex{
  0%,100%{opacity:.72}
  50%{opacity:1}
}
@keyframes exploration-new-site-ring{
  0%{opacity:.95;transform:scale(.78)}
  70%,100%{opacity:0;transform:scale(1.22)}
}
@keyframes exploration-new-site-label{
  0%,100%{opacity:.72}
  50%{opacity:1}
}
@media (prefers-reduced-motion:reduce){
  .exploration-site-new .exploration-hex-site,
  .exploration-new-discovery-ring,
  .exploration-new-discovery-label{animation:none!important}
}

/* v3.0.0 — Unité FICSIT / multijoueur persistant, langage Coop Exploration */
.unit-command-shell{display:grid;gap:12px}.unit-command-hero{position:relative;overflow:hidden;display:flex;justify-content:space-between;align-items:center;gap:18px;padding:20px;border:1px solid rgba(78,214,239,.28);background:linear-gradient(125deg,#0b151a 0%,#101b20 58%,#17150f 100%);box-shadow:inset 4px 0 0 var(--orange),0 14px 30px rgba(0,0,0,.24)}
.unit-command-hero:after{content:"";position:absolute;right:-70px;top:-120px;width:280px;height:280px;border:1px solid rgba(244,145,30,.16);transform:rotate(45deg);pointer-events:none}.unit-command-hero h3{font:900 clamp(1.25rem,2vw,1.85rem)/1.05 var(--font-display);letter-spacing:.045em;margin:.25rem 0}.unit-command-hero p{margin:0;color:var(--text-muted)}
.unit-hero-specs{display:grid;grid-template-columns:repeat(4,minmax(82px,1fr));gap:1px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.09);z-index:1}.unit-hero-specs div{padding:10px 14px;background:#0b1216;text-align:center}.unit-hero-specs strong{display:block;font:900 1.08rem var(--font-mono2);color:#e8f7fa}.unit-hero-specs small{display:block;margin-top:4px;font:.66rem var(--font-mono2);letter-spacing:.1em;color:#7f949e}
.unit-subnav{display:flex;gap:2px;padding:4px;border:1px solid rgba(255,255,255,.09);background:#080e12;overflow-x:auto}.unit-subnav button{flex:1;min-width:105px;border-radius:0!important;border:0;border-bottom:2px solid transparent;background:#10191e;color:#899ba4;font:800 .72rem var(--font-mono2);letter-spacing:.08em}.unit-subnav button.active{color:#fff;border-bottom-color:var(--orange);background:linear-gradient(180deg,rgba(244,145,30,.14),rgba(244,145,30,.04))}
.unit-view{display:none}.unit-view.active{display:block}.unit-overview-grid,.unit-project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-bottom:12px}.unit-console-card{border:1px solid rgba(78,214,239,.18);border-radius:2px!important;background:linear-gradient(145deg,rgba(12,21,26,.97),rgba(7,13,17,.98));padding:16px;box-shadow:0 12px 26px rgba(0,0,0,.18)}.unit-console-card h4{margin:.25rem 0 .4rem;font:900 1.05rem var(--font-display);letter-spacing:.04em}.unit-kpis{margin:12px 0 0;display:grid;grid-template-columns:1fr 1fr;gap:1px;background:rgba(255,255,255,.07)}.unit-kpis div{display:flex;justify-content:space-between;padding:10px;background:#0a1115}.unit-kpis dt{color:#82949d}.unit-kpis dd{margin:0;font:800 var(--font-mono2);color:#eaf8fa}
.unit-project-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.unit-project-head h4{margin:.45rem 0 .15rem}.unit-project-head p{margin:0;color:#8798a0}.unit-project-head>strong{font:900 1.5rem var(--font-mono2);color:var(--orange)}.unit-color-control{display:grid;gap:8px;margin:14px 0;padding:12px;border:1px solid rgba(78,214,239,.18);background:rgba(3,10,14,.45)}.unit-color-control label{display:grid;gap:6px;color:#9db1b8;font:700 .7rem var(--font-mono2);letter-spacing:.08em}.unit-color-control select{width:100%;padding:9px;border:1px solid #29434c;background:#0b161b;color:#ecf8fa;font:700 .82rem var(--font-mono2)}.unit-color-control button{width:100%;font-size:.72rem}.unit-color-control small{color:#78909a;line-height:1.4}.unit-progress{height:13px;margin:15px 0 8px;background:#071014;border:1px solid #263941;overflow:hidden}.unit-progress i{display:block;height:100%;background:repeating-linear-gradient(135deg,#e78b20 0 8px,#f5a73e 8px 16px);box-shadow:0 0 12px rgba(244,145,30,.28)}.unit-project-values{display:flex;gap:6px;align-items:baseline}.unit-project-values b{font:900 1.08rem var(--font-mono2)}.unit-project-values span{color:#8798a0}.unit-contribute{display:grid;grid-template-columns:1fr auto auto;gap:7px;margin-top:14px}.unit-contribute input{margin:0!important}.unit-contribute button{font-weight:900;border-color:rgba(244,145,30,.55);background:rgba(244,145,30,.12)}
.unit-member-list{display:grid;margin-top:10px}.unit-member-row{display:grid;grid-template-columns:10px minmax(120px,1fr) 120px auto;align-items:center;gap:10px;padding:10px 4px;border-top:1px solid rgba(255,255,255,.065)}.unit-online-dot{width:7px;height:7px;border-radius:50%;background:#4ad27a;box-shadow:0 0 7px rgba(74,210,122,.65)}.unit-member-row small{font:700 .7rem var(--font-mono2);color:#78909a}.unit-member-actions{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}.unit-member-actions button{font-size:.72rem;padding:6px 8px}.unit-activity-list{display:grid;margin-top:10px}.unit-activity-row{display:grid;grid-template-columns:16px 1fr auto;gap:8px;align-items:center;padding:9px 4px;border-top:1px solid rgba(255,255,255,.06)}.unit-activity-row>span{color:var(--orange);font-weight:900}.unit-activity-row p{margin:0!important;color:#c8d4d9!important}.unit-activity-row time{font:.68rem var(--font-mono2);color:#71858f}.unit-ranking{display:grid;margin-top:10px}.unit-ranking-row{display:grid;grid-template-columns:50px 1fr 100px 140px;gap:10px;padding:10px 8px;border-top:1px solid rgba(255,255,255,.06);align-items:center}.unit-ranking-row.head{color:#738791;font:700 .68rem var(--font-mono2);letter-spacing:.08em}.unit-ranking-row.mine{background:rgba(244,145,30,.09);box-shadow:inset 3px 0 var(--orange)}.unit-project-create label{display:block;margin:10px 0}.unit-danger-zone{border-color:rgba(255,100,100,.18)}.unit-empty-deck{display:grid;grid-template-columns:1.3fr 1fr;gap:1px;border:1px solid rgba(78,214,239,.22);background:rgba(255,255,255,.08)}.unit-empty-copy,.unit-create-panel{padding:24px;background:#0b1419}.unit-empty-copy h3{font:900 1.5rem var(--font-display);margin:.35rem 0}.unit-create-panel label{display:block;margin-bottom:10px}
@media(max-width:900px){.unit-command-hero{align-items:flex-start;flex-direction:column}.unit-hero-specs{width:100%;grid-template-columns:repeat(2,1fr)}.unit-overview-grid,.unit-project-grid,.unit-empty-deck{grid-template-columns:1fr}.unit-member-row{grid-template-columns:10px 1fr auto}.unit-member-row small{grid-column:2}.unit-member-actions{grid-column:2/4;justify-content:flex-start}.unit-ranking-row{grid-template-columns:35px 1fr 62px 90px}.unit-activity-row{grid-template-columns:14px 1fr}.unit-activity-row time{grid-column:2}}


/* v3.0.0 — MULTIJOUEUR : vraie composition mobile, pas le desktop empilé. */
@media (max-width:700px){
  .cc-multiplayer-panel{padding-left:0!important;padding-right:0!important}
  .cc-multiplayer-panel .social-shell{gap:8px}
  .cc-multiplayer-panel .social-hero{
    padding:10px 12px!important;
    min-height:0!important;
  }
  .cc-multiplayer-panel .social-hero .exploration-kicker,
  .cc-multiplayer-panel .social-hero h2,
  .cc-multiplayer-panel .social-hero p{display:none!important}
  .cc-multiplayer-panel .social-hero:before{
    content:"FICSIT // MULTIJOUEUR";
    font:800 .7rem var(--font-mono2);
    letter-spacing:.1em;
    color:#77dff3;
  }
  .cc-multiplayer-panel .social-notif-btn{margin-left:auto;padding:7px 10px!important}

  /* Navigation principale : trois destinations visibles, le social via la cloche. */
  .cc-multiplayer-panel .social-nav{
    display:grid!important;
    grid-template-columns:1fr 1fr!important;
    gap:4px!important;
    padding:0 10px 4px!important;
    overflow:visible!important;
  }
  .cc-multiplayer-panel .social-nav button{
    min-width:0!important;
    min-height:38px!important;
    padding:7px 8px!important;
    font-size:.78rem!important;
  }
  .cc-multiplayer-panel .social-nav [data-social-view="friends"],
  .cc-multiplayer-panel .social-nav [data-social-view="messages"],
  .cc-multiplayer-panel .social-nav [data-social-view="notifications"]{display:none!important}
  .cc-multiplayer-panel #socialStatus:empty{display:none}

  .cc-multiplayer-panel .unit-command-shell{gap:8px;padding:0 8px 12px}

  /* En-tête compact : identité + quatre métriques sur une seule ligne. */
  .cc-multiplayer-panel .unit-command-hero{
    padding:11px 12px 9px!important;
    gap:8px!important;
    box-shadow:inset 3px 0 0 var(--orange),0 8px 18px rgba(0,0,0,.2)!important;
  }
  .cc-multiplayer-panel .unit-command-hero .social-kicker{font-size:.57rem!important}
  .cc-multiplayer-panel .unit-command-hero h3{
    font-size:1.08rem!important;
    margin:.15rem 0 0!important;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;
  }
  .cc-multiplayer-panel .unit-command-hero p{display:none!important}
  .cc-multiplayer-panel .unit-hero-specs{
    width:100%!important;
    grid-template-columns:repeat(4,1fr)!important;
    border:0!important;
  }
  .cc-multiplayer-panel .unit-hero-specs div{padding:6px 3px!important}
  .cc-multiplayer-panel .unit-hero-specs strong{font-size:.88rem!important}
  .cc-multiplayer-panel .unit-hero-specs small{
    font-size:.48rem!important;margin-top:2px!important;letter-spacing:.06em!important
  }

  /* Sous-navigation : trois entrées prioritaires + défilement léger pour le reste. */
  .cc-multiplayer-panel .unit-subnav{
    padding:2px!important;
    gap:1px!important;
    scrollbar-width:thin;
  }
  .cc-multiplayer-panel .unit-subnav button{
    flex:0 0 auto!important;
    min-width:82px!important;
    min-height:36px!important;
    padding:7px 8px!important;
    font-size:.62rem!important;
  }

  /* L'ancien pavé "État de l'unité" répétait exactement le bandeau : inutile sur mobile. */
  .cc-multiplayer-panel [data-unit-panel="overview"] .unit-overview-grid>.unit-console-card:first-child{
    display:none!important;
  }
  .cc-multiplayer-panel .unit-overview-grid,
  .cc-multiplayer-panel .unit-project-grid{display:block!important;margin:0!important}
  .cc-multiplayer-panel .unit-console-card{
    padding:12px!important;
    margin-bottom:8px!important;
  }
  .cc-multiplayer-panel .unit-console-card h4{font-size:.96rem!important}
  .cc-multiplayer-panel .unit-project-focus{min-height:0!important}
  .cc-multiplayer-panel .unit-progress{margin:10px 0 6px!important}
  .cc-multiplayer-panel .unit-contribute{margin-top:10px!important}
  .cc-multiplayer-panel .unit-activity-row{padding:7px 2px!important}
  .cc-multiplayer-panel .unit-member-row{padding:8px 2px!important}

  /* Le résumé ressources sticky ne doit pas recouvrir le cockpit multijoueur. */
  body:has(#mainPanel-multiplayer.active) .resource-burger-summary,
  body:has(#mainPanel-multiplayer.is-active) .resource-burger-summary{
    position:relative!important;top:auto!important
  }
}


/* v3.0.0 — Console de création de projet d’Unité */
.unit-contribute button{font-weight:900;border:1px solid #d9780d;background:linear-gradient(180deg,#f68b13,#d96800);color:#15191c;opacity:1;cursor:pointer}.unit-contribute button:disabled{border-color:#39464e;background:#172027;color:#66757e;opacity:.65;cursor:not-allowed}
.unit-project-create{
  position:relative;
  overflow:hidden;
  border-color:rgba(78,214,239,.25)!important;
  background:
    linear-gradient(145deg,rgba(10,19,24,.99),rgba(5,11,15,.99))!important;
}
.unit-project-create:after{
  content:"";
  position:absolute;
  right:-85px;bottom:-105px;
  width:220px;height:220px;
  border:1px solid rgba(244,145,30,.08);
  transform:rotate(45deg);
  pointer-events:none;
}
.unit-project-create-head{
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  gap:14px;
  padding-bottom:13px;
  margin-bottom:15px;
  border-bottom:1px solid rgba(255,255,255,.07);
}
.unit-project-create-head h4{
  margin:.3rem 0 0!important;
  font-size:1.2rem!important;
}
.unit-project-create-code{
  flex:0 0 auto;
  padding:5px 7px;
  border:1px solid rgba(78,214,239,.18);
  background:rgba(78,214,239,.045);
  color:#64818d;
  font:700 .58rem var(--font-mono2);
  letter-spacing:.08em;
}
.unit-project-form{display:grid;gap:13px;position:relative;z-index:1}
.unit-project-field{
  display:grid!important;
  gap:7px;
  margin:0!important;
}
.unit-project-field>span,
.unit-project-estimate>span{
  color:#91a6af;
  font:800 .62rem var(--font-mono2);
  letter-spacing:.12em;
}
.unit-project-field input,
.unit-project-select-wrap select{
  width:100%;
  min-height:47px;
  box-sizing:border-box;
  border:1px solid #283b44!important;
  border-radius:2px!important;
  outline:0;
  background:#081116!important;
  color:#edf8fa!important;
  box-shadow:inset 3px 0 0 rgba(78,214,239,.2);
  font:700 .88rem var(--font-mono2)!important;
}
.unit-project-field input:focus,
.unit-project-select-wrap select:focus{
  border-color:rgba(78,214,239,.62)!important;
  box-shadow:inset 3px 0 0 #4ed6ef,0 0 0 2px rgba(78,214,239,.06)!important;
}
.unit-project-field-title input{padding:10px 12px!important}
.unit-project-select-wrap{position:relative}
.unit-project-select-wrap select{
  appearance:none;
  -webkit-appearance:none;
  padding:10px 42px 10px 43px!important;
  cursor:pointer;
}
.unit-project-select-wrap:after{
  content:"⌄";
  position:absolute;
  right:14px;top:50%;
  transform:translateY(-55%);
  color:#7dddf0;
  font:900 1.1rem var(--font-mono2);
  pointer-events:none;
}
.unit-project-resource-icon{
  position:absolute;
  left:14px;top:50%;
  transform:translateY(-50%);
  color:var(--orange);
  z-index:2;
  pointer-events:none;
}
.unit-project-target-control{
  display:grid;
  grid-template-columns:44px minmax(120px,1fr) 44px;
  gap:6px;
}
.unit-project-target-control>button{
  min-height:48px;
  padding:0!important;
  border:1px solid rgba(78,214,239,.23)!important;
  border-radius:2px!important;
  background:#0b171c!important;
  color:#9de8f5!important;
  font:900 1.25rem var(--font-mono2)!important;
}
.unit-project-target-control>button:hover{
  border-color:var(--orange)!important;
  color:var(--orange)!important;
}
.unit-project-target-control>div{
  position:relative;
}
.unit-project-target-control input{
  height:48px;
  text-align:center;
  padding:6px 52px 6px 10px!important;
  font-size:1.04rem!important;
  color:#fff!important;
  -moz-appearance:textfield;
}
.unit-project-target-control input::-webkit-outer-spin-button,
.unit-project-target-control input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.unit-project-target-control small{
  position:absolute;
  right:10px;top:50%;
  transform:translateY(-50%);
  color:#5d737d;
  font:700 .5rem var(--font-mono2);
  letter-spacing:.08em;
  pointer-events:none;
}
.unit-project-target-presets{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:5px;
}
.unit-project-target-presets button{
  min-height:30px;
  padding:5px!important;
  border-radius:2px!important;
  border:1px solid rgba(255,255,255,.08)!important;
  background:#0a1318!important;
  color:#728791!important;
  font:800 .62rem var(--font-mono2)!important;
}
.unit-project-target-presets button.active{
  border-color:rgba(244,145,30,.55)!important;
  background:rgba(244,145,30,.1)!important;
  color:#ffae48!important;
}
.unit-project-estimate{
  display:grid;
  gap:4px;
  padding:10px 11px;
  border-left:2px solid rgba(78,214,239,.42);
  background:rgba(78,214,239,.035);
}
.unit-project-estimate strong{
  color:#d8e8ec;
  font:800 .76rem var(--font-mono2);
}
.unit-project-estimate small{
  color:#6f848e;
  font-size:.7rem;
}
.unit-project-launch{
  width:100%;
  min-height:48px;
  display:flex!important;
  justify-content:space-between;
  align-items:center;
  margin-top:2px;
  padding:10px 15px!important;
  border-radius:2px!important;
  font:900 .78rem var(--font-mono2)!important;
  letter-spacing:.08em;
}
.unit-project-launch b{font-size:1.25rem}

@media(max-width:700px){
  .cc-multiplayer-panel .unit-project-create{padding:12px!important}
  .cc-multiplayer-panel .unit-project-create-head{margin-bottom:12px;padding-bottom:10px}
  .cc-multiplayer-panel .unit-project-create-head h4{font-size:.98rem!important}
  .cc-multiplayer-panel .unit-project-create-code{display:none}
  .cc-multiplayer-panel .unit-project-form{gap:11px}
  .cc-multiplayer-panel .unit-project-field input,
  .cc-multiplayer-panel .unit-project-select-wrap select{min-height:44px}
  .cc-multiplayer-panel .unit-project-target-control{grid-template-columns:42px 1fr 42px}
  .cc-multiplayer-panel .unit-project-target-control>button,
  .cc-multiplayer-panel .unit-project-target-control input{height:44px;min-height:44px}
  .cc-multiplayer-panel .unit-project-estimate{padding:9px 10px}
  .cc-multiplayer-panel .unit-project-launch{min-height:46px}
}


/* v3.0.0 — Carte stellaire globale des Unités */
.stellar-shell{display:grid;gap:12px}
.stellar-header{
  display:flex;justify-content:space-between;align-items:center;gap:18px;
  padding:17px 18px;border:1px solid rgba(78,214,239,.25);
  background:linear-gradient(115deg,#09141a 0%,#0c1820 62%,#18130c 100%);
  box-shadow:inset 4px 0 var(--orange),0 12px 28px rgba(0,0,0,.22)
}
.stellar-header h3{margin:.28rem 0 .15rem;font:900 1.35rem var(--font-display);letter-spacing:.05em}
.stellar-header p{margin:0;color:#7e929c}
.stellar-cycle{display:grid;gap:3px;min-width:180px;padding:10px 12px;border:1px solid rgba(244,145,30,.25);background:rgba(244,145,30,.055)}
.stellar-cycle span{font:700 .57rem var(--font-mono2);letter-spacing:.11em;color:#8d8171}
.stellar-cycle strong{font:900 .95rem var(--font-mono2);color:#ffae48}
.stellar-layout{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(280px,.72fr);gap:12px;align-items:start}
.stellar-map-frame,.stellar-ranking-card,.stellar-detail-card{border:1px solid rgba(78,214,239,.18);background:#071015}
.stellar-map-toolbar{display:flex;justify-content:space-between;gap:10px;padding:8px 11px;border-bottom:1px solid rgba(78,214,239,.12);font:700 .56rem var(--font-mono2);letter-spacing:.08em;color:#63808b}
.stellar-map-toolbar span:last-child{color:#4fbe79}
.stellar-viewport{position:relative;overflow:hidden;min-height:520px;background:#02070b;touch-action:pan-x pan-y}
.stellar-map-svg{display:block;width:100%;height:auto;min-height:520px}
.stellar-space{fill:#02070b}
.stellar-star{fill:#d8f5ff;opacity:.55}
.stellar-orbit-lines circle{fill:none;stroke:rgba(78,214,239,.075);stroke-width:1;stroke-dasharray:3 9}
.stellar-sector{cursor:pointer;outline:none}
.stellar-sector-hex{fill:#0b171d;stroke:#28434d;stroke-width:1.5;transition:.18s ease}
.stellar-sector:hover .stellar-sector-hex,.stellar-sector:focus .stellar-sector-hex{stroke:#7ce7f8;filter:drop-shadow(0 0 8px rgba(78,214,239,.4))}
.stellar-sector-icon{fill:#a7dce7;font:900 18px var(--font-mono2);pointer-events:none}
.stellar-sector-id{fill:#dcecef;font:800 8px var(--font-mono2);letter-spacing:.05em;pointer-events:none}
.stellar-sector-meta{fill:#738a94;font:700 6px var(--font-mono2);pointer-events:none}
.stellar-sector.stellar-engaged .stellar-sector-hex{fill:#251a0b;stroke:#f49a25;filter:drop-shadow(0 0 6px rgba(244,154,37,.28))}
.stellar-sector.stellar-engaged .stellar-sector-meta{fill:#ffac43}
.stellar-sector.stellar-owned .stellar-sector-hex{fill:var(--unit-color,#ff9d1f);fill-opacity:.28;stroke:var(--unit-color,#ff9d1f);stroke-width:2.4;filter:drop-shadow(0 0 9px color-mix(in srgb,var(--unit-color,#ff9d1f) 45%,transparent))}
.stellar-sector.stellar-owned .stellar-sector-meta{fill:var(--unit-color,#ffc36b)}
.stellar-sector.stellar-secured .stellar-sector-hex{fill:var(--unit-color,#47b878);fill-opacity:.24;stroke:var(--unit-color,#47b878)}
.stellar-sector.stellar-secured .stellar-sector-meta{fill:var(--unit-color,#62d993)}
.stellar-side{display:grid;gap:12px;position:sticky;top:86px}
.stellar-ranking-card,.stellar-detail-card{padding:14px}
.stellar-ranking-card h4,.stellar-detail-card h4{margin:.3rem 0 .6rem;font:900 1rem var(--font-display)}
.stellar-rank-row{display:grid;grid-template-columns:38px 1fr auto;gap:7px;align-items:center;padding:7px 3px;border-top:1px solid rgba(255,255,255,.055)}
.stellar-rank-row b{color:#6f858e;font:800 .67rem var(--font-mono2)}
.stellar-rank-row span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#cbd9de;font-size:.75rem}
.stellar-rank-row strong{color:#96aab3;font:800 .68rem var(--font-mono2)}
.stellar-rank-row.mine{background:rgba(244,145,30,.08);box-shadow:inset 2px 0 var(--orange)}
.stellar-detail-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}
.stellar-danger{color:#ff9c39;font:800 .66rem var(--font-mono2);letter-spacing:.06em;white-space:nowrap}
.stellar-secured-banner{margin:8px 0;padding:8px 9px;border:1px solid rgba(72,190,122,.3);background:rgba(72,190,122,.08);color:#6ee29f;font:800 .62rem var(--font-mono2);letter-spacing:.06em}
.stellar-objective{display:grid;gap:6px;margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.06)}
.stellar-objective>div:first-child{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.stellar-objective span{color:#9eb0b8;font-size:.76rem}
.stellar-objective b{font:800 .7rem var(--font-mono2);color:#e2eff2}
.stellar-progress{height:10px;background:#050a0d;border:1px solid #24363e;overflow:hidden}
.stellar-progress i{display:block;height:100%;background:repeating-linear-gradient(135deg,#dc841d 0 7px,#f1a03a 7px 14px)}
.stellar-contribute{display:grid;grid-template-columns:1fr auto auto auto;gap:6px}
.stellar-contribute input{min-width:0;height:38px;padding:7px 9px;border:1px solid #263b44;background:#081116;color:#fff;font:700 .75rem var(--font-mono2)}
.stellar-contribute button,.stellar-project-actions button{border:1px solid rgba(244,145,30,.5);background:rgba(244,145,30,.11);color:#ffae48;font:800 .62rem var(--font-mono2);letter-spacing:.05em}
.stellar-contribute-error{margin:8px 0;padding:9px 10px;border:1px solid rgba(244,145,30,.55);background:rgba(244,145,30,.1);color:#ffb45b;font:700 .7rem var(--font-mono2);line-height:1.45}
.stellar-control{display:grid;gap:4px;margin-top:13px;padding-top:10px;border-top:1px solid rgba(255,255,255,.06)}
.stellar-control-row{display:flex;justify-content:space-between;gap:8px;padding:5px 7px;background:#0a1318;color:#8da1aa;font-size:.7rem}
.stellar-control-row b{font:800 .67rem var(--font-mono2)}
.stellar-control-row.mine{box-shadow:inset 2px 0 var(--orange);color:#f4e2ca}
.stellar-control-empty{padding:7px;color:#6f828b;font-size:.7rem}
.stellar-project-actions{margin-top:11px}
.stellar-project-actions button{width:100%;min-height:38px}

@media(max-width:900px){
  .stellar-layout{grid-template-columns:1fr}
  .stellar-side{position:static;display:flex;flex-direction:column}
  .stellar-detail-card{order:-1}
  .stellar-viewport{min-height:440px}
  .stellar-map-svg{min-height:440px}
}
@media(max-width:700px){
  .cc-multiplayer-panel .social-nav{grid-template-columns:repeat(3,1fr)!important}
  .cc-multiplayer-panel .social-nav button{font-size:.68rem!important;padding:6px 4px!important}
  .stellar-shell{padding:0 8px 12px}
  .stellar-header{padding:10px 11px;display:grid;grid-template-columns:1fr auto;gap:8px;box-shadow:inset 3px 0 var(--orange)}
  .stellar-header .social-kicker{font-size:.51rem}
  .stellar-header h3{font-size:.94rem;margin:.15rem 0 0}
  .stellar-header p{display:none}
  .stellar-cycle{min-width:0;padding:6px 7px}
  .stellar-cycle span{font-size:.45rem}
  .stellar-cycle strong{font-size:.68rem}
  .stellar-map-toolbar{padding:6px 8px;font-size:.48rem}
  .stellar-map-toolbar span:last-child{display:none}
  .stellar-viewport{min-height:360px}
  .stellar-map-svg{min-height:360px}
  .stellar-ranking-card{display:none}
  .stellar-detail-card{padding:11px}
  .stellar-side{gap:8px}
}


/* v3.0.0 — Carte stellaire alignée sur la Carte Exploration */
.stellar-toolbar{
  display:flex!important;
  align-items:center;
  gap:6px;
  margin:0;
  padding:6px 8px!important;
  border:1px solid rgba(78,214,239,.16);
  background:#071014;
}
.stellar-toolbar button{
  min-width:38px;
  min-height:34px;
}
.stellar-toolbar #stellarZoomLabel{
  min-width:58px;
  text-align:center;
  font:800 .68rem var(--font-mono2);
  color:#9db2ba;
}
.stellar-sector-count{
  margin-left:auto;
  padding:0 4px;
  font:800 .58rem var(--font-mono2);
  letter-spacing:.09em;
  color:#6f8b95;
}
.stellar-map-frame{min-width:0}
.stellar-viewport{
  height:clamp(540px,64vw,760px);
  min-height:540px;
  overflow:hidden!important;
  cursor:grab;
  touch-action:none;
  user-select:none;
  background:#02070b;
}
.stellar-viewport:has(.stellar-map-svg.panning){cursor:grabbing}
.stellar-map-svg{
  width:100%;
  height:100%!important;
  min-height:0!important;
  display:block;
  preserve-aspect-ratio:xMidYMid meet;
}
.stellar-sector-grid .stellar-sector-hex{
  stroke-width:1.15;
}
.stellar-sector-grid .stellar-sector-icon{
  font-size:13px;
}
.stellar-sector-grid .stellar-sector-id{
  font-size:5.4px;
}
.stellar-sector-grid .stellar-sector-meta{
  font-size:4.8px;
}
.stellar-sector.stellar-open .stellar-sector-hex{
  fill:rgba(10,24,30,.88);
  stroke:rgba(78,214,239,.26);
}
.stellar-sector:hover .stellar-sector-hex,
.stellar-sector:focus .stellar-sector-hex{
  stroke:#89e9f8!important;
  stroke-width:2!important;
}
@media(max-width:900px){
  .stellar-viewport{height:520px;min-height:520px}
}
@media(max-width:700px){
  .stellar-toolbar{margin:0 8px}
  .stellar-sector-count{font-size:.5rem}
  .stellar-viewport{height:430px;min-height:430px}
  .stellar-map-toolbar{display:none}
  .stellar-map-frame{border-top:1px solid rgba(78,214,239,.16)}
  .stellar-side{padding:0}
  .stellar-detail-card{margin-top:0}
}


/* v3.0.0 — navigation Multijoueur recentrée */
.cc-multiplayer-panel .social-nav-primary{
  grid-template-columns:repeat(2,minmax(0,1fr))!important;
}
@media (min-width:1101px){
  .cc-multiplayer-panel .social-nav-primary{display:none!important}
}
@media(max-width:700px){
  .cc-multiplayer-panel .social-nav-primary{
    grid-template-columns:repeat(2,minmax(0,1fr))!important;
  }
  .cc-multiplayer-panel .social-nav-primary button{
    display:block!important;
  }
}

/* Stock commun d’Unité */
.unit-stock-card{border-color:rgba(71,184,120,.35)}
.unit-stock-intro{color:var(--muted);margin:0 0 14px;line-height:1.5}
.unit-stock-list{display:grid;gap:8px}
.unit-stock-row{display:grid;grid-template-columns:minmax(150px,1fr) auto;gap:8px;align-items:center;padding:10px;border:1px solid rgba(78,214,239,.16);background:rgba(5,14,20,.72)}
.unit-stock-row>div:first-child{display:grid;gap:3px}.unit-stock-row strong{color:#e9f5f7}.unit-stock-row small{color:var(--muted);font-size:.62rem;letter-spacing:.08em}.unit-stock-row>b{color:#8de7aa;font-variant-numeric:tabular-nums}
.unit-stock-deposit{grid-column:1/-1;display:grid;grid-template-columns:1fr auto;gap:7px}.unit-stock-deposit input{min-width:0}.unit-stock-deposit button{border-color:rgba(71,184,120,.65);color:#8de7aa;background:rgba(71,184,120,.08)}
.unit-stock-log{display:grid;gap:5px}.unit-stock-log-row{display:grid;grid-template-columns:18px 120px 1fr auto;gap:7px;align-items:center;padding:7px 0;border-bottom:1px solid rgba(78,214,239,.1);font-size:.78rem}.unit-stock-log-row span:first-of-type{color:#8de7aa}.unit-stock-log-row time{color:var(--muted);font-size:.68rem}
.stellar-contribute button[data-stellar-stock]{border-color:rgba(71,184,120,.65);color:#8de7aa;background:rgba(71,184,120,.08)}
@media(max-width:700px){.unit-stock-row{grid-template-columns:1fr auto}.unit-stock-log-row{grid-template-columns:18px 1fr;font-size:.72rem}.unit-stock-log-row time{grid-column:2}.unit-stock-log-row span:nth-of-type(2){grid-column:2}}

/* Carte stellaire territoire / LOD */
.stellar-map-frame{position:relative}.stellar-map{position:relative;overflow:hidden!important;touch-action:none;background:var(--bg)}
.stellar-map-toolbar button{margin-left:auto;padding:5px 8px;font:700 .55rem var(--font-mono2);color:var(--cyan);background:transparent;border:1px solid var(--border);cursor:pointer}
.stellar-map-svg{min-height:0!important;height:100%!important;display:block;cursor:grab}.stellar-map-svg.panning{cursor:grabbing}
.stellar-sector-hex{fill:var(--territory-fill,var(--territory-color,transparent));fill-opacity:var(--territory-opacity,0);stroke:var(--border);stroke-width:1.1;transition:stroke .18s ease,filter .18s ease}
.stellar-sector.stellar-available .stellar-sector-hex{fill:transparent;fill-opacity:0}.stellar-sector.stellar-locked .stellar-sector-hex{fill:var(--panel-2);fill-opacity:.4;stroke:var(--border)}
.stellar-sector.stellar-engaged .stellar-sector-hex,.stellar-sector.stellar-secured .stellar-sector-hex{stroke:var(--unit-color,var(--orange));stroke-width:1.6}.stellar-sector.stellar-secured .stellar-sector-hex{stroke-width:2}.stellar-sector:hover .stellar-sector-hex,.stellar-sector:focus .stellar-sector-hex{stroke:var(--cyan);stroke-width:2.4;filter:drop-shadow(0 0 7px rgba(78,214,239,.4))}
.stellar-sector-icon,.stellar-sector-label,.stellar-sector-meta{pointer-events:none;text-anchor:middle;font-family:var(--font-mono2)}.stellar-sector-icon{fill:#a7dce7;font-size:10px}.stellar-sector-label{display:none;fill:#dcecef;font-size:7px;font-weight:800}.stellar-sector-meta{display:none;fill:#8de7aa;font-size:5px;font-weight:700}.stellar-map[data-zoom-tier="1"] .stellar-sector-icon{display:none}.stellar-map[data-zoom-tier="2"] .stellar-sector-icon,.stellar-map[data-zoom-tier="3"] .stellar-sector-icon{display:block}.stellar-map[data-zoom-tier="3"] .stellar-sector-label,.stellar-map[data-zoom-tier="3"] .stellar-sector-meta,.stellar-sector:focus .stellar-sector-label,.stellar-sector:focus .stellar-sector-meta{display:block}
.stellar-sector.stellar-contested .stellar-sector-hex{stroke-dasharray:3 2;animation:stellar-dash 4s linear infinite}.stellar-secured-ring{fill:none;stroke:var(--unit-color,var(--orange));stroke-width:2;opacity:0;animation:stellar-ring .7s ease-out forwards;pointer-events:none}.stellar-minimap{position:absolute;right:12px;bottom:12px;width:120px;height:80px;border:1px solid var(--border);background:var(--bg);image-rendering:auto;pointer-events:none;box-shadow:0 4px 14px rgba(0,0,0,.45)}
@keyframes stellar-dash{to{stroke-dashoffset:-20}}@keyframes stellar-ring{0%{r:2;opacity:.9}100%{r:25;opacity:0}}@keyframes stellar-cycle{from{opacity:.1}to{opacity:1}}.stellar-cycle-transition{animation:stellar-cycle .55s ease-out}
@media(prefers-reduced-motion:reduce){.stellar-sector.stellar-contested .stellar-sector-hex{animation:none;stroke-dasharray:none;stroke:var(--orange)}.stellar-secured-ring{animation:none;opacity:.8;stroke-width:1}.stellar-cycle-transition{animation:none}}
@media(max-width:700px){.stellar-map{height:430px;min-height:430px}.stellar-minimap{right:7px;bottom:7px;transform:scale(.85);transform-origin:bottom right}.stellar-map-toolbar button{font-size:.48rem}.stellar-sector-label{font-size:8px}}

.stellar-control-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;box-shadow:0 0 5px currentColor}

.stellar-sector-progress-bg,.stellar-sector-progress{display:none;pointer-events:none}.stellar-map[data-zoom-tier="3"] .stellar-sector-progress-bg{display:block;fill:rgba(78,214,239,.16)}.stellar-map[data-zoom-tier="3"] .stellar-sector-progress{display:block;fill:var(--unit-color,var(--orange))}
.stellar-outpost-access{margin-top:14px;padding:14px;border:1px solid var(--unit-color,var(--orange));background:linear-gradient(135deg,color-mix(in srgb,var(--unit-color,var(--orange)) 15%,var(--panel-2)),var(--panel-2));box-shadow:inset 3px 0 0 var(--unit-color,var(--orange))}.stellar-outpost-access h4{margin:5px 0;color:#eefbff}.stellar-outpost-access p{color:#91acb6;font-size:.72rem;line-height:1.45}.stellar-outpost-access button,.outpost-header button,.outpost-machine button{border:1px solid var(--orange);background:#251c10;color:#ffb45d;padding:10px 14px;font:800 .65rem var(--font-mono2);letter-spacing:.08em;cursor:pointer}.outpost-factory{border:1px solid var(--border);background:var(--bg);min-height:620px}.outpost-header{display:flex;justify-content:space-between;gap:20px;align-items:center;padding:20px;border-bottom:1px solid var(--unit-color,var(--orange));background:linear-gradient(110deg,color-mix(in srgb,var(--unit-color,var(--orange)) 12%,var(--panel-2)),var(--panel-2))}.outpost-header h3{margin:5px 0;color:#f4fbfd}.outpost-header p{margin:0;color:#87a6b2}.outpost-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;min-height:520px}.outpost-layout main{padding:18px}.outpost-layout aside{padding:18px;border-left:1px solid var(--border);background:var(--panel-2)}.outpost-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}.outpost-machine{padding:14px;border:1px solid var(--border);background:#09151b}.outpost-machine.built{border-color:color-mix(in srgb,var(--unit-color,var(--orange)) 70%,var(--border));box-shadow:inset 3px 0 0 var(--unit-color,var(--orange))}.outpost-machine-head{display:flex;justify-content:space-between;color:var(--cyan);font:700 .55rem var(--font-mono2);letter-spacing:.1em}.outpost-machine-head b{color:var(--orange);font-size:.8rem}.outpost-machine h4{margin:10px 0 6px;color:#e9f7fa}.outpost-machine p{min-height:34px;color:#7999a5;font-size:.68rem;line-height:1.45}.outpost-cost{display:grid;gap:4px;margin:10px 0}.outpost-cost span,.outpost-stock div{display:flex;justify-content:space-between;color:#8eabb5;font-size:.65rem}.outpost-cost b,.outpost-stock b{color:#eaf8fb}.outpost-cost .missing,.outpost-cost .missing b{color:#e26868}.outpost-machine button{width:100%}.outpost-machine button:disabled{opacity:.35;cursor:not-allowed}.outpost-stock{display:grid;gap:7px;margin:12px 0 18px}.outpost-stock div{padding-bottom:7px;border-bottom:1px solid rgba(78,214,239,.12)}.outpost-layout aside small,.outpost-layout aside p{display:block;color:#7896a1;font-size:.64rem;line-height:1.45}.outpost-production{padding:10px 18px;border-bottom:1px solid rgba(71,184,120,.35);background:rgba(71,184,120,.09);color:var(--ok);font:700 .67rem var(--font-mono2)}
@media(max-width:800px){.outpost-header{align-items:flex-start;flex-direction:column}.outpost-layout{grid-template-columns:1fr}.outpost-layout aside{border-left:0;border-top:1px solid var(--border)}.outpost-grid{grid-template-columns:1fr}}

.social-online-dot,.unit-online-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px;background:#687780;box-shadow:0 0 0 2px rgba(104,119,128,.12)}.social-online-dot.online,.unit-online-dot.online{background:var(--ok);box-shadow:0 0 8px rgba(71,184,120,.7)}.social-online-dot.offline,.unit-online-dot.offline{background:#687780}.social-row>span:first-child{display:inline-flex;align-items:center}.factory-visit{margin-bottom:12px}.factory-visit-kpis{display:flex;gap:18px;padding:10px 0;color:var(--muted)}.factory-visit-kpis b{color:var(--cyan);margin-left:5px}.factory-visit-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:6px}.factory-visit-row{display:flex;justify-content:space-between;padding:8px 10px;border:1px solid rgba(78,214,239,.14);background:rgba(5,14,20,.65)}.factory-visit-row span{color:var(--muted)}.factory-visit-row b{color:#e9f5f7}
.unit-level-card{margin:14px 0;border-left:3px solid var(--orange)}.unit-level-card>p{max-width:760px;color:#c7d0da}.unit-level-card .social-primary{margin-top:10px}
.duel-console,.mentorship-grid .social-card{border:1px solid var(--border);background:var(--panel-2);padding:20px}.duel-console>header{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.duel-versus{display:grid;grid-template-columns:1fr auto 1fr;gap:18px;align-items:center;margin:22px 0}.duel-versus article{border:1px solid var(--border);padding:18px}.duel-versus article.mine{border-color:var(--cyan)}.duel-versus article:last-child{text-align:right}.duel-versus strong{font:700 28px var(--font-mono2);color:var(--orange)}.duel-meter{height:12px;border:1px solid var(--border);background:var(--bg);overflow:hidden}.duel-meter i{display:block;height:100%;background:linear-gradient(90deg,var(--cyan),var(--ok))}.mentorship-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.mentorship-grid>article:last-child{grid-column:1/-1}.mentorship-status{border-left:3px solid var(--cyan)!important}@media(max-width:700px){.duel-versus{grid-template-columns:1fr}.duel-versus>b{text-align:center}.duel-versus article:last-child{text-align:left}.mentorship-grid{grid-template-columns:1fr}.mentorship-grid>article:last-child{grid-column:auto}.social-nav-primary{overflow-x:auto;flex-wrap:nowrap}.social-nav-primary button{white-space:nowrap}}
.duel-report{margin:18px 0;padding:16px;border:1px solid var(--border);background:var(--bg)}.duel-report-head,.duel-contributors>div>span{display:flex;justify-content:space-between;gap:12px}.duel-report-head>b,.duel-highlight strong,.duel-contributors em{color:var(--orange);font-family:var(--font-mono2);font-style:normal}.duel-contributors{display:grid;grid-template-columns:1fr 1fr;gap:14px}.duel-contributors>div{border-top:1px solid var(--border);padding-top:10px}.duel-contributors h5{margin:0 0 8px;color:var(--cyan)}.duel-contributors>div>span{padding:5px 0}.player-ranking-shell>header{padding:20px;border:1px solid var(--border);background:var(--panel-2);margin-bottom:14px}.player-ranking-shell h3{margin:7px 0}.player-ranking-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.player-ranking-board h4{color:var(--cyan);font-family:var(--font-mono2)}.player-rank-row{display:grid;grid-template-columns:46px minmax(0,1fr) max-content;gap:10px;padding:9px;border-top:1px solid var(--border);align-items:center;min-width:0}.player-rank-row>b{color:var(--orange)}.player-rank-row>strong{font-family:var(--font-mono2);white-space:nowrap}.player-rank-unit{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:8px;row-gap:3px;min-width:0;align-items:baseline}.player-rank-unit>strong{color:#dcecef;white-space:nowrap}.player-rank-unit>b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.player-rank-unit>small{grid-column:2;color:var(--muted);font-size:.68rem;line-height:1.15}.player-rank-row.mine{background:color-mix(in srgb,var(--cyan) 10%,transparent);border-left:2px solid var(--cyan)}@media(max-width:700px){.duel-contributors,.player-ranking-grid{grid-template-columns:1fr}.player-rank-row{grid-template-columns:38px minmax(0,1fr) max-content;gap:8px;padding:10px 8px}.player-rank-unit{column-gap:6px}.player-rank-unit>small{font-size:.64rem}.player-ranking-shell>header{padding:14px}}
/* v3.0.0 — reconnaissance stellaire et mégaprojet saisonnier */
.stellar-scan{margin-top:16px;padding:14px;border:1px solid var(--border);background:var(--panel-2);display:grid;gap:10px}.stellar-scan p{margin:4px 0;color:var(--muted)}.stellar-scan button,.season-contribute button{border:1px solid var(--orange);background:transparent;color:var(--orange);font-family:var(--font-mono2);font-weight:800;padding:10px 12px}.stellar-scan-report{display:grid;gap:6px}.stellar-scan-report>div{display:flex;gap:8px;align-items:center;border-top:1px solid var(--border);padding-top:7px}.stellar-scan-report i{width:9px;height:9px;border-radius:50%}.stellar-scan-report span{display:grid}.stellar-scan-report small{color:var(--muted)}
.season-shell{border:1px solid var(--border);background:var(--bg)}.season-shell>header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:22px;border-bottom:1px solid var(--border);background:linear-gradient(110deg,var(--panel-2),var(--bg))}.season-shell h3{margin:5px 0}.season-shell p{color:var(--muted)}.season-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:14px;padding:14px}.season-layout main{display:grid;gap:10px}.season-phase{border:1px solid var(--border);padding:16px;background:var(--panel-2);opacity:.55}.season-phase.active,.season-phase.completed{opacity:1}.season-phase.active{border-left:4px solid var(--orange)}.season-phase.completed{border-left:4px solid var(--ok)}.season-phase-head{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center}.season-phase-head span,.season-phase-head b{font-family:var(--font-mono2);font-size:.72rem;color:var(--cyan)}.season-phase-head h4{margin:0}.season-resource{display:grid;gap:7px;padding-top:13px;margin-top:13px;border-top:1px solid var(--border)}.season-resource>div:first-child{display:flex;justify-content:space-between;gap:10px}.season-contribute{display:grid;grid-template-columns:1fr auto;gap:8px}.season-contribute input{min-width:0;background:var(--bg);border:1px solid var(--border);color:var(--text);padding:10px}.season-rank{display:grid;grid-template-columns:34px 1fr auto;gap:8px;padding:9px 0;border-bottom:1px solid var(--border)}.season-rank.mine{color:var(--cyan)}
@media(max-width:800px){.season-shell>header{display:grid}.season-layout{grid-template-columns:1fr}.season-phase-head{grid-template-columns:1fr auto}.season-phase-head span{grid-column:1/-1}.season-contribute{grid-template-columns:1fr}.season-contribute button{min-height:44px}}
.unit-directory{margin-top:16px}.unit-directory-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-end;margin-bottom:12px}.unit-directory-head h3{margin:.2rem 0}.unit-directory-head p{margin:.2rem 0;color:var(--text-muted,#a9b1ba)}.unit-directory-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:12px}.unit-directory-card{border:1px solid rgba(78,214,239,.2);background:linear-gradient(145deg,rgba(11,20,25,.94),rgba(7,12,16,.94));padding:15px;border-radius:10px}.unit-directory-card-head{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}.unit-directory-tag{color:var(--orange);font:700 .78rem var(--font-mono2)}.unit-directory-card h4{margin:.25rem 0;font-size:1.1rem}.unit-directory-card p{color:var(--text-muted,#a9b1ba)}.unit-directory-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin:12px 0;font-size:.75rem;color:#8ca1aa}.unit-directory-stats span{border-top:1px solid rgba(255,255,255,.08);padding-top:7px}.unit-directory-stats b{display:block;color:#eef5f7;font-size:.95rem}.unit-directory-card button{width:100%;min-height:40px}.unit-request-pending{color:var(--ok)!important;font-weight:800;font-size:.8rem}.unit-join-requests{margin-top:18px;border-top:1px solid rgba(255,255,255,.08);padding-top:12px}.unit-join-requests h4{font-size:.8rem;letter-spacing:.08em}.unit-join-request{display:flex;justify-content:space-between;gap:10px;padding:10px 0;border-top:1px solid rgba(255,255,255,.06);align-items:center}.unit-join-request small{display:block;color:var(--text-muted,#a9b1ba);margin-top:3px}.unit-join-request button{font-size:.7rem;padding:6px 8px}.social-error{color:#ff6b6b!important;font-weight:800}@media(max-width:700px){.unit-directory-head{display:grid;align-items:stretch}.unit-directory-head .social-search{display:flex}.unit-directory-head .social-search .social-input{min-width:0}.unit-join-request{display:grid}.unit-join-request span{display:flex}.unit-join-request button{flex:1}}
.unit-mode-control{margin-top:18px;padding-top:14px;border-top:1px solid rgba(255,255,255,.08)}.unit-mode-control label{display:block;font-weight:700}.unit-mode-control small{display:block;color:var(--text-muted,#a9b1ba);margin-top:8px}

/* v3.0.0 — carte stellaire : contraste et lecture par niveaux de zoom. */
.stellar-map-frame{border-color:rgba(78,214,239,.22)!important;background:#071014!important;box-shadow:inset 0 0 0 1px rgba(255,255,255,.025)}
.stellar-map{background:radial-gradient(circle at 50% 45%,rgba(31,73,79,.18),transparent 46%),linear-gradient(180deg,#071218,#04090d)!important}
.stellar-map-svg .stellar-star,.stellar-map-svg [fill="url(#stellarGrid)"],.stellar-map-svg [fill="url(#stellarCore)"]{display:none!important}
.stellar-sector-hex{fill:#0c1a20!important;fill-opacity:.72!important;stroke:#28434d!important;stroke-width:1.2!important;filter:none!important}
.stellar-sector.stellar-available .stellar-sector-hex{fill:#0b171c!important;fill-opacity:.55!important;stroke:rgba(78,214,239,.28)!important}
.stellar-sector.stellar-engaged .stellar-sector-hex{fill:rgba(244,154,37,.2)!important;fill-opacity:1!important;stroke:#f49a25!important;stroke-width:2!important}
.stellar-sector.stellar-secured .stellar-sector-hex{fill:color-mix(in srgb,var(--unit-color,var(--ok)) 26%,#071014)!important;fill-opacity:1!important;stroke:var(--unit-color,var(--ok))!important;stroke-width:2.2!important}
.stellar-sector.stellar-locked .stellar-sector-hex{fill:#070d11!important;fill-opacity:.7!important;stroke:#182a31!important}
.stellar-sector-icon{font-size:13px!important;fill:#bde8ee!important}
.stellar-sector-label,.stellar-sector-meta{font-size:7px!important}
.stellar-map[data-zoom-tier="1"] .stellar-sector-icon,.stellar-map[data-zoom-tier="1"] .stellar-sector-label,.stellar-map[data-zoom-tier="1"] .stellar-sector-meta,.stellar-map[data-zoom-tier="2"] .stellar-sector-label,.stellar-map[data-zoom-tier="2"] .stellar-sector-meta{display:none!important}
.stellar-map[data-zoom-tier="2"] .stellar-sector-icon,.stellar-map[data-zoom-tier="3"] .stellar-sector-icon,.stellar-map[data-zoom-tier="3"] .stellar-sector-label,.stellar-map[data-zoom-tier="3"] .stellar-sector-meta,.stellar-sector:hover .stellar-sector-icon,.stellar-sector:focus .stellar-sector-icon,.stellar-sector:focus .stellar-sector-label,.stellar-sector:focus .stellar-sector-meta{display:block!important}

/* v3.0.0 — messagerie privée, interface compacte type conversation. */
.messaging-shell{display:grid;grid-template-columns:minmax(250px,.85fr) minmax(0,1.15fr);gap:12px;min-height:520px}.messaging-thread-panel,.messaging-new,.messaging-chat{border:1px solid rgba(78,214,239,.18);background:linear-gradient(145deg,rgba(10,19,24,.98),rgba(5,11,15,.98));min-width:0}.messaging-panel-head{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:18px;border-bottom:1px solid rgba(255,255,255,.08);background:rgba(78,214,239,.035)}.messaging-panel-head h3,.messaging-new h3{margin:5px 0 0;font:900 1.15rem var(--font-display);letter-spacing:.04em}.messaging-thread-count{display:grid;place-items:center;min-width:28px;height:28px;border:1px solid rgba(78,214,239,.3);border-radius:50%;color:var(--cyan);font:800 .68rem var(--font-mono2)}.messaging-thread-list{display:grid}.messaging-thread{display:grid;grid-template-columns:42px minmax(0,1fr) 18px;gap:10px;align-items:center;width:100%;padding:12px 14px;border:0;border-top:1px solid rgba(255,255,255,.055);background:transparent;color:var(--text);text-align:left;cursor:pointer}.messaging-thread:hover,.messaging-thread.unread{background:rgba(78,214,239,.07)}.messaging-avatar{display:grid;place-items:center;width:38px;height:38px;border:1px solid rgba(78,214,239,.4);border-radius:50%;background:rgba(78,214,239,.1);color:var(--cyan);font:900 .9rem var(--font-mono2)}.messaging-avatar.small{width:38px;height:38px;font-size:.75rem}.messaging-thread-copy{display:grid;gap:4px;min-width:0}.messaging-thread-copy b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.messaging-thread-copy small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:.68rem}.messaging-thread.unread .messaging-thread-copy small{color:var(--cyan);font-weight:800}.messaging-chevron{color:var(--orange);font-size:1.3rem;text-align:right}.messaging-new{padding:22px;align-self:start}.messaging-new>p{margin:8px 0 18px;color:var(--muted);line-height:1.45}.messaging-new [data-search-results]{margin-top:10px}.messaging-chat{display:grid;grid-template-rows:auto auto minmax(260px,1fr) auto;min-height:520px}.messaging-chat-head{display:grid;grid-template-columns:34px 40px minmax(0,1fr) auto;gap:10px;align-items:center;padding:12px 14px;border-bottom:1px solid rgba(255,255,255,.08);background:linear-gradient(90deg,rgba(78,214,239,.08),rgba(244,145,30,.035))}.messaging-back{width:32px;height:32px;border:1px solid var(--border);background:transparent;color:var(--muted);font-size:1.2rem;cursor:pointer}.messaging-contact{min-width:0}.messaging-contact h3{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:900 1rem var(--font-display)}.messaging-contact small{color:var(--muted);font-size:.64rem}.messaging-block-btn{padding:7px 9px;border:1px solid rgba(226,104,104,.5);background:rgba(226,104,104,.08);color:#ff9c9c;font:800 .58rem var(--font-mono2);cursor:pointer;white-space:nowrap}.messaging-block-btn.is-blocked{border-color:rgba(71,184,120,.5);background:rgba(71,184,120,.08);color:#8de7aa}.messaging-blocked-banner{padding:9px 14px;border-bottom:1px solid rgba(226,104,104,.25);background:rgba(226,104,104,.08);color:#ffadad;font-size:.68rem;text-align:center}.messaging-log{display:flex;flex-direction:column;gap:8px;overflow-y:auto;padding:18px 14px;background:radial-gradient(circle at 50% 0,rgba(78,214,239,.04),transparent 45%),#050c10}.messaging-bubble{display:flex;align-items:flex-end;gap:8px;max-width:82%;padding:9px 11px;border:1px solid rgba(255,255,255,.08);border-radius:3px 12px 12px 12px;background:#101c22;color:#dce9ec;font-size:.75rem;line-height:1.4}.messaging-bubble.mine{align-self:flex-end;border-color:rgba(244,145,30,.25);border-radius:12px 3px 12px 12px;background:rgba(244,145,30,.13)}.messaging-bubble time{flex:0 0 auto;color:#77909a;font:600 .56rem var(--font-mono2)}.messaging-compose{display:grid;grid-template-columns:minmax(0,1fr) 42px;gap:8px;padding:10px;border-top:1px solid rgba(255,255,255,.08);background:#091319}.messaging-compose textarea{min-height:42px;max-height:110px;resize:vertical;padding:11px;border:1px solid #29404a;background:#071015;color:var(--text);font:600 .74rem var(--font-display);outline:none}.messaging-compose textarea:focus{border-color:var(--cyan)}.messaging-compose button{min-height:42px;padding:0!important;font-size:1rem}.messaging-compose button:disabled{opacity:.4;cursor:not-allowed}.messaging-empty{margin:auto;color:var(--muted);font-size:.72rem;text-align:center}
@media(max-width:700px){.messaging-shell{display:block;min-height:0}.messaging-new{margin-top:10px;padding:16px}.messaging-thread-panel{min-height:0}.messaging-chat{min-height:calc(100dvh - 190px);margin:0 -2px}.messaging-chat-head{grid-template-columns:32px 36px minmax(0,1fr) auto;padding:10px}.messaging-avatar{width:34px;height:34px}.messaging-log{min-height:300px;padding:14px 10px}.messaging-bubble{max-width:90%}.messaging-block-btn{padding:7px 6px;font-size:.52rem}.cc-multiplayer-panel .social-nav [data-social-view="messages"]{display:none!important}}
 .unit-chat-panel{grid-template-rows:auto minmax(260px,1fr) auto;min-height:520px}.unit-chat-panel .messaging-bubble{flex-wrap:wrap;align-items:flex-start}.unit-chat-panel .messaging-bubble strong{flex:0 0 100%;color:var(--cyan);font-size:.64rem}.unit-chat-panel .messaging-bubble span{min-width:0;flex:1 1 auto}

/* v3.0.0 — mobile : le cockpit et la messagerie occupent toute la largeur. */
@media (max-width:1100px){
  html,body{width:100%;max-width:100%;overflow-x:hidden}
  .cc-shell,.cc-left,.cc-right,.v3-desktop-main,.cc-header-v2,.cc-body,
  .cc-main-panel,.cc-multiplayer-panel,.social-shell,.messaging-shell{
    width:100%!important;max-width:none!important;min-width:0!important;
    box-sizing:border-box;
  }
  .cc-shell,.cc-shell.compact{display:block!important;grid-template-columns:1fr!important}
  .cc-right{display:block!important;grid-column:auto!important;border-left:0!important}
  .v3-desktop-main{display:flex!important;flex-direction:column!important;overflow:visible!important}
  .cc-body{display:flex!important;flex-direction:column!important;overflow:visible!important}
  .cc-main-panel.active{width:100%!important;flex:0 0 auto}
  .cc-multiplayer-panel{overflow:visible!important;padding-left:0!important;padding-right:0!important}
  .social-shell{overflow:visible}
  .messaging-shell{overflow:visible}
}

@media (max-width:700px){
  .messaging-chat{width:100%!important;margin:0!important}
  .messaging-compose{grid-template-columns:minmax(0,1fr) 54px}
  .messaging-compose button{min-width:54px}
}

/* v3.0.0 — usine d'avant-poste : largeur desktop et bandeaux lisibles. */
@media (min-width:1101px){
  #mainPanel-multiplayer.cc-multiplayer-panel,
  #mainPanel-multiplayer .social-shell,
  #mainPanel-multiplayer .social-view.active,
  #mainPanel-multiplayer .outpost-factory{
    width:100%;
    max-width:none;
    min-width:0;
    box-sizing:border-box;
  }
  #mainPanel-multiplayer.cc-multiplayer-panel{align-self:stretch}
  #mainPanel-multiplayer .social-hero{
    height:auto;
    min-height:0;
    box-sizing:border-box;
    padding:20px 22px;
  }
  #mainPanel-multiplayer .social-hero>div{min-width:0;padding:2px 0}
  #mainPanel-multiplayer .social-hero h2{line-height:1.15;margin:.35rem 0 .45rem}
  #mainPanel-multiplayer .social-hero p{line-height:1.35}
  #mainPanel-multiplayer .social-notif-btn{flex:0 0 auto}
  #mainPanel-multiplayer .outpost-factory{display:flex;flex-direction:column}
  #mainPanel-multiplayer .outpost-header{
    box-sizing:border-box;
    min-height:104px;
    padding:24px 26px;
    align-items:flex-start;
  }
  #mainPanel-multiplayer .outpost-header>div{flex:1 1 auto;min-width:0;padding-top:1px}
  #mainPanel-multiplayer .outpost-header h3{line-height:1.2;margin:7px 0 6px}
  #mainPanel-multiplayer .outpost-header p{line-height:1.45}
  #mainPanel-multiplayer .outpost-header button{flex:0 0 auto;margin-top:1px}
  #mainPanel-multiplayer .outpost-layout{flex:1 1 auto;width:100%;min-width:0}
}

/* v3.0.0 — recentrage de la flèche de retour de la messagerie. */
.messaging-back{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  box-sizing:border-box;
  padding:0;
  line-height:1;
  text-align:center;
  font-family:Arial,sans-serif;
  font-size:1.35rem;
}

/* v3.0.0 — la Carte stellaire doit défiler dans le cockpit. */
@media (min-width:981px){
  #mainPanel-multiplayer.cc-main-panel.active{
    display:block!important;
    flex:1 1 auto!important;
    min-height:0!important;
    height:auto!important;
    overflow-y:auto!important;
    overflow-x:hidden!important;
  }
  #mainPanel-multiplayer .social-shell{
    display:block!important;
    height:auto!important;
    min-height:100%!important;
  }
  #mainPanel-multiplayer .social-content,
  #mainPanel-multiplayer .social-view.active,
  #mainPanel-multiplayer .stellar-shell{
    min-height:0!important;
    height:auto!important;
  }
}
