The Prince of Tennis Takes Over Anan Magazine

Somen Halder Jul 07, 2026 203
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/my-dad-lives-in-a-box-the-man-in-the-box-depicting-the-darkness-of-a-strange-father-and-family-released" class="rp-card"> <div class="rp-thumb"><img src="https://myanimethoughts.com/assets/images/blogs/img_69a93ce6229e98.12642342.webp" alt=""Dad in a Box - A Dark Family Tale"" loading="lazy"></div> <div class="rp-body"> <div class="rp-title">"Dad in a Box - A Dark Family Tale"</div> </div> </a> <a href="https://myanimethoughts.com/puella-magi-madoka-magica-tv-series-broadcast-free-abema-one-week" class="rp-card"> <div class="rp-thumb"><img src="https://myanimethoughts.com/assets/images/blogs/img_69f1746a8442d2.53320081.webp" alt="Madoka Magica TV Series Free on ABEMA" loading="lazy"></div> <div class="rp-body"> <div class="rp-title">Madoka Magica TV Series Free on ABEMA</div> </div> </a> <a href="https://myanimethoughts.com/mushoku-tensei-channel-is-now-available-on-abema-seasons-1-and-2-extra-episodes-are-distributed-free-of-charge-every-day" class="rp-card"> <div class="rp-thumb"><img src="https://myanimethoughts.com/assets/images/blogs/img_6a3900f5a02ba1.72362418.webp" alt="Mushoku Tensei Now on ABEMA with Free Episodes" loading="lazy"></div> <div class="rp-body"> <div class="rp-title">Mushoku Tensei Now on ABEMA with Free Episodes</div> </div> </a> <a href="https://myanimethoughts.com/re-zero-4th-season-2nd-key-visual-broadcast-information-and-collaboration-with-tottori-prefecture" class="rp-card"> <div class="rp-thumb"><img src="https://myanimethoughts.com/assets/images/blogs/img_69ab9bef834e06.41638302.webp" alt=""Re:Zero Season 4: Key Visual, Broadcasting Details, Tottori Prefecture Collab"" loading="lazy"></div> <div class="rp-body"> <div class="rp-title">"Re:Zero Season 4: Key Visual, Broadcasting Details, Tottori Prefecture Collab"</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> </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/takara-tomy-revives-g1-autobots-twincast-rewind-with-premium-designs-1643300" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/img_6ac31c3698cff9.94043434.webp" class="side-thumb" alt="Takara Tomy Revives G1 Autobots Twincast & Rewind with Premium Designs" loading="lazy"> <div class="side-content"> <span class="side-date">Oct 05, 2026</span> <h6 class="side-title">Takara Tomy Revives G1 Autobots Twincast & Rewind with Premium Designs</h6> </div> </a> <a href="https://myanimethoughts.com/edward-elrics-new-2027-grandista-figure-debuts-in-japans-crane-machines-5235959" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/img_6ac3071d8bc415.33937974.webp" class="side-thumb" alt="Edward Elric's New 2027 Grandista Figure Debuts in Japan’s Crane Machines" loading="lazy"> <div class="side-content"> <span class="side-date">Oct 05, 2026</span> <h6 class="side-title">Edward Elric's New 2027 Grandista Figure Debuts in Japan’s Crane Machines</h6> </div> </a> <a href="https://myanimethoughts.com/toriyamas-lost-super-saiyan-goku-sketch-surfaces-marking-a-dragon-ball-milestone-4307183" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/img_6ac2eafc67c0b1.95842221.webp" class="side-thumb" alt="Toriyama’s Lost Super Saiyan Goku Sketch Surfaces, Marking a Dragon Ball Milestone" loading="lazy"> <div class="side-content"> <span class="side-date">Oct 05, 2026</span> <h6 class="side-title">Toriyama’s Lost Super Saiyan Goku Sketch Surfaces, Marking a Dragon Ball Milestone</h6> </div> </a> <a href="https://myanimethoughts.com/avatar-creator-brian-konietzko-says-korra-might-outpower-aang-in-new-podcast-reveal-for-fans-of-the-series-and-upcoming-avatar-seven-havens-2275023" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/img_6ac2cf1b400b94.24600771.webp" class="side-thumb" alt="Avatar Creator Brian Konietzko Says Korra Might Outpower Aang in New Podcast Reveal for Fans of the Series and Upcoming Avatar: Seven Havens" loading="lazy"> <div class="side-content"> <span class="side-date">Oct 05, 2026</span> <h6 class="side-title">Avatar Creator Brian Konietzko Says Korra Might Outpower Aang in New Podcast Reveal for Fans of the Series and Upcoming Avatar: Seven Havens</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> 6751 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/my-dad-lives-in-a-box-the-man-in-the-box-depicting-the-darkness-of-a-strange-father-and-family-released" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/img_69a93ce6229e98.12642342.webp" class="side-thumb" alt=""Dad in a Box - A Dark Family Tale"" loading="lazy"> <div class="side-content"> <span class="side-date" style="color:#777;"><i class="bi bi-fire me-1"></i> 2505 Views</span> <h6 class="side-title">"Dad in a Box - A Dark Family Tale"</h6> </div> </a> <a href="https://myanimethoughts.com/puella-magi-madoka-magica-tv-series-broadcast-free-abema-one-week" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/img_69f1746a8442d2.53320081.webp" class="side-thumb" alt="Madoka Magica TV Series Free on ABEMA" loading="lazy"> <div class="side-content"> <span class="side-date" style="color:#777;"><i class="bi bi-fire me-1"></i> 1619 Views</span> <h6 class="side-title">Madoka Magica TV Series Free on ABEMA</h6> </div> </a> <a href="https://myanimethoughts.com/mushoku-tensei-channel-is-now-available-on-abema-seasons-1-and-2-extra-episodes-are-distributed-free-of-charge-every-day" class="side-post-item"> <img src="https://myanimethoughts.com/assets/images/blogs/img_6a3900f5a02ba1.72362418.webp" class="side-thumb" alt="Mushoku Tensei Now on ABEMA with Free Episodes" loading="lazy"> <div class="side-content"> <span class="side-date" style="color:#777;"><i class="bi bi-fire me-1"></i> 1207 Views</span> <h6 class="side-title">Mushoku Tensei Now on ABEMA with Free Episodes</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">1064</span> </a> <a href="https://myanimethoughts.com/category/guides" class="cat-list-item"> <span>Guides</span> <span class="cat-count">198</span> </a> <a href="https://myanimethoughts.com/category/manga" class="cat-list-item"> <span>Manga</span> <span class="cat-count">138</span> </a> <a href="https://myanimethoughts.com/category/news" class="cat-list-item"> <span>News</span> <span class="cat-count">3737</span> </a> <a href="https://myanimethoughts.com/category/power-levels" class="cat-list-item"> <span>Power Levels</span> <span class="cat-count">27</span> </a> <a href="https://myanimethoughts.com/category/rankings" class="cat-list-item"> <span>Rankings</span> <span class="cat-count">412</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">189</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">117</span> </a> <a href="https://myanimethoughts.com/category/theories" class="cat-list-item"> <span>Theories</span> <span class="cat-count">430</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/one-piece" class="tag-pill"> #One Piece </a> <a href="https://myanimethoughts.com/tag/death-note" class="tag-pill"> #Death Note </a> <a href="https://myanimethoughts.com/tag/that-time-i-got-reincarnated-as-a-slime" class="tag-pill"> #That Time I Got Reincarnated as a Slime </a> <a href="https://myanimethoughts.com/tag/my-hero-academia" class="tag-pill"> #My Hero Academia </a> <a href="https://myanimethoughts.com/tag/demon-slayer-" class="tag-pill"> #Demon Slayer </a> <a href="https://myanimethoughts.com/tag/chainsaw-man" class="tag-pill"> #Chainsaw Man </a> <a href="https://myanimethoughts.com/tag/naruto-shippuden" class="tag-pill"> #Naruto Shippuden </a> <a href="https://myanimethoughts.com/tag/dragon-ball-super" class="tag-pill"> #Dragon Ball Super </a> <a href="https://myanimethoughts.com/tag/dragon-ball" class="tag-pill"> #Dragon Ball </a> <a href="https://myanimethoughts.com/tag/jujutsu-kaisen" class="tag-pill"> #Jujutsu Kaisen </a> <a href="https://myanimethoughts.com/tag/black-clover" class="tag-pill"> #Black Clover </a> <a href="https://myanimethoughts.com/tag/dragon-ball-series" class="tag-pill"> #Dragon Ball Series </a> <a href="https://myanimethoughts.com/tag/one-punch-man" class="tag-pill"> #One Punch Man </a> <a href="https://myanimethoughts.com/tag/fairy-tail" class="tag-pill"> #Fairy Tail </a> <a href="https://myanimethoughts.com/tag/naruto" class="tag-pill"> #Naruto </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/10-anime-guys-with-heavenly-beauty-to-match-jinshi" 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/6e/2a/a4/6e2aa485dea759e4a37feb2c6dc3160a.jpg" alt="10 Anime Guys With Heavenly Beauty To Match Jinshi" class="story-img" loading="lazy"> <div class="story-overlay"> <span class="story-cat-badge">Characters</span> <h3 class="story-title">10 Anime Guys With Heavenly Beauty To Match Jinshi</h3> <div class="story-meta"> <i class="bi bi-clock"></i> Oct 02, 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/6-obscure-nicktoons-anime-and-nostalgic-features-lost-to-time" 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.redd.it/z4v68jgf18zd1.jpeg" alt="6 Obscure Nicktoons Anime and Nostalgic Features Lost to Time" class="story-img" loading="lazy"> <div class="story-overlay"> <span class="story-cat-badge">Animation</span> <h3 class="story-title">6 Obscure Nicktoons Anime and Nostalgic Features Lost to Time</h3> <div class="story-meta"> <i class="bi bi-clock"></i> Oct 02, 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-most-successful-original-anime-series-of-the-last-decade" 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/6f/89/44/6f8944a2f7eea5a14c898ca62216692e.jpg" alt="10 Most Successful Original Anime Series of the Last Decade" class="story-img" loading="lazy"> <div class="story-overlay"> <span class="story-cat-badge">Anime Crockere</span> <h3 class="story-title">10 Most Successful Original Anime Series of the Last Decade</h3> <div class="story-meta"> <i class="bi bi-clock"></i> Sep 29, 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/6-fan-favorite-anime-anti-heroes-who-are-smarter-than-eren-yeager" 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/1200x/80/cb/a5/80cba5cf247886e5135589d25dda80af.jpg" alt="6 Fan-Favorite Anime Anti-Heroes Who Are Smarter Than Eren Yeager" class="story-img" loading="lazy"> <div class="story-overlay"> <span class="story-cat-badge">Characters</span> <h3 class="story-title">6 Fan-Favorite Anime Anti-Heroes Who Are Smarter Than Eren Yeager</h3> <div class="story-meta"> <i class="bi bi-clock"></i> Sep 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/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/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/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/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/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/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> <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/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> </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/anime-crockere" class="mat-cat-pill">Anime Crockere</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> <li> <a href="https://myanimethoughts.com/page/about-us" class="mat-footer-link"> About Us </a> </li> <li> <a href="https://myanimethoughts.com/page/refund-policy-and-cancellation-policy" class="mat-footer-link"> Refund & Cancellation Policy </a> </li> <li> <a href="https://myanimethoughts.com/page/return-policy" class="mat-footer-link"> Return Policy </a> </li> <li> <a href="https://myanimethoughts.com/page/shipping-delivery-policy" class="mat-footer-link"> Shipping & Delivery Policy </a> </li> <li> <a href="https://myanimethoughts.com/page/support-policy" class="mat-footer-link"> Support Policy </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); }); const PUSH_FIRST_PROMPT_DELAY_MS = 20 * 1000; // first-ever visit: let the page settle and let them read first const PUSH_RE_PROMPT_DELAY_MS = 3 * 24 * 60 * 60 * 1000; // after "Later"/dismiss: wait 3 days, not 60 seconds function checkNotificationRules() { const bellBtn = document.getElementById('floating-bell-btn'); // Already granted: the browser has permission, but the subscription may never have reached the // server (failed POST, or granted before this code existed). Re-sync quietly — no prompt needed. if (Notification.permission === 'granted') { if (bellBtn) bellBtn.style.display = 'none'; ensurePushSubscriptionSynced(); return; } if (Notification.permission === 'denied') { if (bellBtn) bellBtn.style.display = 'none'; return; } const nextPrompt = parseInt(localStorage.getItem('push_next_prompt') || '0', 10); const now = Date.now(); if (nextPrompt) { // They already said "Later" (or dismissed) — keep the bell as a passive way back in if (bellBtn) bellBtn.style.display = 'flex'; popupTimer = setTimeout(showPushModal, Math.max(nextPrompt - now, 2000)); } else { // First time visiting. No bell yet, just the popup after a short settle delay. if (bellBtn) bellBtn.style.display = 'none'; popupTimer = setTimeout(showPushModal, PUSH_FIRST_PROMPT_DELAY_MS); } } function scheduleRePrompt() { localStorage.setItem('push_next_prompt', String(Date.now() + PUSH_RE_PROMPT_DELAY_MS)); } function ensurePushSubscriptionSynced() { if (localStorage.getItem('push_synced_v1') === '1') return; if (!('serviceWorker' in navigator)) return; navigator.serviceWorker.ready.then(function (registration) { return registration.pushManager.getSubscription().then(function (existing) { return existing || registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlBase64ToUint8Array(publicKey) }); }); }).then(function (sub) { if (!sub) return; return fetch('https://myanimethoughts.com/save_subscription.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(sub) }).then(function (r) { if (r.ok) localStorage.setItem('push_synced_v1', '1'); }); }).catch(function (err) { console.warn('Push re-sync failed (will retry next visit): ', err); }); } 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 { // 'default': they dismissed the browser prompt without answering — keep the bell, ask again later document.getElementById('floating-bell-btn').style.display = 'flex'; scheduleRePrompt(); popupTimer = setTimeout(showPushModal, PUSH_RE_PROMPT_DELAY_MS); } }); } 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'; // Wait days, not seconds, before asking again — re-prompting every minute is what trains people to click Later/close scheduleRePrompt(); clearTimeout(popupTimer); popupTimer = setTimeout(showPushModal, PUSH_RE_PROMPT_DELAY_MS); } 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(function (response) { if (response.ok) localStorage.setItem('push_synced_v1', '1'); else console.warn('Push subscription save failed with HTTP ' + response.status); }).catch(function (err) { console.warn('Push subscription save failed: ', err); }); } 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>