<!DOCTYPE html>
<html prefix="og: http://ogp.me/ns#" lang="fr-FR">
<head>
<meta charset="utf-8">
<link rel="canonical" href="https://sekai.one?v=15">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sekai - Animes Streaming Vostfr</title>
<meta name="description" content="Sekai - Le Monde des Animes en Streaming Vostfr, version Kai et Originale.">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@12/swiper-bundle.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" href="/favicon.ico">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#333333">
<meta name="msapplication-TileColor" content="#000000">
<meta name="theme-color" content="#000000">
<meta property="og:title" content="Sekai">
<meta property="og:locale" content="fr_FR">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Sekai">
<meta property="og:url" content="https://sekai.one?v=15">
<meta property="og:image" content="https://sekai.one/images/sekai3D.jpg">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@OneSekai">
<meta name="twitter:title" content="Sekai">
<meta name="twitter:image" content="https://sekai.one/images/sekai3D.jpg">
<meta name='dailymotion-domain-verification' content='dmg2vwv7167ejtp00'>
<style>
@keyframes spark {
0% {
box-shadow: 0 0 20px rgba(0, 200, 255, 0.6), 0 0 50px rgba(255, 255, 255, 0.8);
}
100% {
box-shadow: 0 0 50px rgba(0, 200, 255, 1), 0 0 100px rgba(255, 255, 255, 1);
}
}
@font-face {
font-family: kalam;
src: url(../styles/Kalam-Bold.ttf);
}
/* body {
font-family: "Kalam", cursive;
line-height: 1;
} */
/* Reset global */
* {
margin: 0;
padding: 0;
}
/* Hack Firefox via @supports */
@supports (-moz-appearance: none) {
* {
scrollbar-width: thin;
scrollbar-color: #000 #333;
}
}
* {
-webkit-tap-highlight-color: transparent;
}
/* Pour supprimer le focus outline sur les éléments interactifs */
button,
a,
input,
textarea {
outline: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
/* Optionnel, pour les éléments spécifiques */
}
html {
scroll-behavior: smooth;
}
html,
body {
height: 100%;
}
body {
display: flex;
/* flex-direction: column; */
overflow: hidden;
background: #111;
background: radial-gradient(#250000, black);
-webkit-perspective: 1000px;
perspective: 1000px;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
}
body {
height: auto;
-webkit-perspective: unset;
perspective: unset;
-webkit-transform-style: unset;
transform-style: unset;
overflow: auto;
}
#div-fondu {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: black;
opacity: 0;
z-index: 9999;
}
/* #div-fondu2 {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: black;
opacity: 1;
z-index: 9999;
will-change: opacity;
/* transition: opacity; */
/* Ajustez la durée selon vos préférences */
/* Voile noir au lancement */
#div-fondu2 {
position: fixed;
inset: 0;
background: #000;
z-index: 9999;
opacity: 1; /* totalement noir au début */
pointer-events: none;
transition: opacity 1s ease-out;
}
/* Quand la page est prête → on laisse apparaître le site */
body.loaded #div-fondu2 {
opacity: 0;
}
.logo {
margin-top: 30px;
max-width: 45%;
}
.logo-series {
width: auto;
height: 120px;
position: relative;
}
#drag-container,
#spin-container {
position: relative;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
margin: auto;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-transform: rotateX(-10deg);
transform: rotateX(-10deg);
}
.icon-container {
width: 60px;
/* Largeur fixe pour chaque conteneur d'icône */
display: flex;
justify-content: center;
align-items: center;
}
/* Styles généraux */
.icon-wrapper {
width: 100%;
max-width: 250px;
/* Largeur maximale pour les écrans larges */
margin: 0 auto;
}
.android {
/* margin-bottom: -30px; */
margin-top: 10px;
cursor: pointer;
width: 40px;
transition: transform 0.3s ease;
}
.android:hover {
transform: scale(1.2);
}
.android:active {
transform: scale(0.9);
transition: transform 0.05s ease-out;
/* Réduit la taille lors du clic */
}
.discord {
/* margin-bottom: -30px; */
margin-top: 10px;
cursor: pointer;
width: 80px;
transition: transform 0.3s ease;
}
.discord:hover {
transform: scale(1.2);
}
.discord:active {
transform: scale(0.9);
transition: transform 0.05s ease-out;
/* Réduit la taille lors du clic */
}
.twitter {
/* margin-bottom: -30px; */
margin-top: 10px;
cursor: pointer;
width: 50px;
transition: transform 0.3s ease;
}
.twitter2 {
max-width: 3%;
cursor: pointer;
transition: transform 0.3s ease;
}
.twitter:hover {
transform: scale(1.2);
}
.twitter:active {
transform: scale(0.9);
transition: transform 0.05s ease-out;
/* Réduit la taille lors du clic */
}
.twitter2:hover {
transform: scale(1.2);
}
.twitter2:active {
transform: scale(0.9);
transition: transform 0.05s ease-out;
/* Réduit la taille lors du clic */
}
#drag-container img:not(.twitter2),
#drag-container video:not(.twitter2) {
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
line-height: 200px;
font-size: 50px;
text-align: center;
-webkit-box-shadow: 0 0 8px #fff;
box-shadow: 0 0 8px #fff;
-webkit-box-reflect: below 10px linear-gradient(transparent, transparent, #0005);
cursor: pointer;
}
#drag-container img:hover:not(.twitter2),
#drag-container video:hover:not(.twitter2) {
-webkit-box-shadow: 0 0 15px #fffd;
box-shadow: 0 0 15px #fffd;
-webkit-box-reflect: below 10px linear-gradient(transparent, transparent, #0007);
}
#drag-container p {
font-family: kalam;
position: absolute;
top: 100%;
left: 50%;
-webkit-transform: translate(-50%, -50%) rotateX(90deg);
transform: translate(-50%, -50%) rotateX(90deg);
color: #fff;
}
/* Cible Safari uniquement */
@supports (background: -webkit-named-image(i)) {
/* cache l'icône Android */
.icon-container a#android {
display: none !important;
}
.icon-wrapper {
display: initial !important;
justify-content: center !important;
align-items: center !important;
width: initial !important;
}
}
#ground {
width: 900px;
height: 900px;
position: absolute;
top: 100%;
left: 50%;
-webkit-transform: translate(-50%, -50%) rotateX(90deg);
transform: translate(-50%, -50%) rotateX(90deg);
background: -webkit-radial-gradient(center center, farthest-side, #9993, transparent);
}
@-webkit-keyframes spin {
from {
-webkit-transform: rotateY(0deg);
transform: rotateY(0deg);
}
to {
-webkit-transform: rotateY(360deg);
transform: rotateY(360deg);
}
}
@keyframes spin {
from {
-webkit-transform: rotateY(0deg);
transform: rotateY(0deg);
}
to {
-webkit-transform: rotateY(360deg);
transform: rotateY(360deg);
}
}
@-webkit-keyframes spinRevert {
from {
-webkit-transform: rotateY(360deg);
transform: rotateY(360deg);
}
to {
-webkit-transform: rotateY(0deg);
transform: rotateY(0deg);
}
}
@keyframes spinRevert {
from {
-webkit-transform: rotateY(360deg);
transform: rotateY(360deg);
}
to {
-webkit-transform: rotateY(0deg);
transform: rotateY(0deg);
}
}
.toggleButton {
margin: 1.5em;
text-align: center;
position: fixed;
z-index: 1;
}
.toggleButton__body {
position: relative;
display: inline-block;
width: 5em;
height: 2.5em;
cursor: pointer;
transition: transform 0.3s ease, background-color 0.3s ease;
border-radius: 1.25em;
background: #ddd linear-gradient(135deg, #dedede, #000);
box-shadow: 1px 1px 3px rgba(0, 0, 0, .3) inset;
}
.toggleButton__body:hover {
transform: scale(1.2);
}
.toggleButton__body:before {
position: absolute;
top: .05em;
left: 1em;
right: 1em;
content: "3D";
font-size: .75em;
line-height: 3.33em;
text-align: right;
font-family: sans-serif;
font-weight: bold;
color: #aaa;
}
.toggleButton__body:after {
position: absolute;
top: 2px;
left: 2px;
display: block;
width: calc(2.5em - 4px);
height: calc(2.5em - 4px);
content: "";
transition: .1s ease-in all;
border-radius: 1.25em;
background: #fff linear-gradient(135deg, #f0f0f0, #fff 75%);
box-shadow: 1px 1px 3px rgba(0, 0, 0, .2);
}
.toggleButton__checkbox {
display: none;
}
:checked+.toggleButton__body {
background: #7ed321 linear-gradient(135deg, #16ff00, #000000);
}
:checked+.toggleButton__body:before {
content: "3D";
text-align: left;
color: #fff;
}
:checked+.toggleButton__body:after {
left: calc(2.5em + 2px);
}
footer {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-top: 25px;
margin-bottom: 25px;
}
.footer2 {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-top: 775px;
}
.tps-wrapper {
float: left;
width: 100%;
height: 100%;
}
.wrapper {
height: auto !important;
height: 100%;
margin: 0 auto;
overflow: hidden;
margin-bottom: 50px !important;
}
/* .swiper-button-next,
.swiper-rtl .swiper-button-prev {
right: var(--swiper-navigation-sides-offset, 0px);
left: auto;
}
.swiper-button-prev,
.swiper-rtl .swiper-button-next {
left: var(--swiper-navigation-sides-offset, 0px);
right: auto;
} */
.swiper-button-next2,
.swiper-button-prev2 {
position: absolute;
top: 50%;
transform: translateY(-50%);
z-index: 10;
width: 70px;
height: 70px;
max-width: 70px;
max-height: 70px;
cursor: pointer;
}
.swiper-button-next2 {
right: 10%;
/* Positionné à droite du container */
}
.swiper-button-prev2 {
left: 10%;
/* Positionné à gauche du container */
}
.swiper-button-next2 svg,
.swiper-button-prev2 svg {
width: 70px;
height: 70px;
transition: transform 0.3s ease-in-out;
/* Transition fluide pour la transformation */
/* transform: scale(1); */
/* État initial */
}
.swiper-button-next2,
.swiper-button-prev2,
.swiper-button-next2 svg,
.swiper-button-prev2 svg {
outline: none;
/* Supprime le cadre bleu */
-webkit-tap-highlight-color: transparent;
/* Supprime l'effet de surlignage sur mobile */
}
.swiper-button-next2:focus,
.swiper-button-prev2:focus,
.swiper-button-next2 svg:focus,
.swiper-button-prev2 svg:focus {
outline: none;
/* Supprime le cadre bleu lorsqu'on utilise le focus */
}
/* Style de la div .okay */
.okay {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
margin: 0 auto;
transition: transform 0.3s ease, margin-bottom 0.3s ease;
position: relative;
}
@media (min-width: 769px) {
.okay:hover {
transform: scale(1.1);
}
.okay:active {
transform: scale(1);
transition: transform 0.05s ease-out;
}
.swiper-button-next2:hover svg,
.swiper-button-prev2:hover svg {
transform: scale(1.3);
/* Augmente la taille au survol */
}
.swiper-button-next2:active svg,
.swiper-button-prev2:active svg {
transform: scale(1);
/* Réduit la taille à 1 au clic */
transition: transform 0.05s ease-out;
/* Réduit légèrement la durée pour rendre l'effet perceptible */
}
.swiper-button-prev2 svg {
transform: rotate(180deg);
/* Rotation permanente avec état initial */
}
.swiper-button-prev2:hover svg {
transform: rotate(180deg) scale(1.5);
/* Augmente la taille au survol */
}
.swiper-button-prev2:active svg {
transform: rotate(180deg) scale(1);
/* Réduit la taille à 1 au clic */
transition-duration: 0.1s;
/* Réduit légèrement la durée pour rendre l'effet perceptible */
}
}
@media (max-width: 768px) {
.swiper-button-next2 svg,
.swiper-button-prev2 svg {
width: 50px;
height: 50px;
}
.swiper-button-next2 {
right: -7%;
}
.swiper-button-prev2 {
left: -4%;
}
.swiper-button-next2:active svg,
.swiper-button-prev2:active svg {
transform: scale(0.7);
/* Réduit la taille à 1 au clic */
transition-duration: 0.1s;
/* Réduit légèrement la durée pour rendre l'effet perceptible */
}
.swiper-button-prev2 svg {
transform: rotate(180deg);
/* Rotation permanente avec état initial */
}
.swiper-button-prev2:active svg {
transform: rotate(180deg) scale(0.7);
/* Réduit la taille à 1 au clic */
transition-duration: 0.1s;
/* Réduit légèrement la durée pour rendre l'effet perceptible */
}
}
.swiper-3d {
perspective: 700px;
}
@supports (-moz-animation: alternate) {
.swiper-3d .swiper-wrapper {
transform-style: unset !important;
}
}
.swiper-3d .swiper-wrapper {
transform-style: flat !important;
}
/* (facultatif) Safari aime mal les ombres 3D */
/* .swiper-3d .swiper-slide-shadow,
.swiper-3d .swiper-slide-shadow-left,
.swiper-3d .swiper-slide-shadow-right {
display: none !important;
} */
/* Safari (macOS + iOS) */
@supports (background: -webkit-named-image(i)) {
.swiper-3d .swiper-wrapper {
transform-style: flat !important;
}
/* (facultatif) Safari aime mal les ombres 3D */
.swiper-3d .swiper-slide-shadow,
.swiper-3d .swiper-slide-shadow-left,
.swiper-3d .swiper-slide-shadow-right {
display: none !important;
}
}
.pointer {
color: #00B0FF;
font-size: 24px;
margin-top: 15px;
position: absolute;
top: 130px;
right: -40px;
}
.pointer2 {
color: #00B0FF;
font-size: 24px;
margin-top: 15px;
position: absolute;
top: 130px;
left: -40px;
}
pre {
margin: 80px auto;
}
pre code {
padding: 35px;
border-radius: 5px;
font-size: 15px;
background: rgba(0, 0, 0, 0.1);
border: rgba(0, 0, 0, 0.05) 5px solid;
max-width: 500px;
}
.main {
width: 100%;
margin: 0 auto;
overflow: hidden;
margin-top: 25px;
}
.main h2 {
float: left;
width: 100%;
font-size: 60px;
box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
font-weight: 100;
margin: 0;
letter-spacing: -1px;
text-transform: capitalize;
}
.main h2.demo1 {
background: #1ABC9C;
}
.main .legende {
position: absolute;
color: #fff;
bottom: 0px;
left: 0;
right: 0;
background: rgba(0, 0, 0);
font-size: 30px;
text-align: center;
padding: 15px;
}
.reload.bell {
font-size: 12px;
padding: 20px;
width: 45px;
text-align: center;
height: 47px;
border-radius: 50px;
-webkit-border-radius: 50px;
-moz-border-radius: 50px;
}
.reload.bell #notification {
font-size: 25px;
line-height: 140%;
}
.reload,
.btn {
display: inline-block;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
display: inline-block;
line-height: 100%;
padding: 0.7em;
text-decoration: none;
width: 100px;
line-height: 140%;
font-size: 17px;
font-weight: bold;
-webkit-box-shadow: none;
box-shadow: none;
background-color: #4D90FE;
background-image: -webkit-linear-gradient(top, #4D90FE, #4787ED);
background-image: -webkit-moz-gradient(top, #4D90FE, #4787ED);
background-image: linear-gradient(to top, #4d90fe, #4787ed);
border: 1px solid #3079ED;
color: #FFF;
}
.reload:hover {
background: #317af2;
}
.btn {
width: 200px;
-webkit-box-shadow: none;
box-shadow: none;
background-color: #4D90FE;
background-image: -webkit-linear-gradient(top, #4D90FE, #4787ED);
background-image: -moz-linear-gradient(top, #4D90FE, #4787ED);
background-image: linear-gradient(to top, #4d90fe, #4787ed);
border: 1px solid #3079ED;
color: #FFF;
}
.clear {
width: auto;
}
.btn:hover,
.btn:hover {
background: #004cb9;
}
.btns {
float: left;
width: 100%;
margin: 50px auto;
}
.credit {
text-align: center;
color: #888;
padding: 10px 10px;
margin: 0 0 0 0;
background: #f5f5f5;
float: left;
width: 100%;
}
.credit a {
text-decoration: none;
font-weight: bold;
color: black;
}
.back {
position: absolute;
top: 0;
left: 0;
text-align: center;
display: block;
padding: 7px;
width: 100%;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
background: #f5f5f5;
font-weight: bold;
font-size: 13px;
color: #888;
-webkit-transition: all 200ms ease-out;
-moz-transition: all 200ms ease-out;
-o-transition: all 200ms ease-out;
transition: all 200ms ease-out;
}
.back:hover {
background: #eee;
}
.page-container {
float: left;
width: 100%;
margin: 0 auto 300px;
position: relative;
}
.panorama {
width: 100%;
float: left;
margin-top: -5px;
height: 700px;
}
.panorama .credit {
background: rgba(0, 0, 0, 0.2);
color: white;
font-size: 12px;
text-align: center;
position: absolute;
bottom: 0;
right: 0;
box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
float: right;
}
.tps-section {
width: 100%;
height: 500px;
-webkit-perspective: 10em;
-moz-perspective: 10em;
-ms-perspective: 10em;
-o-perspective: 10em;
perspective: 10em;
-webkit-perspective-origin: center bottom;
-moz-perspective-origin: center bottom;
-ms-perspective-origin: center bottom;
-o-perspective-origin: center bottom;
perspective-origin: center bottom;
-webkit-perspective-origin: 50% 50%;
-moz-perspective-origin: 50% 50%;
-ms-perspective-origin: 50% 50%;
-o-perspective-origin: 50% 50%;
perspective-origin: 50% 50%;
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-ms-transform-style: preserve-3d;
-o-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.tps-wrapper {
float: left;
width: 100%;
height: 100%;
}
.tps-section {
width: 100% !important;
max-width: 900px;
margin: 0 auto;
height: 500px;
}
.tps-section .tps-wrapper {
border-radius: 5px;
}
.tps-section .tps-wrapper {
position: relative;
height: 100%;
position: absolute;
}
.tps-section .tps-wrapper {
color: white;
position: absolute;
width: 100%;
height: 100%;
top: 0;
/* padding-top: 225px; */
box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
left: 0;
font-weight: bold;
text-transform: uppercase;
letter-spacing: 4px;
font-size: 20px;
font-size: 14px;
line-height: 190%;
}
.tps-section .tps-wrapper .hover-arc {
background: rgba(0, 0, 0, 0.7);
position: absolute;
width: 100%;
height: 100%;
opacity: 0;
transition: all ease .5s;
-webkit-transition: all ease .5s;
-moz-transition: all ease .5s;
}
.tps-section .tps-wrapper .hover-arc:hover {
opacity: 1;
}
.tps-section .tps-wrapper .hover-arc .arc-hover-contenu {
position: absolute;
width: 100%;
height: 20px;
font-size: 20px;
text-align: center;
top: 50%;
margin-top: -12px;
color: rgb(8, 159, 255);
}
.tps-section .tps-wrapper .hover-arc .arc-hover-contenu .bientot {
margin-top: -12px;
}
.tps-section .tps-wrapper .hover-arc.active {
opacity: 1;
}
.tps-section .tps-wrapper h2 small {
text-transform: none;
font-weight: 400;
letter-spacing: 1px;
font-size: 14px;
}
.tps-section:nth-child(1n+1) .tps-wrapper {
background: url(../images/sections/onepiece.jpg) center center;
background-size: cover;
}
.tps-section:nth-child(2n+1) .tps-wrapper {
background: url(../images/sections/monsters.jpg) center center;
background-size: cover;
background-position: bottom;
}
.tps-section:nth-child(3n+1) .tps-wrapper {
background: url(../images/sections/solo.jpg) center center;
background-size: cover;
background-position: bottom;
}
.tps-section:nth-child(4n+1) .tps-wrapper {
background: url(../images/sections/kingdom.jpg) center center;
background-size: cover;
background-position: bottom;
}
.tps-section:nth-child(5n+1) .tps-wrapper {
background: url(../images/sections/jujutsu.jpg) center center;
background-size: cover;
background-position: bottom;
}
.tps-section:nth-child(6n+1) .tps-wrapper {
background: url(../images/sections/tokyo.jpg) center center;
background-size: cover;
}
.tps-section:nth-child(7n+1) .tps-wrapper {
background: url(../images/sections/drStone/drstone2.jpg) center center;
background-size: cover;
background-position: bottom;
}
.tps-section:nth-child(8n+1) .tps-wrapper {
background: url(../images/sections/bleach.jpg) center center;
background-size: cover;
}
.tps-section:nth-child(9n+1) .tps-wrapper {
background: url(../images/sections/pluto.jpg) center center;
background-size: cover;
background-position: bottom;
}
.tps-section:nth-child(10n+1) .tps-wrapper {
background: url(../images/sections/snk.jpg) center center;
background-size: cover;
}
.tps-section:nth-child(11n+1) .tps-wrapper {
background: url(../images/sections/naruto.jpg) center center;
background-size: cover;
}
.tps-section:nth-child(12n+1) .tps-wrapper {
background: url(../images/sections/naruto-shippuden.jpg) center center;
background-size: cover;
}
.tps-section:nth-child(13n+1) .tps-wrapper {
background: url(../images/sections/boruto.jpg) center center;
background-size: cover;
}
.tps-section:nth-child(14n+1) .tps-wrapper {
background: url(../images/sections/kimetsu.jpg) center center;
background-size: cover;
background-position: bottom;
}
.tps-section:nth-child(15n+1) .tps-wrapper {
background: url(../images/sections/ousama.jpg) center center;
background-size: cover;
background-position: bottom;
}
.tps-section:nth-child(16n+1) .tps-wrapper {
background: url(../images/sections/vinland.jpg) center center;
background-size: cover;
}
.tps-section:nth-child(17n+1) .tps-wrapper {
background: url(../images/sections/mha/mha.jpg) center center;
background-size: cover;
background-position: bottom;
}
.tps-section:nth-child(18n+1) .tps-wrapper {
background: url(../images/sections/blue-lock.jpg) center center;
background-size: cover;
}
.tps-section:nth-child(19n+1) .tps-wrapper {
background: url(../images/sections/hxh.jpg) center center;
background-size: cover;
background-position: bottom;
}
.tps-section:nth-child(20n+1) .tps-wrapper {
background: url(../images/sections/fma.jpg) center center;
background-size: cover;
background-position: bottom;
}
.tps-section:nth-child(21n+1) .tps-wrapper {
background: url(../images/sections/death-note.jpg) center center;
background-size: cover;
}
.tps-section:nth-child(22n+1) .tps-wrapper {
background: url(../images/sections/dbs.jpg) center center;
background-size: cover;
}
.nouveau {
font-family: kalam;
position: absolute;
left: 0;
top: 0px;
color: #fff;
text-decoration: none;
padding-top: 10px;
font-size: 18px;
background: rgb(0 0 0 / 80%);
text-transform: none;
text-align: center;
width: 100%;
}
.retour {
position: absolute;
width: 80px;
height: 80px;
background-repeat: no-repeat;
top: 15px;
right: 18px;
cursor: pointer;
}
h1 {
text-align: center;
}
.titre h1 {
text-align: center;
color: #fff;
margin-bottom: 25px;
font-weight: unset;
word-spacing: 20px
}
.copy {
margin-left: 5px;
font-family: kalam;
}
.copy2 {
font-weight: 500;
text-decoration: none;
color: white;
font-family: kalam;
}
/* Animation d'impulsion */
@keyframes pulse-border {
0% {
box-shadow: inset 0px 0px 20px 0px #ef334e, 0px 0px 0px 0px #ef334e;
}
100% {
box-shadow: inset 0px 0px 20px 0px #ef334e, 0px 0px 10px 5px #ef334e;
}
}
@keyframes pulse-border-back {
0% {
box-shadow: inset 0px 0px 20px 0px #ef334e, 0px 0px 10px 5px #ef334e;
}
100% {
box-shadow: inset 0px 0px 20px 0px #ef334e, 0px 0px 0px 0px #ef334e;
}
}
.contact {
padding: 13px;
border-radius: 33px;
text-decoration: none;
color: white;
font-family: kalam;
box-shadow: inset 0px 0px 20px 0px #ef334e;
animation: pulse-border-back 0.5s forwards;
margin-top: 10px;
cursor: pointer;
background: none;
border: unset;
}
.contact:hover {
color: #fff;
/* background-color: #fff; */
border-color: transparent;
animation: pulse-border 0.5s forwards;
}
.contact2 {
padding: 13px;
border-radius: 33px;
text-decoration: none;
color: white;
font-family: kalam;
box-shadow: inset 0px 0px 20px 0px #ef334e;
animation: pulse-border-back 0.5s forwards;
cursor: pointer;
}
.contact2:hover {
color: #fff;
/* background-color: #fff; */
border-color: transparent;
animation: pulse-border 0.5s forwards;
}
/* Adresse révélée au clic : cliquable pour la copier (repris de jaadugar). */
.contact.revealed,
.contact2.revealed {
display: inline-flex;
align-items: center;
gap: 8px;
max-width: 100%;
cursor: pointer;
}
.contact .contact-mail,
.contact2 .contact-mail {
user-select: text;
word-break: break-all;
}
.contact .contact-ic,
.contact2 .contact-ic {
width: 1.05em;
height: 1.05em;
flex: 0 0 auto;
opacity: .8;
transition: opacity .16s ease, transform .16s ease;
}
.contact.revealed:hover .contact-ic,
.contact2.revealed:hover .contact-ic {
opacity: 1;
transform: scale(1.12);
}
.contact.copied,
.contact2.copied {
cursor: default;
}
.contact.copied .contact-ic,
.contact2.copied .contact-ic {
opacity: 1;
}
/* Style pour le bouton de retour en haut */
#backToTop {
width: auto;
height: auto;
position: fixed;
bottom: 20px;
right: 20px;
z-index: 99;
border: none;
outline: none;
box-shadow: inset 0px 0px 20px 0px #ef334e;
color: white;
cursor: pointer;
padding: 7px 14px;
border-radius: 30px;
font-size: 20px;
background: unset;
animation: pulse-border-back 0.5s forwards;
}
/* Style pour le bouton lors du survol avec la souris */
#backToTop:hover {
animation: pulse-border 0.5s forwards;
/* Couleur de fond lors du survol */
}
.don {
font-weight: 500;
border: 1.5px solid white;
padding: 7px;
border-radius: 20px;
text-decoration: none;
color: white;
margin-top: 620px;
}
.don:hover {
color: #000;
background-color: #fff;
border-color: transparent;
}
::-webkit-scrollbar-track {
border-radius: 13px;
background-color: #000;
}
::-webkit-scrollbar {
width: 13px;
background-color: #000;
}
::-webkit-scrollbar-thumb {
border-radius: 13px;
background-color: #ef334e;
background: radial-gradient(#ef334e, #000000);
box-shadow: inset 0 0 12px #ef334e;
transition: box-shadow 0.25s ease, background 0.25s ease;
}
/* Hover : glow un peu plus prononcé */
::-webkit-scrollbar-thumb:hover {
background: radial-gradient(#ef334e, #000000);
box-shadow:
inset 0 0 20px #ef334e, /* glow interne plus fort */
0 0 10px rgba(239, 51, 78, 0.85); /* halo externe plus visible */
}
.ds {
overflow: hidden;
width: 100%;
aspect-ratio: 16 /9;
margin-top: 50px;
min-height: 302px;
max-width: 640px;
}
.header {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 100%;
}
.daily {
width: stretch !important;
display: block !important;
max-width: 640px !important;
justify-content: center !important;
align-items: center !important;
margin: 0 auto !important;
}
#ds2
{
opacity: 0 !important;
z-index: -1 !important;
position: absolute;
inset: 0 !important;
position:fixed !important;
}
.banner {
position: relative !important;
top: 140px !important;
}
#actualiser {
margin: auto;
text-align: center;
}
.dispo {
color: #00ff02;
}
.prochain {
color: #ef334e;
}
.toast {
width: unset;
font-weight: bold;
background: #fff;
text-align: center;
}
body {
margin: 0;
padding: 0;
overflow-x: hidden;
color: #fff;
/* font-family: "Figtree", sans-serif; */
/* background: linear-gradient(0deg, rgba(18, 18, 18, 1) 0%, rgba(30, 30, 30, 1) 100%); */
}
.container {
max-width: 95%;
margin: 0 auto;
position: relative;
}
.container-fluid {
max-width: 95%;
margin: 0 auto;
}
/* « Reprendre la lecture » : les vignettes n'arrivent qu'après la synchro
de SekaiResume. Le bloc reste donc masqué puis apparaît en fondu, au lieu
de surgir d'un coup au milieu de la page. */
.carousel {
padding-left: 24px;
padding-right: 24px;
display: none;
opacity: 0;
/* Fondu lent : courbe douce au départ comme à l'arrivée, sans à-coup. */
transition: opacity 1.6s cubic-bezier(0.33, 0, 0.2, 1);
will-change: opacity;
}
.carousel.is-visible {
opacity: 1;
}
@media (prefers-reduced-motion: reduce) {
.carousel {
transition: none;
}
}
.carousel h2 {
margin: 0;
}
.carousel a {
text-decoration: none;
color: #fff;
}
.carousel img {
aspect-ratio: 16/9;
width: auto;
height: 150px;
/* -webkit-user-drag: none;
-khtml-user-drag: none;
-moz-user-drag: none;
-o-user-drag: none;
user-drag: none; */
/* -moz-user-select: none; */
border-radius: clamp(0px, -416.625vw, 4px);
float: left;
pointer-events: none;
}
.carousel h3 {
font-size: 16px;
margin: 0;
}
.carousel span {
color: #a7a7a7;
font-size: 14px;
}
.carousel .dragging a {
pointer-events: none;
}
.carousel .carousel__wrapper {
position: relative;
/* margin-bottom: 24px; */
}
@media only screen and (min-width: 992px) {
.carousel .carousel__wrapper.has-arrows .carousel__content {
justify-content: space-between;
}
}
@media only screen and (min-width: 992px) {
.carousel .carousel__wrapper.has-arrows .carousel__arrows {
display: flex;
}
}
.carousel .carousel__header {
display: grid;
grid-auto-flow: column;
justify-content: space-between;
align-items: center;
}
.carousel .carousel__content {
width: 100%;
overflow-y: hidden;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
scrollbar-width: none;
display: flex;
/* ← au lieu de -webkit-inline-box */
gap: 24px;
/* ← fonctionne avec flex (Safari 14+) */
flex-wrap: nowrap;
align-items: stretch;
list-style: none;
padding: 13px;
margin: 0;
cursor: grab;
}
.carousel .carousel__content>* {
flex: 0 0 auto;
/* items non étirés */
}
.carousel .carousel__content::-webkit-scrollbar {
display: none;
}
.carousel .carousel__item .carousel__description {
width: 100%;
font-family: kalam;
}
.carousel .carousel__item {
width: min-content;
cursor: pointer;
transition: transform .3s;
}
.carousel__item:hover {
transform: scale(1.1);
/* (150% zoom - Note: if the zoom is too large, it will go outside of the viewport) */
}
/* .carousel .carousel__item a {
display: flex;
justify-content: center;
justify-content: flex-start;
align-items: center;
flex-direction: column;
position: relative;
user-select: none;
margin: 10px 0px;
padding: 16px;
background: #181818;
border-radius: clamp(0px, -416.625vw, 8px);
cursor: pointer;
} */
.carousel__headline {
font-size: 45px;
font-family: kalam;
margin-bottom: unset;
cursor: default;
text-align: center;
margin-top: 20px;
white-space: nowrap;
/* Empêche le texte de se découper automatiquement */
overflow: hidden;
/* Cache tout texte qui dépasse la largeur de l'élément */
text-overflow: ellipsis;
/* Ajoute des points de suspension à la fin si le texte est trop long */
max-width: 100%;
/* Assure que le texte prend tout l'espace disponible */
}
.beta {
font-size: 22px !important;
margin-left: 10px;
color: #ef334e !important;
display: inline-block;
cursor: pointer;
}
.bi-info-circle {
margin-left: 10px;
vertical-align: super;
}
.carousel .carousel__controls {
display: grid;
grid-auto-flow: column;
grid-gap: 24px;
}
.carousel__controls {
display: none;
/* Par défaut, nous masquons les contrôles */
}
.carousel .carousel__arrow {
padding: 0;
background: transparent;
box-shadow: none;
border: 0;
}
.carousel .carousel__arrow:before {
content: "";
background: url("data:image/svg+xml; base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNSIgaGVpZ2h0PSI5IiB2aWV3Qm94PSIwIDAgMTUgOSI+Cgk8cGF0aCBmaWxsPSIjMzMzMzMzIiBkPSJNNy44NjcgOC41NzRsLTcuMjItNy4yMi43MDctLjcwOEw3Ljg2NyA3LjE2IDE0LjA1Ljk4bC43MDYuNzA3Ii8+Cjwvc3ZnPgo=");
background-size: contain;
filter: brightness(5);
display: block;
width: 18px;
height: 12px;
cursor: pointer;
}
.carousel .carousel__arrow.arrow-prev:before {
transform: rotate(90deg);
}
.carousel .carousel__arrow.arrow-next:before {
transform: rotate(-90deg);
}
.carousel .carousel__arrow.disabled::before {
filter: brightness(2);
display: none;
}
.carousel__controls {
display: block;
/* modifié de 'none' pour être visible */
position: absolute;
width: 100%;
top: 50%;
}
.carousel .carousel__arrow {
/* ... vos autres styles ... */
position: absolute;
top: 25px;
}
.carousel .arrow-prev {
left: -4.5%;
/* place la flèche à l'extrême gauche du carrousel */
}
.carousel .arrow-next {
right: -5.3%;
/* place la flèche à l'extrême droite du carrousel */
}
@keyframes move_left_right {
0% {
transform: translateX(-0px);
}
50% {
transform: translateX(5px);
}
100% {
transform: translateX(0px);
}
}
.carousel .carousel__arrow:hover {
animation: move_left_right 0.5s ease-in-out infinite;
}
.disclaimer a {
color: #fff;
}
@keyframes balance-horizontal {
0%,
100% {
transform: rotateX(5deg);
}
50% {
transform: rotateX(-5deg);
}
}
.carousel__item__image-wrapper {
position: relative;
overflow: hidden;
/* Pour éviter que le contenu dépassant les bords soit visible */
transition: transform 0.3s ease;
transform-origin: center;
/* Point autour duquel le conteneur va pivoter */
animation-duration: 1s;
/* Durée de l'animation */
animation-timing-function: ease-in-out;
/* Pour un effet d'accélération et de décélération */
animation-iteration-count: infinite;
margin-bottom: 5px;
}
.carousel__item__image {
display: block;
/* pour éviter l'espace indésirable au bas des images inline */
width: 100%;
/* ajustez selon vos besoins */
height: auto;
/* ajustez selon vos besoins */
}
#textModal .word {
display: inline-block; /* le mot devient un bloc indivisible */
}
#textModal .letter {
opacity: 0;
display: inline-block;
transform: translateY(6px);
animation: letterFade 0.35s forwards ease-out;
animation-delay: calc(var(--i) * 40ms);
}
@keyframes letterFade {
from {
opacity: 0;
transform: translateY(6px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
#adblock-phrase {
position: relative;
}
/* pulse lent tant que la classe est là */
#adblock-phrase.glow-pulse {
animation: sekaiGlowPulse 2s ease-in-out infinite;
}
@keyframes sekaiGlowPulse {
0% {
text-shadow: 0 0 0px rgba(0, 191, 255, 0);
}
50% {
text-shadow:
0 0 6px rgba(0, 191, 255, 0.95),
0 0 16px rgba(0, 229, 255, 0.9),
0 0 26px rgba(0, 229, 255, 0.7);
}
100% {
text-shadow: 0 0 0px rgba(0, 191, 255, 0);
}
}
.close-modal:link,
.close-modal:visited {
color: #fff;
}
.close-modal {
position: absolute;
right: 50px;
top: 70px;
font-size: 26px;
-webkit-transition: transform ease-out .2s;
-moz-transition: transform ease-out .2s;
-ms-transition: transform ease-out .2s;
-o-transition: transform ease-out .2s;
transition: transform ease-out .2s;
transform: rotate(0deg);
z-index: 20;
}
.close-modal:hover {
opacity: 0.6;
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-ms-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
-webkit-transition: all 400ms;
-moz-transition: all 400ms;
-ms-transition: all 400ms;
-o-transition: all 400ms;
}
.close-btn {
font-size: 17px;
line-height: 22px;
width: 45px;
height: 32px;
position: absolute;
top: 0;
right: 0;
background: rgba(0, 0, 0, 0.5);
color: white;
border: none;
padding: 5px 10px;
cursor: pointer;
padding-bottom: 29px;
z-index: 10;
}
.carousel__item__image-wrapper.swing {
animation: swing 1s infinite;
animation-timing-function: ease-in-out;
}
.close-btn:hover+.carousel__item__image-wrapper {
animation-name: swing;
}
@keyframes swing {
0%,
100% {
transform: rotate(0.5deg);
}
25% {
transform: rotate(-0.5deg);
}
50% {
transform: rotate(0.5deg);
}
75% {
transform: rotate(-0.5deg);
}
}
@keyframes shake {
10%,
90% {
transform: translate3d(-1px, 0, 0);
}
20%,
80% {
transform: translate3d(2px, 0, 0);
}
30%,
50%,
70% {
transform: translate3d(-2px, 0, 0);
}
40%,
60% {
transform: translate3d(2px, 0, 0);
}
}
@keyframes zoomOutFade {
from {
transform: scale(1);
opacity: 1;
}
to {
transform: scale(0);
opacity: 0;
}
}
.img-zoom-out {
animation: zoomOutFade 0.8s forwards;
}
.progress-bar {
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 5px;
/* ajustez selon vos besoins */
background-color: rgba(255, 255, 255, 0.5);
/* fond semi-transparent */
}
.progress {
height: 100%;
background-color: #ef334e;
/* ajustez à la couleur de votre choix */
}
@media (max-width: 768px) {
.nouveau {
font-size: 11px;
padding-top: 2px;
}
.nouveau p {
margin-bottom: unset;
}
}
@media (max-width: 768px) {
.ds {
min-width: unset;
min-height: unset;
max-width: unset;
max-height: unset;
}
.swiper-button-prev,
.swiper-button-next {
background: unset !important
}
.logo {
max-width: 50%;
margin-top: 25px;
}
.logo-series {
width: 65%;
height: 120px;
position: relative;
}
.main {
margin-top: unset;
}
.toasted {
margin-top: unset !important;
}
.carousel__headline {
font-size: 18px !important;
}
.carousel {
padding: unset !important;
}
.beta {
font-size: 15px !important;
}
.carousel .carousel__controls {
display: none !important;
}
.carousel img {
height: 120px !important;
}
.wrapper {
width: 100% !important;
}
#wrapper2 {
width: 80% !important;
}
#searchSeries {
width: 65% !important;
}
}
:root {
--bg: hsl(0 0% 5%);
--white: hsl(0 0% 90%);
--accent: hsl(0 0% 10%);
--highlight: #03dac6;
--swiper-navigation-color: #fff;
--swiper-navigation-size: 1.1em;
}
.wrapper {
width: 70%;
height: 90%;
display: flex;
align-items: center;
justify-content: center;
overflow-x: hidden;
margin-top: 10px;
}
#wrapper2 {
width: 45%;
}
.swiper-slide {
position: relative;
width: 33%;
/* aspect-ratio: 3/4; */
cursor: pointer;
border-radius: 10px;
}
.swiper-slide .swiper-overlay {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
background: #000;
opacity: 0;
/* transition: opacity 0.3s ease; */
}
.swiper-slide img {
width: 100%;
height: 100%;
aspect-ratio: 2/3;
border-radius: inherit;
object-fit: cover;
object-position: center;
}
.swiper-slide .swiper-description {
position: absolute;
bottom: 0;
padding: 0.5em;
color: var(--white);
transform: translateY(100vh);
transition: transform 0.3s ease;
}
.swiper-slide .swiper-description h2 {
font-size: 1.5rem;
}
.swiper-slide .swiper-description p {
font-size: 0.7rem;
margin-top: 0.5em;
}
.swiper-button-prev,
.swiper-button-next {
background: rgba(255, 255, 255, 0.4);
border-radius: 100%;
padding: 0.8em;
width: 0.5em;
height: 0.5em;
}
.swiper-button-next::after {
margin-left: 0.2em;
}
.swiper-slide:not(.swiper-slide-visible) {
opacity: 0;
}
.swiper-slide img {
position: relative;
filter: grayscale(0%) contrast(100%);
transition: filter 1s ease, transform 1s ease;
/* transform: scale(1); */
/* Taille normale par défaut */
}
.swiper-slide:hover img {
filter: grayscale(0%) contrast(100%);
/* transform: scale(1.05); */
/* Applique un léger zoom-in */
/* border: 5px solid black; */
/* clip-path: polygon(5% 5%, 95% 5%, 95% 95%, 5% 95%); */
}
.swiper-slide > img.grayscale {
filter: grayscale(100%) contrast(200%) !important;
}
.swiper-slide:hover:before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: radial-gradient(circle, rgba(0, 0, 0, 0.7) 20%, transparent 20%);
background-size: 5px 5px;
opacity: 0.5;
pointer-events: none;
}
/*
.swiper-slide {
transition: transform 0.5s ease-in-out !important;
}
.swiper-slide:hover {
transform: scale(1.05) !important;
}
*/
.swiper-slide {
position: relative;
transition: transform 1s ease !important;
transform-style: preserve-3d !important;
}
.swiper-slide:hover {
transform: scale(1.03) !important;
}
.container,
.wrapper {
outline: none;
-webkit-tap-highlight-color: transparent;
}
/* Pour tous les éléments interactifs à l'intérieur du carrousel */
.swiper-slide img,
.swiper-slide a,
.swiper-slide div,
.swiper-slide p,
.swiper-slide span,
.container,
.wrapper {
outline: none;
/* Supprime le cadre bleu */
-webkit-tap-highlight-color: transparent;
/* Supprime l'effet de surlignage sur mobile */
}
/* Pour les éléments en focus */
.swiper-slide img:focus,
.swiper-slide a:focus,
.swiper-slide div:focus,
.swiper-slide p:focus,
.swiper-slide span:focus,
.container:focus,
.wrapper:focus {
outline: none;
}
.search-container {
display: flex;
justify-content: center;
align-items: center;
margin-top: 30px;
}
#searchSeries {
outline: none;
width: 100%;
padding: 7px 15px;
border: 2px solid #000000;
border-radius: 100px;
background-color: #333;
color: #fff;
font-size: 16px;
/* box-shadow: rgba(0, 0, 0, 0.25) 0px 54px 55px, rgba(0, 0, 0, 0.12) 0px -12px 30px, rgba(0, 0, 0, 0.12) 0px 4px 6px, rgba(0, 0, 0, 0.17) 0px 12px 13px, rgba(0, 0, 0, 0.09) 0px -3px 5px; */
}
.ui-menu-item-wrapper {
display: flex;
align-items: center;
padding: 5px;
background-color: #333;
/* Fond des suggestions */
color: #fff;
font-family: kalam;
/* Texte des suggestions */
}
.ui-state-active,
.ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active,
a.ui-button:active,
.ui-button:active,
.ui-button.ui-state-active:hover {
border: 1px solid #222;
background: #222 url("images/ui-bg_inset-soft_30_f58400_1x100.png") 50% 50% repeat-x;
font-weight: bold;
color: #ffffff;
}
.series-title {
font-weight: bold;
}
.series-name {
font-family: 'kalam';
text-align: center;
font-size: 20px;
margin-top: 10px;
color: #a7a7a7;
line-height: 1 !important;
}
@media (max-width: 480px) {
.series-name {
display: block;
/* Affiche le texte comme un bloc en ligne pour les écrans ≤ 480px */
color: #a7a7a7;
/* Garde la couleur spécifique */
font-size: 14px;
margin-top: 5px;
}
}
/* Bouton d'ouverture push-in */
#openPushInBtn {
background-color: #ef334e;
/* Rouge vif */
color: white;
padding: 15px 30px;
border: none;
border-radius: 50px;
font-size: 18px;
font-weight: bold;
box-shadow: inset 0px 0px 20px 0px #ef334e;
background: radial-gradient(#ef334e, #000000);
width: 13%;
cursor: pointer;
transition: transform 0.3s ease, box-shadow 0.3s;
display: block;
align-self: center;
margin-top: 40px;
}
#openPushInBtn:hover {
transform: scale(1.1);
}
#openPushInBtn:active {
transform: scale(0.9);
transition: transform 0.05s ease-out;
/* Réduit la taille lors du clic */
}
@media (max-width: 768px) {
#openPushInBtn {
font-size: 0.9rem;
/* Réduire la taille de la police sur les écrans plus petits */
padding: 0.8rem 1.5rem;
/* Ajuster le padding pour les écrans plus petits */
width: 25% !important;
}
}
@media (max-width: 1000px) {
#openPushInBtn {
/* Ajuster le padding pour les écrans plus petits */
width: 18% !important;
}
}
@media (max-width: 480px) {
#openPushInBtn {
font-size: 0.8rem;
/* Taille de police encore plus petite pour les très petits écrans */
padding: 0.6rem 1rem;
/* Réduction du padding pour les petits écrans */
width: 30% !important;
/* Prendre presque toute la largeur de l'écran */
}
#pollPushIn {
width: 350px !important;
}
}
@media (max-width: 768px) {
#openPushInBtn {
font-size: 0.9rem;
/* Réduire la taille de la police sur les écrans plus petits */
padding: 0.8rem 1.5rem;
/* Ajuster le padding pour les écrans plus petits */
}
}
@media (max-width: 480px) {
#openPushInBtn {
font-size: 0.8rem;
/* Taille de police encore plus petite pour les très petits écrans */
padding: 0.6rem 1rem;
/* Réduction du padding pour les petits écrans */
width: 90%;
/* Prendre presque toute la largeur de l'écran */
}
}
/* Bouton pour fermer le panneau */
#closePushInBtn:hover,
#closePushInBtn:focus {
color: black;
text-decoration: none;
cursor: pointer;
}
/* Contenu du panneau */
#pollContent {
padding: 20px;
}
/* Style pour le panneau push-in */
#pollPushIn {
position: fixed;
top: 0;
right: -100%;
/* Commence hors de l'écran */
width: 400px;
height: 100%;
background-color: #000;
/* Fond noir */
box-shadow: -2px 0 5px rgba(0, 0, 0, 0.5);
overflow-y: auto;
transition: right 0.3s ease;
z-index: 9999 !important;
scrollbar-width: none;
}
ins[id="gpt_unit_/21849154601,22688159267/Ad.Plus-Anchor_0"] {
/* Tes styles ici */
z-index: 9998 !important;
}
/* Bouton de fermeture */
#closePushInBtn {
color: white;
font-size: 28px;
font-weight: bold;
cursor: pointer;
padding: 15px;
text-align: center;
display: block;
margin-right: 10px;
background: none;
border: none;
outline: none;
position: initial;
}
#closePushInBtn:hover {
color: #ef334e;
/* Change la couleur au survol */
}
/* Contenu du panneau */
#pollContent {
padding: 20px;
color: white;
/* Texte en blanc */
}
@media (max-width: 324px) {
#openPushInBtn,
#pollPushIn {
display: none;
}
}
/* Effet au survol */
#refresh-button:hover {
transform: scale(1.1);
}
/* Effet lors du clic */
#refresh-button:active {
transform: scale(0.95);
}
/* Initial style for the close button */
#close-button {
position: fixed;
top: 10px;
right: 10px;
background: transparent;
border: none;
color: white;
font-size: 30px;
cursor: pointer;
z-index: 20;
margin-right: 10px;
margin-bottom: 10px;
}
#close-android {
top: 10px;
right: 10px;
background: transparent;
border: none;
color: white;
font-size: 30px;
cursor: pointer;
z-index: 20;
margin-right: 10px;
margin-bottom: 10px;
}
/* Hidden state after clicking */
#close-button.hidden {
opacity: 0;
pointer-events: none;
}
/* New position (top left) */
#close-button.show-top-left {
top: 10px;
left: 10px;
right: auto;
/* Reset right positioning */
opacity: 1;
pointer-events: auto;
/* Re-enable interactions */
}
*,
:before,
:after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
[id='search-btn'] {
position: absolute;
left: -100vw;
}
[id='search-btn']~* {
--i: var(--pos, 1);
--j: calc(1 - var(--i));
}
[id='search-btn']:checked~* {
--pos: 0;
margin-right: -40px;
}
[for='search-btn'] {
order: 1;
overflow: hidden;
position: relative;
z-index: 2;
/* margin-left: -1.25em; */
width: 5em;
height: 5em;
border-radius: 50%;
transform: translate(var(--pos, -10em)) rotate(45deg);
background: hsl(calc(336 - var(--i)*269), calc(77% + var(--i)*2%), calc(49% + var(--i)*13%));
text-indent: -100vw;
transition: 0.65s ease-out;
cursor: pointer;
background: #EF334E;
}
[for='search-btn']:before,
[for='search-btn']:after {
position: absolute;
top: 50%;
left: 50%;
margin: -0.8125em;
width: 1.625em;
height: 1.625em;
transition: inherit;
content: "";
}
[for='search-btn']:before {
margin-top: -0.08125em;
height: 0.203125em;
transform-origin: 100% 0;
transform: translate(var(--pos, 0.40625em)) scalex(calc(1 - var(--i)*.5));
background: currentcolor;
}
[for='search-btn']:after {
border: solid 0.203125em currentcolor;
border-radius: calc(var(--i)*50%);
transform: translate(var(--pos, -0.40625em)) scalex(calc(var(--j)*0.125 + var(--i)));
box-shadow: inset 0 0 0 calc(var(--j)*0.8125em) currentcolor;
transition-property: border-radius, transform, box-shadow;
transition-timing-function: cubic-bezier(calc(var(--j)*.42), 0, calc(1 - var(--i)*.42), 1), cubic-bezier(calc(var(--i)*.42), 0, calc(1 - var(--j)*.42), 1);
}
[id='search-bar'] {
/* margin-right: -1.25em; */
border: none;
padding: 0 1em;
width: 20em;
height: 3.25em;
border-radius: 3.25em;
transform: translate(var(--pos, 10em));
background: #3f324d;
--cp: inset(-2em var(--pos, 100%) -2em -2em);
-webkit-clip-path: var(--cp);
clip-path: var(--cp);
color: #fff;
font: 1em kalam, century gothic, verdana, arial, sans-serif;
transition: 0.65s;
}
[id='search-bar']::placeholder {
opacity: .5;
color: inherit;
font-size: .875em;
letter-spacing: 1px;
text-shadow: 0 0 1px, 0 0 2px;
}
[id='search-bar']:focus {
outline: none;
box-shadow: 0 0 1.5em #ffeacc, 0 1.25em 1.5em rgba(0, 0, 0, 0.2);
background: #ffeacc;
color: #000;
font-family: kalam;
font-weight: bold;
}
/* Classe ajoutée lorsque l'autocomplétion est active */
.autocomplete-active {
transition: margin-bottom 1s ease;
}
/* Style pour le conteneur d'autocomplétion */
.ui-autocomplete {
padding: 10px;
border-radius: 5px;
overflow: hidden;
position: absolute;
top: 100%;
left: 0;
width: 100%;
z-index: 1000;
max-width: 45%;
}
.horizontal-autocomplete {
display: flex;
flex-direction: row;
justify-content: center;
/* Centrer les éléments horizontalement */
flex-wrap: nowrap;
margin-top: 30px;
/* Ajouter un espace entre la barre de recherche et les éléments */
width: auto;
/* S'ajuste automatiquement à la largeur des items */
}
/* Conteneur principal avec une grille */
.ui-autocomplete {
display: grid;
grid-template-columns: repeat(3, 1fr);
/* Grille de 3 colonnes */
gap: 7px;
/* Espacement entre les éléments */
padding: 0;
margin: 0;
list-style: none;
/* Supprime les puces */
justify-items: center;
padding: 7px;
/* Centre horizontalement les éléments */
}
/* Chaque élément occupe une place dans la grille */
.ui-autocomplete li {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
/* L'élément occupe toute la largeur de la colonne */
}
/* Si un seul élément, il est centré mais conserve la taille d'un élément sur 3 */
.ui-autocomplete li:nth-child(1):only-child {
grid-column: span 1;
/* Garde la taille d'une seule colonne */
justify-self: center;
/* Centre l'élément dans la grille */
}
/* Si deux éléments, ils sont centrés */
.ui-autocomplete li:nth-child(1):nth-last-child(2),
.ui-autocomplete li:nth-child(2):nth-last-child(2) {
grid-column: span 1;
/* Chaque élément prend une seule colonne */
justify-content: center;
}
/* Style pour l'image */
/* Pour les petits écrans */
@media (max-width: 480px) {
.horizontal-autocomplete {
left: 11vw !important;
/* Ajustez cette valeur pour les petits écrans */
}
.horizontal-autocomplete:has(> li:nth-child(3)) {
left: initial !important;
}
.ui-autocomplete {
max-width: 100% !important;
}
.okay {
width: 100%;
}
[for='search-btn'] {
width: 4em;
height: 4em;
}
[id='search-btn']:checked~* {
--pos: 0;
margin-right: unset !important;
}
[id='search-btn'] {
position: absolute;
left: -100vw;
}
[id='search-bar'] {
border: none;
height: 3.25em;
border-radius: 3.25em;
transform: translate(var(--pos, 10em));
background: #3f324d;
--cp: inset(-2em var(--pos, 100%) -2em -2em);
-webkit-clip-path: var(--cp);
clip-path: var(--cp);
color: #fff;
font: 1em kalam, century gothic, verdana, arial, sans-serif;
transition: 0.65s;
transform: translate(var(--pos, 0));
/* Supprime le décalage à droite */
}
[id='search-bar']:focus {
box-shadow: 0 0 0.5em #ffeacc, 0 1.25em 1.5em rgba(0, 0, 0, 0.2);
}
}
/* Pour les écrans de taille moyenne */
@media (min-width: 481px) and (max-width: 768px) {
.horizontal-autocomplete:has(> li:nth-child(3)) {
left: 30vw;
/* Ajustez cette valeur pour les écrans de taille moyenne */
}
}
/* Pour les écrans larges */
@media (min-width: 769px) and (max-width: 1024px) {
.horizontal-autocomplete:has(> li:nth-child(3)) {
left: 30vw !important;
/* Décalage par défaut pour les écrans moyens */
}
}
/* Pour les très grands écrans */
@media (min-width: 1025px) and (max-width: 1919px) {
.horizontal-autocomplete:has(> li:nth-child(3)) {
left: 35vw !important;
/* Décalage par défaut pour les écrans moyens */
}
}
/* Pour les écrans 4K et au-delà */
@media (min-width: 1920px) {
.horizontal-autocomplete:has(> li:nth-child(3)) {
left: 41vw !important;
/* Décalage par défaut pour les écrans moyens */
}
}
@keyframes fadeIn {
0% {
opacity: 0;
transform: translateX(20px);
/* L'image commence en étant un peu plus basse */
}
100% {
opacity: 1;
transform: translateX(0);
/* L'image remonte à sa position initiale */
}
}
.horizontal-autocomplete li {
display: inline-block;
margin: auto;
list-style-type: none;
}
/* Style des éléments de la liste */
.autocomplete-item {
cursor: pointer;
transition: transform 0.3s ease;
margin-right: 5px;
}
.autocomplete-item:hover {
transform: scale(1.1);
}
/* Style des images avec l'animation */
.series-image {
width: 100%;
aspect-ratio: 5 / 7;
/* Maintient un ratio 5:7 */
height: auto;
/* Hauteur automatiquement ajustée */
border-radius: 10px;
max-height: 200px;
margin-top: 40px;
opacity: 0;
/* Commence invisible */
animation: fadeIn 0.6s ease-in-out forwards;
/* Applique l'animation */
animation-delay: 0.1s;
/* Un léger délai pour un effet plus fluide */
}
.ui-helper-hidden-accessible {
display: none !important;
}
.circle-container .circle.energy {
background-image: radial-gradient(#f9ffff, #a0fdfc 10%, rgba(153, 255, 255, 0) 56%) !important;
visibility: hidden;
/* Caché par défaut, mais conservé dans le flux de la page */
opacity: 0;
/* Opacité à 0 par défaut */
transition: opacity 2s ease-in-out, visibility 0s 2s;
/* La visibilité change après l'animation */
}
.circle-container .circle.energy.fade-in {
visibility: visible;
/* Rend l'élément visible */
opacity: 1;
/* Augmente progressivement l'opacité pour le fade-in */
transition: opacity 2s ease-in-out, visibility 0s 0s;
/* Supprime le délai de visibilité */
}
#popup {
position: fixed;
top: -500px;
/* Cachée en haut de la page */
left: 0;
right: 0;
background-color: #EF334E;
color: white;
text-align: center;
padding: 20px;
font-size: 18px;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);
z-index: 1000;
transition: top 0.5s ease-in-out;
background: radial-gradient(#861b2a, #000000);
font-family: kalam;
}
#popup.show {
top: 0;
/* Animation pour faire descendre la popup */
}
#popup a {
color: #EF334E;
font-weight: bold;
text-decoration: none;
}
#popup-content {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
/* Centrer verticalement */
}
/* Style du logo similaire à celui du Play Store */
#popup-content img {
width: 80px;
/* Taille du logo */
height: 80px;
/* border-radius: 15px; */
/* Coins arrondis */
/* box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.2); */
/* Ombre douce */
margin-bottom: 15px;
/* Espace sous le logo */
}
/* Style du bouton "Télécharger maintenant" */
.download-button {
display: inline-block;
background-color: #ffffff;
/* Couleur verte inspirée du Play Store */
color: #EF334E;
padding: 12px 24px;
border-radius: 30px;
font-size: 16px;
font-weight: bold;
text-decoration: none;
transition: background-color 0.3s ease;
cursor: pointer;
margin-bottom: 10px;
/* Espacement entre les boutons */
margin-top: 15px;
}
.download-button:hover {
background-color: #000000;
/* Couleur plus sombre au survol */
}
/* Style du bouton "Fermer" */
#closePopup {
background-color: white;
color: #EF334E;
padding: 10px 20px;
border-radius: 30px;
border: none;
font-size: 16px;
font-weight: bold;
cursor: pointer;
transition: background-color 0.3s ease;
}
#closePopup:hover {
background-color: #ddd;
/* Couleur plus claire au survol */
}
.home-auth-button {
/* Ancré en haut de la page, pas de l'écran : le bouton reste au sommet et
part avec le contenu quand on descend, au lieu de suivre le défilement. */
position: absolute;
top: 18px;
right: 18px;
z-index: 1000;
display: inline-flex;
min-height: 52px;
align-items: center;
justify-content: center;
gap: 9px;
padding: 0 22px;
border: 1px solid rgba(239, 51, 78, 0.72);
border-radius: 999px;
color: #fff;
background: rgba(20, 5, 8, 0.88);
box-shadow:
inset 0 0 18px rgba(239, 51, 78, 0.34),
0 6px 22px rgba(0, 0, 0, 0.36);
font-family: kalam, cursive;
font-size: 18px;
text-decoration: none !important;
opacity: 0;
transform: translateY(-6px);
pointer-events: none;
transition:
opacity 180ms ease,
transform 180ms ease,
box-shadow 180ms ease,
background 180ms ease;
}
.home-auth-button.is-ready {
opacity: 1;
transform: translateY(0);
pointer-events: auto;
}
.home-auth-button:not(.is-connected):hover,
.home-auth-button:not(.is-connected):focus-visible {
color: #fff;
background: rgba(239, 51, 78, 0.2);
box-shadow:
inset 0 0 22px rgba(239, 51, 78, 0.52),
0 0 14px rgba(239, 51, 78, 0.46);
transform: translateY(-2px);
}
.home-auth-icon {
display: block;
width: 42px;
height: 42px;
flex: 0 0 auto;
border-radius: 50%;
object-fit: contain;
}
.home-auth-label {
display: block;
line-height: 1;
transform: translateY(2px);
}
.home-auth-mobile-plus {
display: none;
}
.home-auth-avatar,
.home-auth-avatar-fallback {
display: none;
width: 100%;
height: 100%;
border-radius: 50%;
}
.home-auth-avatar {
object-fit: cover;
}
.home-auth-avatar-fallback {
align-items: center;
justify-content: center;
color: #fff;
background: radial-gradient(circle at 35% 28%, #ef334e, #4a0711 72%);
font-size: 20px;
line-height: 1;
}
.home-auth-button.is-connected {
width: 62px;
min-height: 62px;
height: 62px;
padding: 4px;
gap: 0;
border-color: rgba(239, 51, 78, 0.9);
background:
radial-gradient(circle at 34% 26%, rgba(255, 255, 255, 0.22), transparent 24%),
rgba(26, 4, 9, 0.96);
box-shadow:
inset 0 0 17px rgba(239, 51, 78, 0.5),
0 0 17px rgba(239, 51, 78, 0.58),
0 9px 24px rgba(0, 0, 0, 0.4);
}
.home-auth-button.is-connected .home-auth-icon,
.home-auth-button.is-connected .home-auth-label {
display: none;
}
.home-auth-button.is-connected.has-avatar .home-auth-avatar {
display: block;
}
.home-auth-button.is-connected:not(.has-avatar) .home-auth-avatar-fallback {
display: flex;
}
@media (max-width: 768px) {
.home-auth-button {
top: 12px;
right: 12px;
max-width: calc(100vw - 24px);
min-height: 48px;
padding: 0 16px;
font-size: 16px;
}
.home-auth-button.is-connected {
width: 56px;
min-height: 56px;
height: 56px;
padding: 4px;
}
}
@media (max-width: 520px) {
.home-auth-button:not(.is-connected) {
width: 52px;
height: 52px;
min-height: 52px;
padding: 0;
gap: 0;
}
.home-auth-button:not(.is-connected) .home-auth-icon {
width: 50px;
height: 50px;
}
.home-auth-button:not(.is-connected) .home-auth-mobile-plus {
position: absolute;
right: -3px;
bottom: -3px;
display: grid;
width: 19px;
height: 19px;
place-items: center;
border: 2px solid #fff;
border-radius: 50%;
color: #fff;
background: #ef334e;
box-shadow: 0 2px 7px rgba(0, 0, 0, 0.55);
font-family: Arial, sans-serif;
font-size: 15px;
font-weight: 900;
line-height: 1;
}
/* Le texte reste disponible pour les lecteurs d'écran via aria-label,
mais le bouton devient compact pour ne pas recouvrir le logo. */
.home-auth-button:not(.is-connected) .home-auth-label {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
clip-path: inset(50%);
white-space: nowrap;
border: 0;
}
.home-auth-button.is-connected {
width: 52px;
min-height: 52px;
height: 52px;
}
}
@media (prefers-reduced-motion: reduce) {
.home-auth-button,
.home-auth-button.is-connected {
transition: none;
}
}
</style>
<link rel="stylesheet" href="styles/particules.css">
<!-- InMobi Choice. Consent Manager Tag v3.0 (for TCF 2.3) -->
<script>
(function() {
var host = window.location.hostname;
var element = document.createElement('script');
var firstScript = document.getElementsByTagName('script')[0];
var url = 'https://cmp.inmobi.com'
.concat('/choice/', 'YKAgzfEw1rcC-', '/', host, '/choice.js?tag_version=V3');
var uspTries = 0;
var uspTriesLimit = 3;
element.async = true;
element.type = 'text/javascript';
element.src = url;
firstScript.parentNode.insertBefore(element, firstScript);
function makeStub() {
var TCF_LOCATOR_NAME = '__tcfapiLocator';
var queue = [];
var win = window;
var cmpFrame;
function addFrame() {
var doc = win.document;
var otherCMP = !!(win.frames[TCF_LOCATOR_NAME]);
if (!otherCMP) {
if (doc.body) {
var iframe = doc.createElement('iframe');
iframe.style.cssText = 'display:none';
iframe.name = TCF_LOCATOR_NAME;
doc.body.appendChild(iframe);
} else {
setTimeout(addFrame, 5);
}
}
return !otherCMP;
}
function tcfAPIHandler() {
var gdprApplies;
var args = arguments;
if (!args.length) {
return queue;
} else if (args[0] === 'setGdprApplies') {
if (
args.length > 3 &&
args[2] === 2 &&
typeof args[3] === 'boolean'
) {
gdprApplies = args[3];
if (typeof args[2] === 'function') {
args[2]('set', true);
}
}
} else if (args[0] === 'ping') {
var retr = {
gdprApplies: gdprApplies,
cmpLoaded: false,
cmpStatus: 'stub'
};
if (typeof args[2] === 'function') {
args[2](retr);
}
} else {
if(args[0] === 'init' && typeof args[3] === 'object') {
args[3] = Object.assign(args[3], { tag_version: 'V3' });
}
queue.push(args);
}
}
function postMessageEventHandler(event) {
var msgIsString = typeof event.data === 'string';
var json = {};
try {
if (msgIsString) {
json = JSON.parse(event.data);
} else {
json = event.data;
}
} catch (ignore) {}
var payload = json.__tcfapiCall;
if (payload) {
window.__tcfapi(
payload.command,
payload.version,
function(retValue, success) {
var returnMsg = {
__tcfapiReturn: {
returnValue: retValue,
success: success,
callId: payload.callId
}
};
if (msgIsString) {
returnMsg = JSON.stringify(returnMsg);
}
if (event && event.source && event.source.postMessage) {
event.source.postMessage(returnMsg, '*');
}
},
payload.parameter
);
}
}
while (win) {
try {
if (win.frames[TCF_LOCATOR_NAME]) {
cmpFrame = win;
break;
}
} catch (ignore) {}
if (win === window.top) {
break;
}
win = win.parent;
}
if (!cmpFrame) {
addFrame();
win.__tcfapi = tcfAPIHandler;
win.addEventListener('message', postMessageEventHandler, false);
}
};
makeStub();
function makeGppStub() {
const CMP_ID = 10;
const SUPPORTED_APIS = [
'2:tcfeuv2',
'6:uspv1',
'7:usnatv1',
'8:usca',
'9:usvav1',
'10:uscov1',
'11:usutv1',
'12:usctv1'
];
window.__gpp_addFrame = function (n) {
if (!window.frames[n]) {
if (document.body) {
var i = document.createElement("iframe");
i.style.cssText = "display:none";
i.name = n;
document.body.appendChild(i);
} else {
window.setTimeout(window.__gpp_addFrame, 10, n);
}
}
};
window.__gpp_stub = function () {
var b = arguments;
__gpp.queue = __gpp.queue || [];
__gpp.events = __gpp.events || [];
if (!b.length || (b.length == 1 && b[0] == "queue")) {
return __gpp.queue;
}
if (b.length == 1 && b[0] == "events") {
return __gpp.events;
}
var cmd = b[0];
var clb = b.length > 1 ? b[1] : null;
var par = b.length > 2 ? b[2] : null;
if (cmd === "ping") {
clb(
{
gppVersion: "1.1", // must be “Version.Subversion”, current: “1.1”
cmpStatus: "stub", // possible values: stub, loading, loaded, error
cmpDisplayStatus: "hidden", // possible values: hidden, visible, disabled
signalStatus: "not ready", // possible values: not ready, ready
supportedAPIs: SUPPORTED_APIS, // list of supported APIs
cmpId: CMP_ID, // IAB assigned CMP ID, may be 0 during stub/loading
sectionList: [],
applicableSections: [-1],
gppString: "",
parsedSections: {},
},
true
);
} else if (cmd === "addEventListener") {
if (!("lastId" in __gpp)) {
__gpp.lastId = 0;
}
__gpp.lastId++;
var lnr = __gpp.lastId;
__gpp.events.push({
id: lnr,
callback: clb,
parameter: par,
});
clb(
{
eventName: "listenerRegistered",
listenerId: lnr, // Registered ID of the listener
data: true, // positive signal
pingData: {
gppVersion: "1.1", // must be “Version.Subversion”, current: “1.1”
cmpStatus: "stub", // possible values: stub, loading, loaded, error
cmpDisplayStatus: "hidden", // possible values: hidden, visible, disabled
signalStatus: "not ready", // possible values: not ready, ready
supportedAPIs: SUPPORTED_APIS, // list of supported APIs
cmpId: CMP_ID, // list of supported APIs
sectionList: [],
applicableSections: [-1],
gppString: "",
parsedSections: {},
},
},
true
);
} else if (cmd === "removeEventListener") {
var success = false;
for (var i = 0; i < __gpp.events.length; i++) {
if (__gpp.events[i].id == par) {
__gpp.events.splice(i, 1);
success = true;
break;
}
}
clb(
{
eventName: "listenerRemoved",
listenerId: par, // Registered ID of the listener
data: success, // status info
pingData: {
gppVersion: "1.1", // must be “Version.Subversion”, current: “1.1”
cmpStatus: "stub", // possible values: stub, loading, loaded, error
cmpDisplayStatus: "hidden", // possible values: hidden, visible, disabled
signalStatus: "not ready", // possible values: not ready, ready
supportedAPIs: SUPPORTED_APIS, // list of supported APIs
cmpId: CMP_ID, // CMP ID
sectionList: [],
applicableSections: [-1],
gppString: "",
parsedSections: {},
},
},
true
);
} else if (cmd === "hasSection") {
clb(false, true);
} else if (cmd === "getSection" || cmd === "getField") {
clb(null, true);
}
//queue all other commands
else {
__gpp.queue.push([].slice.apply(b));
}
};
window.__gpp_msghandler = function (event) {
var msgIsString = typeof event.data === "string";
try {
var json = msgIsString ? JSON.parse(event.data) : event.data;
} catch (e) {
var json = null;
}
if (typeof json === "object" && json !== null && "__gppCall" in json) {
var i = json.__gppCall;
window.__gpp(
i.command,
function (retValue, success) {
var returnMsg = {
__gppReturn: {
returnValue: retValue,
success: success,
callId: i.callId,
},
};
event.source.postMessage(msgIsString ? JSON.stringify(returnMsg) : returnMsg, "*");
},
"parameter" in i ? i.parameter : null,
"version" in i ? i.version : "1.1"
);
}
};
if (!("__gpp" in window) || typeof window.__gpp !== "function") {
window.__gpp = window.__gpp_stub;
window.addEventListener("message", window.__gpp_msghandler, false);
window.__gpp_addFrame("__gppLocator");
}
};
makeGppStub();
var uspStubFunction = function() {
var arg = arguments;
if (typeof window.__uspapi !== uspStubFunction) {
setTimeout(function() {
if (typeof window.__uspapi !== 'undefined') {
window.__uspapi.apply(window.__uspapi, arg);
}
}, 500);
}
};
var checkIfUspIsReady = function() {
uspTries++;
if (window.__uspapi === uspStubFunction && uspTries < uspTriesLimit) {
console.warn('USP is not accessible');
} else {
clearInterval(uspInterval);
}
};
if (typeof window.__uspapi === 'undefined') {
window.__uspapi = uspStubFunction;
var uspInterval = setInterval(checkIfUspIsReady, 6000);
}
})();
</script>
<!-- End InMobi Choice. Consent Manager Tag v3.0 (for TCF 2.2) -->
</head>
<body>
<div id="div-fondu2"></div>
<a
id="home-auth-button"
class="home-auth-button"
href="/connexion"
data-server-authenticated="false"
aria-label="Se connecter"
title="Se connecter"
>
<img
class="home-auth-icon"
src="/images/auth-login-sekai-07-white.png"
alt=""
aria-hidden="true"
>
<span class="home-auth-mobile-plus" aria-hidden="true">+</span>
<span class="home-auth-label">Connexion</span>
<img
class="home-auth-avatar"
alt=""
referrerpolicy="no-referrer"
>
<span class="home-auth-avatar-fallback" aria-hidden="true"></span>
</a>
<script>
(function initializeHomeAuthButton() {
var button = document.getElementById("home-auth-button");
var avatar = button.querySelector(".home-auth-avatar");
var fallback = button.querySelector(".home-auth-avatar-fallback");
var serverConfirmedSession =
button.dataset.serverAuthenticated === "true";
function showDisconnected() {
serverConfirmedSession = false;
button.classList.remove("is-connected", "has-avatar");
button.setAttribute("aria-label", "Se connecter");
button.setAttribute("title", "Se connecter");
avatar.removeAttribute("src");
avatar.alt = "";
fallback.textContent = "";
}
function showConnected(user, profile) {
serverConfirmedSession = true;
var displayedProfile = profile || user;
var displayedName =
displayedProfile.name || user.name || "Utilisateur Sekai";
var displayedImage = displayedProfile.image || user.image || "";
button.classList.add("is-connected");
button.setAttribute("aria-label", "Profil de " + displayedName);
button.setAttribute("title", "Profil de " + displayedName);
fallback.textContent = displayedName.charAt(0).toUpperCase();
if (displayedImage) {
avatar.src = displayedImage;
avatar.alt = "Avatar de " + displayedName;
button.classList.add("has-avatar");
} else {
avatar.removeAttribute("src");
avatar.alt = "";
button.classList.remove("has-avatar");
}
}
avatar.addEventListener("error", function () {
button.classList.remove("has-avatar");
avatar.removeAttribute("src");
avatar.alt = "";
});
window.__applySekaiHomeAuth = function (session) {
if (session && session.authenticated && session.user) {
showConnected(session.user, session.profile);
} else if (!serverConfirmedSession) {
showDisconnected();
}
button.classList.add("is-ready");
};
// Retour arrière ou page restaurée depuis le bfcache : le HTML mémorisé
// peut dater d'avant la connexion. On revalide alors auprès du serveur.
window.addEventListener("pageshow", function (event) {
if (!event.persisted) return;
window
.fetch("/api/me", {
credentials: "same-origin",
cache: "no-store"
})
.then(function (response) {
return response.ok ? response.json() : null;
})
.then(function (data) {
if (data && data.user) showConnected(data.user, data.profile);
else showDisconnected();
})
.catch(function () {
/* Hors ligne : on conserve l'état affiché. */
});
});
button.classList.add("is-ready");
})();
</script>
<script src="/api/home-auth.js"></script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-CGJD3GPLSY"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-CGJD3GPLSY');
</script>
<!-- <script src="script/bundle.umd.js"></script> -->
<!-- <script src="/script/bootstrap.min.js"></script> -->
<script src="/script/jquery2.js"></script>
<script src="/script/jquery-ui.js"></script>
<script src="/script/js-cookie.js"></script>
<!-- Reprise de lecture en localStorage (lecteurs récents : ghost, black-torch, jaadugar) -->
<script src="/script/sekai-resume.js?v=7"></script>
<!-- <script src="../styles/jquery.tiltedpage-scroll.js"></script> -->
<!-- <script src="/script/detect-gpu2.js"></script> -->
<!-- <script src="https://cdn.socket.io/4.5.4/socket.io.min.js"></script> -->
<script src="/script/maj.js"></script>
<script src="/script/swiper.js"></script>
<script src="/episodesData.js"></script>
<script src="https://geo.dailymotion.com/libs/player/xsnky.js"></script>
<script>
// var dateOP = "Disponible !";
// var dateBleach = "Disponible !";
// var dateBoruto = "Disponible !";
// var dateBlue = "Disponible !";
// var dateVinland = "Disponible !";
// var dateMha = "Disponible !";
// var dateTokyo = "Disponible !";
// var dateSnk = "Disponible !";
// var dateDrStone = "Disponible !";
// var dateKimetsu = "Disponible !";
// var dateJujutsu = "Disponible !";
// var dateOusama = "Disponible !";
// var dateSolo = "Disponible !";
// var dateKingdom = "Disponible !";
// var dateFrieren = "Disponible !";
// var dateRezero = "Disponible !";
// var dateDandadan = "Disponible !";
// var dateBluebox = "Disponible !";
// var dateDuMouvementDeLaTerre = "Disponible !";
// var dateDragonBallDaima = "Disponible !";
// var dateShangriLaFrontier = "Disponible !";
// var dateSakamoto = "Disponible !";
// var dateCarnets = "Disponible !";
// var dateFireforce = "Disponible !";
// var dateGachiakuta = "Disponible !";
// var dateSpy = "Disponible !";
// var dateOnePunchMan = "Disponible !";
// var teaserOP = "dispo";
// var teaserBleach = "dispo";
// var teaserBoruto = "dispo";
// var teaserBlue = "dispo";
// var teaserVinland = "dispo";
// var teaserMha = "dispo";
// var teaserTokyo = "dispo";
// var teaserSnk = "dispo";
// var teaserDrStone = "dispo";
// var teaserKimetsu = "dispo";
// var teaserJujutsu = "dispo";
// var teaserOusama = "dispo";
// var teaserSolo = "dispo";
// var teaserKingdom = "dispo";
// var teaserSpy = "dispo";
// var teaserFrieren = "dispo";
// var teaserRezero = "dispo";
// var teaserDandadan = "dispo";
// var teaserBluebox = "dispo";
// var teaserDuMouvementDeLaTerre = "dispo";
// var teaserDragonBallDaima = "dispo";
// var teaserShangriLaFrontier = "dispo";
// var teaserSakamoto = "dispo";
// var teaserCarnets = "dispo";
// var teaserFireforce = "dispo";
// var teaserGachiakuta = "dispo";
// var teaserOnePunchMan = "dispo";
</script>
<!-- <script src="dateOP.js"></script>
<script src="lastOP.js"></script>
<script src="dateMha.js"></script>
<script src="lastMha.js"></script>
<script src="dateBleach.js"></script>
<script src="lastBleach.js"></script>
<script src="dateBlue.js"></script>
<script src="lastBlue.js"></script>
<script src="dateDandadan.js"></script>
<script src="lastDandadan.js"></script>
<script src="dateRezero.js"></script>
<script src="lastRezero.js"></script>
<script src="dateBluebox.js"></script>
<script src="lastBluebox.js"></script>
<script src="dateDuMouvementDeLaTerre.js"></script>
<script src="lastDuMouvementDeLaTerre.js"></script>
<script src="dateDragonBallDaima.js"></script>
<script src="lastDragonBallDaima.js"></script>
<script src="dateShangriLaFrontier.js"></script>
<script src="lastShangriLaFrontier.js"></script>
<script src="dateSolo.js"></script>
<script src="lastSolo.js"></script>
<script src="dateDrStone.js"></script>
<script src="lastDrStone.js"></script>
<script src="dateSakamoto.js"></script>
<script src="lastSakamoto.js"></script>
<script src="dateCarnets.js"></script>
<script src="lastCarnets.js"></script>
<script src="dateFireforce.js"></script>
<script src="lastFireforce.js"></script>
<script src="dateGachiakuta.js"></script>
<script src="lastGachiakuta.js"></script>
<script src="dateKingdom.js"></script>
<script src="lastKingdom.js"></script>
<script src="dateSpy.js"></script>
<script src="lastSpy.js"></script>
<script src="dateOnePunchMan.js"></script>
<script src="lastOnePunchMan.js"></script> -->
<script>
// var prochainOP = lastOP + 1;
// var prochainBleach = lastBleach + 1;
// var prochainMha = lastMha + 1;
// var prochainBlue = lastBlue + 1;
// var prochainDandadan = lastDandadan + 1;
// var prochainRezero = lastRezero + 1;
// var prochainBluebox = lastBluebox + 1;
// var prochainDuMouvementDeLaTerre = lastDuMouvementDeLaTerre + 1;
// var prochainDragonBallDaima = lastDragonBallDaima + 1;
// var prochainShangriLaFrontier = lastShangriLaFrontier + 1;
// var prochainSolo = lastSolo + 1;
// var prochainDrStone = lastDrStone + 1;
// var prochainSakamoto = lastSakamoto + 1;
// var prochainCarnets = lastCarnets + 1;
// var prochainFireforce = lastFireforce + 1;
// var prochainGachiakuta = lastGachiakuta + 1;
// var prochainKingdom = lastKingdom + 1;
// var prochainSpy = lastSpy + 1;
// var prochainOnePunchMan = lastOnePunchMan + 1;
// var heureBleach = "";
// var heureDragonBallDaima = "";
// var heureDandadan = "";
// var heureBlueBox = "";
// var heureBlue = "";
// var heureDuMouvementDeLaTerre = "";
// var heureShangriLaFrontier = "";
// var heureRezero = "";
// var heureSolo = "";
// var heureDrStone = "";
// var heureSakamoto = "";
// var heureCarnets = "";
// var heureFireforce = "";
// var heureOP = "";
// var heureGachiakuta = "";
// var heureMha = "";
// var heureKingdom = "";
// var heureSpy = "";
// var heureOnePunchMan = "";
// if (dateMha != "Disponible !") {
// teaserMha = "prochain";
// heureMha = "≈ 13H00";
// }
// if (dateOP != "Disponible !") {
// teaserOP = "prochain";
// heureOP = "≈ 21h00";
// }
// if (dateBleach != "Disponible !") {
// teaserBleach = "prochain";
// heureBleach = "≈ 17h30";
// }
// if (dateBlue != "Disponible !") {
// teaserBlue = "prochain";
// heureBlue = "≈ 18h45";
// }
// if (dateDandadan != "Disponible !") {
// teaserDandadan = "prochain";
// heureDandadan = "≈ 21h00";
// }
// if (dateBluebox != "Disponible !") {
// teaserBluebox = "prochain";
// heureBlueBox = "≈ 17h30";
// }
// if (dateRezero != "Disponible !") {
// teaserRezero = "prochain";
// heureRezero = "≈ 17h15";
// }
// if (dateSolo != "Disponible !") {
// teaserSolo = "prochain";
// heureSolo = "≈ 19h30";
// }
// if (dateDrStone != "Disponible !") {
// teaserDrStone = "prochain";
// heureDrStone = "≈ 18h00";
// }
// if (dateSakamoto != "Disponible !") {
// teaserSakamoto = "prochain";
// heureSakamoto = "≈ 19h00";
// }
// if (dateCarnets != "Disponible !") {
// teaserCarnets = "prochain";
// heureCarnets = "≈ 19h00";
// }
// if (dateDuMouvementDeLaTerre != "Disponible !") {
// teaserDuMouvementDeLaTerre = "prochain";
// heureDuMouvementDeLaTerre = "≈ 17h30";
// }
// if (dateDragonBallDaima != "Disponible !") {
// teaserDragonBallDaima = "prochain";
// heureDragonBallDaima = "≈ 18h30";
// }
// if (dateShangriLaFrontier != "Disponible !") {
// teaserShangriLaFrontier = "prochain";
// heureShangriLaFrontier = "≈ 12h30";
// }
// if (dateFireforce != "Disponible !") {
// teaserFireforce = "prochain";
// heureFireforce = "≈ 21h00";
// }
// if (dateGachiakuta != "Disponible !") {
// teaserGachiakuta = "prochain";
// heureGachiakuta = "≈ 17H00";
// }
// if (dateKingdom != "Disponible !") {
// teaserKingdom = "prochain";
// heureKingdom = "≈ 21h00";
// }
// if (dateSpy != "Disponible !") {
// teaserSpy = "prochain";
// heureSpy = "≈ 17h00";
// }
// if (dateOnePunchMan != "Disponible !") {
// teaserOnePunchMan = "prochain";
// heureOnePunchMan = "≈ 20H00";
// }
// </script>
<!-- <div id="popup">
<div id="popup-content">
<img src="/images/logo-android.png" alt="Logo Android" id="app-logo">
<p>Sekai One débarque sur Android</p>
<a href="/android" class="download-button">Télécharger l'application</a>
<button class="close-modal" id="close-android"><i class="fa fa-times"></i></button>
</div>
</div> -->
<!-- <div id="popup">
<div id="popup-content">
<img src="/images/discord.png" alt="Discord Sekai">
<p>Sekai est maintenant sur Discord</p>
<a target="_blank" href="https://discord.com/invite/4QUCSWwbyM" class="download-button">Rejoindre le Sekai</a>
<button class="close-modal" id="close-android"><i class="fa fa-times"></i></button>
</div>
</div> -->
<!-- Fenêtre modale cachée au départ -->
<div id="genki-modal" style="display: none;">
<div id="modal-content"
style="z-index: 20; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.9); display: grid; justify-content: center; align-items: center;">
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div class="circle-container">
<div class="circle energy"></div>
</div>
<div
style="padding: 20px; text-align: center; border-radius: 10px; max-width: 500px; position: relative; color: white;">
<img src="https://sekai.one/images/genki.gif" alt="Goku Genkidama" style="width: 75%; height: auto; justify-self: center; border-radius:10px;">
<p id="textModal" style="margin-top: 20px; font-family:kalam;">
Sekai a besoin de votre <strong style="color: #00bfff;">énergie !</strong><br>Veuillez <strong
style="color: #00bfff;"><span id="adblock-phrase">désactiver vos bloqueurs de pubs</span></strong> et levez les bras.<br>Sekai vous promet <strong
style="color: #00bfff;">0 pub</strong> malveillante et <strong style="color: #00bfff;">0
pub</strong> sur le lecteur vidéo.
</p>
<button id="refresh-button"
style="margin-top:10px; font-family:kalam; position: relative; padding: 10px 20px; background-color: #007bff; color: white; border: 2px solid #00bfff; border-radius: 5px; cursor: pointer; font-size: 16px; font-weight: bold; overflow: hidden; box-shadow: 0 0 15px #00bfff;">
Actualiser
</button>
</div>
</div>
<button class="close-modal" id="close-button"><i class="fa fa-times"></i></button>
</div>
<audio id="genkidama-audio" loop></audio>
<script>
(function () {
var userAgent = (navigator.userAgent || "").toLowerCase();
var isTvDevice =
userAgent.includes("smart-tv") ||
userAgent.includes("tv") ||
userAgent.includes("tizen") ||
userAgent.includes("webos") ||
userAgent.includes("netcast") ||
userAgent.includes("android tv") ||
userAgent.includes("hbbtv") ||
userAgent.includes("viera") ||
userAgent.includes("bravia") ||
userAgent.includes("hisense") ||
userAgent.includes("roku") ||
userAgent.includes("fire tv") ||
userAgent.includes("chromecast");
window.__SEKAI_IS_TV_DEVICE__ = isTvDevice;
if (!isTvDevice) {
document.write('<div class="daily" id="ds2"></div>');
}
})();
</script>
<div id="div-fondu"></div>
<script>
// if (Cookies.get('mode') == undefined) {
// Cookies.set('mode', "2", { expires: 365 });
// }
// var html = '<div id="drag-container">';
// html += '<iframe class="ds" id="ds2" src="https://dailymotion.com/embed/playlist/x69icf?ui-logo=false&autoplay=1&autoplay-mute=true&mute=1&controls=1&sharing-enable=0&quality=144" allowfullscreen></iframe>';
// html += '<div id="spin-container">';
// html += '<img id="naruto-shippuden" src="images/shippuden.jpg" alt="Naruto Shippuden Streaming">';
// html += '<img id ="boruto" src="images/boruto2.jpg" alt="Boruto Streaming">';
// html += '<img id="bleach" src="images/bleach2.jpg" alt="Bleach Streaming">';
// html += '<img id="db" src="images/db.jpg" alt="Dragon Ball Streaming">';
// html += '<img id="dbz" src="images/dbz.jpg" alt="Dragon Ball Z Streaming">';
// html += '<img id="dragon-ball-super" src="images/dbs3.jpg" alt="Dragon Ball Super Streaming">';
// html += '<img id="dragon-ball-daima" src="images/dragon-ball-daima/dragon-ball-daima3.jpg" alt="Dragon Ball Daima Streaming">';
// html += '<img id="monsters" src="images/monsters.jpg" alt="Monsters Streaming">';
// html += '<img id="devilman" src="images/devilman.jpg" alt="Devilman Cry Baby Streaming">';
// html += '<img id="kingdom" src="images/kingdom.jpg" alt="Kingdom Streaming">';
// html += '<img id="spy" src="images/spy/spy.jpg" alt="Spy x Family Streaming">';
// html += '<img id="fire-force" src="images/fire-force/fire-force.jpg" alt="Fire Force Streaming">';
// html += '<img id="shangri-la-frontier" src="images/shangri-la-frontier/shangri-la-frontier.jpg" alt="Shangri-La Frontier Streaming">';
// html += '<img id="solo" src="images/solo2.jpg" alt="Solo Leveling Streaming">';
// html += '<img id="pluto" src="images/pluto.jpg" alt="Pluto Streaming">';
// html += '<img id="jujutsu" src="images/jujutsu.jpg" alt="Jujutsu Kaisen Streaming">';
// html += '<img id="code-geass" src="images/code-geass.jpg" alt="Code Geass Streaming">';
// html += '<img id="kimetsu" src="images/kimetsu.jpg" alt="Kimetsu No Yaiba Streaming">';
// html += '<img id="fate-zero" src="images/fate-zero.jpg" alt="Fate Zero Streaming">';
// html += '<img id="horion" src="images/horion.jpg" alt="Horion">';
// html += '<img id="frieren" src="images/frieren.jpg" alt="Frieren Streaming">';
// html += '<img id="re-zero" src="images/re-zero/re-zero.jpg" alt="Re:Zero Streaming">';
// html += '<img id="dandadan" src="images/dandadan/dandadan.jpg" alt="Dandadan Streaming">';
// html += '<img id="blue-box" src="images/blue-box/blue-box.jpg" alt="Blue Box Streaming">';
// html += '<img id="du-mouvement-de-la-terre" src="images/du-mouvement-de-la-terre/du-mouvement-de-la-terre.jpg" alt="Du Mouvement De La Terre Streaming">';
// html += '<img id="les-carnets-de-l-apothicaire" src="images/les-carnets-de-l-apothicaire/carnets.jpg" alt="Les Carnets de l’Apothicaire">';
// html += '<img id="sakamoto-days" src="images/sakamoto-days/sakamoto.jpg" alt="Sakamoto Days">';
// html += '<img id="ousama" src="images/ousama.jpg" alt="Ousama Ranking Streaming">';
// html += '<img id="drStone" src="images/drStone/drstone2.jpg" alt="Dr Stone Streaming">';
// html += '<img id="mha" src="images/mha/mha.jpg" alt="My Hero Academia Streaming">';
// html += '<img id="gachiakuta" src="images/gachiakuta/gachiakuta.jpg" alt="Gachiakuta Streaming">';
// html += '<img id="tokyo" src="images/tokyo-revengers.jpg" alt="Tokyo Revengers Streaming">';
// html += '<img id="vinland" src="images/vinland.jpg" alt="Vinland Saga Streaming">';
// html += '<img id="blue-lock" src="images/blue-lock.jpg" alt="Blue Lock Streaming">';
// html += '<img id ="death-note" src="images/death-note.jpg" alt="Death Note Streaming">';
// html += '<img id ="fma" src="images/fma.jpg" alt="Full Metal Alchemist Brotherhood Streaming">';
// html += '<img id="snk" src="images/snk1.jpg" alt="Shingeki No Kyojin Streaming">';
// html += '<img id="hxh" src="images/hxh.jpg" alt="Hunter X Hunter Streaming">';
// html += '<img id="one-punch-man" src="images/one-punch-man.jpg" alt="One Punch Man">';
// html += '<img id="one-piece" src="images/onepiece2.jpg" alt="One Piece Streaming">';
// html += '<img id="naruto" src="images/naruto.jpg" alt="Naruto Streaming">';
// html += '<div id="ground">';
// html += '<div class="footer2">';
// html += '<div class="copy2" style="text-align:center; cursor:default;">Sekai © 2022-2025</div>';
// html += '<div class="contact2" href="contact">Contact</div>';
// html += '<div id="twitterLink" class="no-animation" style="display: contents;">';
// html += '<img class="twitter2" src="../images/twitter.png" alt="twitter">';
// // html += '<a class="don" href="https://www.paypal.com/donate/?hosted_button_id=TNEBYBHM3JBLL&locale.x=fr_FR" target="_blank">Faire un don</a>';
// html += '</div>';
// html += '</div>';
// html += '</div>';
</script>
<div class="container-fluid" style="padding-right: unset; padding-left: unset;">
<!-- Cercles (x10) -->
<div class="circle-container"><div class="circle"></div></div>
<div class="circle-container"><div class="circle"></div></div>
<div class="circle-container"><div class="circle"></div></div>
<div class="circle-container"><div class="circle"></div></div>
<div class="circle-container"><div class="circle"></div></div>
<div class="circle-container"><div class="circle"></div></div>
<div class="circle-container"><div class="circle"></div></div>
<div class="circle-container"><div class="circle"></div></div>
<div class="circle-container"><div class="circle"></div></div>
<div class="circle-container"><div class="circle"></div></div>
<div class="header">
<!--
<button id="openPushInBtn" style="display:none;">📊 Sondage de la semaine</button>
<div id="pollPushIn">
<div id="pollContent">
<span id="closePushInBtn">×</span>
<iframe
title="StrawPoll Embed"
src="https://strawpoll.com/embed/ajnE1xa1BnW"
style="width: 100%; height: 800px; border: none;"
frameborder="0"
allowfullscreen
allowtransparency>
Loading...
</iframe>
</div>
</div>
-->
<h1>
<img class="logo" src="images/logo3.png" alt="Sekai">
</h1>
<div class="okay">
<input id="search-btn" type="checkbox">
<label for="search-btn">Show search bar</label>
<input id="search-bar" type="text" placeholder="Recherchez...">
</div>
</div>
<!-- Reprendre la lecture -->
<div class="container">
<div class="carousel">
<div class="carousel__wrapper">
<div class="carousel__header">
<p class="carousel__headline">Reprendre la lecture</p>
<div class="carousel__controls">
<button class="carousel__arrow disabled arrow-prev"></button>
<button class="carousel__arrow arrow-next"></button>
</div>
</div>
<ul class="carousel__content">
</ul>
</div>
</div>
</div>
<!-- Animes de la saison -->
<p class="carousel__headline">Animes de la Saison</p>
<div class="container" data-swiper-id="1">
<div class="wrapper">
<div class="swiper" id="swiper">
<div class="swiper-wrapper">
<div class="swiper-slide">
<img src="images/onepiece2.jpg" alt="One Piece">
<p class="series-name">One Piece</p>
<div class="nouveau">
<p>
Épisode <span class="ep" data-serie="op"></span><br>
<span class="date-teaser" data-serie="op"></span><br>
<span class="time" data-serie="op"></span>
</p>
</div>
<a href="piece?v=22">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/jaadugar/jaadugar.jpg?v=2" alt="Jaadugar">
<p class="series-name">Jaadugar - La Légende de Fatima</p>
<div class="nouveau">
<p>
Épisode <span class="ep" data-serie="jaadugar"></span><br>
<span class="date-teaser" data-serie="jaadugar"></span><br>
<span class="time" data-serie="jaadugar"></span>
</p>
</div>
<a href="jaadugar">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/bleach/bleach.jpg" alt="Bleach">
<p class="series-name">Bleach</p>
<div class="nouveau">
<p>
Épisode 41<br>
<span class="dispo">Disponible !</span>
<!-- <br>≈ 18h30 -->
</p>
</div>
<a href="Bleach">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/black-torch/black-torch.jpg?v=2" alt="Black Torch">
<p class="series-name">Black Torch</p>
<div class="nouveau">
<p>
Épisode <span class="ep" data-serie="black"></span><br>
<span class="date-teaser" data-serie="black"></span><br>
<span class="time" data-serie="black"></span>
</p>
</div>
<a href="black-torch">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/daemons/daemons.jpg" alt="Daemons Of The Shadow Realm (Yomi No Tsugai)">
<p class="series-name">Daemons Of The Shadow Realm (Yomi No Tsugai)</p>
<div class="nouveau">
<p>
Épisode <span class="ep" data-serie="daemons"></span><br>
<span class="date-teaser" data-serie="daemons"></span><br>
<span class="time" data-serie="daemons"></span>
</p>
</div>
<a href="daemons-of-the-shadow-realm">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/ghost-in-the-shell/ghost.jpg" alt="The Ghost in the Shell">
<p class="series-name">The Ghost in the Shell (2026)</p>
<div class="nouveau">
<p>
Épisode <span class="ep" data-serie="ghost"></span><br>
<span class="date-teaser" data-serie="ghost"></span><br>
<span class="time" data-serie="ghost"></span>
</p>
</div>
<a href="ghost-in-the-shell">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/one-piece/heroines.jpg" alt="One Piece : Heroines">
<p class="series-name">One Piece Heroines</p>
<div class="nouveau">
<p>
Épisode SP 15<br>
<span class="dispo">Disponible !</span>
</p>
</div>
<a href="piece/films-et-speciaux">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img class="grayscale" src="images/link-click/link-click.jpg" alt="Link Click">
<p class="series-name">Link Click</p>
<div class="nouveau">
<p>
Saison 3<br>
<span class="prochain">Vendredi 14 Août</span>
</p>
</div>
<!-- <a href="link-click">
<div class="swiper-overlay"></div>
</a> -->
</div>
<div class="swiper-slide">
<img class="grayscale" src="images/sekiro/sekiro.jpg" alt="Sekiro">
<p class="series-name">Sekiro : No Defeat</p>
<div class="nouveau">
<p>
Épisode 1<br>
<span class="prochain">Vendredi 4 Septembre</span>
</p>
</div>
<!-- <a href="sekiro">
<div class="swiper-overlay"></div>
</a> -->
</div>
<div class="swiper-slide">
<img src="images/re-zero/re-zero4.jpg" alt="Re:Zero">
<p class="series-name">Re:Zero</p>
<div class="nouveau">
<p>
Épisode <span class="ep" data-serie="rezero"></span><br>
<span class="date-teaser" data-serie="rezero"></span><br>
<span class="time" data-serie="rezero"></span>
</p>
</div>
<a href="re-zero">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/jojo/jojo.jpg" alt="JoJo's Bizarre Adventure : Steel Ball Run">
<p class="series-name">JoJo's Bizarre Adventure : Steel Ball Run</p>
<div class="nouveau">
<p>
Épisode 2<br>
<span class="prochain">♪ To Be Continued ♫</span>
</p>
</div>
<a href="jojo-s-bizarre-adventure">
<div class="swiper-overlay"></div>
</a>
</div>
</div>
</div>
</div>
<div class="swiper-button-next2" data-swiper-id="1">
<svg fill="#ffffff" height="256px" width="256px" version="1.1"
xmlns="http://www.w3.org/2000/svg"
viewbox="-29.7 -29.7 356.40 356.40"
xml:space="preserve" stroke="#ffffff">
<g><g><g>
<path d="M67.083,49l-66.75,66.5h33c18.226,0,33,14.774,33,33s-14.774,33-33,33H0v0.5l66.916,66L297,147.996L67.083,49z"></path>
</g></g></g>
</svg>
</div>
<div class="swiper-button-prev2" data-swiper-id="1">
<svg fill="#ffffff" height="256px" width="256px" version="1.1"
xmlns="http://www.w3.org/2000/svg"
viewbox="-29.7 -29.7 356.40 356.40"
xml:space="preserve" stroke="#ffffff"
style="transform: rotate(180deg);">
<g><g><g>
<path d="M67.083,49l-66.75,66.5h33c18.226,0,33,14.774,33,33s-14.774,33-33,33H0v0.5l66.916,66L297,147.996L67.083,49z"></path>
</g></g></g>
</svg>
</div>
</div>
<!-- Les Classiques -->
<p class="carousel__headline">Les Classiques</p>
<div class="container" data-swiper-id="2">
<div class="wrapper">
<div class="swiper">
<div class="swiper-wrapper">
<div class="swiper-slide">
<img src="images/snk1.jpg" alt="Shingeki no Kyojin (L'Attaque des Titans)">
<p class="series-name">Shingeki no Kyojin<br>(L'Attaque des Titans)</p>
<a href="shingeki-no-kyojin?v=5">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/hxh.jpg" alt="Hunter X Hunter">
<p class="series-name">Hunter x Hunter (2011)</p>
<a href="hunter-x-hunter?v=9">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/naruto.jpg" alt="Naruto">
<p class="series-name">Naruto</p>
<a href="naruto?v=3">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/shippuden.jpg" alt="Naruto Shippuden">
<p class="series-name">Naruto Shippuden</p>
<a href="naruto-shippuden?v=3">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/onepiece2.jpg" alt="One Piece">
<p class="series-name">One Piece</p>
<div class="nouveau">
<p>
Épisode <span class="ep" data-serie="op"></span><br>
<span class="date-teaser" data-serie="op"></span><br>
<span class="time" data-serie="op"></span>
</p>
</div>
<a href="piece?v=22">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/bleach5.jpg" alt="Bleach">
<p class="series-name">Bleach</p>
<div class="nouveau">
<p>
Arc Tybw : Partie 4<br>
<span class="prochain">Juillet 2026</span>
</p>
</div>
<a href="bleach?v=6">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/fma.jpg" alt="Fullmetal Alchemist : Brotherhood">
<p class="series-name">Fullmetal Alchemist : Brotherhood</p>
<a href="fma-brotherhood">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/death-note.jpg" alt="Death Note">
<p class="series-name">Death Note</p>
<a href="death-note?v=2">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/db.jpg" alt="Dragon Ball">
<p class="series-name">Dragon Ball</p>
<a href="dragon-ball?v=1">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/dbz.jpg" alt="Dragon Ball Z">
<p class="series-name">Dragon Ball Z</p>
<a href="dragon-ball-z?v=4">
<div class="swiper-overlay"></div>
</a>
</div>
</div>
</div>
</div>
<div class="swiper-button-next2" data-swiper-id="2">
<svg fill="#ffffff" height="256px" width="256px" version="1.1"
xmlns="http://www.w3.org/2000/svg"
viewbox="-29.7 -29.7 356.40 356.40"
xml:space="preserve" stroke="#ffffff">
<g><g><g>
<path d="M67.083,49l-66.75,66.5h33c18.226,0,33,14.774,33,33s-14.774,33-33,33H0v0.5l66.916,66L297,147.996L67.083,49z"></path>
</g></g></g>
</svg>
</div>
<div class="swiper-button-prev2" data-swiper-id="2">
<svg fill="#ffffff" height="256px" width="256px" version="1.1"
xmlns="http://www.w3.org/2000/svg"
viewbox="-29.7 -29.7 356.40 356.40"
xml:space="preserve" stroke="#ffffff"
style="transform: rotate(180deg);">
<g><g><g>
<path d="M67.083,49l-66.75,66.5h33c18.226,0,33,14.774,33,33s-14.774,33-33,33H0v0.5l66.916,66L297,147.996L67.083,49z"></path>
</g></g></g>
</svg>
</div>
</div>
<!-- Les Pépites du Sekai -->
<p class="carousel__headline">Les Pépites du Sekai</p>
<div class="container" data-swiper-id="3">
<div class="wrapper">
<div class="swiper">
<div class="swiper-wrapper">
<div class="swiper-slide">
<img src="images/code-geass.jpg" alt="Code Geass">
<p class="series-name">Code Geass</p>
<a href="code-geass">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide" id="horion-slide">
<img src="images/horion.jpg" alt="Horion">
<p class="series-name">Horion</p>
<a href="https://www.amazon.fr/dp/B096VW96KP?binding=paperback" target="_blank">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/fate-zero.jpg" alt="Fate / Zero">
<p class="series-name">Fate / Zero</p>
<a href="fate-zero">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/devilman.jpg" alt="Devilman Crybaby">
<p class="series-name">Devilman Crybaby</p>
<a href="devilman-cry-baby">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/nippon-sangoku/nippon-sangoku.jpg" alt="Nippon Sangoku">
<p class="series-name">Nippon Sangoku</p>
<a href="nippon-sangoku">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/dandadan/dandadan.jpg" alt="Dandadan">
<p class="series-name">Dandadan</p>
<div class="nouveau">
<p>
Saison 3<br>
<span class="prochain">2027</span>
</p>
</div>
<a href="dandadan?v=1">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/one-punch-man/one-punch-man2.jpg" alt="One Punch Man">
<p class="series-name">One Punch Man</p>
<a href="punch-man?v=2">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/blue-lock.jpg" alt="Blue Lock">
<p class="series-name">Blue Lock</p>
<div class="nouveau">
<p>
Saison 3<br>
<span class="prochain">été 2026</span>
</p>
</div>
<a href="blue-lock?v=2">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/du-mouvement-de-la-terre/du-mouvement-de-la-terre.jpg" alt="Du mouvement de la Terre">
<p class="series-name">Du mouvement de la Terre</p>
<a href="du-mouvement-de-la-terre">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/frieren.jpg" alt="Frieren">
<p class="series-name">Frieren</p>
<a href="frieren-streaming">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/ousama.jpg" alt="Ousama Ranking">
<p class="series-name">Ousama Ranking</p>
<a href="ousama-ranking">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/monsters.jpg" alt="Monsters : L'Enfer du Dragon Volant aux 103 Passions">
<p class="series-name">Monsters : L'Enfer du Dragon Volant aux 103 Passions</p>
<a href="monsters">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/pluto.jpg" alt="Pluto">
<p class="series-name">Pluto</p>
<a href="pluto">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/drStone/drstone2.jpg" alt="Dr. Stone">
<p class="series-name">Dr. Stone</p>
<a href="dr-stone?v=2">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/kingdom.jpg" alt="kingdom">
<p class="series-name">Kingdom</p>
<a href="kingdom?v=2">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/vinland.jpg" alt="Vinland Saga">
<p class="series-name">Vinland Saga</p>
<a href="vinland-saga?v=1">
<div class="swiper-overlay"></div>
</a>
</div>
</div>
</div>
</div>
<div class="swiper-button-next2" data-swiper-id="3">
<svg fill="#ffffff" height="256px" width="256px" version="1.1"
xmlns="http://www.w3.org/2000/svg"
viewbox="-29.7 -29.7 356.40 356.40"
xml:space="preserve" stroke="#ffffff">
<g><g><g>
<path d="M67.083,49l-66.75,66.5h33c18.226,0,33,14.774,33,33s-14.774,33-33,33H0v0.5l66.916,66L297,147.996L67.083,49z"></path>
</g></g></g>
</svg>
</div>
<div class="swiper-button-prev2" data-swiper-id="3">
<svg fill="#ffffff" height="256px" width="256px" version="1.1"
xmlns="http://www.w3.org/2000/svg"
viewbox="-29.7 -29.7 356.40 356.40"
xml:space="preserve" stroke="#ffffff"
style="transform: rotate(180deg);">
<g><g><g>
<path d="M67.083,49l-66.75,66.5h33c18.226,0,33,14.774,33,33s-14.774,33-33,33H0v0.5l66.916,66L297,147.996L67.083,49z"></path>
</g></g></g>
</svg>
</div>
</div>
<!-- Animes Populaires -->
<p class="carousel__headline">Animes Populaires</p>
<div class="container" data-swiper-id="4">
<div class="wrapper">
<div class="swiper">
<div class="swiper-wrapper">
<div class="swiper-slide">
<img src="images/kimetsu.jpg" alt="Kimetsu no Yaiba / Demon Slayer">
<p class="series-name">Kimetsu no Yaiba / Demon Slayer</p>
<div class="nouveau">
<p>
Arc Finale : Film 1<br>
<span class="prochain">2026</span>
</p>
</div>
<a href="demon-slayer?v=1">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/jujutsu.jpg" alt="Jujutsu Kaisen">
<p class="series-name">Jujutsu Kaisen</p>
<a href="jujutsu-kaisen?v=12">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/mha/mha.jpg" alt="My Hero Academia">
<p class="series-name">My Hero Academia</p>
<a href="my-hero-academia?v=16">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/atelier/atelier.jpg" alt="L'Atelier des Sorcier (Witch Hat Atelier)">
<p class="series-name">L'Atelier des Sorciers<br>(Witch Hat Atelier)</p>
<a href="atelier-des-sorciers">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/chainsaw-man/chainsaw-man.jpg" alt="Chainsaw Man">
<p class="series-name">Chainsaw Man</p>
<a href="chainsaw-man">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/gachiakuta/gachiakuta.jpg" alt="Gachiakuta">
<p class="series-name">Gachiakuta</p>
<a href="gachiakuta?v=12">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/spy/spy.jpg" alt="Spy x Family">
<p class="series-name">Spy x Family</p>
<a href="spy-x-family?v=4">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/fire-force/fire-force.jpg" alt="Fire Force">
<p class="series-name">Fire Force</p>
<a href="fire-force?v=6">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/re-zero/re-zero.jpg" alt="Re:Zero">
<p class="series-name">Re:Zero</p>
<a href="re-zero">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/shangri-la-frontier/shangri-la-frontier.jpg" alt="Shangri-la Frontier">
<p class="series-name">Shangri-la Frontier</p>
<a href="shangri-la-frontier?v=3">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/solo2.jpg" alt="Solo Leveling">
<p class="series-name">Solo Leveling</p>
<a href="solo-leveling?v=3">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/sakamoto-days/sakamoto.jpg" alt="Sakamoto Days">
<p class="series-name">Sakamoto Days</p>
<a href="sakamoto-days">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/les-carnets-de-l-apothicaire/carnets.jpg" alt="Les Carnets de l’Apothicaire (Kusuriya no Hitorigoto)">
<p class="series-name">Les Carnets de l’Apothicaire<br>(Kusuriya no Hitorigoto)</p>
<a href="carnets-apothicaire">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/blue-box/blue-box.jpg" alt="Blue Box (Ao no Hako)">
<p class="series-name">Blue Box<br>(Ao no Hako)</p>
<div class="nouveau">
<p>
Saison 2<br>
<span class="prochain">Automne 2026</span>
</p>
</div>
<a href="blue-box">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/tokyo-revengers.jpg" alt="Tokyo Revengers">
<p class="series-name">Tokyo Revengers</p>
<div class="nouveau">
<p>
Saison 4<br>
<span class="prochain">2026</span>
</p>
</div>
<a href="tokyo-revengers">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/boruto2.jpg" alt="Boruto : Naruto Next Generations">
<p class="series-name">Boruto : Naruto Next Generations</p>
<a href="boruto?v=6">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/dbs3.jpg" alt="Dragon Ball Super">
<p class="series-name">Dragon Ball Super</p>
<a href="dragon-ball-super?v=1">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/dragon-ball-daima/dragon-ball-daima3.jpg" alt="Dragon Ball Daima">
<p class="series-name">Dragon Ball Daima</p>
<a href="dragon-ball-daima?v=2">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/fate-strange/fate-strange.jpg" alt="Fate Strange Fake">
<p class="series-name">Fate Strange Fake</p>
<a href="fate-strange-fake?v=1">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/vigilantes/vigilantes.jpg" alt="My Hero Academia : Vigilantes">
<p class="series-name">My Hero Academia : Vigilantes</p>
<a href="my-hero-academia-vigilantes?v=2">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/sentenced/sentenced.jpg" alt="Sentenced to Be a Hero">
<p class="series-name">Sentenced to Be a Hero</p>
<a href="sentenced-to-be-a-hero">
<div class="swiper-overlay"></div>
</a>
</div>
<div class="swiper-slide">
<img src="images/oshi-no-ko/oshi-no-ko.jpg" alt="Oshi No Ko">
<p class="series-name">Oshi No Ko</p>
<a href="oshi-no-ko?v=1">
<div class="swiper-overlay"></div>
</a>
</div>
</div>
</div>
</div>
<div class="swiper-button-next2" data-swiper-id="4">
<svg fill="#ffffff" height="256px" width="256px" version="1.1"
xmlns="http://www.w3.org/2000/svg"
viewbox="-29.7 -29.7 356.40 356.40"
xml:space="preserve" stroke="#ffffff">
<g><g><g>
<path d="M67.083,49l-66.75,66.5h33c18.226,0,33,14.774,33,33s-14.774,33-33,33H0v0.5l66.916,66L297,147.996L67.083,49z"></path>
</g></g></g>
</svg>
</div>
<div class="swiper-button-prev2" data-swiper-id="4">
<svg fill="#ffffff" height="256px" width="256px" version="1.1"
xmlns="http://www.w3.org/2000/svg"
viewbox="-29.7 -29.7 356.40 356.40"
xml:space="preserve" stroke="#ffffff"
style="transform: rotate(180deg);">
<g><g><g>
<path d="M67.083,49l-66.75,66.5h33c18.226,0,33,14.774,33,33s-14.774,33-33,33H0v0.5l66.916,66L297,147.996L67.083,49z"></path>
</g></g></g>
</svg>
</div>
</div>
<!-- <div class="daily">
<iframe
frameborder="0"
class="ds"
src="https://geo.dailymotion.com/player/xrous.html?playlist=x69icf&mute=true"
allowfullscreen
allow="autoplay; fullscreen; web-share">
</iframe>
</div> -->
<div class="daily">
<div id="daily2"></div>
</div>
<!-- Footer -->
<footer>
<p class="copy">Sekai © 2022-2026<br></p>
<button class="contact" type="button" style="text-align: center;">Contact</button>
<div class="icon-wrapper" style="display: flex; align-items: center; justify-content: center;">
<div class="icon-container">
<div id="twitterLink" class="no-animation" style="display: contents;">
<img class="twitter" src="/images/twitter.png" alt="Twitter">
</div>
</div>
<div class="icon-container">
<a href="android" id="android" class="no-animation" style="display: contents;">
<img class="android" src="/images/android.png" alt="Android">
</a>
</div>
</div>
</footer>
</div>
<script>
(function () {
var LIVE_EPISODES_URL = "/api/episodes-live";
function getEpisodesData() {
if (window.episodesData && typeof window.episodesData === "object") {
return window.episodesData;
}
return null;
}
async function syncEpisodesDataFromServer() {
var data = getEpisodesData();
if (!data) return false;
try {
var response = await fetch(LIVE_EPISODES_URL + "?t=" + Date.now(), {
cache: "no-store",
headers: {
"Accept": "application/json"
}
});
if (!response.ok) {
console.warn("Impossible de charger /api/episodes-live :", response.status);
return false;
}
var liveData = await response.json();
var hasUpdates = false;
Object.keys(liveData).forEach(function (serie) {
var localData = data[serie];
var remoteData = liveData[serie];
if (!localData || !remoteData) return;
var localLastEpisode = Number(localData.lastEpisode || 0);
var remoteLastEpisode = Number(remoteData.lastEpisode || 0);
if (!Number.isInteger(remoteLastEpisode) || remoteLastEpisode <= 0) return;
if (remoteLastEpisode > localLastEpisode) {
localData.lastEpisode = remoteLastEpisode;
localData.date = "Disponible !";
delete localData.time;
hasUpdates = true;
}
});
return hasUpdates;
} catch (err) {
console.warn("Erreur synchronisation épisodes live :", err.message);
return false;
}
}
function renderEpisodesData() {
var data = getEpisodesData();
if (!data) return;
$('.ep').each(function () {
var $epEl = $(this);
var serie = $epEl.data('serie');
var serieData = data[serie];
if (!serieData || typeof serieData.lastEpisode === 'undefined') {
$epEl.text('');
return;
}
var dateStr = serieData.date ? String(serieData.date).trim() : "";
var isDispo = dateStr === "Disponible !";
var lastEpisode = Number(serieData.lastEpisode || 0);
if (!Number.isInteger(lastEpisode) || lastEpisode <= 0) {
$epEl.text('');
return;
}
if (isDispo) {
$epEl.text(lastEpisode);
} else {
$epEl.text(lastEpisode + 1);
}
});
$('.date-teaser').each(function () {
var $dateEl = $(this);
var serie = $dateEl.data('serie');
var serieData = data[serie];
if (!serieData || !serieData.date) {
$dateEl.text('');
return;
}
var dateStr = String(serieData.date).trim();
var isDispo = dateStr === "Disponible !";
var $timeEl = $('.time[data-serie="' + serie + '"]');
$dateEl.text(dateStr);
$dateEl.removeClass('dispo prochain');
$dateEl.addClass(isDispo ? 'dispo' : 'prochain');
if (isDispo) {
$timeEl.text('').hide();
} else {
if (serieData.time) {
$timeEl.text(serieData.time).show();
} else {
$timeEl.text('').hide();
}
}
});
}
$(function () {
var data = getEpisodesData();
if (!data) return;
// Affichage immédiat avec /episodesData.js
renderEpisodesData();
// Puis mise à jour live depuis Express
syncEpisodesDataFromServer().then(function (hasUpdates) {
if (hasUpdates) {
renderEpisodesData();
}
});
});
})();
</script>
<!-- <script>
$(function () {
if (!window.episodesData) return;
// Remplit "Épisode X" seulement si date != "Disponible !"
$('.ep').each(function () {
var $epEl = $(this);
var serie = $epEl.data('serie');
var data = episodesData[serie];
if (data && typeof data.lastEpisode !== 'undefined') {
var dateStr = data.date ? String(data.date).trim() : "";
var isDispo = (dateStr === "Disponible !");
if (!isDispo) {
$epEl.text(data.lastEpisode + 1);
} else {
$epEl.text(data.lastEpisode); // ou: $epEl.text(data.lastEpisode); si tu préfères
}
}
});
// Remplit date + ajoute la classe teaser (calculée ici)
$('.date-teaser').each(function () {
var $dateEl = $(this);
var serie = $dateEl.data('serie');
var data = episodesData[serie];
if (data && data.date) {
var dateStr = String(data.date).trim();
var isDispo = (dateStr === "Disponible !");
$dateEl.text(dateStr);
// Nettoie anciennes classes au cas où
$dateEl.removeClass('dispo prochain');
// Applique la classe selon la date
$dateEl.addClass(isDispo ? 'dispo' : 'prochain');
// Gère l'affichage du time: seulement si pas "Disponible !"
var $timeEl = $('.time[data-serie="' + serie + '"]');
if (isDispo) {
$timeEl.text('').hide();
} else {
if (data.time) {
$timeEl.text(data.time).show();
} else {
$timeEl.text('').hide();
}
}
}
});
// (Optionnel) Si tu veux garder ce bloc, il ne doit PLUS forcer l'affichage
// car c'est la date qui décide. Donc on le supprime ou on le neutralise.
// -->
<!-- je le neutralise:
$('.time').each(function () {
// ne rien faire ici
});
});
</script> -->
<script>
function affiche2D() {
// const horionSlide = document.getElementById('horion-slide');
// if (horionSlide) {
// horionSlide.addEventListener('click', function () {
// window.open("https://t.co/UupCdA6GTe", "_blank");
// });
// }
window.onload = func;
function func() {
var Codento = document.createElement("DIV");
var CodentoTxt = document.createElement("DIV");
CodentoTxt.style.position = "fixed";
CodentoTxt.style.right = "20px";
CodentoTxt.style.textDecoration = "none";
CodentoTxt.style.bottom = "50px";
document.body.appendChild(Codento);
document.body.appendChild(CodentoTxt);
}
var seriesData = [
{ label: "Black Torch", image: "images/black-torch/black-torch.jpg?v=2", url: "black-torch" },
{ label: "Bleach", image: "images/bleach3.jpg", url: "bleach?v=6" },
{ label: "Blue Box", image: "images/blue-box/blue-box.jpg", url: "blue-box", aliases: ["bluebox", "aonohako", "ao no hako"] },
{ label: "Blue Lock", image: "images/blue-lock.jpg", url: "blue-lock?v=2", aliases: ["bluelock"] },
{ label: "Boruto", image: "images/boruto2.jpg", url: "boruto?v=6", aliases: ["naruto next generations"] },
{ label: "Boku No Hero Academia", image: "images/mha/mha.jpg", url: "my-hero-academia?v=16", aliases: ["mha", "my hero academia", "myheroacademia", "bokunoheroacademia", "hero academia", "academia"] },
{ label: "Chainsaw Man", image: "images/chainsaw-man/chainsaw-man.jpg", url: "chainsaw-man", aliases: ["chainsawman"] },
{ label: "Code Geass", image: "images/code-geass.jpg", url: "code-geass", aliases: ["codegeass"] },
{ label: "Daemons Of The Shadow Realm", image: "images/daemons/daemons.jpg", url: "daemons-of-the-shadow-realm", aliases: ["daemonsoftheshadowrealm", "yominotsugai", "yomi no tsugai","tsugai"] },
{ label: "Dandadan", image: "images/dandadan/dandadan.jpg", url: "dandadan?v=1" },
{ label: "Death Note", image: "images/death-note.jpg", url: "death-note?v=2", aliases: ["deathnote"] },
{ label: "Devilman Cry Baby", image: "images/devilman.jpg", url: "devilman-cry-baby", aliases: ["devilmancrybaby"] },
{ label: "Dragon Ball", image: "images/db.jpg", url: "dragon-ball?v=1", aliases: ["db", "dragonball"] },
{ label: "Dragon Ball Daima", image: "images/dragon-ball-daima/dragon-ball-daima3.jpg", url: "dragon-ball-daima?v=2", aliases: ["dragonballdaima", "dbDaima", "daima"] },
{ label: "Dragon Ball Z", image: "images/dbz.jpg", url: "dragon-ball-z?v=4", aliases: ["dbz", "dragonballz"] },
{ label: "Dragon Ball Super", image: "images/dbs3.jpg", url: "dragon-ball-super?v=1", aliases: ["dbs", "dragonballsuper", "super","dbsuper"] },
{ label: "Dr. Stone", image: "images/drStone/drstone2.jpg", url: "dr-stone?v=2", aliases: ["dr stone", "docteur stone", "drstone", "stone"] },
{ label: "Du mouvement de la Terre", image: "images/du-mouvement-de-la-terre/du-mouvement-de-la-terre.jpg", url: "du-mouvement-de-la-terre", aliases: ["dumouvementdelaterre", "Chi: Chikyū no Undō ni Tsuite", "Chikyu", "Mouvement", "movement"] },
{ label: "Fate Strange Fake", image: "images/fate-strange/fate-strange.jpg", url: "fate-strange-fake?v=1", aliases: ["fatestrangefake"] },
{ label: "Fate Zero", image: "images/fate-zero.jpg", url: "fate-zero", aliases: ["fatezero", "zero"] },
{ label: "Fire Force", image: "images/fire-force/fire-force.jpg", url: "fire-force?v=6", aliases: ["fireforce", "Enen no Shouboutai", "EnennoShouboutai"] },
{ label: "Frieren", image: "images/frieren.jpg", url: "frieren-streaming" },
{ label: "Fullmetal Alchemist Brotherhood", image: "images/fma.jpg", url: "fma-brotherhood", aliases: ["fma", "fullmetalalchemistbrotherhood", "alchemist", "brotherhood"] },
{ label: "Gachiakuta", image: "images/gachiakuta/gachiakuta.jpg", url: "gachiakuta?v=12" },
{ label: "The Ghost in the Shell (2026)", image: "images/ghost-in-the-shell/ghost.jpg", url: "ghost-in-the-shell" },
{ label: "Horion", image: "images/horion.jpg", url: "https://www.amazon.fr/dp/B096VW96KP?binding=paperback", aliases: ["horion"] },
{ label: "Hunter X Hunter (2011)", image: "images/hxh.jpg", url: "hunter-x-hunter?v=9", aliases: ["hxh", "hunterxhunter"] },
{ label: "Jaadugar", image: "images/jaadugar/jaadugar.jpg?v=2", url: "jaadugar" },
{ label: "JoJo's Bizarre Adventure : Steel Ball Run", image: "images/jojo/jojo.jpg", url: "jojo-s-bizarre-adventure", aliases: ["jojobizarre"] },
{ label: "Jujutsu Kaisen", image: "images/jujutsu.jpg", url: "jujutsu-kaisen?v=12", aliases: ["jjk", "jujutsukaisen", "kaisen"] },
{ label: "Kimetsu No Yaiba / Demon Slayer", image: "images/kimetsu.jpg", url: "demon-slayer?v=1", aliases: ["demon slayer", "kny", "demonslayer", "kimetsunoyaiba", "slayer"] },
{ label: "Kingdom", image: "images/kingdom.jpg", url: "kingdom?v=2" },
{ label: "L'Atelier des Sorciers", image: "images/atelier/atelier.jpg", url: "atelier-des-sorciers", aliases: ["latelierdessorciers", "sorciers", "Atelierdessorciers","latelier des sorciers","atelier des sorciers","witchhatatelier","witch hat atelier"] },
{ label: "Les Carnets de l'Apothicaire", image: "images/les-carnets-de-l-apothicaire/carnets.jpg", url: "carnets-apothicaire", aliases: ["carnets", "apothicaire", "Kusuriya no Hitorigoto"] },
{ label: "Monsters : L'enfer du dragon volant aux 103 Passions", image: "images/monsters.jpg", url: "monsters" },
{ label: "My Hero Academia : Vigilantes", image: "images/vigilantes/vigilantes.jpg", url: "my-hero-academia-vigilantes?v=2", aliases: ["mha", "my hero academia", "myheroacademia", "bokunoheroacademia", "hero academia", "academia","vigilantes"] },
{ label: "Naruto", image: "images/naruto.jpg", url: "naruto?v=3" },
{ label: "Naruto Shippuden", image: "images/shippuden.jpg", url: "naruto-shippuden?v=3", aliases: ["narutoshippuden", "shippuden"] },
{ label: "Nippon Sangoku", image: "images/nippon-sangoku/nippon-sangoku.jpg", url: "nippon-sangoku", aliases: ["nipponsangoku"] },
{ label: "One Piece", image: "images/onepiece2.jpg", url: "piece?v=22", aliases: ["op", "onepiece", "piece"] },
{ label: "One Punch Man", image: "images/one-punch-man/one-punch-man2.jpg", url: "punch-man?v=2", aliases: ["onepunchman", "punch"] },
{ label: "Oshi No Ko", image: "images/oshi-no-ko/oshi-no-ko.jpg", url: "oshi-no-ko?v=1", aliases: ["oshinoko"] },
{ label: "Ousama Ranking", image: "images/ousama.jpg", url: "ousama-ranking", aliases: ["ranking of kings", "osama ranking", "rankingofkings", "ousamaranking"] },
{ label: "Pluto", image: "images/pluto.jpg", url: "pluto" },
{ label: "Re:Zero", image: "images/re-zero/re-zero.jpg", url: "re-zero", aliases: ["re zero", "rezero", "zero"] },
{ label: "Sakamoto Days", image: "images/sakamoto-days/sakamoto.jpg", url: "sakamoto-days", aliases: ["sakamotodays"] },
{ label: "Shangri-La Frontier", image: "images/shangri-la-frontier/shangri-la-frontier.jpg", url: "shangri-la-frontier?v=3", aliases: ["shangrilafrontier", "lafrontier", "frontier", "la frontier"] },
{ label: "Sentenced to Be a Hero", image: "images/sentenced/sentenced.jpg", url: "sentenced-to-be-a-hero", aliases: ["sentencedtobeahero"] },
{ label: "Solo Leveling", image: "images/solo2.jpg", url: "solo-leveling?v=3", aliases: ["sololeveling", "leveling"] },
{ label: "Shingeki No Kyojin / L'Attaque des Titans", image: "images/snk1.jpg", url: "shingeki-no-kyojin?v=5", aliases: ["snk", "l'attaque des titans", "attack on titan", "lattaque", "attaque"] },
{ label: "Spy x Family", image: "images/spy/spy.jpg", url: "spy-x-family?v=4", aliases: ["spyxfamily","family"] },
{ label: "Tokyo Revengers", image: "images/tokyo-revengers.jpg", url: "tokyo-revengers", aliases: ["tokyorevengers", "revengers"] },
{ label: "Vinland Saga", image: "images/vinland.jpg", url: "vinland-saga?v=1", aliases: ["vinlandsaga", "saga"] },
];
function normalizeSearchText(value) {
return String(value || "")
.toLowerCase()
.normalize("NFD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^a-z0-9]+/g, " ")
.trim();
}
function getAliases(item) {
return Array.isArray(item.aliases)
? item.aliases.map(normalizeSearchText)
: [];
}
function sortAlphabetically(a, b) {
return normalizeSearchText(a.label).localeCompare(
normalizeSearchText(b.label),
"fr",
{
sensitivity: "base",
numeric: true
}
);
}
function textContainsAllWords(text, words) {
return words.every(function (word) {
return text.indexOf(word) >= 0;
});
}
function customFilter(array, terms) {
var term = normalizeSearchText(terms);
if (!term) {
return [];
}
var termWords = term.split(/\s+/);
var labelStartsWithTerm = [];
var aliasStartsWithTerm = [];
var labelWordStartsWithTerm = [];
var aliasWordStartsWithTerm = [];
var labelContainsTerm = [];
var aliasContainsTerm = [];
array.forEach(function (item) {
var label = normalizeSearchText(item.label);
var aliases = getAliases(item);
var labelStarts = label.indexOf(term) === 0;
var aliasStarts = aliases.some(function (alias) {
return alias.indexOf(term) === 0;
});
var labelWordStarts = label.split(/\s+/).some(function (word) {
return word.indexOf(term) === 0;
});
var aliasWordStarts = aliases.some(function (alias) {
return alias.split(/\s+/).some(function (word) {
return word.indexOf(term) === 0;
});
});
var labelContains = textContainsAllWords(label, termWords);
var aliasContains = aliases.some(function (alias) {
return textContainsAllWords(alias, termWords);
});
// Si l'utilisateur tape une seule lettre,
// on affiche uniquement les titres visibles qui commencent par cette lettre.
if (term.length === 1) {
if (labelStarts) {
labelStartsWithTerm.push(item);
}
return;
}
if (labelStarts) {
labelStartsWithTerm.push(item);
} else if (aliasStarts) {
aliasStartsWithTerm.push(item);
} else if (labelWordStarts) {
labelWordStartsWithTerm.push(item);
} else if (aliasWordStarts) {
aliasWordStartsWithTerm.push(item);
} else if (labelContains) {
labelContainsTerm.push(item);
} else if (aliasContains) {
aliasContainsTerm.push(item);
}
});
labelStartsWithTerm.sort(sortAlphabetically);
aliasStartsWithTerm.sort(sortAlphabetically);
labelWordStartsWithTerm.sort(sortAlphabetically);
aliasWordStartsWithTerm.sort(sortAlphabetically);
labelContainsTerm.sort(sortAlphabetically);
aliasContainsTerm.sort(sortAlphabetically);
return labelStartsWithTerm
.concat(aliasStartsWithTerm)
.concat(labelWordStartsWithTerm)
.concat(aliasWordStartsWithTerm)
.concat(labelContainsTerm)
.concat(aliasContainsTerm);
}
$(".okay input[type='text']").autocomplete({
minLength: 1,
source: function (request, response) {
response(customFilter(seriesData, request.term));
},
select: function (event, ui) {
// Lancer l'animation de fondu avant la redirection
$("#div-fondu").fadeIn(300, function () {
window.location.href = ui.item.url;
});
},
open: function (event, ui) {
$(".okay").addClass("autocomplete-active");
// Calculer la hauteur de l'autocomplétion visible
var autocompleteHeight = $(".ui-autocomplete").outerHeight();
// Ajuster dynamiquement la marge en bas en fonction de la hauteur de l'autocomplétion
$(".okay").css("margin-bottom", autocompleteHeight + "px");
},
close: function (event, ui) {
$(".okay").removeClass("autocomplete-active");
// Réinitialiser la marge en bas lorsque l'autocomplétion est fermée
$(".okay").css("margin-bottom", "0px");
}
}).autocomplete("instance")._renderItem = function (ul, item) {
return $("<li>")
.hide()
.append("<div class='autocomplete-item' data-url='" + item.url + "'><img class='series-image' src='" + item.image + "'></div>")
.appendTo(ul)
.fadeIn(300);
};
// Gestion des clics sur les éléments
$(document).on("click", ".autocomplete-item", function () {
var url = $(this).data("url");
// Lancer l'animation de fondu avant la redirection
$("#div-fondu").css("display", "block").animate({ opacity: 1 }, 200, function () {
// Naviguer vers la page cible après l'animation
window.location.href = url;
});
});
$("label[for='search-btn']").on("click", function (event) {
setTimeout(function () {
var searchCheckbox = $("#search-btn");
var searchBar = $("#search-bar");
if (searchCheckbox.prop("checked")) {
searchBar.focus();
}
}, 0);
});
// Gestion de l'appui sur la touche "Enter" pour sélectionner le premier élément
$(".okay input[type='text']").on("keydown", function (event) {
if (event.keyCode === 13) {
var firstItem = $("#ui-id-1").children("li:visible").first();
if (firstItem.length) {
firstItem.find(".autocomplete-item").click();
event.preventDefault();
}
}
});
// Ajouter une classe pour le menu d'autocomplétion pour le rendre horizontal
$(".okay input[type='text']").autocomplete("instance").menu.element.addClass("horizontal-autocomplete");
// Customisez l'apparence et la position du menu
// $("#search-bar").autocomplete("instance").menu.element.addClass("horizontal-autocomplete");
// $("#search-bar").autocomplete({
// minLength: 1,
// source: function (request, response) {
// var filteredResults = customFilter(seriesData, request.term);
// response(filteredResults.slice(0, 5));
// },
// select: function (event, ui) {
// window.location.href = ui.item.url;
// },
// focus: function (event, ui) {
// // Logique lors du survol des éléments (facultatif)
// }
// }).autocomplete("instance")._renderItem = function (ul, item) {
// return $("<li>")
// .append("<div><img class='series-image' src='" + item.image + "'><span class='series-title'>" + item.label + "</span></div>")
// .appendTo(ul);
// };
// var swiper = new Swiper(".swiper", {
// loop: true,
// slidesPerView: 3,
// effect: "coverflow",
// coverflowEffect: {
// rotate: 20,
// slideShadows: true
// },
// navigation: {
// nextEl: ".swiper-button-next2",
// prevEl: ".swiper-button-prev2"
// },
// keyboard: {
// enabled: true,
// onlyInViewport: false
// }
// });
document.querySelectorAll('.container').forEach(function (container) {
var swiperId = container.getAttribute('data-swiper-id');
new Swiper(container.querySelector('.swiper'), {
loop: true,
slidesPerView: 3,
effect: "coverflow",
coverflowEffect: {
rotate: 20,
slideShadows: true
},
navigation: {
nextEl: `.swiper-button-next2[data-swiper-id="${swiperId}"]`,
prevEl: `.swiper-button-prev2[data-swiper-id="${swiperId}"]`
},
keyboard: {
enabled: true,
onlyInViewport: false
}
});
});
// var allSwipers = document.querySelectorAll('.swiper');
// // Parcourez chaque élément et initialisez Swiper
// allSwipers.forEach(function (swiperElement) {
// // Vérifiez si l'élément a l'ID "swiper2"
// var slidesPerView = swiperElement.id === "swiper2" ? 2 : 3;
// var swiperOptions = {
// loop: true,
// slidesPerView: slidesPerView,
// effect: "coverflow",
// coverflowEffect: {
// rotate: 20,
// slideShadows: true
// },
// keyboard: {
// enabled: true,
// onlyInViewport: false
// }
// };
// // Ajouter la navigation uniquement si l'ID n'est pas "swiper2"
// if (swiperElement.id !== "swiper2") {
// swiperOptions.navigation = {
// nextEl: ".swiper-button-next",
// prevEl: ".swiper-button-prev"
// };
// }
// new Swiper(swiperElement, swiperOptions);
// });
// var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
// var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
// return new bootstrap.Tooltip(tooltipTriggerEl)
// })
window.addEventListener('load', () => {
const COMPONENT_SELECTOR = '.carousel__wrapper';
const CONTROLS_SELECTOR = '.carousel__controls';
const CONTENT_SELECTOR = '.carousel__content';
const components = document.querySelectorAll(COMPONENT_SELECTOR);
for (let i = 0; i < components.length; i++) {
const component = components[i];
const content = component.querySelector(CONTENT_SELECTOR);
let x = 0;
let mx = 0;
const maxScrollWidth = content.scrollWidth - content.clientWidth / 2 - content.clientWidth / 2;
const nextButton = component.querySelector('.arrow-next');
const prevButton = component.querySelector('.arrow-prev');
if (maxScrollWidth !== 0) {
component.classList.add('has-arrows');
}
if (nextButton) {
nextButton.addEventListener('click', function (event) {
event.preventDefault();
x = content.clientWidth / 2 + content.scrollLeft + 0;
content.scroll({
left: x,
behavior: 'smooth',
});
});
}
if (prevButton) {
prevButton.addEventListener('click', function (event) {
event.preventDefault();
x = content.clientWidth / 2 - content.scrollLeft + 0;
content.scroll({
left: -x,
behavior: 'smooth',
});
});
}
/**
* Mouse move handler.
*
* @param {object} e event object.
*/
const mousemoveHandler = (e) => {
const mx2 = e.pageX - content.offsetLeft;
if (mx) {
content.scrollLeft = content.sx + mx - mx2;
}
};
/**
* Mouse down handler.
*
* @param {object} e event object.
*/
const mousedownHandler = (e) => {
content.sx = content.scrollLeft;
mx = e.pageX - content.offsetLeft;
content.classList.add('dragging');
};
/**
* Scroll handler.
*/
const scrollHandler = () => {
toggleArrows();
};
/**
* Toggle arrow handler.
*/
const toggleArrows = () => {
if (content.scrollLeft > maxScrollWidth - 10) {
nextButton.classList.add('disabled');
} else if (content.scrollLeft < 10) {
prevButton.classList.add('disabled');
} else {
nextButton.classList.remove('disabled');
prevButton.classList.remove('disabled');
}
};
/**
* Mouse up handler.
*/
const mouseupHandler = () => {
mx = 0;
content.classList.remove('dragging');
};
content.addEventListener('mousemove', mousemoveHandler);
content.addEventListener('mousedown', mousedownHandler);
if (component.querySelector(CONTROLS_SELECTOR) !== undefined) {
content.addEventListener('scroll', scrollHandler);
}
content.addEventListener('mouseup', mouseupHandler);
content.addEventListener('mouseleave', mouseupHandler);
}
});
let isScrolling = false;
let mouseDownX, mouseDownY;
// Sur mousedown, enregistrez la position de la souris
$(document).on('mousedown', '.carousel__content', function (e) {
isScrolling = false; // réinitialisez le drapeau
mouseDownX = e.pageX;
mouseDownY = e.pageY;
});
// Sur mousemove, vérifiez si la souris a été déplacée
$(document).on('mousemove', '.carousel__content', function (e) {
if (Math.abs(mouseDownX - e.pageX) > 10 || Math.abs(mouseDownY - e.pageY) > 10) {
isScrolling = true;
}
});
$(document).ready(function () {
$('#twitterLink').click(function (event) {
event.preventDefault(); // Empêche le comportement par défaut du lien
// Sur PC, ouvre le lien Twitter dans un nouvel onglet
window.open('https://twitter.com/OneSekai', '_blank');
});
});
$(document).ready(function () {
// Appliquer l'effet de fondu aux éléments normaux (liens)
$('a:not(.no-animation)').on('click', function (e) {
// Vérifier si le lien a l'attribut target="_blank"
if ($(this).attr('target') === '_blank') {
return; // Sortir de la fonction pour ouvrir le lien sans effet de fondu
}
e.preventDefault(); // Empêcher la navigation immédiate
var lienCible = $(this).attr('href');
// Ajouter la classe 'active' au div .hover-arc
$(this).find('.hover-arc').addClass('active');
// Commencer l'animation de fondu
$('#div-fondu').css('display', 'block').animate({ opacity: 1 }, 200, function () {
// Retirer la classe 'active' et naviguer vers la page cible
$('.hover-arc').removeClass('active');
window.location.href = lienCible;
});
});
});
function generateCarouselItem(id, num, titre, time, duration) {
var episode = "Episode ";
if (id == "reprise-op-oav") {
episode = "OAV ";
}
if (id == "reprise-op-sp") {
episode = "SP ";
}
if (id == "reprise-op-film" || id == "reprise-naruto-film") {
episode = "Film ";
}
if (id == "reprise-op-kai" || id == "reprise-bleach-kai" || id == "reprise-naruto-kai"
|| id == "reprise-shippuden-kai" || id == "reprise-boruto") {
episode = "Kai ";
}
if (id == "reprise-op-remake") {
episode = "Remake ";
}
if (id == "reprise-monsters") {
episode = "Monsters";
num = "";
}
if (id == "reprise-chainsaw") {
episode = "Film ";
}
let html = '';
html += '<li class="carousel__item" id="' + id + '">';
html += '<div class="carousel__item__image-wrapper">'; // Nouvelle div pour l'encapsulation
html += '<button class="close-btn">×</button>'; // bouton croix
html += '<button style="cursor:pointer; border-style:unset; z:index:2147483647;">';
html += '<img class="carousel__item__image" src="images/reprise/' + id + '.jpg" alt="" />';
if (id == "reprise-op" || id == "reprise-op-kai" || id == "reprise-op-remake" || id == "reprise-op-oav"
|| id == "reprise-op-sp" || id == "reprise-op-film" || id == "reprise-jujutsu" || id == "reprise-bleach-TYBW"
|| id == "reprise-atelier" || id == "reprise-daemons" || id == "reprise-nippon" || id == "reprise-drstone"
|| id == "reprise-rezero" || id == "reprise-jojo" || id == "reprise-shippuden-kai" || id == "reprise-naruto-kai"
|| id == "reprise-naruto-film" || id == "reprise-db-kai"
|| id == "reprise-bleach-kai" || id == "reprise-shingeki" || id == "reprise-bluelock" || id == "reprise-dbz-kai"
|| id == "reprise-monsters" || id == "reprise-dbs"
|| id == "reprise-ghost" || id == "reprise-blacktorch" || id == "reprise-jaadugar" || id == "reprise-boruto" || id == "reprise-deathnote"
) {
html += '<div class="progress-bar"><div class="progress" style="width:0%;"></div></div></button>';
}
html += '</div>'; // Fermeture de la div d'encapsulation
html += '<div class="carousel__description">';
html += '<h3 class="carousel__title">' + episode + num + '</h3><span class="carousel__subtitle">' + titre + '</span>';
html += '</div></li>';
const percentage = (time / duration) * 100 || 0;
html = html.replace('width:0%;', `width:${percentage}%;`); // Mettre à jour la largeur de la barre de progression
return html;
}
// Séries dont la reprise est stockée en localStorage (lecteurs récents).
// Toutes les autres restent sur js-cookie, inchangées.
const RESUME_LS_SERIES = ['ghost', 'blacktorch', 'jaadugar', 'daemons', 'nippon', 'rezero', 'bleachTYBW'];
function isLocalStorageSerie(seriesName) {
return RESUME_LS_SERIES.indexOf(seriesName) !== -1;
}
/* Une seule lecture des deux magasins pour tout le carrousel : SekaiResume.get()
reparse l'intégralité du localStorage et Cookies.get(nom) reparse toute la
chaîne document.cookie à chaque appel. Multiplié par les ~700 comparaisons
du tri, c'était le principal blocage au chargement de l'accueil. */
function readResumeSnapshot() {
let store = {};
let cookies = {};
try {
if (window.SekaiResume) store = SekaiResume.all() || {};
} catch (error) {
store = {};
}
try {
if (window.Cookies) cookies = Cookies.get() || {};
} catch (error) {
cookies = {};
}
return { store: store, cookies: cookies };
}
// Renvoie { id, num, titre, time, duration, ts } quelle que soit la source, ou null.
// `snapshot` est optionnel : sans lui, la fonction lit les magasins elle-même.
function getResumeEntry(seriesName, snapshot) {
const snap = snapshot || readResumeSnapshot();
const stored = snap.store[seriesName];
// Les entrées du magasin sont écrites normalisées : id, num et titre suffisent
// à valider, comme le faisait SekaiResume.get().
const lsEntry =
stored && stored.id && stored.num && stored.titre ? stored : null;
if (isLocalStorageSerie(seriesName)) return lsEntry;
/* Les lecteurs historiques écrivent des cookies, les récents le localStorage
(One Piece est à cheval : sagas 1 à 11 en cookies, saga 12 en localStorage).
SekaiResume recopie les cookies dans le localStorage au chargement, donc on
garde simplement la source la plus récente des deux. Le localStorage sert
aussi de filet quand le navigateur a purgé les cookies (quota par domaine). */
const cookieTs = Number(snap.cookies[seriesName + 'Timestamp']) || 0;
if (lsEntry && (Number(lsEntry.ts) || 0) >= cookieTs) return lsEntry;
const id = snap.cookies[seriesName + 'ID'];
const num = snap.cookies[seriesName + 'Num'];
const titre = snap.cookies[seriesName + 'Titre'];
if (!id || !num || !titre) return null;
return {
id: id,
num: num,
titre: titre,
time: snap.cookies[seriesName + 'Time'],
duration: snap.cookies[seriesName + 'Duration'],
ts: cookieTs
};
}
// Le bloc n'est rendu visible qu'une fois toutes les vignettes insérées :
// on évite ainsi un fondu par série et un saut de mise en page.
function revealResumeCarousel() {
const carousel = document.querySelector('.carousel');
if (!carousel) return;
if (!document.querySelector('.carousel__content').children.length) {
$(carousel).hide();
carousel.classList.remove('is-visible');
return;
}
$(carousel).show();
checkCarouselScroll();
// Deux frames : la première applique display, la seconde déclenche la
// transition d'opacité (sinon le navigateur fusionne les deux).
requestAnimationFrame(function () {
requestAnimationFrame(function () {
carousel.classList.add('is-visible');
});
});
}
const RESUME_SERIES = ['shippuden', 'shippudenKai', 'kimetsu', 'shingeki', 'ousama', 'vinland', 'mha', 'bluelock',
'fma', 'deathnote', 'jujutsu', 'tokyo', 'drstone', 'dbs', 'hxh', 'naruto', 'narutoKai', 'boruto',
'bleach', 'bleachKai', 'bleachTYBW', 'op','onepunch', 'opKai', 'opRemake', 'opFilm', 'opSp', 'opOav', 'pluto', 'solo', 'kingdom',
'monsters', 'codegeass', 'devilman', 'frieren', 'fatezero', 'fireforce', 'dbKai', 'dbzKai', "narutoFilm", "rezero",
"dandadan", "bluebox", "dumouvementdelaterre", "dragonballdaima", "shangrilafrontier", "lescarnets",
"sakamotodays","spy","gachiakuta","chainsaw","sentenced","fateStrange","vigilantes","oshinoko","jojo","daemons","atelier","nippon",
"jaadugar","blacktorch","ghost"]; // Ajoutez d'autres séries ici
// Reprises existantes, la plus récente en tête. Un seul instantané des magasins
// sert aux 63 séries et au tri.
function collectResumeEntries() {
const snapshot = readResumeSnapshot();
return RESUME_SERIES
.map(function (seriesName) {
const entry = getResumeEntry(seriesName, snapshot);
return entry ? { serie: seriesName, entry: entry } : null;
})
.filter(function (item) { return item !== null; })
.sort(function (a, b) {
return (Number(b.entry.ts) || 0) - (Number(a.entry.ts) || 0);
});
}
function resumeSignature(items) {
return items.map(function (item) {
return item.serie + ':' + item.entry.num + ':' + (Number(item.entry.ts) || 0);
}).join('|');
}
let renderedResumeSignature = null;
/* Une seule écriture DOM puis un seul calcul de largeur : insérer les vignettes
une par une forçait un recalcul de mise en page à chaque tour. La signature
évite de reconstruire le carrousel quand la synchro n'a rien changé. */
function renderResumeCarousel() {
const content = document.querySelector('.carousel__content');
if (!content) return;
const items = collectResumeEntries();
const signature = resumeSignature(items);
if (signature === renderedResumeSignature) return;
renderedResumeSignature = signature;
content.innerHTML = items.map(function (item) {
return generateCarouselItem(
item.entry.id,
item.entry.num,
item.entry.titre,
item.entry.time,
item.entry.duration
);
}).join('');
revealResumeCarousel();
}
/* Affichage immédiat depuis le cache local, puis rafraîchissement une fois la
synchro serveur revenue (jusqu'à 2,5 s d'attente) : le carrousel n'attend
plus le réseau pour apparaître. */
renderResumeCarousel();
if (window.SekaiResume && window.SekaiResume.ready) {
window.SekaiResume.ready.finally(renderResumeCarousel);
}
function convertSeriesId(seriesId) {
// Supprimer le préfixe 'reprise-'
let cleanedId = seriesId.replace('reprise-', '');
// Convertir 'naruto-shippuden-kai' en 'shippudenKai' et 'reprise-kimetsu' en 'kimetsu'
let parts = cleanedId.split('-');
let camelCaseParts = parts.map((word, index) => {
// Si c'est le premier mot, le garder en minuscule
if (index === 0) return word.toLowerCase();
// Sinon, capitaliser
return word.charAt(0).toUpperCase() + word.slice(1);
});
return camelCaseParts.join('') + 'ID'; // Ajouter 'ID' à la fin
}
$(document).ready(function () {
$('.close-btn').hover(
function () {
$(this).closest('.carousel__item__image-wrapper').addClass('swing');
},
function () {
$(this).closest('.carousel__item__image-wrapper').removeClass('swing');
}
);
});
$(document).on('click', '.close-btn', function (event) {
event.stopPropagation();
let listItem = $(this).closest('.carousel__item');
let rawSeriesId = listItem.attr('id');
let seriesId = convertSeriesId(rawSeriesId);
// Convertir la première lettre en minuscule
seriesId = seriesId.charAt(0).toLowerCase() + seriesId.slice(1);
// Animation de suppression de l'élément
listItem.animate({ opacity: 0, width: 0 }, 500, function () {
// Supprimer l'élément une fois l'animation terminée
listItem.remove();
// Vérifiez si les contrôles du carrousel sont toujours nécessaires
checkCarouselScroll();
// Supprimez les cookies associés
Cookies.remove(seriesId);
// Retirer aussi la progression locale et distante. Les anciens
// lecteurs sont désormais recopiés dans SekaiResume par le pont
// watch-progress.js.
const lsSerie = seriesId.replace(/ID$/, '');
if (window.SekaiResume) {
SekaiResume.remove(lsSerie);
}
// Vérifiez si le carrousel est vide et masquez-le si c'est le cas
if ($('.carousel__content').children().length == 0) {
$('.carousel').hide().removeClass('is-visible');
}
});
});
function redirectTo(url) {
if (isScrolling) {
e.preventDefault();
e.stopPropagation();
isScrolling = false;
}
else {
// // Commencer l'animation de fondu
$('#div-fondu').css('display', 'block').animate({ opacity: 1 }, 200, function () {
// // Naviguer vers la page cible après l'animation
window.location.href = url;
});
}
}
function checkCarouselScroll() {
let $carouselContent = $('.carousel__content'); // Adaptez ce sélecteur si nécessaire
let carouselWidth = $carouselContent.outerWidth();
let contentWidth = 0;
// Calculer la largeur totale du contenu du carrousel
$carouselContent.children().each(function () {
contentWidth += $(this).outerWidth(true); // En incluant la marge
});
// Si la largeur totale du contenu est supérieure à la largeur du carrousel, afficher les contrôles
if (contentWidth > carouselWidth) {
$('.carousel__controls').show();
} else {
$('.carousel__controls').hide();
}
}
// Exécuter la vérification au chargement de la page
$(document).ready(function () {
checkCarouselScroll();
});
$(document).on('click', '#reprise-shippuden', function (e) {
redirectTo('naruto-shippuden?v=3&reprise=true');
});
$(document).on('click', '#reprise-shippuden-kai', function (e) {
redirectTo('naruto-shippuden?v=3&reprisekai=true');
});
$(document).on('click', '#reprise-kimetsu', function (e) {
redirectTo('demon-slayer?v=1&reprise=true');
});
$(document).on('click', '#reprise-shingeki', function (e) {
redirectTo('shingeki-no-kyojin?v=5&reprise=true');
});
$(document).on('click', '#reprise-ousama', function (e) {
redirectTo('ousama-ranking?reprise=true');
});
$(document).on('click', '#reprise-vinland', function (e) {
redirectTo('vinland-saga?v=1&reprise=true');
});
$(document).on('click', '#reprise-mha', function (e) {
redirectTo('my-hero-academia?v=16&reprise=true');
});
$(document).on('click', '#reprise-bluelock', function (e) {
redirectTo('blue-lock?v=2&reprise=true');
});
$(document).on('click', '#reprise-fma', function (e) {
redirectTo('fma-brotherhood?reprise=true');
});
$(document).on('click', '#reprise-deathnote', function (e) {
redirectTo('death-note?v=2&reprise=true');
});
$(document).on('click', '#reprise-jujutsu', function (e) {
redirectTo('jujutsu-kaisen?v=12&reprise=true');
});
$(document).on('click', '#reprise-kingdom', function (e) {
redirectTo('kingdom?v=2&reprise=true');
});
$(document).on('click', '#reprise-spy', function (e) {
redirectTo('spy-x-family?v=4&reprise=true');
});
$(document).on('click', '#reprise-onepunch', function (e) {
redirectTo('punch-man?v=2&reprise=true');
});
$(document).on('click', '#reprise-fireforce', function (e) {
redirectTo('fire-force?v=6&reprise=true');
});
$(document).on('click', '#reprise-frieren', function (e) {
redirectTo('frieren-streaming?reprise=true');
});
$(document).on('click', '#reprise-chainsaw', function (e) {
redirectTo('chainsaw-man?reprise=true');
});
$(document).on('click', '#reprise-rezero', function (e) {
reprendreLecture('rezero', 're-zero');
});
$(document).on('click', '#reprise-dandadan', function (e) {
redirectTo('dandadan?v=1&reprise=true');
});
$(document).on('click', '#reprise-nippon', function (e) {
reprendreLecture('nippon', 'nippon-sangoku');
});
// Ces 3 lecteurs lisent leur progression dans le localStorage. On leur signale
// qu'on vient du carrousel via un drapeau sessionStorage à usage unique :
// pas de ?reprise=true dans l'URL, et une visite directe ne reprend pas la lecture.
function reprendreLecture(serie, url) {
try {
sessionStorage.setItem('sekai:autoresume', serie);
console.info("[Reprise] drapeau posé:", serie, "→ relu:", sessionStorage.getItem('sekai:autoresume'));
} catch (error) {
console.warn("[Reprise] sessionStorage indisponible sur l'accueil:", error);
/* stockage indisponible : la page s'ouvrira simplement au début */
}
redirectTo(url);
}
$(document).on('click', '#reprise-ghost', function (e) {
reprendreLecture('ghost', 'ghost-in-the-shell');
});
$(document).on('click', '#reprise-blacktorch', function (e) {
reprendreLecture('blacktorch', 'black-torch');
});
$(document).on('click', '#reprise-jaadugar', function (e) {
reprendreLecture('jaadugar', 'jaadugar');
});
$(document).on('click', '#reprise-atelier', function (e) {
redirectTo('atelier-des-sorciers?reprise=true');
});
$(document).on('click', '#reprise-daemons', function (e) {
reprendreLecture('daemons', 'daemons-of-the-shadow-realm');
});
$(document).on('click', '#reprise-jojo', function (e) {
redirectTo('jojo-s-bizarre-adventure?reprise=true');
});
$(document).on('click', '#reprise-oshinoko', function (e) {
redirectTo('oshi-no-ko?v=1&reprise=true');
});
$(document).on('click', '#reprise-vigilantes', function (e) {
redirectTo('my-hero-academia-vigilantes?v=2&reprise=true');
});
$(document).on('click', '#reprise-fate-strange', function (e) {
redirectTo('fate-strange-fake?v=1&reprise=true');
});
$(document).on('click', '#reprise-sentenced', function (e) {
redirectTo('sentenced-to-be-a-hero?reprise=true');
});
$(document).on('click', '#reprise-gachiakuta', function (e) {
redirectTo('gachiakuta?v=12&reprise=true');
});
$(document).on('click', '#reprise-shangrilafrontier', function (e) {
redirectTo('shangri-la-frontier?v=3&reprise=true');
});
$(document).on('click', '#reprise-dragonballdaima', function (e) {
redirectTo('dragon-ball-daima?v=2&reprise=true');
});
$(document).on('click', '#reprise-dumouvementdelaterre', function (e) {
redirectTo('du-mouvement-de-la-terre?reprise=true');
});
$(document).on('click', '#reprise-sakamotodays', function (e) {
redirectTo('sakamoto-days?reprise=true');
});
$(document).on('click', '#reprise-lescarnets', function (e) {
redirectTo('carnets-apothicaire?reprise=true');
});
$(document).on('click', '#reprise-bluebox', function (e) {
redirectTo('blue-box?reprise=true');
});
$(document).on('click', '#reprise-db-kai', function (e) {
redirectTo('dragon-ball?v=1&reprisekai=true');
});
$(document).on('click', '#reprise-dbz-kai', function (e) {
redirectTo('dragon-ball-z?v=4&reprisekai=true');
});
$(document).on('click', '#reprise-monsters', function (e) {
redirectTo('monsters?reprise=true');
});
$(document).on('click', '#reprise-devilman', function (e) {
redirectTo('devilman-cry-baby?reprise=true');
});
$(document).on('click', '#reprise-codegeass', function (e) {
redirectTo('code-geass?reprise=true');
});
$(document).on('click', '#reprise-solo', function (e) {
redirectTo('solo-leveling?v=3&reprise=true');
});
$(document).on('click', '#reprise-pluto', function (e) {
redirectTo('pluto?reprise=true');
});
$(document).on('click', '#reprise-fatezero', function (e) {
redirectTo('fate-zero?reprise=true');
});
$(document).on('click', '#reprise-tokyo', function (e) {
redirectTo('tokyo-revengers?reprise=true');
});
$(document).on('click', '#reprise-drstone', function (e) {
redirectTo('dr-stone?v=2&reprise=true');
});
$(document).on('click', '#reprise-bleach-TYBW', function (e) {
reprendreLecture('bleachTYBW', 'bleach-streaming/arc-5');
});
$(document).on('click', '#reprise-boruto', function (e) {
redirectTo('boruto?v=6&reprise=true');
});
$(document).on('click', '#reprise-dbs', function () {
if (Cookies.get('dbsNum') <= 14 && Cookies.get('dbsTitre') == 'Dragon Ball Super') {
redirectTo('dragon-ball-super/arc-1?reprise=true');
}
else if (Cookies.get('dbsNum') >= 15 && Cookies.get('dbsNum') <= 27 && Cookies.get('dbsTitre') == 'Dragon Ball Super') {
redirectTo('dragon-ball-super/arc-2?reprise=true');
}
else if (Cookies.get('dbsNum') >= 28 && Cookies.get('dbsNum') <= 46 && Cookies.get('dbsTitre') == 'Dragon Ball Super') {
redirectTo('dragon-ball-super/arc-3?reprise=true');
}
else if (Cookies.get('dbsNum') >= 47 && Cookies.get('dbsNum') <= 76 && Cookies.get('dbsTitre') == 'Dragon Ball Super') {
redirectTo('dragon-ball-super/arc-4?reprise=true');
}
// else if (Cookies.get('dbsNum') >= 1 && Cookies.get('dbsNum') <= 43 && Cookies.get('dbsTitre') == 'Super Dragon Ball Heroes') {
// redirectTo('dragon-ball-super/sdbh?reprise=true');
// }
else {
redirectTo('dragon-ball-super/arc-5?reprise=true');
}
});
$(document).on('click', '#reprise-hxh', function () {
if (Cookies.get('hxhNum') <= 21) {
redirectTo('hxh-streaming/arc-1-examen-hunter?reprise=true');
}
else if (Cookies.get('hxhNum') >= 22 && Cookies.get('hxhNum') <= 26) {
redirectTo('hxh-streaming/arc-2-kukuru-mountain?reprise=true');
}
else if (Cookies.get('hxhNum') >= 27 && Cookies.get('hxhNum') <= 36) {
redirectTo('hxh-streaming/arc-3-tour-celeste?reprise=true');
}
else if (Cookies.get('hxhNum') >= 37 && Cookies.get('hxhNum') <= 58) {
redirectTo('hxh-streaming/arc-4-york-shin-city?reprise=true');
}
else if (Cookies.get('hxhNum') >= 59 && Cookies.get('hxhNum') <= 75) {
redirectTo('hxh-streaming/arc-5-greed-island?reprise=true');
}
else if (Cookies.get('hxhNum') >= 76 && Cookies.get('hxhNum') <= 136) {
redirectTo('hxh-streaming/arc-6-kimera-ants?reprise=true');
}
else if (Cookies.get('hxhNum') >= 137 && Cookies.get('hxhNum') <= 148) {
redirectTo('hxh-streaming/arc-7-les-elections?reprise=true');
}
});
$(document).on('click', '#reprise-naruto', function () {
if (Cookies.get('narutoNum') <= 19) {
redirectTo('naruto-streaming/arc-1-pays-des-vagues?reprise=true');
}
else if (Cookies.get('narutoNum') >= 20 && Cookies.get('narutoNum') <= 82) {
redirectTo('naruto-streaming/arc-2-examen-chunin?reprise=true');
}
else if (Cookies.get('narutoNum') >= 83 && Cookies.get('narutoNum') <= 106) {
redirectTo('naruto-streaming/arc-3-recherche-tsunade?reprise=true');
}
else if (Cookies.get('narutoNum') >= 107 && Cookies.get('narutoNum') <= 135) {
redirectTo('naruto-streaming/arc-4-mission-recuperation?reprise=true');
}
});
$(document).on('click', '#reprise-naruto-kai', function () {
if (Cookies.get('narutoKaiNum') <= 3) {
redirectTo('naruto-streaming/arc-1-pays-des-vagues?reprisekai=true');
}
else if (Cookies.get('narutoKaiNum') >= 4 && Cookies.get('narutoKaiNum') <= 12) {
redirectTo('naruto-streaming/arc-2-examen-chunin?reprisekai=true');
}
else if (Cookies.get('narutoKaiNum') >= 13 && Cookies.get('narutoKaiNum') <= 14) {
redirectTo('naruto-streaming/arc-3-recherche-tsunade?reprisekai=true');
}
else if (Cookies.get('narutoKaiNum') >= 15 && Cookies.get('narutoKaiNum') <= 18) {
redirectTo('naruto-streaming/arc-4-mission-recuperation?reprisekai=true');
}
});
$(document).on('click', '#reprise-naruto-film', function () {
if (Cookies.get('narutoFilmNum') <= 3) {
redirectTo('naruto-streaming/films?reprise=true');
}
});
$(document).on('click', '#reprise-bleach', function () {
if (Cookies.get('bleachNum') <= 20) {
redirectTo('bleach-streaming/arc-1?reprise=true');
}
else if (Cookies.get('bleachNum') >= 21 && Cookies.get('bleachNum') <= 109) {
redirectTo('bleach-streaming/arc-2?reprise=true');
}
else if (Cookies.get('bleachNum') >= 110 && Cookies.get('bleachNum') <= 342) {
redirectTo('bleach-streaming/arc-3?reprise=true');
}
else if (Cookies.get('bleachNum') >= 343 && Cookies.get('bleachNum') <= 366) {
redirectTo('bleach-streaming/arc-4?reprise=true');
}
});
$(document).on('click', '#reprise-bleach-kai', function () {
if (Cookies.get('bleachKaiNum') <= 4) {
redirectTo('bleach-streaming/arc-1?reprisekai=true');
}
else if (Cookies.get('bleachKaiNum') >= 5 && Cookies.get('bleachKaiNum') <= 11) {
redirectTo('bleach-streaming/arc-2?reprisekai=true');
}
else if (Cookies.get('bleachKaiNum') >= 12 && Cookies.get('bleachKaiNum') <= 25) {
redirectTo('bleach-streaming/arc-3?reprisekai=true');
}
else if (Cookies.get('bleachKaiNum') >= 26 && Cookies.get('bleachKaiNum') <= 28) {
redirectTo('bleach-streaming/arc-4?reprisekai=true');
}
});
$(document).on('click', '#reprise-op', function () {
// Cookies (sagas 1 à 11) ou localStorage (saga 12) : getResumeEntry choisit.
const opNum = Number((getResumeEntry('op') || {}).num) || 0;
if (opNum <= 61) {
redirectTo('piece/saga-1?reprise=true');
}
else if (opNum >= 62 && opNum <= 135) {
redirectTo('piece/saga-2?reprise=true');
}
else if (opNum >= 136 && opNum <= 206) {
redirectTo('piece/saga-3?reprise=true');
}
else if (opNum >= 207 && opNum <= 325) {
redirectTo('piece/saga-4?reprise=true');
}
else if (opNum >= 326 && opNum <= 384) {
redirectTo('piece/saga-5?reprise=true');
}
else if (opNum >= 385 && opNum <= 516) {
redirectTo('piece/saga-6?reprise=true');
}
else if (opNum >= 517 && opNum <= 574) {
redirectTo('piece/saga-7?reprise=true');
}
else if (opNum >= 575 && opNum <= 746) {
redirectTo('piece/saga-8?reprise=true');
}
else if (opNum >= 747 && opNum <= 889) {
redirectTo('piece/saga-9?reprise=true');
}
else if (opNum >= 890 && opNum <= 1085) {
redirectTo('piece/saga-10?reprise=true');
}
else if (opNum >= 1086 && opNum <= 1155) {
redirectTo('piece/saga-11?reprise=true');
}
else if (opNum >= 1156 && opNum <= 1300) {
// Saga 12 : nouveau lecteur, reprise localStorage façon daemons (pas de ?reprise=true).
reprendreLecture('op', 'piece/saga-12');
}
});
$(document).on('click', '#reprise-op-kai', function () {
if (Cookies.get('opKaiNum') <= 7) {
redirectTo('piece/saga-1?reprisekai=true');
}
else if (Cookies.get('opKaiNum') >= 8 && Cookies.get('opKaiNum') <= 16) {
redirectTo('piece/saga-2?reprisekai=true');
}
else if (Cookies.get('opKaiNum') >= 17 && Cookies.get('opKaiNum') <= 22) {
redirectTo('piece/saga-3?reprisekai=true');
}
else if (Cookies.get('opKaiNum') >= 23 && Cookies.get('opKaiNum') <= 37) {
redirectTo('piece/saga-4?reprisekai=true');
}
else if (Cookies.get('opKaiNum') >= 38 && Cookies.get('opKaiNum') <= 42) {
redirectTo('piece/saga-5?reprisekai=true');
}
else if (Cookies.get('opKaiNum') >= 43 && Cookies.get('opKaiNum') <= 55) {
redirectTo('piece/saga-6?reprisekai=true');
}
else if (Cookies.get('opKaiNum') >= 56 && Cookies.get('opKaiNum') <= 62) {
redirectTo('piece/saga-7?reprisekai=true');
}
else if (Cookies.get('opKaiNum') >= 63 && Cookies.get('opKaiNum') <= 89) {
redirectTo('piece/saga-8?reprisekai=true');
}
else if (Cookies.get('opKaiNum') >= 90 && Cookies.get('opKaiNum') <= 106) {
redirectTo('piece/saga-9?reprisekai=true');
}
else if (Cookies.get('opKaiNum') >= 107 && Cookies.get('opKaiNum') <= 129) {
redirectTo('piece/saga-10?reprisekai=true');
}
else if (Cookies.get('opKaiNum') >= 130 && Cookies.get('opKaiNum') <= 133) {
redirectTo('piece/saga-11?reprisekai=true');
}
});
$(document).on('click', '#reprise-op-remake', function (e) {
redirectTo('piece/saga-7?repriseremake=true');
});
$(document).on('click', '#reprise-op-film', function (e) {
redirectTo('piece/films-et-speciaux?reprise=true');
});
$(document).on('click', '#reprise-op-sp', function (e) {
redirectTo('piece/films-et-speciaux?reprisesp=true');
});
$(document).on('click', '#reprise-op-oav', function (e) {
redirectTo('piece/films-et-speciaux?repriseoav=true');
});
if ($('.carousel__content').children().length == 0) {
$('.carousel').hide();
}
// Obtenir les éléments
// var pushIn = document.getElementById("pollPushIn");
// var btn = document.getElementById("openPushInBtn");
// var closeBtn = document.getElementById("closePushInBtn");
// // Lorsque l'utilisateur clique sur le bouton, ouvrir le panneau push-in
// btn.onclick = function () {
// pushIn.style.right = "0"; // Faire glisser le panneau à l'écran
// }
// // Lorsque l'utilisateur clique sur le bouton de fermeture, fermer le panneau push-in
// closeBtn.onclick = function () {
// pushIn.style.right = "-100%"; // Rétracter le panneau hors de l'écran
// }
// Fermer le panneau push-in lorsque l'utilisateur clique en dehors de celui-ci
// window.onclick = function (event) {
// if (!pushIn.contains(event.target) && event.target !== btn) {
// pushIn.style.right = "-100%"; // Rétracter le panneau hors de l'écran
// }
// }
}
function affiche3D() {
// Réduire progressivement l'opacité du div de fondu
$("#div-fondu2").animate({ opacity: 0 }, 200, function () {
// Vous pouvez retirer le div de fondu une fois l'animation terminée
$(this).remove();
});
// You can change global variables here:
var radius = 550; // how big of the radius
var autoRotate = true; // auto rotate or not
var rotateSpeed = -180; // unit: seconds/360 degrees
var imgWidth = 70; // width of images (unit: px)
var imgHeight = 130; // height of images (unit: px)
// ===================== start =======================
// animation start after 1000 miliseconds
setTimeout(init, 10);
var odrag = document.getElementById("drag-container");
var ospin = document.getElementById("spin-container");
var aImg = Array.from(ospin.getElementsByTagName("img")).filter(function (
img
) {
return !img.classList.contains("twitter2");
});
var aVid = ospin.getElementsByTagName("video");
var aEle = [...aImg, ...aVid]; // combine 2 arrays
// Size of images
ospin.style.width = imgWidth + "px";
ospin.style.height = imgHeight + "px";
// Size of ground - depend on radius
var ground = document.getElementById("ground");
ground.style.width = radius * 3 + "px";
ground.style.height = radius * 3 + "px";
function init(delayTime) {
for (var i = 0; i < aEle.length; i++) {
aEle[i].style.transform =
"rotateY(" +
i * (360 / aEle.length) +
"deg) translateZ(" +
radius +
"px)";
aEle[i].style.transition = "transform 1s";
aEle[i].style.transitionDelay = delayTime || (aEle.length - i) / 4 + "s";
}
}
function applyTranform(obj) {
// Constrain the angle of camera (between 0 and 180)
if (tY > 180) tY = 180;
if (tY < 0) tY = 0;
// Apply the angle
obj.style.transform = "rotateX(" + -tY + "deg) rotateY(" + tX + "deg)";
}
function playSpin(yes) {
ospin.style.animationPlayState = yes ? "running" : "paused";
}
var sX,
sY,
nX,
nY,
desX = 0,
desY = 0,
tX = 0,
tY = 10;
// auto spin
if (autoRotate) {
var animationName = rotateSpeed > 0 ? "spin" : "spinRevert";
ospin.style.animation = `${animationName} ${Math.abs(
rotateSpeed
)}s infinite linear`;
}
// setup events
document.onpointerdown = function (e) {
clearInterval(odrag.timer);
e = e || window.event;
var sX = e.clientX,
sY = e.clientY;
this.onpointermove = function (e) {
e = e || window.event;
var nX = e.clientX,
nY = e.clientY;
desX = nX - sX;
desY = nY - sY;
tX += desX * 0.1;
tY += desY * 0.1;
applyTranform(odrag);
sX = nX;
sY = nY;
};
this.onpointerup = function (e) {
odrag.timer = setInterval(function () {
desX *= 0.95;
desY *= 0.95;
tX += desX * 0.1;
tY += desY * 0.1;
applyTranform(odrag);
playSpin(false);
if (Math.abs(desX) < 0.5 && Math.abs(desY) < 0.5) {
clearInterval(odrag.timer);
playSpin(true);
}
}, 17);
this.onpointermove = this.onpointerup = null;
};
return false;
};
document.onmousewheel = function (e) {
e = e || window.event;
var d = e.wheelDelta / 20 || -e.detail;
radius += d;
init(1);
};
function redirectTo2(url) {
$("#div-fondu")
.css("display", "block")
.animate({ opacity: 1 }, 200, function () {
window.location.href = url;
});
}
$("#bleach").click(function () {
redirectTo2("bleach?v=6");
});
$("#dragon-ball-super").click(function () {
redirectTo2("dragon-ball-super?v=1");
});
$("#boruto").click(function () {
redirectTo2("boruto?v=6");
});
$("#one-piece").click(function () {
redirectTo2("piece?v=22");
});
$("#blue-lock").click(function () {
redirectTo2("blue-lock?v=2");
});
$("#naruto").click(function () {
redirectTo2("naruto?v=3");
});
$("#naruto?v=3-shippuden").click(function () {
redirectTo2("naruto?v=3-shippuden-streaming");
});
$("#hxh").click(function () {
redirectTo2("hunter-x-hunter?v=9");
});
$("#death-note").click(function () {
redirectTo2("death-note?v=2");
});
$("#fma").click(function () {
redirectTo2("fma-brotherhood");
});
$("#vinland").click(function () {
redirectTo2("vinland-saga?v=1");
});
$("#mha").click(function () {
redirectTo2("my-hero-academia?v=16");
});
$("#tokyo").click(function () {
redirectTo2("tokyo-revengers");
});
$("#snk").click(function () {
redirectTo2("shingeki-no-kyojin?v=5");
});
$("#drStone").click(function () {
redirectTo2("dr-stone?v=2");
});
$("#kimetsu").click(function () {
redirectTo2("demon-slayer?v=1");
});
$("#jujutsu").click(function () {
redirectTo2("jujutsu-kaisen?v=12");
});
$("#solo").click(function () {
redirectTo2("solo-leveling?v=3");
});
$("#kingdom").click(function () {
redirectTo2("kingdom?v=2");
});
$("#spy").click(function () {
redirectTo2("spy-x-family?v=4");
});
$("#one-punch-man").click(function () {
redirectTo2("punch-man?v=2");
});
$("#fire-force").click(function () {
redirectTo2("fire-force?v=6");
});
$("#frieren").click(function () {
redirectTo2("frieren-streaming");
});
$("#chainsaw-man").click(function () {
redirectTo2("chainsaw-man");
});
$("#fate-strange").click(function () {
redirectTo2("fate-strange-fake?v=1");
});
$("#sentenced").click(function () {
redirectTo2("sentenced-to-be-a-hero");
});
$("#gachiakuta").click(function () {
redirectTo2("gachiakuta?v=12");
});
$("#shangri-la-frontier").click(function () {
redirectTo2("shangri-la-frontier?v=3");
});
$("#dragon-ball-daima").click(function () {
redirectTo2("dragon-ball-daima?v=2");
});
$("#du-mouvement-de-la-terre").click(function () {
redirectTo2("du-mouvement-de-la-terre");
});
$("#sakamoto-days").click(function () {
redirectTo2("sakamoto-days");
});
$("#les-carnets-de-l-apothicaire").click(function () {
redirectTo2("carnets-apothicaire");
});
$("#blue-box").click(function () {
redirectTo2("blue-box");
});
$("#re-zero").click(function () {
redirectTo2("re-zero");
});
$("#db").click(function () {
redirectTo2("dragon-ball?v=1");
});
$("#dbz").click(function () {
redirectTo2("dragon-ball-z?v=4");
});
$("#monsters").click(function () {
redirectTo2("monsters");
});
$("#ousama").click(function () {
redirectTo2("ousama-ranking");
});
$("#pluto").click(function () {
redirectTo2("pluto");
});
$("#devilman").click(function () {
redirectTo2("devilman-cry-baby");
});
$("#code-geass").click(function () {
redirectTo2("code-geass");
});
$("#fate-zero").click(function () {
redirectTo2("fate-zero");
});
$("#horion").click(function () {
redirectTo2("https://www.amazon.fr/dp/B096VW96KP?binding=paperback");
});
$(document).ready(function () {
$('#twitterLink').click(function (event) {
event.preventDefault(); // Empêche le comportement par défaut du lien
// Sur PC, ouvre le lien Twitter dans un nouvel onglet
window.open('https://twitter.com/OneSekai', '_blank');
});
});
}
// $('body').append(html2).hide().fadeIn();
affiche2D();
</script>
<script>
// function reloadPlayers() {
// var container2 = document.getElementById("ds2");
// container2.innerHTML = "";
// var script2 = document.createElement("script");
// script2.src = "https://geo.dailymotion.com/player/xrous.js";
// script2.setAttribute("data-playlist", "x69icf");
// script2.setAttribute("data-params", "mute=true");
// container2.appendChild(script2);
// }
// setInterval(function () {
// $(atob("LmRz")).attr('src', $(atob("LmRz")).attr('src'));
// }, 900000);
const ALL_DM_PLAYERS = [
{
containerId: "daily2",
playerId: "xsnky",
playlist: "x69icf",
},
{
containerId: "ds2",
playerId: "xrouq",
playlist: "x69icf",
},
];
const IS_TV_DEVICE =
typeof window.__SEKAI_IS_TV_DEVICE__ === "boolean"
? window.__SEKAI_IS_TV_DEVICE__
: isTvDevice();
const DM_PLAYERS = IS_TV_DEVICE
? ALL_DM_PLAYERS.filter((playerConfig) => {
return playerConfig.containerId !== "ds2";
})
: [...ALL_DM_PLAYERS];
const DM_RELOAD_DELAY = 1800000; // 30 minutes
const DM_DEBUG = false;
const dmPlayers = new Map();
let dmReloadInterval = null;
let dmPlayersInitialized = false;
let dmActivePlayers = [...DM_PLAYERS];
function logDailymotion(...args) {
if (DM_DEBUG) {
console.log("[Dailymotion]", ...args);
}
}
function isTvDevice() {
const userAgent = (navigator.userAgent || "").toLowerCase();
return (
userAgent.includes("smart-tv") ||
userAgent.includes("tv") ||
userAgent.includes("tizen") ||
userAgent.includes("webos") ||
userAgent.includes("netcast") ||
userAgent.includes("android tv") ||
userAgent.includes("hbbtv") ||
userAgent.includes("viera") ||
userAgent.includes("bravia") ||
userAgent.includes("hisense") ||
userAgent.includes("roku") ||
userAgent.includes("fire tv") ||
userAgent.includes("chromecast")
);
}
function safeRemoveElementById(elementId) {
const element = document.getElementById(elementId);
if (element) {
element.remove();
}
}
function safeCheckDataPlaylist() {
if (typeof checkDataPlaylist === "function") {
checkDataPlaylist();
} else {
logDailymotion("checkDataPlaylist introuvable");
}
}
function waitForDailymotionLibrary(attempt = 0) {
const maxAttempts = 80;
const retryDelay = 250;
return new Promise((resolve, reject) => {
if (
window.dailymotion &&
typeof window.dailymotion.createPlayer === "function"
) {
resolve(window.dailymotion);
return;
}
if (attempt >= maxAttempts) {
reject(new Error("Librairie Dailymotion indisponible"));
return;
}
setTimeout(() => {
waitForDailymotionLibrary(attempt + 1)
.then(resolve)
.catch(reject);
}, retryDelay);
});
}
function applyDailymotionMute(playerKey, player) {
if (!player) {
return;
}
try {
if (typeof player.setMute === "function") {
player.setMute(true);
}
} catch (error) {
logDailymotion("Erreur setMute", playerKey, error);
}
try {
if (typeof player.setMuted === "function") {
player.setMuted(true);
}
} catch (error) {
logDailymotion("Erreur setMuted", playerKey, error);
}
try {
if (typeof player.setVolume === "function") {
player.setVolume(0);
}
} catch (error) {
logDailymotion("Erreur setVolume", playerKey, error);
}
}
function tryPlayDailymotionPlayer(playerKey, player) {
if (!player || typeof player.play !== "function") {
return;
}
try {
const result = player.play();
if (result && typeof result.catch === "function") {
result.catch((error) => {
logDailymotion("Autoplay refusé", playerKey, error);
});
}
} catch (error) {
logDailymotion("Erreur play", playerKey, error);
}
}
async function destroyDailymotionPlayer(playerConfig) {
if (!playerConfig) {
return;
}
const playerKey = playerConfig.containerId;
const player = dmPlayers.get(playerKey);
if (player && typeof player.destroy === "function") {
try {
await player.destroy();
} catch (error) {
logDailymotion("Erreur destroy", playerKey, error);
}
}
dmPlayers.delete(playerKey);
const container = document.getElementById(playerConfig.containerId);
if (container) {
container.innerHTML = "";
}
}
async function createDailymotionPlayer(playerConfig) {
if (IS_TV_DEVICE && playerConfig.containerId === "ds2") {
safeRemoveElementById("ds2");
logDailymotion("TV detectee : creation ds2 ignoree");
return null;
}
const container = document.getElementById(playerConfig.containerId);
if (!container) {
logDailymotion("Container introuvable", playerConfig.containerId);
return null;
}
await waitForDailymotionLibrary();
await destroyDailymotionPlayer(playerConfig);
try {
const player = await window.dailymotion.createPlayer(
playerConfig.containerId,
{
player: playerConfig.playerId,
playlist: playerConfig.playlist,
params: {
mute: true,
volume: 0,
autostart: "on",
},
}
);
dmPlayers.set(playerConfig.containerId, player);
applyDailymotionMute(playerConfig.containerId, player);
tryPlayDailymotionPlayer(playerConfig.containerId, player);
logDailymotion("Player créé", playerConfig.containerId);
return player;
} catch (error) {
logDailymotion("Erreur createPlayer", playerConfig.containerId, error);
return null;
}
}
async function reloadDailymotionPlayers() {
await Promise.all(
dmActivePlayers.map((playerConfig) => {
return createDailymotionPlayer(playerConfig);
})
);
}
async function prepareDailymotionPlayersForDevice() {
if (IS_TV_DEVICE) {
const ds2Config = ALL_DM_PLAYERS.find((playerConfig) => {
return playerConfig.containerId === "ds2";
});
await destroyDailymotionPlayer(ds2Config);
safeRemoveElementById("ds2");
dmActivePlayers = [...DM_PLAYERS];
logDailymotion("TV detectee : ds2 desactive");
return false;
}
dmActivePlayers = [...DM_PLAYERS];
return true;
}
async function initDailymotionPlayers() {
if (dmPlayersInitialized) {
return;
}
dmPlayersInitialized = true;
try {
const shouldRunCheckDataPlaylist = await prepareDailymotionPlayersForDevice();
await waitForDailymotionLibrary();
await Promise.all(
dmActivePlayers.map((playerConfig) => {
return createDailymotionPlayer(playerConfig);
})
);
if (shouldRunCheckDataPlaylist) {
safeCheckDataPlaylist();
}
if (dmReloadInterval) {
clearInterval(dmReloadInterval);
}
dmReloadInterval = setInterval(() => {
reloadDailymotionPlayers();
}, DM_RELOAD_DELAY);
} catch (error) {
dmPlayersInitialized = false;
logDailymotion("Erreur init", error);
}
}
async function destroyAllDailymotionPlayers() {
if (dmReloadInterval) {
clearInterval(dmReloadInterval);
dmReloadInterval = null;
}
await Promise.all(
ALL_DM_PLAYERS.map((playerConfig) => {
return destroyDailymotionPlayer(playerConfig);
})
);
dmPlayersInitialized = false;
}
if (document.readyState === "complete") {
initDailymotionPlayers();
} else {
window.addEventListener("load", initDailymotionPlayers, { once: true });
}
window.addEventListener("beforeunload", () => {
destroyAllDailymotionPlayers();
});
// function reloadPlayers() {
// var container1 = document.getElementById("daily2");
// container1.innerHTML = "";
// var script1 = document.createElement("script");
// script1.src = "https://geo.dailymotion.com/player/xsnky.js";
// script1.setAttribute("data-playlist", "x69icf");
// script1.setAttribute("data-params", "mute=true");
// container1.appendChild(script1);
// // Recharger le lecteur pour 'ds2'
// var container2 = document.getElementById("ds2");
// container2.innerHTML = "";
// var script2 = document.createElement("script");
// script2.src = "https://geo.dailymotion.com/player/xrouq.js";
// script2.setAttribute("data-playlist", "x69icf");
// script2.setAttribute("data-params", "mute=true");
// container2.appendChild(script2);
// }
// setInterval(reloadPlayers, 900000); // 10000ms = 10 secondes
//var toastLiveExample = document.getElementById('toastlogo');
//
//var toast = new bootstrap.Toast(toastLiveExample);
//
//toast.show();
// var socket = io();
// socket.on('dateOP', (dateOP) => {
// $('#prochainOP').html(dateOP);
// if (dateOP == "Disponible !") {
// $("#prochainOP").attr("class", "dispo");
// }
// else {
// $("#prochainOP").attr("class", "prochain");
// prochainOP = prochainOP + 1;
// $('#lastOP').html(prochainOP);
// }
// });
// socket.on('dateFrieren', (dateFrieren) => {
// $('#prochainFrieren').html(dateFrieren);
// if (dateFrieren == "Disponible !") {
// $("#prochainFrieren").attr("class", "dispo");
// $('#heureFrieren').html("");
// }
// else {
// $("#prochainFrieren").attr("class", "prochain");
// prochainFrieren = prochainFrieren + 1;
// $('#lastFrieren').html(prochainFrieren);
// $('#heureFrieren').html("17h30");
// }
// });
// socket.on('dateSolo', (dateSolo) => {
// $('#prochainSolo').html(dateSolo);
// if (dateSolo == "Disponible !") {
// $("#prochainSolo").attr("class", "dispo");
// $('#heureSolo').html("");
// }
// else {
// $("#prochainSolo").attr("class", "prochain");
// prochainSolo = prochainSolo + 1;
// $('#lastSolo').html(prochainSolo);
// $('#heureSolo').html("19h00");
// }
// });
// socket.on('dateKingdom', (dateKingdom) => {
// $('#prochainKingdom').html(dateKingdom);
// if (dateKingdom == "Disponible !") {
// $("#prochainKingdom").attr("class", "dispo");
// $('#heureKingdom').html("");
// }
// else {
// $("#prochainKingdom").attr("class", "prochain");
// prochainKingdom = prochainKingdom + 1;
// $('#lastKingdom').html(prochainKingdom);
// $('#heureKingdom').html("20h00");
// }
// });
function getRandomMusic() {
var musicTracks = [
"https://7.mugiwara.one/musique/genkidama.mp3",
"https://7.mugiwara.one/musique/genkidama2.mp3",
"https://7.mugiwara.one/musique/genkidama3.mp3",
"https://7.mugiwara.one/musique/genkidama4.mp3",
"https://7.mugiwara.one/musique/genkidama5.mp3",
"https://7.mugiwara.one/musique/genkidama6.mp3"
];
return musicTracks[Math.floor(Math.random() * musicTracks.length)];
}
// Fonction pour vérifier si un élément avec l'attribut data-playlist est présent
function trackModalOpened() {
var xhr = new XMLHttpRequest();
xhr.open("POST", "/track-modal-opened", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({ modalOpened: true }));
}
function checkDataPlaylist() {
var elements = document.querySelectorAll("[data-playlist]");
// Si aucun élément avec data-playlist n'est trouvé, afficher la fenêtre modale
if (elements.length > 0) {
var modal = document.getElementById("genki-modal");
var audio = document.getElementById("genkidama-audio");
audio.src = getRandomMusic(); // Sélectionne une musique aléatoirement
modal.style.display = "block";
// Envoyer l'événement au serveur pour suivre l'ouverture de la modale
trackModalOpened();
var refreshButton = document.getElementById("refresh-button");
refreshButton.addEventListener("click", function () {
location.reload(); // Actualise la page
});
var circles = document.querySelectorAll('.circle-container .circle.energy'); // Sélectionne les cercles
var closeButton = document.getElementById('close-button');
closeButton.addEventListener('click', function () {
circles.forEach(function (circle) {
circle.classList.add('fade-in');
});
// Jouer l'audio seulement au premier clic
if (!audio.played.length) {
audio.play();
}
if (closeButton.classList.contains("show-top-left")) {
// Démarre le fade out du volume
let fadeOutInterval = setInterval(function () {
if (audio.volume > 0.1) {
audio.volume -= 0.05; // Diminue progressivement le volume
} else {
clearInterval(fadeOutInterval); // Arrête l'intervalle une fois que le volume est presque à 0
audio.pause(); // Coupe la musique
audio.currentTime = 0; // Remet la musique au début
audio.volume = 1; // Remet le volume à 1 pour la prochaine lecture
}
}, 100); // Diminue le volume tous les 200ms
modal.style.display = "none"; // Ferme la modale
} else {
closeButton.classList.add("hidden");
// Après le fade out, déplacer le bouton en haut à gauche et le faire réapparaître
setTimeout(function () {
closeButton.classList.remove("hidden");
closeButton.classList.add("show-top-left");
}, 500000); // Délai correspondant à la durée du fade out
}
});
}
}
// window.addEventListener('DOMContentLoaded', function () {
// setTimeout(function () {
// const userAgent = navigator.userAgent.toLowerCase();
// if (
// userAgent.includes("smart-tv") ||
// userAgent.includes("tv") ||
// userAgent.includes("tizen") ||
// userAgent.includes("webos") ||
// userAgent.includes("netcast") ||
// userAgent.includes("android tv") ||
// userAgent.includes("hbbtv") ||
// userAgent.includes("viera") ||
// userAgent.includes("bravia") ||
// userAgent.includes("hisense") ||
// userAgent.includes("roku") ||
// userAgent.includes("fire tv") ||
// userAgent.includes("chromecast")
// ) {
// // Si c'est une télévision, on supprime certains éléments
// // $('.daily').remove();
// $('#ds2').remove();
// }
// else {
// checkDataPlaylist(); // Appel correct de la fonction
// }
// }, 100); // Délai de 100 ms
// });
// Fonction pour détecter si on est dans une WebView
// function isInWebView() {
// var userAgent = navigator.userAgent || navigator.vendor || window.opera;
// return /wv|android|iPhone|iPad|iPod/.test(userAgent) && !window.MSStream;
// }
// Afficher la popup seulement si l'utilisateur n'est pas dans une WebView
// Afficher la popup seulement si l'utilisateur n'est pas dans une WebView
// if (!isInWebView() && /Android/i.test(navigator.userAgent)) {
// // Vérifier si la popup a déjà été affichée
// if (!localStorage.getItem('popupDisplayed')) {
// // Afficher la popup après 1 seconde
// setTimeout(function () {
// document.getElementById('popup').classList.add('show');
// }, 1000);
// // Stocker l'information dans localStorage pour ne pas réafficher la popup
// localStorage.setItem('popupDisplayed', 'true');
// // Fermer la popup quand on clique sur le bouton "Fermer"
// document.getElementById('close-android').addEventListener('click', function () {
// document.getElementById('popup').style.display = 'none'; // Masquer la popup
// });
// }
// }
// const popupVersion = '2.0';
// // Vérifier si la popup a déjà été affichée pour cette version
// if (localStorage.getItem('popupDisplayed') !== popupVersion) {
// // Afficher la popup après 1 seconde
// setTimeout(function () {
// document.getElementById('popup').classList.add('show');
// }, 1000);
// // Stocker la version actuelle dans localStorage pour ne pas réafficher la popup
// localStorage.setItem('popupDisplayed', popupVersion);
// // Fermer la popup quand on clique sur le bouton "Fermer"
// document.getElementById('close-android').addEventListener('click', function () {
// document.getElementById('popup').style.display = 'none'; // Masquer la popup
// });
// }
window.addEventListener('pageshow', function (event) {
if (event.persisted) {
// Recharger la page uniquement si elle provient du cache
location.reload();
}
});
// document.addEventListener("DOMContentLoaded", function() {
// function checkElement() {
// let ad = document.querySelector("#Sekaione_Interstitial");
// if (ad) {
// let parentDivs = ad.closest("div").parentElement;
// while (parentDivs) {
// parentDivs.style.width = "auto";
// parentDivs = parentDivs.parentElement;
// }
// } else {
// setTimeout(checkElement, 100); // Réessaye toutes les 100ms
// }
// }
// checkElement();
// });
</script>
<script>
window.addEventListener('load', function () {
const p = document.getElementById('textModal');
if (!p) return;
let index = 0;
function wrapNode(node) {
const children = Array.from(node.childNodes);
children.forEach(child => {
if (child.nodeType === Node.TEXT_NODE) {
const text = child.textContent;
const frag = document.createDocumentFragment();
// On découpe en "mots ou espaces"
// Exemple: "Salut les amis" -> ["Salut", " ", "les", " ", "amis"]
const parts = text.match(/(\S+|\s+)/g) || [];
parts.forEach(part => {
if (/^\s+$/.test(part)) {
// Juste des espaces -> on les laisse tels quels
frag.appendChild(document.createTextNode(part));
} else {
// C'est un mot -> on crée un span.word
const wordSpan = document.createElement('span');
wordSpan.classList.add('word');
for (let char of part) {
const span = document.createElement('span');
span.classList.add('letter');
span.textContent = char;
span.style.setProperty('--i', index++);
wordSpan.appendChild(span);
}
frag.appendChild(wordSpan);
}
});
child.replaceWith(frag);
} else if (child.nodeType === Node.ELEMENT_NODE) {
// On descend dans les <strong>, etc.
wrapNode(child);
}
});
}
wrapNode(p);
});
$(function () {
var $btn = $('#close-button');
var $phrase = $('#adblock-phrase');
if (!$btn.length || !$phrase.length) return;
$btn.on('click', function () {
// active le pulse si pas déjà actif
$phrase.addClass('glow-pulse');
});
});
function startFondu() {
// éviter de lancer 15 fois
if (document.body.classList.contains('loaded')) return;
document.body.classList.add('loaded');
const fondu = document.getElementById('div-fondu2');
if (fondu) {
fondu.addEventListener(
'transitionend',
function () {
fondu.remove();
},
{ once: true }
);
}
}
// 1) Dès que le DOM est prêt (HTML + CSS ok)
document.addEventListener('DOMContentLoaded', startFondu);
// 2) Sécurité : si pour une raison X load arrive avant, on s'en sert aussi
window.addEventListener('load', startFondu);
// 3) Fallback ultime : au bout de 3 secondes, on force le fondu
setTimeout(startFondu, 3000);
</script>
<!-- <script async data-cfasync="false" src="https://platform.pubadx.one/pubadx-ad.js" type="text/javascript"></script>
<div id="bg-ssp-pre-11106"></div>
<div id="bg-ssp-11106">
<script data-cfasync="false" data-no-optimize="1">
var adx_id_11106 = document.getElementById('bg-ssp-11106');
adx_id_11106.id = 'bg-ssp-11106-' + Math.floor(Math.random() * Date.now());
window.pubadxtag = window.pubadxtag || [];
window.pubadxtag.push({zoneid: 11106, id: adx_id_11106.id, wu: window.location.href})
</script>
</div> -->
<!-- Système de contact : révèle l'adresse au 1er clic, la copie au 2e (identique à jaadugar). -->
<script>
(function () {
if (window.__sekaiContactBound) return;
window.__sekaiContactBound = true;
var EMAIL = atob("Y29udGFjdC5zZWthaS5vbmVAZ21haWwuY29t");
var timers = new WeakMap();
document.addEventListener("click", function (event) {
var contact = event.target.closest(".contact, .contact2");
if (!contact) return;
event.preventDefault();
if (!contact.classList.contains("revealed")) {
afficherAdresse(contact, EMAIL);
contact.classList.add("revealed");
contact.title = "Cliquer pour copier l'adresse";
return;
}
copierTexte(EMAIL).then(function (copie) {
if (!copie) return;
clearTimeout(timers.get(contact));
afficherCopie(contact);
contact.classList.add("copied");
timers.set(contact, setTimeout(function () {
afficherAdresse(contact, EMAIL);
contact.classList.remove("copied");
}, 1400));
});
});
function afficherAdresse(contact, email) {
contact.textContent = "";
var texte = document.createElement("span");
texte.className = "contact-mail";
texte.textContent = email;
contact.appendChild(texte);
contact.appendChild(iconeSvg("contact-ic", [
["rect", { x: 9, y: 9, width: 11, height: 11, rx: 2 }],
["path", { d: "M5 15V5a2 2 0 0 1 2-2h10" }]
]));
}
function afficherCopie(contact) {
contact.textContent = "";
contact.appendChild(iconeSvg("contact-ic", [
["path", { d: "M20 6 9 17l-5-5" }]
]));
var texte = document.createElement("span");
texte.className = "contact-mail";
texte.textContent = "Copié !";
contact.appendChild(texte);
}
function iconeSvg(className, formes) {
var NS = "http://www.w3.org/2000/svg";
var svg = document.createElementNS(NS, "svg");
svg.setAttribute("class", className);
svg.setAttribute("viewBox", "0 0 24 24");
svg.setAttribute("fill", "none");
svg.setAttribute("stroke", "currentColor");
svg.setAttribute("stroke-width", "2");
svg.setAttribute("stroke-linecap", "round");
svg.setAttribute("stroke-linejoin", "round");
svg.setAttribute("aria-hidden", "true");
formes.forEach(function (forme) {
var el = document.createElementNS(NS, forme[0]);
Object.entries(forme[1]).forEach(function (attr) {
el.setAttribute(attr[0], String(attr[1]));
});
svg.appendChild(el);
});
return svg;
}
function copierTexte(texte) {
if (navigator.clipboard && window.isSecureContext) {
return navigator.clipboard.writeText(texte).then(function () {
return true;
}).catch(function () {
return copierViaZoneTexte(texte);
});
}
return Promise.resolve(copierViaZoneTexte(texte));
}
function copierViaZoneTexte(texte) {
var zone = document.createElement("textarea");
zone.value = texte;
zone.setAttribute("readonly", "");
zone.style.position = "fixed";
zone.style.opacity = "0";
document.body.appendChild(zone);
zone.select();
var copie = false;
try {
copie = document.execCommand("copy");
} catch (error) {
copie = false;
}
zone.remove();
return copie;
}
})();
</script>
</body>
</html>