<!doctype html><html lang="fr"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>BKMAX Portal</title><link rel="icon" href="data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 64 64%22%3E%3Cdefs%3E%3ClinearGradient id=%22g%22 x1=%220%22 y1=%220%22 x2=%221%22 y2=%221%22%3E%3Cstop stop-color=%22%2355b8ff%22/%3E%3Cstop offset=%221%22 stop-color=%22%23914cff%22/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=%2264%22 height=%2264%22 rx=%2216%22 fill=%22url(%23g)%22/%3E%3Ctext x=%2232%22 y=%2241%22 text-anchor=%22middle%22 font-family=%22Arial%22 font-size=%2224%22 font-weight=%22700%22 fill=%22white%22%3EBK%3C/text%3E%3C/svg%3E"><style>*{box-sizing:border-box}body{margin:0;min-height:100vh;font-family:Segoe UI,Arial,sans-serif;color:#f5f7ff;background:#090d18;background-image:radial-gradient(circle at 10% 0,#143d67 0,transparent 30%),radial-gradient(circle at 95% 10%,#43266e 0,transparent 27%),radial-gradient(circle at 50% 100%,#123932 0,transparent 28%)}body:before{content:"";position:fixed;inset:0;pointer-events:none;background-image:linear-gradient(#ffffff06 1px,transparent 1px),linear-gradient(90deg,#ffffff06 1px,transparent 1px);background-size:34px 34px;mask-image:linear-gradient(to bottom,#0008,transparent 80%)}.wrap{position:relative;width:min(1120px,calc(100% - 28px));margin:auto;padding:32px 0 55px}.hero{position:relative;overflow:hidden;padding:29px;border:1px solid #ffffff15;border-radius:26px;background:linear-gradient(135deg,#172238e8,#101726df);box-shadow:0 24px 70px #0008}.hero:after{content:"";position:absolute;width:280px;height:280px;border-radius:50%;right:-100px;top:-130px;background:radial-gradient(circle,#57b6ff44,transparent 68%);pointer-events:none}.top{position:relative;display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap}.brand{display:flex;align-items:center;gap:16px}.logo{width:62px;height:62px;display:grid;place-items:center;border-radius:18px;font-size:21px;font-weight:800;background:linear-gradient(135deg,#55b8ff,#914cff);box-shadow:0 12px 35px #5c7cff55;transform:rotate(-3deg)}h1{margin:0;font-size:39px;letter-spacing:-1px}.sub{margin:6px 0 0;color:#9ba9c1}.quick{display:flex;gap:8px;flex-wrap:wrap}.quick a{color:#e2eaff;text-decoration:none;padding:9px 14px;border-radius:99px;border:1px solid #ffffff16;background:#ffffff0c;transition:.18s}.quick a:hover{background:#ffffff19;transform:translateY(-2px)}section{margin-top:29px}.section-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.section-head h2{margin:0;font-size:17px}.section-head span{font-size:12px;color:#75839b}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(238px,1fr));gap:13px}.card{--accent:#55aaff;position:relative;overflow:hidden;display:block;min-height:158px;padding:18px;color:#f5f7ff;text-decoration:none;border:1px solid #293750;border-radius:20px;background:linear-gradient(145deg,#172135,#101724);box-shadow:0 14px 40px #0005;transition:transform .18s,border-color .18s,box-shadow .18s}.card:before{content:"";position:absolute;width:120px;height:120px;right:-50px;bottom:-65px;border-radius:50%;background:radial-gradient(circle,var(--accent),transparent 68%);opacity:.14;transition:.18s}.card:hover{transform:translateY(-5px) scale(1.012);border-color:var(--accent);box-shadow:0 20px 52px #0009}.card:hover:before{opacity:.25}.nas{--accent:#27c596}.files{--accent:#5db7ff}.npm{--accent:#ffc857}.site{--accent:#9a72ff}.torrent{--accent:#4ed4e8}.request{--accent:#ff7ca8}.plex{--accent:#e5a928}.audio{--accent:#f17b53}.icon{position:relative;width:49px;height:49px;display:grid;place-items:center;border-radius:15px;font-size:25px;background:#ffffff0b;border:1px solid #ffffff0d}.name{position:relative;font-size:17px;font-weight:700;margin-top:13px}.desc{position:relative;font-size:13px;line-height:1.45;color:#99a7bd;margin-top:5px}.badge{position:absolute;right:13px;top:13px;font-size:9px;font-weight:800;letter-spacing:.5px;padding:5px 8px;border-radius:99px;color:#b9ddff;background:#55aaff1c;border:1px solid #55aaff24}.local{color:#ffdc83;background:#ffc85718;border-color:#ffc85725}.status{position:relative;display:flex;align-items:center;gap:7px;margin-top:12px;font-size:11px;color:#8795aa}.dot{width:9px;height:9px;border-radius:50%;background:#64748b;box-shadow:0 0 0 3px #64748b22;transition:.25s}.dot.up{background:#2ddd7e;box-shadow:0 0 0 3px #2ddd7e22,0 0 14px #2ddd7eaa}.dot.down{background:#ff4e61;box-shadow:0 0 0 3px #ff4e6122,0 0 14px #ff4e6188}.dot.wait{background:#718096}.footer{text-align:center;color:#56647b;font-size:11px;margin-top:35px}@media(max-width:560px){.wrap{padding-top:15px}.hero{padding:20px}h1{font-size:30px}.grid{grid-template-columns:1fr}}</style></head><body><div class="wrap"><div class="hero"><div class="top"><div class="brand"><div class="logo">BK</div><div><h1>BKMAX Portal</h1><div class="sub">Le raccourci vers toute mon infrastructure</div></div></div><div class="quick"><a target="_blank" rel="noopener noreferrer" href="https://bkmax.fr">🌐 Site</a><a target="_blank" rel="noopener noreferrer" href="https://nas.bkmax.fr">🗄️ NAS</a><a target="_blank" rel="noopener noreferrer" href="https://plex.bkmax.fr">🎬 Plex</a><a target="_blank" rel="noopener noreferrer" href="https://torrent.bkmax.fr">⬇️ Torrent</a></div></div></div><section><div class="section-head"><h2>🛠 Infrastructure</h2><span>Administration et fichiers</span></div><div class="grid"><a target="_blank" rel="noopener noreferrer" class="card nas check" data-url="https://nas.bkmax.fr/ui/" href="https://nas.bkmax.fr"><span class="badge">PUBLIC</span><div class="icon">🗄️</div><div class="name">TrueNAS</div><div class="desc">Administration du NAS, stockage, datasets et applications.</div><div class="status"><span class="dot wait"></span><span class="state">Verification...</span></div></a><a target="_blank" rel="noopener noreferrer" class="card files check" data-url="https://fichier.bkmax.fr" href="https://fichier.bkmax.fr"><span class="badge">PUBLIC</span><div class="icon">📁</div><div class="name">FileBrowser Quantum</div><div class="desc">Explorateur web et gestion des fichiers du NAS.</div><div class="status"><span class="dot wait"></span><span class="state">Verification...</span></div></a><a target="_blank" rel="noopener noreferrer" class="card npm" href="http://192.168.1.185:81"><span class="badge local">LOCAL</span><div class="icon">🔀</div><div class="name">Nginx Proxy Manager</div><div class="desc">Domaines, reverse proxy et certificats SSL.</div><div class="status"><span class="dot wait"></span><span class="state">Reseau local uniquement</span></div></a></div></section><section><div class="section-head"><h2>🌍 Web et services</h2><span>Mes outils en ligne</span></div><div class="grid"><a target="_blank" rel="noopener noreferrer" class="card site check" data-url="https://bkmax.fr" href="https://bkmax.fr"><span class="badge">PUBLIC</span><div class="icon">🌐</div><div class="name">BKMAX</div><div class="desc">Site web principal BKMAX.</div><div class="status"><span class="dot wait"></span><span class="state">Verification...</span></div></a><a target="_blank" rel="noopener noreferrer" class="card torrent check" data-url="https://torrent.bkmax.fr" href="https://torrent.bkmax.fr"><span class="badge">PUBLIC</span><div class="icon">⬇️</div><div class="name">qBittorrent</div><div class="desc">Gestion des telechargements torrent.</div><div class="status"><span class="dot wait"></span><span class="state">Verification...</span></div></a><a target="_blank" rel="noopener noreferrer" class="card request check" data-url="https://bkmax.fr/book" href="https://bkmax.fr/book"><span class="badge">PUBLIC</span><div class="icon">📚</div><div class="name">Demande de livres audio</div><div class="desc">Interface de demande de nouveaux livres audio.</div><div class="status"><span class="dot wait"></span><span class="state">Verification...</span></div></a></div></section><section><div class="section-head"><h2>🎭 Medias</h2><span>Streaming et bibliotheques</span></div><div class="grid"><a target="_blank" rel="noopener noreferrer" class="card plex check" data-url="https://plex.bkmax.fr" href="https://plex.bkmax.fr"><span class="badge">PUBLIC</span><div class="icon">🎬</div><div class="name">Plex</div><div class="desc">Films, series et contenu multimedia.</div><div class="status"><span class="dot wait"></span><span class="state">Verification...</span></div></a><a target="_blank" rel="noopener noreferrer" class="card audio check" data-url="https://book.bkmax.fr" href="https://book.bkmax.fr"><span class="badge">PUBLIC</span><div class="icon">🎧</div><div class="name">Audiobookshelf</div><div class="desc">Serveur et bibliotheque de livres audio.</div><div class="status"><span class="dot wait"></span><span class="state">Verification...</span></div></a></div></section><div class="footer">BKMAX Portal · Etat actualise toutes les 5 secondes</div><script>async function ping(c){const d=c.querySelector(".dot"),s=c.querySelector(".state"),u=c.dataset.url;d.className="dot wait";s.textContent="Verification...";const x=new AbortController(),t=setTimeout(()=>x.abort(),3500);try{await fetch(u+"?bkmax_status="+Date.now(),{mode:"no-cors",cache:"no-store",signal:x.signal});clearTimeout(t);d.className="dot up";s.textContent="En ligne"}catch(e){clearTimeout(t);d.className="dot down";s.textContent="Hors ligne"}}function scan(){document.querySelectorAll(".check").forEach(ping)}scan();setInterval(scan,5000)</script></div></body></html>