// chapters-meta.jsx, Ashfall master index
// All 22 chapters: metadata, audio, synopsis. Full prose lives in chapters-acte1.jsx etc.

const BOOK = {
  title: "Ashfall",
  author: "your obsessed boyfriend",
  publisher: "Éditions de la Marge Noire",
  warning: "Lecture déconseillée à l'âme fragile.",
};

// ── content warnings (page after halftitle) — pas de spoiler de fin
const CONTENT_WARNINGS = [
  "Un homme s'arrange pour qu'une femme n'ait plus d'autre choix que lui",
  "Elle finit par le supplier de rester. Et elle a raison de le faire",
  "Sa respiration est contrôlée par celle d'un autre, jusqu'au vertige",
  "Des mots tendres utilisés pour mieux briser quelqu'un",
  "Une main autour de sa gorge, qu'elle finira par réclamer",
  "Un viol qui a eu lieu vingt-trois ans plus tôt, et qui détruit tout",
  "Une femme tue un homme avec un seul coup de feu, calmement",
  "Le père de l'héroïne a été égorgé par la mafia il y a douze ans",
  "Du sang sur du marbre noir. Plus d'une fois",
  "Personne ici ne sait plus ce qui est de l'amour et ce qui est de la haine",
];

// ── candle scent zones (6 senteurs au total, mappées par zones de chapitres)
// Chaque bougie couvre 3 à 4 chapitres. Allumez-en une nouvelle quand vous arrivez à la zone suivante.
const SCENTS = [
  {
    id: "cipresso",
    name: "Cipresso Nero",
    range: [1, 4],
    notes: "Cyprès noir · poivre séchuanais · métal poli · papier neuf",
    wax: "#0a0d1a",
    glow: "#5a78b8",
    moment: "L'entrée dans la cage. La géométrie froide.",
  },
  {
    id: "cuir",
    name: "Cuir Fumé",
    range: [5, 8],
    notes: "Cuir noir · oud · cèdre brûlé · tabac sec",
    wax: "#1a0e08",
    glow: "#a86a3a",
    moment: "La reconnaissance mutuelle. Le souffle qui se synchronise.",
  },
  {
    id: "jasmin",
    name: "Jasmin Nuit",
    range: [9, 12],
    notes: "Jasmin sambac · ambre noir · miel fumé · muscade",
    wax: "#1a0a1f",
    glow: "#8a4a92",
    moment: "La danse. Le manque. La louange toxique.",
  },
  {
    id: "cendre",
    name: "Cendre de Mer",
    range: [13, 16],
    notes: "Vétiver mouillé · sel · suie · iode · béton après la pluie",
    wax: "#0e1216",
    glow: "#6a8488",
    moment: "La Cosca. La mère. La crue qui passe la digue.",
  },
  {
    id: "cobalt",
    name: "Cobalt",
    range: [17, 20],
    notes: "Myrrhe · cardamome noire · encens · iris bleu",
    wax: "#06091a",
    glow: "#3a6cd8",
    moment: "Renata. Le sang Marziale. Vingt-deux minutes.",
  },
  {
    id: "cinnamon-ash",
    name: "Cinnamon Ash",
    range: [21, 22],
    notes: "Labdanum · cannelle brûlée · cèdre rouge · cuir tanné au feu",
    wax: "#1f0608",
    glow: "#c8442a",
    moment: "Le faux. Le retournement. La cage inversée.",
  },
];

const scentForChapter = (n) => SCENTS.find(s => n >= s.range[0] && n <= s.range[1]);

const ACTS = [
  { id: 1, name: "Le Vide et le Filet",     range: [1, 6]  },
  { id: 2, name: "L'Asymétrie Dansante",    range: [7, 14] },
  { id: 3, name: "La Consommation du Chaos", range: [15, 22] },
];

// audio map → uploads/<file>
const AUDIO = {
  1:  "Concrete Silence.mp3",
  2:  "Glasslight Rationing.mp3",
  3:  "Watched Pulse.mp3",
  4:  "Cold Circuit.mp3",
  5:  "Glitch Silence.mp3",
  6:  "Pink Waiting.mp3",
  7:  "Salt Lamp Halo.mp3",
  8:  "Servo Lactation.mp3",
  9:  "Circuit Pulse.mp3",
  10: "Endless Overtone.mp3",
  11: "Cedar Cello Grief.mp3",
  12: "Warm Light Escape.mp3",
  13: "Cobalt Countdown.mp3",
  14: "Cedar Cello Grief (1).mp3",
  15: "__Glitch Rivulets__.mp3",
  16: "Weightless Helm.mp3",
  17: "Blue Bilge Choir.mp3",
  18: "Blue Choirglass.mp3",
  19: "Ash Dawn Transit.mp3",
  20: "Pink Waiting (1).mp3",
  21: "FINAL.mp3",
  22: "FINAL 2.mp3",
};

const audioSrc = (n) => `uploads/${encodeURIComponent(AUDIO[n])}`;

const ROMAN = ["", "I","II","III","IV","V","VI","VII","VIII","IX","X","XI","XII","XIII","XIV","XV","XVI","XVII","XVIII","XIX","XX","XXI","XXII"];

const actOf = (n) => n <= 6 ? 1 : n <= 14 ? 2 : 3;
const actLabel = (n) => `Acte ${["I","II","III"][actOf(n)-1]} · ${ACTS[actOf(n)-1].name}`;

// ── 22 chapters
const CHAPTERS = [
  // ─── ACTE I ───
  {
    n: 1,
    name: "L'Architecture du Vide",
    epigraph: "Le vide n'est pas une absence. C'est une méthode.",
    audioTitle: "Concrete Silence",
    soundDesign: "Réverbération minérale. Le frottement d'une plume sur papier épais. Le tic-tac réverbéré d'une horloge suisse. L'isolation phonique d'un habitacle de très haut de gamme.",
    spice: "Viscéral bas. Gorge nouée. Tachycardie d'anticipation. Le « spice » naît du fait que personne ne touche personne.",
    synopsis: [
      "Sasha entre dans le bureau monumental de Julian Vance pour signer le contrat qui sauvera son cabinet d'une faillite déjà programmée. Le silence est calibré, le marbre noir aligné au millimètre, et l'homme qui l'attend à l'autre bout de la table ne se lève pas.",
      "Julian applique un détachement insoutenable. Il lui offre une porte de sortie empoisonnée : <em>« Vous êtes libre de partir. »</em> Le décor lui répond pour elle. On n'organise pas un tel vide pour quelqu'un que l'on est prêt à laisser sortir.",
      "Elle avance d'elle-même. Elle prend la plume. Elle signe, annexe A, annexe B, annexe C, paragraphe douze. Elle s'enferme volontairement dans la cage pour mériter un seul regard d'assentiment.",
      "Et ce qu'elle ne sait pas encore, c'est qu'en signant, elle vient d'auditer la première société-écran d'un empire dont elle deviendra, ce soir, l'arme principale."
    ],
    written: true,
  },
  {
    n: 2,
    name: "La Privation Sensorielle",
    epigraph: "Une cage parfaite n'a pas de barreaux. Elle a un climat.",
    audioTitle: "Glasslight Rationing",
    soundDesign: "Le bourdonnement à la limite de l'audible de la VMC haute-pression. Le glissement automatique des baies vitrées. Le claquement sec d'une serrure biométrique qui apprend votre peau.",
    spice: "Paranoïa naissante. Frissons d'inconfort. La nudité psychologique d'un corps observé par le mobilier.",
    synopsis: [
      "Vance Capital installe Sasha dans un appartement de fonction au cinquante-deuxième étage de la tour Apex, surplombant le port de Marseille. Tout est parfait. Tout est trop parfait.",
      "Les baies vitrées ne s'ouvrent pas. La porte d'entrée se verrouille par lecture biométrique. La cuisine est fournie, mais aucun couteau n'y excède dix centimètres. La température suit ses humeurs avec une exactitude qui la met mal à l'aise.",
      "À trois heures du matin, elle se tient devant le verre pare-balles et regarde, en contrebas, un yacht noir mouillé au quai 7. Un fanion blanc bat au mât. Elle reconnaît le sceau des Marziale.",
      "Elle comprend qu'elle n'est pas observée par des caméras. Elle est observée par <em>le design</em>."
    ],
    written: true,
  },
  {
    n: 3,
    name: "La Première Transgression",
    epigraph: "Le compliment d'un prédateur est une lame avec une poignée en velours.",
    audioTitle: "Watched Pulse",
    soundDesign: "Le souffle bas dans une oreille, trop près. Le frottement d'une chaise sur du béton ciré. L'écho mat de talons dans un couloir privé d'air.",
    spice: "Tachycardie sévère. Hypoxie courte. Le premier « Good girl » murmuré à dix centimètres de la mâchoire.",
    synopsis: [
      "On confie à Sasha une réconciliation fiscale ennuyeuse, une société-écran cotée aux Bermudes, du nom de <em>Marziale Holdings (BVI)</em>. Elle reconnaît immédiatement la signature. Elle introduit, dans son rapport, une erreur volontaire. Une virgule décalée. Un test.",
      "Julian la convoque dans l'heure. Il ne hausse pas la voix. Il ne lui adresse pas le moindre reproche. Il contourne le bureau, vient se poster derrière elle, et corrige la virgule à la main, sa manche effleurant sa nuque sans la toucher.",
      "Avant qu'elle ne sorte, il se penche, et son souffle, lent, lourd, glisse contre son oreille : <em>« Good girl. »</em>",
      "Dans le couloir, elle doit s'appuyer contre le mur pour respirer. La société-écran qu'elle vient d'auditer appartient à la Cosca Marziale. Julian le sait. Il le lui a montré, exprès."
    ],
    written: true,
  },
  {
    n: 4,
    name: "L'Étude des Fissures",
    epigraph: "Pour démonter un homme, il faut d'abord mesurer sa peur de désordre.",
    audioTitle: "Cold Circuit",
    soundDesign: "Le cliquetis régulier d'un clavier mécanique dans une chambre noire. Le tic-tac (toujours) d'une horloge suisse à travers le mur. Le bourdonnement froid du verre.",
    spice: "Frissons de réalisation. Adrénaline calme. L'ivresse contenue de la chasseresse qui prend conscience qu'elle chasse à son tour.",
    synopsis: [
      "Sasha commence à étudier Julian comme on étudie un sujet : objectivement. Elle note. Sa montre alignée à 9h17 à la minute près chaque matin. Quatre centimètres entre tout objet et le bord de sa table. Une seule cuillère dans son tiroir, jamais deux. Il n'ouvre jamais une porte avec la main droite.",
      "Le pattern dessine, sous la surface, une géographie de la peur. Il a besoin du contrôle plus qu'il n'aime l'exercer. Sa froideur est une digue. Et toute digue cache une crue.",
      "Dans les métadonnées de son calendrier privé, Sasha trouve un bloc récurrent : tous les mardis, de 03h18 à 03h40. Vingt-deux minutes. Libellé d'un seul caractère : <em>F.</em>",
      "Vingt-deux minutes. Elle ne sait pas encore ce que cela signifie. Mais son corps, lui, a déjà tressailli."
    ],
    written: true,
  },
  {
    n: 5,
    name: "Le Hasard N'Existe Pas",
    epigraph: "La pire des cages est celle qu'on a construite pour vous, et que vous trouvez confortable.",
    audioTitle: "Glitch Silence",
    soundDesign: "Une respiration qui se bloque, longtemps. Un dossier qui tombe sur le marbre. Le silence d'un cœur qui réécrit son rythme à voix basse.",
    spice: "Chute de tension artérielle. Sueur froide. Vertige. La haine pure qui se confond, sans qu'on puisse la dissocier, avec la première vraie pulsation de désir.",
    synopsis: [
      "Sasha plonge, à 02h00 du matin, dans les arborescences corporate de Vance Capital. Elle remonte la chaîne des holdings, des trusts, des shells. Douze couches. Treize. Quatorze.",
      "Et elle trouve. Sa propre ruine, six mois plus tôt, n'a pas été l'œuvre de la Cosca Marziale. C'est Julian qui a racheté sa dette à vil prix avant même que son cabinet n'ait conscience de l'incendie. C'est lui qui a fermé les portes une à une. C'est lui qui l'a déposée, ruinée, à la sienne.",
      "Elle ferme l'écran. Son visage n'a pas bougé. Elle n'éprouve ni colère ni peur. Elle éprouve une chose plus dangereuse : <em>elle est vue</em>. Pour la première fois depuis six mois, quelqu'un a calibré le monde autour d'elle avec assez de précision pour qu'elle se sente exister.",
      "Elle décide, à 02h41, de jouer. La cage a deux serrures, désormais. Elle vient de copier la sienne."
    ],
    written: true,
  },
  {
    n: 6,
    name: "Le Silence Complice",
    epigraph: "Apprendre à respirer comme son geôlier, c'est commencer à diriger l'air.",
    audioTitle: "Pink Waiting",
    soundDesign: "Un violoncelle lent, très bas, à la limite du seuil de perception. Le frottement de la soie contre un costume sur mesure. Le silence préméditatif d'une joueuse d'échecs.",
    spice: "Adrénaline froide. La paix d'avant-bataille. Une chaleur basse et continue à la base du crâne.",
    synopsis: [
      "Le lendemain matin, 8h47, Sasha entre dans le bureau de Julian avec un thé qu'il n'a pas demandé. Elle le pose à exactement quatre centimètres de sa main droite. Elle ne le regarde pas. Elle s'éloigne sans un mot.",
      "Il ne touche pas le thé. Il ne le déplace pas. Il ne dit rien. Mais le soir, en rentrant, Sasha trouve sur sa propre table, à exactement quatre centimètres de son carnet, une tasse vide et soigneusement essuyée. La géométrie est devenue bilatérale.",
      "Plus tard, dans la nuit, son téléphone vibre. Une seule fois. Message chiffré, expéditeur inconnu : <em>Vous avez vingt-deux jours., R. M.</em>",
      "Renata Marziale a senti la combustion à distance. Sasha ne répond pas. Elle sourit, légèrement, dans le noir."
    ],
    written: true,
  },

  // ─── ACTE II ───
  {
    n: 7,
    name: "La Feinte de la Soumission",
    epigraph: "La docilité totale est l'arme la plus violente d'une proie intelligente.",
    audioTitle: "Salt Lamp Halo",
    soundDesign: "Le frôlement de la soie contre un sur-mesure. Deux respirations qui apprennent, lentement, à se mentir l'une à l'autre.",
    spice: "Tension musculaire chez Julian (le prédateur troublé). Chaleur basse et continue chez Sasha, liée au pouvoir qu'elle vient de découvrir.",
    synopsis: [
      "Sasha devient la proie parfaite. Elle anticipe les besoins de Julian avant qu'ils ne se forment. Elle apporte le café à la seconde près. Elle aligne ses dossiers à quatre centimètres. Elle baisse les yeux quand il parle. Elle calque, sans qu'il s'en aperçoive d'abord, sa propre respiration sur la sienne.",
      "Au cinquième jour, il s'aperçoit. Il accélère son souffle d'un battement pour vérifier. Elle le suit. Il ralentit. Elle le suit. Il s'arrête une fraction de seconde, juste pour voir. Elle s'arrête avec lui.",
      "Il comprend qu'elle l'étudie. Il ne dit rien. Mais ce soir-là, dans son propre bureau, vidé, il pose sa main sur le marbre noir et la laisse là, immobile, pendant onze minutes."
    ],
  },
  {
    n: 8,
    name: "L'Edging Spatial",
    epigraph: "Il y a des intrusions qui ne franchissent jamais la peau, et qui font davantage de dégâts.",
    audioTitle: "Servo Lactation",
    soundDesign: "Les respirations qui se superposent et se désynchronisent. La climatisation qui se coupe, comme par accident, au moment exact où il se tient le plus près d'elle.",
    spice: "Breathplay intense. Hypoxie légère. Pupilles dilatées. Le besoin viscéral, neurochimique, d'un contact qui ne viendra pas.",
    synopsis: [
      "Julian entre dans le bureau de Sasha sans prévenir. Il se tient debout, derrière elle, à neuf centimètres exactement. Il ne la touche pas. Il pose une main contre le dossier de sa chaise. Pas sur sa peau, sur le cuir froid.",
      "Il lui pose des questions auxquelles il connaît déjà les réponses. Il l'oblige à les formuler à voix haute. Il l'oblige à formuler une peur, une vraie, intime, qu'elle n'a jamais énoncée à personne.",
      "Quand elle finit, il s'écarte. Il sort sans un mot. La porte se referme sans bruit. Elle reste assise une heure. Elle n'arrive pas, ce soir-là, à dormir avant l'aube. Elle se rend compte, au quatrième passage devant le miroir, qu'elle cherche un témoin."
    ],
  },
  {
    n: 9,
    name: "Le Piège de l'Égo",
    epigraph: "La possessivité froide est plus brûlante que toute jalousie chaude.",
    audioTitle: "Circuit Pulse",
    soundDesign: "Un stylo posé un peu trop fort. Une porte refermée sans un mot. La sonnerie sèche d'un téléphone qu'on ne décroche jamais devant elle.",
    spice: "Torsion d'estomac. Pulsation à la base de la nuque. Un froid précis qui s'installe entre les omoplates de Sasha quand elle réalise ce qu'elle a déclenché.",
    synopsis: [
      "Sasha glisse, en passant, en parlant à un collègue, qu'un certain Marcus, à la division new-yorkaise, l'a trouvée <em>« fascinante »</em> en visioconférence. Le mot n'est pas innocent. Il a été choisi.",
      "Julian ne réagit pas. Pas un sourcil. Pas une syllabe. Il termine la réunion. Il rentre chez lui à l'heure habituelle. Il dort, peut-être.",
      "Le lendemain à 11h04, la division new-yorkaise annonce une restructuration. Le poste de Marcus est supprimé. Le mail, signé Julian, fait douze lignes et n'évoque que des « priorités stratégiques ».",
      "Sasha le lit deux fois. Elle ne sourit pas. Mais quelque chose, derrière son sternum, vient de comprendre l'amplitude exacte de la cage."
    ],
  },
  {
    n: 10,
    name: "La Punition Silencieuse",
    epigraph: "L'absence d'un prédateur est plus dangereuse que sa présence.",
    audioTitle: "Endless Overtone",
    soundDesign: "L'écho des pas solitaires de Sasha. Le vide oppressant d'un open space la nuit. Le bourdonnement éternel d'un drone de basse, comme une caverne qui respire.",
    spice: "Crise de sevrage neurochimique. Tremblements. Insomnie. La douleur précise, presque chimique, de l'absence.",
    synopsis: [
      "Julian disparaît. Six jours. Pas un mail, pas une notification, pas une trace. Son bureau, intact, n'est pas occupé. Sa montre n'apparaît plus dans le journal d'accès.",
      "Sasha ne mange plus. Elle dort dans son bureau, une fois, sur le canapé en cuir. Elle se surprend, au quatrième jour, à entrer dans le bureau de Julian alors qu'il est vide, à respirer l'air, à toucher la table, quatre centimètres, et à repartir sans avoir cherché quoi que ce soit.",
      "Elle comprend. Elle est en manque. Elle a une crise de sevrage pour un homme qui ne l'a jamais touchée. Et plus elle comprend, plus le manque s'aiguise."
    ],
  },
  {
    n: 11,
    name: "Le Bris de Glace",
    epigraph: "Mendier, pour une analyste, c'est avouer qu'une équation n'a qu'une solution.",
    audioTitle: "Cedar Cello Grief",
    soundDesign: "Des éclats de voix dans un ascenseur. Un murmure dominant qui efface tout. Le ding très doux d'un bouton « stop entre-étages ».",
    spice: "Tachycardie extrême, rougeur brûlante au visage. La reddition verbale, formulée à voix haute, et la décharge qui suit.",
    synopsis: [
      "Julian revient un mardi sans préavis. Sasha le croise dans l'ascenseur, eux deux, personne d'autre. Elle appuie sur le bouton de stop entre-étages.",
      "Elle l'attaque, calmement d'abord, puis sa voix se brise. Six jours. Pourquoi. Comment. Le silence n'est plus une réponse.",
      "Julian, sans bouger, sans hausser le ton, retourne l'attaque en trente secondes. Il l'oblige à formuler ce qu'elle vient d'avouer en posant le bouton stop. Il l'oblige à dire qu'elle a eu besoin de lui. Il l'oblige à le demander.",
      "Elle le demande. Elle le supplie, à voix très basse, dans un ascenseur à l'arrêt entre le 26ᵉ et le 27ᵉ étage. La récompense ne vient pas tout de suite."
    ],
  },
  {
    n: 12,
    name: "La Récompense Toxique",
    epigraph: "Une louange murmurée au bon moment fait plus de dégâts qu'un coup.",
    audioTitle: "Warm Light Escape",
    soundDesign: "Des murmures bas, continus, presque hypnotiques. Un battement de cœur lent qui finit par s'aligner sur le sien.",
    spice: "Décharge de dopamine. Chaleur réconfortante de l'appartenance qui noie la rationalité. Le « Praise Kink » majeur.",
    synopsis: [
      "L'ascenseur redémarre. Julian la suit jusqu'à son appartement sans dire un mot. Il la fait asseoir au bord du lit. Il s'agenouille devant elle, la seule fois du roman.",
      "Et il la couvre. Pas de baisers, de mots. <em>Tu es parfaite. Tu m'appartiens. Tu n'as plus besoin du monde. Tu n'as plus besoin que de cela. Ici. Bonne fille.</em> Les murmures viennent par vagues, lentes, précises, calibrées à la seconde près sur sa respiration.",
      "Elle s'effondre. Pas dans ses bras, dans son langage. La frontière entre la haine et l'addiction n'existe plus. Elle l'aime. Elle le hait. Elle ne sait plus. Elle ne <em>veut</em> plus savoir.",
      "Julian se relève à l'aube. Il n'a pas posé la main sur elle une seule fois."
    ],
  },
  {
    n: 13,
    name: "La Cosca",
    epigraph: "On ne montre une arme qu'à quelqu'un dont on sait déjà qu'il appuiera sur la détente.",
    audioTitle: "Cobalt Countdown",
    soundDesign: "Le clic d'un coffre. Le silence pesant d'une pièce sans fenêtres. Un compteur électronique qui démarre, et qui ne s'arrêtera plus avant la fin du livre.",
    spice: "Adrénaline froide. Le frisson précis de comprendre que l'on est, pour la première fois, l'égale du prédateur.",
    synopsis: [
      "Julian emmène Sasha au sous-sept de la tour Apex. Il ouvre un coffre cylindrique de soixante centimètres de diamètre, biométrie rétinienne, rétine plus pouls, et en sort une toile.",
      "Un Caravage. <em>Saint Sébastien soigné par Irène</em>, 1606, volé à l'église San Tomaso de Naples en 1969. Détenu depuis cinquante-sept ans par la Cosca Marziale comme collatéral de leurs dettes les plus profondes.",
      "Julian lui dit tout. Le braquage. Le Livre Noir des Marziale. La clé crypto qui ouvre quatre milliards de fonds blanchis. Vingt-deux minutes pendant la <em>Festa di San Salvatore</em>. Une équipe de six. Elle, l'opératrice. Elle, le cerveau du calcul en temps réel.",
      "Elle accepte. Elle ne lui dit pas qu'elle a déjà trouvé Marziale Holdings (BVI). Elle ne lui dit pas qu'elle a reçu un message signé R. M."
    ],
  },
  {
    n: 14,
    name: "La Mère de l'Architecte",
    epigraph: "Toute architecture cache un cadavre. Celle de Julian en abrite deux.",
    audioTitle: "Cedar Cello Grief (1)",
    soundDesign: "Le bruissement d'un microfilm dans une archive municipale. Une respiration qui se bloque, longtemps. Le retour d'un violoncelle, plus grave cette fois.",
    spice: "Un froid d'archive. Une nausée lente. La pitié, la première pitié du roman, qui se mêle, malgré Sasha, à quelque chose de plus possessif.",
    synopsis: [
      "Sasha cherche. Julian n'a pas de photos de sa mère. Pas une. Aucune mention dans aucun profil public. Comme si Mariana Vance n'avait jamais existé.",
      "Elle finit par trouver, dans les archives municipales de Marseille, une notice nécrologique d'une ligne, datée de vingt-deux ans plus tôt. <em>Mariana Vance, 33 ans, décédée. Cause non divulguée.</em> Elle recoupe la date avec les rapports de police, avec les comptes-rendus du tribunal de Palerme, avec les minutes scellées d'un procès Marziale jamais médiatisé.",
      "Don Marziale a tué la mère de Julian. Vingt-deux ans plus tôt. À mains nues. Pour une dette qui n'était pas la sienne.",
      "Le braquage n'est pas une stratégie. C'est une vendetta. Et Julian le lui a caché, non pas par pudeur. Par calcul. Parce qu'il n'a pas confiance en elle, pas encore, à ce niveau-là. Sasha referme le microfilm. Elle ne dit rien à personne. Mais quelque chose, en elle, vient de basculer du côté du prédateur."
    ],
  },

  // ─── ACTE III ───
  {
    n: 15,
    name: "La Rupture du Masque",
    epigraph: "Un homme parfaitement calibré n'a qu'une seule fissure. Trouve-la, et il s'effondre.",
    audioTitle: "__Glitch Rivulets__",
    soundDesign: "Un verre brisé contre du marbre. Un téléphone qui sonne dans le vide, plusieurs fois. Une alarme désynchronisée qui hurle pendant six secondes avant qu'on ne l'étouffe.",
    spice: "Vertige de désorientation. L'odeur précise de la peur sur une peau qui n'en a jamais émis. Le prédateur, pour la première fois, mis à nu.",
    synopsis: [
      "La Cosca a senti quelque chose. Tomasso Marziale fait sauter une opération de trade chez Vance, pas pour la détruire, pour <em>l'humilier</em>. Trois milliards évaporés en quatre-vingt-dix minutes. Le coût logistique du braquage, jusque-là parfaitement provisionné, triple.",
      "Pour la première fois, Julian ne réagit pas avec calme. Il fait sauter un verre de cristal contre le marbre noir. Il ne crie pas. Il ne s'excuse pas. Il reste là, debout, le souffle coupé, à fixer le sol.",
      "Sasha le voit. Pour la première fois, elle voit le prince dépouillé. Et ce qu'elle ressent en le voyant n'est pas de la pitié. C'est plus chaud que cela. Plus précis. Plus affamé."
    ],
  },
  {
    n: 16,
    name: "L'Offensive de la Proie",
    epigraph: "La laisse change de main. Personne ne dit rien. Mais tout le monde a senti le poids passer.",
    audioTitle: "Weightless Helm",
    soundDesign: "Le rythme régulier d'un clavier mécanique de très haut de gamme. Le bruit sec d'un dossier qu'on referme. Une respiration de Julian qui, pour la première fois, suit celle de Sasha.",
    spice: "Adrénaline pure. L'ivresse précise de tenir la laisse de son propre geôlier. Une chaleur basse qui ne lâche pas la nuque.",
    synopsis: [
      "Sasha prend l'initiative. Elle utilise un truc forensique de sa vie d'avant, un re-routage cross-border que personne au sein de Vance Capital ne maîtrise, pour faire transiter le sabotage des Marziale à travers leur propre banque de compensation. À 04h22, la Cosca déclenche un audit automatique sur elle-même.",
      "Julian la regarde travailler. Pendant six heures, il ne dit rien. Pendant six heures, il ne quitte pas la pièce. Pendant six heures, il respire à son rythme à elle.",
      "À l'aube, il la regarde, pour la deuxième fois depuis le début du livre, comme une chose qu'il vient de comprendre. Et Sasha, à cet instant, sait qu'elle vient de gagner la première manche."
    ],
  },
  {
    n: 17,
    name: "Renata",
    epigraph: "Une femme qui te regarde dans les yeux pendant trois secondes peut faire plus de dégâts qu'un homme qui te ruine pendant six mois.",
    audioTitle: "Blue Bilge Choir",
    soundDesign: "L'écho cathédrale d'un musée fermé. Le claquement net de talons sur du marbre vénitien. Une voix féminine, très basse, qui parle aussi calmement qu'un homme qui sait.",
    spice: "Adrénaline glacée. Une chaleur latérale qu'elle ne prévoyait pas. La première fois qu'une autre main que celle de Julian la fait respirer trop court.",
    synopsis: [
      "Au Musée Cantini de Marseille, vingt minutes avant la fermeture. Renata Marziale apparaît à côté de Sasha devant un Bacon. Trente-six ans. Cheveux noirs coupés très court. Veste de tailleur ouverte sur une peau dorée par le sel.",
      "Elle sait tout. Le braquage. La date. L'équipe. La séquence. Elle n'a pas l'intention de l'arrêter. Elle a une condition très précise : Sasha part avec elle, la veille du braquage. Identité neuve. Trois millions d'avance. Un appartement à Lisbonne.",
      "Sasha demande pourquoi. Renata sourit, très peu. Elle pose deux doigts sur le poignet de Sasha, exactement sur l'artère, et y tient le pouls pendant onze secondes silencieuses. Le pouls monte. Renata ne dit rien. Puis : <em>« Parce que tu es la seule chose dans la vie de Julian qu'il ne possède pas réellement. Et parce que je veux te posséder avant lui, moi, juste pour voir ce que cela fait. »</em>",
      "Sasha ne répond pas. Mais quand Renata s'écarte, la pulpe de ses deux doigts laisse, sur la peau du poignet, une trace de chaleur qui mettra trois heures à disparaître."
    ],
  },
  {
    n: 18,
    name: "Le Sang Marziale",
    epigraph: "La vérité n'est pas un coup. La vérité est une asphyxie.",
    audioTitle: "Blue Choirglass",
    soundDesign: "Le silence qui suit une révélation. Une respiration qui se brise, la sienne, pour la première fois. Un verre fendu qui refuse d'éclater, longtemps.",
    spice: "L'effondrement d'un système. La chaleur, soudain, immense, désordonnée, d'une femme qui découvre qu'elle est, pour la première fois, plus stable que l'homme en face d'elle.",
    synopsis: [
      "Dans le dossier de Renata, scellé au fond de l'enveloppe, un test ADN. Julian et Renata sont demi-frère et sœur. Don Marziale, vingt-trois ans plus tôt, avant de tuer Mariana Vance, l'a violée. Julian est, génétiquement, un Marziale.",
      "L'identité de Julian, l'architecte du vide, le contraire absolu de la Cosca, repose sur un mensonge biologique. Sa vengeance est, à la lettre, une auto-destruction.",
      "Ce soir-là, Sasha le lui dit. Elle le regarde, dans son propre bureau, dans son propre vide, lire la feuille. Elle voit, en temps réel, ses constantes vitales se désorganiser. Sa respiration, la seule chose qu'il ait jamais contrôlée, se brise.",
      "Pour la première fois du roman, c'est elle qui respire pour deux. Et elle sait, en respirant pour lui, qu'elle vient de gagner la cage."
    ],
  },
  {
    n: 19,
    name: "Vingt-Deux Minutes",
    epigraph: "Tout plan parfait se brise à la quatorzième minute. C'est dans la quinzième que se révèle qui aime qui.",
    audioTitle: "Ash Dawn Transit",
    soundDesign: "Un compte à rebours électronique qui ne s'éteint plus. Le souffle d'un masque tactique. Un coup de feu étouffé par un silencieux haut de gamme, sec, comme un livre qu'on referme.",
    spice: "Apnée. Tachycardie partagée. Une chaleur de combat qui n'a plus rien à voir avec ce qui les a faits.",
    synopsis: [
      "Festa di San Salvatore. Le compound Marziale, ouvert pour la première fois en quinze ans. Six opérateurs. Vingt-deux minutes. Trois cibles : le Livre Noir, le Caravage, la clé crypto.",
      "Minute 0 : Sasha pénètre par le quai 7 sous l'eau, équipement militaire, oxygène six minutes. Minute 4 : porte intérieure ouverte. Minute 9 : coffre principal en ligne de mire. Minute 12 : Julian, sur place, déjoue la sécurité biométrique avec une rétine artificielle.",
      "Minute 14 : Tomasso Marziale entre dans la pièce. Il n'aurait pas dû y être. Le plan était parfait. Le plan, comme toujours, oubliait Tomasso.",
      "À 14:11, Sasha tire. Une seule fois. Calme. Précise. Tomasso s'effondre. Julian est blessé à l'épaule. À 21:58, ils sortent avec les trois cibles. À 22:00, le compound est en flammes, pas par eux. Par Renata."
    ],
  },
  {
    n: 20,
    name: "La Trahison",
    epigraph: "Je reviens, dit-elle. Personne, depuis Pénélope, n'a su ce que voulait dire « revenir ».",
    audioTitle: "Pink Waiting (1)",
    soundDesign: "Le bruit d'un sas qui se ferme. Une respiration qui s'éloigne. Le silence d'une chambre d'hôpital improvisée dans un appartement de fonction.",
    spice: "La première fois, la <em>seule</em> fois, que Sasha effleure les lèvres de Julian. Un baiser de trois secondes. Aucune autre peau ne se touche.",
    synopsis: [
      "Sasha amène Julian dans une planque à dix kilomètres du compound. Elle stoppe l'hémorragie. Elle le branche à une perfusion. Elle prépare la suite.",
      "Avant de partir, elle se penche. Elle pose ses lèvres contre les siennes pendant trois secondes. Aucun autre point de contact. Elle lui dit, très bas, dans l'oreille : <em>« Je reviens. »</em>",
      "Elle prend les trois cibles. Elle ne va pas voir Renata. Elle ne va pas à l'aéroport. Elle va à un coffre, dans le port de Marseille, qu'elle contrôle depuis quatre ans.",
      "Elle dépose le Livre Noir. La clé crypto. Et le Caravage. Elle referme. Elle disparaît."
    ],
  },
  {
    n: 21,
    name: "Le Caravage Faux",
    epigraph: "Toutes les coïncidences finissent par avoir l'air d'un plan. Ce sont rarement des plans.",
    audioTitle: "FINAL",
    soundDesign: "Une révélation sans son. Le silence parfait, terrifiant, comme au premier chapitre, mais inversé. Le tic-tac d'une horloge suisse qui appartient désormais à quelqu'un d'autre.",
    spice: "Une chaleur lente, possessive, qui n'a plus rien d'érotique au sens facile. C'est l'érotisme de la <em>compréhension totale</em>.",
    synopsis: [
      "Julian se rétablit. Il attend. Trois jours. Quatre. Sasha ne revient pas. Renata, à la place, lui fait livrer une caisse en bois. Dedans, le Caravage.",
      "Il le fait authentifier. C'est un faux. Un faux parfait. Onze ans d'âge. Signé par une seule main, identifiée par les laboratoires : <em>Sasha Vasari</em>.",
      "Sasha n'est pas une auditrice forensique. Elle est la fille d'un faussaire toscan tué par la Cosca dans une exécution de dette il y a douze ans. À vingt-deux ans, par chagrin, par réflexe, elle a peint un faux du <em>Saint Sébastien</em>. Elle l'a vendu, naïvement, à un intermédiaire qui s'est avéré être un agent de Julian.",
      "Julian, alors, n'a pas démasqué la fraude. Il l'a <em>archivée</em>. Il s'est mis à suivre la signataire. Pendant onze ans. Il a financé son cabinet, ses clients, l'a fait monter, puis l'a ruinée. Il l'a aménagée, lentement, pour qu'elle vienne signer le contrat du chapitre 1.",
      "Sasha n'a pas chassé Julian. C'est lui qui l'a chassée, depuis le faux qu'elle a peint à vingt-deux ans pour pleurer son père. Le piège est encore plus profond qu'elle ne le croyait."
    ],
  },
  {
    n: 22,
    name: "Ashfall",
    epigraph: "Le silence parfait n'est pas une absence de son. C'est l'écho d'une seule possession.",
    audioTitle: "FINAL 2",
    soundDesign: "Le retour du silence d'ouverture, exactement le même, mais désormais possédé. Le tic-tac d'une horloge suisse qui appartient à Sasha. Le frottement, une seule fois, d'une plume sur du papier épais. Une respiration d'homme qui se brise.",
    spice: "L'érotisme final du roman, cruel et calme. Sasha tient sa gorge. Sa respiration à lui se règle, pour la première fois, sur la sienne à elle. Il signe en pleurant sans larmes.",
    synopsis: [
      "Un an plus tard. Marseille. Le même bureau monumental. Le même marbre noir. La même horloge.",
      "Sasha entre. Julian est assis. Il a maigri. Sa main droite tremble. Sasha ne s'arrête pas à deux pas du seuil. Elle traverse les vingt-deux mètres sans haché. Elle contourne la table. Elle s'arrête derrière lui.",
      "Elle pose une main à plat contre sa nuque. La main est très froide. Elle remonte le long de la mâchoire. Elle pose, doucement, deux doigts sous l'angle de sa gorge, pile sur l'artère. Et elle règle sa propre respiration, lente, large, pleine, sur celle, saccadée, hachurée, de l'homme assis sous sa paume.",
      "Elle glisse un contrat devant lui. C'est l'acte de propriété du coffre du chapitre 13, du Caravage, du Livre Noir des Marziale, de la clé crypto. <em>Quatre milliards.</em> Tout. À son nom à lui. Mais avec, en clause vingt-deux, l'obligation écrite que sa respiration, ses entrées, ses repas, ses sorties, ses mots, soient désormais validés par elle.",
      "Elle pose la plume à quatre centimètres exactement de la dernière page. Elle se penche à son oreille. Elle dit, très bas, en italien : <em>« Bravo bambino. Maintenant tu vas signer, et tu vas respirer comme je te dis. »</em>",
      "Il signe. Sa respiration se règle. Le tic-tac de l'horloge appartient désormais à Sasha. Elle laisse sa main sur sa gorge encore trois secondes, juste pour qu'il s'en souvienne, puis elle s'écarte. Le livre se referme avec une seule phrase, qui ne lui est pas adressée : <em>« Personne, depuis Pénélope, n'a su ce que voulait dire revenir. »</em>"
    ],
  },
];

window.BOOK = BOOK;
window.CONTENT_WARNINGS = CONTENT_WARNINGS;
window.SCENTS = SCENTS;
window.scentForChapter = scentForChapter;
window.ACTS = ACTS;
window.CHAPTERS = CHAPTERS;
window.AUDIO = AUDIO;
window.audioSrc = audioSrc;
window.ROMAN = ROMAN;
window.actOf = actOf;
window.actLabel = actLabel;
