Espace Artiste
Aller au contenu principal

MDRICK ONINNI - GOAT POUR CHRIST DELUXE : 22 TITRES À DÉCOUVRIR

23 min de lecture·Monsieur Kophi·04 Juin 2026
MDRICK ONINNI - GOAT POUR CHRIST DELUXE : 22 TITRES À DÉCOUVRIR

Ce dimanche 7 juin 2026, le monde de l’Urban Gospel africain vivra un moment qu’il attendait : Mdrick Oninni, rappeur ivoirien et membre fondateur du label KOPHI’S MUSIC, sortira la version définitive de son premier album studio :GOAT POUR CHRIST DELUXE. 22 titres.
Une vision. Une déclaration que rien ni personne n’a pu étouffer. Et un moment historique à double titre : c’est non seulement le premier album de Mdrick Oninni et c’est aussi le tout premier album officiel de KOPHI’S MUSIC, label né le 31 octobre 2025.
La veille, lesamedi 6 juin 2026aura lieru une release party réunira presse, médias et professionnels du showbiz ivoirien pour célébrer cette étape fondatrice de la scène Urban Gospel d’Abidjan.


Release Party : Samedi 6 juin 2026

Le samedi 6 juin 2026, Abidjan vibrera. Presse, médias, professionnels du showbiz ivoirien et invités se réuniront pour célébrer la release party officielle de GOAT POUR CHRIST (DELUXE)  la version augmentée et définitive du premier album studio de Mdrick Oninni.

Cette soirée marquera bien plus qu’un lancement d’album. Elle symbolisera l’acte de naissance discographique officiel de KOPHI’S MUSIC, label fondé le 31 octobre 2025,  soit à peine sept mois plus tôt. Sept mois. Un label. Un premier album de 22 titres. Deux playlists éditoriales Spotify. Plus de 254 000 écoutes et vues dans le monde. Le rythme est donné.

Le lendemain, dimanche 7 juin 2026, l’album prendra son envol sur toutes les plateformes de streaming mondiales. Rendez-vous est pris.


GOAT POUR CHRIST DELUXE : Le premier album d’un label, le premier chapitre d’une ère

GOAT POUR CHRIST; Greatest OAll Time  Pour  Christ, c’est d’abord un jeu de mots qui claque. Mais derrière la formule, il y a une conviction profonde, irréductible : placer le Christ  au sommet, pas par posture, pas pour se démarquer dans un marché, mais parce que c’est la vérité de sa vie.

Sorti initialement en décembre 2024 avec 8 titres, l’album revient dans une version augmentée, mûrie, définitive. 22 titres. 22 chapitres d’une même histoire. Celle d’un homme, d’un rappeur, d’un croyant qui refuse de choisir entre l’authenticité de la rue et la profondeur de la foi.

Mais GOAT POUR CHRIST (DELUXE)  est aussi bien plus que l’album d’un artiste. C’est le premier album officiel de KOPHI’S MUSIC, structure indépendante fondée le 31 octobre 2025  à Abidjan. En moins d’un an d’existence, le label signe un premier opus de 22 titres, décroche deux playlists éditoriales Spotify, et dépasse les 254 000 écoutes et vues mondiales. Ce n’est pas un début timide.  C’est une déclaration d’arrivée.

Et la vision est posée dès les premières secondes deSoja, le titre d’ouverture, dans un outro qui dit tout selon les propres mots de l’artiste : ce n’est pas un album, c’est une vision.  Changer la mentalité. Prêcher l’évangile. Montrer une autre facette du rap gospel. Pour Christ.


La Tracklist complète : 22 titres, 22 vérités

Chaque titre est un monde. Voici les 22 portes d’entrée dans l’univers deMdrick Oninni:

  • 01
    Soja
    Le manifeste. L’ouverture qui dit tout.
  • 02
    Pas Honnête
    Le miroir tendu. À soi, aux autres, aux dirigeants.
  • 03
    Depuis Quand
    La question qui dérange. 21 905 écoutes sur Spotify.
  • 04
    Derrière Dieu
    L’introspection. Présent dans Louange et Adoration (Spotify).
  • 05
    Wêlé Natô
    L’ancrage culturel. La langue comme acte de foi.
  • 06
    Je Te Kouman
    feat. Mr PotegoJe te parle, conversation directe avec Dieu malgré les critiques.
  • 07
    Jésus M’appelle
    ★ Single annonciateur · Fresh Gospel Africa
  • 08
    Ce N’est Pas Moi
    feat. Monsieur Kophi
    Quand la grâce prend le dessus.
  • 09
    Bonbon Des Enfants
    ★ N°1 · Louange et Adoration
  • 10
    L’Évangile Est Doux
    La bonne nouvelle sans détour. Christ ressuscité, et c’est pas compliqué.
  • 11
    GOAT Pour Christ
    Le titre éponyme. La déclaration centrale.
  • 12
    Mohamed Ali
    La pugnacité. Se battre jusqu’au bout pour ce en quoi on croit.
  • 13
    On Coordonne
    ★ 27 314 écoutes Spotify · D’Abobo à Yopougon
  • 14
    J’ai Cru
    La foi assumée. Premier jalon discographique.
  • 15
    Je Suis Gammé
    Le tout premier single. Le point de départ.
  • 16
    Hein Hein
    L’étonnement face à la grâce. La surprise de Dieu.
  • 17
    Dominer
    feat. Joel Glory
    L’autorité spirituelle. Deux voix, une seule victoire.
  • 18
    Ça Dort
    Le réveil. Ce qui dormait en toi et qui ne peut plus.
  • 19
    Tu Ne Crois Pas
    La foi comme défi lancé à l’auditeur.
  • 20
    Freestyle GOAT (De L’eau)
    L’improvisation maîtrisée. La liberté dans le flow.
  • 21
    Pas À Pas
    La patience comme acte de foi. Comme David. Comme Éli.
  • 22
    Anitché Encore
    Le refus de finir. La gratitude comme dernier mot.

✨ Trois collaborations au programme : Mr Potego (titre 06), Monsieur Kophi  (titre 08)  et Joel Glory  (titre 17). Trois invités, trois couleurs supplémentaires dans une palette déjà riche.


Neuf titres décryptés : ce que les lyrics nous disent vraiment

Dans cet album, chaque mot compte.

01 – Soja : l’ouverture qui dit tout

Soja  n’est pas une introduction ordinaire. C’est un manifeste. Dès le premier couplet, Mdrick Oninni lâche ce que beaucoup pensent tout bas : la frontière floue entre le pasteur sincère et le pasteur businessman, les tarifs affichés pour les onctions, les leaders d’église plus présents sur les réseaux sociaux que dans leurs propres congrégations. Pas de ménagement. Pas de détour.

Le refrain installe l’image centrale : Christ comme fondation inébranlable.
Face à tous ceux qui s’agitent, l’artiste répond avec une clarté désarmante : ce n’est pas lui le talent, c’est Dieu. Le deuxième couplet dresse un portrait sans concession du chrétien contemporain, celui qui suit les clashs entre rappeurs pendant des heures mais n’ouvre pas sa Bible. Mdrick ne juge pas : il interpelle.
Avec l’humour ivoirien, avec le flow, avec la vérité.

« Ce n’est pas un album. C’est une vision. »
Changer la mentalité. Prêcher l’évangile.
Montrer une autre facette du rap gospel.
C’est pour Christ qu’on fait ça.
– Mdrick Oninni · Outro de Soja · GOAT POUR CHRIST DELUXE

02 – Pas Honnête : le miroir que personne ne veut regarder

Après le manifeste de SojaPas Honnête  descend encore plus bas jusqu’aux racines. Ce titre est un miroir tendu à la fois à soi-même, aux autres et aux structures de pouvoir. Mdrick y convoque la mémoire de sa grand-mère qui lui disait de suivre Yahweh, la nuit dans la rue, ceux qui volent et qui trouvent pourtant qu’on est méchant quand on leur parle de Jésus.

Le refrain frappe comme une sentence répétée jusqu’à l’évidence :
toi, t’es pas honnête.
Pas d’accusation abstraite une adresse directe, personnelle, inconfortable. Et dans le deuxième couplet, le regard se tourne vers les dirigeants qui utilisent les gens comme des marionnettes. Mdrick arrive avec sa Bible. Pas pour consoler. Pour impacter.

Je pense à ma mémé, qui me disait mon bébé
Il faut suivre Yahweh

La nuit dans la rue, tu voles l’argent des gens
On te parle de Jésus —mais tu trouves qu’on est méchant

C’est le début de quelque chose de bien qui commence.
GOAT POUR CHRIST. On arrive en force.

– Mdrick Oninni · Pas Honnête · GOAT POUR CHRIST DELUXE

Et l’outro claque comme une promesse : c’est le début de quelque chose de bien.
Pas une menace. Une déclaration d’arrivée.

06 – Je Te Kouman feat. Mr Potego : parler à Dieu quand tout le monde parle contre toi

Je Te Koumanen nouchi ivoirien; je te parle,est l’un des titres les plus forts et les plus singuliers de l’album.
Il ne s’agit pas d’une déclaration en direction des hommes. C’est une adresse directe à Dieu, une conversation intime et assumée avec le Seigneur choisie, maintenue, revendiquée précisément dans le contexte où les critiques pleuvent, où les gens jettent des pierres, où le regard du monde cherche à déstabiliser.

C’est là toute la force du titre :pendant que les autres parlent contre, moi je te parle à toi.Le monde critique. Les anciens disent chut.
Les proches s’éloignent. Et Mdrick, lui, choisit de ne pas répondre aux hommes il choisit de parler à Dieu.
Directement. En nouchi. Sans intermédiaire. Sans formule. Comme on parle à quelqu’un qu’on connaît, qu’on a éprouvé, en qui on a une confiance totale.

Le décor posé dans les couplets est sans illusions : les courbatures de la vie, les gens qui attendent qu’on glisse, la pression du quotidien, la vanité de vouloir s’accrocher à ce monde. Je veux marcher tout droit mais c’est compliqué.
Et pourtant, c’est précisément dans cette complexité-là que naît le dialogue avec Dieu.
Non pas malgré la difficulté, mais à travers elle. Parce que c’est Dieu qui donne la joie au cœur, qui essuie les pleurs, qui enlève les fardeaux. Parce que c’est Lui qui m’a sauvé. Alors je te parle.Je te kouman.

Le deuxième couplet, avec Mr Potego,  renforce ce témoignage : quand il avait besoin de quelqu’un, ce sont des kinkins  qui ont dit chut. Il n’a pas trouvé de réponse du côté des hommes. Il a trouvé Christ.
Et depuis, il a la primauté dans son cœur.Sur ma vie il a mis de l’engrais.une image agricole et ivoirienne, profonde : ce qui pousse, c’est ce qu’on nourrit. Et ce dialogue avec Dieu, entretenu jour après jour malgré les critiques, c’est ce qui nourrit une foi qui ne se dessèche pas.

Les gens veulent gâter notre amitié —
voilà pourquoi moi je t’appelle
Toi qui me donnes la joie au cœur
Toi qui as essuyé mes pleurs
Tu m’as mis au dos —c’est toi qui enlèves mes fardeaux

Moi je te Kouman man hé
 Je te parle, Seigneur
– Mdrick Oninni feat. Mr Potego · Je Te Kouman · GOAT POUR CHRIST DELUXE

Dans un album où l’on dénonce, où l’on interpelle, où l’on combat et où l’on résiste,Je Te Koumanest le moment de la conversation intime  celui où l’artiste tourne le dos aux critiques non pour fuir, mais pour faire face à Dieu. Je ne réponds pas aux hommes.
Je te parle à toi.  En nouchi. Depuis le fond du cœur. Parce que c’est toi qui comptes.

07 – Jésus M’appelle : quand tu ne décroches pas pour Satan

Le single annonciateur de la Deluxe est peut-être le titre le plusincarnéde l’album. La situation est simple, universelle, drôle et profonde à la fois :
Satan qui envoie des bips, qui appelle, qui essaie de raconter des histoires et Mdrick qui ne lève même pas les yeux. Pas de combat épique.
Juste une indifférence sereine, celle de quelqu’un qui a déjà choisi.

Le parallèle avec Je Te Kouman  est saisissant : là où il choisit de parlerà Dieu, il choisit ici dene pas décrocherpour Satan. Ce sont deux faces du même choix à qui je parle, à qui je réponds, à qui j’ouvre la porte de mon attention. Le refrain mêle français et langues locales ivoiriennes pour dire une chose simple : Jésus appelle, donc je m’en vais. Laisse-moi passer.

Satan m’a bipé —j’ai pas regardé
Il m’a même appelé —j’ai pas décroché
Il voulait me blaguer —j’ai pas écouté

Jésus m’appelle donc je m’en vais —
Lagô mon lalamé, donc moi je m’en vais
– Mdrick Oninni · Jésus M’appelle · GOAT POUR CHRIST DELUXE

10 – L’Évangile Est Doux : la bonne nouvelle sans détour

Après le dialogue direct de Je Te Kouman  et la clarté combative de Jésus M’appelleL’Évangile Est Doux  arrive comme un souffle de certitude. Le titre commence par une déclaration d’audace :
j’ai le Christ donc je suis capable de prêcher l’évangile même en arabe.Pas de limite géographique, pas de limite linguistique. Le message est universel parce que Celui qui l’envoie l’est aussi.

Le premier couplet démonte méthodiquement les peurs et les croyances qui empêchent d’approcher l’évangile : Jean 8 verset 23  cité de mémoire, la référence au fétiche comparée à Jésus qui marche sur l’eau avec la question ivoirienne qui tue : ou bien c’est maincheu ?  Et la réponse : non, ce n’est pas compliqué. Lire sa Bible suffit à vérifier.

Le deuxième couplet monte d’un cran : le Christ est ressuscité, on peut applaudir.  Chez eux, il n’y a plus de pécheur, plus de maudit. Et la foi n’exclut pas la prospérité avec Christ aussi on peut grosse villa avec piscine  mais elle ne s’y réduit pas non plus. Ce qui compte, c’est garder la foi, en Lui, pour Lui. Et lever la voix.

J’ai le Christ donc je suis capable
De prêcher l’évangile même en arabe
Mes péchés effacés —je ne suis plus coupable

Le Christ m’a envoyé pour prêcher la vérité
Vous serez affranchis en écoutant la vérité
Tu vois —c’est pas compliqué

L’Évangile est doux — c’est doux
– Mdrick Oninni · L’Évangile Est Doux · GOAT POUR CHRIST DELUXE

13 – On Coordonne : d’Abobo à Yopougon, en passant par le Ciel

Avec 27 314 écoutes sur Spotify, le titre le plus streamé de l’album avant la Deluxe On Coordonne  est la preuve que l’Urban Gospel peut être à la fois ancré dans la rue d’Abidjan et porté par un message puissant. Le titre commence par une prise de position claire : ceux qui se prennent pour des GOAT, Mdrick les connaît, les a vus partout. Et il répond tranquillement c’est Jésus, le vrai GOAT.

La géographie du refrain est saisissante : d’Abobo à Adjamé, Marcory jusqu’à Yopougon,les quatre coins d’Abidjan convoqués pour dire une seule chose : on vient parler de Lui partout. C’est Dieu qui coordonne, Jésus donne les directifs, et eux; KOPHI’S MUSIC qui exécutent. Même le beatmaker Schama est nommé et salué. Personne n’est effacé.

C’est Dieu qui coordonne
Jésus dans les directifs et nous on coordonne
On vient parler de lui
D’Abobo à Adjamé, Marcory jusqu’à Yopougon
– Mdrick Oninni · On Coordonne · GOAT POUR CHRIST DELUXE

17 – Dominer feat. Joel Glory : l’autorité comme héritage

Dominer  commence là où commence toute vocation : avant la naissance. Dieu qui connaît son enfant depuis le ventre de sa mère, qui l’envoie sur la terre avec une mission précise. C’est le cadre théologique posé dès les premières mesures et tout le reste du titre en découle logiquement.

Mdrick Oninni  et Joel Glory  partagent un refrain à deux voix qui fonctionne comme une déclaration collective : impacter, dominer  non par orgueil, non par compétition, mais parce que c’est la nature même de l’enfant de lumière envoyé dans ce monde. Face aux Goliath du monde, le nom de Jésus suffit.
Cette certitude n’est pas de l’arrogance. C’est une foi travaillée à la sueur du jeûne et de la prière.

Depuis le ventre de ma mère, mon Dieu tu me connaissais
Tu m’as envoyé sur cette terre-là pour venir les épater

On est venu pour impacter — Enfants de lumière
On est venu pour dominer — Enfants de lumière

La persévérance et le travail — c’est ce qui caractérise un enfant de lumière
– Mdrick Oninni & Joel Glory · Dominer · GOAT POUR CHRIST DELUXE

21 – Pas À Pas : la patience comme acte de foi

Pas À Pas  est peut-être le titre le plus humain de l’album. Celui où l’artiste montre sa vulnérabilité sans fard. Pendant que les autres dorment, lui se cherche sous le soleil. Il a besoin d’argent comme tout le monde mais il refuse de prendre des raccourcis mauvais pour l’avoir. Le lien entre la foi et le travail honnête est posé avec une netteté rare dans le genre.

Les références bibliques à David  et à Éli ne sont pas des ornements. Elles disent quelque chose de précis : ce que Dieu a promis arrive, même lentement.
Pas à pas.  Sans se mélanger. Sans tricher. Avec la foi que ce qui est dit s’accomplira forcément.

Pendant que les gens ont sommeil —
moi je me cherche sous soleil
Le salaire, l’ouvrier mérite son salaire

Pas à pas ! Je fais mes trucs pas à pas
Seigneur moi je ne me mélange pas
Comme David je veux avoir ma place

Père, je ne te force pas la main —
j’attendrais jusqu’à ce que pour moi viennent
– Mdrick Oninni · Pas À Pas · GOAT POUR CHRIST DELUXE

Et le pont qui clôt le titre,où est pour moi làSeigneur je crois qu’il est l’heure  est un cri d’impatience habillé de confiance.
Pas du désespoir. De la foi qui attend en sachant que ça vient.

22 – Anitché Encore : la gratitude comme dernier mot et comme premier pas

Un album qui commence par dénoncer l’hypocrisie (Soja) et qui se termine par la gratitude pure (Anitché Encore) c’est un arc narratif complet.
Une traversée. Et Anitché encore, en langue dioula, dit exactement ce qu’il signifie : merci encore.  Encore et encore. Sans jamais finir.

Le titre pose d’emblée la question fondamentale : on va tous quitter ce monde, mais personne ne sait quand. Alors autant utiliser le temps qu’il reste pour honorer Celui qui nous a fait du bien. Ce n’est pas une résignation c’est une lucidité qui libère.

Le deuxième couplet est une mise en garde adressée à tous ceux qui s’accrochent aux faux amis, à l’argent, aux apparences : ceux qui t’élèvent quand tu dépenses et t’insultent quand tu n’as plus rien. Face à cette vanité universelle, Mdrick propose une alternative simple magnifier Celui qui donne la vie éternelle.

On va tous quitter ce monde —
mais personne ne sait c’est quand
Donc laissez-moi honorer les bienfaits de mon Dieu
Jésus Christ le Grand il m’a fait du bien

Anitché encore — Seigneur merci

Ce monde est éphémère, faut pas s’accrocher
Jésus Christ m’a appelé — je n’ai pas raccroché
– Mdrick Oninni · Anitché Encore · GOAT POUR CHRIST DELUXE

Et le refrain final qui se répète, Seigneur merci,Seigneur merci  n’est pas une conclusion. C’est une boucle intentionnelle, une prière qu’on continuera après que la musique se sera arrêtée. Mdrick Oninni ferme cet album comme on ferme une prière en sachant qu’on va continuer à parler.


Ce que dit vraiment cet album

ÉcouterGOAT POUR CHRIST DELUXEdu début à la fin, c’est traverser un spectre émotionnel et spirituel rare dans le gospel francophone.
On part du manifeste frontal de Soja  contre les hypocrisies religieuses, on passe par le miroir sans concession de Pas Honnête,  avant d’atteindre le moment le plus fort de l’album sur le plan de la relation à Dieu : Je Te Kouman  où Mdrick, dos aux critiques, choisit de parler directement à son Seigneur en nouchi, dans la langue de la rue, sans filtre ni cérémonie.

Ce fil conducteur, je ne réponds pas aux hommesje parle à Dieu   traverse tout l’album et lui donne sa colonne vertébrale spirituelle.
Il se poursuit dans Jésus M’appelle  (je ne décroche pas pour Satan, je réponds à Jésus), dans L’Évangile Est Doux (je parle de Lui partout, même en arabe), dans On Coordonne (c’est Dieu qui donne les directives, on exécute), dans Dominer (envoyé sur terre avec mission), dans Pas À Pas (Père, je t’attends) jusqu’à l’Anitché Encore  final, où ce dialogue se transforme en gratitude perpétuelle.

Ce n’est pas une posture. C’est une vie de foi documentée titre après titre, avec honnêteté et sans fard. On dénonce, on parle à Dieu, on enseigne, on résiste, on coordonne, on domine, on attend et on remercie.

L’ancrage culturel ivoirien est palpable tout au long des 22 titres  dans le nouchi du quotidien, dans les mots en dioula, dans les références à la vie des quartiers d’Abidjan, dans cet humour ivoirien qui dit les choses graves avec légèreté. Mdrick Oninni  ne s’efface pas pour plaire à un marché international. Et paradoxalement, c’est ce refus-là qui le rend universel.


KOPHI’S MUSIC : La vision derrière l’album

KOPHI’S MUSIC  est le label Urban Gospel du groupe KOPHI’S GROUP SAS, basé à Abidjan,  Côte d’Ivoire.
Fondé officiellement le 31 octobre 2025,  le label accompagne des artistes chrétiens dans la création, la production et la distribution de leur musique avec l’exigence artistique d’une maison de disques et la foi d’un ministère.

Le groupe intègre également JASIN FÊ  (production audiovisuelle et marketing) et CTA7SON  (distribution musicale et streaming), offrant ainsi à ses artistes un écosystème complet du studio à l’oreille de l’auditeur, partout dans le monde.

GOAT POUR CHRIST (DELUXE)  sera le tout premier album officiel de ce label. En moins de huit mois d’existence, KOPHI’S MUSIC posera un premier acte discographique de 22 titres, avec deux playlists éditoriales Spotify  et plus de 254 000  écoutes et vues mondiales déjà au compteur avant même la sortie.
La suite sera à la mesure de ce début.


Une trajectoire qui confirme tout

Cet album n’arrive pas de nulle part. Il arrive sur le dos d’une croissance organique impressionnante, construite titre après titre, plateforme après plateforme.
En moins de deux ans de carrière discographique active, plus de 254 000 écoutes et vues cumulées sur l’ensemble des plateformes mondiales et ce, avant même la sortie du Deluxe.

  • 🟢134 000 streams Spotifycumulés —+360,8 % en 12 mois
  • ▶️110 163 vues YouTube— 196 vidéos · 1 710 abonnés
  • 🍎9 870 écoutes Apple Music— audience fidèle depuis 2024
  • 🌍254 000+ points de contactdans le monde — toutes plateformes confondues

💡 En 2026, avant même la sortie du Deluxe : 15 300 streams Spotify par mois  contre 1 555 au lancement. Une multiplication par ×10 en deux ans. Imaginez ce que l’album complet va déclencher.


Déjà validé par Spotify Editorial : Deux playlists officielles

Avant même la sortie de l’album complet, les équipes éditoriales de Spotify ont déjà tranché. Le placement éditorial ne s’achète pas, il se mérite par la qualité du répertoire. Mdrick Oninni est aujourd’hui présent dans deux playlists officielles:

  • 🥇Louange et Adoration— 16 201 sauvegardes · 50 titres sélectionnés

    3  titres de Mdrick Oninni simultanément, Bonbon Des Enfants  en position N°1Derrière Dieu  et Depuis Quand?
  • 🌍Fresh Gospel Africa— Nouvelles sorties gospel africaines

    Jésus M’Appelle, single annonciateur du Deluxe, placé dès sa sortie le 22 mai 2026

Ces placements ne s’achètent pas. Ils se méritent. Et ils annoncent clairement ce que les chiffres de streaming confirmeront dans les semaines qui suivront la sortie de l’album le dimanche 7 juin 2026.


Un album pour ceux qui cherchent et pour ceux qui ont trouvé

GOAT POUR CHRIST (DELUXE)  ne s’adressera pas seulement aux croyants. Il s’adressera à quiconque a déjà cherché quelque chose de plus grand que soi, à quiconque a douté, a trébuché, a continué quand même.

Dans chacun de ces 22 titresMdrick Oninni  n’est pas un prédicateur. Il est un compagnon de route quelqu’un qui marche avec vous, qui pose les mêmes questions, qui traverse les mêmes nuits, et qui choisit, à chaque matin, de se lever du même côté. Et quand le monde parle contre lui, il ne répond pas aux hommes. Il parle à Dieu. Je Te Kouman.En nouchi. Depuis le fond du cœur.

Du manifeste de Soja  au miroir de Pas Honnête,  du dialogue direct avec Dieu de Je Te Kouman  à la douceur assumée de L’Évangile Est Doux,  de l’indifférence sereine de Jésus M’appelle  aux rues d’Abidjan dans On Coordonne,  de l’autorité de Dominer  à la patience de Pas À Pas  jusqu’au dernierSeigneur merci  d’Anitché Encore: cet album sera une traversée complète. Une traversée honnête. La seule qui vaille vraiment le voyage.

Et pour KOPHI’S MUSIC,  fondé le 31 octobre 2025, ce ne sera pas seulement le premier album. Ce sera la preuve que la foi, l’exigence et la vision sont capables, en moins d’un an, de produire quelque chose qui résonne dans le monde entier. Le premier chapitre s’écrit. La suite aussi.

« Ce n’est pas un album. C’est une vision. »

– Mdrick Oninni · GOAT POUR CHRIST DELUXE · KOPHI’S MUSIC · 2026


Où écouter GOAT POUR CHRIST DELUXE ?

L’album sera disponible dès le dimanche 7 juin 2026  sur toutes les plateformes de streaming. Préparez-vous et partagez la nouvelle autour de vous :

  • 🟢Spotify
  • 🍎Apple Music
  • 🎵Deezer
  • ▶️YouTube Music
  • 🌊Tidal

➡️Suivez Mdrick Oninni  sur YouTube @mdrickoninniofficiel  et restez connectés sur kophismusic.com  pour ne manquer aucune actualité.


🙌 Rendez-vous le samedi 6 juin pour la release party, et le dimanche 7 juin pour écouter l’album. KOPHI’S MUSIC arrive en force. 🎤

Retour en haut
) * ============================================================ * * SPEC TIMING (synchronisé avec le CSS) : * DISPLAY_MS = 5000ms — durée totale d'affichage par slide * TRANSITION_MS = 1200ms — durée du crossfade CSS ease-in-out * OVERLAP_MS = 3800ms — délai avant déclenchement du crossfade * (DISPLAY − TRANSITION = 3800ms) * * FONCTIONNEMENT : * t = 0 → slide N devient is-active * Ken Burns scale(1.0 → 1.08) démarre * t = 3800ms → crossfadeTo() déclenché : * slide N → is-leaving (opacity 1→0 / 1200ms) * slide N+1 → is-active (opacity 0→1 / 1200ms) * Ken Burns de N+1 démarre * t = 5000ms → crossfade terminé, slide N+1 pleinement visible * t = 5000ms → prochain cycle démarre (boucle) * * RÈGLES : * • Pas de pause au survol de la souris * • Couleur accent propagée via CSS var(--accent) par slide * • Labels en français (SUIVANT, Mettre en pause, etc.) * ============================================================ */(function () { 'use strict';/* ───────────────────────────────────────────────────────── CONSTANTES DE TIMING — synchronisées avec le CSS ───────────────────────────────────────────────────────── */ const DISPLAY_MS = 5000; // Affichage total par slide const TRANSITION_MS = 1200; // Durée du crossfade CSS const OVERLAP_MS = DISPLAY_MS - TRANSITION_MS; // 3800ms : déclenchement anticipé/* ───────────────────────────────────────────────────────── INIT D'UN SLIDER ───────────────────────────────────────────────────────── */ function initKMSlider(wrapper) {/* ── Config ── */ const id = wrapper.id; const slidesData = (window.kmSliderData && window.kmSliderData[id]) || []; const auto = wrapper.dataset.auto !== 'false'; const total = parseInt(wrapper.dataset.total) || 0;if (total < 1) return;/* ── Éléments DOM ── */ const slides = wrapper.querySelectorAll('.km-slide'); const dots = wrapper.querySelectorAll('.km-dot'); const counter = wrapper.querySelector('.km-counter__current'); const progressFill = wrapper.querySelector('.km-progress-fill'); const nextTitle = wrapper.querySelector(`#${id}-next-title`); const btnPrev = wrapper.querySelector('.km-nav--prev'); const btnNext = wrapper.querySelector('.km-nav--next'); const btnPlay = wrapper.querySelector('.km-play-pause');if (!slides.length) return;/* ── État ── */ let current = 0; let isPlaying = auto; let overlapTimer = null; // Timer OVERLAP_MS → déclenche le crossfade let cleanTimer = null; // Timer TRANSITION_MS → nettoie is-leaving/* ── Utilitaires ── */ const pad = n => String(n).padStart(2, '0'); const mod = (n, m) => ((n % m) + m) % m; const getData = i => slidesData[i] || {};/* ─────────────────────────────────────────────────────── MISE À JOUR UI Compteur · Dots · Titre SUIVANT · Couleur accent ─────────────────────────────────────────────────────── */ function updateUI(index) {// Compteur numérique if (counter) counter.textContent = pad(index + 1);// Dots : classe active + aria dots.forEach((d, i) => { d.classList.toggle('is-active', i === index); d.setAttribute('aria-selected', i === index ? 'true' : 'false'); });// Titre SUIVANT : micro fade-out → mise à jour → fade-in const nextIdx = mod(index + 1, total); if (nextTitle) { nextTitle.classList.add('is-updating'); setTimeout(() => { nextTitle.textContent = getData(nextIdx).titre || ''; nextTitle.classList.remove('is-updating'); }, 300); }// Couleur accent : propagée à tous les éléments via var(--accent) const accent = getData(index).couleur || '#E63946'; wrapper.style.setProperty('--accent', accent); }/* ─────────────────────────────────────────────────────── BARRE DE PROGRESSION Se remplit sur DISPLAY_MS (5000ms) en continu. ─────────────────────────────────────────────────────── */ function startProgress() { if (!progressFill) return; progressFill.style.transition = 'none'; progressFill.style.width = '0%'; void progressFill.offsetWidth; // Force reflow progressFill.style.transition = `width ${DISPLAY_MS}ms linear`; progressFill.style.width = '100%'; }function stopProgress() { if (!progressFill) return; const computed = parseFloat(getComputedStyle(progressFill).width); const parent = progressFill.parentElement; const pct = parent ? (computed / parent.offsetWidth) * 100 : 0; progressFill.style.transition = 'none'; progressFill.style.width = pct + '%'; }function resetProgress() { if (!progressFill) return; progressFill.style.transition = 'none'; progressFill.style.width = '0%'; }/* ─────────────────────────────────────────────────────── CROSSFADE — cœur de la transition ─────────────────────────────────────────────────────── Appelé à t = OVERLAP_MS (3800ms) après le début d'affichage. • Slide sortant → is-leaving : opacity 1→0 sur 1200ms • Slide entrant → is-active : opacity 0→1 sur 1200ms Ken Burns scale(1→1.08) sur 5000ms ─────────────────────────────────────────────────────── */ function crossfadeTo(nextIndex) { const prev = current; current = mod(nextIndex, total);const slideOut = slides[prev]; const slideIn = slides[current];// Slide sortant : amorce le fondu sortant CSS slideOut.classList.remove('is-active'); slideOut.classList.add('is-leaving'); slideOut.setAttribute('aria-hidden', 'true');// Slide entrant : amorce le fondu entrant + Ken Burns CSS slideIn.classList.add('is-active'); slideIn.setAttribute('aria-hidden', 'false');// Mise à jour interface updateUI(current);// Nettoyage du slide sortant après fin du crossfade clearTimeout(cleanTimer); cleanTimer = setTimeout(() => { slideOut.classList.remove('is-leaving'); }, TRANSITION_MS + 50); // +50ms de marge de sécurité// Planifier le prochain crossfade si autoplay actif if (isPlaying) scheduleNext(); }/* ─────────────────────────────────────────────────────── AUTOPLAY — timer précis OVERLAP ─────────────────────────────────────────────────────── Le crossfade est déclenché à OVERLAP_MS (3800ms) pour que la transition se termine exactement à DISPLAY_MS (5000ms). ─────────────────────────────────────────────────────── */ function scheduleNext() { clearTimeout(overlapTimer); if (!isPlaying) return; overlapTimer = setTimeout(() => { crossfadeTo(current + 1); }, OVERLAP_MS); }function cancelAutoplay() { clearTimeout(overlapTimer); }/* ─────────────────────────────────────────────────────── NAVIGATION MANUELLE Déclenche le crossfade immédiatement, repart sur un cycle complet de DISPLAY_MS. ─────────────────────────────────────────────────────── */ function goTo(index) { const target = mod(index, total); if (target === current) return;cancelAutoplay(); resetProgress(); crossfadeTo(target);if (isPlaying) startProgress(); }const nextSlide = () => goTo(current + 1); const prevSlide = () => goTo(current - 1);/* ─────────────────────────────────────────────────────── LECTURE / PAUSE ─────────────────────────────────────────────────────── */ function play() { isPlaying = true; if (btnPlay) { btnPlay.classList.remove('is-paused'); btnPlay.setAttribute('aria-label', 'Mettre en pause'); } scheduleNext(); startProgress(); }function pause() { isPlaying = false; cancelAutoplay(); if (btnPlay) { btnPlay.classList.add('is-paused'); btnPlay.setAttribute('aria-label', 'Reprendre la lecture'); } stopProgress(); }/* ─────────────────────────────────────────────────────── ÉVÉNEMENTS ─────────────────────────────────────────────────────── */// Flèches if (btnPrev) btnPrev.addEventListener('click', prevSlide); if (btnNext) btnNext.addEventListener('click', nextSlide);// Lecture / Pause if (btnPlay) { btnPlay.addEventListener('click', () => isPlaying ? pause() : play()); }// Points de navigation dots.forEach(dot => { dot.addEventListener('click', () => { const i = parseInt(dot.dataset.goto, 10); if (!isNaN(i) && i !== current) goTo(i); }); });// PAS de pause au survol — comportement intentionnel// Swipe tactile let txStart = 0, tyStart = 0; wrapper.addEventListener('touchstart', e => { txStart = e.touches[0].clientX; tyStart = e.touches[0].clientY; }, { passive: true });wrapper.addEventListener('touchend', e => { const dx = txStart - e.changedTouches[0].clientX; const dy = tyStart - e.changedTouches[0].clientY; if (Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 40) { dx > 0 ? nextSlide() : prevSlide(); } }, { passive: true });// Navigation clavier wrapper.setAttribute('tabindex', '0'); wrapper.addEventListener('keydown', e => { switch (e.key) { case 'ArrowRight': nextSlide(); break; case 'ArrowLeft': prevSlide(); break; case ' ': e.preventDefault(); isPlaying ? pause() : play(); break; } });/* ─────────────────────────────────────────────────────── INITIALISATION ─────────────────────────────────────────────────────── */ (function init() {// Le slide 0 est déjà is-active dans le HTML (via PHP) if (counter) counter.textContent = pad(1);dots.forEach((d, i) => { d.classList.toggle('is-active', i === 0); d.setAttribute('aria-selected', i === 0 ? 'true' : 'false'); });// Titre SUIVANT : slide index 1 if (nextTitle) { nextTitle.textContent = getData(mod(1, total)).titre || ''; }// Couleur accent initiale wrapper.style.setProperty('--accent', getData(0).couleur || '#E63946');// prefers-reduced-motion → pas d'autoplay if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) { return; }// Démarrage de l'autoplay if (isPlaying) { scheduleNext(); // Premier crossfade à OVERLAP_MS (3800ms) startProgress(); // Barre de progression sur DISPLAY_MS (5000ms) } })(); }/* ───────────────────────────────────────────────────────── BOOTSTRAP — Initialise tous les sliders de la page ───────────────────────────────────────────────────────── */ function boot() { document.querySelectorAll('.km-hero-slider').forEach(initKMSlider); }if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', boot); } else { boot(); }})();) * * CORRECTIONS v11 vs v10 : * 1. Throbber : exclut explicitement #kpm-cta-artiste du listener * (sécurité supplémentaire, target="_blank" suffit déjà). * 2. Aucune autre logique modifiée (rétrocompatible v10). * ════════════════════════════════════════════════════════════════ */ (function () { 'use strict';document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', init) : init();function init() { injectPageLoader(); initCompactOnScroll(); initProgressBar(); initDynamicColors(); initMegaMenu(); initArtistePageActive(); initActualitesPageActive(); initBurgerMenu(); initThrobberLoader(); }/* ══════════════════════════════════════════════════════════════ UTILITAIRES COULEUR ══════════════════════════════════════════════════════════════ */ function hexToRgb(hex) { var c = (hex || '').replace('#', ''); if (c.length === 3) c = c[0]+c[0]+c[1]+c[1]+c[2]+c[2]; var m = /^([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(c); return m ? { r:parseInt(m[1],16), g:parseInt(m[2],16), b:parseInt(m[3],16) } : null; }function tintLogoImage(img, hexColor) { if (!img || img.tagName !== 'IMG') return; var rgb = hexToRgb(hexColor); if (!rgb) return; if (!img.dataset.originalSrc) img.dataset.originalSrc = img.src; var t = new Image(); t.crossOrigin = 'anonymous'; t.onload = function() { try { var cv = document.createElement('canvas'); cv.width = t.naturalWidth || 100; cv.height = t.naturalHeight || 100; var ctx = cv.getContext('2d'); ctx.drawImage(t,0,0); var id = ctx.getImageData(0,0,cv.width,cv.height), d = id.data; for (var i=0; i10) { var l=(d[i]*.299+d[i+1]*.587+d[i+2]*.114)/255; d[i]=Math.round(rgb.r*l); d[i+1]=Math.round(rgb.g*l); d[i+2]=Math.round(rgb.b*l); } } ctx.putImageData(id,0,0); img.src = cv.toDataURL('image/png'); img.style.filter='none'; } catch(e) { applyLogoFilterFallback(img, hexColor); } }; t.onerror = function() { applyLogoFilterFallback(img, hexColor); }; t.src = img.dataset.originalSrc; }function applyLogoFilterFallback(img, hex) { var rgb = hexToRgb(hex); if (!rgb) { img.style.filter='brightness(0) invert(1)'; return; } var r=rgb.r/255,g=rgb.g/255,b=rgb.b/255, mx=Math.max(r,g,b),mn=Math.min(r,g,b),h=0,s=0,l=(mx+mn)/2; if (mx!==mn){var d=mx-mn; s=l>.5?d/(2-mx-mn):d/(mx+mn); if(mx===r) h=((g-b)/d+(g THRESHOLD; if (sc===isCompact) return; isCompact=sc; header.classList.toggle('kpm-compact',isCompact); applyState(isCompact); }, {passive:true});window.addEventListener('resize', function() { H_NORMAL = window.matchMedia('(max-width:600px)').matches ? 56 : window.matchMedia('(max-width:868px)').matches ? 60 : window.matchMedia('(max-width:1024px)').matches ? 64 : 72; if (!isCompact) applyState(false); }, {passive:true});applyState(false); }/* ══════════════════════════════════════════════════════════════ 2. BARRE DE PROGRESSION ══════════════════════════════════════════════════════════════ */ function initProgressBar() { var bar = document.getElementById('kpm-progress')||document.querySelector('.kpm-progress-bar'); if (!bar) return; window.addEventListener('scroll', function() { var s=document.documentElement.scrollTop||document.body.scrollTop; var t=document.documentElement.scrollHeight-document.documentElement.clientHeight; bar.style.width = t>0 ? (s/t*100)+'%' : '0%'; }, {passive:true}); }/* ══════════════════════════════════════════════════════════════ 3. COULEURS DYNAMIQUES ══════════════════════════════════════════════════════════════ */ function initDynamicColors() { var menuLinks = document.querySelectorAll('.kpm-menu > li > a[data-color]'); var logo = document.getElementById('kpm-logo-svg')||document.getElementById('kpm-logo-text'); var bar = document.getElementById('kpm-progress')||document.querySelector('.kpm-progress-bar'); if (!menuLinks.length) return;var activeLink = null; var initItem = document.querySelector('.kpm-menu > li.current-menu-item > a[data-color]'); if (initItem && !document.body.classList.contains('single-nos-artistes') && !document.body.classList.contains('kpm-is-actualites')) { activeLink = initItem; colorItem(initItem, initItem.getAttribute('data-color')||'#6621c3'); applyLogoColor(logo, initItem.getAttribute('data-logo-color')||initItem.getAttribute('data-color')||'#6621c3'); if (bar) bar.style.background = initItem.getAttribute('data-color')||'#6621c3'; }menuLinks.forEach(function(link) { var mc = link.getAttribute('data-color')||'#6621c3'; var lc = link.getAttribute('data-logo-color')||mc; var li = link.closest('li');link.addEventListener('mouseenter', function() { colorItem(link,mc); }); link.addEventListener('mouseleave', function() { var act = (link===activeLink)||(li&&(li.classList.contains('current-menu-item')||li.classList.contains('nos-artistes-actif'))); act ? colorItem(link,mc) : resetItem(link); }); link.addEventListener('click', function() { if (link.classList.contains('kpm-menu-trigger')) return; menuLinks.forEach(function(l2){ var l2li=l2.closest('li'); if(l2li) l2li.classList.remove('current-menu-item'); if(l2!==link) resetItem(l2); }); li&&li.classList.add('current-menu-item'); activeLink=link; colorItem(link,mc); applyLogoColor(logo,lc); if (bar) bar.style.background=mc; }); }); }/* ══════════════════════════════════════════════════════════════ 4. PAGES ARTISTE — item "Nos Artistes" actif ══════════════════════════════════════════════════════════════ */ function initArtistePageActive() { if (!document.body.classList.contains('single-nos-artistes')) return; var trigger = document.querySelector('.kpm-menu-trigger'); var logo = document.getElementById('kpm-logo-svg')||document.getElementById('kpm-logo-text'); var bar = document.getElementById('kpm-progress')||document.querySelector('.kpm-progress-bar'); if (!trigger) return; var mc=trigger.getAttribute('data-color')||'#c0392b'; var lc=trigger.getAttribute('data-logo-color')||mc; var li=trigger.closest('li'); if (li) { li.classList.add('nos-artistes-actif','current-menu-item'); } colorItem(trigger,mc); applyLogoColor(logo,lc); if (bar) bar.style.background=mc; }/* ══════════════════════════════════════════════════════════════ 5. PAGES ACTUALITÉS — item "Actualités" actif ══════════════════════════════════════════════════════════════ */ function initActualitesPageActive() { if (!document.body.classList.contains('kpm-is-actualites')) return;var logo = document.getElementById('kpm-logo-svg')||document.getElementById('kpm-logo-text'); var bar = document.getElementById('kpm-progress')||document.querySelector('.kpm-progress-bar');var actuLink = null; var menuLinks = document.querySelectorAll('.kpm-menu > li > a[data-color]'); menuLinks.forEach(function(link) { var label = (link.querySelector('.menu-label')||link).textContent.toLowerCase().trim(); if (label.indexOf('actu') !== -1 || label.indexOf('news') !== -1 || label.indexOf('blog') !== -1) { actuLink = link; } });if (!actuLink) return;var mc = actuLink.getAttribute('data-color') || '#6621c3'; var lc = actuLink.getAttribute('data-logo-color') || mc; var li = actuLink.closest('li');if (li) li.classList.add('current-menu-item', 'kpm-actualites-actif'); colorItem(actuLink, mc); applyLogoColor(logo, lc); if (bar) bar.style.background = mc; }/* ══════════════════════════════════════════════════════════════ 6. MÉGA MENU ══════════════════════════════════════════════════════════════ */ function initMegaMenu() { var trigger = document.querySelector('.kpm-menu-trigger'); var dropdown = document.querySelector('.has-megamenu .aa-dropdown'); var btnBack = dropdown ? dropdown.querySelector('.aa-dropdown-back') : null; var logo = document.getElementById('kpm-logo-svg')||document.getElementById('kpm-logo-text'); var bar = document.getElementById('kpm-progress')||document.querySelector('.kpm-progress-bar'); if (!trigger || !dropdown) return;var isOpen = false; var mc = trigger.getAttribute('data-color') || '#6621c3'; var lc = trigger.getAttribute('data-logo-color') || mc; var li = trigger.closest('li');function open() { isOpen = true; dropdown.classList.add('is-open'); dropdown.setAttribute('aria-hidden','false'); trigger.setAttribute('aria-expanded','true'); colorItem(trigger,mc); applyLogoColor(logo,lc); if (bar) bar.style.background = mc; if (!isMobileNav()) { dropdown.querySelectorAll('.aa-drop-card').forEach(function(c,i){ c.style.animationDelay = (i*.04)+'s'; }); } }function close() { isOpen = false; dropdown.classList.remove('is-open'); dropdown.setAttribute('aria-hidden','true'); trigger.setAttribute('aria-expanded','false'); if (!document.body.classList.contains('single-nos-artistes') && li && !li.classList.contains('current-menu-item')) { resetItem(trigger); } }trigger.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); isOpen ? close() : open(); });if (btnBack) { btnBack.addEventListener('click', function(e) { e.stopPropagation(); close(); trigger.focus(); }); }document.addEventListener('click', function(e) { if (!isOpen || isMobileNav()) return; if (!dropdown.contains(e.target) && !trigger.contains(e.target)) close(); });document.addEventListener('keydown', function(e) { if (e.key==='Escape' && isOpen) close(); });dropdown.addEventListener('wheel', function(e) { if (isMobileNav()) return; var grid = dropdown.querySelector('.aa-dropdown-grid'); if (grid && !dropdown.classList.contains('aa-dropdown-grid--wrap')) { e.preventDefault(); grid.scrollLeft += e.deltaY; } }, {passive:false}); }/* ══════════════════════════════════════════════════════════════ 7. BURGER MENU ══════════════════════════════════════════════════════════════ */ function initBurgerMenu() { var burger = document.getElementById('kpm-burger'); var nav = document.getElementById('kpm-nav'); var overlay = document.getElementById('kpm-overlay'); var dropdown = document.querySelector('.has-megamenu .aa-dropdown'); if (!burger || !nav || !overlay) return; var isOpen = false;function openNav() { isOpen = true; burger.classList.add('is-active'); burger.setAttribute('aria-expanded','true'); nav.classList.add('is-active'); overlay.classList.add('is-active'); overlay.setAttribute('aria-hidden','false'); document.body.style.overflow = 'hidden'; }function closeNav() { isOpen = false; if (dropdown && dropdown.classList.contains('is-open')) { dropdown.classList.remove('is-open'); dropdown.setAttribute('aria-hidden','true'); var trig = document.querySelector('.kpm-menu-trigger'); if (trig) trig.setAttribute('aria-expanded','false'); } burger.classList.remove('is-active'); burger.setAttribute('aria-expanded','false'); nav.classList.remove('is-active'); overlay.classList.remove('is-active'); overlay.setAttribute('aria-hidden','true'); document.body.style.overflow = ''; }burger.addEventListener('click', function() { isOpen ? closeNav() : openNav(); }); overlay.addEventListener('click', closeNav);nav.querySelectorAll('.kpm-menu a').forEach(function(l) { l.addEventListener('click', function() { if (l.classList.contains('kpm-menu-trigger')) return; if (isOpen) setTimeout(closeNav, 250); }); });document.addEventListener('keydown', function(e) { if (e.key==='Escape' && isOpen) closeNav(); }); }/* ══════════════════════════════════════════════════════════════ 8. THROBBER LOADER ══════════════════════════════════════════════════════════════ v11 : exclut #kpm-cta-artiste (target="_blank" suffit déjà, mais on sécurise avec un check explicite sur l'id). ══════════════════════════════════════════════════════════════ */ function initThrobberLoader() { var logo = document.getElementById('kpm-logo-svg')||document.getElementById('kpm-logo-text'); var overlay = document.getElementById('kpm-page-loader'); var iconEl = document.getElementById('kpm-loader-icon');if (logo && logo.tagName==='IMG' && iconEl && iconEl.tagName==='IMG') { iconEl.src = logo.dataset.originalSrc || logo.src; }var isLoading=false, kickT=null, stopT=null, safeT=null;function clearClasses(el) { if (!el) return; el.classList.remove('kpm-throbber-kick','kpm-throbbing','kpm-throbber-stop'); }function startThrobber() { if (isLoading) return; isLoading=true; clearTimeout(kickT); clearTimeout(stopT); clearTimeout(safeT); overlay && overlay.classList.add('kpm-loader-active'); overlay && overlay.classList.remove('kpm-loader-exit'); [logo, iconEl].forEach(function(el){ clearClasses(el); el&&el.classList.add('kpm-throbber-kick'); }); kickT = setTimeout(function() { if (!isLoading) return; [logo, iconEl].forEach(function(el){ clearClasses(el); el&&el.classList.add('kpm-throbbing'); }); }, 600); safeT = setTimeout(stopThrobber, 8000); }function stopThrobber() { if (!isLoading) return; isLoading=false; clearTimeout(kickT); clearTimeout(safeT); [logo, iconEl].forEach(function(el){ clearClasses(el); el&&el.classList.add('kpm-throbber-stop'); }); if (overlay) { overlay.classList.remove('kpm-loader-active'); overlay.classList.add('kpm-loader-exit'); } stopT = setTimeout(function() { [logo, iconEl].forEach(function(el){ clearClasses(el); }); overlay&&overlay.classList.remove('kpm-loader-exit'); }, 600); }document.querySelectorAll('.kpm-menu a').forEach(function(link) { link.addEventListener('click', function() { if (link.classList.contains('kpm-menu-trigger')) return; if (link.target==='_blank') return; /* v11 : sécurité supplémentaire — ne jamais throbber sur le CTA artiste */ if (link.id === 'kpm-cta-artiste') return; startThrobber(); window.addEventListener('beforeunload', stopThrobber, {once:true}); }); });window.addEventListener('load', function() { if (isLoading) stopThrobber(); }); window.addEventListener('pageshow', function() { if (isLoading) stopThrobber(); }); window.addEventListener('popstate', function() { if (isLoading) stopThrobber(); }); }})();) * * Comportement style Reach Records : * → Clic "Nos Artistes" = dropdown s'ouvre SOUS le header * → La page en dessous reste visible * → L'URL passe à /nos-artistes/ via pushState * → Clic en dehors / Échap / ✕ = ferme * → Clic sur une image = navigue vers l'artiste * ================================================================ */ (function () { 'use strict';document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', init) : init();function init() { var trigger = document.querySelector('.rr-menu-trigger, .aa-nav-trigger'); var dropdown = document.getElementById('aa-dropdown');if (!trigger || !dropdown) return;var btnClose = dropdown.querySelector('.aa-dropdown-close'); var archiveUrl = trigger.getAttribute('href') || '/nos-artistes/'; var urlOrigin = window.location.href; var isOpen = false; var histPushed = false;/* ── Hauteur du header → positionne le dropdown ── */ function updateHeaderHeight() { var header = document.querySelector( '#masthead, .main-header-bar, .ast-primary-header-bar, .site-header, header' ); if (header) { var h = Math.round(header.getBoundingClientRect().height); document.documentElement.style.setProperty('--rr-header-h', h + 'px'); dropdown.style.top = h + 'px'; } } updateHeaderHeight(); window.addEventListener('resize', updateHeaderHeight, { passive: true });/* ── OUVRIR ── */ function open() { if (isOpen) return; isOpen = true;dropdown.classList.add('is-open'); dropdown.setAttribute('aria-hidden', 'false'); trigger.classList.add('is-active'); trigger.setAttribute('aria-expanded', 'true');/* URL → /nos-artistes/ sans rechargement */ if (window.history && window.history.pushState) { urlOrigin = window.location.href; window.history.pushState({ aaMenu: true }, 'Nos Artistes', archiveUrl); histPushed = true; }/* Animation cascade des cartes */ var cartes = dropdown.querySelectorAll('.aa-drop-card'); cartes.forEach(function (c, i) { c.classList.remove('rr-animate'); c.style.animationDelay = (i * 0.04) + 's'; void c.offsetWidth; // force reflow c.classList.add('rr-animate'); });/* Focus accessibilité */ var first = dropdown.querySelector('.aa-drop-card'); if (first) setTimeout(function () { first.focus(); }, 60); }/* ── FERMER ── */ function close(opts) { opts = opts || {}; if (!isOpen) return; isOpen = false;dropdown.classList.remove('is-open'); dropdown.setAttribute('aria-hidden', 'true'); trigger.classList.remove('is-active'); trigger.setAttribute('aria-expanded', 'false');/* Remet l'URL d'origine */ if (!opts.noHistory && histPushed && window.history && window.history.pushState) { window.history.pushState({ aaMenu: false }, document.title, urlOrigin); histPushed = false; }/* Reset animations */ dropdown.querySelectorAll('.aa-drop-card').forEach(function (c) { c.classList.remove('rr-animate'); c.style.animationDelay = ''; });trigger.focus(); }/* ── Clic sur le trigger ── */ trigger.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation();if (isOpen) { /* 2e clic → naviguer vers la page archive */ close({ noHistory: true }); window.location.href = archiveUrl; } else { open(); } });/* ── Bouton ✕ ── */ if (btnClose) { btnClose.addEventListener('click', function (e) { e.stopPropagation(); close(); }); }/* ── Clic en dehors ── */ document.addEventListener('click', function (e) { if (!isOpen) return; if (!dropdown.contains(e.target) && !trigger.contains(e.target)) close(); });/* ── Touche Échap ── */ document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && isOpen) close(); });/* ── Navigation clavier dans le dropdown ── */ dropdown.addEventListener('keydown', function (e) { var liens = Array.from(dropdown.querySelectorAll('.aa-drop-card')); var idx = liens.indexOf(document.activeElement); if (idx === -1) return; var next; switch (e.key) { case 'ArrowRight': case 'ArrowDown': next = liens[(idx + 1) % liens.length]; break; case 'ArrowLeft': case 'ArrowUp': next = liens[(idx - 1 + liens.length) % liens.length]; break; case 'Home': next = liens[0]; break; case 'End': next = liens[liens.length - 1]; break; default: return; } if (next) { e.preventDefault(); next.focus(); } });/* ── Bouton Précédent du navigateur ── */ window.addEventListener('popstate', function () { if (isOpen) { isOpen = false; dropdown.classList.remove('is-open'); dropdown.setAttribute('aria-hidden', 'true'); trigger.classList.remove('is-active'); trigger.setAttribute('aria-expanded', 'false'); histPushed = false; dropdown.querySelectorAll('.aa-drop-card').forEach(function (c) { c.classList.remove('rr-animate'); }); } });/* ── Scroll horizontal dans le dropdown (tactile) ── */ dropdown.addEventListener('wheel', function (e) { var grid = dropdown.querySelector('.aa-dropdown-grid'); if (grid && !dropdown.classList.contains('aa-dropdown-grid--wrap')) { e.preventDefault(); grid.scrollLeft += e.deltaY; } }, { passive: false }); }})();