1<!DOCTYPE html> 2<html lang="ja" class="lang-ja"> 3 4<head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Kojika Games</title> 8 <meta name="description" id="meta-description" 9 content="Kojika Gamesï¼ã³ã¸ã«ã²ã¼ã ã¹ï¼ã®å ¬å¼ãµã¤ããã¤ã³ãã£ã¼ã²ã¼ã ã¨ãªã¼ãã£ãªãã©ã°ã¤ã³ãå¶ä½ãã¦ãã¾ãã" 10 data-ja="Kojika Gamesï¼ã³ã¸ã«ã²ã¼ã ã¹ï¼ã®å ¬å¼ãµã¤ããã¤ã³ãã£ã¼ã²ã¼ã ã¨ãªã¼ãã£ãªãã©ã°ã¤ã³ãå¶ä½ãã¦ãã¾ãã" 11 data-en="Official website of Kojika Games, creating indie games and audio plug-ins."> 12 13 <!-- OGP (Social Media) --> 14 <meta property="og:title" content="Kojika Games"> 15 <meta property="og:type" content="website"> 16 <meta property="og:url" content="https://kojikagames.com/"> 17 <meta property="og:image" content="https://kojikagames.com/assets/og-image.webp"> 18 <meta property="og:description" id="meta-og-description" 19 content="Kojika Gamesã®ã²ã¼ã ã¨ãªã¼ãã£ãªãã©ã°ã¤ã³ãéã³ã¨é³ã«ãã²ã¨ã¯ã»ãã" 20 data-ja="Kojika Gamesã®ã²ã¼ã ã¨ãªã¼ãã£ãªãã©ã°ã¤ã³ãéã³ã¨é³ã«ãã²ã¨ã¯ã»ãã" 21 data-en="Games and audio plug-ins by Kojika Games. Playful ideas for play and sound."> 22 <meta property="og:site_name" content="Kojika Games"> 23 24 <!-- Twitter Card --> 25 <meta name="twitter:card" content="summary"> 26 <meta name="twitter:site" content="@kojikagames"> 27 <meta name="twitter:creator" content="@kojikagames"> 28 <meta name="twitter:title" content="Kojika Games"> 29 <meta name="twitter:description" id="meta-twitter-description" 30 content="Kojika Gamesã®ã²ã¼ã ã¨ãªã¼ãã£ãªãã©ã°ã¤ã³ãéã³ã¨é³ã«ãã²ã¨ã¯ã»ãã" 31 data-ja="Kojika Gamesã®ã²ã¼ã ã¨ãªã¼ãã£ãªãã©ã°ã¤ã³ãéã³ã¨é³ã«ãã²ã¨ã¯ã»ãã" 32 data-en="Games and audio plug-ins by Kojika Games. Playful ideas for play and sound."> 33 <meta name="twitter:image" content="https://kojikagames.com/assets/og-image.webp"> 34 35 <!-- Favicon & Icons --> 36 <link rel="icon" href="assets/icon.webp" type="image/webp"> 37 <link rel="apple-touch-icon" href="assets/icon.webp"> 38 <link rel="canonical" href="https://kojikagames.com/"> 39 <link rel="alternate" hreflang="ja" href="https://kojikagames.com/"> 40 <link rel="alternate" hreflang="x-default" href="https://kojikagames.com/"> 41 42
42<script src="language-init.js?v=20260711-2"></script>
42 43 <link rel="stylesheet" href="style.css?v=20260816-3"> 44 45 </head> 46 47<body> 48 49 <header class="site-header" aria-label="Kojika Games äºæ¥ããã²ã¼ã·ã§ã³"> 50 <a class="brand" href="./" data-keep-lang><strong>KOJIKA GAMES</strong></a> 51 <nav class="main-nav" aria-label="ã¡ã¤ã³ããã²ã¼ã·ã§ã³"> 52 <a href="./" aria-current="page" data-keep-lang> 53 <span data-lang="ja">ã²ã¼ã </span><span data-lang="en">Games</span> 54 </a> 55 <a href="plugins/" data-keep-lang> 56 <span data-lang="ja">ãªã¼ãã£ãªãã©ã°ã¤ã³</span><span data-lang="en">Audio Plugins</span> 57 </a> 58 <a href="newsletter/" data-keep-lang> 59 <span data-lang="ja">ãã¥ã¼ã¹ã¬ã¿ã¼</span><span data-lang="en">Newsletter</span> 60 </a> 61 </nav> 62 <div class="nav-actions"> 63 <div class="lang-switch" aria-label="Language"> 64 <button type="button" onclick="setLang('ja')" class="lang-btn" data-set-lang="ja" aria-pressed="false">JP</button> 65 <button type="button" onclick="setLang('en')" class="lang-btn" data-set-lang="en" aria-pressed="false">EN</button> 66 </div> 67 </div> 68 </header> 69 70 <!-- Game 1 (In Development) --> 71 <section id="game1"> 72 <div class="container game-section"> 73 <div class="game-header"> 74 <h2 style="font-size: 2rem; margin-bottom: 5px; font-weight: 800;"> 75 <span data-lang="ja">ã´ããããã©ãã¤ã¹</span> 76 <span data-lang="en">Gorotsuki Paradise</span> 77 </h2> 78 </div> 79 80 81 <div class="game-split-body"> 82 <div class="game-media-col"> 83 <div class="game-video-preview" onclick="openVideoModal(this)" data-video-ja="PVJHLE0mjRo" 84 data-video-en="18Qj2SsfuiI"> 85 <iframe data-lang="ja" src="https://www.youtube-nocookie.com/embed/PVJHLE0mjRo?controls=0" 86 title="Gorotsuki Paradise Trailer JP" frameborder="0" loading="lazy"></iframe> 87 <iframe data-lang="en" src="https://www.youtube-nocookie.com/embed/18Qj2SsfuiI?controls=0" 88 title="Gorotsuki Paradise Trailer EN" frameborder="0" loading="lazy"></iframe> 89 <div class="play-overlay"></div> 90 </div> 91 </div> 92 <div class="game-desc-col"> 93 <p class="game-description"> 94 <span data-lang="ja"> 95 ãã´ããããã©ãã¤ã¹ãã¯ãã¢ã¦ããã¼ã®å¢åäºãããã¼ãã«ãããããæ§ç¯åãªã³ã©ã¤ã³å¯¾æ¦ã«ã¼ãã²ã¼ã ï¼<br> 96 åæ§è±ããªã´ããããã¡ã仲éã«ããä¸çææªã®ç¯ç½ªé½å¸ããµã¤ã¿ããã§ãµãã¤ããåã¡ä¸ãããã<br> 97 äºåã«ããããç¨æãã¦æ¦ãã®ã§ã¯ãªãã対æ¦ä¸ã«ã´ãããã«ã¼ããéãããããæ§ç¯ããã·ã¹ãã ã§ãã·ã³ãã«ãªãããå¥¥æ·±ãæ¦ç¥ããã«ã楽ãããã²ã¼ã ã§ãã<br> 98 課éã«ãã£ã¦æå©ã«ãªããããªPay-To-Winè¦ç´ ã¯0ãå®å ¨ç¡æã§æ¥½ããã¾ãã 99 </span> 100 <span data-lang="en"> 101 "Gorotsuki Paradise" is an online PvP card game where you build your deck as you battle!<br> 102 Recruit over 150 unique "gorotsuki" (outlaws) to dominate a mad city called Saitama.<br> 103 No pre-built decksâcollect cards during the match to build your strategy. Simple rules, deep 104 gameplay.<br> 105 Completely free to play, with no pay-to-win mechanics! 106 </span> 107 </p> 108 </div> 109 </div> 110 111 <div class="store-links-container"> 112 <!-- Browser Play --> 113 <a href="https://goropara.kojikagames.com/" target="_blank" class="btn store-btn"> 114 <div class="btn-content">
115 <span class="btn-label" data-lang="ja">ä»ãããã¬ã¤</span> 116 <span class="btn-label" data-lang="en">Play Now</span> 117 <span class="platform-text" data-lang="ja">ãã©ã¦ã¶</span> 118 <span class="platform-text" data-lang="en">Browser</span> 119 </div> 120 </a> 121 122 <!-- App Store (iOS) --> 123 <a href="https://apps.apple.com/jp/app/gorotsuki-paradise/id6759117979?l=ja" 124 data-href-ja="https://apps.apple.com/jp/app/gorotsuki-paradise/id6759117979?l=ja" 125 data-href-en="https://apps.apple.com/us/app/gorotsuki-paradise/id6759117979" target="_blank" 126 class="btn store-btn"> 127 <div class="btn-content"> 128 <span class="btn-label">App Store</span> 129 <span class="platform-text">iOS</span> 130 </div> 131 </a> 132 133 <!-- Google Play (Android) --> 134 <a href="https://play.google.com/store/apps/details?id=com.kojikagames.goropara" target="_blank" class="btn store-btn"> 135 <div class="btn-content"> 136 <span class="btn-label">Google Play</span> 137 <span class="platform-text">Android</span> 138 </div> 139 </a> 140 141 <!-- Steam (PC) --> 142 <a href="https://store.steampowered.com/app/4246340/" target="_blank" class="btn store-btn"> 143 <div class="btn-content"> 144 <span class="btn-label">Steam</span> 145 <span class="platform-text">PC</span> 146 </div> 147 </a> 148 149 <!-- Epic Games Store (PC) --> 150 <a href="https://store.epicgames.com/p/gorotsuki-paradise-c990c3" target="_blank" class="btn store-btn"> 151 <div class="btn-content"> 152 <span class="btn-label">Epic Games</span> 153 <span class="platform-text">PC</span> 154 </div> 155 </a> 156 157 <!-- Forum --> 158 <a href="https://gamewith.jp/gamedb/15367/bbs" target="_blank" class="btn store-btn"> 159 <div class="btn-content"> 160 <span class="btn-label" data-lang="ja">æ²ç¤ºæ¿</span> 161 <span class="btn-label" data-lang="en">Forum</span> 162 <span class="platform-text">GameWith</span> 163 </div> 164 </a> 165 166 </div> 167 </div> 168 </section> 169 170 <!-- Section 3: Game 2 (Released) --> 171 <section id="game2"> 172 <div class="container game-section"> 173 <div class="game-header"> 174 <h2 style="font-size: 2rem; margin-bottom: 5px; font-weight: 800;"> 175 <span data-lang="ja">ã©ã³ããï¼AIã©ã³ã¯ããã«ã¢ãªã¼ã</span> 176 <span data-lang="en">AI Rank Battle Arena</span> 177 </h2> 178 </div> 179 180 181 <div class="game-split-body"> 182 <div class="game-media-col"> 183 <div class="game-video-preview" onclick="openVideoModal(this)" data-video-ja="bVTkelzZWEo" 184 data-video-en="bVTkelzZWEo"> 185 <iframe data-lang="ja" src="https://www.youtube-nocookie.com/embed/bVTkelzZWEo?controls=0" 186 title="AI Rank Battle Arena Trailer JP" frameborder="0" loading="lazy"></iframe> 187 <iframe data-lang="en" src="https://www.youtube-nocookie.com/embed/bVTkelzZWEo?controls=0" 188 title="AI Rank Battle Arena Trailer EN" frameborder="0" loading="lazy"></iframe> 189 <div class="play-overlay"></div> 190 </div> 191 </div> 192 <div class="game-desc-col"> 193 <p class="game-description">
194 <span data-lang="ja"> 195 ãã©ã³ããï¼AIã©ã³ã¯ããã«ã¢ãªã¼ããã¯ãAIãèããã©ã³ãã³ã°ã®é ä½ãäºæ³ãã¦æ¦ãã«ã¸ã¥ã¢ã«ãªãã¼ãã£ã¼ã²ã¼ã ï¼<br>ã¢ã¼ãã¯ãä¸ã¤ã®ã¹ããã§åéã¨å¯¾æ¦ããããã«ãã¢ã¼ãããã¹ãã¼ã¸ã¯ãªã¢å1人ç¨ã¢ã¼ãã®ãã½ãã¢ã¼ããã大人æ°ã§ã®ãã¬ã¤ã«ãæé©ãªãã·ã³ãã«ã¢ã¼ãããç¨æã<br>ã©ã³ãã³ã°ã®ãé¡ã¯æ¥æ¬èªã¯3300種é¡ä»¥ä¸ãè±èªã¯3100種é¡ä»¥ä¸ãããä½åº¦ã§ãç¹°ãè¿ã楽ãããã¨ãã§ãã¾ãã 196 </span> 197 <span data-lang="en"> 198 "AI Rank Battle Arena" is a casual party game where you predict AI-generated rankings!<br> 199 Includes "Multi Mode" to battle friends on a single device, "Solo Mode" for single-player 200 challenges, and "Simple Mode" perfect for large groups.<br> 201 With over 3300 Japanese and 3100 English topics, you can play endlessly. 202 </span> 203 </p> 204 </div> 205 </div> 206 207 <div class="store-links-container"> 208 <!-- App Store (iOS) --> 209 <a href="https://apps.apple.com/jp/app/id6757646374?l=ja" 210 data-href-ja="https://apps.apple.com/jp/app/id6757646374?l=ja" 211 data-href-en="https://apps.apple.com/us/app/id6757646374" target="_blank" class="btn store-btn"> 212 <div class="btn-content"> 213 <span class="btn-label">App Store</span> 214 <span class="platform-text">iOS</span> 215 </div> 216 </a> 217 218 <!-- Google Play (Android) --> 219 <a href="https://play.google.com/store/apps/details?id=com.kojikagames.ranbato" target="_blank" class="btn store-btn"> 220 <div class="btn-content"> 221 <span class="btn-label">Google Play</span> 222 <span class="platform-text">Android</span> 223 </div> 224 </a> 225 </div> 226 </div> 227 </section> 228 229 <!-- Section 4: Game 3 (Released) --> 230 <section id="game3"> 231 <div class="container game-section"> 232 <div class="game-header"> 233 <h2 style="font-size: 2rem; margin-bottom: 5px; font-weight: 800;"> 234 Kemotaku</h2> 235 </div> 236 237 238 <div class="game-split-body"> 239 <div class="game-media-col"> 240 <div class="game-video-preview" onclick="openVideoModal(this)" data-video-ja="pO1dTwTkmss" 241 data-video-en="CCuLyqa0gu0"> 242 <iframe data-lang="ja" src="https://www.youtube-nocookie.com/embed/pO1dTwTkmss?controls=0" 243 title="Kemotaku Trailer JP" frameborder="0" loading="lazy"></iframe> 244 <iframe data-lang="en" src="https://www.youtube-nocookie.com/embed/CCuLyqa0gu0?controls=0" 245 title="Kemotaku Trailer EN" frameborder="0" loading="lazy"></iframe> 246 <div class="play-overlay"></div> 247 </div> 248 </div> 249 <div class="game-desc-col"> 250 <p class="game-description"> 251 <span data-lang="ja"> 252 ãKemotakuï¼ã±ã¢ã¿ã¯ï¼ãã¯ãã«ã¼ãã²ã¼ã ã«ããºã«ããããæ§ç¯ãã¿ã¯ã¼ãã£ãã§ã³ã¹è¦ç´ ãèåããæ°æè¦ãã¼ã°ã©ã¤ã¯ã²ã¼ã ï¼<br> 253 4種ã®ãªã¼ãã¼ãæ§ã ãªå¹æãæã¤åç©ã«ã¼ãããã®ä»ããããã®ã¹ãã«ãã¢ã¤ãã ãç¨æããã¦ããã奥深ãã²ã¼ã ãã¬ã¤ã楽ãããä½åã¨ãªã£ã¦ãã¾ãã<br> 254 ç¡æçã§ãå忥½ãããå 容ãªã®ã§ãæ¯éä¸åº¦ãã¬ã¤ãã¦ã¿ã¦ä¸ããã 255 </span>
256 <span data-lang="en"> 257 "Kemotaku" is a new kind of roguelike game that combines card games, puzzles, deck-building, 258 and tower defense elements.<br> 259 It features 4 unique leaders, animal cards with various effects, and many skills and items 260 for a deep gameplay experience.<br> 261 The free version offers plenty of content to enjoy, so please give it a try! 262 </span> 263 </p> 264 </div> 265 </div> 266 267 <!-- Demo Download Button --> 268 <div class="demo-btn-container" 269 style="width:100%; display:flex; justify-content:center; margin-bottom:5px; margin-top: 20px;"> 270 <a href="https://pub-927e39dd697d4d3c8c8331ff84d64a1f.r2.dev/Kemotaku%20Demo.zip" class="btn store-btn"> 271 <div class="btn-content"> 272 <span class="btn-label" data-lang="ja">ç¡æçããã¦ã³ãã¼ã</span> 273 <span class="btn-label" data-lang="en">Download Demo</span> 274 <span class="platform-text">PC</span> 275 </div> 276 </a> 277 </div> 278 279 <!-- Store Links (Combined) --> 280 <div class="store-links-container" style="margin-top: 5px;"> 281 <!-- Steam (PC/Mac) --> 282 <a href="https://store.steampowered.com/app/3070040/Kemotaku/" target="_blank" class="btn store-btn"> 283 <div class="btn-content"> 284 <span class="btn-label">Steam</span> 285 <span class="platform-text">PC & Mac</span> 286 </div> 287 </a> 288 289 <!-- App Store (iOS) --> 290 <a href="https://apps.apple.com/jp/app/id6741306039?l=ja" 291 data-href-ja="https://apps.apple.com/jp/app/id6741306039?l=ja" 292 data-href-en="https://apps.apple.com/us/app/id6741306039" target="_blank" class="btn store-btn"> 293 <div class="btn-content"> 294 <span class="btn-label">App Store</span> 295 <span class="platform-text">iOS</span> 296 </div> 297 </a> 298 299 <!-- Google Play (Android) --> 300 <a href="https://play.google.com/store/apps/details?id=com.KojikaGames.KemotakuMobile" target="_blank" 301 class="btn store-btn"> 302 <div class="btn-content"> 303 <span class="btn-label">Google Play</span> 304 <span class="platform-text">Android</span> 305 </div> 306 </a> 307 308 <!-- itch.io (PC) --> 309 <a href="https://kojikagames.itch.io/kemotaku" target="_blank" class="btn store-btn"> 310 <div class="btn-content"> 311 <span class="btn-label">itch.io</span> 312 <span class="platform-text">PC</span> 313 </div> 314 </a> 315 316 <!-- BOOTH (PC) --> 317 <a href="https://kojikagames.booth.pm/items/6428484" target="_blank" class="btn store-btn"> 318 <div class="btn-content"> 319 <span class="btn-label">BOOTH</span> 320 <span class="platform-text">PC</span> 321 </div> 322 </a> 323 </div> 324 325 <!-- Warning Text for Marketplace --> 326 <!-- Warning Text for Marketplace --> 327 <p class="dev-warning" style="font-size: 0.9rem;"> 328 <span data-lang="ja">itch.ioãBOOTHã§è³¼å ¥ããã¨ãSteamã§è²·ãããå°ããè²·ãå¾ã§ãã<br>ãã ãã¯ã©ã¦ãã»ã¼ããèªåæ´æ°ãå®ç¸¾æ©è½ã¯ããã¾ããã</span> 329 <span data-lang="en">Buying on itch.io or BOOTH is slightly cheaper than on Steam.<br>However, Cloud 330 Saves, 331 Auto-Updates, and Achievements are not included.</span> 332 </p> 333 </div> 334 </section> 335 336 <!-- Section 6: SNS / Footer --> 337 <section id="sns"> 338 <div class="container"> 339 <div class="sns-links"> 340 <a href="https://x.com/kojikagames" target="_blank" rel="noopener" class="sns-item"><div class="sns-icon"><img src="assets/SNSã¢ã¤ã³ã³/X.webp" alt="X"></div><span>Twitter</span></a> 341 <a href="https://www.youtube.com/@kojikagamesjp" target="_blank" rel="noopener" class="sns-item"><div class="sns-icon"><img src="assets/SNSã¢ã¤ã³ã³/YouTube.webp" alt="YouTube"></div><span>Youtube</span></a> 342 <a href="https://www.tiktok.com/@kojikagames" target="_blank" rel="noopener" class="sns-item"><div class="sns-icon"><img src="assets/SNSã¢ã¤ã³ã³/TikTok.webp" alt="TikTok"></div><span>TikTok</span></a> 343 <a href="/cdn-cgi/l/email-protection#543f3b3e3d3f353335393127143b2120383b3b3f7a3e24" class="sns-item"><div class="sns-icon"><img src="assets/SNSã¢ã¤ã³ã³/Email.webp" alt="Email"></div><span data-lang="ja">ã¡ã¼ã«</span><span data-lang="en">Contact</span></a> 344 </div> 345 <footer class="site-footer">© 2026 Kojika Games. All Rights Reserved.</footer> 346 </div> 347 </section> 348 349 <!-- Video Modal --> 350 <div id="video-modal" onclick="closeVideoModal()"> 351 <div class="modal-content" onclick="event.stopPropagation()">
352 <span class="close-modal" onclick="closeVideoModal()">×</span> 353 <iframe id="modal-iframe" width="100%" height="100%" src="" frameborder="0" 354 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" 355 allowfullscreen></iframe> 356 </div> 357 </div>
vendor: 116 bytes, lines 357-359
357 358 359 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
359<script> 360 361 362 // Language State 363 let currentLang = 'ja'; 364 365 function updateMetaDescriptions(lang) { 366 const descriptionMeta = document.getElementById('meta-description'); 367 const ogDescriptionMeta = document.getElementById('meta-og-description'); 368 const twitterDescriptionMeta = document.getElementById('meta-twitter-description'); 369 const metas = [descriptionMeta, ogDescriptionMeta, twitterDescriptionMeta]; 370 371 metas.forEach(meta => { 372 if (!meta) return; 373 const nextContent = (lang === 'ja') ? meta.dataset.ja : meta.dataset.en; 374 if (nextContent) { 375 meta.setAttribute('content', nextContent); 376 } 377 }); 378 } 379 380 function updateLocalizedLinks(lang) { 381 document.querySelectorAll('[data-href-ja][data-href-en]').forEach(link => { 382 link.href = (lang === 'ja') ? link.dataset.hrefJa : link.dataset.hrefEn; 383 }); 384 385 document.querySelectorAll('[data-keep-lang]').forEach(link => { 386 const url = new URL(link.getAttribute('href'), window.location.href); 387 url.searchParams.set('lang', lang); 388 link.setAttribute('href', `${url.pathname}${url.search}${url.hash}`); 389 }); 390 } 391 392 function detectInitialLang() { 393 const urlLang = new URLSearchParams(window.location.search).get('lang'); 394 if (urlLang === 'ja' || urlLang === 'en') return urlLang; 395 if (window.__KOJIKA_INITIAL_LANG__ === 'ja' || window.__KOJIKA_INITIAL_LANG__ === 'en') { 396 return window.__KOJIKA_INITIAL_LANG__; 397 } 398 try { 399 const saved = window.localStorage.getItem('kojika-site-lang'); 400 if (saved === 'ja' || saved === 'en') return saved; 401 } catch (_) {} 402 return (navigator.language || '').toLowerCase().startsWith('ja') ? 'ja' : 'en'; 403 } 404 405 // Language Switcher Logic 406 function setLang(lang, options = {}) { 407 if (lang !== 'ja' && lang !== 'en') return; 408 currentLang = lang; 409 410 // Remove active class from all buttons 411 document.querySelectorAll('.lang-btn').forEach(btn => { 412 btn.classList.remove('active'); 413 btn.setAttribute('aria-pressed', 'false'); 414 }); 415 416 document.documentElement.classList.remove('lang-ja', 'lang-en'); 417 document.documentElement.classList.add('lang-' + lang); 418 document.body.classList.remove('lang-ja', 'lang-en'); 419 document.body.classList.add('lang-' + lang); 420 document.documentElement.lang = lang; 421 updateMetaDescriptions(lang); 422 updateLocalizedLinks(lang); 423 424 if (!options.skipPersist) { 425 try { window.localStorage.setItem('kojika-site-lang', lang); } catch (_) {} 426 } 427 428 if (!options.skipUrl) { 429 const currentUrl = new URL(window.location.href); 430 currentUrl.searchParams.set('lang', lang); 431 window.history.replaceState(null, '', `${currentUrl.pathname}${currentUrl.search}${currentUrl.hash}`); 432 } 433 434 // Update Buttons State 435 const buttons = document.querySelectorAll('.lang-btn'); 436 if (lang === 'ja') { 437 buttons[0].classList.add('active'); 438 buttons[0].setAttribute('aria-pressed', 'true'); 439 } else { 440 buttons[1].classList.add('active'); 441 buttons[1].setAttribute('aria-pressed', 'true'); 442 } 443 444 } 445 446 document.addEventListener('DOMContentLoaded', () => { 447 setLang(detectInitialLang()); 448 }); 449 450 window.addEventListener('pageshow', () => { 451 setLang(detectInitialLang(), { skipUrl: true }); 452 }); 453 454 window.addEventListener('storage', (event) => { 455 if (event.key === 'kojika-site-lang' && (event.newValue === 'ja' || event.newValue === 'en')) { 456 setLang(event.newValue); 457 } 458 }); 459 460 // Video Modal Logic 461 function openVideoModal(element) { 462 const videoIdJa = element.getAttribute('data-video-ja'); 463 const videoIdEn = element.getAttribute('data-video-en'); 464 465 if (!videoIdJa && !videoIdEn) return; // No video 466 467 const targetId = (currentLang === 'ja') ? videoIdJa : videoIdEn; 468 469 // Fallback if one is missing 470 const finalId = targetId || videoIdJa || videoIdEn; 471 472 const modal = document.getElementById('video-modal'); 473 const iframe = document.getElementById('modal-iframe'); 474 475 iframe.src = `https://www.youtube-nocookie.com/embed/${finalId}?autoplay=1`; 476 modal.style.display = 'flex'; 477 478 // Small delay for fade in 479 setTimeout(() => { 480 modal.classList.add('show'); 481 }, 10); 482 } 483 484 function closeVideoModal() { 485 const modal = document.getElementById('video-modal'); 486 const iframe = document.getElementById('modal-iframe'); 487 488 modal.classList.remove('show'); 489 setTimeout(() => { 490 modal.style.display = 'none'; 491 iframe.src = ''; // Stop video 492 }, 300); 493 } 494 </script>
494 495
496<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"443a6a02a620429ba7df85a8ab82692a","r":1,"spa":2}' crossorigin="anonymous"></script>
496 497</body> 498 499</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.