├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── custom.md │ └── feature_request.md └── dependabot.yml ├── .gitignore ├── .replit ├── CODE_OF_CONDUCT.md ├── LICENSE ├── Procfile ├── README.md ├── SECURITY.md ├── app.json ├── app.py ├── cache_purge_jsdeliver.py ├── config.py ├── index.py ├── main.py ├── minify.py ├── poetry.lock ├── pyproject.toml ├── replit.nix ├── requirements.txt ├── screenshots ├── anime.jpeg ├── episode.png ├── home.jpeg └── search.jpeg ├── static ├── css │ ├── anime.css │ ├── anime_min.css │ ├── episode.css │ ├── episode_min.css │ ├── home.css │ ├── home_min.css │ ├── search.css │ └── search_min.css ├── img │ ├── cover.jpg │ ├── favicon-5.png │ ├── favicon.ico │ ├── header.png │ ├── headerr.png │ ├── loading.gif │ └── loading2.gif └── robots.txt ├── templates ├── anime.html ├── anime_min.html ├── embed.html ├── embed_min.html ├── episode.html ├── episode_min.html ├── home.html ├── home_min.html ├── search.html ├── search_min.html ├── vid.html └── vid_min.html ├── utils ├── anilist.py ├── anime_loader.py ├── db.py ├── html_gen.py ├── others.py └── techzapi.py ├── vercel.json └── wsgi.py /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | test.py 3 | *tempCodeRunnerFile.py 4 | t.py 5 | templates/a.html 6 | test.txt 7 | -------------------------------------------------------------------------------- /.replit: -------------------------------------------------------------------------------- 1 | # The command that runs the program. If the interpreter field is set, it will have priority and this run command will do nothing 2 | run = "python3 main.py" 3 | 4 | # The primary language of the repl. There can be others, though! 5 | language = "python3" 6 | entrypoint = "main.py" 7 | # A list of globs that specify which files and directories should 8 | # be hidden in the workspace. 9 | hidden = ["venv", ".config", "**/__pycache__", "**/.mypy_cache", "**/*.pyc"] 10 | 11 | # Specifies which nix channel to use when building the environment. 12 | [nix] 13 | channel = "stable-21_11" 14 | 15 | # The command to start the interpreter. 16 | [interpreter] 17 | [interpreter.command] 18 | args = [ 19 | "stderred", 20 | "--", 21 | "prybar-python3", 22 | "-q", 23 | "--ps1", 24 | "\u0001\u001b[33m\u0002\u0001\u001b[00m\u0002 ", 25 | "-i", 26 | ] 27 | env = { LD_LIBRARY_PATH = "$PYTHON_LD_LIBRARY_PATH" } 28 | 29 | [env] 30 | VIRTUAL_ENV = "/home/runner/${REPL_SLUG}/venv" 31 | PATH = "${VIRTUAL_ENV}/bin" 32 | PYTHONPATH = "${VIRTUAL_ENV}/lib/python3.10/site-packages" 33 | REPLIT_POETRY_PYPI_REPOSITORY = "https://package-proxy.replit.com/pypi/" 34 | MPLBACKEND = "TkAgg" 35 | POETRY_CACHE_DIR = "${HOME}/${REPL_SLUG}/.cache/pypoetry" 36 | 37 | # Enable unit tests. This is only supported for a few languages. 38 | [unitTest] 39 | language = "python3" 40 | 41 | # Add a debugger! 42 | [debugger] 43 | support = true 44 | 45 | # How to start the debugger. 46 | [debugger.interactive] 47 | transport = "localhost:0" 48 | startCommand = ["dap-python", "main.py"] 49 | 50 | # How to communicate with the debugger. 51 | [debugger.interactive.integratedAdapter] 52 | dapTcpAddress = "localhost:0" 53 | 54 | # How to tell the debugger to start a debugging session. 55 | [debugger.interactive.initializeMessage] 56 | command = "initialize" 57 | type = "request" 58 | 59 | [debugger.interactive.initializeMessage.arguments] 60 | adapterID = "debugpy" 61 | clientID = "replit" 62 | clientName = "replit.com" 63 | columnsStartAt1 = true 64 | linesStartAt1 = true 65 | locale = "en-us" 66 | pathFormat = "path" 67 | supportsInvalidatedEvent = true 68 | supportsProgressReporting = true 69 | supportsRunInTerminalRequest = true 70 | supportsVariablePaging = true 71 | supportsVariableType = true 72 | 73 | # How to tell the debugger to start the debuggee application. 74 | [debugger.interactive.launchMessage] 75 | command = "attach" 76 | type = "request" 77 | 78 | [debugger.interactive.launchMessage.arguments] 79 | logging = {} 80 | 81 | # Configures the packager. 82 | [packager] 83 | language = "python3" 84 | ignoredPackages = ["unit_tests"] 85 | 86 | [packager.features] 87 | enabledForHosting = false 88 | # Enable searching packages from the sidebar. 89 | packageSearch = true 90 | # Enable guessing what packages are needed from the code. 91 | guessImports = true 92 | 93 | # These are the files that need to be preserved when this 94 | # language template is used as the base language template 95 | # for Python repos imported from GitHub 96 | [gitHubImport] 97 | requiredFiles = [".replit", "replit.nix", ".config", "venv"] 98 | 99 | [languages] 100 | 101 | [languages.python3] 102 | pattern = "**/*.py" 103 | 104 | [languages.python3.languageServer] 105 | start = "pylsp" 106 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | https://t.me/TechZBots_Support. 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at 119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 120 | 121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 122 | enforcement ladder](https://github.com/mozilla/diversity). 123 | 124 | [homepage]: https://www.contributor-covenant.org 125 | 126 | For answers to common questions about this code of conduct, see the FAQ at 127 | https://www.contributor-covenant.org/faq. Translations are available at 128 | https://www.contributor-covenant.org/translations. 129 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 TechShreyash 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn main:app -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## ⚠️ Note: This project is no longer managed. Use [AnimeDexLite](https://github.com/TechShreyash/AnimeDexLite) Instead 2 | 3 | AnimeDexLite is a new version of AnimeDex built using html, css and js 4 | - Repo : https://github.com/TechShreyash/AnimeDexLite 5 | 6 | 7 | 8 | 9 | ### 👤 Contact Me 10 | 11 | [![Telegram Channel](https://img.shields.io/static/v1?label=Join&message=Telegram%20Channel&color=blueviolet&style=for-the-badge&logo=telegram&logoColor=violet)](https://telegram.me/TechZBots) [![Telegram Group](https://img.shields.io/static/v1?label=Join&message=Telegram%20Group&color=blueviolet&style=for-the-badge&logo=telegram&logoColor=violet)](https://telegram.me/TechZBots_Support) 12 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | | Version | Supported | 6 | | ------- | ------------------ | 7 | | 1.5.x | :white_check_mark: | 8 | | < 1.5.1 | :x: | 9 | 10 | ## Reporting a Vulnerability 11 | 12 | Report Vulnerability To Us On Our Official Telegram Group https://t.me/TechZBots_Support 13 | 14 | Or Create A Issue In This Repo 15 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AnimeDex", 3 | "description": "Watch Animes Online For Free", 4 | "repository": "https://github.com/TechShreyash/AnimeDex", 5 | "logo": "https://cdn.jsdelivr.net/gh/TechShreyash/AnimeDex@main/static/img/favicon.ico", 6 | "keywords": [ 7 | "python", 8 | "flask website", 9 | "anime", 10 | "gogo", 11 | "anime-website", 12 | "anime-downloader", 13 | "anime-scraper", 14 | "gogoanime", 15 | "anime-streaming", 16 | "zoro ", 17 | "heroku", 18 | "gogoanime-scraper", 19 | "animedex" 20 | ], 21 | "env": { 22 | "API_KEY": { 23 | "description": "Your TechZApi Key, Get from https://telegram.me/TechZApiBot", 24 | "value": "", 25 | "required": true 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | from utils.db import update_views, update_watch 2 | from utils.html_gen import ( 3 | animeRecHtml, 4 | animeRecHtml2, 5 | episodeHtml, 6 | get_eps_html, 7 | get_eps_html2, 8 | get_recent_html, 9 | get_search_html, 10 | get_selector_btns, 11 | get_genre_html, 12 | get_trending_html, 13 | slider_gen, 14 | ) 15 | from flask import Flask, render_template, request, redirect, send_file 16 | from utils.anilist import Anilist 17 | from utils.others import get_atitle, get_other_title, get_studios, get_t_from_u 18 | from utils.techzapi import TechZApi 19 | from config import API_KEY 20 | 21 | app = Flask(__name__) 22 | TechZApi = TechZApi(API_KEY) 23 | 24 | 25 | @app.route("/favicon.ico") 26 | def favicon(): 27 | return redirect( 28 | "https://cdn.jsdelivr.net/gh/TechShreyash/AnimeDex@main/static/img/favicon.ico" 29 | ) 30 | 31 | 32 | @app.route("/") 33 | def home(): 34 | html = render_template("home_min.html") 35 | div1 = get_trending_html(TechZApi.top_animedex()) 36 | div2 = get_recent_html(TechZApi.gogo_latest()) 37 | sliders = slider_gen() 38 | 39 | html = ( 40 | html.replace("MOST_POPULAR", div1) 41 | .replace("RECENT_RELEASE", div2) 42 | .replace("SLIDERS", sliders) 43 | ) 44 | update_views("home-animedex") 45 | return html 46 | 47 | 48 | @app.route("/anime/") 49 | def get_anime(anime): 50 | try: 51 | data = TechZApi.gogo_anime(anime) 52 | TITLE = data.get("title") 53 | IMG = data.get("img") 54 | LANG = data.get("lang") 55 | TYPE = data.get("type") 56 | WATCHNOW = "/episode/" + data.get("id") + "/1" 57 | OTHER = data.get("other name") 58 | TOTAL = str(data.get("total_ep")) 59 | YEAR = data.get("year") 60 | STATUS = data.get("status") 61 | STUDIO = "?" 62 | GENERES = get_genre_html(data.get("genre").split(",")) 63 | SYNOPSIS = data.get("summary") 64 | 65 | x = anime.lower() 66 | if x.endswith("-dub"): 67 | x = x[:-4] 68 | if x.endswith("-sub"): 69 | x = x[:-4] 70 | x = get_t_from_u(x).replace("-", " ") 71 | 72 | try: 73 | DISPLAY_ANIME = animeRecHtml(Anilist().get_recommendation(x)) 74 | except: 75 | DISPLAY_ANIME = "" 76 | EPISODES = get_eps_html(data=data.get("episodes")) 77 | 78 | html = render_template( 79 | "anime_min.html", 80 | IMG=IMG, 81 | TITLE=TITLE, 82 | LANG=LANG, 83 | TYPE=TYPE, 84 | WATCHNOW=WATCHNOW, 85 | OTHER=OTHER, 86 | TOTAL=TOTAL, 87 | YEAR=YEAR, 88 | STATUS=STATUS, 89 | STUDIO=STUDIO, 90 | ) 91 | except: 92 | anime = anime.lower() 93 | if anime.endswith("-dub"): 94 | anime = anime[:-4] 95 | if anime.endswith("-sub"): 96 | anime = anime[:-4] 97 | anime = get_t_from_u(anime).replace("-", " ") 98 | data = Anilist().anime(anime) 99 | 100 | IMG = data.get("coverImage").get("medium").replace("small", "medium") 101 | if not IMG: 102 | IMG = data.get("bannerImage") 103 | TITLE = get_atitle(data.get("title")) 104 | SYNOPSIS = data.get("description") 105 | OTHER = get_other_title(data.get("title")) 106 | STUDIO = get_studios(data.get("studios").get("nodes")) 107 | TOTAL = str(data.get("episodes")) 108 | GENERES = get_genre_html(data.get("genres")) 109 | DISPLAY_ANIME = animeRecHtml2(data.get("recommendations").get("edges")) 110 | 111 | try: 112 | EPISODES, id = get_eps_html(api=TechZApi, anime=TITLE) 113 | except: 114 | EPISODES, id = "", "#" 115 | 116 | SEASON = str(data.get("season")) + " " + str(data.get("seasonYear")) 117 | YEAR = data.get("seasonYear") 118 | TYPE = data.get("format") 119 | STATUS = data.get("status") 120 | WATCHNOW = "/episode/" + id + "/1" 121 | 122 | html = render_template( 123 | "anime_min.html", 124 | IMG=IMG, 125 | TITLE=TITLE, 126 | LANG=TYPE, 127 | TYPE=SEASON, 128 | WATCHNOW=WATCHNOW, 129 | OTHER=OTHER, 130 | TOTAL=TOTAL, 131 | YEAR=YEAR, 132 | STATUS=STATUS, 133 | STUDIO=STUDIO, 134 | ) 135 | 136 | html = html.replace("GENERES", GENERES) 137 | html = html.replace("EPISODES", EPISODES) 138 | html = html.replace("DISPLAY_ANIME", DISPLAY_ANIME) 139 | html = html.replace("SYNOPSIS", SYNOPSIS) 140 | update_views(anime) 141 | return html 142 | 143 | 144 | @app.route("/episode//") 145 | def get_episode(anime, episode): 146 | anime = get_t_from_u(anime).lower() 147 | episode = int(episode) 148 | 149 | try: 150 | data = TechZApi.gogo_episode(f"{anime}-episode-{episode}") 151 | x = TechZApi.gogo_anime(anime) 152 | total_eps = x.get("total_ep") 153 | ep_list = x.get("episodes") 154 | except: 155 | search = TechZApi.gogo_search(anime)[0] 156 | anime = search.get("id") 157 | total_eps = search.get("total_ep") 158 | ep_list = search.get("episodes") 159 | data = TechZApi.gogo_episode(f"{anime}-episode-{episode}") 160 | 161 | if str(request.args.get("download", True)).lower() == "false": 162 | dl = False 163 | else: 164 | dl = True 165 | 166 | if str(request.args.get("selector", True)).lower() == "false": 167 | btn_html = "" 168 | else: 169 | btn_html = get_selector_btns(f"/episode/{anime}/", int(episode), int(total_eps)) 170 | 171 | ep_html, iframe = episodeHtml(data, f"{anime} - Episode {episode}", dl=dl) 172 | 173 | if str(request.args.get("embed", False)).lower() == "true": 174 | temp = render_template( 175 | "embed_min.html", 176 | title=f"{anime} - Episode {episode}", 177 | heading=anime, 178 | iframe=iframe, 179 | ) 180 | 181 | if str(request.args.get("eplist", False)).lower() == "true": 182 | ep_list = get_eps_html2(ep_list) 183 | temp = temp.replace( 184 | "LISTHTML", 185 | "

List Of Episodes:

EPISOS
", 186 | ).replace("EPISOS", ep_list) 187 | else: 188 | temp = temp.replace("LISTHTML", "") 189 | 190 | else: 191 | ep_list = get_eps_html2(ep_list) 192 | temp = render_template( 193 | "episode_min.html", 194 | title=f"{anime} - Episode {episode}", 195 | heading=anime, 196 | iframe=iframe, 197 | ).replace("EPISOS", ep_list) 198 | 199 | update_watch(anime) 200 | return temp.replace("PROSLO", btn_html).replace("SERVER", ep_html) 201 | 202 | 203 | @app.route("/search", methods=["GET"]) 204 | def search_anime(): 205 | anime = request.args.get("query").lower().strip() 206 | 207 | if anime.endswith("-dub"): 208 | anime = anime[:-4] 209 | if anime.endswith("-sub"): 210 | anime = anime[:-4] 211 | 212 | html = render_template("search_min.html", aid=anime.replace("+", " ")) 213 | 214 | data = TechZApi.gogo_search(anime) 215 | display = get_search_html(data) 216 | 217 | html = html.replace("SEARCHED", display) 218 | update_views("search-animedex") 219 | return html 220 | 221 | 222 | @app.route("/embed") 223 | def get_embed(): 224 | try: 225 | url = request.args.get("url") 226 | file = False 227 | if url: 228 | if ".mp4" in url or ".mkv" in url: 229 | file = url 230 | else: 231 | if request.args.get("token"): 232 | url += f'&token={request.args.get("token")}' 233 | if request.args.get("expires"): 234 | url += f'&expires={request.args.get("expires")}' 235 | 236 | file = TechZApi.gogo_stream(url) 237 | server = int(request.args.get("server")) 238 | if server == 1: 239 | file = file.get("source")[0].get("file") 240 | elif server == 2: 241 | file = file.get("source_bk")[0].get("file") 242 | else: 243 | file = request.args.get("file") 244 | except: 245 | file = request.args.get("file") 246 | if not file: 247 | return redirect(url) 248 | title = request.args.get("title") 249 | 250 | return render_template("vid_min.html", m3u8=file, title=title) 251 | 252 | 253 | @app.route("/api/latest/") 254 | def latest(page): 255 | try: 256 | data = TechZApi.gogo_latest(page) 257 | html = get_recent_html(data) 258 | return {"html": html} 259 | except: 260 | return {"html": ""} 261 | 262 | 263 | @app.route("/robots.txt") 264 | def robots_txt(): 265 | try: 266 | return send_file("static/robots.txt") 267 | except: 268 | return {"html": ""} 269 | -------------------------------------------------------------------------------- /cache_purge_jsdeliver.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | urls = [ 4 | "https://cdn.jsdelivr.net/gh/TechShreyash/AnimeDex@main/static/css/anime_min.css", 5 | "https://cdn.jsdelivr.net/gh/TechShreyash/AnimeDex@main/static/css/episode_min.css", 6 | "https://cdn.jsdelivr.net/gh/TechShreyash/AnimeDex@main/static/css/home_min.css", 7 | "https://cdn.jsdelivr.net/gh/TechShreyash/AnimeDex@main/static/css/search_min.css", 8 | "https://cdn.jsdelivr.net/gh/TechShreyash/AnimeDex@main/static/css/video_min.css", 9 | ] 10 | 11 | 12 | for url in urls: 13 | url = url[24:] 14 | r = requests.get("https://purge.jsdelivr.net" + url) 15 | print(r.json().get("status"), url) 16 | -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | # Your TechZ Api Key 2 | # Get from @TechZApiBot on Telegram | https://t.me/TechZApiBot 3 | 4 | from os import getenv 5 | 6 | 7 | API_KEY = "Paste Your Key Here" 8 | 9 | if not API_KEY or API_KEY == "Paste Your Key Here" or API_KEY == "": 10 | API_KEY = getenv("API_KEY") 11 | 12 | if not API_KEY: 13 | raise Exception("Please add your TechZ Api Key in config.py file") 14 | -------------------------------------------------------------------------------- /index.py: -------------------------------------------------------------------------------- 1 | from wsgi import app 2 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from utils.db import update_views, update_watch 2 | from utils.html_gen import ( 3 | animeRecHtml, 4 | animeRecHtml2, 5 | episodeHtml, 6 | get_eps_html, 7 | get_eps_html2, 8 | get_recent_html, 9 | get_search_html, 10 | get_selector_btns, 11 | get_genre_html, 12 | get_trending_html, 13 | slider_gen, 14 | ) 15 | from flask import Flask, render_template, request, redirect, send_file 16 | from utils.anilist import Anilist 17 | from utils.others import get_atitle, get_other_title, get_studios, get_t_from_u 18 | from utils.techzapi import TechZApi 19 | from config import API_KEY 20 | 21 | app = Flask(__name__) 22 | TechZApi = TechZApi(API_KEY) 23 | 24 | 25 | @app.route("/favicon.ico") 26 | def favicon(): 27 | return redirect( 28 | "https://cdn.jsdelivr.net/gh/TechShreyash/AnimeDex@main/static/img/favicon.ico" 29 | ) 30 | 31 | 32 | @app.route("/") 33 | def home(): 34 | html = render_template("home_min.html") 35 | div1 = get_trending_html(TechZApi.top_animedex()) 36 | div2 = get_recent_html(TechZApi.gogo_latest()) 37 | sliders = slider_gen() 38 | 39 | html = ( 40 | html.replace("MOST_POPULAR", div1) 41 | .replace("RECENT_RELEASE", div2) 42 | .replace("SLIDERS", sliders) 43 | ) 44 | update_views("home-animedex") 45 | return html 46 | 47 | 48 | @app.route("/anime/") 49 | def get_anime(anime): 50 | try: 51 | data = TechZApi.gogo_anime(anime) 52 | TITLE = data.get("title") 53 | IMG = data.get("img") 54 | LANG = data.get("lang") 55 | TYPE = data.get("type") 56 | WATCHNOW = "/episode/" + data.get("id") + "/1" 57 | OTHER = data.get("other name") 58 | TOTAL = str(data.get("total_ep")) 59 | YEAR = data.get("year") 60 | STATUS = data.get("status") 61 | STUDIO = "?" 62 | GENERES = get_genre_html(data.get("genre").split(",")) 63 | SYNOPSIS = data.get("summary") 64 | 65 | x = anime.lower() 66 | if x.endswith("-dub"): 67 | x = x[:-4] 68 | if x.endswith("-sub"): 69 | x = x[:-4] 70 | x = get_t_from_u(x).replace("-", " ") 71 | 72 | try: 73 | DISPLAY_ANIME = animeRecHtml(Anilist().get_recommendation(x)) 74 | except: 75 | DISPLAY_ANIME = "" 76 | EPISODES = get_eps_html(data=data.get("episodes")) 77 | 78 | html = render_template( 79 | "anime_min.html", 80 | IMG=IMG, 81 | TITLE=TITLE, 82 | LANG=LANG, 83 | TYPE=TYPE, 84 | WATCHNOW=WATCHNOW, 85 | OTHER=OTHER, 86 | TOTAL=TOTAL, 87 | YEAR=YEAR, 88 | STATUS=STATUS, 89 | STUDIO=STUDIO, 90 | ) 91 | except: 92 | anime = anime.lower() 93 | if anime.endswith("-dub"): 94 | anime = anime[:-4] 95 | if anime.endswith("-sub"): 96 | anime = anime[:-4] 97 | anime = get_t_from_u(anime).replace("-", " ") 98 | data = Anilist().anime(anime) 99 | 100 | IMG = data.get("coverImage").get("medium").replace("small", "medium") 101 | if not IMG: 102 | IMG = data.get("bannerImage") 103 | TITLE = get_atitle(data.get("title")) 104 | SYNOPSIS = data.get("description") 105 | OTHER = get_other_title(data.get("title")) 106 | STUDIO = get_studios(data.get("studios").get("nodes")) 107 | TOTAL = str(data.get("episodes")) 108 | GENERES = get_genre_html(data.get("genres")) 109 | DISPLAY_ANIME = animeRecHtml2(data.get("recommendations").get("edges")) 110 | 111 | try: 112 | EPISODES, id = get_eps_html(api=TechZApi, anime=TITLE) 113 | except: 114 | EPISODES, id = "", "#" 115 | 116 | SEASON = str(data.get("season")) + " " + str(data.get("seasonYear")) 117 | YEAR = data.get("seasonYear") 118 | TYPE = data.get("format") 119 | STATUS = data.get("status") 120 | WATCHNOW = "/episode/" + id + "/1" 121 | 122 | html = render_template( 123 | "anime_min.html", 124 | IMG=IMG, 125 | TITLE=TITLE, 126 | LANG=TYPE, 127 | TYPE=SEASON, 128 | WATCHNOW=WATCHNOW, 129 | OTHER=OTHER, 130 | TOTAL=TOTAL, 131 | YEAR=YEAR, 132 | STATUS=STATUS, 133 | STUDIO=STUDIO, 134 | ) 135 | 136 | html = html.replace("GENERES", GENERES) 137 | html = html.replace("EPISODES", EPISODES) 138 | html = html.replace("DISPLAY_ANIME", DISPLAY_ANIME) 139 | html = html.replace("SYNOPSIS", SYNOPSIS) 140 | update_views(anime) 141 | return html 142 | 143 | 144 | @app.route("/episode//") 145 | def get_episode(anime, episode): 146 | anime = get_t_from_u(anime).lower() 147 | episode = int(episode) 148 | 149 | try: 150 | data = TechZApi.gogo_episode(f"{anime}-episode-{episode}") 151 | x = TechZApi.gogo_anime(anime) 152 | total_eps = x.get("total_ep") 153 | ep_list = x.get("episodes") 154 | except: 155 | search = TechZApi.gogo_search(anime)[0] 156 | anime = search.get("id") 157 | total_eps = search.get("total_ep") 158 | ep_list = search.get("episodes") 159 | data = TechZApi.gogo_episode(f"{anime}-episode-{episode}") 160 | 161 | if str(request.args.get("download", True)).lower() == "false": 162 | dl = False 163 | else: 164 | dl = True 165 | 166 | if str(request.args.get("selector", True)).lower() == "false": 167 | btn_html = "" 168 | else: 169 | btn_html = get_selector_btns(f"/episode/{anime}/", int(episode), int(total_eps)) 170 | 171 | ep_html, iframe = episodeHtml(data, f"{anime} - Episode {episode}", dl=dl) 172 | 173 | if str(request.args.get("embed", False)).lower() == "true": 174 | temp = render_template( 175 | "embed_min.html", 176 | title=f"{anime} - Episode {episode}", 177 | heading=anime, 178 | iframe=iframe, 179 | ) 180 | 181 | if str(request.args.get("eplist", False)).lower() == "true": 182 | ep_list = get_eps_html2(ep_list) 183 | temp = temp.replace( 184 | "LISTHTML", 185 | "

List Of Episodes:

EPISOS
", 186 | ).replace("EPISOS", ep_list) 187 | else: 188 | temp = temp.replace("LISTHTML", "") 189 | 190 | else: 191 | ep_list = get_eps_html2(ep_list) 192 | temp = render_template( 193 | "episode_min.html", 194 | title=f"{anime} - Episode {episode}", 195 | heading=anime, 196 | iframe=iframe, 197 | ).replace("EPISOS", ep_list) 198 | 199 | update_watch(anime) 200 | return temp.replace("PROSLO", btn_html).replace("SERVER", ep_html) 201 | 202 | 203 | @app.route("/search", methods=["GET"]) 204 | def search_anime(): 205 | anime = request.args.get("query").lower().strip() 206 | 207 | if anime.endswith("-dub"): 208 | anime = anime[:-4] 209 | if anime.endswith("-sub"): 210 | anime = anime[:-4] 211 | 212 | html = render_template("search_min.html", aid=anime.replace("+", " ")) 213 | 214 | data = TechZApi.gogo_search(anime) 215 | display = get_search_html(data) 216 | 217 | html = html.replace("SEARCHED", display) 218 | update_views("search-animedex") 219 | return html 220 | 221 | 222 | @app.route("/embed") 223 | def get_embed(): 224 | try: 225 | url = request.args.get("url") 226 | file = False 227 | if url: 228 | if ".mp4" in url or ".mkv" in url: 229 | file = url 230 | else: 231 | if request.args.get("token"): 232 | url += f'&token={request.args.get("token")}' 233 | if request.args.get("expires"): 234 | url += f'&expires={request.args.get("expires")}' 235 | 236 | file = TechZApi.gogo_stream(url) 237 | server = int(request.args.get("server")) 238 | if server == 1: 239 | file = file.get("source")[0].get("file") 240 | elif server == 2: 241 | file = file.get("source_bk")[0].get("file") 242 | else: 243 | file = request.args.get("file") 244 | except: 245 | file = request.args.get("file") 246 | if not file: 247 | return redirect(url) 248 | title = request.args.get("title") 249 | 250 | return render_template("vid_min.html", m3u8=file, title=title) 251 | 252 | 253 | @app.route("/api/latest/") 254 | def latest(page): 255 | try: 256 | data = TechZApi.gogo_latest(page) 257 | html = get_recent_html(data) 258 | return {"html": html} 259 | except: 260 | return {"html": ""} 261 | 262 | 263 | @app.route("/robots.txt") 264 | def robots_txt(): 265 | try: 266 | return send_file("static/robots.txt") 267 | except: 268 | return {"html": ""} 269 | 270 | 271 | if __name__ == "__main__": 272 | app.run("0.0.0.0", debug=True) 273 | -------------------------------------------------------------------------------- /minify.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | for file in os.listdir("templates"): 4 | if 'min' in file: 5 | os.remove("templates/" + file) 6 | continue 7 | 8 | with open("templates/" + file, "r") as f: 9 | content = f.read() 10 | while " " in content or "\n" in content: 11 | content = content.replace(" ", " ").replace("\n", "") 12 | with open("templates/" + file.split(".")[0] + "_min.html", "w") as f: 13 | f.write(content) 14 | 15 | 16 | for file in os.listdir("static/css"): 17 | if 'min' in file: 18 | os.remove("static/css/" + file) 19 | continue 20 | 21 | with open("static/css/" + file, "r") as f: 22 | content = f.read() 23 | while " " in content or "\n" in content: 24 | content = content.replace(" ", " ").replace("\n", "") 25 | with open("static/css/" + file.split(".")[0] + "_min.css", "w") as f: 26 | f.write(content) 27 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "repl_nix_AnimeDex" 3 | version = "0.1.0" 4 | description = "" 5 | authors = ["Replit user <<>>"] 6 | 7 | [tool.poetry.dependencies] 8 | python = "^3.8" 9 | yarl = "^1.8.1" 10 | bs4 = "^0.0.1" 11 | Flask = "^2.3.2" 12 | pycryptodomex = "^3.15.0" 13 | requests = "^2.31.0" 14 | 15 | [tool.poetry.dev-dependencies] 16 | 17 | [build-system] 18 | requires = ["poetry-core>=1.0.0"] 19 | build-backend = "poetry.core.masonry.api" -------------------------------------------------------------------------------- /replit.nix: -------------------------------------------------------------------------------- 1 | { pkgs }: { 2 | deps = [ 3 | pkgs.python38Full 4 | ]; 5 | env = { 6 | PYTHON_LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [ 7 | # Needed for pandas / numpy 8 | pkgs.stdenv.cc.cc.lib 9 | pkgs.zlib 10 | # Needed for pygame 11 | pkgs.glib 12 | # Needed for matplotlib 13 | pkgs.xorg.libX11 14 | ]; 15 | PYTHONBIN = "${pkgs.python38Full}/bin/python3.8"; 16 | LANG = "en_US.UTF-8"; 17 | }; 18 | } -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | bs4 3 | flask 4 | yarl 5 | pycryptodomex 6 | gunicorn -------------------------------------------------------------------------------- /screenshots/anime.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TechShreyash/AnimeDex/7fa1d96bf88bc33e170efc72d3253f82f0c4e5be/screenshots/anime.jpeg -------------------------------------------------------------------------------- /screenshots/episode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TechShreyash/AnimeDex/7fa1d96bf88bc33e170efc72d3253f82f0c4e5be/screenshots/episode.png -------------------------------------------------------------------------------- /screenshots/home.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TechShreyash/AnimeDex/7fa1d96bf88bc33e170efc72d3253f82f0c4e5be/screenshots/home.jpeg -------------------------------------------------------------------------------- /screenshots/search.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TechShreyash/AnimeDex/7fa1d96bf88bc33e170efc72d3253f82f0c4e5be/screenshots/search.jpeg -------------------------------------------------------------------------------- /static/css/anime.css: -------------------------------------------------------------------------------- 1 | .fa { 2 | font-family: var(--fa-style-family, "Font Awesome 6 Free"); 3 | font-weight: var(--fa-style, 900); 4 | } 5 | 6 | .fa { 7 | -moz-osx-font-smoothing: grayscale; 8 | -webkit-font-smoothing: antialiased; 9 | display: var(--fa-display, inline-block); 10 | font-style: normal; 11 | font-variant: normal; 12 | line-height: 1; 13 | text-rendering: auto; 14 | } 15 | 16 | .fa-heart:before { 17 | content: "\f004"; 18 | } 19 | 20 | .fa-play:before { 21 | content: "\f04b"; 22 | } 23 | 24 | .fa-search:before { 25 | content: "\f002"; 26 | } 27 | 28 | :root { 29 | --fa-style-family-brands: "Font Awesome 6 Brands"; 30 | --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"; 31 | } 32 | 33 | :root { 34 | --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free"; 35 | } 36 | 37 | :root { 38 | --fa-style-family-classic: "Font Awesome 6 Free"; 39 | --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free"; 40 | } 41 | 42 | html, 43 | body { 44 | background-color: #282828; 45 | } 46 | 47 | header { 48 | width: 100%; 49 | } 50 | 51 | footer { 52 | background: #eb3349; 53 | display: flex; 54 | flex-wrap: nowrap; 55 | align-content: center; 56 | justify-content: center; 57 | align-items: center; 58 | height: 50px; 59 | } 60 | 61 | footer div { 62 | text-align: center; 63 | } 64 | 65 | footer a { 66 | color: white; 67 | font-family: 'Montserrat', sans-serif; 68 | font-size: 11px; 69 | font-weight: 500; 70 | } 71 | 72 | @media only screen and (min-width: 400px) { 73 | footer a { 74 | font-size: 13px; 75 | } 76 | } 77 | 78 | @media only screen and (min-width: 600px) { 79 | footer a { 80 | font-size: 15px; 81 | } 82 | } 83 | 84 | #head-div { 85 | background: linear-gradient(to right, #eb3349 40%, #f45c43); 86 | width: 100%; 87 | text-align: center; 88 | padding-top: 25px; 89 | height: 86px; 90 | margin: auto; 91 | font-family: 'Roboto', sans-serif; 92 | font-weight: 500; 93 | font-size: x-large; 94 | color: white; 95 | } 96 | 97 | h1 { 98 | color: #eb3349; 99 | font-family: 'Poppins', sans-serif; 100 | } 101 | 102 | i { 103 | margin: auto; 104 | margin-right: 10px; 105 | } 106 | 107 | a { 108 | text-decoration: none; 109 | } 110 | 111 | * { 112 | box-sizing: border-box; 113 | margin: 0px; 114 | padding: 0px; 115 | } 116 | 117 | body, 118 | html { 119 | height: 100%; 120 | width: 100%; 121 | padding: 0px; 122 | margin: 0px; 123 | background-color: #14151a; 124 | background-image: none; 125 | display: block; 126 | height: fit-content; 127 | width: 100vw; 128 | } 129 | 130 | html { 131 | position: relative; 132 | } 133 | 134 | body { 135 | overflow-x: hidden; 136 | } 137 | 138 | section { 139 | position: relative; 140 | width: 100%; 141 | margin: 0px; 142 | height: fit-content; 143 | } 144 | 145 | header { 146 | position: relative; 147 | } 148 | 149 | div { 150 | box-sizing: border-box; 151 | display: block; 152 | } 153 | 154 | #background { 155 | box-sizing: border-box; 156 | position: absolute; 157 | top: 0px; 158 | left: 0px; 159 | right: 0px; 160 | bottom: 0px; 161 | overflow: hidden; 162 | height: 100%; 163 | display: block; 164 | } 165 | 166 | #overview1 { 167 | max-height: 150px; 168 | overflow: auto; 169 | display: block; 170 | } 171 | 172 | #overview3 { 173 | max-height: 150px; 174 | overflow: auto; 175 | display: none; 176 | } 177 | 178 | #overview2 { 179 | margin-bottom: 4px; 180 | display: block; 181 | } 182 | 183 | #cover { 184 | box-sizing: border-box; 185 | position: absolute; 186 | top: -20px; 187 | left: -20px; 188 | right: -20px; 189 | bottom: -20px; 190 | background-size: cover; 191 | background-position: center center; 192 | background-repeat: no-repeat; 193 | filter: blur(20px); 194 | opacity: .35; 195 | background-attachment: scroll; 196 | } 197 | 198 | .poster { 199 | box-sizing: border-box; 200 | text-align: center; 201 | display: inline; 202 | padding: 20px; 203 | margin: 0px; 204 | overflow: visible; 205 | margin-top: 20px; 206 | } 207 | 208 | .details { 209 | width: auto; 210 | text-align: left; 211 | box-sizing: border-box; 212 | display: inline; 213 | margin: 0px; 214 | overflow: visible; 215 | padding-bottom: 20px; 216 | } 217 | 218 | .anime { 219 | position: relative; 220 | top: 0px; 221 | left: 0px; 222 | right: 0px; 223 | bottom: 0px; 224 | text-align: center; 225 | box-sizing: border-box; 226 | width: 100%; 227 | overflow: visible; 228 | height: fit-content; 229 | } 230 | 231 | section img { 232 | box-sizing: border-box; 233 | height: fit-content; 234 | max-width: 200px; 235 | border: 5px solid white; 236 | border-radius: 5px; 237 | margin: auto; 238 | } 239 | 240 | h1 { 241 | font-family: 'Montserrat', sans-serif; 242 | font-size: 40px; 243 | color: white; 244 | font-weight: 700; 245 | margin: 0px; 246 | width: 100%; 247 | text-align: center; 248 | font-size: 24px; 249 | text-align: center; 250 | line-height: 1.2em; 251 | } 252 | 253 | .mid { 254 | width: 100%; 255 | text-align: center; 256 | } 257 | 258 | .cbox { 259 | border: 1px #6d6d6d solid; 260 | color: #dfdfdf; 261 | font-family: 'Roboto', sans-serif; 262 | font-size: 14px; 263 | font-weight: 400; 264 | padding: 2px 4px; 265 | border-radius: 4px; 266 | } 267 | 268 | .dot { 269 | box-sizing: border-box; 270 | width: 4px; 271 | height: 4px; 272 | border-radius: 50%; 273 | background: rgba(255, 255, 255, .3); 274 | display: inline-block; 275 | margin: 3px 6px; 276 | } 277 | 278 | .year { 279 | color: #dfdfdf; 280 | font-family: 'Montserrat', sans-serif; 281 | font-size: 14px; 282 | font-weight: 400; 283 | padding: 2px 4px; 284 | } 285 | 286 | .watch-btn { 287 | background: #ed3832; 288 | color: black; 289 | border-radius: 4px; 290 | font-weight: 400; 291 | font-family: 'Montserrat', sans-serif; 292 | padding: 10px 20px; 293 | text-decoration: none; 294 | } 295 | 296 | .synopsis { 297 | color: white; 298 | line-height: 1.5em; 299 | font-family: 'Montserrat', sans-serif; 300 | font-size: 13px; 301 | font-weight: 300; 302 | text-align: left; 303 | display: none; 304 | } 305 | 306 | #info { 307 | display: inline; 308 | margin: 0px; 309 | text-align: left; 310 | vertical-align: middle; 311 | background: rgba(0, 0, 0, .2); 312 | height: 100%; 313 | padding: 20px 10px; 314 | } 315 | 316 | .item-head { 317 | text-align: left; 318 | font-family: 'Montserrat', sans-serif; 319 | color: #fff; 320 | -webkit-text-size-adjust: none; 321 | line-height: 1.4em; 322 | font-size: 13px; 323 | box-sizing: border-box; 324 | font-weight: 600; 325 | margin-bottom: 10px; 326 | margin-right: 5px; 327 | } 328 | 329 | .item-des { 330 | text-align: left; 331 | font-family: 'Montserrat', sans-serif; 332 | color: #fff; 333 | font-weight: 100; 334 | -webkit-text-size-adjust: none; 335 | line-height: 1.4em; 336 | font-size: 13px; 337 | box-sizing: border-box; 338 | } 339 | 340 | .info-items { 341 | margin: 10px; 342 | } 343 | 344 | .genre { 345 | border-top: 1px solid rgba(255, 255, 255, .1); 346 | border-bottom: 1px solid rgba(255, 255, 255, .1); 347 | padding: 10px 0px; 348 | } 349 | 350 | .genre a { 351 | border: 1px solid rgba(255, 255, 255, .4); 352 | box-sizing: border-box; 353 | border-radius: 20px; 354 | color: white; 355 | font-family: 'Montserrat', sans-serif; 356 | font-size: 13px; 357 | font-weight: 300; 358 | padding: 4px 8px; 359 | text-decoration: none; 360 | margin: 4px 2px; 361 | display: inline-block; 362 | width: fit-content; 363 | } 364 | 365 | .col-3 { 366 | width: 25%; 367 | } 368 | 369 | .col-6 { 370 | width: 50%; 371 | } 372 | 373 | [class*="col-"] { 374 | float: left; 375 | } 376 | 377 | .row::after { 378 | content: ""; 379 | clear: both; 380 | display: table; 381 | } 382 | 383 | #watchh { 384 | margin: 30px 0px 20px 0px; 385 | } 386 | 387 | [class*="col-"] { 388 | width: 100%; 389 | } 390 | 391 | @media only screen and (min-width: 600px) { 392 | .details { 393 | width: calc(100% - 250px); 394 | } 395 | 396 | h1 { 397 | font-size: 28px; 398 | } 399 | 400 | .item-des, 401 | .item-head, 402 | .genre a { 403 | font-size: 15px; 404 | } 405 | 406 | h1 { 407 | text-align: left; 408 | font-weight: 700; 409 | font-size: 30px; 410 | } 411 | 412 | .details { 413 | padding-top: 20px; 414 | } 415 | 416 | .mid { 417 | text-align: left; 418 | } 419 | 420 | #watchh { 421 | margin: 50px 0px; 422 | } 423 | 424 | .overview { 425 | display: none; 426 | } 427 | 428 | .synopsis, 429 | #overview3 { 430 | display: block; 431 | } 432 | 433 | .item-des, 434 | .item-head, 435 | .genre a { 436 | font-size: 13px; 437 | } 438 | 439 | section img { 440 | box-sizing: border-box; 441 | height: fit-content; 442 | max-width: 300px; 443 | width: 100%; 444 | border: 5px solid white; 445 | border-radius: 5px; 446 | margin: auto; 447 | } 448 | 449 | .poster { 450 | box-sizing: border-box; 451 | text-align: center; 452 | display: inline; 453 | margin: 0px; 454 | overflow: visible; 455 | margin-top: 20px; 456 | width: 250px; 457 | } 458 | 459 | ::-webkit-scrollbar { 460 | width: 5px; 461 | } 462 | 463 | ::-webkit-scrollbar-track { 464 | background: #f1f1f100; 465 | } 466 | 467 | ::-webkit-scrollbar-thumb { 468 | background: #888; 469 | } 470 | 471 | ::-webkit-scrollbar-thumb:hover { 472 | background: #555; 473 | } 474 | } 475 | 476 | @media only screen and (min-width: 1200px) { 477 | .col-3 { 478 | width: 25%; 479 | } 480 | 481 | .col-6 { 482 | width: 50%; 483 | } 484 | 485 | h1 { 486 | text-align: left; 487 | font-weight: 700; 488 | font-size: 30px; 489 | } 490 | 491 | .details { 492 | padding-top: 40px; 493 | } 494 | 495 | .mid { 496 | text-align: left; 497 | } 498 | 499 | #watchh { 500 | margin: 50px 0px; 501 | } 502 | 503 | .overview { 504 | display: none; 505 | } 506 | 507 | .synopsis, 508 | #overview3 { 509 | display: block; 510 | } 511 | 512 | .item-des, 513 | .item-head, 514 | .genre a { 515 | font-size: 13px; 516 | } 517 | 518 | #info { 519 | display: block; 520 | height: 100%; 521 | position: absolute; 522 | top: 0; 523 | right: 0; 524 | bottom: 0; 525 | background: rgba(255, 255, 255, .1); 526 | padding-top: 30px; 527 | overflow: hidden; 528 | } 529 | 530 | .poster { 531 | box-sizing: border-box; 532 | text-align: center; 533 | display: inline; 534 | margin: 0px; 535 | overflow: visible; 536 | margin-top: 20px; 537 | width: 300px; 538 | } 539 | 540 | section img { 541 | height: 100%; 542 | width: 100%; 543 | } 544 | } 545 | 546 | #watch { 547 | margin-top: 20px; 548 | } 549 | 550 | .divo { 551 | padding: 10px; 552 | } 553 | 554 | .divox { 555 | padding: 0px; 556 | } 557 | 558 | h2 { 559 | font-family: 'Montserrat', sans-serif; 560 | color: #ed3832; 561 | font-weight: 500; 562 | width: 100%; 563 | font-size: 20px; 564 | margin: 10px; 565 | } 566 | 567 | .divo2 { 568 | background-color: rgb(32, 33, 37); 569 | padding: 20px 10px; 570 | padding-bottom: 10px; 571 | border-radius: 4px; 572 | } 573 | 574 | #latest { 575 | margin-left: 20px; 576 | margin-top: 20px; 577 | margin-bottom: 15px; 578 | } 579 | 580 | #latest2 a { 581 | color: white; 582 | text-decoration: none; 583 | } 584 | 585 | #latest2 { 586 | padding: 0px; 587 | box-sizing: border-box; 588 | display: inline-block; 589 | text-align: center; 590 | width: 100%; 591 | height: fit-content; 592 | } 593 | 594 | .ep-btn { 595 | padding: 10px 20px; 596 | background-color: rgb(53, 55, 61); 597 | color: #999; 598 | text-decoration: none; 599 | border-radius: 4px; 600 | font-weight: 400; 601 | font-family: 'Montserrat', sans-serif; 602 | font-size: 14px; 603 | margin: 0px 2px; 604 | margin-bottom: 10px; 605 | display: inline-block; 606 | } 607 | 608 | .la-anime { 609 | display: inline-block; 610 | padding: 0px; 611 | margin: 0px 3px; 612 | margin-bottom: 6px; 613 | position: relative; 614 | width: calc(50% - 20px); 615 | max-width: 200px; 616 | } 617 | 618 | .shadow { 619 | box-shadow: inset 0px -100px 50px -50px rgba(32, 33, 37, 1); 620 | position: relative; 621 | height: 200px; 622 | z-index: 1; 623 | } 624 | 625 | #shadow1 { 626 | box-shadow: inset 0px -100px 50px -50px rgba(32, 33, 37, 1); 627 | position: absolute; 628 | top: 0px; 629 | left: 0px; 630 | right: 0px; 631 | z-index: 3; 632 | } 633 | 634 | #shadow2 { 635 | position: relative; 636 | top: 0px; 637 | left: 0px; 638 | right: 0px; 639 | z-index: 1; 640 | } 641 | 642 | .shadow img { 643 | border: none; 644 | border-radius: 0px; 645 | height: 100%; 646 | width: 100%; 647 | object-fit: cover; 648 | object-position: center; 649 | vertical-align: middle; 650 | overflow: hidden; 651 | position: relative; 652 | top: 0px; 653 | bottom: 0px; 654 | left: 0px; 655 | right: 0px; 656 | max-width: unset; 657 | z-index: 1; 658 | } 659 | 660 | .dubb { 661 | color: white; 662 | background-color: red; 663 | position: absolute; 664 | bottom: 10px; 665 | left: 10px; 666 | display: block; 667 | width: fit-content; 668 | border-radius: 4px; 669 | font-weight: 600; 670 | font-family: 'Montserrat', sans-serif; 671 | font-size: 12px; 672 | padding: 2px 4px; 673 | z-index: 5; 674 | } 675 | 676 | .dubb2 { 677 | left: unset; 678 | right: 10px; 679 | background-color: white; 680 | color: black; 681 | } 682 | 683 | .la-details { 684 | background-color: rgb(32, 33, 37); 685 | width: 100%; 686 | height: 85px; 687 | box-sizing: border-box; 688 | padding: 10px; 689 | overflow: hidden; 690 | } 691 | 692 | .la-details h3 { 693 | margin: 0px; 694 | font-family: 'Montserrat', sans-serif; 695 | font-size: 14px; 696 | text-align: left; 697 | width: 100%; 698 | color: white; 699 | font-weight: 500; 700 | margin-bottom: 8px; 701 | height: fit-content; 702 | overflow: hidden; 703 | box-sizing: border-box; 704 | -webkit-tap-highlight-color: transparent; 705 | -webkit-text-size-adjust: none; 706 | list-style: none; 707 | box-sizing: border-box; 708 | height: 37px; 709 | display: -webkit-box; 710 | -webkit-line-clamp: 2; 711 | -webkit-box-orient: vertical; 712 | overflow: hidden; 713 | } 714 | 715 | #extra { 716 | text-align: left; 717 | overflow: hidden; 718 | width: 100%; 719 | box-sizing: border-box; 720 | -webkit-tap-highlight-color: transparent; 721 | -webkit-text-size-adjust: none; 722 | list-style: none; 723 | display: -webkit-box; 724 | -webkit-line-clamp: 1; 725 | -webkit-box-orient: vertical; 726 | overflow: hidden; 727 | } 728 | 729 | .la-details span { 730 | color: rgba(255, 255, 255, .3); 731 | font-family: 'Montserrat', sans-serif; 732 | font-size: 12px; 733 | } 734 | 735 | #search-div { 736 | height: fit-content; 737 | background-color: white; 738 | border-radius: 5px; 739 | height: 40px; 740 | width: 30%; 741 | position: absolute; 742 | top: 25px; 743 | right: 10px; 744 | } 745 | 746 | #search-div input { 747 | height: 28px; 748 | background-color: rgba(255, 255, 255, 0); 749 | border: none; 750 | padding-left: 5px; 751 | font-size: 14px; 752 | font-weight: 400; 753 | color: black; 754 | overflow: visible; 755 | font-family: 'Montserrat', sans-serif; 756 | width: calc(100% - 27px); 757 | } 758 | 759 | #search-div button { 760 | background-color: rgba(255, 255, 255, 0); 761 | border: none; 762 | height: 40px; 763 | width: 20px; 764 | } 765 | 766 | #search-div button i { 767 | width: 16px; 768 | height: 16px; 769 | margin: 0px; 770 | } 771 | 772 | #search-div form { 773 | vertical-align: middle; 774 | height: 100%; 775 | width: 100%; 776 | } 777 | 778 | #query { 779 | width: calc(100% - 55px); 780 | height: 40px; 781 | } 782 | 783 | #query:focus { 784 | border: none; 785 | } 786 | 787 | #title1 { 788 | height: fit-content; 789 | width: 70%; 790 | } 791 | 792 | @media only screen and (min-width: 420px) { 793 | .shadow { 794 | height: 240px; 795 | } 796 | } 797 | 798 | @media only screen and (min-width: 580px) { 799 | #search-div input { 800 | width: calc(100% - 55px); 801 | } 802 | 803 | .la-anime { 804 | max-width: 220px; 805 | } 806 | 807 | #title1 { 808 | height: fit-content; 809 | width: calc(100% - 50px); 810 | text-align: center; 811 | } 812 | 813 | #search-div { 814 | height: fit-content; 815 | background-color: white; 816 | margin-right: 20px; 817 | border-radius: 5px; 818 | height: 40px; 819 | } 820 | 821 | #search-div input { 822 | height: 28px; 823 | background-color: rgba(255, 255, 255, 0); 824 | border: none; 825 | padding-left: 15px; 826 | font-size: 14px; 827 | font-weight: 400; 828 | color: black; 829 | overflow: visible; 830 | font-family: 'Montserrat', sans-serif; 831 | } 832 | 833 | #search-div button { 834 | background-color: rgba(255, 255, 255, 0); 835 | border: none; 836 | height: 40px; 837 | width: 40px; 838 | } 839 | 840 | #search-div button i { 841 | width: 16px; 842 | height: 16px; 843 | margin: 0px; 844 | } 845 | 846 | #search-div form { 847 | vertical-align: middle; 848 | height: 100%; 849 | width: 100%; 850 | } 851 | 852 | #query { 853 | width: 200px; 854 | height: 40px; 855 | } 856 | 857 | #query:focus { 858 | border: none; 859 | } 860 | 861 | #title1 { 862 | height: fit-content; 863 | width: calc(100% - 247px); 864 | text-align: center; 865 | } 866 | 867 | #search-div { 868 | position: absolute; 869 | right: 0px; 870 | top: 25px; 871 | } 872 | } 873 | 874 | @media only screen and (min-width: 1200px) { 875 | .la-anime { 876 | max-width: 220px; 877 | } 878 | 879 | #title1 { 880 | height: fit-content; 881 | width: 100%; 882 | text-align: center; 883 | } 884 | 885 | #search-div { 886 | position: absolute; 887 | right: 0px; 888 | top: 25px; 889 | } 890 | } 891 | 892 | #cover { 893 | background-image: url(https://img.zorores.com/_r/300x400/100/ff/28/ff28ef11fe9ba2c20735f428884b127b/ff28ef11fe9ba2c20735f428884b127b.jpg); 894 | } 895 | 896 | #cover { 897 | background-image: url(https://s4.anilist.co/file/anilistcdn/media/anime/cover/medium/bx131516-kLB37ISBeOX0.jpg); 898 | } 899 | 900 | @font-face { 901 | font-family: 'Montserrat'; 902 | font-style: normal; 903 | font-weight: 400; 904 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw0aXpsog.woff2) format('woff2'); 905 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; 906 | } 907 | 908 | @font-face { 909 | font-family: 'Montserrat'; 910 | font-style: normal; 911 | font-weight: 400; 912 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw9aXpsog.woff2) format('woff2'); 913 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 914 | } 915 | 916 | @font-face { 917 | font-family: 'Montserrat'; 918 | font-style: normal; 919 | font-weight: 400; 920 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw2aXpsog.woff2) format('woff2'); 921 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; 922 | } 923 | 924 | @font-face { 925 | font-family: 'Montserrat'; 926 | font-style: normal; 927 | font-weight: 400; 928 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw3aXpsog.woff2) format('woff2'); 929 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; 930 | } 931 | 932 | @font-face { 933 | font-family: 'Montserrat'; 934 | font-style: normal; 935 | font-weight: 400; 936 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2) format('woff2'); 937 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 938 | } 939 | 940 | @font-face { 941 | font-family: 'Roboto'; 942 | font-style: normal; 943 | font-weight: 400; 944 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2'); 945 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; 946 | } 947 | 948 | @font-face { 949 | font-family: 'Roboto'; 950 | font-style: normal; 951 | font-weight: 400; 952 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2'); 953 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 954 | } 955 | 956 | @font-face { 957 | font-family: 'Roboto'; 958 | font-style: normal; 959 | font-weight: 400; 960 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2'); 961 | unicode-range: U+1F00-1FFF; 962 | } 963 | 964 | @font-face { 965 | font-family: 'Roboto'; 966 | font-style: normal; 967 | font-weight: 400; 968 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2'); 969 | unicode-range: U+0370-03FF; 970 | } 971 | 972 | @font-face { 973 | font-family: 'Roboto'; 974 | font-style: normal; 975 | font-weight: 400; 976 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2'); 977 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; 978 | } 979 | 980 | @font-face { 981 | font-family: 'Roboto'; 982 | font-style: normal; 983 | font-weight: 400; 984 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2'); 985 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; 986 | } 987 | 988 | @font-face { 989 | font-family: 'Roboto'; 990 | font-style: normal; 991 | font-weight: 400; 992 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2'); 993 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 994 | } 995 | 996 | #comment_section { 997 | width: 100%; 998 | margin: 20px 0px; 999 | padding: 0px 20px; 1000 | text-align: center; 1001 | } 1002 | 1003 | #disqus_thread { 1004 | margin: auto; 1005 | max-width: 700px; 1006 | } 1007 | 1008 | #hr01 { 1009 | width: 100%; 1010 | margin: 20px 0px; 1011 | } -------------------------------------------------------------------------------- /static/css/anime_min.css: -------------------------------------------------------------------------------- 1 | .fa { font-family: var(--fa-style-family, "Font Awesome 6 Free"); font-weight: var(--fa-style, 900);}.fa { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; display: var(--fa-display, inline-block); font-style: normal; font-variant: normal; line-height: 1; text-rendering: auto;}.fa-heart:before { content: "\f004";}.fa-play:before { content: "\f04b";}.fa-search:before { content: "\f002";}:root { --fa-style-family-brands: "Font Awesome 6 Brands"; --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands";}:root { --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free";}:root { --fa-style-family-classic: "Font Awesome 6 Free"; --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free";}html,body { background-color: #282828;}header { width: 100%;}footer { background: #eb3349; display: flex; flex-wrap: nowrap; align-content: center; justify-content: center; align-items: center; height: 50px;}footer div { text-align: center;}footer a { color: white; font-family: 'Montserrat', sans-serif; font-size: 11px; font-weight: 500;}@media only screen and (min-width: 400px) { footer a { font-size: 13px; }}@media only screen and (min-width: 600px) { footer a { font-size: 15px; }}#head-div { background: linear-gradient(to right, #eb3349 40%, #f45c43); width: 100%; text-align: center; padding-top: 25px; height: 86px; margin: auto; font-family: 'Roboto', sans-serif; font-weight: 500; font-size: x-large; color: white;}h1 { color: #eb3349; font-family: 'Poppins', sans-serif;}i { margin: auto; margin-right: 10px;}a { text-decoration: none;}* { box-sizing: border-box; margin: 0px; padding: 0px;}body,html { height: 100%; width: 100%; padding: 0px; margin: 0px; background-color: #14151a; background-image: none; display: block; height: fit-content; width: 100vw;}html { position: relative;}body { overflow-x: hidden;}section { position: relative; width: 100%; margin: 0px; height: fit-content;}header { position: relative;}div { box-sizing: border-box; display: block;}#background { box-sizing: border-box; position: absolute; top: 0px; left: 0px; right: 0px; bottom: 0px; overflow: hidden; height: 100%; display: block;}#overview1 { max-height: 150px; overflow: auto; display: block;}#overview3 { max-height: 150px; overflow: auto; display: none;}#overview2 { margin-bottom: 4px; display: block;}#cover { box-sizing: border-box; position: absolute; top: -20px; left: -20px; right: -20px; bottom: -20px; background-size: cover; background-position: center center; background-repeat: no-repeat; filter: blur(20px); opacity: .35; background-attachment: scroll;}.poster { box-sizing: border-box; text-align: center; display: inline; padding: 20px; margin: 0px; overflow: visible; margin-top: 20px;}.details { width: auto; text-align: left; box-sizing: border-box; display: inline; margin: 0px; overflow: visible; padding-bottom: 20px;}.anime { position: relative; top: 0px; left: 0px; right: 0px; bottom: 0px; text-align: center; box-sizing: border-box; width: 100%; overflow: visible; height: fit-content;}section img { box-sizing: border-box; height: fit-content; max-width: 200px; border: 5px solid white; border-radius: 5px; margin: auto;}h1 { font-family: 'Montserrat', sans-serif; font-size: 40px; color: white; font-weight: 700; margin: 0px; width: 100%; text-align: center; font-size: 24px; text-align: center; line-height: 1.2em;}.mid { width: 100%; text-align: center;}.cbox { border: 1px #6d6d6d solid; color: #dfdfdf; font-family: 'Roboto', sans-serif; font-size: 14px; font-weight: 400; padding: 2px 4px; border-radius: 4px;}.dot { box-sizing: border-box; width: 4px; height: 4px; border-radius: 50%; background: rgba(255, 255, 255, .3); display: inline-block; margin: 3px 6px;}.year { color: #dfdfdf; font-family: 'Montserrat', sans-serif; font-size: 14px; font-weight: 400; padding: 2px 4px;}.watch-btn { background: #ed3832; color: black; border-radius: 4px; font-weight: 400; font-family: 'Montserrat', sans-serif; padding: 10px 20px; text-decoration: none;}.synopsis { color: white; line-height: 1.5em; font-family: 'Montserrat', sans-serif; font-size: 13px; font-weight: 300; text-align: left; display: none;}#info { display: inline; margin: 0px; text-align: left; vertical-align: middle; background: rgba(0, 0, 0, .2); height: 100%; padding: 20px 10px;}.item-head { text-align: left; font-family: 'Montserrat', sans-serif; color: #fff; -webkit-text-size-adjust: none; line-height: 1.4em; font-size: 13px; box-sizing: border-box; font-weight: 600; margin-bottom: 10px; margin-right: 5px;}.item-des { text-align: left; font-family: 'Montserrat', sans-serif; color: #fff; font-weight: 100; -webkit-text-size-adjust: none; line-height: 1.4em; font-size: 13px; box-sizing: border-box;}.info-items { margin: 10px;}.genre { border-top: 1px solid rgba(255, 255, 255, .1); border-bottom: 1px solid rgba(255, 255, 255, .1); padding: 10px 0px;}.genre a { border: 1px solid rgba(255, 255, 255, .4); box-sizing: border-box; border-radius: 20px; color: white; font-family: 'Montserrat', sans-serif; font-size: 13px; font-weight: 300; padding: 4px 8px; text-decoration: none; margin: 4px 2px; display: inline-block; width: fit-content;}.col-3 { width: 25%;}.col-6 { width: 50%;}[class*="col-"] { float: left;}.row::after { content: ""; clear: both; display: table;}#watchh { margin: 30px 0px 20px 0px;}[class*="col-"] { width: 100%;}@media only screen and (min-width: 600px) { .details { width: calc(100% - 250px); } h1 { font-size: 28px; } .item-des, .item-head, .genre a { font-size: 15px; } h1 { text-align: left; font-weight: 700; font-size: 30px; } .details { padding-top: 20px; } .mid { text-align: left; } #watchh { margin: 50px 0px; } .overview { display: none; } .synopsis, #overview3 { display: block; } .item-des, .item-head, .genre a { font-size: 13px; } section img { box-sizing: border-box; height: fit-content; max-width: 300px; width: 100%; border: 5px solid white; border-radius: 5px; margin: auto; } .poster { box-sizing: border-box; text-align: center; display: inline; margin: 0px; overflow: visible; margin-top: 20px; width: 250px; } ::-webkit-scrollbar { width: 5px; } ::-webkit-scrollbar-track { background: #f1f1f100; } ::-webkit-scrollbar-thumb { background: #888; } ::-webkit-scrollbar-thumb:hover { background: #555; }}@media only screen and (min-width: 1200px) { .col-3 { width: 25%; } .col-6 { width: 50%; } h1 { text-align: left; font-weight: 700; font-size: 30px; } .details { padding-top: 40px; } .mid { text-align: left; } #watchh { margin: 50px 0px; } .overview { display: none; } .synopsis, #overview3 { display: block; } .item-des, .item-head, .genre a { font-size: 13px; } #info { display: block; height: 100%; position: absolute; top: 0; right: 0; bottom: 0; background: rgba(255, 255, 255, .1); padding-top: 30px; overflow: hidden; } .poster { box-sizing: border-box; text-align: center; display: inline; margin: 0px; overflow: visible; margin-top: 20px; width: 300px; } section img { height: 100%; width: 100%; }}#watch { margin-top: 20px;}.divo { padding: 10px;}.divox { padding: 0px;}h2 { font-family: 'Montserrat', sans-serif; color: #ed3832; font-weight: 500; width: 100%; font-size: 20px; margin: 10px;}.divo2 { background-color: rgb(32, 33, 37); padding: 20px 10px; padding-bottom: 10px; border-radius: 4px;}#latest { margin-left: 20px; margin-top: 20px; margin-bottom: 15px;}#latest2 a { color: white; text-decoration: none;}#latest2 { padding: 0px; box-sizing: border-box; display: inline-block; text-align: center; width: 100%; height: fit-content;}.ep-btn { padding: 10px 20px; background-color: rgb(53, 55, 61); color: #999; text-decoration: none; border-radius: 4px; font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px; margin: 0px 2px; margin-bottom: 10px; display: inline-block;}.la-anime { display: inline-block; padding: 0px; margin: 0px 3px; margin-bottom: 6px; position: relative; width: calc(50% - 20px); max-width: 200px;}.shadow { box-shadow: inset 0px -100px 50px -50px rgba(32, 33, 37, 1); position: relative; height: 200px; z-index: 1;}#shadow1 { box-shadow: inset 0px -100px 50px -50px rgba(32, 33, 37, 1); position: absolute; top: 0px; left: 0px; right: 0px; z-index: 3;}#shadow2 { position: relative; top: 0px; left: 0px; right: 0px; z-index: 1;}.shadow img { border: none; border-radius: 0px; height: 100%; width: 100%; object-fit: cover; object-position: center; vertical-align: middle; overflow: hidden; position: relative; top: 0px; bottom: 0px; left: 0px; right: 0px; max-width: unset; z-index: 1;}.dubb { color: white; background-color: red; position: absolute; bottom: 10px; left: 10px; display: block; width: fit-content; border-radius: 4px; font-weight: 600; font-family: 'Montserrat', sans-serif; font-size: 12px; padding: 2px 4px; z-index: 5;}.dubb2 { left: unset; right: 10px; background-color: white; color: black;}.la-details { background-color: rgb(32, 33, 37); width: 100%; height: 85px; box-sizing: border-box; padding: 10px; overflow: hidden;}.la-details h3 { margin: 0px; font-family: 'Montserrat', sans-serif; font-size: 14px; text-align: left; width: 100%; color: white; font-weight: 500; margin-bottom: 8px; height: fit-content; overflow: hidden; box-sizing: border-box; -webkit-tap-highlight-color: transparent; -webkit-text-size-adjust: none; list-style: none; box-sizing: border-box; height: 37px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;}#extra { text-align: left; overflow: hidden; width: 100%; box-sizing: border-box; -webkit-tap-highlight-color: transparent; -webkit-text-size-adjust: none; list-style: none; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden;}.la-details span { color: rgba(255, 255, 255, .3); font-family: 'Montserrat', sans-serif; font-size: 12px;}#search-div { height: fit-content; background-color: white; border-radius: 5px; height: 40px; width: 30%; position: absolute; top: 25px; right: 10px;}#search-div input { height: 28px; background-color: rgba(255, 255, 255, 0); border: none; padding-left: 5px; font-size: 14px; font-weight: 400; color: black; overflow: visible; font-family: 'Montserrat', sans-serif; width: calc(100% - 27px);}#search-div button { background-color: rgba(255, 255, 255, 0); border: none; height: 40px; width: 20px;}#search-div button i { width: 16px; height: 16px; margin: 0px;}#search-div form { vertical-align: middle; height: 100%; width: 100%;}#query { width: calc(100% - 55px); height: 40px;}#query:focus { border: none;}#title1 { height: fit-content; width: 70%;}@media only screen and (min-width: 420px) { .shadow { height: 240px; }}@media only screen and (min-width: 580px) { #search-div input { width: calc(100% - 55px); } .la-anime { max-width: 220px; } #title1 { height: fit-content; width: calc(100% - 50px); text-align: center; } #search-div { height: fit-content; background-color: white; margin-right: 20px; border-radius: 5px; height: 40px; } #search-div input { height: 28px; background-color: rgba(255, 255, 255, 0); border: none; padding-left: 15px; font-size: 14px; font-weight: 400; color: black; overflow: visible; font-family: 'Montserrat', sans-serif; } #search-div button { background-color: rgba(255, 255, 255, 0); border: none; height: 40px; width: 40px; } #search-div button i { width: 16px; height: 16px; margin: 0px; } #search-div form { vertical-align: middle; height: 100%; width: 100%; } #query { width: 200px; height: 40px; } #query:focus { border: none; } #title1 { height: fit-content; width: calc(100% - 247px); text-align: center; } #search-div { position: absolute; right: 0px; top: 25px; }}@media only screen and (min-width: 1200px) { .la-anime { max-width: 220px; } #title1 { height: fit-content; width: 100%; text-align: center; } #search-div { position: absolute; right: 0px; top: 25px; }}#cover { background-image: url(https://img.zorores.com/_r/300x400/100/ff/28/ff28ef11fe9ba2c20735f428884b127b/ff28ef11fe9ba2c20735f428884b127b.jpg);}#cover { background-image: url(https://s4.anilist.co/file/anilistcdn/media/anime/cover/medium/bx131516-kLB37ISBeOX0.jpg);}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw0aXpsog.woff2) format('woff2'); unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw9aXpsog.woff2) format('woff2'); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw2aXpsog.woff2) format('woff2'); unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw3aXpsog.woff2) format('woff2'); unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2'); unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2'); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2'); unicode-range: U+1F00-1FFF;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2'); unicode-range: U+0370-03FF;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2'); unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2'); unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}#comment_section { width: 100%; margin: 20px 0px; padding: 0px 20px; text-align: center;}#disqus_thread { margin: auto; max-width: 700px;}#hr01 { width: 100%; margin: 20px 0px;} -------------------------------------------------------------------------------- /static/css/home.css: -------------------------------------------------------------------------------- 1 | .fa { 2 | font-family: var(--fa-style-family, "Font Awesome 6 Free"); 3 | font-weight: var(--fa-style, 900); 4 | } 5 | 6 | .fa { 7 | -moz-osx-font-smoothing: grayscale; 8 | -webkit-font-smoothing: antialiased; 9 | display: var(--fa-display, inline-block); 10 | font-style: normal; 11 | font-variant: normal; 12 | line-height: 1; 13 | text-rendering: auto; 14 | } 15 | 16 | .fa-angle-right:before { 17 | content: "\f105"; 18 | } 19 | 20 | .fa-play-circle:before { 21 | content: "\f144"; 22 | } 23 | 24 | .fa-heart:before { 25 | content: "\f004"; 26 | } 27 | 28 | .fa-info-circle:before { 29 | content: "\f05a"; 30 | } 31 | 32 | .fa-search:before { 33 | content: "\f002"; 34 | } 35 | 36 | .fa-calendar:before { 37 | content: "\f133"; 38 | } 39 | 40 | :root { 41 | --fa-style-family-brands: "Font Awesome 6 Brands"; 42 | --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"; 43 | } 44 | 45 | :root { 46 | --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free"; 47 | } 48 | 49 | :root { 50 | --fa-style-family-classic: "Font Awesome 6 Free"; 51 | --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free"; 52 | } 53 | 54 | html, 55 | body { 56 | background-color: #282828; 57 | } 58 | 59 | header { 60 | width: 100%; 61 | } 62 | 63 | footer { 64 | background: #eb3349; 65 | display: flex; 66 | flex-wrap: nowrap; 67 | align-content: center; 68 | justify-content: center; 69 | align-items: center; 70 | height: 50px; 71 | } 72 | 73 | footer div { 74 | text-align: center; 75 | } 76 | 77 | footer a { 78 | color: white; 79 | font-family: 'Montserrat', sans-serif; 80 | font-size: 11px; 81 | font-weight: 500; 82 | } 83 | 84 | @media only screen and (min-width: 400px) { 85 | footer a { 86 | font-size: 13px; 87 | } 88 | } 89 | 90 | @media only screen and (min-width: 600px) { 91 | footer a { 92 | font-size: 15px; 93 | } 94 | } 95 | 96 | #head-div { 97 | background: linear-gradient(to right, #eb3349 40%, #f45c43); 98 | width: 100%; 99 | text-align: center; 100 | padding-top: 25px; 101 | height: 86px; 102 | margin: auto; 103 | font-family: 'Roboto', sans-serif; 104 | font-weight: 500; 105 | font-size: x-large; 106 | color: white; 107 | } 108 | 109 | h1 { 110 | color: #eb3349; 111 | font-family: 'Poppins', sans-serif; 112 | } 113 | 114 | i { 115 | margin: auto; 116 | margin-right: 10px; 117 | } 118 | 119 | a { 120 | text-decoration: none; 121 | } 122 | 123 | * { 124 | box-sizing: border-box; 125 | margin: 0px; 126 | padding: 0px; 127 | } 128 | 129 | body, 130 | html { 131 | height: 100%; 132 | width: 100%; 133 | padding: 0px; 134 | margin: 0px; 135 | background-color: #14151a; 136 | background-image: none; 137 | display: block; 138 | height: fit-content; 139 | width: 100vw; 140 | } 141 | 142 | html { 143 | position: relative; 144 | } 145 | 146 | body { 147 | overflow-x: hidden; 148 | } 149 | 150 | section { 151 | position: relative; 152 | width: 100%; 153 | margin: 0px; 154 | height: fit-content; 155 | } 156 | 157 | header { 158 | position: relative; 159 | } 160 | 161 | div { 162 | box-sizing: border-box; 163 | display: block; 164 | } 165 | 166 | .poster { 167 | box-sizing: border-box; 168 | text-align: center; 169 | display: inline; 170 | padding: 20px; 171 | margin: 0px; 172 | overflow: visible; 173 | margin-top: 20px; 174 | } 175 | 176 | section img { 177 | box-sizing: border-box; 178 | height: fit-content; 179 | max-width: 200px; 180 | border: 5px solid white; 181 | border-radius: 5px; 182 | margin: auto; 183 | } 184 | 185 | h1 { 186 | font-family: 'Montserrat', sans-serif; 187 | font-size: 40px; 188 | color: white; 189 | font-weight: 700; 190 | margin: 0px; 191 | width: 100%; 192 | text-align: center; 193 | font-size: 24px; 194 | text-align: center; 195 | line-height: 1.2em; 196 | } 197 | 198 | .cbox { 199 | border: 1px #6d6d6d solid; 200 | color: #dfdfdf; 201 | font-family: 'Roboto', sans-serif; 202 | font-size: 14px; 203 | font-weight: 400; 204 | padding: 2px 4px; 205 | border-radius: 4px; 206 | } 207 | 208 | .dot { 209 | box-sizing: border-box; 210 | width: 4px; 211 | height: 4px; 212 | border-radius: 50%; 213 | background: rgba(255, 255, 255, .3); 214 | display: inline-block; 215 | margin: 3px 6px; 216 | } 217 | 218 | .year { 219 | color: #dfdfdf; 220 | font-family: 'Montserrat', sans-serif; 221 | font-size: 14px; 222 | font-weight: 400; 223 | padding: 2px 4px; 224 | } 225 | 226 | .watch-btn { 227 | background: #ed3832; 228 | color: black; 229 | border-radius: 4px; 230 | font-weight: 400; 231 | font-family: 'Montserrat', sans-serif; 232 | padding: 10px 20px; 233 | text-decoration: none; 234 | } 235 | 236 | #watchh { 237 | margin: 30px 0px 20px 0px; 238 | } 239 | 240 | @media only screen and (min-width: 600px) { 241 | h1 { 242 | font-size: 28px; 243 | } 244 | 245 | h1 { 246 | text-align: left; 247 | font-weight: 700; 248 | font-size: 30px; 249 | } 250 | 251 | #watchh { 252 | margin: 50px 0px; 253 | } 254 | 255 | section img { 256 | box-sizing: border-box; 257 | height: fit-content; 258 | max-width: 300px; 259 | width: 100%; 260 | border: 5px solid white; 261 | border-radius: 5px; 262 | margin: auto; 263 | } 264 | 265 | .poster { 266 | box-sizing: border-box; 267 | text-align: center; 268 | display: inline; 269 | margin: 0px; 270 | overflow: visible; 271 | margin-top: 20px; 272 | width: 250px; 273 | } 274 | 275 | ::-webkit-scrollbar { 276 | width: 5px; 277 | } 278 | 279 | ::-webkit-scrollbar-track { 280 | background: #f1f1f100; 281 | } 282 | 283 | ::-webkit-scrollbar-thumb { 284 | background: #888; 285 | } 286 | 287 | ::-webkit-scrollbar-thumb:hover { 288 | background: #555; 289 | } 290 | } 291 | 292 | @media only screen and (min-width: 1200px) { 293 | h1 { 294 | text-align: left; 295 | font-weight: 700; 296 | font-size: 30px; 297 | } 298 | 299 | #watchh { 300 | margin: 50px 0px; 301 | } 302 | 303 | .poster { 304 | box-sizing: border-box; 305 | text-align: center; 306 | display: inline; 307 | margin: 0px; 308 | overflow: visible; 309 | margin-top: 20px; 310 | width: 300px; 311 | } 312 | 313 | section img { 314 | height: 100%; 315 | width: 100%; 316 | } 317 | } 318 | 319 | .divox { 320 | padding: 0px; 321 | } 322 | 323 | h2 { 324 | font-family: 'Montserrat', sans-serif; 325 | color: #ed3832; 326 | font-weight: 500; 327 | width: 100%; 328 | font-size: 20px; 329 | margin: 10px; 330 | } 331 | 332 | #latest { 333 | margin-left: 20px; 334 | margin-top: 20px; 335 | margin-bottom: 15px; 336 | } 337 | 338 | #latest2 a { 339 | color: white; 340 | text-decoration: none; 341 | } 342 | 343 | #latest2 { 344 | padding: 0px; 345 | box-sizing: border-box; 346 | display: inline-block; 347 | text-align: center; 348 | width: 100%; 349 | height: fit-content; 350 | } 351 | 352 | .la-anime { 353 | display: inline-block; 354 | padding: 0px; 355 | margin: 0px 3px; 356 | margin-bottom: 6px; 357 | position: relative; 358 | width: calc(50% - 20px); 359 | max-width: 200px; 360 | } 361 | 362 | .shadow { 363 | box-shadow: inset 0px -100px 50px -50px rgba(32, 33, 37, 1); 364 | position: relative; 365 | height: 200px; 366 | z-index: 1; 367 | } 368 | 369 | #shadow1 { 370 | box-shadow: inset 0px -100px 50px -50px rgba(32, 33, 37, 1); 371 | position: absolute; 372 | top: 0px; 373 | left: 0px; 374 | right: 0px; 375 | z-index: 3; 376 | } 377 | 378 | #shadow2 { 379 | position: relative; 380 | top: 0px; 381 | left: 0px; 382 | right: 0px; 383 | z-index: 1; 384 | } 385 | 386 | .shadow img { 387 | border: none; 388 | border-radius: 0px; 389 | height: 100%; 390 | width: 100%; 391 | object-fit: cover; 392 | object-position: center; 393 | vertical-align: middle; 394 | overflow: hidden; 395 | position: relative; 396 | top: 0px; 397 | bottom: 0px; 398 | left: 0px; 399 | right: 0px; 400 | max-width: unset; 401 | z-index: 1; 402 | } 403 | 404 | .dubb { 405 | color: white; 406 | background-color: red; 407 | position: absolute; 408 | bottom: 10px; 409 | left: 10px; 410 | display: block; 411 | width: fit-content; 412 | border-radius: 4px; 413 | font-weight: 600; 414 | font-family: 'Montserrat', sans-serif; 415 | font-size: 12px; 416 | padding: 2px 4px; 417 | z-index: 5; 418 | } 419 | 420 | .dubb2 { 421 | left: unset; 422 | right: 10px; 423 | background-color: white; 424 | color: black; 425 | } 426 | 427 | .la-details { 428 | background-color: rgb(32, 33, 37); 429 | width: 100%; 430 | height: 85px; 431 | box-sizing: border-box; 432 | padding: 10px; 433 | overflow: hidden; 434 | } 435 | 436 | .la-details h3 { 437 | margin: 0px; 438 | font-family: 'Montserrat', sans-serif; 439 | font-size: 14px; 440 | text-align: left; 441 | width: 100%; 442 | color: white; 443 | font-weight: 500; 444 | margin-bottom: 8px; 445 | height: fit-content; 446 | overflow: hidden; 447 | box-sizing: border-box; 448 | -webkit-tap-highlight-color: transparent; 449 | -webkit-text-size-adjust: none; 450 | list-style: none; 451 | box-sizing: border-box; 452 | height: 37px; 453 | display: -webkit-box; 454 | -webkit-line-clamp: 2; 455 | -webkit-box-orient: vertical; 456 | overflow: hidden; 457 | } 458 | 459 | #extra { 460 | text-align: left; 461 | overflow: hidden; 462 | width: 100%; 463 | box-sizing: border-box; 464 | -webkit-tap-highlight-color: transparent; 465 | -webkit-text-size-adjust: none; 466 | list-style: none; 467 | display: -webkit-box; 468 | -webkit-line-clamp: 1; 469 | -webkit-box-orient: vertical; 470 | overflow: hidden; 471 | } 472 | 473 | .la-details span { 474 | color: rgba(255, 255, 255, .3); 475 | font-family: 'Montserrat', sans-serif; 476 | font-size: 12px; 477 | } 478 | 479 | #search-div { 480 | height: fit-content; 481 | background-color: white; 482 | border-radius: 5px; 483 | height: 40px; 484 | width: 30%; 485 | position: absolute; 486 | top: 25px; 487 | right: 10px; 488 | } 489 | 490 | #search-div input { 491 | height: 28px; 492 | background-color: rgba(255, 255, 255, 0); 493 | border: none; 494 | padding-left: 5px; 495 | font-size: 14px; 496 | font-weight: 400; 497 | color: black; 498 | overflow: visible; 499 | font-family: 'Montserrat', sans-serif; 500 | width: calc(100% - 27px); 501 | } 502 | 503 | #search-div button { 504 | background-color: rgba(255, 255, 255, 0); 505 | border: none; 506 | height: 40px; 507 | width: 20px; 508 | } 509 | 510 | #search-div button i { 511 | width: 16px; 512 | height: 16px; 513 | margin: 0px; 514 | } 515 | 516 | #search-div form { 517 | vertical-align: middle; 518 | height: 100%; 519 | width: 100%; 520 | } 521 | 522 | #query { 523 | width: calc(100% - 55px); 524 | height: 40px; 525 | } 526 | 527 | #query:focus { 528 | border: none; 529 | } 530 | 531 | #title1 { 532 | height: fit-content; 533 | width: 70%; 534 | } 535 | 536 | @media only screen and (min-width: 420px) { 537 | .shadow { 538 | height: 240px; 539 | } 540 | } 541 | 542 | @media only screen and (min-width: 580px) { 543 | #search-div input { 544 | width: calc(100% - 55px); 545 | } 546 | 547 | .la-anime { 548 | max-width: 220px; 549 | } 550 | 551 | #title1 { 552 | height: fit-content; 553 | width: 100%; 554 | text-align: center; 555 | } 556 | 557 | #search-div { 558 | height: fit-content; 559 | background-color: white; 560 | margin-right: 20px; 561 | border-radius: 5px; 562 | height: 40px; 563 | } 564 | 565 | #search-div input { 566 | height: 28px; 567 | background-color: rgba(255, 255, 255, 0); 568 | border: none; 569 | padding-left: 15px; 570 | font-size: 14px; 571 | font-weight: 400; 572 | color: black; 573 | overflow: visible; 574 | font-family: 'Montserrat', sans-serif; 575 | } 576 | 577 | #search-div button { 578 | background-color: rgba(255, 255, 255, 0); 579 | border: none; 580 | height: 40px; 581 | width: 40px; 582 | } 583 | 584 | #search-div button i { 585 | width: 16px; 586 | height: 16px; 587 | margin: 0px; 588 | } 589 | 590 | #search-div form { 591 | vertical-align: middle; 592 | height: 100%; 593 | width: 100%; 594 | } 595 | 596 | #query { 597 | width: 200px; 598 | height: 40px; 599 | } 600 | 601 | #query:focus { 602 | border: none; 603 | } 604 | 605 | #title1 { 606 | height: fit-content; 607 | width: calc(100% - 247px); 608 | text-align: center; 609 | } 610 | 611 | #search-div { 612 | position: absolute; 613 | right: 0px; 614 | top: 25px; 615 | } 616 | } 617 | 618 | @media only screen and (min-width: 1200px) { 619 | .la-anime { 620 | max-width: 220px; 621 | } 622 | 623 | #title1 { 624 | height: fit-content; 625 | width: calc(100% - 50px); 626 | text-align: center; 627 | } 628 | 629 | #search-div { 630 | position: absolute; 631 | right: 0px; 632 | top: 25px; 633 | } 634 | } 635 | 636 | * { 637 | box-sizing: border-box; 638 | } 639 | 640 | .slideshow-container { 641 | width: 100%; 642 | position: relative; 643 | } 644 | 645 | .data-slider h1 { 646 | -webkit-box-orient: vertical; 647 | display: -webkit-box; 648 | -webkit-line-clamp: 2; 649 | overflow: hidden; 650 | } 651 | 652 | .mySlides { 653 | display: none; 654 | height: 400px; 655 | width: 100%; 656 | overflow: hidden; 657 | display: none; 658 | flex-wrap: wrap; 659 | align-content: flex-end; 660 | justify-content: flex-start; 661 | } 662 | 663 | .mySlides img { 664 | width: 100%; 665 | height: 100%; 666 | max-width: unset; 667 | max-height: unset; 668 | border: none; 669 | object-fit: cover; 670 | position: absolute; 671 | } 672 | 673 | .shado { 674 | box-shadow: 75px 0px 150px 100px #14151a inset; 675 | z-index: 1; 676 | width: 100%; 677 | height: 100%; 678 | position: absolute; 679 | } 680 | 681 | .shado a { 682 | display: block; 683 | width: 100%; 684 | height: 100%; 685 | } 686 | 687 | .data-slider { 688 | z-index: 2; 689 | margin-left: 5%; 690 | max-width: 50%; 691 | } 692 | 693 | .data-slider div { 694 | margin-top: 15px; 695 | } 696 | 697 | .year { 698 | color: white; 699 | font-family: 'Montserrat', sans-serif; 700 | } 701 | 702 | .small-synop { 703 | color: white; 704 | font-family: 'Montserrat', sans-serif; 705 | font-size: 12px; 706 | margin-top: 15px; 707 | -webkit-tap-highlight-color: transparent; 708 | --breakpoint-xs: 0; 709 | --breakpoint-sm: 576px; 710 | --breakpoint-md: 768px; 711 | --breakpoint-lg: 992px; 712 | --breakpoint-xl: 1200px; 713 | text-align: left; 714 | color: #fff; 715 | -webkit-text-size-adjust: none; 716 | box-sizing: border-box; 717 | line-height: 1.6em; 718 | font-weight: 300; 719 | margin-bottom: 30px; 720 | font-size: 12px; 721 | -webkit-box-orient: vertical; 722 | display: -webkit-box; 723 | -webkit-line-clamp: 2; 724 | overflow: hidden; 725 | } 726 | 727 | .watch-btn { 728 | font-size: 14px; 729 | padding: 8px 12px; 730 | } 731 | 732 | .spotlight { 733 | color: #ed3832; 734 | font-family: 'Montserrat', sans-serif; 735 | font-size: 14px; 736 | margin-bottom: 20px; 737 | } 738 | 739 | .fa-info-circle, 740 | .fa-play-circle { 741 | margin-right: 4px; 742 | } 743 | 744 | .fa-angle-right { 745 | margin-left: 4px; 746 | margin-right: 0px; 747 | } 748 | 749 | .watch-btn2 { 750 | background-color: #4a4b51; 751 | color: white; 752 | margin-left: 15px; 753 | } 754 | 755 | .year2 { 756 | margin-left: 10px; 757 | } 758 | 759 | .year i { 760 | color: white; 761 | } 762 | 763 | .prev, 764 | .next { 765 | z-index: 5; 766 | } 767 | 768 | .cbox1 { 769 | background-color: #ed3832; 770 | color: black; 771 | font-family: 'Montserrat', sans-serif; 772 | border: none; 773 | margin-left: 10px; 774 | font-size: 12px; 775 | } 776 | 777 | .cbox2 { 778 | background-color: white; 779 | color: black; 780 | font-family: 'Montserrat', sans-serif; 781 | font-size: 12px; 782 | border: none; 783 | margin-left: 5px; 784 | } 785 | 786 | .prev, 787 | .next { 788 | cursor: pointer; 789 | position: absolute; 790 | top: 50%; 791 | width: auto; 792 | margin-top: -22px; 793 | padding: 16px; 794 | color: white; 795 | font-weight: bold; 796 | font-size: 18px; 797 | transition: 0.6s ease; 798 | border-radius: 0 3px 3px 0; 799 | user-select: none; 800 | background: rgba(0, 0, 0, .2); 801 | } 802 | 803 | .next { 804 | right: 0; 805 | border-radius: 3px 0 0 3px; 806 | } 807 | 808 | .prev:hover, 809 | .next:hover { 810 | background-color: rgba(0, 0, 0, 0.8); 811 | } 812 | 813 | .dot:hover { 814 | background-color: #717171; 815 | } 816 | 817 | .fade { 818 | animation-name: fade; 819 | animation-duration: 1.5s; 820 | } 821 | 822 | @media only screen and (max-width: 480px) { 823 | .data-slider { 824 | margin-left: 10px; 825 | } 826 | 827 | .data-slider h1 { 828 | font-size: 16px; 829 | text-align: left; 830 | } 831 | 832 | .spotlight { 833 | font-size: 12px; 834 | margin-bottom: 10px; 835 | } 836 | 837 | .extra1, 838 | .small-synop { 839 | display: none; 840 | } 841 | 842 | .mySlides { 843 | height: 320px; 844 | } 845 | 846 | .data-slider { 847 | max-width: 80%; 848 | text-align: left; 849 | } 850 | 851 | .watch-btn { 852 | font-size: 12px; 853 | padding: 6px 12px; 854 | } 855 | 856 | .watch-btn2 { 857 | margin-left: 10px; 858 | } 859 | 860 | #watchh { 861 | margin: 20px 0px; 862 | } 863 | 864 | .shado { 865 | box-shadow: 20px -20px 80px 40px #14151a inset; 866 | } 867 | } 868 | 869 | @media only screen and (max-width: 760px) and (min-width: 480px) { 870 | .shado { 871 | box-shadow: 40px -20px 100px 50px #14151a inset; 872 | } 873 | 874 | .data-slider { 875 | margin-left: 15px; 876 | } 877 | 878 | .data-slider h1 { 879 | font-size: 20px; 880 | text-align: left; 881 | } 882 | 883 | .spotlight { 884 | font-size: 14px; 885 | margin-bottom: 10px; 886 | } 887 | 888 | .extra1, 889 | .small-synop { 890 | display: none; 891 | } 892 | 893 | .mySlides { 894 | height: 350px; 895 | } 896 | 897 | .data-slider { 898 | max-width: 80%; 899 | text-align: left; 900 | } 901 | 902 | .watch-btn { 903 | font-size: 14px; 904 | padding: 6px 12px; 905 | } 906 | 907 | .watch-btn2 { 908 | margin-left: 10px; 909 | } 910 | 911 | #watchh { 912 | margin: 0px; 913 | margin-top: 30px; 914 | margin-bottom: 20px; 915 | } 916 | } 917 | 918 | #load { 919 | text-align: center; 920 | padding: 20px; 921 | } 922 | 923 | #load img { 924 | width: 5%; 925 | min-width: 35px; 926 | } 927 | 928 | @keyframes fade { 929 | from { 930 | opacity: .4; 931 | } 932 | 933 | to { 934 | opacity: 1; 935 | } 936 | } 937 | 938 | @font-face { 939 | font-family: 'Montserrat'; 940 | font-style: normal; 941 | font-weight: 400; 942 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw0aXpsog.woff2) format('woff2'); 943 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; 944 | } 945 | 946 | @font-face { 947 | font-family: 'Montserrat'; 948 | font-style: normal; 949 | font-weight: 400; 950 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw9aXpsog.woff2) format('woff2'); 951 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 952 | } 953 | 954 | @font-face { 955 | font-family: 'Montserrat'; 956 | font-style: normal; 957 | font-weight: 400; 958 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw2aXpsog.woff2) format('woff2'); 959 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; 960 | } 961 | 962 | @font-face { 963 | font-family: 'Montserrat'; 964 | font-style: normal; 965 | font-weight: 400; 966 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw3aXpsog.woff2) format('woff2'); 967 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; 968 | } 969 | 970 | @font-face { 971 | font-family: 'Montserrat'; 972 | font-style: normal; 973 | font-weight: 400; 974 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2) format('woff2'); 975 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 976 | } 977 | 978 | @font-face { 979 | font-family: 'Roboto'; 980 | font-style: normal; 981 | font-weight: 400; 982 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2'); 983 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; 984 | } 985 | 986 | @font-face { 987 | font-family: 'Roboto'; 988 | font-style: normal; 989 | font-weight: 400; 990 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2'); 991 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 992 | } 993 | 994 | @font-face { 995 | font-family: 'Roboto'; 996 | font-style: normal; 997 | font-weight: 400; 998 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2'); 999 | unicode-range: U+1F00-1FFF; 1000 | } 1001 | 1002 | @font-face { 1003 | font-family: 'Roboto'; 1004 | font-style: normal; 1005 | font-weight: 400; 1006 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2'); 1007 | unicode-range: U+0370-03FF; 1008 | } 1009 | 1010 | @font-face { 1011 | font-family: 'Roboto'; 1012 | font-style: normal; 1013 | font-weight: 400; 1014 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2'); 1015 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; 1016 | } 1017 | 1018 | @font-face { 1019 | font-family: 'Roboto'; 1020 | font-style: normal; 1021 | font-weight: 400; 1022 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2'); 1023 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; 1024 | } 1025 | 1026 | @font-face { 1027 | font-family: 'Roboto'; 1028 | font-style: normal; 1029 | font-weight: 400; 1030 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2'); 1031 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 1032 | } -------------------------------------------------------------------------------- /static/css/home_min.css: -------------------------------------------------------------------------------- 1 | .fa { font-family: var(--fa-style-family, "Font Awesome 6 Free"); font-weight: var(--fa-style, 900);}.fa { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; display: var(--fa-display, inline-block); font-style: normal; font-variant: normal; line-height: 1; text-rendering: auto;}.fa-angle-right:before { content: "\f105";}.fa-play-circle:before { content: "\f144";}.fa-heart:before { content: "\f004";}.fa-info-circle:before { content: "\f05a";}.fa-search:before { content: "\f002";}.fa-calendar:before { content: "\f133";}:root { --fa-style-family-brands: "Font Awesome 6 Brands"; --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands";}:root { --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free";}:root { --fa-style-family-classic: "Font Awesome 6 Free"; --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free";}html,body { background-color: #282828;}header { width: 100%;}footer { background: #eb3349; display: flex; flex-wrap: nowrap; align-content: center; justify-content: center; align-items: center; height: 50px;}footer div { text-align: center;}footer a { color: white; font-family: 'Montserrat', sans-serif; font-size: 11px; font-weight: 500;}@media only screen and (min-width: 400px) { footer a { font-size: 13px; }}@media only screen and (min-width: 600px) { footer a { font-size: 15px; }}#head-div { background: linear-gradient(to right, #eb3349 40%, #f45c43); width: 100%; text-align: center; padding-top: 25px; height: 86px; margin: auto; font-family: 'Roboto', sans-serif; font-weight: 500; font-size: x-large; color: white;}h1 { color: #eb3349; font-family: 'Poppins', sans-serif;}i { margin: auto; margin-right: 10px;}a { text-decoration: none;}* { box-sizing: border-box; margin: 0px; padding: 0px;}body,html { height: 100%; width: 100%; padding: 0px; margin: 0px; background-color: #14151a; background-image: none; display: block; height: fit-content; width: 100vw;}html { position: relative;}body { overflow-x: hidden;}section { position: relative; width: 100%; margin: 0px; height: fit-content;}header { position: relative;}div { box-sizing: border-box; display: block;}.poster { box-sizing: border-box; text-align: center; display: inline; padding: 20px; margin: 0px; overflow: visible; margin-top: 20px;}section img { box-sizing: border-box; height: fit-content; max-width: 200px; border: 5px solid white; border-radius: 5px; margin: auto;}h1 { font-family: 'Montserrat', sans-serif; font-size: 40px; color: white; font-weight: 700; margin: 0px; width: 100%; text-align: center; font-size: 24px; text-align: center; line-height: 1.2em;}.cbox { border: 1px #6d6d6d solid; color: #dfdfdf; font-family: 'Roboto', sans-serif; font-size: 14px; font-weight: 400; padding: 2px 4px; border-radius: 4px;}.dot { box-sizing: border-box; width: 4px; height: 4px; border-radius: 50%; background: rgba(255, 255, 255, .3); display: inline-block; margin: 3px 6px;}.year { color: #dfdfdf; font-family: 'Montserrat', sans-serif; font-size: 14px; font-weight: 400; padding: 2px 4px;}.watch-btn { background: #ed3832; color: black; border-radius: 4px; font-weight: 400; font-family: 'Montserrat', sans-serif; padding: 10px 20px; text-decoration: none;}#watchh { margin: 30px 0px 20px 0px;}@media only screen and (min-width: 600px) { h1 { font-size: 28px; } h1 { text-align: left; font-weight: 700; font-size: 30px; } #watchh { margin: 50px 0px; } section img { box-sizing: border-box; height: fit-content; max-width: 300px; width: 100%; border: 5px solid white; border-radius: 5px; margin: auto; } .poster { box-sizing: border-box; text-align: center; display: inline; margin: 0px; overflow: visible; margin-top: 20px; width: 250px; } ::-webkit-scrollbar { width: 5px; } ::-webkit-scrollbar-track { background: #f1f1f100; } ::-webkit-scrollbar-thumb { background: #888; } ::-webkit-scrollbar-thumb:hover { background: #555; }}@media only screen and (min-width: 1200px) { h1 { text-align: left; font-weight: 700; font-size: 30px; } #watchh { margin: 50px 0px; } .poster { box-sizing: border-box; text-align: center; display: inline; margin: 0px; overflow: visible; margin-top: 20px; width: 300px; } section img { height: 100%; width: 100%; }}.divox { padding: 0px;}h2 { font-family: 'Montserrat', sans-serif; color: #ed3832; font-weight: 500; width: 100%; font-size: 20px; margin: 10px;}#latest { margin-left: 20px; margin-top: 20px; margin-bottom: 15px;}#latest2 a { color: white; text-decoration: none;}#latest2 { padding: 0px; box-sizing: border-box; display: inline-block; text-align: center; width: 100%; height: fit-content;}.la-anime { display: inline-block; padding: 0px; margin: 0px 3px; margin-bottom: 6px; position: relative; width: calc(50% - 20px); max-width: 200px;}.shadow { box-shadow: inset 0px -100px 50px -50px rgba(32, 33, 37, 1); position: relative; height: 200px; z-index: 1;}#shadow1 { box-shadow: inset 0px -100px 50px -50px rgba(32, 33, 37, 1); position: absolute; top: 0px; left: 0px; right: 0px; z-index: 3;}#shadow2 { position: relative; top: 0px; left: 0px; right: 0px; z-index: 1;}.shadow img { border: none; border-radius: 0px; height: 100%; width: 100%; object-fit: cover; object-position: center; vertical-align: middle; overflow: hidden; position: relative; top: 0px; bottom: 0px; left: 0px; right: 0px; max-width: unset; z-index: 1;}.dubb { color: white; background-color: red; position: absolute; bottom: 10px; left: 10px; display: block; width: fit-content; border-radius: 4px; font-weight: 600; font-family: 'Montserrat', sans-serif; font-size: 12px; padding: 2px 4px; z-index: 5;}.dubb2 { left: unset; right: 10px; background-color: white; color: black;}.la-details { background-color: rgb(32, 33, 37); width: 100%; height: 85px; box-sizing: border-box; padding: 10px; overflow: hidden;}.la-details h3 { margin: 0px; font-family: 'Montserrat', sans-serif; font-size: 14px; text-align: left; width: 100%; color: white; font-weight: 500; margin-bottom: 8px; height: fit-content; overflow: hidden; box-sizing: border-box; -webkit-tap-highlight-color: transparent; -webkit-text-size-adjust: none; list-style: none; box-sizing: border-box; height: 37px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;}#extra { text-align: left; overflow: hidden; width: 100%; box-sizing: border-box; -webkit-tap-highlight-color: transparent; -webkit-text-size-adjust: none; list-style: none; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden;}.la-details span { color: rgba(255, 255, 255, .3); font-family: 'Montserrat', sans-serif; font-size: 12px;}#search-div { height: fit-content; background-color: white; border-radius: 5px; height: 40px; width: 30%; position: absolute; top: 25px; right: 10px;}#search-div input { height: 28px; background-color: rgba(255, 255, 255, 0); border: none; padding-left: 5px; font-size: 14px; font-weight: 400; color: black; overflow: visible; font-family: 'Montserrat', sans-serif; width: calc(100% - 27px);}#search-div button { background-color: rgba(255, 255, 255, 0); border: none; height: 40px; width: 20px;}#search-div button i { width: 16px; height: 16px; margin: 0px;}#search-div form { vertical-align: middle; height: 100%; width: 100%;}#query { width: calc(100% - 55px); height: 40px;}#query:focus { border: none;}#title1 { height: fit-content; width: 70%;}@media only screen and (min-width: 420px) { .shadow { height: 240px; }}@media only screen and (min-width: 580px) { #search-div input { width: calc(100% - 55px); } .la-anime { max-width: 220px; } #title1 { height: fit-content; width: 100%; text-align: center; } #search-div { height: fit-content; background-color: white; margin-right: 20px; border-radius: 5px; height: 40px; } #search-div input { height: 28px; background-color: rgba(255, 255, 255, 0); border: none; padding-left: 15px; font-size: 14px; font-weight: 400; color: black; overflow: visible; font-family: 'Montserrat', sans-serif; } #search-div button { background-color: rgba(255, 255, 255, 0); border: none; height: 40px; width: 40px; } #search-div button i { width: 16px; height: 16px; margin: 0px; } #search-div form { vertical-align: middle; height: 100%; width: 100%; } #query { width: 200px; height: 40px; } #query:focus { border: none; } #title1 { height: fit-content; width: calc(100% - 247px); text-align: center; } #search-div { position: absolute; right: 0px; top: 25px; }}@media only screen and (min-width: 1200px) { .la-anime { max-width: 220px; } #title1 { height: fit-content; width: calc(100% - 50px); text-align: center; } #search-div { position: absolute; right: 0px; top: 25px; }}* { box-sizing: border-box;}.slideshow-container { width: 100%; position: relative;}.data-slider h1 { -webkit-box-orient: vertical; display: -webkit-box; -webkit-line-clamp: 2; overflow: hidden;}.mySlides { display: none; height: 400px; width: 100%; overflow: hidden; display: none; flex-wrap: wrap; align-content: flex-end; justify-content: flex-start;}.mySlides img { width: 100%; height: 100%; max-width: unset; max-height: unset; border: none; object-fit: cover; position: absolute;}.shado { box-shadow: 75px 0px 150px 100px #14151a inset; z-index: 1; width: 100%; height: 100%; position: absolute;}.shado a { display: block; width: 100%; height: 100%;}.data-slider { z-index: 2; margin-left: 5%; max-width: 50%;}.data-slider div { margin-top: 15px;}.year { color: white; font-family: 'Montserrat', sans-serif;}.small-synop { color: white; font-family: 'Montserrat', sans-serif; font-size: 12px; margin-top: 15px; -webkit-tap-highlight-color: transparent; --breakpoint-xs: 0; --breakpoint-sm: 576px; --breakpoint-md: 768px; --breakpoint-lg: 992px; --breakpoint-xl: 1200px; text-align: left; color: #fff; -webkit-text-size-adjust: none; box-sizing: border-box; line-height: 1.6em; font-weight: 300; margin-bottom: 30px; font-size: 12px; -webkit-box-orient: vertical; display: -webkit-box; -webkit-line-clamp: 2; overflow: hidden;}.watch-btn { font-size: 14px; padding: 8px 12px;}.spotlight { color: #ed3832; font-family: 'Montserrat', sans-serif; font-size: 14px; margin-bottom: 20px;}.fa-info-circle,.fa-play-circle { margin-right: 4px;}.fa-angle-right { margin-left: 4px; margin-right: 0px;}.watch-btn2 { background-color: #4a4b51; color: white; margin-left: 15px;}.year2 { margin-left: 10px;}.year i { color: white;}.prev,.next { z-index: 5;}.cbox1 { background-color: #ed3832; color: black; font-family: 'Montserrat', sans-serif; border: none; margin-left: 10px; font-size: 12px;}.cbox2 { background-color: white; color: black; font-family: 'Montserrat', sans-serif; font-size: 12px; border: none; margin-left: 5px;}.prev,.next { cursor: pointer; position: absolute; top: 50%; width: auto; margin-top: -22px; padding: 16px; color: white; font-weight: bold; font-size: 18px; transition: 0.6s ease; border-radius: 0 3px 3px 0; user-select: none; background: rgba(0, 0, 0, .2);}.next { right: 0; border-radius: 3px 0 0 3px;}.prev:hover,.next:hover { background-color: rgba(0, 0, 0, 0.8);}.dot:hover { background-color: #717171;}.fade { animation-name: fade; animation-duration: 1.5s;}@media only screen and (max-width: 480px) { .data-slider { margin-left: 10px; } .data-slider h1 { font-size: 16px; text-align: left; } .spotlight { font-size: 12px; margin-bottom: 10px; } .extra1, .small-synop { display: none; } .mySlides { height: 320px; } .data-slider { max-width: 80%; text-align: left; } .watch-btn { font-size: 12px; padding: 6px 12px; } .watch-btn2 { margin-left: 10px; } #watchh { margin: 20px 0px; } .shado { box-shadow: 20px -20px 80px 40px #14151a inset; }}@media only screen and (max-width: 760px) and (min-width: 480px) { .shado { box-shadow: 40px -20px 100px 50px #14151a inset; } .data-slider { margin-left: 15px; } .data-slider h1 { font-size: 20px; text-align: left; } .spotlight { font-size: 14px; margin-bottom: 10px; } .extra1, .small-synop { display: none; } .mySlides { height: 350px; } .data-slider { max-width: 80%; text-align: left; } .watch-btn { font-size: 14px; padding: 6px 12px; } .watch-btn2 { margin-left: 10px; } #watchh { margin: 0px; margin-top: 30px; margin-bottom: 20px; }}#load { text-align: center; padding: 20px;}#load img { width: 5%; min-width: 35px;}@keyframes fade { from { opacity: .4; } to { opacity: 1; }}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw0aXpsog.woff2) format('woff2'); unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw9aXpsog.woff2) format('woff2'); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw2aXpsog.woff2) format('woff2'); unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw3aXpsog.woff2) format('woff2'); unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2'); unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2'); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2'); unicode-range: U+1F00-1FFF;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2'); unicode-range: U+0370-03FF;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2'); unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2'); unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;} -------------------------------------------------------------------------------- /static/css/search.css: -------------------------------------------------------------------------------- 1 | .fa { 2 | font-family: var(--fa-style-family, "Font Awesome 6 Free"); 3 | font-weight: var(--fa-style, 900); 4 | } 5 | 6 | .fa { 7 | -moz-osx-font-smoothing: grayscale; 8 | -webkit-font-smoothing: antialiased; 9 | display: var(--fa-display, inline-block); 10 | font-style: normal; 11 | font-variant: normal; 12 | line-height: 1; 13 | text-rendering: auto; 14 | } 15 | 16 | .fa-heart:before { 17 | content: "\f004"; 18 | } 19 | 20 | .fa-search:before { 21 | content: "\f002"; 22 | } 23 | 24 | :root { 25 | --fa-style-family-brands: "Font Awesome 6 Brands"; 26 | --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"; 27 | } 28 | 29 | :root { 30 | --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free"; 31 | } 32 | 33 | :root { 34 | --fa-style-family-classic: "Font Awesome 6 Free"; 35 | --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free"; 36 | } 37 | 38 | html, 39 | body { 40 | background-color: #282828; 41 | } 42 | 43 | header { 44 | width: 100%; 45 | } 46 | 47 | footer { 48 | background: #eb3349; 49 | display: flex; 50 | flex-wrap: nowrap; 51 | align-content: center; 52 | justify-content: center; 53 | align-items: center; 54 | height: 50px; 55 | } 56 | 57 | footer div { 58 | text-align: center; 59 | } 60 | 61 | footer a { 62 | color: white; 63 | font-family: 'Montserrat', sans-serif; 64 | font-size: 11px; 65 | font-weight: 500; 66 | } 67 | 68 | @media only screen and (min-width: 400px) { 69 | footer a { 70 | font-size: 13px; 71 | } 72 | } 73 | 74 | @media only screen and (min-width: 600px) { 75 | footer a { 76 | font-size: 15px; 77 | } 78 | } 79 | 80 | #head-div { 81 | background: linear-gradient(to right, #eb3349 40%, #f45c43); 82 | width: 100%; 83 | text-align: center; 84 | padding-top: 25px; 85 | height: 86px; 86 | margin: auto; 87 | font-family: 'Roboto', sans-serif; 88 | font-weight: 500; 89 | font-size: x-large; 90 | color: white; 91 | } 92 | 93 | i { 94 | margin: auto; 95 | margin-right: 10px; 96 | } 97 | 98 | a { 99 | text-decoration: none; 100 | } 101 | 102 | * { 103 | box-sizing: border-box; 104 | margin: 0px; 105 | padding: 0px; 106 | } 107 | 108 | body, 109 | html { 110 | height: 100%; 111 | width: 100%; 112 | padding: 0px; 113 | margin: 0px; 114 | background-color: #14151a; 115 | background-image: none; 116 | display: block; 117 | height: fit-content; 118 | width: 100vw; 119 | } 120 | 121 | html { 122 | position: relative; 123 | } 124 | 125 | body { 126 | overflow-x: hidden; 127 | } 128 | 129 | section { 130 | position: relative; 131 | width: 100%; 132 | margin: 0px; 133 | height: fit-content; 134 | } 135 | 136 | header { 137 | position: relative; 138 | } 139 | 140 | div { 141 | box-sizing: border-box; 142 | display: block; 143 | } 144 | 145 | .poster { 146 | box-sizing: border-box; 147 | text-align: center; 148 | display: inline; 149 | padding: 20px; 150 | margin: 0px; 151 | overflow: visible; 152 | margin-top: 20px; 153 | } 154 | 155 | section img { 156 | box-sizing: border-box; 157 | height: fit-content; 158 | max-width: 200px; 159 | border: 5px solid white; 160 | border-radius: 5px; 161 | margin: auto; 162 | } 163 | 164 | @media only screen and (min-width: 600px) { 165 | section img { 166 | box-sizing: border-box; 167 | height: fit-content; 168 | max-width: 300px; 169 | width: 100%; 170 | border: 5px solid white; 171 | border-radius: 5px; 172 | margin: auto; 173 | } 174 | 175 | .poster { 176 | box-sizing: border-box; 177 | text-align: center; 178 | display: inline; 179 | margin: 0px; 180 | overflow: visible; 181 | margin-top: 20px; 182 | width: 250px; 183 | } 184 | 185 | ::-webkit-scrollbar { 186 | width: 5px; 187 | } 188 | 189 | ::-webkit-scrollbar-track { 190 | background: #f1f1f100; 191 | } 192 | 193 | ::-webkit-scrollbar-thumb { 194 | background: #888; 195 | } 196 | 197 | ::-webkit-scrollbar-thumb:hover { 198 | background: #555; 199 | } 200 | } 201 | 202 | @media only screen and (min-width: 1200px) { 203 | .poster { 204 | box-sizing: border-box; 205 | text-align: center; 206 | display: inline; 207 | margin: 0px; 208 | overflow: visible; 209 | margin-top: 20px; 210 | width: 300px; 211 | } 212 | 213 | section img { 214 | height: 100%; 215 | width: 100%; 216 | } 217 | } 218 | 219 | .divox { 220 | padding: 0px; 221 | } 222 | 223 | h2 { 224 | font-family: 'Montserrat', sans-serif; 225 | color: #ed3832; 226 | font-weight: 500; 227 | width: 100%; 228 | font-size: 20px; 229 | margin: 10px; 230 | } 231 | 232 | #latest { 233 | margin-left: 20px; 234 | margin-top: 20px; 235 | margin-bottom: 15px; 236 | } 237 | 238 | #latest2 a { 239 | color: white; 240 | text-decoration: none; 241 | } 242 | 243 | #latest2 { 244 | padding: 0px; 245 | box-sizing: border-box; 246 | display: inline-block; 247 | text-align: center; 248 | width: 100%; 249 | height: fit-content; 250 | } 251 | 252 | .la-anime { 253 | display: inline-block; 254 | padding: 0px; 255 | margin: 0px 3px; 256 | margin-bottom: 6px; 257 | position: relative; 258 | width: calc(50% - 20px); 259 | max-width: 200px; 260 | } 261 | 262 | .shadow { 263 | box-shadow: inset 0px -100px 50px -50px rgba(32, 33, 37, 1); 264 | position: relative; 265 | height: 200px; 266 | z-index: 1; 267 | } 268 | 269 | #shadow1 { 270 | box-shadow: inset 0px -100px 50px -50px rgba(32, 33, 37, 1); 271 | position: absolute; 272 | top: 0px; 273 | left: 0px; 274 | right: 0px; 275 | z-index: 3; 276 | } 277 | 278 | #shadow2 { 279 | position: relative; 280 | top: 0px; 281 | left: 0px; 282 | right: 0px; 283 | z-index: 1; 284 | } 285 | 286 | .shadow img { 287 | border: none; 288 | border-radius: 0px; 289 | height: 100%; 290 | width: 100%; 291 | object-fit: cover; 292 | object-position: center; 293 | vertical-align: middle; 294 | overflow: hidden; 295 | position: relative; 296 | top: 0px; 297 | bottom: 0px; 298 | left: 0px; 299 | right: 0px; 300 | max-width: unset; 301 | z-index: 1; 302 | } 303 | 304 | .dubb { 305 | color: white; 306 | background-color: red; 307 | position: absolute; 308 | bottom: 10px; 309 | left: 10px; 310 | display: block; 311 | width: fit-content; 312 | border-radius: 4px; 313 | font-weight: 600; 314 | font-family: 'Montserrat', sans-serif; 315 | font-size: 12px; 316 | padding: 2px 4px; 317 | z-index: 5; 318 | } 319 | 320 | .la-details { 321 | background-color: rgb(32, 33, 37); 322 | width: 100%; 323 | height: 85px; 324 | box-sizing: border-box; 325 | padding: 10px; 326 | overflow: hidden; 327 | } 328 | 329 | .la-details h3 { 330 | margin: 0px; 331 | font-family: 'Montserrat', sans-serif; 332 | font-size: 14px; 333 | text-align: left; 334 | width: 100%; 335 | color: white; 336 | font-weight: 500; 337 | margin-bottom: 8px; 338 | height: fit-content; 339 | overflow: hidden; 340 | box-sizing: border-box; 341 | -webkit-tap-highlight-color: transparent; 342 | -webkit-text-size-adjust: none; 343 | list-style: none; 344 | box-sizing: border-box; 345 | height: 37px; 346 | display: -webkit-box; 347 | -webkit-line-clamp: 2; 348 | -webkit-box-orient: vertical; 349 | overflow: hidden; 350 | } 351 | 352 | #extra { 353 | text-align: left; 354 | overflow: hidden; 355 | width: 100%; 356 | box-sizing: border-box; 357 | -webkit-tap-highlight-color: transparent; 358 | -webkit-text-size-adjust: none; 359 | list-style: none; 360 | display: -webkit-box; 361 | -webkit-line-clamp: 1; 362 | -webkit-box-orient: vertical; 363 | overflow: hidden; 364 | } 365 | 366 | .la-details span { 367 | color: rgba(255, 255, 255, .3); 368 | font-family: 'Montserrat', sans-serif; 369 | font-size: 12px; 370 | } 371 | 372 | #head-div { 373 | padding-top: 25px; 374 | width: 100%; 375 | } 376 | 377 | #title1 { 378 | height: fit-content; 379 | width: 70%; 380 | } 381 | 382 | #search-div { 383 | height: fit-content; 384 | background-color: white; 385 | border-radius: 5px; 386 | height: 40px; 387 | width: 30%; 388 | position: absolute; 389 | top: 25px; 390 | right: 10px; 391 | } 392 | 393 | #search-div input { 394 | height: 28px; 395 | background-color: rgba(255, 255, 255, 0); 396 | border: none; 397 | padding-left: 5px; 398 | font-size: 14px; 399 | font-weight: 400; 400 | color: black; 401 | overflow: visible; 402 | font-family: 'Montserrat', sans-serif; 403 | width: calc(100% - 27px); 404 | } 405 | 406 | #search-div button { 407 | background-color: rgba(255, 255, 255, 0); 408 | border: none; 409 | height: 40px; 410 | width: 20px; 411 | } 412 | 413 | #search-div button i { 414 | width: 16px; 415 | height: 16px; 416 | margin: 0px; 417 | } 418 | 419 | #search-div form { 420 | vertical-align: middle; 421 | height: 100%; 422 | width: 100%; 423 | } 424 | 425 | #query { 426 | width: calc(100% - 55px); 427 | height: 40px; 428 | } 429 | 430 | #query:focus { 431 | border: none; 432 | } 433 | 434 | @media only screen and (min-width: 420px) { 435 | .shadow { 436 | height: 240px; 437 | } 438 | } 439 | 440 | @media only screen and (min-width: 580px) { 441 | #search-div input { 442 | width: calc(100% - 55px); 443 | } 444 | 445 | .la-anime { 446 | max-width: 220px; 447 | } 448 | 449 | #head-div { 450 | padding-top: 25px; 451 | width: 100%; 452 | } 453 | 454 | #title1 { 455 | height: fit-content; 456 | width: 100%; 457 | text-align: center; 458 | } 459 | 460 | #search-div { 461 | height: fit-content; 462 | background-color: white; 463 | margin-right: 20px; 464 | border-radius: 5px; 465 | height: 40px; 466 | } 467 | 468 | #search-div input { 469 | height: 28px; 470 | background-color: rgba(255, 255, 255, 0); 471 | border: none; 472 | padding-left: 15px; 473 | font-size: 14px; 474 | font-weight: 400; 475 | color: black; 476 | overflow: visible; 477 | font-family: 'Montserrat', sans-serif; 478 | } 479 | 480 | #search-div button { 481 | background-color: rgba(255, 255, 255, 0); 482 | border: none; 483 | height: 40px; 484 | width: 40px; 485 | } 486 | 487 | #search-div button i { 488 | width: 16px; 489 | height: 16px; 490 | margin: 0px; 491 | } 492 | 493 | #search-div form { 494 | vertical-align: middle; 495 | height: 100%; 496 | width: 100%; 497 | } 498 | 499 | #query { 500 | width: 200px; 501 | height: 40px; 502 | } 503 | 504 | #query:focus { 505 | border: none; 506 | } 507 | 508 | #title1 { 509 | height: fit-content; 510 | width: calc(100% - 247px); 511 | text-align: center; 512 | } 513 | 514 | #search-div { 515 | position: absolute; 516 | right: 0px; 517 | top: 25px; 518 | } 519 | } 520 | 521 | @media only screen and (min-width: 1200px) { 522 | .la-anime { 523 | max-width: 220px; 524 | } 525 | 526 | #title1 { 527 | height: fit-content; 528 | width: calc(100% - 50px); 529 | text-align: center; 530 | } 531 | 532 | #search-div { 533 | position: absolute; 534 | right: 0px; 535 | top: 25px; 536 | } 537 | } 538 | 539 | @font-face { 540 | font-family: 'Montserrat'; 541 | font-style: normal; 542 | font-weight: 400; 543 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw0aXpsog.woff2) format('woff2'); 544 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; 545 | } 546 | 547 | @font-face { 548 | font-family: 'Montserrat'; 549 | font-style: normal; 550 | font-weight: 400; 551 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw9aXpsog.woff2) format('woff2'); 552 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 553 | } 554 | 555 | @font-face { 556 | font-family: 'Montserrat'; 557 | font-style: normal; 558 | font-weight: 400; 559 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw2aXpsog.woff2) format('woff2'); 560 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; 561 | } 562 | 563 | @font-face { 564 | font-family: 'Montserrat'; 565 | font-style: normal; 566 | font-weight: 400; 567 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw3aXpsog.woff2) format('woff2'); 568 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; 569 | } 570 | 571 | @font-face { 572 | font-family: 'Montserrat'; 573 | font-style: normal; 574 | font-weight: 400; 575 | src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2) format('woff2'); 576 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 577 | } 578 | 579 | @font-face { 580 | font-family: 'Roboto'; 581 | font-style: normal; 582 | font-weight: 400; 583 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2'); 584 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; 585 | } 586 | 587 | @font-face { 588 | font-family: 'Roboto'; 589 | font-style: normal; 590 | font-weight: 400; 591 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2'); 592 | unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 593 | } 594 | 595 | @font-face { 596 | font-family: 'Roboto'; 597 | font-style: normal; 598 | font-weight: 400; 599 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2'); 600 | unicode-range: U+1F00-1FFF; 601 | } 602 | 603 | @font-face { 604 | font-family: 'Roboto'; 605 | font-style: normal; 606 | font-weight: 400; 607 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2'); 608 | unicode-range: U+0370-03FF; 609 | } 610 | 611 | @font-face { 612 | font-family: 'Roboto'; 613 | font-style: normal; 614 | font-weight: 400; 615 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2'); 616 | unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; 617 | } 618 | 619 | @font-face { 620 | font-family: 'Roboto'; 621 | font-style: normal; 622 | font-weight: 400; 623 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2'); 624 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; 625 | } 626 | 627 | @font-face { 628 | font-family: 'Roboto'; 629 | font-style: normal; 630 | font-weight: 400; 631 | src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2'); 632 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 633 | } -------------------------------------------------------------------------------- /static/css/search_min.css: -------------------------------------------------------------------------------- 1 | .fa { font-family: var(--fa-style-family, "Font Awesome 6 Free"); font-weight: var(--fa-style, 900);}.fa { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; display: var(--fa-display, inline-block); font-style: normal; font-variant: normal; line-height: 1; text-rendering: auto;}.fa-heart:before { content: "\f004";}.fa-search:before { content: "\f002";}:root { --fa-style-family-brands: "Font Awesome 6 Brands"; --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands";}:root { --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free";}:root { --fa-style-family-classic: "Font Awesome 6 Free"; --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free";}html,body { background-color: #282828;}header { width: 100%;}footer { background: #eb3349; display: flex; flex-wrap: nowrap; align-content: center; justify-content: center; align-items: center; height: 50px;}footer div { text-align: center;}footer a { color: white; font-family: 'Montserrat', sans-serif; font-size: 11px; font-weight: 500;}@media only screen and (min-width: 400px) { footer a { font-size: 13px; }}@media only screen and (min-width: 600px) { footer a { font-size: 15px; }}#head-div { background: linear-gradient(to right, #eb3349 40%, #f45c43); width: 100%; text-align: center; padding-top: 25px; height: 86px; margin: auto; font-family: 'Roboto', sans-serif; font-weight: 500; font-size: x-large; color: white;}i { margin: auto; margin-right: 10px;}a { text-decoration: none;}* { box-sizing: border-box; margin: 0px; padding: 0px;}body,html { height: 100%; width: 100%; padding: 0px; margin: 0px; background-color: #14151a; background-image: none; display: block; height: fit-content; width: 100vw;}html { position: relative;}body { overflow-x: hidden;}section { position: relative; width: 100%; margin: 0px; height: fit-content;}header { position: relative;}div { box-sizing: border-box; display: block;}.poster { box-sizing: border-box; text-align: center; display: inline; padding: 20px; margin: 0px; overflow: visible; margin-top: 20px;}section img { box-sizing: border-box; height: fit-content; max-width: 200px; border: 5px solid white; border-radius: 5px; margin: auto;}@media only screen and (min-width: 600px) { section img { box-sizing: border-box; height: fit-content; max-width: 300px; width: 100%; border: 5px solid white; border-radius: 5px; margin: auto; } .poster { box-sizing: border-box; text-align: center; display: inline; margin: 0px; overflow: visible; margin-top: 20px; width: 250px; } ::-webkit-scrollbar { width: 5px; } ::-webkit-scrollbar-track { background: #f1f1f100; } ::-webkit-scrollbar-thumb { background: #888; } ::-webkit-scrollbar-thumb:hover { background: #555; }}@media only screen and (min-width: 1200px) { .poster { box-sizing: border-box; text-align: center; display: inline; margin: 0px; overflow: visible; margin-top: 20px; width: 300px; } section img { height: 100%; width: 100%; }}.divox { padding: 0px;}h2 { font-family: 'Montserrat', sans-serif; color: #ed3832; font-weight: 500; width: 100%; font-size: 20px; margin: 10px;}#latest { margin-left: 20px; margin-top: 20px; margin-bottom: 15px;}#latest2 a { color: white; text-decoration: none;}#latest2 { padding: 0px; box-sizing: border-box; display: inline-block; text-align: center; width: 100%; height: fit-content;}.la-anime { display: inline-block; padding: 0px; margin: 0px 3px; margin-bottom: 6px; position: relative; width: calc(50% - 20px); max-width: 200px;}.shadow { box-shadow: inset 0px -100px 50px -50px rgba(32, 33, 37, 1); position: relative; height: 200px; z-index: 1;}#shadow1 { box-shadow: inset 0px -100px 50px -50px rgba(32, 33, 37, 1); position: absolute; top: 0px; left: 0px; right: 0px; z-index: 3;}#shadow2 { position: relative; top: 0px; left: 0px; right: 0px; z-index: 1;}.shadow img { border: none; border-radius: 0px; height: 100%; width: 100%; object-fit: cover; object-position: center; vertical-align: middle; overflow: hidden; position: relative; top: 0px; bottom: 0px; left: 0px; right: 0px; max-width: unset; z-index: 1;}.dubb { color: white; background-color: red; position: absolute; bottom: 10px; left: 10px; display: block; width: fit-content; border-radius: 4px; font-weight: 600; font-family: 'Montserrat', sans-serif; font-size: 12px; padding: 2px 4px; z-index: 5;}.la-details { background-color: rgb(32, 33, 37); width: 100%; height: 85px; box-sizing: border-box; padding: 10px; overflow: hidden;}.la-details h3 { margin: 0px; font-family: 'Montserrat', sans-serif; font-size: 14px; text-align: left; width: 100%; color: white; font-weight: 500; margin-bottom: 8px; height: fit-content; overflow: hidden; box-sizing: border-box; -webkit-tap-highlight-color: transparent; -webkit-text-size-adjust: none; list-style: none; box-sizing: border-box; height: 37px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;}#extra { text-align: left; overflow: hidden; width: 100%; box-sizing: border-box; -webkit-tap-highlight-color: transparent; -webkit-text-size-adjust: none; list-style: none; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden;}.la-details span { color: rgba(255, 255, 255, .3); font-family: 'Montserrat', sans-serif; font-size: 12px;}#head-div { padding-top: 25px; width: 100%;}#title1 { height: fit-content; width: 70%;}#search-div { height: fit-content; background-color: white; border-radius: 5px; height: 40px; width: 30%; position: absolute; top: 25px; right: 10px;}#search-div input { height: 28px; background-color: rgba(255, 255, 255, 0); border: none; padding-left: 5px; font-size: 14px; font-weight: 400; color: black; overflow: visible; font-family: 'Montserrat', sans-serif; width: calc(100% - 27px);}#search-div button { background-color: rgba(255, 255, 255, 0); border: none; height: 40px; width: 20px;}#search-div button i { width: 16px; height: 16px; margin: 0px;}#search-div form { vertical-align: middle; height: 100%; width: 100%;}#query { width: calc(100% - 55px); height: 40px;}#query:focus { border: none;}@media only screen and (min-width: 420px) { .shadow { height: 240px; }}@media only screen and (min-width: 580px) { #search-div input { width: calc(100% - 55px); } .la-anime { max-width: 220px; } #head-div { padding-top: 25px; width: 100%; } #title1 { height: fit-content; width: 100%; text-align: center; } #search-div { height: fit-content; background-color: white; margin-right: 20px; border-radius: 5px; height: 40px; } #search-div input { height: 28px; background-color: rgba(255, 255, 255, 0); border: none; padding-left: 15px; font-size: 14px; font-weight: 400; color: black; overflow: visible; font-family: 'Montserrat', sans-serif; } #search-div button { background-color: rgba(255, 255, 255, 0); border: none; height: 40px; width: 40px; } #search-div button i { width: 16px; height: 16px; margin: 0px; } #search-div form { vertical-align: middle; height: 100%; width: 100%; } #query { width: 200px; height: 40px; } #query:focus { border: none; } #title1 { height: fit-content; width: calc(100% - 247px); text-align: center; } #search-div { position: absolute; right: 0px; top: 25px; }}@media only screen and (min-width: 1200px) { .la-anime { max-width: 220px; } #title1 { height: fit-content; width: calc(100% - 50px); text-align: center; } #search-div { position: absolute; right: 0px; top: 25px; }}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw0aXpsog.woff2) format('woff2'); unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw9aXpsog.woff2) format('woff2'); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw2aXpsog.woff2) format('woff2'); unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw3aXpsog.woff2) format('woff2'); unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/montserrat/v25/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2'); unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2'); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2'); unicode-range: U+1F00-1FFF;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2'); unicode-range: U+0370-03FF;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2'); unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2'); unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face { font-family: 'Roboto'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;} -------------------------------------------------------------------------------- /static/img/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TechShreyash/AnimeDex/7fa1d96bf88bc33e170efc72d3253f82f0c4e5be/static/img/cover.jpg -------------------------------------------------------------------------------- /static/img/favicon-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TechShreyash/AnimeDex/7fa1d96bf88bc33e170efc72d3253f82f0c4e5be/static/img/favicon-5.png -------------------------------------------------------------------------------- /static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TechShreyash/AnimeDex/7fa1d96bf88bc33e170efc72d3253f82f0c4e5be/static/img/favicon.ico -------------------------------------------------------------------------------- /static/img/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TechShreyash/AnimeDex/7fa1d96bf88bc33e170efc72d3253f82f0c4e5be/static/img/header.png -------------------------------------------------------------------------------- /static/img/headerr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TechShreyash/AnimeDex/7fa1d96bf88bc33e170efc72d3253f82f0c4e5be/static/img/headerr.png -------------------------------------------------------------------------------- /static/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TechShreyash/AnimeDex/7fa1d96bf88bc33e170efc72d3253f82f0c4e5be/static/img/loading.gif -------------------------------------------------------------------------------- /static/img/loading2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TechShreyash/AnimeDex/7fa1d96bf88bc33e170efc72d3253f82f0c4e5be/static/img/loading2.gif -------------------------------------------------------------------------------- /static/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: SemrushBot 2 | User-agent: SiteAuditBot 3 | User-agent: SemrushBot-BA 4 | User-agent: SemrushBot-SI 5 | User-agent: SemrushBot-SWA 6 | User-agent: SemrushBot-CT 7 | User-agent: SplitSignalBot 8 | User-agent: SemrushBot-COUB 9 | Disallow: / 10 | 11 | User-agent: * 12 | Allow: / 13 | Disallow: /emded/ 14 | Disallow: /api/ 15 | -------------------------------------------------------------------------------- /templates/anime.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | Watch {{ TITLE }} - AnimeDex 8 | 9 | 10 | 12 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 32 | 33 | 34 | 35 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 49 | 50 | 51 | 52 |
53 |
54 | AnimeDex 56 |
57 |
58 |
59 | 60 | 62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 | 72 |
73 |
74 |

{{ TITLE }}

75 |
76 | HD 77 | {{ LANG }} 78 | 79 | {{ TYPE }} 80 |
81 | 86 |
87 | SYNOPSIS 88 |
89 |
90 |
91 |
92 | Overview: 93 | SYNOPSIS 94 |
95 | 96 |
97 | Other Names: 98 | {{ OTHER }} 99 |
100 |
101 | Episodes: 102 | {{ TOTAL }} 103 |
104 |
105 | Release Year: 106 | {{ YEAR }} 107 |
108 |
109 | Type: 110 | {{ TYPE }} 111 |
112 |
113 | Status: 114 | {{ STATUS }} 115 |
116 |
117 | Studios: 118 | {{ STUDIO }} 119 |
120 | 121 |
122 | Genres: GENERES 123 |
124 | 125 | 126 | 127 |
128 |
129 |
130 | 131 |
132 |
133 |

List Of Episodes:

134 |
135 | EPISODES 136 |
137 |
138 | 139 |
140 | 141 |
142 |
143 |

Similar Animes

144 |
145 | DISPLAY_ANIME 146 |
147 |
148 |
149 |
150 | 156 |
157 | 158 | 174 | 175 | 176 | -------------------------------------------------------------------------------- /templates/anime_min.html: -------------------------------------------------------------------------------- 1 | Watch {{ TITLE }} - AnimeDex
AnimeDex

{{ TITLE }}

HD {{ LANG }} {{ TYPE }}
SYNOPSIS
Overview: SYNOPSIS
Other Names: {{ OTHER }}
Episodes: {{ TOTAL }}
Release Year: {{ YEAR }}
Type: {{ TYPE }}
Status: {{ STATUS }}
Studios: {{ STUDIO }}
Genres: GENERES

List Of Episodes:

EPISODES

Similar Animes

DISPLAY_ANIME


-------------------------------------------------------------------------------- /templates/embed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | Watch Episode {{ title }} - {{ heading }} - AnimeDex 8 | 9 | 10 | 12 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 32 | 33 | 34 | 35 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
47 |
48 | 49 |
50 | 52 | 53 |
54 | 55 |
56 | 57 |
58 |
59 |
60 | You are watching Episode {{ title }}If current server doesn't work please try other servers 61 | beside. 62 |
63 |
64 | 65 | SERVER 66 |
67 |
68 |
69 | 72 | LISTHTML 73 |
74 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /templates/embed_min.html: -------------------------------------------------------------------------------- 1 | Watch Episode {{ title }} - {{ heading }} - AnimeDex
You are watching Episode {{ title }}If current server doesn't work please try other servers beside.
SERVER
LISTHTML
-------------------------------------------------------------------------------- /templates/episode.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | Watch Episode {{ title }} - {{ heading }} - AnimeDex 8 | 9 | 10 | 12 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 32 | 33 | 34 | 35 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
47 |
48 | AnimeDex 50 |
51 |
52 |
53 | 54 | 56 |
57 |
58 |
59 | 60 | 61 |
62 |
63 | 64 |
65 | 67 | 68 |
69 | 70 |
71 | 72 |
73 |
74 |
75 | You are watching Episode {{ title }}If current server doesn't work please try other servers 76 | beside. 77 |
78 |
79 | 80 | SERVER 81 |
82 |
83 |
84 | 87 |
88 |

List Of Episodes:

89 |
90 | EPISOS 91 |
92 |
93 |
94 |
95 | 101 |
102 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /templates/episode_min.html: -------------------------------------------------------------------------------- 1 | Watch Episode {{ title }} - {{ heading }} - AnimeDex
AnimeDex
You are watching Episode {{ title }}If current server doesn't work please try other servers beside.
SERVER

List Of Episodes:

EPISOS


-------------------------------------------------------------------------------- /templates/home.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | AnimeDex - Watch High Quality Anime Online 8 | 9 | 10 | 12 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 32 | 33 | 34 | 35 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | AnimeDex 49 |
50 |
51 |
52 | 53 | 55 |
56 |
57 |
58 | 59 |
60 |
61 | 62 | SLIDERS 63 | 64 | 65 | 66 |
67 |
68 | 69 |
70 |
71 |

Most Popular

72 |
73 | MOST_POPULAR 74 |
75 |
76 |
77 |
78 |
79 |

Recent Release

80 |
81 | RECENT_RELEASE 82 |
83 |
84 |
85 |
Loading...
87 |
88 | 94 |
95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /templates/home_min.html: -------------------------------------------------------------------------------- 1 | AnimeDex - Watch High Quality Anime Online
AnimeDex
SLIDERS

Most Popular

MOST_POPULAR

Recent Release

RECENT_RELEASE
Loading...


-------------------------------------------------------------------------------- /templates/search.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | AnimeDex - Watch High Quality Anime Online 8 | 9 | 10 | 12 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 32 | 33 | 34 | 35 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | AnimeDex 49 |
50 |
51 |
52 | 53 | 55 |
56 |
57 |
58 |
59 |
60 |

Search Results: {{ aid }}

61 |
62 | SEARCHED 63 |
64 |
65 |
66 |
67 | 73 |
74 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /templates/search_min.html: -------------------------------------------------------------------------------- 1 | AnimeDex - Watch High Quality Anime Online
AnimeDex

Search Results: {{ aid }}

SEARCHED


-------------------------------------------------------------------------------- /templates/vid.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | AnimeDex VideoPlayer 8 | 9 | 10 | 11 | 12 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
37 | 40 |
41 | 42 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /templates/vid_min.html: -------------------------------------------------------------------------------- 1 | AnimeDex VideoPlayer
-------------------------------------------------------------------------------- /utils/anilist.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | import requests 3 | 4 | cache = {"recommend": {}} 5 | 6 | 7 | def get_season(future: bool = False): 8 | k = datetime.now() 9 | m = k.month 10 | if future: 11 | m = m + 3 12 | y = k.year 13 | if m > 12: 14 | y = y + 1 15 | if m in [1, 2, 3] or m > 12: 16 | return "WINTER", y 17 | if m in [4, 5, 6]: 18 | return "SPRING", y 19 | if m in [7, 8, 9]: 20 | return "SUMMER", y 21 | if m in [10, 11, 12]: 22 | return "FALL", y 23 | 24 | 25 | class Anilist: 26 | def __init__(self) -> None: 27 | 28 | self.BROWSE_QUERY = """ 29 | query ($s: MediaSeason, $y: Int, $sort: [MediaSort]) { 30 | Page (perPage:10) { 31 | media (season: $s, seasonYear: $y, sort: $sort) { 32 | title { 33 | romaji 34 | english 35 | native 36 | } 37 | format 38 | genres 39 | episodes 40 | bannerImage 41 | coverImage{ 42 | medium 43 | } 44 | type 45 | status 46 | description 47 | } 48 | } 49 | } 50 | """ 51 | self.ANIME_QUERY = """ 52 | query ($id: Int, $idMal: Int, $search: String) { 53 | Media(id: $id, idMal: $idMal, search: $search, type: ANIME) { 54 | id 55 | idMal 56 | title { 57 | romaji 58 | english 59 | native 60 | } 61 | format 62 | status 63 | episodes 64 | seasonYear 65 | season 66 | description 67 | studios(sort: FAVOURITES_DESC, isMain: true) { 68 | nodes { 69 | name 70 | } 71 | } 72 | bannerImage 73 | coverImage { 74 | medium 75 | } 76 | genres 77 | averageScore 78 | recommendations { 79 | edges { 80 | node { 81 | id 82 | mediaRecommendation { 83 | id 84 | title { 85 | romaji 86 | english 87 | native 88 | } 89 | status 90 | episodes 91 | coverImage { 92 | medium 93 | } 94 | bannerImage 95 | format 96 | meanScore 97 | } 98 | } 99 | } 100 | } 101 | } 102 | } 103 | """ 104 | self.RECOMMENDATIONS = """ 105 | query ($id: Int, $idMal: Int, $search: String) { 106 | Media(id: $id, idMal: $idMal, search: $search, type: ANIME) { 107 | recommendations { 108 | edges { 109 | node { 110 | id 111 | mediaRecommendation { 112 | id 113 | title { 114 | romaji 115 | english 116 | native 117 | } 118 | status 119 | episodes 120 | coverImage { 121 | medium 122 | } 123 | bannerImage 124 | format 125 | meanScore 126 | } 127 | } 128 | } 129 | } 130 | } 131 | } 132 | 133 | """ 134 | 135 | def trending(self): 136 | if cache.get("trending"): 137 | return cache.get("trending") 138 | 139 | s, y = get_season() 140 | vars = {"s": s, "y": y, "sort": "TRENDING_DESC"} 141 | data = requests.post( 142 | "https://graphql.anilist.co", 143 | json={"query": self.BROWSE_QUERY, "variables": vars}, 144 | ).json() 145 | data = data.get("data").get("Page").get("media") 146 | if data: 147 | cache["trending"] = data 148 | return data 149 | 150 | def popular(self): 151 | if cache.get("popular"): 152 | return cache.get("popular") 153 | 154 | s, y = get_season() 155 | vars = {"s": s, "y": y, "sort": "POPULARITY_DESC"} 156 | data = requests.post( 157 | "https://graphql.anilist.co", 158 | json={"query": self.BROWSE_QUERY, "variables": vars}, 159 | ).json() 160 | data = data.get("data").get("Page").get("media") 161 | if data: 162 | cache["popular"] = data 163 | return data 164 | 165 | def anime(self, anime): 166 | s, y = get_season() 167 | vars = {"search": anime} 168 | data = requests.post( 169 | "https://graphql.anilist.co", 170 | json={"query": self.ANIME_QUERY, "variables": vars}, 171 | ).json() 172 | return data.get("data").get("Media") 173 | 174 | def get_recommendation(self, anime): 175 | if cache.get("recommend").get(anime): 176 | return cache.get("recommend").get(anime) 177 | 178 | s, y = get_season() 179 | vars = {"search": anime} 180 | data = requests.post( 181 | "https://graphql.anilist.co", 182 | json={"query": self.ANIME_QUERY, "variables": vars}, 183 | ).json() 184 | data = data.get("data").get("Media") 185 | if data: 186 | cache["recommend"][anime] = data 187 | return data 188 | 189 | -------------------------------------------------------------------------------- /utils/anime_loader.py: -------------------------------------------------------------------------------- 1 | import requests 2 | from bs4 import BeautifulSoup as bs 3 | 4 | ANIME_POS = """
{}
{}

{}

{} {}
""" 5 | 6 | 7 | class Anime: 8 | def __init__(self, url, img, lang, title, episode) -> None: 9 | self.url = url 10 | self.img = img 11 | self.lang = lang 12 | self.title = title 13 | self.episode = episode 14 | -------------------------------------------------------------------------------- /utils/db.py: -------------------------------------------------------------------------------- 1 | import requests 2 | from config import API_KEY 3 | 4 | 5 | def update_views(anime): 6 | try: 7 | requests.get( 8 | f"https://api.animedex.live/db/view?key={API_KEY}&anime={anime.strip()}" 9 | ) 10 | except Exception as e: 11 | print(e) 12 | return 13 | 14 | 15 | def update_watch(anime): 16 | try: 17 | requests.get( 18 | f"https://api.animedex.live/db/watch?key={API_KEY}&anime={anime.strip()}" 19 | ) 20 | except Exception as e: 21 | print(e) 22 | return 23 | -------------------------------------------------------------------------------- /utils/html_gen.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import random 3 | from utils.others import get_atitle, get_genre, get_t_from_u, get_urls 4 | from utils.anilist import Anilist 5 | from utils.techzapi import TechZApi 6 | 7 | 8 | def get_genre_html(li): 9 | x = """{}""" 10 | html = "" 11 | 12 | for i in li: 13 | html += x.format(i.strip()) 14 | 15 | return html 16 | 17 | 18 | def get_eps_html(data=None, api: TechZApi = None, anime=None): 19 | if not data: 20 | anime = api.gogo_search(anime)[0].get("id").strip() 21 | data = api.gogo_anime(anime).get("episodes") 22 | 23 | x = """{}""" 24 | html = "" 25 | pos = 1 26 | 27 | for i in data: 28 | i = i.replace("-episode-", "/") 29 | html += x.format(f"/episode/{i}", str(pos)) 30 | pos += 1 31 | 32 | if api: 33 | return html, anime 34 | return html 35 | 36 | 37 | def get_eps_html2(data): 38 | x = """{}""" 39 | html = "" 40 | pos = 1 41 | for i in data: 42 | i = i.replace("-episode-", "/") 43 | html += x.format(f"/episode/{i}", str(pos)) 44 | pos += 1 45 | return html 46 | 47 | 48 | ANIME_POS = """
{}
{}

{}

{} {}
""" 49 | 50 | ANIME_POS2 = """
{}

{}

{}
""" 51 | 52 | 53 | def animeRecHtml(data): 54 | if not data: 55 | return "Not Available" 56 | 57 | if len(data) == 0: 58 | return "Not Available" 59 | 60 | html = "" 61 | 62 | for i in data.get("recommendations").get("edges"): 63 | i = i.get("node").get("mediaRecommendation") 64 | img = i.get("coverImage") 65 | if img: 66 | img = img.get("medium").replace("small", "medium") 67 | else: 68 | img = i.get("bannerImage") 69 | title = get_atitle(i.get("title")) 70 | url = get_urls(title) 71 | x = ANIME_POS.format( 72 | url, 73 | str(i.get("meanScore")).strip() + " / 100", 74 | "Ep " + str(i.get("episodes")).strip(), 75 | img, 76 | title, 77 | i.get("format"), 78 | i.get("status"), 79 | ) 80 | if x not in html: 81 | html += x 82 | 83 | return html 84 | 85 | 86 | def animeRecHtml2(data): 87 | if not data: 88 | return "Not Available" 89 | 90 | if len(data) == 0: 91 | return "Not Available" 92 | 93 | html = "" 94 | 95 | for i in data: 96 | i = i.get("node").get("mediaRecommendation") 97 | 98 | img = i.get("coverImage") 99 | if img: 100 | img = img.get("medium").replace("small", "medium") 101 | else: 102 | img = i.get("bannerImage") 103 | title = get_atitle(i.get("title")) 104 | url = get_urls(title) 105 | x = ANIME_POS.format( 106 | url, 107 | str(i.get("meanScore")).strip() + " / 100", 108 | "Ep " + str(i.get("episodes")).strip(), 109 | img, 110 | title, 111 | i.get("format"), 112 | i.get("status"), 113 | ) 114 | if x not in html: 115 | html += x 116 | 117 | return html 118 | 119 | 120 | def get_trending_html(data): 121 | html = "" 122 | for id, i in data: 123 | try: 124 | img = i[5] 125 | title = i[0] 126 | url = get_urls(id) 127 | x = ANIME_POS.format(url, i[1], "Ep " + str(i[2]), img, title, i[3], i[4]) 128 | html += x 129 | except: 130 | pass 131 | 132 | return html 133 | 134 | 135 | def get_search_html(data): 136 | html = "" 137 | 138 | for i in data: 139 | if "dub" in i.get("id").lower(): 140 | d = "DUB" 141 | else: 142 | d = "SUB" 143 | x = ANIME_POS2.format( 144 | "/anime/" + i.get("id"), 145 | d, 146 | i.get("img"), 147 | i.get("title"), 148 | "Released: " + i.get("year"), 149 | ) 150 | html += x 151 | 152 | return html 153 | 154 | 155 | def get_recent_html(data): 156 | html = "" 157 | 158 | for i in data: 159 | url = i.get("id").split("-episode-")[0] 160 | x = ANIME_POS.format( 161 | f"/anime/{url}", 162 | i.get("lang"), 163 | "Ep " + str(i.get("episode")), 164 | i.get("img"), 165 | i.get("title"), 166 | f"Latest {i.get('lang')}", 167 | "HD", 168 | ) 169 | html += x 170 | 171 | return html 172 | 173 | 174 | def get_selector_btns(url, current, episodes): 175 | if episodes < 2: 176 | return "" 177 | 178 | selector = "" 179 | 180 | if current == 1: 181 | x = """""" 182 | 183 | selector += x.replace("usrl", url + str(current + 1)).replace( 184 | "NEXT", str(current + 1) 185 | ) 186 | 187 | elif current == episodes: 188 | x = """""" 189 | 190 | selector += x.replace("usrl", url + str(current - 1)).replace( 191 | "PREV", str(current - 1) 192 | ) 193 | 194 | else: 195 | x = """""" 196 | 197 | selector += x.replace("usrl", url + str(current - 1)).replace( 198 | "PREV", str(current - 1) 199 | ) 200 | 201 | x = """""" 202 | 203 | selector += x.replace("usrl", url + str(current + 1)).replace( 204 | "NEXT", str(current + 1) 205 | ) 206 | return selector 207 | 208 | 209 | SLIDER_HTML = """

{}

{}

{} {} {} HD

{}

""" 210 | 211 | 212 | def slider_gen(): 213 | data = Anilist().trending() 214 | random.shuffle(data) 215 | html = "" 216 | pos = 1 217 | 218 | for i in data: 219 | img = i.get("bannerImage") 220 | if not img: 221 | img = ( 222 | i.get("coverImage") 223 | .get("medium") 224 | .replace("small", "large") 225 | .replace("medium", "large") 226 | ) 227 | title = get_atitle(i.get("title")) 228 | url = get_urls(title) 229 | temp = SLIDER_HTML.format( 230 | f"#{pos} Spotlight", 231 | title, 232 | i.get("type"), 233 | i.get("status"), 234 | get_genre(i.get("genres")), 235 | i.get("description"), 236 | url.replace("/anime/", "/episode/") + "/1", 237 | url, 238 | url, 239 | img, 240 | ) 241 | html += temp 242 | pos += 1 243 | return html 244 | 245 | 246 | def episodeHtml(episode, title, dl=True): 247 | isSub = episode.get("SUB") 248 | isDub = episode.get("DUB") 249 | DL = episode.get("DL") 250 | sub = dub = dlsub = dldub = "" 251 | defa = 0 252 | s, d = 1, 1 253 | 254 | if isSub: 255 | for i in isSub: 256 | if defa == 0: 257 | defa = f"/embed?url={i}&title={title}" 258 | sub += f"""""" 259 | else: 260 | sub += f"""""" 261 | s += 1 262 | 263 | if isDub: 264 | for i in isDub: 265 | if defa == 0: 266 | defa = f"/embed?url={i}&title={title}" 267 | dub += f"""""" 268 | else: 269 | dub += f"""""" 270 | d += 1 271 | 272 | if DL: 273 | link = DL.get("SUB") 274 | if link: 275 | for n, l in link.items(): 276 | dlsub += f"""
{n}
""" 277 | link = DL.get("DUB") 278 | if link: 279 | for n, l in link.items(): 280 | dldub += f"""
{n}
""" 281 | 282 | if sub != "": 283 | t4 = f"""
SUB:
{sub}
""" 284 | else: 285 | t4 = "" 286 | 287 | if dub != "": 288 | t5 = f"""
DUB:
{dub}
""" 289 | else: 290 | t5 = "" 291 | 292 | if dlsub != "": 293 | t6 = f"""
SUB:
{dlsub}
""" 294 | else: 295 | t6 = "" 296 | 297 | if dldub != "": 298 | t7 = f"""
DUB:
{dldub}
""" 299 | else: 300 | t7 = "" 301 | 302 | t8 = f"""Download

Download Links:

{t6}{t7}
""" 303 | 304 | html = t4 + t5 305 | if dl: 306 | html += t8 307 | 308 | return html, defa 309 | -------------------------------------------------------------------------------- /utils/others.py: -------------------------------------------------------------------------------- 1 | import random 2 | import requests 3 | 4 | 5 | def get_atitle(title): 6 | if not title: 7 | return "Unknown" 8 | 9 | tit = title.get("english") 10 | if not tit: 11 | tit = title.get("romaji") 12 | if not tit: 13 | tit = title.get("native") 14 | return tit 15 | 16 | 17 | def get_other_title(title): 18 | if not title: 19 | return "Unknown" 20 | other = "" 21 | tit = title.get("english") 22 | if tit: 23 | other += tit + ", " 24 | tit = title.get("romaji") 25 | if tit: 26 | other += tit + ", " 27 | tit = title.get("native") 28 | if tit: 29 | other += tit + ", " 30 | return tit[:-2] 31 | 32 | 33 | def get_studios(stud): 34 | tit = "" 35 | for i in stud: 36 | tit += i.get("name") + ", " 37 | return tit[:-2] 38 | 39 | 40 | def get_genre(genres): 41 | if not genres or len(genres) == 0: 42 | return "" 43 | return random.choice(genres) 44 | 45 | 46 | def get_urls(title): 47 | return "/anime/" + str(requests.utils.quote(title)) 48 | 49 | 50 | def get_t_from_u(url): 51 | return str(requests.utils.unquote(url)).replace("/anime/", "") 52 | -------------------------------------------------------------------------------- /utils/techzapi.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import time 3 | 4 | LATEST_CACHE = {} 5 | SEARCH_CACHE = {"query": {}} 6 | ANIME_CACHE = {} 7 | 8 | 9 | class Gogo: 10 | def __init__(self, API_KEY) -> None: 11 | self.base = "https://api.techzbots.live" 12 | self.api_key = API_KEY 13 | 14 | def gogo_latest(self, page=1): 15 | global LATEST_CACHE 16 | 17 | if page in LATEST_CACHE: 18 | if time.time() - LATEST_CACHE.get(page, {}).get("time", 0) < 60 * 5: 19 | print("from cache") 20 | return LATEST_CACHE[page]["results"] 21 | 22 | data = requests.get( 23 | f"{self.base}/gogo/latest?api_key={self.api_key}&page={page}" 24 | ).json() 25 | 26 | if len(data["results"]) != 0: 27 | LATEST_CACHE[page] = {"time": time.time(), "results": data["results"]} 28 | return data["results"] 29 | 30 | def gogo_anime(self, anime): 31 | global ANIME_CACHE 32 | 33 | if anime in ANIME_CACHE: 34 | if time.time() - ANIME_CACHE.get(anime, {}).get("time", 0) < 60 * 60: 35 | print("from cache") 36 | return ANIME_CACHE[anime]["results"] 37 | 38 | data = requests.get( 39 | f"{self.base}/gogo/anime?id={anime}&api_key={self.api_key}" 40 | ).json() 41 | 42 | if len(data) != 0: 43 | ANIME_CACHE[anime] = {"time": time.time(), "results": data["results"]} 44 | return data["results"] 45 | 46 | def gogo_search(self, query): 47 | global SEARCH_CACHE 48 | 49 | if query in SEARCH_CACHE.get("query", {}): 50 | print("from cache") 51 | return SEARCH_CACHE["query"][query] 52 | 53 | if time.time() - SEARCH_CACHE.get("time", 0) < 60 * 60: 54 | SEARCH_CACHE = {"time": time.time(), "query": {}} 55 | 56 | data = requests.get( 57 | f"{self.base}/gogo/search/?query={query}&api_key={self.api_key}" 58 | ).json() 59 | 60 | if len(data["results"]) != 0: 61 | SEARCH_CACHE["query"][query] = data["results"] 62 | return data["results"] 63 | 64 | def gogo_episode(self, episode): 65 | data = requests.get( 66 | f"{self.base}/gogo/episode?id={episode}&api_key={self.api_key}&lang=both" 67 | ).json()["results"] 68 | 69 | if data.get("SUB"): 70 | data["SUB"] = [ 71 | data["SUB"][0] + "&server=1", 72 | data["SUB"][0] + "&server=2", 73 | data["SUB"][1] + "&server=1", 74 | data["SUB"][1] + "&server=2", 75 | ] + data["SUB"][2:] 76 | if data.get("DUB"): 77 | data["DUB"] = [ 78 | data["DUB"][0] + "&server=1", 79 | data["DUB"][0] + "&server=2", 80 | data["DUB"][1] + "&server=1", 81 | data["DUB"][1] + "&server=2", 82 | ] + data["DUB"][2:] 83 | 84 | return data 85 | 86 | def gogo_stream(self, url): 87 | url = str(requests.utils.quote(url)) 88 | data = requests.get( 89 | f"{self.base}/gogo/stream?url={url}&api_key={self.api_key}" 90 | ).json() 91 | return data["results"] 92 | 93 | 94 | TOP_CACHE = {} 95 | 96 | 97 | class TechZApi(Gogo): 98 | def __init__(self, API_KEY) -> None: 99 | self.base = "https://api.techzbots.live" 100 | self.api_key = API_KEY 101 | super().__init__(API_KEY) 102 | 103 | def top_animedex(self): 104 | global TOP_CACHE 105 | 106 | if time.time() - TOP_CACHE.get("time", 0) < 60 * 60 * 24: 107 | print("from cache") 108 | return TOP_CACHE["results"] 109 | try: 110 | data = ( 111 | requests.get("https://api.animedex.live/top").json().get("top") 112 | ) 113 | TOP_CACHE = {"time": time.time(), "results": data} 114 | return data 115 | except: 116 | pass 117 | -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "builds": [ 4 | { 5 | "src": "./index.py", 6 | "use": "@vercel/python" 7 | } 8 | ], 9 | "routes": [ 10 | { 11 | "src": "/(.*)", 12 | "dest": "/" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /wsgi.py: -------------------------------------------------------------------------------- 1 | from app import app 2 | import os 3 | import sys 4 | 5 | sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) 6 | 7 | 8 | if __name__ == "__main__": 9 | app.run() 10 | --------------------------------------------------------------------------------