===== Index.js ===== let slideIndex = 0; const sliderContainer = document.getElementById("slider-container"); // Fetch data from the API import api from './config.js'; async function fetchAnimes() { try { const response = await fetch(api); const data = await response.json(); if (data.success) { const spotlightAnimes = data.data.spotlightAnimes; spotlightAnimes.forEach(anime => { const slide = document.createElement("div"); slide.classList.add("slide"); // Create overlay const overlay = document.createElement("div"); overlay.classList.add("img-overlay"); // Create image const img = document.createElement("img"); img.src = anime.poster; // Assuming the poster is in the response img.classList.add("slider-image"); img.alt = anime.name; // Create content const content = document.createElement("div"); content.classList.add("content"); const title = document.createElement("h1"); title.classList.add("title"); title.textContent = anime.name; const description = document.createElement("p"); description.classList.add("description"); description.textContent = anime.description.split(" ").slice(0, 10).join(" ") + '...'; // Truncate to 10 words const buttons = document.createElement("div"); buttons.classList.add("buttons"); const watchButton = document.createElement("a"); watchButton.href = `details.html?id=${anime.id}` ; watchButton.classList.add("watch-button"); watchButton.textContent = "Watch Now"; const detailsButton = document.createElement("a"); detailsButton.href = `details.html?id=${anime.id}`; detailsButton.classList.add("details-button"); detailsButton.textContent = "Details"; // Append all elements buttons.appendChild(watchButton); buttons.appendChild(detailsButton); content.appendChild(title); content.appendChild(description); content.appendChild(buttons); slide.appendChild(overlay); slide.appendChild(img); slide.appendChild(content); sliderContainer.appendChild(slide); }); showSlides(); // Call function to start showing slides } } catch (error) { console.error("Error fetching data:", error); } } function showSlides() { const slides = document.getElementsByClassName("slide"); for (let i = 0; i < slides.length; i++) { slides[i].style.opacity = 0; // Reset opacity } slideIndex++; if (slideIndex > slides.length) { slideIndex = 1 } slides[slideIndex - 1].style.opacity = 1; // Show current slide setTimeout(showSlides, 5000); // Change slide every 5 seconds } document.addEventListener("DOMContentLoaded", fetchAnimes); ===== about.html =====

About AniTeams

AniTeams is your go-to destination for high-quality anime streaming, powered by the AniWatch API. With a vast collection of anime AniTeams offers fans a seamless and immersive experience.

Our Mission

We aim to bring anime closer to fans worldwide, making it easy to find and enjoy your favorite shows in one place. AniTeams is dedicated to providing a platform that is fast, reliable, and user-friendly.

Credits

AniTeams is proudly built and maintained with contributions from talented developers. We would like to extend our gratitude to those who have made this project possible.

===== card.css ===== .card-container { margin-top: 20px; /* Add separation from the filter */ display: flex; /* Keep flex layout for cards */ flex-wrap: wrap; /* Ensure cards wrap respons-content: flex-start; /* Align cards to the left */ position: relative; /* Prevent overlap or positioning issues */ z-index: 1; } .card { width: calc(16.66% - 14px); margin: 0 7px 14px; background: #2a2c31; border-radius: 8px; overflow: hidden; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3); transition: transform 0.2s; } .card:hover { transform: translateY(-5px); } .poster { position: relative; width: 100%; padding-bottom: 130%; overflow: hidden; } .image { position: absolute; width: 100%; height: 100%; object-fit: cover; top: 0; left: 0; } .overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.5); opacity: 0; transition: opacity 0.3s ease; } .poster:hover .overlay { opacity: 1; } .info-left, .info-right { position: absolute; bottom: 10px; z-index: 3; } .info-left { left: 10px; } .info-right { right: 10px; } .btn, .btn-episode { font-size: 12px; font-family: Arial, sans-serif; font-weight: 600; padding: 4px 8px; border-radius: 5px; background: #fff; color: #111; margin-right: 4px; transition: background 0.3s; } .btn:hover, .btn-episode:hover { background: #e0e0e0; } .btn-episode { background: #7bfcfc; } .details { color: #aaa; font-size: 12px; padding: 10px; border-radius: 0 0 10px 10px; } .name { color: #fff; font-size: 14px; margin: 0; font-weight: 500; margin-bottom: 8px; line-height: 1.3em; } /* Play button styling */ .play-button { position: absolute; width: 40px; /* Adjust size as needed */ height: 40px; /* Adjust size as needed */ left: 50%; top: 50%; transform: translate(-50%, -50%); opacity: 0; /* Hide initially */ transition: opacity 0.5s; } .overlay:hover .play-button { opacity: 1; /* Show on hover */ } /* Responsive styles */ @media (max-width: 1024px) { .card { width: calc(25% - 14px); } } @media (max-width: 760px) { .card { width: calc(33% - 14px); } } @media (max-width: 480px) { .card { width: calc(50% - 6px); margin: 0 3px 6px; } } ===== config.js ===== // config.js const api = "https://aniwatch-api-net.vercel.app/api/v2/hianime/home"; // Your deployed API URL const search = "https://aniwatch-api-net.vercel.app/api/v2/hianime/search"; // Search API URL const details = "https://aniwatch-api-net.vercel.app/api/v2/hianime/anime"; // Your additional variable export default api; // Change to default export export { search, details }; // Export search and anotherVariable as named exports ===== desktop.html ===== AniTeams Slider

🎉 Welcome to AniTeams!

What's New:

  • ✨ Brand-new anime streaming page.
  • 🎨 Still powered by the trusted ArtPlayer.
  • 🆕 Completely revamped anime watching page.
  • 📈 Tons of new features to enhance your experience.

I hope you enjoy using this site!

Trending

Latest Episodes

===== details.css ===== /* Body Styles - Full-page blur with background fill */ body { font-family: Arial, sans-serif; margin: 0; padding: 0; color: #ffffff; background-size: cover; background-position: center; background-repeat: no-repeat; backdrop-filter: blur(30px); /* Stronger blur effect for the entire page */ background-color: rgba(0, 0, 0, 0.7); /* Subtle overlay for better contrast */ height: 100%; /* Full-page height */ width: 100%; /* Full-page width */ display: flex; flex-direction: column; align-items: center; justify-content: flex-start; overflow-x: hidden; } /* Poster Styling - Center and refine */ #poster { display: block; max-width: 300px; height: auto; margin: 20px auto; border-radius: 10px; box-shadow: 0 8px 15px rgba(0, 0, 0, 0.8); /* Shadow for better visibility */ transition: transform 0.3s, box-shadow 0.3s; } #poster:hover { transform: scale(1.05); /* Slight zoom effect on hover */ box-shadow: 0 10px 20px rgba(0, 0, 0, 1); } /* Title styling */ h1 { text-align: center; font-size: 2.5rem; margin: 20px 0; } /* Stats section styling */ .stats { display: flex; justify-content: center; gap: 30px; margin-bottom: 20px; } .icon { display: flex; align-items: center; gap: 5px; } .icon i { color: #ffcc00; } /* Buttons styling */ .buttons { display: flex; justify-content: center; gap: 20px; margin-bottom: 30px; } .btn { padding: 12px 25px; border: none; border-radius: 5px; font-size: 1.1rem; cursor: pointer; transition: all 0.3s; } .btn-watch { background-color: #6a5acd; color: white; text-decoration: none; } .btn-watch:hover { background-color: #7b68ee; } .btn-bookmark { background-color: #444444; color: white; } .btn-bookmark:hover { background-color: #666666; } /* Description container adjustments */ .description-text { max-width: 90%; margin: 0 auto 20px; text-align: center; line-height: 1.6; font-size: 1rem; } .read-toggle { color: #cccccc; font-weight: bold; cursor: pointer; } /* More info section styling */ .more-info { max-width: 90%; margin: 20px auto; padding: 15px; line-height: 1.8; font-size: 1rem; } .more-info div { margin-bottom: 15px; } .more-info span:first-child { font-weight: bold; color: #cccccc; } ===== details.html ===== Loading...
Anime Poster

Anime Title

Watch Now
Japanese Title:
Synonyms:
Aired:
Status:
Genres:
Studios:
===== details.js ===== import {details} from './config.js'; const urlParams = new URLSearchParams(window.location.search); const animeId = urlParams.get("id") || "defaultAnimeId"; const apiUrl = `${details}/${animeId}`; fetch(apiUrl) .then((response) => response.json()) .then((data) => { const anime = data?.data?.anime?.info; const moreInfo = data?.data?.anime?.moreInfo; if (!anime || !moreInfo) { console.error("Invalid API response structure:", data); alert("Failed to load anime details. Please try again later."); return; } // Set page title document.title = anime.name || "Anime Details"; // Set dynamic background image if (anime.poster) { document.body.style.backgroundImage = `url('${anime.poster}')`; } // Populate anime details document.getElementById("poster").src = anime.poster || ""; document.getElementById("animeTitle").textContent = anime.name || "Unknown Title"; document.getElementById("rating").textContent = anime.stats?.rating || "N/A"; document.getElementById("sub").textContent = anime.stats?.episodes?.sub ? `${anime.stats.episodes.sub} Sub` : "N/A"; document.getElementById("dub").textContent = anime.stats?.episodes?.dub ? `${anime.stats.episodes.dub} Dub` : "N/A"; const descText = document.getElementById("descText"); const readToggle = document.getElementById("readToggle"); const fullDescription = anime.description || "No description available."; let isExpanded = false; const truncateText = (text, limit) => text.split(" ").slice(0, limit).join(" ") + "..."; descText.textContent = truncateText(fullDescription, 10); readToggle.textContent = "Read More"; readToggle.addEventListener("click", () => { isExpanded = !isExpanded; descText.textContent = isExpanded ? fullDescription : truncateText(fullDescription, 10); readToggle.textContent = isExpanded ? "Read Less" : "Read More"; }); // More Info Section document.getElementById("japanese").textContent = moreInfo.japanese || "N/A"; document.getElementById("synonyms").textContent = moreInfo.synonyms || "N/A"; document.getElementById("aired").textContent = moreInfo.aired || "N/A"; document.getElementById("status").textContent = moreInfo.status || "N/A"; document.getElementById("genres").textContent = moreInfo.genres?.join(", ") || "N/A"; document.getElementById("studios").textContent = moreInfo.studios || "N/A"; // Watch Now Button const watchNowButton = document.getElementById("watchNow"); watchNowButton.href = `watch.html?id=${animeId}`; // Bookmark Button const bookmarkButton = document.getElementById("bookmark"); bookmarkButton.addEventListener("click", () => { const bookmarks = JSON.parse(localStorage.getItem("bookmarks") || "[]"); if (!bookmarks.includes(animeId)) { bookmarks.push(animeId); localStorage.setItem("bookmarks", JSON.stringify(bookmarks)); alert(`${anime.name || "This anime"} bookmarked!`); } else { alert("Already bookmarked!"); } }); }) .catch((error) => { console.error("Error fetching anime details:", error); alert("Failed to fetch anime details. Please try again later."); }); ===== google75e8df58c1460fdc.html ===== google-site-verification: google75e8df58c1460fdc.html ===== index.html ===== Device Detection
Detecting your device…
===== manag.html ===== Comic Book Reader
Comic Page
===== mobile.html ===== AniTeams Slider

🎉 Welcome to AniTeams!

What's New:

  • ✨ Brand-new anime streaming page.
  • 🎨 Still powered by the trusted ArtPlayer.
  • 🆕 Completely revamped anime watching page.
  • 📈 Tons of new features to enhance your experience.

I hope you enjoy using this site!

Trending Anime

Latest Episodes

===== player.html ===== AniTeams -Watch
===== search.css ===== * { box-sizing: border-box; } body, html { margin: 0; padding: 0; overflow-y: auto; overflow-x: auto; font-family: "Poppins", sans-serif; background-color: black; color: #FFBADE; } /* Header and Button Styling */ .bars { margin-left: 10px; cursor: pointer; transition: transform 0.3s ease; z-index: 101; display: flex; flex-direction: column; } .login{ background-color: blueviolet; padding: 12px 20px 12px 20px; border: 1px solid transparent; border-radius: 8px; color: white; cursor: pointer; margin-left: 30px; font-size: 18px; } .login:hover{ opacity: 0.8; } .login:active{ opacity: 0.4; } /* Responsive Container */ .container { display: flex; justify-content: flex-start; align-items: center; gap: 20px; max-width: 100%; padding: 10px; flex-wrap: wrap; color: white; } /* Search Bar */ #search-bar { padding: 10px; width: 100%; max-width: 300px; /* Restrict max-width for better responsiveness */ border-radius: 10px; outline: none; border: 1px solid black; font-family: 'Poppins', sans-serif; } #search-bar::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none; display: none; } /* Navigation Links */ .nav-links { text-decoration: none; position: relative; color: white; } .nav-links::after { content: ""; position: absolute; height: 2px; left: 0; bottom: -3px; width: 0; background-color: white; transition: width 200ms ease-in-out; } .nav-links:hover::after { width: 70%; } /* Menu Items */ .menu ul li a { text-decoration: none; font-size: 16px; color: #FFFF; margin-left: 10px; cursor: pointer; } .menu ul li a:hover { color: blue; } .menu ul li a{ text-decoration: none; font-size: 16px; color: #FFFF; margin-left: 10px; margin-left: -20px; } .menu ul li a:hover{ color: blue; } .sidebar{ position: fixed; list-style: none; gap: 20px; top: 0; left: 0; height: 100vh; width: 40vh; z-index: 999; background-color: rgba(128, 0, 128, 0.347); display: flex; flex-direction: column; align-items: flex-start; justify-content: flex-start; backdrop-filter: blur(10px); } .closemenu{ background-color: transparent; border: none; font-size: 15px; color: #FFFF; margin-top: 20px; cursor: pointer; margin-top: 30px; margin-left: 10px; margin-left: -20px; } @media (max-width: 412px){ .nav-links{ display: none; } .container { flex-direction: column; align-items: center; flex-wrap: wrap; } h2 span{ position: absolute; left: 130px; top: 80px; font-size: 30px; } .category-filter{ max-width: 412px; overflow-x: hidden; } #search-bar{ transform: translateX(60px); width: 260px !important; } .login{ transform: translateY(-200px) translateX(320px); margin-right: 10px; padding: 12px !important; font-size: 13px !important;} } @media (max-width: 570px){ .container{ display: flex; justify-content: flex-start; flex-wrap: wrap; } .category-filter{ max-width: 570px; overflow-x: hidden; } .bars{ margin-top: 20px; margin-right: 10px; } #search-bar{ display: flex; flex-grow: 1; margin-top: 10px; } .login{ margin-top: 20px; } } /* Responsive Styling */ @media (max-width: 768px) { .container { gap: 20px; flex-wrap: wrap; } .login { font-size: 13px; padding: 8px 12px; } #search-bar { max-width: 200px; } .category-filter{ max-width: 768px; overflow-x: hidden; } } @media (max-width: 612px) { .container { /* Stack items vertically */ align-items: flex-start; justify-content: center; flex-wrap: wrap; } .nav-links{ display: none; } .login { font-size: 12px; padding: 6px 10px; margin-left: 0; /* Align centrally */ } #search-bar { max-width: 100%; width: auto; } .bars { margin-left: 0; align-self: flex-start; } .category-filter{ max-width: 612px; overflow-x: hidden; } } @media screen and (max-width: 360px) { .container{ flex-wrap: wrap; } .category-filter{ max-width: 360px; overflow-x: hidden; } h2 span{ transform: translateX(-25px); font-size: 30px; } #search-bar{ transform: translateX(30px); width: 270px !important; } .login{ transform: translateY(-200px) translateX(278px); margin-right: 10px; padding: 12px !important; font-size: 13px !important; } } .category-filter { display: block; /* Ensures it occupies the full width and aligns vertically */ margin-bottom: 20px; /* Adds space below the filter */ position: relative; /* Ensures it stays in the natural document flow */ width: 100%; /* Makes the filter take up the full width of its container */ height: auto; /* Allows the height to adjust automatically based on content */ top: auto; /* Removes any top alignment (if previously set) */ translate: none; /* Removes translate positioning (if previously set) */ z-index: 2; } select{ appearance: none; /* Removes default styling */ background-color: transparent; color: #ffb6c1; padding: 5px; border: none; cursor: pointer; margin-left: 5px; outline: none; font-size: 13px; } select:active{ border: none; } div p{ font-size: 20px; color: white; } .filter-options { display: flex; flex-wrap: wrap; gap: 10px; /* Space between the filter items */ color: white; margin-top: 10px; } .filter-item { display: flex; flex-direction: row; flex-wrap: wrap; padding: 10px 15px 10px 10px; border: 1px solid #ffb6c1; border-radius: 5px; margin-top: 10px; } .filter-item label { font-size: 14px; /* Adjust label font size if needed */ color: white; /* Match your theme color */ margin-bottom: 1px; font-size: 15px; } option { background-color: #3c3b51; /* Dark option background */ color: #f5f5f5; /* Light text color */ padding: 8px; font-size: 13px; text-align: center; } .start-month{ margin-left: 3px; text-align: center; } .genre-filter p{ display: block; position: relative; top: 20%; margin-right: 50em; } .ni-list { margin-top: 10px; display: flex; flex-wrap: wrap; /* Allows the items to wrap to the next line if necessary */ gap: 10px; /* Adds space between the genre items */ } .f-genre-item{ font-size: 13px; display: flex; justify-content: center; align-items: center; position: relative; row-gap: 6px; flex-direction: row; flex-wrap: wrap; cursor: pointer; padding: 10px 10px 10px 10px; border: 1px solid #ffb6c1; border-radius: 6px; text-align: center; } .f-genre-item.active { /* or any other styling to indicate selection */ color: white; position: relative; display: flex; justify-content: center; align-items: center; border: 1px solid #ffb6c1; border-radius: 6px; background-color: transparent; } .f-genre-item.active::after{ content: ""; border: none; display: none; position: absolute; width: 100%; height: 100%; background-image: linear-gradient(to bottom right, rgb(126, 27, 218), #e100ff); border-radius: 6px; z-index: -999; } .f-genre-item.active:active::after{ border: none; display: flex; } .f-genre-item.active:active{ z-index: 5; border: none; } .f-genre-item:active:not(.f-genre-item.active:active){ background-image: linear-gradient(to bottom right, rgb(126, 27, 218), #e100ff); border: none; } .filter-button-con{ display: inline-flex; } .filter-button{ padding: 13px 13px 13px 13px; border-radius: 6px; display: flex; justify-content: center; align-items: center; position: relative; border: none; background-color: #3c3b51; color: white; font-size: 15px; top: -10px; margin-right: 1em; margin-top: 1em; margin-left: 1em; cursor: pointer; } .filter-button::after{ content: ""; border: none; position: absolute; width: 100%; height: 100%; background-image: linear-gradient(to bottom right, rgb(126, 27, 218), #e100ff); border-radius: 6px; z-index: -1; } .filter-button:hover{ z-index: 0; } .filter-button:active{ opacity: 0.4; } .f-genre-item.selected { background-color: #e100ff; /* Persistent highlight color */ color: white; /* Ensure text remains visible */ border-color: #e100ff; /* Optional: Update border color */ } ===== search.html ===== Aniteams-Filter

Filter

Genre

Loading
===== stylesheet.css ===== /* General Reset */ * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: 'Poppins', sans-serif; background-color: #000000; } } /* Header Styling */ header { position: absolute; top: 0; left: 0; width: 100%; z-index: 10; background-color: transparent; display: flex; justify-content: space-between; align-items: center; padding: 1em; } /* Navbar (contains sidebar toggle) */ .navbar { background-color: transparent; display: flex; align-items: center; } /* Sidebar Toggle (Hamburger) */ .bars { margin-left: 10px; cursor: pointer; transition: transform 0.3s ease; z-index: 101; /* Ensure it’s on top */ display: flex; flex-direction: column; } .bar1, .bar2, .bar3 { width: 25px; height: 3px; background-color: white; margin: 5px 0; transition: 0.4s; } /* Bars transform to X when open */ .bars.open .bar1 { transform: rotate(45deg) translate(5px, 5px); } .bars.open .bar2 { opacity: 0; } .bars.open .bar3 { transform: rotate(-45deg) translate(5px, -5px); } /* Header Extras (Magnifying Glass & Login Button) */ .header-extras { display: flex; align-items: center; gap: 15px; position: absolute; top: 1em; right: 1em; } /* Magnifying Glass Icon */ .css-icon-search { display: inline-block; width: 12px; height: 12px; border: 2px solid white; position: relative; border-radius: 100%; cursor: pointer; } .css-icon-search::before { content: ""; display: inline-block; position: absolute; right: -7px; bottom: -3px; background: white; width: 10px; height: 2px; transform: rotate(45deg); } /* Login Button */ .login { background-color: blue; padding: 12px 20px; border-radius: 10px; color: white; cursor: pointer; font-size: 15px; transition: opacity 0.3s ease; } .login:hover { opacity: 0.8; } .login:active { opacity: 0.4; } /* Sidebar / Side Menu */ .side-menu { position: fixed; display: flex; flex-direction: column; top: 0; left: 0; height: 100vh; width: 260px; background-color: #2a2c31; transform: translateX(-350px); /* Default: hidden */ overflow-y: auto; gap: 1em; z-index: 5; transition: transform 500ms ease; padding: 1em; } .side-menu.open { transform: translateX(0); /* Visible when open */ } @media only screen and (max-width: 860px) { .side-menu { width: 300px; } } /* Close Button */ .close-button { display: flex; justify-content: center; align-items: center; background-color: #4a4b51; border-radius: 20px; width: 110px; padding: 0.8em 0; margin: 2em 0 0 1em; line-height: 12px; color: #fff; font-weight: 500; gap: 0.3em; cursor: pointer; } /* Link Styling */ .nav-list .item a { text-decoration: none; /* Remove underline */ color: inherit; /* Maintain the item's original color */ transition: color 0.3s ease; /* Smooth color transition */ } .nav-list .item a:hover { color: #f0f0f0; /* Hover effect for a slight lightening */ } /* Sidebar List Styling */ .nav-list { display: flex; flex-direction: column; margin-top: 0.5em; margin-bottom: 1em; } .item { display: flex; flex-direction: column; width: 100%; border-bottom: 1px solid rgba(255, 255, 255, 0.05); position: relative; padding: 1em; font-size: 14px; font-weight: 600; color: #fff; } /* Sidebar Item Hover Effect */ .item:hover { background255, 255, 255, 0.1); /* Add a subtle background color on hover */ border-radius: 8px; } /* Genre List */ .genre-list { display: flex; flex-wrap: wrap; font-size: 12px; } .genre-item { padding: 6px 15px; width: 49%; margin-right: 1%; cursor: pointer; } .genre-item:nth-of-type(7n + 1) { color: #d0e6a5; } .genre-item:nth-of-type(7n + 2) { color: #ffdd95; } .genre-item:nth-of-type(7n + 3) { color: #fc887b; } .genre-item:nth-of-type(7n + 4) { color: #ccabda; } .genre-item:nth-of-type(7n + 5) { color: #abccd8; } .genre-item:nth-of-type(7n + 6) { color: #d8b2ab; } .genre-item:nth-of-type(7n) { color: #86e3ce; } /* Mobile Adjustments */ @media (max-width: 768px) { .nav-links, .login { display: none; } /* Hide search bar in mobile */ #search-bar { display: none; } /* Sidebar Menu on Mobile */ .menu { display: flex; position: fixed; top: 0; left: 0; height: 100vh; width: 250px; background-color: rgba(0, 0, 0, 0.9); flex-direction: column; align-items: flex-start; padding: 2rem; transform: translateX(-100%); transition: transform 0.3s ease; z-index: 100; } .menu.show { transform: translateX(0); } .menu a, .menu .login { padding: 10px 0; font-size: 20px; color: white; text-align: left; } .menu a:hover { color: lightblue; } } /*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /* -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /* Slide section beign */ body { background: #000000; font-family: 'Montserrat', Arial, sans-serif; color: #fff; margin: 0; padding: 0; -webkit-text-size-adjust: none; } /* Global Swiper Styles */ .swiper { position: relative; display: flex; width: 100%; height: 600px; overflow: hidden; z-index: 1; } @media screen and (max-width: 1400px) { .swiper { height: 570px; } } @media screen and (max-width: 1299px) { .swiper { height: 500px; } } @media screen and (max-width: 759px) { .swiper { height: 350px; } } /* Ensure all slides are positioned and use opacity for the fade effect */ .slide { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 1s ease-in-out; z-index: 0; } /* The currently active slide */ .fade-in { opacity: 1; z-index: 1; } /* The transitioning-out slide */ .fade-out { opacity: 0; z-index: 0; } /* Image Container Styles */ .img-container::before { content: ""; z-index: 1; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(90deg, #202125 0, rgba(32, 33, 37, 0.6) 40%, rgba(32, 33, 37, 0) 60%, rgba(32, 33, 37, 0) 80%, #202125 100%); } .img-container::after { content: ""; z-index: 1; position: absolute; top: 0; left: 0; right: 0; bottom: -1px; background: linear-gradient(0deg, #202125 0, rgba(32, 33, 37, 0) 50%, #202125 100%); } @media screen and (max-width: 759px) { .img-container::after { background: linear-gradient(0deg, #202125 0, rgba(32, 33, 37, 0) 82%); } .img-container::before { opacity: 0; } } /* Image Styles */ .img { width: 100%; height: 100%; position: absolute; object-fit: cover; } @media screen and (max-width: 759px) { .img { opacity: 0.5; } } /* Content Container Styles */ .content { z-index: 1; width: 600px; height: 100%; position: absolute; display: flex; justify-content: flex-end; flex-direction: column; color: #cae962; left: 2em; bottom: 2em; padding-bottom: 3em; bottom: 0 !important; } @media screen and (max-width: 1200px) { .content { width 50%; } } @media screen and (max-width: 759px) { .content { width: 100%; padding-right: 100px; box-shadow: none; background: rgb(0, 0, 0, 0); } } @media screen and (max-width: 480px) { .content { padding-right: 10px; left: 10px; } } /* Rank Styles */ .rank { color: #cae962; font-size: 14px; font-family: "Ubuntu", sans-serif; font-weight: bolder; text-transform: uppercase; } @media screen and (max-width: 1200px) { .rank { font-size: 1px; } } @media screen and (max-width: 480px) { .rank { font-size: 10px; } } /* Title Styles */ .title { font-family: "Ubuntu", sans-serif; color: #fff; letter-spacing: 2px; margin-bottom: 20px; font-size: 50px; } @media screen and (max-width: 1200px) { .title { font-size: 30px; line-height: 1.1em; -webkit-line-clamp: 2; } } @media screen and (max-width: 759px) { .title { font-size: 30px; line-height: 1.1em; -webkit-line-clamp: 2; margin-bottom: 5px; } } @media screen and (max-width: 480px) { .title { font-size: 25px; margin-bottom: 0px; } } /* Icons Styles */ .icons { display: flex; gap: 1em; font-size: 14px; align-items: center; margin: 0 1em; /* Add margin to ensure icons do not touch the screen edges */ } @media screen and (max-width: 759px) { .icons { display: none; } } .icon { display: flex; align-items: center; gap: 0.3em; color: #fff; white-space: nowrap; /* Prevent text from wrapping */ } .icon-span { display: inline-block; padding: 3px 4px; background: #cae962; color: #111; border-radius: 5px; line-height: 1em; font-weight: 600; font-size: 12px; } /* Description Styles */ .description { display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; font-family: "Poppins", sans-serif; color: #fff; font-size: 16px; margin: 2em 0; } @media screen and (max-width: 1299px) { .description { line-height: 1.1em; -webkit-line-clamp: 2; } } @media screen and (max-width: 480px) { .description { font-size: 13px; width: 80%; } } /* Watch Button Styles */ .watch-btn { display: flex; align-items: center; gap: 1em; } @media screen (max-width: 320px) { .watch-btn { flex-wrap: wrap; } } .watch-link { display: flex; align-items: center; gap: 0.3em; padding: 0.7rem 1em; background-color: #cae962; color: #111; font-size: 18px; border-radius: 30px; font-family: "Ubuntu", sans-serif; text-decoration: none; } @media screen and (max-width: 1200px) { .watch-link { font-size: 16px; } } @media screen and (max-width: 480px) { .watch-link { font-size: 12px; padding-inline: 1.2rem; } } .detail-link { display: flex; align-items: center; padding: 0.7rem 1em; background-color: #4a4b51; color: #fff; gap: 0.3em; font-size: 18px; border-radius: 30px; font-family: "Ubuntu", sans-serif; text-decoration: none; } @media screen and (max-width: 1200px) { .detail-link { font-size: 16px; } } @media screen and (max-width: 480px) { .detail-link { font-size: 12px; padding-inline: 1.2rem; } } /* Fade In/Out Effects */ .fade { display: none; opacity: 0; transition: opacity 1s ease-in-out; } /* Slide section end */ /*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /* Trending */ .trending { display: inline-block; font-size: 30px; font-family: 'Poppins', sans-serif; font-weight: bolder; } /* Trending cards */ /* General Styles for the Trending Section */ .card-section { width: 100%; overflow-x: auto; /* Allow horizontal scrolling */ overflow-y: hidden; /* Hide vertical scrollbar */ padding: 20px 0; /* Adjust padding as needed */ } /* Anime Cards Container */ .anime-cards { display: flex; width: max-content; /* Allow the width to grow with content */ gap: 20px; /* Space between cards */ scroll-behavior: smooth; /* Smooth scrolling */ flex-wrap: nowrap; /* Prevent wrapping of cards */ justify-content: flex-start; /* Align cards to the start */ position: relative; /* Ensure correct positioning */ } /* Individual Card Styling */ .anime-card { background-color: #202125; /* Card background color */ border-radius: 8px; /* Rounded corners */ overflow: hidden; /* Prevent overflow of content */ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.5); /* Card shadow */ transition: transform 0.3s ease; /* Transition effect on hover */ width: 200px; /* Fixed width of each card */ flex-shrink: 0; /* Prevent cards from shrinking */ position: relative; /* Relative positioning for inner elements */ text-align: center; /* Center text in card */ } /* Hover Effect for Cards */ .anime-card:hover { transform: scale(1.05); /* Scale up on hover */ } /* Card Image Styling */ .anime-card img { width: 100%; /* Full width image */ border-bottom: 2px solid #7354e7; /* Bottom border for the image */ } /* Description Text Styling */ .description-text { color: #FFBADE; /* Description text color */ font-family: "Poppins", sans-serif; /* Font family */ font-size: 16px; /* Font size */ margin: 10px 0; /* Margin above and below text */ } /* Mobile Responsiveness */ @media screen and (max-width: 480px) { .anime-cards { flex-wrap: wrap; /* Allow wrapping on smaller screens */ justify-content: center; /* Center cards */ gap: 10px; /* Reduce the gap between cards */ } .anime-card { width: 40%; /* Make cards smaller on mobile */ margin-bottom: 10px; /* Margin below each card */ } .description-text { font-size: 14px; /* Slightly smaller font for descriptions */ } } /* Scrollbar Styling */ .card-section::-webkit-scrollbar { height: 8px; /* Height of the scrollbar */ } .card-section::-webkit-scrollbar-thumb { background-color: #7354e7; /* Color of the scrollbar thumb */ border-radius: 4px; /* Rounded edges for the thumb */ } .card-section::-webkit-scrollbar-track { background: #121212; /* Color of the scrollbar track */ } /* Firefox Scrollbar Styling */ .card-section { scrollbar-width: thin; /* For Firefox, make scrollbar thin */ scrollbar-color: #7354e7 #121212; /* Thumb color and track color */ } /*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /* Latest Episodes */ .card-container { display: flex; flex-wrap: wrap; justify-content: space-between; } .card { width: calc(16.66% - 14px); margin: 0 7px 14px; background: #2a2c31; border-radius: 8px; overflow: hidden; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3); transition: transform 0.2s; } .card:hover { transform: translateY(-5px); } .poster { position: relative; width: 100%; padding-bottom: 130%; overflow: hidden; } .image { position: absolute; width: 100%; height: 100%; object-fit: cover; top: 0; left: 0; } .overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.5); opacity: 0; transition: opacity 0.3s ease; } .poster:hover .overlay { opacity: 1; } .info-left, .info-right { position: absolute; bottom: 10px; z-index: 3; } .info-left { left: 10px; } .info-right { right: 10px; } .btn, .btn-episode { font-size: 12px; font-family: Arial, sans-serif; font-weight: 600; padding: 4px 8px; border-radius: 5px; background: #fff; color: #111; margin-right: 4px; transition: background 0.3s; } .btn:hover, .btn-episode:hover { background: #e0e0e0; } .btn-episode { background: #7bfcfc; } .details { color: #aaa; font-size: 12px; padding: 10px; border-radius: 0 0 10px 10px; } .name { color: #fff; font-size: 14px; margin: 0; font-weight: 500; margin-bottom: 8px; line-height: 1.3em; } /* Play button styling */ .play-button { position: absolute; width: 40px; /* Adjust size as needed */ height: 40px; /* Adjust size as needed */ left: 50%; top: 50%; transform: translate(-50%, -50%); opacity: 0; /* Hide initially */ transition: opacity 0.5s; } .overlay:hover .play-button { opacity: 1; /* Show on hover */ } /* Responsive styles */ @media (max-width: 1024px) { .card { width: calc(25% - 14px); } } @media (max-width: 760px) { .card { width: calc(33% - 14px); } } @media (max-width: 480px) { .card { width: calc(50% - 6px); margin: 0 3px 6px; } } ===== watch.html ===== Anime Watching Page
===== read.html ===== Comic Book Reader
Comic Page
===== read.js ===== // Fetch the comicId from the URL parameters const urlParams = new URLSearchParams(window.location.search); const comicId = urlParams.get('id'); // Get the 'id' parameter from the URL let currentPage = 1; let totalPages = 0; let pages = []; const imageElement = document.getElementById('comic-image'); const loadingSpinner = document.getElementById('loading-spinner'); const progressBarChunk = document.querySelector('.progress-chunk'); const chapterList = document.getElementById('chapter-list'); const floatingMenu = document.getElementById('floating-menu'); document.getElementById('toggle-menu').addEventListener('click', (event) => { const isVisible = chapterList.style.display === 'flex'; chapterList.style.display = isVisible ? 'none' : 'flex'; event.stopPropagation(); // Prevent the click from propagating to the body }); document.body.addEventListener('click', (event) => { if (!floatingMenu.contains(event.target)) { chapterList.style.display = 'none'; } }); const fullscreenButton = document.getElementById('fullscreen-btn'); fullscreenButton.addEventListener('click', () => { if (!document.fullscreenElement) { document.documentElement.requestFullscreen(); } else { document.exitFullscreen(); } }); function showLoading() { loadingSpinner.style.display = 'block'; imageElement.classList.remove('loaded'); } function hideLoading() { loadingSpinner.style.display = 'none'; imageElement.classList.add('loaded'); } async function fetchChapters() { try { const response = await fetch(`https://api-consumet-org-gamma.vercel.app/manga/mangadex/info/${comicId}`); const data = await response.json(); if (data.chapters && Array.isArray(data.chapters)) { console.log('Chapters fetched successfully'); populateChapters(data.chapters); } else { console.error('Error: API response does not contain a "chapters" array.'); } } catch (error) { console.error('Error fetching chapters:', error); } } function populateChapters(chapters) { chapters.forEach((chapter, index) => { const chapterButton = document.createElement('button'); chapterButton.textContent = `Chapter ${index + 1}`; chapterButton.addEventListener('click', () => fetchPagesForChapter(chapter.id)); chapterList.appendChild(chapterButton); }); } async function fetchPagesForChapter(chapterId) { try { const response = await fetch(`https://api-consumet-org-gamma.vercel.app/manga/mangadex/read/${chapterId}`); pages = await response.json(); totalPages = pages.length; preloadImages(pages.map(page => page.img)); displayPages(pages); } catch (error) { console.error('Error fetching pages:', error); } } function displayPages(pages) { currentPage = 1; updateReader(); } function updateReader() { if (currentPage > 0 && currentPage <= totalPages) { showLoading(); imageElement.onload = hideLoading; imageElement.src = pages[currentPage - 1].img; updateProgressBar(); } } function updateProgressBar() { const progress = (currentPage / totalPages) * 100; progressBarChunk.style.width = `${progress}%`; } function preloadImages(pageUrls) { pageUrls.forEach((url) => { const img = new Image(); img.src = url; }); } document.getElementById('prev-btn').addEventListener('click', () => { if (currentPage > 1) { currentPage--; updateReader(); } }); document.getElementById('next-btn').addEventListener('click', () => { if (currentPage < totalPages) { currentPage++; updateReader(); } }); // Call fetchChapters to load chapters based on the comicId from the URL if (comicId) { fetchChapters(); } else { console.error('Error: comicId is not provided in the URL parameters.'); }