1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 6 <title>The Black Hole Bay - DHT Torrent Search Engine & Magnet Links</title> 7
7<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5851218240639675" crossorigin="anonymous"></script>
7 8 9 <!-- Primary Meta Tags --> 10 <meta name="title" content="The Black Hole Bay - DHT Torrent Search Engine & Magnet Links"> 11 <meta name="description" content="The Black Hole Bay is a DHT torrent search engine crawling the BitTorrent network. Search millions of movies, TV shows, games, and software via DHT and direct magnet links."> 12 <meta name="keywords" content="dht torrent, dht search engine, bittorrent dht, dht crawler, torrent search, pirate bay alternative, magnet links, movie torrents, game torrents, the black hole bay"> 13 <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"> 14 <link rel="canonical" href="https://theblackholebay.lol/" /> 15 <meta name="theme-color" content="#050505"> 16 <link rel="icon" type="image/jpeg" href="/images/icon-haloween.jpg"> 17 <link href="css/normalize.css" rel="stylesheet" type="text/css"> 18 <link href="css/tpb.css" rel="stylesheet" type="text/css"> 19
19<script defer src="js/app.js"></script>
19 20 <style> 21 :root { 22 --bg-dark: #050505; --bg-darker: #020202; --bg-card: #0d0d0d; 23 --border-color: #1a1a1a; --border-light: #2a2a2a; 24 --text-primary: #e0e0e0; --text-secondary: #888888; 25 --accent-primary: #ffffff; --accent-orange: #ff6b35; 26 } 27 * { box-sizing: border-box; } 28 body { 29 background-color: var(--bg-dark); 30 background-image: url('https://www.transparenttextures.com/patterns/stardust.png'); 31 background-attachment: fixed; color: var(--text-primary); 32 font-family: 'Segoe UI', sans-serif; margin: 0; min-height: 100vh; overflow-x: hidden; 33 } 34 #dev-banner { display: none; background: #f39c12; color: #000; text-align: center; padding: 10px; font-weight: bold; position: fixed; top: 0; width: 100%; z-index: 9999; } 35 #custom-banner { display: none; background: #3B82F6; color: #fff; text-align: center; padding: 10px; font-weight: bold; position: fixed; top: 0; width: 100%; z-index: 9998; } 36 #fallback-banner { display: none; background: #F43F5E; color: #fff; text-align: center; padding: 10px; font-weight: bold; position: fixed; top: 0; width: 100%; z-index: 9997; } 37 body.dev-mode-active { padding-top: 40px; } 38 body.has-banner { padding-top: 40px; } 39 40 .top-nav { position: fixed; top: 15px; right: 20px; z-index: 1000; display: flex; gap: 18px; transition: top 0.3s; align-items: center; } 41 body.has-banner .top-nav { top: 55px; } 42 body.dev-mode-active.has-banner .top-nav { top: 95px; } 43 .top-nav a { color: #888; text-decoration: none; font-size: 14px; font-weight: 600; transition: color 0.2s; } 44 .top-nav a:hover { color: #ff6b35; } 45 46 /* === Download Button � bigger, glassmorphism, white text, fully top-right === */ 47 .download-btn { 48 display: inline-flex; align-items: center; gap: 7px; 49 padding: 9px 22px; 50 background: rgba(255, 255, 255, 0.1); 51 color: #ffffff; font-size: 15px; font-weight: 700; 52 border-radius: 9999px; text-decoration: none; 53 border: 1.5px solid rgba(255, 255, 255, 0.4); 54 backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); 55 box-shadow: 0 2px 12px rgba(0, 0, 0, 0.4); 56 transition: all 0.2s ease; letter-spacing: 0.3px; line-height: 1; 57 white-space: nowrap; 58 } 59 .download-btn:hover { 60 background: rgba(255, 255, 255, 0.2); 61 border-color: rgba(255, 255, 255, 0.7); 62 box-shadow: 0 4px 20px rgba(255, 255, 255, 0.15); 63 transform: translateY(-1px); color: #fff; 64 } 65 .download-btn:active { transform: translateY(0); } 66 .download-btn svg { width: 16px; height: 16px; fill: currentColor; flex-shrink: 0; } 67 @media (max-width: 768px) { 68 .download-btn { padding: 7px 16px; font-size: 13px; } 69 .download-btn svg { width: 14px; height: 14px; } 70 } 71 72 .page-shell { max-width: 1200px; margin: 0 auto; padding: 40px 20px; } 73 .hero-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 16px; padding: 40px; margin-bottom: 30px; text-align: center; box-shadow: 0 8px 24px rgba(0,0,0,0.8); } 74 .hero-logo { width: 80px; height: 80px; border-radius: 12px; border: 2px solid var(--accent-primary); margin-bottom: 15px; } 75 .hero-card h1 { margin: 0 0 10px 0; font-size: 36px; color: var(--text-primary); } 76 .hero-card p { color: var(--text-secondary); margin-bottom: 30px; } 77 78 form#search-form { display: flex; flex-direction: column; align-items: center; gap: 20px; } 79 .search-row { display: flex; gap: 15px; justify-content: center; width: 100%; flex-wrap: wrap; align-items: center; } 80 81 .input { 82 background: #0d0d0d; border: none; outline: none; padding: 12px 20px; font-size: 16px; 83 border-radius: 9999px; box-shadow: inset 2px 5px 10px rgb(5, 5, 5); color: #fff; 84 width: 100%; max-width: 500px; flex: 1; min-width: 300px; 85 } 86 87 .btn-3d { 88 font: inherit; background-color: #2a2a2a; border: 0;
88 color: #e0e0e0; border-radius: 6px; font-size: 1rem; padding: 0.6em 1.2em; font-weight: 600; text-shadow: 0 0.0625em 0 #000; 89 box-shadow: inset 0 0.0625em 0 0 #3a3a3a, 0 0.0625em 0 0 #252525, 0 0.125em 0 0 #202020, 0 0.25em 0 0 #1c1c1c, 0 0.3125em 0 0 #181818, 0 0.375em 0 0 #141414, 0 0.425em 0 0 #101010, 0 0.425em 0.5em 0 #0a0a0a; 90 transition: 0.15s ease; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; justify-content: center; gap: 8px; 91 } 92 .btn-3d:active { translate: 0 0.225em; box-shadow: inset 0 0.03em 0 0 #3a3a3a, 0 0.03em 0 0 #252525, 0 0.0625em 0 0 #202020, 0 0.125em 0 0 #1c1c1c, 0 0.125em 0 0 #181818, 0 0.2em 0 0 #141414, 0 0.225em 0 0 #101010, 0 0.225em 0.375em 0 #0a0a0a; } 93 94 .chip-row { display: flex; gap: 8px; flex-wrap: wrap; justify-content: center; align-items: center; } 95 .chip { font-size: 0.8rem; padding: 0.4em 0.8em; border-radius: 6px; font-weight: 600; background-color: #2a2a2a; border: 0; color: #e0e0e0; box-shadow: inset 0 0.0625em 0 0 #3a3a3a, 0 0.0625em 0 0 #252525, 0 0.125em 0 0 #202020, 0 0.125em 0.3em 0 #0a0a0a; text-shadow: 0 0.0625em 0 #000; text-decoration: none; white-space: nowrap; transition: 0.15s ease; cursor: pointer; display: inline-flex; align-items: center; gap: 5px; } 96 .chip:active { translate: 0 0.1em; } 97 .chip.active { background-color: #1c1c1c; color: #ffffff; } 98 99 #recent-searches-container { margin-top: 15px; display: none; } 100 .recent-search-chip { 101 display: inline-flex; align-items: center; gap: 8px; 102 background-color: #1a1a1a; border: 1px solid #333; color: #b0b0b0; 103 padding: 6px 6px 6px 12px; border-radius: 9999px; font-size: 13px; cursor: pointer; 104 transition: all 0.2s; user-select: none; 105 } 106 .recent-search-chip:hover { background-color: #222; color: #fff; } 107 .remove-x { 108 display: inline-flex; align-items: center; justify-content: center; 109 width: 18px; height: 18px; border-radius: 50%; background: #333; color: #fff; 110 font-size: 14px; line-height: 1; font-weight: bold; border: none; cursor: pointer; 111 } 112 .remove-x:hover { background: #e74c3c; } 113 114 .filter-input-wrap { display: flex; align-items: center; background: #0d0d0d; border-radius: 9999px; box-shadow: inset 2px 5px 10px rgb(5, 5, 5); padding: 5px 15px; flex: 1; min-width: 200px; max-width: 300px; margin-right: auto; } 115 .filter-input-wrap input { border: none; background: transparent; box-shadow: none; padding: 8px 0; width: 100%; color: #fff; outline: none; font-size: 14px; } 116 117 .results-panel { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 16px; padding: 20px; box-shadow: 0 8px 24px rgba(0,0,0,0.8); } 118 .toolbar { background: var(--bg-darker); border: 1px solid var(--border-color); border-radius: 8px; padding: 15px; margin-bottom: 20px; } 119 .results-table { width: 100%; border-collapse: collapse; } 120 .results-table th { color: var(--text-secondary); font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; text-align: left; padding: 15px; border-bottom: 1px solid var(--border-color); cursor: pointer; } 121 .results-table td { padding: 15px; border-bottom: 1px solid var(--border-color); font-size: 14px; color: var(--text-primary); } 122 .results-table tr { animation: fadeIn 0.3s ease; } 123 @keyframes fadeIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } } 124 .results-table tr:last-child td { border-bottom: none; } 125 .table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; width: 100%; } 126 select { background: var(--bg-darker); color: var(--text-primary); border: 1px solid var(--border-color); padding: 8px; border-radius: 4px; outline: none; } 127 128 #carousel-container { display: none; max-width: 720px; margin: 0 auto 30px auto; background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 12px; overflow: hidden; box-shadow: 0 8px 24px rgba(0,0,0,0.8); } 129 .carousel-header { padding: 8px 14px; border-bottom: 1px solid var(--border-color); display: flex; justify-content: space-between; align-items: center; background: var(--bg-darker); gap: 10px; flex-wrap: wrap; } 130 .carousel-tabs { display: flex; gap: 4px; } 131 .carousel-tab { font-size: 0.72rem; padding: 0.35em 0.7em; border-radius: 5px; font-weight: 600; background: transparent; border: 1px solid var(--border-color); color: var(--text-secondary); cursor: pointer; transition: 0.15s ease; display: inline-flex; align-items: center; gap: 4px; } 132 .carousel-tab:hover { background: rgba(255,255,255,0.05); color: var(--text-primary); } 133 .carousel-tab.active { background-color: var(--accent-orange); color: #fff; border-color: var(--accent-orange); } 134 .carousel-tab svg { width: 13px; height: 13px; flex-shrink: 0; } 135 .carousel-nav { display: flex; gap: 6px; } 136 .carousel-nav .btn-3d { padding: 0.2em 0.6em; font-size: 0.85rem; line-height: 1; min-width: 28px; } 137 .carousel-viewport { overflow: hidden; width: 100%; } 138 #movie-carousel { display: flex; transition: transform 0.6s cubic-bezier(0.22, 0.61, 0.36, 1); will-change: transform; } 139 .carousel-slide { min-width: 100%; position: relative; cursor: pointer; } 140 .carousel-slide img { width: 100%; height: 200px; object-fit: cover; opacity: 0.7; display: block; } 141 .carousel-slide:hover img { opacity: 0.85; } 142 .carousel-overlay { position: absolute; bottom: 0; left: 0; right: 0; padding: 12px 18px; text-align: left; background: linear-gradient(to top, rgba(0,0,0,0.95) 0%, rgba(0,0,0,0.5) 70%, transparent 100%); display: flex; flex-direction: column; justify-content: flex-end; gap: 6px; } 143 .carousel-overlay h3 { color: #fff; text-shadow: 2px 2px 4px #000; margin: 0; font-size: 16px; } 144 .carousel-overlay .sub { color: rgba(255,255,255,0.7); font-size: 12px; margin: 0; } 145 146 .site-footer { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 16px; padding: 30px; margin-top: 40px; text-align: center; box-shadow: 0 8px 24px rgba(0,0,0,0.8); } 147 .donation-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; max-width: 800px; margin: 0 auto; } 148 .donation-card { background: var(--bg-darker); border: 1px solid var(--border-color); border-radius: 12px; padding: 20px; display: flex; flex-direction: column; gap: 15px; transition: transform 0.2s, border-color 0.2s; } 149 .donation-card:hover { transform: translateY(-3px); border-color: var(--border-light); } 150 .crypto-header { display: flex; align-items: center; gap: 10px; font-weight: 600; color: var(--text-primary); font-size: 16px; } 151 .crypto-logo { width: 24px; height: 24px; } 152 .crypto-box { display: flex; align-items: center; gap: 10px; background: #050505; padding: 10px; border-radius: 8px; border: 1px solid #1a1a1a; } 153 .crypto-box code { flex: 1; word-break: break-all; font-family: monospace; font-size: 13px; color: var(--text-secondary); } 154 155 .playstore-button { display: inline-flex; align-items: center; justify-content: center; border: 2px solid #333; border-radius: 9999px; background-color: #0d0d0d; padding: 0.625rem 1.5rem; text-align: center;
155 color: #e0e0e0; outline: 0; transition: all 0.2s ease; text-decoration: none; margin-top: 30px; } 156 .playstore-button:hover { background-color: transparent; color: #fff; border-color: #555; } 157 .icon { height: 1.5rem; width: 1.5rem; fill: #e0e0e0; transition: fill 0.2s; } 158 .playstore-button:hover .icon { fill: #fff; } 159 .texts { margin-left: 1rem; display: flex; flex-direction: column; align-items: flex-start; line-height: 1; } 160 .text-1 { margin-bottom: 0.25rem; font-size: 0.75rem; line-height: 1rem; } 161 .text-2 { font-weight: 600; } 162 163 #back-to-top { position: fixed; bottom: 20px; right: 20px; display: none; z-index: 99; padding: 10px 15px; border-radius: 6px; } 164 #back-to-top.show { display: inline-flex; } 165 166 .loader-container { display: flex; justify-content: center; align-items: center; height: 250px; width: 100%; } 167 .planets { position: relative; width: 220px; height: 220px; display: flex; justify-content: center; align-items: center; overflow: visible; } 168 #planetTrail1, #planetTrail2, #planetTrail3 { outline: solid #1a1a1a 1px; border-radius: 50%; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } 169 #planetTrail1::after, #planetTrail2::after, #planetTrail3::after { content: ""; width: 10px; height: 10px; position: absolute; border-radius: 50%; top: -5px; left: 50%; transform: translateX(-50%); } 170 #planetTrail1::after { background-color: #d5d578; } #planetTrail2::after { background-color: #73aee7; } #planetTrail3::after { background-color: #b44931; } 171 #planetTrail1 { width: 120px; height: 120px; animation: trails1 4s infinite; } #planetTrail2 { width: 170px; height: 170px; animation: trails2 4s infinite; } #planetTrail3 { width: 220px; height: 220px; animation: trails3 4s infinite; } 172 @keyframes trails1 { 0% { transform: translate(-50%, -50%) rotate(0deg); } 40% { transform: translate(-50%, -50%) rotate(360deg); width: 120px; height: 120px; } 50% { width: 0px; height: 0px; } 90% { width: 0px; height: 0px; } 100% { width: 120px; height: 120px; } } 173 @keyframes trails2 { 0% { transform: translate(-50%, -50%) rotate(0deg); } 40% { transform: translate(-50%, -50%) rotate(250deg); width: 170px; height: 170px; } 50% { width: 0px; height: 0px; } 90% { width: 0px; height: 0px; } 100% { width: 170px; height: 170px; } } 174 @keyframes trails3 { 0% { transform: translate(-50%, -50%) rotate(0deg); } 40% { transform: translate(-50%, -50%) rotate(170deg); width: 220px; height: 220px; } 50% { width: 0px; height: 0px; } 90% { width: 0px; height: 0px; } 100% { width: 220px; height: 220px; } } 175 #star { position: absolute; width: 50px; height: 50px; background-color: #ffaa00; border-radius: 50%; top: 50%; left: 50%; transform: translate(-50%, -50%); animation: bouncingStar 4s infinite; } 176 #starShadow { position: absolute; width: 50px; height: 20px; background-color: #ffaa00; border-radius: 50%; top: 50%; left: 50%; transform: translate(-50%, 100%); filter: blur(5px); opacity: 0.3; animation: shadowAnimation 4s infinite; } 177 @keyframes bouncingStar { 0% { transform: translate(-50%, -50%); } 10% { transform: translate(-50%, -30%); } 20% { transform: translate(-50%, -50%); } 30% { transform: translate(-50%, -30%); } 40% { transform: translate(-50%, -50%); width: 50px; height: 50px; } 50% { width: 0px; height: 0px; } 90% { width: 0px; height: 0px; } 100% { width: 50px; height: 50px; } } 178 @keyframes shadowAnimation { 0% { opacity: 0.1; } 10% { opacity: 0.4; } 20% { opacity: 0.1; } 30% { opacity: 0.4; } 40% { opacity: 0.1; } 50% { opacity: 0; } 90% { opacity: 0; } 100% { opacity: 0.1; } } 179 #blackHole { position: absolute; width: 50px; height: 50px; background-color: #000; outline: orange solid 5px; border-radius: 50%; top: 50%; left: 50%; transform: translate(-50%, -50%); animation: bouncingBlackHole 4s infinite; } 180 @keyframes bouncingBlackHole { 0% { height: 0px; width: 0px; } 40% { width: 0px; height: 0px; } 50% { width: 50px; height: 50px; } 90% { width: 50px; height: 50px; } 100% { width: 0px; height: 0px; } } 181 #blackHoleDisk1 { position: absolute; width: 68px; height: 68px; clip-path: inset(50% 0 0 0); border: #000 10px solid; border-radius: 50%; top: 50%; left: 50%; transform: translate(-50%, -50%) rotateX(70deg); animation: diskAn 4s infinite; } 182 #blackHoleDisk2 { position: absolute; width: 70px; height: 70px; clip-path: inset(0 0 50% 0); border: #f5ae08 10px solid; border-radius: 50%; top: 50%; left: 50%; transform: translate(-50%, -50%) rotateX(55deg); animation: diskAn 4s infinite; } 183 @keyframes diskAn { 0% { height: 0px; width: 0px; border: orange 0px solid; } 40% { width: 0px; height: 0px; border: orange 0px solid; } 50% { width: 88px; height: 88px; border: orange 18px solid; } 90% { width: 88px; height: 88px; border: orange 18px solid; } 100% { width: 0px; height: 0px; border: orange 0px solid; } } 184 #planet { position: absolute; width: 10px; height: 10px; background-color: #fff; border-radius: 50%; top: 50%; left: 50%; animation: planetAn 4s infinite; } 185 @keyframes planetAn { 0% { opacity: 0; transform: translate(-50%, -50%); z-index: 1; } 50% { opacity: 0; transform: translate(-50%, -50%); z-index: 1; } 58% { opacity: 1; } 70% { opacity: 1; transform: translate(calc(-50% + 100px), calc(-50% + 40px)); z-index: 1; } 71% { z-index: 0; } 90% { z-index: 0; opacity: 1;
185 transform: translate(calc(-50% - 10px), calc(-50% + 70px)); } 100% { transform: translate(calc(-50% - 10px), calc(-50% + 70px)); opacity: 0; } } 186 .hidden { display: none !important; } 187 188 @media (max-width: 768px) { 189 .page-shell { padding: 20px 10px; } 190 .hero-card { padding: 20px; } 191 .hero-card h1 { font-size: 28px; } 192 .search-row { flex-direction: column; gap: 15px; width: 100%; } 193 .input { width: 100%; max-width: 100%; min-width: 0; } 194 .btn-3d { width: 100%; } 195 .filter-input-wrap { width: 100% !important; max-width: 100% !important; margin-right: 0 !important; margin-top: 10px; } 196 .table-wrap { overflow-x: auto; } 197 .results-table { min-width: 800px; } 198 .carousel-slide img { height: 150px; } 199 .carousel-tabs { flex-wrap: wrap; } 200 .site-footer { padding: 20px; } 201 .donation-grid { grid-template-columns: 1fr !important; gap: 15px; } 202 .donation-card { padding: 15px; } 203 .crypto-header { font-size: 14px; flex-wrap: wrap; } 204 .crypto-box { flex-direction: column; align-items: stretch; text-align: center; } 205 .crypto-box code { font-size: 12px; margin-bottom: 5px; } 206 .crypto-box .btn-3d { width: 100%; } 207 } 208 </style> 209<link rel="stylesheet" href="/css/site-layout.css"></head> 210<body> 211<div id="dev-banner">DEVELOPMENT MODE: Things may not work as expected.</div> 212<div id="custom-banner"></div> 213<div id="fallback-banner">LIVE API UNAVAILABLE - SERVING FROM LOCAL INDEX</div> 214<button id="back-to-top" class="btn-3d" onclick="window.scrollTo({top:0, behavior:'smooth'})">UP</button> 215 216<nav class="top-nav"> 217 <a href="/docs">Docs</a> 218 <a href="/api">API</a> 219 <a href="/report.html">Report / Suggest</a> 220 <a href="/apply">Join the Team</a> 221 <a href="/login.html" id="auth-link">Login / Register</a> 222 <a href="/download.html" class="download-btn"> 223 <svg viewBox="0 0 24 24" fill="currentColor"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/></svg> 224 Get App 225 </a> 226</nav> 227 228<div class="page-shell"> 229 <section class="hero-card"> 230 <img class="hero-logo" src="/images/icon-haloween.jpg" alt="The Black Hole Bay logo"> 231 <h1>The Black Hole Bay</h1> 232 <p>Search torrents, browse categories, and open magnets directly.</p> 233 <form id="search-form" autocomplete="off"> 234 <div class="search-row"> 235 <input id="search-input" type="search" class="input" placeholder="Search torrents" autofocus> 236 <button type="submit" class="btn-3d">Search</button> 237 <a href="/upcoming.html" class="btn-3d">Upcoming</a> 238 </div> 239 <div class="chip-row" id="top-category-filters" style="margin-top: 20px;"></div> 240 <div class="chip-row" id="recent-searches-container"></div> 241 </form> 242 </section> 243 244 <section id="carousel-container" aria-label="Trending content"> 245 <div class="carousel-header"> 246 <div class="carousel-tabs"> 247 <button class="carousel-tab active" data-tab="movie" type="button"> 248 <svg viewBox="0 0 24 24" fill="currentColor"><path d="M18 4l2 4h-3l-2-4h-2l2 4h-3l-2-4H8l2 4H7L5 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4h-4z"/></svg> 249 Movies 250 </button> 251 <button class="carousel-tab" data-tab="tv" type="button"> 252 <svg viewBox="0 0 24 24" fill="currentColor"><path d="M21 3H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h5v2h8v-2h5c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 14H3V5h18v12z"/></svg> 253 TV 254 </button> 255 <button class="carousel-tab" data-tab="game" type="button"> 256 <svg viewBox="0 0 24 24" fill="currentColor"><path d="M21 6H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zM8 13H6v2H5v-2H3v-1h2v-2h1v2h2v1zm6.5 2c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm3.5-3c-.83 0-1.5-.67-1.5-1.5S16.67 9 17.5 9s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"/></svg> 257 Games 258 </button> 259 </div> 260 <div class="carousel-nav"> 261 <button id="carousel-prev" class="btn-3d" type="button" aria-label="Previous"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/></svg></button> 262 <button id="carousel-next" class="btn-3d" type="button" aria-label="Next"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg></button> 263 </div> 264 </div> 265 <div class="carousel-viewport"> 266 <div id="movie-carousel"></div> 267 </div> 268 </section> 269 270 <section id="results-panel" class="results-panel hidden" aria-l
270ive="polite"> 271 <div class="toolbar" aria-label="Category filters"> 272 <div class="chip-row" id="quick-filters" style="justify-content: flex-start;"></div> 273 </div> 274 <div class="results-summary"> 275 <h2 id="results-heading">Search for something</h2> 276 <p id="results-subtitle">Your results will appear here.</p> 277 <div id="status-message" class="status" style="color: var(--text-secondary); margin-bottom: 15px;"></div> 278 </div> 279 <div id="loader" class="hidden"> 280 <div class="loader-container"><div class="planets"> 281 <div id="planetTrail1"></div><div id="planetTrail2"></div><div id="planetTrail3"></div> 282 <div id="star"></div><div id="starShadow"></div><div id="blackHole"></div> 283 <div id="blackHoleDisk1"></div><div id="blackHoleDisk2"></div><div id="planet"></div> 284 </div></div> 285 </div> 286 <div class="table-wrap"> 287 <table class="results-table"> 288 <thead><tr> 289 <th class="sortable" data-sort="category">Category</th> 290 <th class="sortable" data-sort="name">Title</th> 291 <th class="sortable" data-sort="added">Uploaded</th> 292 <th class="sortable" data-sort="size">Size</th> 293 <th class="sortable" data-sort="seeders">SE</th> 294 <th class="sortable" data-sort="leechers">LE</th> 295 <th class="sortable" data-sort="username">Uploader</th> 296 </tr></thead> 297 <tbody id="results-list"></tbody> 298 </table> 299 </div> 300 <div id="pagination-controls" class="hidden" style="margin-top: 20px;"> 301 <div class="page-size-row" style="margin-bottom: 15px; display: flex; gap: 10px; align-items: center; justify-content: center;"> 302 <span style="color: var(--text-secondary); font-size: 14px;">Show:</span> 303 <select id="items-per-page-select"><option value="25" selected>25</option><option value="50">50</option><option value="100">100</option></select> 304 </div> 305 <div class="page-nav" style="display: flex; gap: 15px; align-items: center; justify-content: center;"> 306 <button id="prev-page-btn" class="btn-3d" type="button"><< Previous</button> 307 <span id="page-info" style="color: var(--text-secondary);">Page 1 of 1</span> 308 <button id="next-page-btn" class="btn-3d" type="button">Next >></button> 309 </div> 310 </div> 311 </section> 312 313 <footer class="site-footer" id="donations"> 314 <h3 style="margin-top: 0; margin-bottom: 20px; color: var(--accent-primary);">Support The Black Hole Bay (Donations)</h3> 315 <div class="donation-grid"> 316 <div class="donation-card"> 317 <div class="crypto-header"><img src="images/usdt.png" class="crypto-logo" alt="USDT"> Tether US (USDT) - BNB Smart Chain (BEP20)</div> 318 <div class="crypto-box"><code>0x7FCBF41CF35259b466a7516Ec0ED32adAC9fF40f</code><button class="btn-3d" onclick="navigator.clipboard.writeText('0x7FCBF41CF35259b466a7516Ec0ED32adAC9fF40f'); alert('Copied!')">Copy</button></div> 319 </div> 320 <div class="donation-card"> 321 <div class="crypto-header"><img src="images/btc.png" class="crypto-logo" alt="BTC"> Bitcoin (BTC)</div> 322 <div class="crypto-box"><code>bc1q56znh3ptafknppu9q0zqg02kfry4lmwwf5t83y</code><button class="btn-3d" onclick="navigator.clipboard.writeText('bc1q56znh3ptafknppu9q0zqg02kfry4lmwwf5t83y'); alert('Copied!')">Copy</button></div> 323 </div> 324 <div class="donation-card"> 325 <div class="crypto-header"><img src="images/sol.png" class="crypto-logo" alt="SOL"> Solana (SOL)</div> 326 <div class="crypto-box"><code>8wSrr5mesxqjLpcHkfA8d7nMJihumsrTT2BDtoS25AD7</code><button class="btn-3d" onclick="navigator.clipboard.writeText('8wSrr5mesxqjLpcHkfA8d7nMJihumsrTT2BDtoS25AD7'); alert('Copied!')">Copy</button></div> 327 </div> 328 <div class="donation-card"> 329 <div class="crypto-header"><img src="images/xrp.png" class="crypto-logo" alt="XRP">
329 XRP</div> 330 <div class="crypto-box"><code>rw9wLrxHnaQi91MJCAx4B5BbnqFaCCXXvn</code><button class="btn-3d" onclick="navigator.clipboard.writeText('rw9wLrxHnaQi91MJCAx4B5BbnqFaCCXXvn'); alert('Copied!')">Copy</button></div> 331 </div> 332 </div> 333 334 <a href="https://discord.gg/Qb2GQqW3Uq" class="playstore-button" target="_blank"> 335 <svg viewBox="0 -28.5 256 256" class="icon" xmlns="http://www.w3.org/2000/svg"> 336 <path d="M216.856339,16.5966031 C200.285002,8.84328665 182.566144,3.2084988 164.041564,0 C161.766523,4.11318106 159.108624,9.64549908 157.276099,14.0464379 C137.583995,11.0849896 118.072967,11.0849896 98.7430163,14.0464379 C96.9108417,9.64549908 94.1925838,4.11318106 91.8971895,0 C73.3526068,3.2084988 55.6133949,8.86399117 39.0420583,16.6376612 C5.61752293,67.146514 -3.4433191,116.400813 1.08711069,164.955721 C23.2560196,181.510915 44.7403634,191.567697 65.8621325,198.148576 C71.0772151,190.971126 75.7283628,183.341335 79.7352139,175.300261 C72.104019,172.400575 64.7949724,168.822202 57.8887866,164.667963 C59.7209612,163.310589 61.5131304,161.891452 63.2445898,160.431257 C105.36741,180.133187 151.134928,180.133187 192.754523,160.431257 C194.506336,161.891452 196.298154,163.310589 198.110326,164.667963 C191.183787,168.842556 183.854737,172.420929 176.223542,175.320965 C180.230393,183.341335 184.861538,190.991831 190.096624,198.16893 C211.238746,191.588051 232.743023,181.531619 254.911949,164.955721 C260.227747,108.668201 245.831087,59.8662432 216.856339,16.5966031 Z M85.4738752,135.09489 C72.8290281,135.09489 62.4592217,123.290155 62.4592217,108.914901 C62.4592217,94.5396472 72.607595,82.7145587 85.4738752,82.7145587 C98.3405064,82.7145587 108.709962,94.5189427 108.488529,108.914901 C108.508531,123.290155 98.3405064,135.09489 85.4738752,135.09489 Z M170.525237,135.09489 C157.88039,135.09489 147.510584,123.290155 147.510584,108.914901 C147.510584,94.5396472 157.658606,82.7145587 170.525237,82.7145587 C183.391518,82.7145587 193.761324,94.5189427 193.539891,108.914901 C193.539891,123.290155 183.391518,135.09489 170.525237,135.09489 Z"></path> 337 </svg> 338 <span class="texts"><span class="text-1">JOIN THE</span><span class="text-2">DISCORD</span></span> 339 </a> 340 341 <div style="margin-top: 30px; display: flex; gap: 20px; justify-content: center; flex-wrap: wrap;"> 342 <a href="/privacy.html" style="color: var(--text-secondary); text-decoration: none; font-size: 14px;">Privacy Policy</a> 343 <a href="/tos.html" style="color: var(--text-secondary); text-decoration: none; font-size: 14px;">Terms of Service</a> 344 <a href="/help.html" style="color: var(--text-secondary); text-decoration: none; font-size: 14px;">Help / FAQ</a> 345 </div> 346 <p style="color: var(--text-secondary); margin-top: 20px;">The Black Hole Bay torrent search and magnet downloads.</p> 347 </footer> 348</div> 349
350<script> 351 fetch('/api/settings').then(r => r.json()).then(s => { 352 if (s.developmentMode) { document.body.classList.add('dev-mode-active'); var b = document.getElementById('dev-banner'); if (b) b.style.display = 'block'; } 353 if (s.customBanner) { 354 var cb = document.getElementById('custom-banner'); 355 if (cb) { cb.textContent = s.customBanner; cb.style.display = 'block'; document.body.classList.add('has-banner'); } 356 } 357 }).catch(() => {}); 358 359 if (sessionStorage.getItem('session_token')) { 360 document.getElementById('auth-link').textContent = 'My Profile'; 361 document.getElementById('auth-link').href = '/profile.html?u=' + encodeURIComponent(sessionStorage.getItem('username')); 362 } 363 364 window.onscroll = () => { 365 const btn = document.getElementById('back-to-top'); 366 if (document.body.scrollTop > 300 || document.documentElement.scrollTop > 300) btn.classList.add('show'); 367 else btn.classList.remove('show'); 368 }; 369</script>
vendor: 1 bytes, line 369
369
370<script defer src="/js/site-footer.js"></script>
370<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"fed1a331b87d4dc7b361c56f56c914c2","r":1,"spa":2}' crossorigin="anonymous"></script>
370 371</body> 372</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.