The Prince of Tennis Takes Over Anan Magazine

Somen Halder Jul 07, 2026 116
The Prince of Tennis Takes Over Anan Magazine

The Prince of Tennis Takes Over Anan Magazine

The Prince of Tennis appears on the back cover of the magazine Anan. An exclusive special gravure of Anan will be published on July 30, 2026, for the romance adventure games School Festival Prince and Doki Doki Survival.

The manga The Prince of Tennis began serialization in Weekly Shonen Jump in 1999. It has captivated many readers by depicting the growth and passionate battles of the main character Ryoma Echizen and his friends who belong to Seishun Gakuen's middle school tennis club. After that, the sequel New Prince of Tennis began serialization in Jump SQ. in 2009. The series, which has been loved for 27 years, will conclude with the September issue of the serial magazine Jump SQ. released on August 4th.

The TV Anime Adaptation

The TV anime adaptation began broadcasting on the TV Tokyo network in October 2001. Since then, New Prince of Tennis has been made into a TV anime since 2012, and the story has expanded from the Kanto tournament to the national tournament, and then the world tournament, and the New Prince of Tennis U-17 WORLD CUP final member determination match is scheduled to be broadcast in the fall of 2026. In addition, various projects are planned to be developed as the 25th anniversary year until the end of December 2027.

Additionally, the 20th anniversary remastered version of the romance adventure games School Festival Prince and Doki Doki Survival will be released on July 30th.
To commemorate this, it has been decided that the magazine anan will feature a back cover and an exclusive special gravure photo.

The official magazine anan updated X on July 7th. '[Anan issue 2504 (released on 7/15) back cover released] Ryoma Echizen, Kunimitsu Tezuka, Shusuke Fuji, and Ryoga Echizen from KONAMI's Prince of Tennis romance adventure game Gakupuri Dokisaba are all stepping on it! Anan exclusive special gravure that captures a summer scene of the princes! In their casual clothes that can only be seen here In the back page, we will provide a detailed report on the game that will be released on July 30th. Please look forward to it!' and released the back cover image.

The back cover depicts the characters appearing in this game, Ryoma Echizen, Kunimitsu Tezuka, Shusuke Fuji, and Ryoga Echizen in their casual clothes.

Fans were delighted with the unexpected release of the back cover image. Comments such as 'It's too good', 'The Prince of Tennis!? Amazing!', '!!????', 'Anan's Tennis debut?! Should I buy it as a commemorative gift?', 'The Prince of Tennis for Anan...!?!?!! (joy)', 'Ah!!!!!!!!!!!!', 'Oh no, it's so cool!', 'Illusion...?', 'I'm excited, I'll buy it, please let me buy a lot.'

Anan No. 2504, whose back cover features characters from The Prince of Tennis, will be released on July 15, 2026.

(C) Magazine house


<br></p><img src='https://myanimethoughts.com/assets/images/blogs/myanimethoughts-97317.webp' class='inline-article-image' width='640' height='360'><p>The Prince of Tennis Motto The Prince of the School Festival -40 and more... (Gakupuri)<br>Prince of Tennis Gyu~tto! Dokidoki Survival Tie break game (Dokisaba)<br><Manufacturer> KONAMI<br><Release date> Both Gakupuri and Dokisaba: July 30, 2026<br><Genre> Love adventure<br><Number of players> 1 person<br><CERO Rating> B (for ages 12 and older)<br><Compatible models><br>■Nintendo Switch(TM)<br>■Nintendo Switch(TM) 2<br>■Steam(R)</p><p><Manufacturer's suggested retail price><br>'The Prince of Tennis Motto: The Prince of the School Festival -40 and more...' (Regular Edition): 7,700 yen (tax included)<br>'The Prince of Tennis Motto: The Prince of the School Festival -40 and more...' (Special Edition from the Joint School Festival Management Committee Chairman): 15,400 yen (tax included)<br>'The Prince of Tennis Gyu~tto! Doki Doki Survival Tie break game' (regular version): 7,700 yen (tax included)<br>'The Prince of Tennis Gyu~tto! Doki Doki Survival Tie Break Game' (Desert Island Enjoyment Edition): 15,400 yen (tax included)<br>*Both titles are available exclusively for download on Nintendo Switch (TM) 2 and Steam (R). <Supported languages> Japanese, English, Chinese (traditional and simplified characters)</p></div><p>(C) Tsuyoshi Konami/Shueisha/NAS/The Prince of Tennis Project (C) Tsuyoshi Konami/Shueisha/NAS/New Prince of Tennis Project (C) Konami Digital Entertainment</p><p>Nintendo Switch is a trademark of Nintendo.</p> </div> <div style="min-height:250px;text-align:center;overflow:hidden;"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4862075181072166" crossorigin="anonymous"></script> <!-- Vertical Ads (Next JS) --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-4862075181072166" data-ad-slot="8363657474" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></div> <style> /* --- DARK THEME FAQ STYLES --- */ .faq-section { border-top: 1px solid #222; padding-top: 40px; margin-top: 40px; } .faq-dark .accordion-item { border: none; border-bottom: 1px solid #222; /* Dark Divider */ background: transparent; } /* Button Styling */ .faq-dark .accordion-button { background: transparent; box-shadow: none; /* Removes Bootstrap blue glow */ padding: 20px 0; font-weight: 700; color: #fff; /* White Text */ font-size: 1.1rem; transition: color 0.3s ease; } /* Hover & Active States */ .faq-dark .accordion-button:hover, .faq-dark .accordion-button:not(.collapsed) { color: #f2f2f2; /* Theme Yellow */ background-color: transparent !important; } /* Remove default arrow */ .faq-dark .accordion-button::after { display: none; } /* Custom Icon Styling */ .faq-dark .icon-toggle { margin-left: auto; width: 24px; height: 24px; position: relative; display: flex; align-items: center; justify-content: center; } /* The Lines */ .faq-dark .icon-toggle::before, .faq-dark .icon-toggle::after { content: ''; position: absolute; background-color: #666; /* Default Gray Icon */ transition: all 0.3s ease; } /* Horizontal Line */ .faq-dark .icon-toggle::before { width: 14px; height: 2px; } /* Vertical Line */ .faq-dark .icon-toggle::after { width: 2px; height: 14px; } /* Active State Icon Animations */ .faq-dark .accordion-button:not(.collapsed) .icon-toggle::before { background-color: #f2f2f2; /* Yellow */ transform: rotate(180deg); } .faq-dark .accordion-button:not(.collapsed) .icon-toggle::after { background-color: #f2f2f2; /* Yellow */ transform: rotate(90deg); opacity: 0; /* Makes it a minus sign */ } /* Body Styling */ .faq-dark .accordion-body { padding: 0 0 25px 0; color: #ccc; /* Light Gray text */ line-height: 1.7; font-size: 1rem; } /* Links inside answers */ .faq-dark .accordion-body a { color: #f2f2f2; text-decoration: underline; } </style> <div class="faq-section"> <h3 class="fw-bold text-uppercase text-white mb-4"> <span class=" me-2" style="color:#777;">//</span> FAQs </h3> <div class="accordion faq-dark" id="faqCompact"> <div class="accordion-item"> <h3 class="accordion-header" id="heading_faq_0"> <button class="accordion-button " type="button" data-bs-toggle="collapse" data-bs-target="#collapse_faq_0" aria-expanded="true"> What is the release date of the romance adventure games 'School Festival Prince' and 'Doki Doki Survival'? <div class="icon-toggle"></div> </button> </h3> <div id="collapse_faq_0" class="accordion-collapse collapse show" aria-labelledby="heading_faq_0" data-bs-parent="#faqCompact"> <div class="accordion-body"> The release date of the romance adventure games 'School Festival Prince' and 'Doki Doki Survival' is July 30, 2026. </div> </div> </div> <div class="accordion-item"> <h3 class="accordion-header" id="heading_faq_1"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse_faq_1" aria-expanded="false"> What is the price of the regular edition of 'The Prince of Tennis Motto: The Prince of the School Festival -40 and more...'? <div class="icon-toggle"></div> </button> </h3> <div id="collapse_faq_1" class="accordion-collapse collapse " aria-labelledby="heading_faq_1" data-bs-parent="#faqCompact"> <div class="accordion-body"> The price of the regular edition of 'The Prince of Tennis Motto: The Prince of the School Festival -40 and more...' is 7,700 yen (tax included). </div> </div> </div> <div class="accordion-item"> <h3 class="accordion-header" id="heading_faq_2"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse_faq_2" aria-expanded="false"> What platforms are the games 'The Prince of Tennis Motto: The Prince of the School Festival -40 and more...' and 'The Prince of Tennis Gyu~tto! Doki Doki Survival Tie break game' available on? <div class="icon-toggle"></div> </button> </h3> <div id="collapse_faq_2" class="accordion-collapse collapse " aria-labelledby="heading_faq_2" data-bs-parent="#faqCompact"> <div class="accordion-body"> The games 'The Prince of Tennis Motto: The Prince of the School Festival -40 and more...' and 'The Prince of Tennis Gyu~tto! Doki Doki Survival Tie break game' are available on Nintendo Switch and Steam. </div> </div> </div> </div> </div> <div class="border-top border-bottom border-secondary border-opacity-25 py-4 my-5"> <div class="row align-items-center g-3"> <div class="col-md-8"> <div class="d-flex flex-wrap align-items-center"> <span class="text-secondary me-3 fw-bold"><i class="bi bi-tags-fill"></i> Tags:</span> <span class="tag-pill">The Prince of Tennis</span> <span class="tag-pill">Anan Magazine</span> <span class="tag-pill">Ryoma Echizen</span> <span class="tag-pill">Kunimitsu Tezuka</span> <span class="tag-pill">Shusuke Fuji</span> <span class="tag-pill">Ryoga Echizen</span> </div> </div> <div class="col-md-4"> <div class="d-flex justify-content-md-end gap-2"> <a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fmyanimethoughts.com%2Fthe-prince-of-tennis-takes-over-anan-magazine-6463363" target="_blank" class="share-btn"><i class="bi bi-facebook"></i></a> <a href="https://twitter.com/intent/tweet?text=The+Prince+of+Tennis+Takes+Over+Anan+Magazine&url=https%3A%2F%2Fmyanimethoughts.com%2Fthe-prince-of-tennis-takes-over-anan-magazine-6463363" target="_blank" class="share-btn"><i class="bi bi-twitter-x"></i></a> <a href="https://wa.me/?text=The+Prince+of+Tennis+Takes+Over+Anan+Magazine+https%3A%2F%2Fmyanimethoughts.com%2Fthe-prince-of-tennis-takes-over-anan-magazine-6463363" target="_blank" class="share-btn"><i class="bi bi-whatsapp"></i></a> </div> </div> </div> </div> <div class="row g-3 mt-4 mb-5"> <div class="col-md-6"> <a href="https://myanimethoughts.com/tanabata-celebrations-in-anime-world-3000481" class="nav-card"> <span class="nav-label"><i class="bi bi-arrow-left"></i> Previous Article</span> <span class="nav-title text-truncate">Tanabata Celebrations in Anime World</span> </a> </div> <div class="col-md-6"> <a href="https://myanimethoughts.com/chiikawa-lands-in-taipei-with-large-scale-exhibition-6900911" class="nav-card text-md-end"> <span class="nav-label">Next Article <i class="bi bi-arrow-right"></i></span> <span class="nav-title text-truncate">Chiikawa Lands in Taipei with Large-Scale Exhibition</span> </a> </div> </div> <style> .rp-grid { display:grid; grid-template-columns:repeat(2,1fr); gap:14px; } @media (min-width:576px) { .rp-grid { grid-template-columns:repeat(3,1fr); } } .rp-card { background:#111; border:1px solid #222; border-radius:10px; overflow:hidden; transition:0.2s; text-decoration:none; display:block; } .rp-card:hover { border-color:#f2f2f2; transform:translateY(-3px); } .rp-thumb { width:100%; aspect-ratio:16/10; overflow:hidden; background:#161616; } .rp-thumb img { width:100%; height:100%; object-fit:cover; transition:transform 0.4s; display:block; } .rp-card:hover .rp-thumb img { transform:scale(1.07); } .rp-body { padding:10px 12px 12px; } .rp-title { color:#e0e0e0; font-size:0.86rem; font-weight:700; line-height:1.35; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; } </style> <section style="background:#000; padding:10px 0 40px;"> <h2 class="fw-bold text-uppercase text-white h5 mb-3" style="letter-spacing:-0.5px;"> <i class="bi bi-collection-play-fill me-2" style="color:#f2f2f2;"></i>You Might Also Like </h2> <div class="rp-grid"> <a href="https://myanimethoughts.com/one-piece-yuichi-nakamura-loki-elbaf-edition-aina-the-end" class="rp-card"> <div class="rp-thumb"><img src="https://myanimethoughts.com/assets/images/blogs/img_69c7b4cf454972.02830170.webp" alt="Yuichi Nakamura as Loki in "ONE PIECE": Elbaf Edition OP by Aina The End" loading="lazy"></div> <div class="rp-body"> <div class="rp-title">Yuichi Nakamura as Loki in "ONE PIECE": Elbaf Edition OP by Aina The End</div> </div> </a> <a href="https://myanimethoughts.com/eating-in-a-game-of-death-candlewoods-visual-depicting-a-ghost-with-an-injured-right-eye-released" class="rp-card"> <div class="rp-thumb"><img src="https://myanimethoughts.com/assets/images/blogs/img_69b41d6e6ad611.85010117.webp" alt=""Ghost with injured eye revealed in Candlewoods"" loading="lazy"></div> <div class="rp-body"> <div class="rp-title">"Ghost with injured eye revealed in Candlewoods"</div> </div> </a> <a href="https://myanimethoughts.com/all-volumes-of-the-manga-version-of-the-cat-and-the-dragon-which-is-about-to-air-on-tv-will-be-released-for-free-today-june-28th-only" class="rp-card"> <div class="rp-thumb"><img src="https://myanimethoughts.com/assets/images/blogs/img_6a3fe8241d11b9.85435199.webp" alt="The Cat and Dragon Free Release" loading="lazy"></div> <div class="rp-body"> <div class="rp-title">The Cat and Dragon Free Release</div> </div> </a> <a href="https://myanimethoughts.com/exciting-update-roshidere-season-2-postponed-until-2027" class="rp-card"> <div class="rp-thumb"><img src="https://myanimethoughts.com/assets/images/blogs/1770911152_9301.webp" alt="Exciting Update: Roshidere Season 2 Postponed until 2027" loading="lazy"></div> <div class="rp-body"> <div class="rp-title">Exciting Update: Roshidere Season 2 Postponed until 2027</div> </div> </a> <a href="https://myanimethoughts.com/scene-cut-from-episode-1-of-the-anime-the-cat-and-the-dragon-released-a-mother-cat-who-has-just-given-birth-picks-up-a-small-dragon" class="rp-card"> <div class="rp-thumb"><img src="https://myanimethoughts.com/assets/images/blogs/img_6a3cee761b92d3.86646323.webp" alt="Cat and Dragon Anime Releases Episode 1 Scene Cuts" loading="lazy"></div> <div class="rp-body"> <div class="rp-title">Cat and Dragon Anime Releases Episode 1 Scene Cuts</div> </div> </a> <a href="https://myanimethoughts.com/hiromasa-okushimas-cohabitation-log-comedy-shinobu-kaitanis-liar-games-last-game-has-started" class="rp-card"> <div class="rp-thumb"><img src="https://myanimethoughts.com/assets/images/blogs/img_699e636a862829.81931663.webp" alt="Okushima's "Cohabitation Log Comedy" & Kaitani's "LIAR GAME" Begin" loading="lazy"></div> <div class="rp-body"> <div class="rp-title">Okushima's "Cohabitation Log Comedy" & Kaitani's "LIAR GAME" Begin</div> </div> </a> </div> </section> <div class="mat-comments-section" id="matComments" data-slug="the-prince-of-tennis-takes-over-anan-magazine-6463363"> <h3 class="fw-bold text-uppercase text-white mb-4"> <span class="me-2" style="color:#777;">//</span> Comments <span id="matCommentCount" class="text-secondary" style="font-weight:400;"></span> </h3> <div id="matCommentAuthArea" class="mat-comment-auth"></div> <div id="matCommentList" class="mat-comment-list"><div class="text-secondary small">Loading comments...</div></div> </div> <style> .mat-comments-section { border-top: 1px solid #222; padding-top: 40px; margin-top: 40px; } .mat-comment-auth { margin-bottom: 24px; } .mat-comment-signin { display: inline-flex; align-items: center; gap: 8px; background: #1a1a1a; border: 1px solid #333; color: #ccc; padding: 10px 18px; border-radius: 8px; text-decoration: none; font-size: 0.9rem; transition: 0.2s; } .mat-comment-signin:hover { border-color: #f2f2f2; color: #fff; } .mat-comment-form textarea { width: 100%; background: #111; border: 1px solid #333; color: #eee; border-radius: 8px; padding: 12px 14px; font-size: 0.95rem; resize: vertical; min-height: 90px; } .mat-comment-form textarea:focus { outline: none; border-color: #f2f2f2; } .mat-comment-form-foot { display: flex; justify-content: space-between; align-items: center; margin-top: 8px; } .mat-comment-count-hint { color: #555; font-size: 0.78rem; } .mat-comment-submit { background: #f2f2f2; color: #000; font-weight: 700; font-size: 0.85rem; padding: 9px 22px; border-radius: 50px; border: none; transition: 0.2s; } .mat-comment-submit:hover { background: #fff; } .mat-comment-submit:disabled { opacity: 0.5; cursor: default; } .mat-comment-item { display: flex; gap: 14px; padding: 18px 0; border-bottom: 1px solid #1a1a1a; } .mat-comment-item:last-child { border-bottom: none; } .mat-comment-avatar { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; flex-shrink: 0; background: #222; } .mat-comment-body { flex-grow: 1; min-width: 0; } .mat-comment-name { color: #fff; font-weight: 700; font-size: 0.9rem; margin-right: 8px; } .mat-comment-date { color: #555; font-size: 0.75rem; } .mat-comment-text { color: #ccc; font-size: 0.92rem; line-height: 1.6; margin-top: 4px; white-space: pre-wrap; word-break: break-word; } .mat-comment-error { color: #ff6b6b; font-size: 0.82rem; margin-top: 6px; } .mat-comment-info { color: #999; font-size: 0.82rem; margin-top: 6px; } .mat-comment-actions { display: flex; align-items: center; gap: 16px; margin-top: 8px; } .mat-comment-like-btn, .mat-comment-reply-btn, .mat-comment-report-btn { display: inline-flex; align-items: center; gap: 5px; background: none; border: none; color: #777; font-size: 0.8rem; font-weight: 600; cursor: pointer; padding: 2px 0; transition: 0.15s; } .mat-comment-like-btn:hover, .mat-comment-reply-btn:hover { color: #eee; } .mat-comment-report-btn:hover { color: #ff6b6b; } .mat-comment-like-btn.liked { color: #f2495c; } .mat-comment-like-btn.liked i { font-weight: 900; } .mat-comment-report-btn.reported { color: #ff6b6b; pointer-events: none; } .mat-comment-staff { background: rgba(6,182,212,0.05); border-radius: 8px; padding-left: 10px; margin-left: -10px; } .mat-staff-badge { display: inline-flex; align-items: center; gap: 3px; background: rgba(6,182,212,0.15); color: #06b6d4; font-size: 0.66rem; font-weight: 800; text-transform: uppercase; padding: 2px 7px; border-radius: 20px; margin-right: 8px; vertical-align: middle; } .mat-comment-replies { margin-top: 14px; padding-left: 16px; border-left: 2px solid #1e1e1e; } .mat-comment-replies .mat-comment-item { padding: 14px 0; } .mat-comment-replies .mat-comment-avatar { width: 32px; height: 32px; } .mat-reply-form { margin-top: 10px; } .mat-reply-form textarea { width: 100%; background: #111; border: 1px solid #333; color: #eee; border-radius: 8px; padding: 10px 12px; font-size: 0.88rem; resize: vertical; min-height: 60px; } .mat-reply-form textarea:focus { outline: none; border-color: #f2f2f2; } .mat-reply-form-foot { display: flex; justify-content: flex-end; gap: 8px; margin-top: 6px; } .mat-reply-cancel, .mat-reply-submit { font-size: 0.78rem; font-weight: 700; border-radius: 50px; padding: 6px 16px; border: none; cursor: pointer; } .mat-reply-cancel { background: transparent; color: #888; } .mat-reply-cancel:hover { color: #ccc; } .mat-reply-submit { background: #f2f2f2; color: #000; } .mat-reply-submit:hover { background: #fff; } </style> <script> document.addEventListener('DOMContentLoaded', function () { const root = document.getElementById('matComments'); if (!root) return; const slug = root.dataset.slug; const listEl = document.getElementById('matCommentList'); const authEl = document.getElementById('matCommentAuthArea'); const countEl = document.getElementById('matCommentCount'); let csrfToken = null; let isLoggedIn = false; function escapeHtml(str) { const d = document.createElement('div'); d.innerText = str; return d.innerHTML; } function fmtDate(raw) { return new Date(raw.replace(' ', 'T')).toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }); } function signInPrompt() { window.location.href = '/login.php?redirect=' + encodeURIComponent(window.location.href); } // No-op if GA4 isn't installed on a given page — this must never break the widget. function gaEvent(name, params) { if (typeof gtag === 'function') gtag('event', name, params || {}); } function commentRowHtml(c, isReply) { const avatar = c.avatar_url ? escapeHtml(c.avatar_url) : 'https://placehold.co/80x80/222/333?text=U'; const likedClass = c.liked_by_me ? 'liked' : ''; const heartIcon = c.liked_by_me ? 'bi-heart-fill' : 'bi-heart'; const staffBadge = c.is_staff ? ' <span class="mat-staff-badge"><i class="bi bi-patch-check-fill"></i> ' + escapeHtml(c.staff_badge || 'Staff') + '</span>' : ''; return '<div class="mat-comment-item' + (c.is_staff ? ' mat-comment-staff' : '') + '" data-id="' + c.id + '">' + '<img class="mat-comment-avatar" src="' + avatar + '" alt="">' + '<div class="mat-comment-body">' + '<span class="mat-comment-name">' + escapeHtml(c.name) + '</span>' + staffBadge + '<span class="mat-comment-date">' + fmtDate(c.created_at) + '</span>' + '<div class="mat-comment-text">' + escapeHtml(c.comment_text) + '</div>' + '<div class="mat-comment-actions">' + '<button class="mat-comment-like-btn ' + likedClass + '" data-id="' + c.id + '"><i class="bi ' + heartIcon + '"></i> <span class="mat-like-count">' + (c.likes_count || 0) + '</span></button>' + (isReply ? '' : '<button class="mat-comment-reply-btn" data-id="' + c.id + '"><i class="bi bi-reply"></i> Reply</button>') + '<button class="mat-comment-report-btn" data-id="' + c.id + '" title="Report this comment"><i class="bi bi-flag"></i></button>' + '</div>' + (isReply ? '' : '<div class="mat-reply-slot" data-id="' + c.id + '"></div>') + (isReply ? '' : '<div class="mat-comment-replies" data-parent="' + c.id + '"></div>') + '</div></div>'; } function renderComments(all, topCount) { const top = all.filter(function (c) { return !c.parent_id; }); if (!top.length) { listEl.innerHTML = '<div class="text-secondary small">No comments yet — be the first to share your thoughts.</div>'; return; } top.sort(function (a, b) { return new Date(b.created_at) - new Date(a.created_at); }); listEl.innerHTML = top.map(function (c) { return commentRowHtml(c, false); }).join(''); top.forEach(function (c) { const repliesWrap = listEl.querySelector('.mat-comment-replies[data-parent="' + c.id + '"]'); const replies = all.filter(function (r) { return r.parent_id == c.id; }); if (repliesWrap && replies.length) { repliesWrap.innerHTML = replies.map(function (r) { return commentRowHtml(r, true); }).join(''); } }); listEl.querySelectorAll('.mat-comment-like-btn').forEach(function (btn) { btn.addEventListener('click', function () { handleLike(btn); }); }); listEl.querySelectorAll('.mat-comment-reply-btn').forEach(function (btn) { btn.addEventListener('click', function () { toggleReplyForm(btn.dataset.id); }); }); listEl.querySelectorAll('.mat-comment-report-btn').forEach(function (btn) { btn.addEventListener('click', function () { handleReport(btn); }); }); } function handleReport(btn) { if (!isLoggedIn) { signInPrompt(); return; } if (!window.confirm('Report this comment for review?')) return; const id = btn.dataset.id; fetch('/comments/api.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ action: 'report', comment_id: id, csrf_token: csrfToken }) }) .then(function (r) { return r.json(); }) .then(function (data) { if (data.status === 'success') { btn.classList.add('reported'); btn.innerHTML = '<i class="bi bi-flag-fill"></i> Reported'; gaEvent('comment_report', { comment_id: id }); } }); } function handleLike(btn) { if (!isLoggedIn) { signInPrompt(); return; } const id = btn.dataset.id; fetch('/comments/api.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ action: 'like', comment_id: id, csrf_token: csrfToken }) }) .then(function (r) { return r.json(); }) .then(function (data) { if (data.status !== 'success') return; btn.classList.toggle('liked', data.liked); btn.querySelector('i').className = 'bi ' + (data.liked ? 'bi-heart-fill' : 'bi-heart'); btn.querySelector('.mat-like-count').textContent = data.likes_count; gaEvent(data.liked ? 'comment_like' : 'comment_unlike', { comment_id: id }); }); } function toggleReplyForm(parentId) { if (!isLoggedIn) { signInPrompt(); return; } const slot = listEl.querySelector('.mat-reply-slot[data-id="' + parentId + '"]'); if (!slot) return; if (slot.innerHTML.trim()) { slot.innerHTML = ''; return; } slot.innerHTML = '<div class="mat-reply-form">' + '<textarea maxlength="1000" placeholder="Write a reply..."></textarea>' + '<div class="mat-reply-form-foot">' + '<button class="mat-reply-cancel">Cancel</button>' + '<button class="mat-reply-submit">Reply</button>' + '</div><div class="mat-comment-error"></div></div>'; const textarea = slot.querySelector('textarea'); const errEl = slot.querySelector('.mat-comment-error'); textarea.focus(); slot.querySelector('.mat-reply-cancel').addEventListener('click', function () { slot.innerHTML = ''; }); slot.querySelector('.mat-reply-submit').addEventListener('click', function () { const text = textarea.value.trim(); if (!text) { errEl.textContent = 'Reply cannot be empty.'; return; } const submitBtn = slot.querySelector('.mat-reply-submit'); submitBtn.disabled = true; fetch('/comments/api.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ action: 'post', slug: slug, comment_text: text, parent_id: parentId, csrf_token: csrfToken }) }) .then(function (r) { return r.json(); }) .then(function (data) { submitBtn.disabled = false; if (data.status === 'success') { gaEvent('comment_reply', { post_slug: slug }); if (data.held) { errEl.className = 'mat-comment-info'; errEl.textContent = 'Reply submitted — it\'s awaiting review and will appear once approved.'; textarea.value = ''; } else { slot.innerHTML = ''; loadComments(); } } else { errEl.className = 'mat-comment-error'; errEl.textContent = data.message || 'Something went wrong.'; } }) .catch(function () { submitBtn.disabled = false; errEl.className = 'mat-comment-error'; errEl.textContent = 'Network error — please try again.'; }); }); } function loadComments() { fetch('/comments/api.php?action=list&slug=' + encodeURIComponent(slug)) .then(function (r) { return r.json(); }) .then(function (data) { if (data.status === 'success') { countEl.textContent = '(' + data.count + ')'; renderComments(data.comments, data.count); } }) .catch(function () { listEl.innerHTML = '<div class="text-secondary small">Couldn\'t load comments right now.</div>'; }); } function renderAuth(state) { if (!state.logged_in) { const redirectTo = encodeURIComponent(window.location.href); authEl.innerHTML = '<a class="mat-comment-signin" href="/login.php?redirect=' + redirectTo + '">' + '<i class="bi bi-google"></i> Sign in with Google to comment</a>'; return; } authEl.innerHTML = '<div class="mat-comment-form">' + '<textarea id="matCommentInput" maxlength="1000" placeholder="Share your thoughts..."></textarea>' + '<div class="mat-comment-form-foot">' + '<span class="mat-comment-count-hint" id="matCommentHint">0 / 1000</span>' + '<button class="mat-comment-submit" id="matCommentSubmit">Post Comment</button>' + '</div><div class="mat-comment-error" id="matCommentError"></div></div>'; const input = document.getElementById('matCommentInput'); const hint = document.getElementById('matCommentHint'); const btn = document.getElementById('matCommentSubmit'); const errEl = document.getElementById('matCommentError'); input.addEventListener('input', function () { hint.textContent = input.value.length + ' / 1000'; }); btn.addEventListener('click', function () { const text = input.value.trim(); errEl.textContent = ''; if (!text) { errEl.textContent = 'Comment cannot be empty.'; return; } btn.disabled = true; fetch('/comments/api.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ action: 'post', slug: slug, comment_text: text, csrf_token: csrfToken }) }) .then(function (r) { return r.json(); }) .then(function (data) { btn.disabled = false; if (data.status === 'success') { gaEvent('comment_post', { post_slug: slug }); input.value = ''; hint.textContent = '0 / 1000'; if (data.held) { errEl.className = 'mat-comment-info'; errEl.textContent = 'Comment submitted — it\'s awaiting review and will appear once approved.'; } else { errEl.className = 'mat-comment-error'; loadComments(); } } else { errEl.className = 'mat-comment-error'; errEl.textContent = data.message || 'Something went wrong.'; } }) .catch(function () { btn.disabled = false; errEl.className = 'mat-comment-error'; errEl.textContent = 'Network error — please try again.'; }); }); } fetch('/comments/api.php?action=csrf') .then(function (r) { return r.json(); }) .then(function (state) { csrfToken = state.csrf_token; isLoggedIn = !!state.logged_in; renderAuth(state); }) .catch(function () { authEl.innerHTML = '<div class="text-secondary small">Couldn\'t load the comment form.</div>'; }); loadComments(); }); </script> </article> </div> <style> /* --- SIDEBAR CSS --- */ /* Sticky Wrapper */ .mat-sidebar-sticky { border-radius: 12px; position: -webkit-sticky !important; position: sticky !important; top: 30px !important; z-index: 99 !important; max-height: calc(100vh - 120px); overflow-y: auto; padding-bottom: 20px; scrollbar-width: none; /* Hide scrollbar Firefox */ } .mat-sidebar-sticky::-webkit-scrollbar { display: none; /* Hide scrollbar Chrome */ } /* Widget Box */ .sidebar-widget { background-color: #111; border: 1px solid #222; border-radius: 12px; padding: 25px; margin-bottom: 30px; } /* Title */ .widget-title { color: #fff; font-size: 0.95rem; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 20px; border-left: 3px solid #f2f2f2; padding-left: 12px; line-height: 1; } /* --- POST LIST ITEM (The Fix) --- */ .side-post-item { display: flex; /* Forces side-by-side */ align-items: center; /* Vertically center */ margin-bottom: 15px; padding-bottom: 15px; border-bottom: 1px solid #222; text-decoration: none; /* Remove default underline */ transition: transform 0.2s; } .side-post-item:last-child { margin-bottom: 0; padding-bottom: 0; border-bottom: none; } .side-post-item:hover { transform: translateX(5px); } /* Thumbnail */ .side-thumb { width: 80px; /* Fixed Width */ height: 60px; /* Fixed Height */ border-radius: 6px; object-fit: cover; /* Prevents stretching */ background-color: #333; flex-shrink: 0; /* Prevents shrinking */ margin-right: 15px; /* Space between img and text */ } /* Content */ .side-content { flex-grow: 1; min-width: 0; /* Fixes text truncation issues in flex */ } .side-date { font-size: 0.7rem; color: #777; text-transform: uppercase; margin-bottom: 4px; display: block; font-weight: 600; } .side-title { font-size: 0.9rem; line-height: 1.3; font-weight: 700; color: #e0e0e0; margin: 0; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; transition: color 0.2s; } .side-post-item:hover .side-title { color: #f2f2f2; } /* Categories & Tags */ .cat-list-item { display: flex; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid #222; color: #aaa; text-decoration: none; font-size: 0.9rem; transition: 0.2s; } .cat-list-item:hover { color: #f2f2f2; padding-left: 5px; } .cat-count { background: #222; color: #fff; font-size: 0.7rem; padding: 2px 8px; border-radius: 10px; font-weight: bold; } .cat-list-item:hover .cat-count { background: #f2f2f2; color: #000; } .tag-cloud { display: flex; flex-wrap: wrap; gap: 8px; } .tag-pill { background: #1a1a1a; color: #ccc; padding: 6px 12px; border-radius: 50px; font-size: 0.8rem; text-decoration: none; border: 1px solid #333; transition: 0.2s; } .tag-pill:hover { background: #f2f2f2; color: #000; border-color: #f2f2f2; font-weight: 700; } </style> <div class="col-lg-4 col-12"> <div class="mat-sidebar-sticky"> <div class="sidebar-widget"> <h5 class="widget-title">Recent Updates</h5> <a href="https://myanimethoughts.com/japans-top-horror-anime-revealed-6377855" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/img_6a68cb0bb128a2.35329972.webp" class="side-thumb" alt="Japan's Top Horror Anime Revealed" loading="lazy"> <div class="side-content"> <span class="side-date">Jul 28, 2026</span> <h6 class="side-title">Japan's Top Horror Anime Revealed</h6> </div> </a> <a href="https://myanimethoughts.com/spoilers-the-monkey-the-parrot-and-davy-jones-loop-theory-of-one-pieces-void" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/1785142449_7119.webp" class="side-thumb" alt="Spoilers : The Monkey, the Parrot, and Davy Jones Loop Theory of One Piece’s Void" loading="lazy"> <div class="side-content"> <span class="side-date">Jul 28, 2026</span> <h6 class="side-title">Spoilers : The Monkey, the Parrot, and Davy Jones Loop Theory of One Piece’s Void</h6> </div> </a> <a href="https://myanimethoughts.com/janemba-returns-to-dragon-ball-z-5995425" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/img_6a682bab2b3ce6.67807382.webp" class="side-thumb" alt="Janemba Returns to Dragon Ball Z" loading="lazy"> <div class="side-content"> <span class="side-date">Jul 28, 2026</span> <h6 class="side-title">Janemba Returns to Dragon Ball Z</h6> </div> </a> <a href="https://myanimethoughts.com/jujutsu-kaisen-stage-play-returns-in-november-7685155" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/img_6a67ff23a44ce8.15510640.webp" class="side-thumb" alt="Jujutsu Kaisen Stage Play Returns in November" loading="lazy"> <div class="side-content"> <span class="side-date">Jul 28, 2026</span> <h6 class="side-title">Jujutsu Kaisen Stage Play Returns in November</h6> </div> </a> </div> <div style="min-height:250px;text-align:center;overflow:hidden;"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4862075181072166" crossorigin="anonymous"></script> <!-- Vertical Ads (Next JS) --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-4862075181072166" data-ad-slot="8363657474" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></div> <div class="sidebar-widget"> <h5 class="widget-title">Popular in News</h5> <a href="https://myanimethoughts.com/one-piece-yuichi-nakamura-loki-elbaf-edition-aina-the-end" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/img_69c7b4cf454972.02830170.webp" class="side-thumb" alt="Yuichi Nakamura as Loki in "ONE PIECE": Elbaf Edition OP by Aina The End" loading="lazy"> <div class="side-content"> <span class="side-date" style="color:#777;"><i class="bi bi-fire me-1"></i> 4729 Views</span> <h6 class="side-title">Yuichi Nakamura as Loki in "ONE PIECE": Elbaf Edition OP by Aina The End</h6> </div> </a> <a href="https://myanimethoughts.com/eating-in-a-game-of-death-candlewoods-visual-depicting-a-ghost-with-an-injured-right-eye-released" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/img_69b41d6e6ad611.85010117.webp" class="side-thumb" alt=""Ghost with injured eye revealed in Candlewoods"" loading="lazy"> <div class="side-content"> <span class="side-date" style="color:#777;"><i class="bi bi-fire me-1"></i> 701 Views</span> <h6 class="side-title">"Ghost with injured eye revealed in Candlewoods"</h6> </div> </a> <a href="https://myanimethoughts.com/all-volumes-of-the-manga-version-of-the-cat-and-the-dragon-which-is-about-to-air-on-tv-will-be-released-for-free-today-june-28th-only" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/img_6a3fe8241d11b9.85435199.webp" class="side-thumb" alt="The Cat and Dragon Free Release" loading="lazy"> <div class="side-content"> <span class="side-date" style="color:#777;"><i class="bi bi-fire me-1"></i> 693 Views</span> <h6 class="side-title">The Cat and Dragon Free Release</h6> </div> </a> <a href="https://myanimethoughts.com/exciting-update-roshidere-season-2-postponed-until-2027" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/1770911152_9301.webp" class="side-thumb" alt="Exciting Update: Roshidere Season 2 Postponed until 2027" loading="lazy"> <div class="side-content"> <span class="side-date" style="color:#777;"><i class="bi bi-fire me-1"></i> 640 Views</span> <h6 class="side-title">Exciting Update: Roshidere Season 2 Postponed until 2027</h6> </div> </a> </div> <div class="sidebar-widget"> <h5 class="widget-title">Top Categories</h5> <div class="cat-list"> <a href="https://myanimethoughts.com/category/animation" class="cat-list-item"> <span>Animation</span> <span class="cat-count">554</span> </a> <a href="https://myanimethoughts.com/category/best-fights" class="cat-list-item"> <span>Best Fights</span> <span class="cat-count">115</span> </a> <a href="https://myanimethoughts.com/category/characters" class="cat-list-item"> <span>Characters</span> <span class="cat-count">1059</span> </a> <a href="https://myanimethoughts.com/category/guides" class="cat-list-item"> <span>Guides</span> <span class="cat-count">180</span> </a> <a href="https://myanimethoughts.com/category/manga" class="cat-list-item"> <span>Manga</span> <span class="cat-count">137</span> </a> <a href="https://myanimethoughts.com/category/news" class="cat-list-item"> <span>News</span> <span class="cat-count">3593</span> </a> <a href="https://myanimethoughts.com/category/power-levels" class="cat-list-item"> <span>Power Levels</span> <span class="cat-count">25</span> </a> <a href="https://myanimethoughts.com/category/rankings" class="cat-list-item"> <span>Rankings</span> <span class="cat-count">409</span> </a> <a href="https://myanimethoughts.com/category/recomendations" class="cat-list-item"> <span>Recomendations</span> <span class="cat-count">226</span> </a> <a href="https://myanimethoughts.com/category/reviews" class="cat-list-item"> <span>Reviews</span> <span class="cat-count">181</span> </a> <a href="https://myanimethoughts.com/category/sacrifices" class="cat-list-item"> <span>Sacrifices</span> <span class="cat-count">67</span> </a> <a href="https://myanimethoughts.com/category/special" class="cat-list-item"> <span>Special</span> <span class="cat-count">113</span> </a> <a href="https://myanimethoughts.com/category/theories" class="cat-list-item"> <span>Theories</span> <span class="cat-count">429</span> </a> <a href="https://myanimethoughts.com/category/voice-actors" class="cat-list-item"> <span>Voice Actors</span> <span class="cat-count">2</span> </a> </div> </div> <div class="sidebar-widget"> <h5 class="widget-title">Tags</h5> <div class="tag-cloud"> <a href="https://myanimethoughts.com/tag/heaven-in-the-palm" class="tag-pill"> #Heaven in the Palm </a> <a href="https://myanimethoughts.com/tag/the-monster-eating-adventurer" class="tag-pill"> #The Monster-Eating Adventurer </a> <a href="https://myanimethoughts.com/tag/welcome-to-the-n-h-k-" class="tag-pill"> #Welcome to the N.H.K. </a> <a href="https://myanimethoughts.com/tag/space-runaway-ideon-be-invoked" class="tag-pill"> #Space Runaway Ideon: Be Invoked </a> <a href="https://myanimethoughts.com/tag/namara!-sakyutte-bear♡" class="tag-pill"> #Namara! Sakyutte Bear♡ </a> <a href="https://myanimethoughts.com/tag/merch" class="tag-pill"> #Merch </a> <a href="https://myanimethoughts.com/tag/howl-s-moving-castle" class="tag-pill"> #Howl's Moving Castle </a> <a href="https://myanimethoughts.com/tag/angel-beats-" class="tag-pill"> #Angel Beats! </a> <a href="https://myanimethoughts.com/tag/exiled-magicians-fluffy-new-life" class="tag-pill"> #Exiled Magician's Fluffy New Life </a> <a href="https://myanimethoughts.com/tag/record-of-grancrest-war" class="tag-pill"> #Record of Grancrest War </a> <a href="https://myanimethoughts.com/tag/sarazanmai" class="tag-pill"> #Sarazanmai </a> <a href="https://myanimethoughts.com/tag/mob-psycho-100" class="tag-pill"> #Mob Psycho 100 </a> <a href="https://myanimethoughts.com/tag/marika-official-story" class="tag-pill"> #Marika Official Story </a> <a href="https://myanimethoughts.com/tag/uzumaki-&-gyo" class="tag-pill"> #Uzumaki & Gyo </a> <a href="https://myanimethoughts.com/tag/yokohama-kaidashi-kikou" class="tag-pill"> #Yokohama Kaidashi Kikou </a> </div> </div> </div> </div> </div> </div> </section> <div style="min-height:250px;text-align:center;overflow:hidden;"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4862075181072166" crossorigin="anonymous"></script> <!-- Vertical Ads (Next JS) --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-4862075181072166" data-ad-slot="8363657474" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></div> <style> /* --- WEB STORY CARD STYLES --- */ .story-card { position: relative; overflow: hidden; border-radius: 12px; aspect-ratio: 9/16; /* Standard Story Ratio */ transition: transform 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); cursor: pointer; border: 1px solid #222; background: #111; } .story-card:hover { transform: translateY(-5px); box-shadow: 0 10px 30px rgba(0,0,0,0.5); border-color: #f2f2f2; } /* Image */ .story-img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s ease; } .story-card:hover .story-img { transform: scale(1.05); } /* Gradient Overlay */ .story-overlay { position: absolute; bottom: 0; left: 0; width: 100%; height: 70%; background: linear-gradient(to top, rgba(0,0,0,0.95) 0%, rgba(0,0,0,0.6) 50%, rgba(0,0,0,0) 100%); display: flex; flex-direction: column; justify-content: flex-end; padding: 20px; z-index: 2; } /* Content */ .story-cat-badge { display: inline-block; background: #f2f2f2; color: #000; font-size: 0.7rem; font-weight: 700; text-transform: uppercase; padding: 4px 8px; border-radius: 4px; margin-bottom: 10px; align-self: flex-start; } .story-title { color: #fff; font-size: 1.1rem; font-weight: 700; line-height: 1.3; margin-bottom: 8px; text-shadow: 0 2px 4px rgba(0,0,0,0.8); } .story-meta { font-size: 0.75rem; color: #ccc; display: flex; align-items: center; gap: 5px; } /* Icon Overlay */ .story-icon { position: absolute; top: 15px; right: 15px; background: rgba(0,0,0,0.5); backdrop-filter: blur(4px); width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; border: 1px solid rgba(255,255,255,0.2); z-index: 3; } </style> <section class="bg-black text-light py-5 border-top border-secondary border-opacity-25"> <div class="container"> <div class="d-flex align-items-center mb-4 pb-2 border-bottom border-secondary border-opacity-25"> <h2 class="fw-bold text-uppercase m-0 text-white mat-section-title" style="letter-spacing: -1px;"> Web Stories </h2> <a href="https://myanimethoughts.com/web-stories" class="ms-auto text-decoration-none text-secondary small fw-bold hover-warning text-uppercase" style="font-size: 0.8rem; letter-spacing: 1px;"> View All <i class="bi bi-arrow-right"></i> </a> </div> <div class="row g-4"> <div class="col-xl-3 col-lg-4 col-sm-6 col-12"> <a href="https://myanimethoughts.com/web-story/naruto-s-8-wildest-body-transformations-ranked" class="text-decoration-none"> <div class="story-card"> <div class="story-icon"> <i class="bi bi-collection-play-fill"></i> </div> <img src="https://preview.redd.it/the-real-form-of-kaguya-v0-kkzkvj6o40131.png?width=602&format=png&auto=webp&s=522741a058945a3fe44a8617daad0ac3e7ae21d8" alt="Naruto's 8 Wildest Body Transformations, Ranked" class="story-img" loading="lazy"> <div class="story-overlay"> <span class="story-cat-badge">Power Levels</span> <h3 class="story-title">Naruto's 8 Wildest Body Transformations, Ranked</h3> <div class="story-meta"> <i class="bi bi-clock"></i> Jul 28, 2026 </div> </div> </div> </a> </div> <div class="col-xl-3 col-lg-4 col-sm-6 col-12"> <a href="https://myanimethoughts.com/web-story/10-anime-masterpieces-every-episode-a-must-watch-journey" class="text-decoration-none"> <div class="story-card"> <div class="story-icon"> <i class="bi bi-collection-play-fill"></i> </div> <img src="https://i.pinimg.com/736x/f5/ed/f6/f5edf6175357ef91bac731e2d2701887.jpg" alt="10 Anime Masterpieces: Every Episode a Must-Watch Journey" class="story-img" loading="lazy"> <div class="story-overlay"> <span class="story-cat-badge">Recomendations</span> <h3 class="story-title">10 Anime Masterpieces: Every Episode a Must-Watch Journey</h3> <div class="story-meta"> <i class="bi bi-clock"></i> Jul 28, 2026 </div> </div> </div> </a> </div> <div class="col-xl-3 col-lg-4 col-sm-6 col-12"> <a href="https://myanimethoughts.com/web-story/beyond-konoha-12-powerful-anime-ninjas-you-need-to-know" class="text-decoration-none"> <div class="story-card"> <div class="story-icon"> <i class="bi bi-collection-play-fill"></i> </div> <img src="https://i.pinimg.com/vwebp/736x/11/da/87/11da879eeca22eac679ddd68f8cf7e48.webp" alt="Beyond Konoha: 12 Powerful Anime Ninjas You Need to Know" class="story-img" loading="lazy"> <div class="story-overlay"> <span class="story-cat-badge">Power Levels</span> <h3 class="story-title">Beyond Konoha: 12 Powerful Anime Ninjas You Need to Know</h3> <div class="story-meta"> <i class="bi bi-clock"></i> Jul 28, 2026 </div> </div> </div> </a> </div> <div class="col-xl-3 col-lg-4 col-sm-6 col-12"> <a href="https://myanimethoughts.com/web-story/5-classic-anime-dubs-that-are-hard-to-watch-now" class="text-decoration-none"> <div class="story-card"> <div class="story-icon"> <i class="bi bi-collection-play-fill"></i> </div> <img src="https://i.pinimg.com/736x/b9/c6/69/b9c669e9bc59074e4f86a26a795d2a3b.jpg" alt="5 Classic Anime Dubs That Are Hard to Watch Now" class="story-img" loading="lazy"> <div class="story-overlay"> <span class="story-cat-badge">Reviews</span> <h3 class="story-title">5 Classic Anime Dubs That Are Hard to Watch Now</h3> <div class="story-meta"> <i class="bi bi-clock"></i> Jul 28, 2026 </div> </div> </div> </a> </div> </div> </div> </section> <style> .mat-scroll-container { display:flex; gap:14px; overflow-x:auto; scroll-behavior:smooth; padding-bottom:10px; scrollbar-width:none; -ms-overflow-style:none; } .mat-scroll-container::-webkit-scrollbar { display:none; } .nav-btn { background:#222; border:1px solid #333; color:#fff; width:35px; height:35px; border-radius:50%; display:flex; align-items:center; justify-content:center; cursor:pointer; transition:0.2s; flex-shrink:0; } .nav-btn:hover { background:#f2f2f2; color:#000; border-color:#f2f2f2; } .shophl-card { min-width:190px; max-width:190px; flex-shrink:0; background:#111; border:1px solid #222; border-radius:12px; overflow:hidden; transition:0.25s; text-decoration:none; display:block; } .shophl-card:hover { border-color:#f97316; transform:translateY(-3px); } .shophl-thumb { width:100%; aspect-ratio:1/1; overflow:hidden; background:#161616; } .shophl-thumb img { width:100%; height:100%; object-fit:cover; transition:transform 0.4s; display:block; } .shophl-card:hover .shophl-thumb img { transform:scale(1.07); } .shophl-body { padding:10px 12px 12px; } .shophl-title { color:#e0e0e0; font-size:0.83rem; font-weight:600; line-height:1.4; margin-bottom:4px; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; } .shophl-cta { color:#f97316; font-size:0.7rem; font-weight:700; } </style> <section style="background:#000; padding:44px 0; border-top:1px solid #1a1a1a;"> <div class="container"> <div class="d-flex justify-content-between align-items-center mb-4"> <h2 class="fw-bold text-uppercase m-0 text-white h4" style="letter-spacing:-0.5px;"> <i class="bi bi-bag-heart-fill me-2" style="color:#f97316;"></i>Anime Merch Store </h2> <div class="d-flex align-items-center gap-2"> <a href="https://myanimethoughts.com/shop" class="btn btn-sm btn-outline-light rounded-pill px-3 me-2">Shop All <i class="bi bi-arrow-right ms-1"></i></a> <button class="nav-btn" onclick="scrollSection('shopHlScroll',-1)" aria-label="Previous"><i class="bi bi-chevron-left"></i></button> <button class="nav-btn" onclick="scrollSection('shopHlScroll', 1)" aria-label="Next"><i class="bi bi-chevron-right"></i></button> </div> </div> <div class="mat-scroll-container" id="shopHlScroll"> <a href="https://myanimethoughts.com/product/banpresto-my-hero-academia-izuku-midoriya-deku-heroes-figure" class="shophl-card"> <div class="shophl-thumb"><img src="https://m.media-amazon.com/images/I/71snpOE3ujL._SL1500_.jpg" alt="Banpresto My Hero Academia Izuku Midoriya (Deku) Heroes Figure" loading="lazy"></div> <div class="shophl-body"> <div class="shophl-title">Banpresto My Hero Academia Izuku Midoriya (Deku) Heroes Figure</div> <span class="shophl-cta">View Product <i class="bi bi-arrow-right"></i></span> </div> </a> <a href="https://myanimethoughts.com/product/funko-pop-animation-one-piece-roronoa-zoro-collectible-vinyl-figure-with-1-6-chase-variant-chance-official-anime-merchandise" class="shophl-card"> <div class="shophl-thumb"><img src="https://myanimethoughts.com/assets/images/products/1783105084_6339.webp" alt="Funko Pop! Animation: One Piece – Roronoa Zoro Collectible Vinyl Figure with 1/6 Chase Variant Chance – Official Anime Merchandise" loading="lazy"></div> <div class="shophl-body"> <div class="shophl-title">Funko Pop! Animation: One Piece – Roronoa Zoro Collectible Vinyl Figure with 1/6 Chase Variant Chance – Official Anime Merchandise</div> <span class="shophl-cta">View Product <i class="bi bi-arrow-right"></i></span> </div> </a> <a href="https://myanimethoughts.com/product/tamashii-nations-blue-lock-yoichi-isagi-mini-action-figure" class="shophl-card"> <div class="shophl-thumb"><img src="https://myanimethoughts.com/assets/images/products/1783316907_5032.webp" alt="Tamashii Nations Blue Lock Yoichi Isagi Mini Action Figure" loading="lazy"></div> <div class="shophl-body"> <div class="shophl-title">Tamashii Nations Blue Lock Yoichi Isagi Mini Action Figure</div> <span class="shophl-cta">View Product <i class="bi bi-arrow-right"></i></span> </div> </a> <a href="https://myanimethoughts.com/product/jujutsu-kaisen-nobara-kugisaki-cosplay-school-uniform-outfit" class="shophl-card"> <div class="shophl-thumb"><img src="https://myanimethoughts.com/assets/images/products/1783141479_7204.webp" alt="Jujutsu Kaisen Nobara Kugisaki Cosplay School Uniform Outfit" loading="lazy"></div> <div class="shophl-body"> <div class="shophl-title">Jujutsu Kaisen Nobara Kugisaki Cosplay School Uniform Outfit</div> <span class="shophl-cta">View Product <i class="bi bi-arrow-right"></i></span> </div> </a> <a href="https://myanimethoughts.com/product/vintagecos-kurosaki-ichigo-cosplay-authentic-men-s-black-soul-reaper-kimono-outfit" class="shophl-card"> <div class="shophl-thumb"><img src="https://myanimethoughts.com/assets/images/products/1783068200_9261.webp" alt="VintageCos Kurosaki Ichigo Cosplay: Authentic Men's Black Soul Reaper Kimono Outfit" loading="lazy"></div> <div class="shophl-body"> <div class="shophl-title">VintageCos Kurosaki Ichigo Cosplay: Authentic Men's Black Soul Reaper Kimono Outfit</div> <span class="shophl-cta">View Product <i class="bi bi-arrow-right"></i></span> </div> </a> <a href="https://myanimethoughts.com/product/funko-pop-rezero-subaru-natsuki-vinyl-figure-anime" class="shophl-card"> <div class="shophl-thumb"><img src="https://myanimethoughts.com/assets/images/products/1783140606_7114.webp" alt="Funko POP! Re:ZERO Subaru Natsuki Vinyl Figure Anime" loading="lazy"></div> <div class="shophl-body"> <div class="shophl-title">Funko POP! Re:ZERO Subaru Natsuki Vinyl Figure Anime</div> <span class="shophl-cta">View Product <i class="bi bi-arrow-right"></i></span> </div> </a> <a href="https://myanimethoughts.com/product/roommates-one-piece-straw-hat-crew-peel-stick-wall-decals" class="shophl-card"> <div class="shophl-thumb"><img src="https://myanimethoughts.com/assets/images/products/1783108161_6022.webp" alt="RoomMates One Piece Straw Hat Crew Peel & Stick Wall Decals" loading="lazy"></div> <div class="shophl-body"> <div class="shophl-title">RoomMates One Piece Straw Hat Crew Peel & Stick Wall Decals</div> <span class="shophl-cta">View Product <i class="bi bi-arrow-right"></i></span> </div> </a> <a href="https://myanimethoughts.com/product/dr-stone-senku-plush-8-h-official-anime-collectible-toy" class="shophl-card"> <div class="shophl-thumb"><img src="https://myanimethoughts.com/assets/images/products/1783138510_2371.webp" alt="Dr. Stone Senku Plush 8" H - Official Anime Collectible Toy" loading="lazy"></div> <div class="shophl-body"> <div class="shophl-title">Dr. Stone Senku Plush 8" H - Official Anime Collectible Toy</div> <span class="shophl-cta">View Product <i class="bi bi-arrow-right"></i></span> </div> </a> <a href="https://myanimethoughts.com/product/gabimaru-hell-s-paradise-oversized-anime-t-shirt-denim-blue" class="shophl-card"> <div class="shophl-thumb"><img src="https://myanimethoughts.com/assets/images/products/1783143612_3308.webp" alt="Gabimaru Hell's Paradise Oversized Anime T-Shirt Denim Blue" loading="lazy"></div> <div class="shophl-body"> <div class="shophl-title">Gabimaru Hell's Paradise Oversized Anime T-Shirt Denim Blue</div> <span class="shophl-cta">View Product <i class="bi bi-arrow-right"></i></span> </div> </a> <a href="https://myanimethoughts.com/product/one-piece-cowboy-nami-action-figure-19cm-pvc-anime-figurine" class="shophl-card"> <div class="shophl-thumb"><img src="https://myanimethoughts.com/assets/images/products/1783241859_2030.webp" alt="One Piece Cowboy Nami Action Figure | 19cm PVC Anime Figurine" loading="lazy"></div> <div class="shophl-body"> <div class="shophl-title">One Piece Cowboy Nami Action Figure | 19cm PVC Anime Figurine</div> <span class="shophl-cta">View Product <i class="bi bi-arrow-right"></i></span> </div> </a> </div> </div> </section> <script> if (typeof scrollSection !== 'function') { function scrollSection(id, dir) { const c = document.getElementById(id); if (c) c.scrollLeft += dir * 280; } } </script> <section class="bg-black py-5 border-top border-bottom border-secondary border-opacity-25"> <div class="container"> <div class="row align-items-center g-4"> <div class="col-lg-6 col-md-12"> <div class="d-flex flex-column"> <h3 class="fw-bold text-white text-uppercase mb-2 ls-1 mat-section-title"> Never Miss an Update! </h3> <p class="text-secondary mb-0" style="font-size: 1.05rem;"> Get the freshest headlines, theories, and anime updates sent uninterrupted to your inbox. </p> </div> </div> <div class="col-lg-6 col-md-12"> <form method="post" action="" class="position-relative"> <div class="input-group input-group-lg"> <input type="email" name="subscribe_email" class="form-control bg-dark border-secondary text-white fs-6" placeholder="Enter your email address..." aria-label="Email" required style="border-right: none;" > <button class="btn fw-bold text-uppercase px-4 text-dark fs-6" type="submit" style="letter-spacing: 1px; background-color: #fff; color:#111;"> Subscribe </button> </div> </form> </div> </div> </div> </section> <style> .form-control:focus { background-color: #222 !important; color: #fff !important; border-color: #444 !important; box-shadow: none !important; } /* Placeholder color fix */ .form-control::placeholder { color: #6c757d !important; opacity: 1; } </style> <style> /* --- FOOTER THEME (Otaku Dark) - KEPT EXACTLY AS REQUESTED --- */ .mat-footer-section { background-color: #050505; /* Deep Black */ color: #b0b3b8; font-family: 'Segoe UI', system-ui, sans-serif; border-top: 1px solid #222; margin-top: 80px; position: relative; overflow: hidden; } .mat-footer-section::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 5px; } .mat-footer-title { color: #fff; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 1.5rem; border-left: 4px solid #f2f2f2; padding-left: 12px; line-height: 1; } .mat-footer-link { color: #888; text-decoration: none; transition: all 0.3s ease; display: block; padding: 6px 0; font-size: 0.95rem; } .mat-footer-link:hover { color: #f2f2f2; padding-left: 8px; } .mat-social-btn { width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; background-color: rgba(255,255,255,0.08); border-radius: 50%; transition: 0.3s; border: 1px solid rgba(255,255,255,0.1); } .mat-social-btn img { width: 18px; height: 18px; object-fit: contain; filter: invert(0.8); transition: 0.3s; } .mat-social-btn:hover { background-color: #f2f2f2; border-color: #f2f2f2; transform: translateY(-3px); } .mat-social-btn:hover img { filter: invert(0); /* Black icon on yellow bg */ } .mat-cat-pill { display: inline-block; background: #111; color: #999; padding: 5px 12px; border-radius: 4px; font-size: 0.8rem; margin: 0 5px 8px 0; text-decoration: none; border: 1px solid #333; transition: 0.2s; } .mat-cat-pill:hover { border-color: #f2f2f2; color: #f2f2f2; } .mat-lower-footer { background-color: #000; border-top: 1px solid #1a1a1a; padding: 25px 0; font-size: 0.85rem; } </style> <footer class="mat-footer-section pt-5"> <div class="container pb-5"> <div class="row g-5"> <div class="col-lg-4 col-md-6 col-12"> <div class="mb-4"> <a href="https://myanimethoughts.com/"> <img src="https://myanimethoughts.com/assets/images/footer/logo_1770522735.png" alt="Logo" class="img-fluid mb-3" style="max-width: 180px;" loading="lazy"> </a> <p style="line-height: 1.7; opacity: 0.8; font-size: 0.95rem;"> MyAnimeThoughts is your ultimate destination for anime news, reviews, and theories. Join our community of otakus today! </p> </div> <div class="d-flex gap-3"> <a href="https://www.facebook.com/myanimethought/" class="mat-social-btn" title="Facebook"> <img src="https://myanimethoughts.com/assets/images/footer/1.png" alt="FB" loading="lazy"> </a> <a href="https://www.youtube.com/@myanimethoughts_" class="mat-social-btn" title="YouTube"> <img src="https://myanimethoughts.com/assets/images/footer/4.png" alt="YT" loading="lazy"> </a> <a href="https://www.instagram.com/myanimethoughts_" class="mat-social-btn" title="Instagram"> <img src="https://myanimethoughts.com/assets/images/footer/3.png" alt="IG" loading="lazy"> </a> <a href="https://in.pinterest.com/Myanimethoughts/" class="mat-social-btn" title="Pinterest"> <img src="https://myanimethoughts.com/assets/images/footer/5.png" alt="Pin" loading="lazy"> </a> </div> </div> <div class="col-lg-2 col-md-6 col-12"> <h5 class="mat-footer-title">Explore</h5> <ul class="list-unstyled"> <li> <a href="/tag/one-piece" class="mat-footer-link"> One Piece </a> </li> <li> <a href="/tag/jujutsu-kaisen" class="mat-footer-link"> Jujutsu Kaisen </a> </li> </ul> </div> <div class="col-lg-4 col-md-6 col-12"> <h5 class="mat-footer-title">Browse Topics</h5> <div class="d-flex flex-wrap"> <a href="https://myanimethoughts.com/category/animation" class="mat-cat-pill">Animation</a><a href="https://myanimethoughts.com/category/best-fights" class="mat-cat-pill">Best Fights</a><a href="https://myanimethoughts.com/category/characters" class="mat-cat-pill">Characters</a><a href="https://myanimethoughts.com/category/guides" class="mat-cat-pill">Guides</a><a href="https://myanimethoughts.com/category/manga" class="mat-cat-pill">Manga</a><a href="https://myanimethoughts.com/category/news" class="mat-cat-pill">News</a><a href="https://myanimethoughts.com/category/power-levels" class="mat-cat-pill">Power Levels</a><a href="https://myanimethoughts.com/category/rankings" class="mat-cat-pill">Rankings</a><a href="https://myanimethoughts.com/category/recomendations" class="mat-cat-pill">Recomendations</a><a href="https://myanimethoughts.com/category/reviews" class="mat-cat-pill">Reviews</a><a href="https://myanimethoughts.com/category/sacrifices" class="mat-cat-pill">Sacrifices</a><a href="https://myanimethoughts.com/category/special" class="mat-cat-pill">Special</a><a href="https://myanimethoughts.com/category/theories" class="mat-cat-pill">Theories</a><a href="https://myanimethoughts.com/category/voice-actors" class="mat-cat-pill">Voice Actors</a> </div> </div> <div class="col-lg-2 col-md-6 col-12"> <h5 class="mat-footer-title">Legal</h5> <ul class="list-unstyled"> <li> <a href="https://myanimethoughts.com/web-stories" class="mat-footer-link"> Web Stories </a> </li> <li> <a href="/llms.txt" class="mat-footer-link"> LLMS.txt </a> </li> <li> <a href="/sitemap-index.xml" class="mat-footer-link"> Sitemaps </a> </li> <li> <a href="/page/privacy-policy" class="mat-footer-link"> Privacy Policy </a> </li> <li> <a href="/page/terms-and-conditions" class="mat-footer-link"> Terms and Conditions </a> </li> <li> <a href="/page/contact-us" class="mat-footer-link"> Contact Us </a> </li> </ul> </div> </div> </div> <div class="mat-lower-footer"> <div class="container d-flex flex-wrap justify-content-between align-items-center"> <div class="text-secondary"> Copyright © 2026 MYANIMETHOUGHTS. All Rights Reserved. </div> <div class="d-none d-md-block "> Made with <i class="bi bi-heart-fill text-danger"></i> for Anime Fans </div> </div> </div> </footer> <style> /* Existing styles */ .hover-white:hover { color: #fff !important; padding-left: 5px; } .transition { transition: all 0.2s ease-in-out; } .ls-1 { letter-spacing: 1px; } /* Push Modal Styles - Black, Smoke White, & Minimal Red */ .push-toast-container { position: fixed; bottom: 30px; right: 30px; width: 360px; background: #0f0f0f; /* Deep black to match site */ border-radius: 16px; box-shadow: 0 15px 35px rgba(0,0,0,0.8); border: 1px solid #2a2a2a; /* Subtle dark border */ color: #f5f5f5; /* Smoke white */ z-index: 10000; font-family: system-ui, -apple-system, sans-serif; transform: translateX(150%); visibility: hidden; transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275), visibility 0.5s; } .push-toast-container.show { transform: translateX(0); visibility: visible; } .push-toast-content { display: flex; align-items: flex-start; gap: 16px; padding: 24px; } .push-toast-icon { background: #1a1a1a; padding: 12px; border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 1px solid #333; color: #f5f5f5; /* Smoke white icon */ } .push-toast-btn { flex: 1; padding: 10px 0; border-radius: 8px; cursor: pointer; font-weight: 600; font-size: 0.9rem; transition: background 0.2s, transform 0.1s, border 0.2s; } .push-toast-btn:active { transform: scale(0.97); } .btn-later { border: 1px solid #333; background: #141414; color: #aaa; } .btn-later:hover { background: #222; color: #f5f5f5; border-color: #555; } .btn-allow { border: none; background: #c61a1a; /* Subtle red accent for primary action */ color: white; } .btn-allow:hover { background: #a31515; } /* ========================================= Floating Bell Button Styles & Animation ========================================= */ #floating-bell-btn { position: fixed; bottom: 30px; left: 30px; width: 60px; height: 60px; background: #141414; /* Dark background instead of red */ border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer; box-shadow: 0 4px 15px rgba(0,0,0,0.6); z-index: 9999; display: none; /* Hidden by default */ transition: transform 0.2s, background 0.2s; border: 1px solid #333; color: #f5f5f5; /* Smoke white icon */ } #floating-bell-btn:hover { background: #1f1f1f; transform: scale(1.05); } /* Tiny red notification dot */ .bell-dot { position: absolute; top: 14px; right: 16px; width: 8px; height: 8px; background: #c61a1a; /* The tiny bit of red */ border-radius: 50%; border: 2px solid #141414; } /* The Ringing Animation */ .bell-ring { animation: ringAnimation 2.5s infinite; display: flex; align-items: center; justify-content: center; } @keyframes ringAnimation { 0% { transform: rotate(0); } 5% { transform: rotate(15deg); } 10% { transform: rotate(-15deg); } 15% { transform: rotate(10deg); } 20% { transform: rotate(-10deg); } 25% { transform: rotate(5deg); } 30% { transform: rotate(-5deg); } 35% { transform: rotate(0); } 100% { transform: rotate(0); } } </style> <div id="floating-bell-btn" onclick="handleAllow()" role="button" tabindex="0" aria-label="Enable notifications" onkeydown="if(event.key==='Enter'||event.key===' '){event.preventDefault();handleAllow();}"> <div class="bell-dot" aria-hidden="true"></div> <span class="bell-ring" aria-hidden="true"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"></path> <path d="M13.73 21a2 2 0 0 1-3.46 0"></path> </svg> </span> </div> <div id="push-permission-modal" class="push-toast-container" role="dialog" aria-labelledby="push-toast-title" aria-describedby="push-toast-desc" aria-live="polite" onkeydown="if(event.key==='Escape'){handleLater();}"> <div class="push-toast-content"> <div class="push-toast-icon" aria-hidden="true"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"></path> <path d="M13.73 21a2 2 0 0 1-3.46 0"></path> </svg> </div> <div> <h4 id="push-toast-title" style="margin: 0 0 6px; color: #f5f5f5; font-weight: 700; font-size: 1.1rem;">Stay Updated!</h4> <p id="push-toast-desc" style="color: #aaa; font-size: 0.9rem; margin: 0 0 18px; line-height: 1.5;"> Get the latest updates, news, and anime thoughts delivered right to your device. </p> <div style="display: flex; gap: 12px;"> <button onclick="handleLater()" class="push-toast-btn btn-later">Later</button> <button onclick="handleAllow()" class="push-toast-btn btn-allow">Allow</button> </div> </div> </div> </div> <script> const publicKey = 'BIycaVwb1jDOCRYbsjNEYXjWTp5MeiBpiu5x7TNOTEe4D-f4OQxKJxcKp03FlgWVUCn3Lfuqf_waIi43OVJsn2Q'; // We store the timeout ID so we can clear it if needed let popupTimer; // Wait for full page load + 2s idle before starting push logic // Prevents push setup from competing with LCP/FID paint metrics window.addEventListener('load', function() { setTimeout(function() { if ('serviceWorker' in navigator && 'PushManager' in window) { navigator.serviceWorker.register('https://myanimethoughts.com/sw.js'); checkNotificationRules(); } }, 2000); }); function checkNotificationRules() { const bellBtn = document.getElementById('floating-bell-btn'); // If permanently granted or denied, keep everything hidden forever if (Notification.permission === 'granted' || Notification.permission === 'denied') { bellBtn.style.display = 'none'; return; } const lastPrompt = localStorage.getItem('push_prompt_cooldown'); if (lastPrompt) { // They clicked "Later" in the past, so the bell must be visible bellBtn.style.display = 'flex'; const now = new Date().getTime(); const timePassed = now - parseInt(lastPrompt, 10); const oneMinute = 60 * 1000; // 60 seconds if (timePassed < oneMinute) { // If less than a minute has passed, wait the remaining time popupTimer = setTimeout(showPushModal, oneMinute - timePassed); } else { // More than a minute has passed, show the popup quickly popupTimer = setTimeout(showPushModal, 1000); } } else { // First time visiting. No bell yet, just show the popup. bellBtn.style.display = 'none'; popupTimer = setTimeout(showPushModal, 1000); } } function showPushModal() { document.getElementById('push-permission-modal').classList.add('show'); } function handleAllow() { // Hide the modal and clear the current timer document.getElementById('push-permission-modal').classList.remove('show'); clearTimeout(popupTimer); // Request native browser permission directly Notification.requestPermission().then(function(permission) { if (permission === 'granted') { subscribeUserToPush(); // Subscribed! Remove the floating bell immediately. document.getElementById('floating-bell-btn').style.display = 'none'; } else if (permission === 'denied') { console.log('User permanently blocked notifications.'); // If they block it natively, remove the bell. document.getElementById('floating-bell-btn').style.display = 'none'; } else { // This is the 'default' state: They clicked 'X' and dismissed the prompt console.log('User dismissed the browser prompt without answering.'); // Keep the bell visible document.getElementById('floating-bell-btn').style.display = 'flex'; // Restart the 60-second loop const now = new Date().getTime(); localStorage.setItem('push_prompt_cooldown', now); popupTimer = setTimeout(showPushModal, 60000); } }); } function handleLater() { // Hide the popup document.getElementById('push-permission-modal').classList.remove('show'); // Show the bell permanently document.getElementById('floating-bell-btn').style.display = 'flex'; // Record the exact time they clicked Later const now = new Date().getTime(); localStorage.setItem('push_prompt_cooldown', now); // Set a timer to force the popup open again in exactly 60 seconds clearTimeout(popupTimer); popupTimer = setTimeout(showPushModal, 60000); console.log('Popup hidden. Bell is visible. Popup will return in 60 seconds.'); } function subscribeUserToPush() { navigator.serviceWorker.ready.then(function(registration) { const convertedKey = urlBase64ToUint8Array(publicKey); const subscribeOptions = { userVisibleOnly: true, applicationServerKey: convertedKey }; return registration.pushManager.subscribe(subscribeOptions); }).then(function(pushSubscription) { sendSubscriptionToBackEnd(pushSubscription); }).catch(function(err) { console.error('Subscription failed: ', err); }); } function sendSubscriptionToBackEnd(subscription) { fetch('https://myanimethoughts.com/save_subscription.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(subscription) }).then(response => { if (response.ok) console.log('Saved to DB!'); }); } function urlBase64ToUint8Array(base64String) { const padding = '='.repeat((4 - base64String.length % 4) % 4); const base64 = (base64String + padding).replace(/\-/g, '+').replace(/_/g, '/'); const rawData = window.atob(base64); const outputArray = new Uint8Array(rawData.length); for (let i = 0; i < rawData.length; ++i) { outputArray[i] = rawData.charCodeAt(i); } return outputArray; } </script> </div> <script src="assets/js/bootstrap.bundle.min.js"></script> <script src="assets/js/jquery.min.js"></script> <script src="assets/js/search.js"></script> </body> </html>