├── .github ├── ISSUE_TEMPLATE │ └── custom.md ├── config.yml └── pull_request_template.md ├── .gitignore ├── CODE_OF_CONDUCT.md ├── Contributing.md ├── LICENSE ├── PEP8StandardGuide.md ├── PixelVibe ├── asgi.py ├── settings.py ├── urls.py └── wsgi.py ├── Pycodestyle.md ├── Readme.md ├── browserconfig.xml ├── db.sqlite3 ├── home ├── admin.py ├── apps.py ├── migrations │ └── __init__.py ├── models.py ├── resources.py ├── tests.py ├── urls.py └── views.py ├── manage.py ├── requirements.txt ├── site.webmanifest ├── static ├── JS │ ├── crousel.js │ ├── darkmode.js │ ├── preloader.js │ └── showPassword.js ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── assets │ ├── 20210325_164428 pixelvibe.svg │ ├── downarrow.png │ ├── favicon_pixelVibe.png │ ├── nav.png │ ├── pixelVibe.gif │ ├── pixel_logo.jpg │ ├── pixel_logo.png │ └── uparrow.png ├── css │ ├── canvas.css │ ├── darkmode.css │ ├── form.css │ ├── homepage.css │ ├── login.css │ ├── preloader.css │ └── theme.css ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── favicon_pixelVibe.png ├── fonts │ ├── Wagnasty-webfont.woff │ ├── comic_zine_ot-webfont.woff │ └── slkscr-webfont.woff ├── gifs │ ├── 1.gif │ └── 2.gif ├── images │ ├── Affluent-Women-Mailing-Lists.jpg │ ├── Sam-Revilter.jpg │ ├── arts │ │ ├── 1.jpg │ │ ├── 1.png │ │ ├── 2.jpg │ │ └── 2.png │ ├── bg4.png │ ├── image.png │ ├── person-2.jpg │ └── team4-large.jpg ├── mstile-150x150.png └── safari-pinned-tab.svg └── template ├── 404.html ├── base.html ├── canvas.html ├── changePassword.html ├── contact.html ├── forgot.html ├── homepage.html ├── login.html ├── login_new.html ├── otp.html ├── passwordReset.html ├── signup.html └── user_input.html /.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 | **Screenshots** 11 | If applicable, add screenshots to help explain your problem. 12 | -------------------------------------------------------------------------------- /.github/config.yml: -------------------------------------------------------------------------------- 1 | # Configuration for welcome - https://github.com/behaviorbot/welcome 2 | 3 | 4 | # Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome 5 | # Comment to be posted to on first time issues 6 | 7 | newIssueWelcomeComment: > 8 | Hello there!👋 Welcome to the Pixelvibe project!🚀⚡ 9 | 10 | Thank you and congrats🎉 for opening your very first issue in this project. 11 | Please make sure not to start working on the issue, unless you get assigned to it.😄 12 | 13 | 14 | # Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome 15 | # Comment to be posted to on PRs from first time contributors in your repository 16 | 17 | newPRWelcomeComment: > 18 | Hello there!👋 Welcome to the Pixelvibe project!💖 19 | 20 | Thank you and congrats🎉 for opening your first pull request. 21 | We will get back to you as soon as we can 😄. 22 | 23 | 24 | # Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge 25 | # Comment to be posted to on pull requests merged by a first time user 26 | 27 | firstPRMergeComment: > 28 | Hello there!👋 29 | 30 | Congrats🎉 on getting your first pull request merged! All the best for your amazing open-source journey ahead 🚀. 31 | 32 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Related Issue 2 | 3 | - Info about the related issue 4 | 5 | Closes: #[issue number that will be closed through this PR] 6 | 7 | ### Describe the changes you've made 8 | 9 | Give a clear description what modifications you have made 10 | 11 | ## Type of change 12 | 13 | What sort of change have you made: 14 | 18 | - [ ] Bug fix (non-breaking change which fixes an issue) 19 | - [ ] New feature (non-breaking change which adds functionality) 20 | - [ ] Code style update (formatting, local variables) 21 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) 22 | - [ ] This change requires a documentation update 23 | 24 | ## Mention any unusual behaviour of your code (Write NA if not) 25 | Any unusual behaviour of your code 26 | 27 | ## Additional Info (optional) 28 | Any additional information you want to give 29 | 30 | ## Checklist: 31 | 35 | - [ ] My code follows the guidelines of this project. 36 | - [ ] I have performed a self-review of my own code. 37 | - [ ] I have commented my code, particularly whereever it was hard to understand. 38 | - [ ] My changes generate no new warnings. 39 | - [ ] Any dependent changes have been merged and published in downstream modules. 40 | 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.toptal.com/developers/gitignore/api/django 3 | # Edit at https://www.toptal.com/developers/gitignore?templates=django 4 | 5 | ### Django ### 6 | *.log 7 | *.pot 8 | *.pyc 9 | __pycache__/ 10 | local_settings.py 11 | db.sqlite3 12 | db.sqlite3-journal 13 | media 14 | 15 | # If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/ 16 | # in your Git repository. Update and uncomment the following line accordingly. 17 | # /staticfiles/ 18 | 19 | ### Django.Python Stack ### 20 | # Byte-compiled / optimized / DLL files 21 | *.py[cod] 22 | *$py.class 23 | 24 | # C extensions 25 | *.so 26 | 27 | # Distribution / packaging 28 | .Python 29 | build/ 30 | develop-eggs/ 31 | dist/ 32 | downloads/ 33 | eggs/ 34 | .eggs/ 35 | parts/ 36 | sdist/ 37 | var/ 38 | wheels/ 39 | pip-wheel-metadata/ 40 | share/python-wheels/ 41 | *.egg-info/ 42 | .installed.cfg 43 | *.egg 44 | MANIFEST 45 | 46 | # PyInstaller 47 | # Usually these files are written by a python script from a template 48 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 49 | *.manifest 50 | *.spec 51 | 52 | # Installer logs 53 | pip-log.txt 54 | pip-delete-this-directory.txt 55 | 56 | # Unit test / coverage reports 57 | htmlcov/ 58 | .tox/ 59 | .nox/ 60 | .coverage 61 | .coverage.* 62 | .cache 63 | nosetests.xml 64 | coverage.xml 65 | *.cover 66 | *.py,cover 67 | .hypothesis/ 68 | .pytest_cache/ 69 | pytestdebug.log 70 | 71 | # Translations 72 | *.mo 73 | 74 | # Django stuff: 75 | __init__.py 76 | 77 | # Flask stuff: 78 | instance/ 79 | .webassets-cache 80 | 81 | # Scrapy stuff: 82 | .scrapy 83 | 84 | # Sphinx documentation 85 | docs/_build/ 86 | doc/_build/ 87 | 88 | # PyBuilder 89 | target/ 90 | 91 | # Jupyter Notebook 92 | .ipynb_checkpoints 93 | 94 | # IPython 95 | profile_default/ 96 | ipython_config.py 97 | 98 | # pyenv 99 | .python-version 100 | 101 | # pipenv 102 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 103 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 104 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 105 | # install all needed dependencies. 106 | #Pipfile.lock 107 | 108 | # poetry 109 | #poetry.lock 110 | 111 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 112 | __pypackages__/ 113 | 114 | # Celery stuff 115 | celerybeat-schedule 116 | celerybeat.pid 117 | 118 | # SageMath parsed files 119 | *.sage.py 120 | 121 | # Environments 122 | # .env 123 | .env/ 124 | .venv/ 125 | env/ 126 | venv/ 127 | ENV/ 128 | env.bak/ 129 | venv.bak/ 130 | pythonenv* 131 | 132 | # Spyder project settings 133 | .spyderproject 134 | .spyproject 135 | 136 | # Rope project settings 137 | .ropeproject 138 | 139 | # mkdocs documentation 140 | /site 141 | 142 | # mypy 143 | .mypy_cache/ 144 | .dmypy.json 145 | dmypy.json 146 | 147 | # Pyre type checker 148 | .pyre/ 149 | 150 | # pytype static type analyzer 151 | .pytype/ 152 | 153 | # operating system-related files 154 | # file properties cache/storage on macOS 155 | *.DS_Store 156 | # thumbnail cache on Windows 157 | Thumbs.db 158 | 159 | # profiling data 160 | .prof 161 | 162 | **/migrations/** 163 | !**/migrations 164 | !**/migrations/__init__.py 165 | # End of https://www.toptal.com/developers/gitignore/api/django -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. 6 | 7 | ## Our Standards 8 | 9 | Examples of behavior that contributes to creating a positive environment include: 10 | 11 | - Using welcoming and inclusive language 12 | - Being respectful of differing viewpoints and experiences 13 | - Gracefully accepting constructive criticism 14 | - Attempting collaboration before conflict 15 | - Focusing on what is best for the community 16 | - Showing empathy towards other community members 17 | 18 | Examples of unacceptable behavior by participants include: 19 | 20 | - Violence, threats of violence, or inciting others to commit self-harm 21 | - The use of sexualized language or imagery and unwelcome sexual attention or advances 22 | - Trolling, intentionally spreading misinformation, insulting/derogatory comments, and personal or political attacks 23 | - Public or private harassment 24 | - Publishing others' private information, such as a physical or electronic address, without explicit permission 25 | - Abuse of the reporting process to intentionally harass or exclude others 26 | - Advocating for, or encouraging, any of the above behavior 27 | - Other conduct which could reasonably be considered inappropriate in a professional setting 28 | 29 | ## Our Responsibilities 30 | 31 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. 32 | 33 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 34 | 35 | ## Scope 36 | 37 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 38 | 39 | ## Enforcement 40 | 41 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting us. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. 42 | 43 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 44 | 45 | If you are unsure whether an incident is a violation, or whether the space where the incident took place is covered by our Code of Conduct, **we encourage you to still report it**. We would prefer to have a few extra reports where we decide to take no action, than to leave an incident go unnoticed and unresolved that may result in an individual or group to feel like they can no longer participate in the community. Reports deemed as not a violation will also allow us to improve our Code of Conduct and processes surrounding it. If you witness a dangerous situation or someone in distress, we encourage you to report even if you are only an observer. 46 | 47 | ## Attribution 48 | 49 | This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html -------------------------------------------------------------------------------- /Contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing to Pixelvibe 2 | 3 | Thanks a lot for checking out this project. We are pleased that you are interesting in contributing to this project. There are rules and tips for creating a cool contribution. We hope you will follow them and help yourself contributing to this project. Please read the suitable category. 4 | 5 | ## I am not very experienced with Git and GitHub. What should I do? 6 | 7 | No problem, we have got your back. Please see these guides before you contribute here. It will help you understand the workflow. We however expect you to have introductory knowledge of command line. 8 | #### See these Guides/Tutorials 9 | - [Hello GitHub](https://guides.github.com/activities/hello-world/) 10 | - [Git and GitHub for Beginners](https://www.youtube.com/watch?v=RGOj5yH7evk) -> Use timestamps to see specific parts 11 | - [How to create pull requests](https://www.digitalocean.com/community/tutorials/how-to-create-a-pull-request-on-github) 12 | 13 | #### Install Git on your system 14 | - Windows [Download here](https://git-scm.com/download/win) 15 | - Linux [See commands here for your distro](https://git-scm.com/download/linux) 16 | - MacOS [See instructions here](https://git-scm.com/download/mac) 17 | 18 | Please follow the rest of the guidelines for further guidelines. 19 | 20 | ## Choosing an issue 21 | 22 | Go to [issue](https://github.com/FOSS-Cell-GECPKD/pixelvibe/issues) tab of this repository and find an issue to work on. Open the issue and see if it is not assigned comment on it that you are interested. Issues are assigned at first-come-first-serve basis. *Note: If you are contributing under a program such as Girlscript Summer of Code,to give every participant an opportunity you will be assigned only one issue at a given time. Once your PR is opened/merged you can take another issue.)* 23 | 24 | Once you have been assigned an issue or you have opened an issue you can start working on it. 25 | 26 | ## Working on changes/issue 27 | Open your command prompt/terminal in your system and use following command. **You must fork this project to submit a pull request.** 28 | 29 | ```bash 30 | # clone this project 31 | git clone https://github.com/your-github-username/pixelvibe.git 32 | 33 | # go to the project folder or open this folder in your favorite editor/IDE 34 | cd pixelvibe 35 | 36 | # add a new branch 37 | git checkout -b branch-name 38 | ``` 39 | Make your changes, add/remove files as needed then commit your changes. Keep the commit messages meaningful. Also please add only one commit per change. 40 | ```bash 41 | # stage changes 42 | git add . 43 | # you can also use alternative command 44 | git stage -A 45 | 46 | # commit your changes 47 | git commit -m "message describing changes" 48 | 49 | # push commit to remote 50 | git push -u origin branch-name 51 | ``` 52 | 53 | ## Submit a pull request 54 | 55 | Goto your GitHub and open your fork of this project. Then follow pull request procedure as described [here](https://www.digitalocean.com/community/tutorials/how-to-create-a-pull-request-on-github). Your pull request must contain following informations. *We will close pull requests having no descriptions* 56 | - Details of the changes made (file added/changed, code changes, bug fixes etc) 57 | - Link a related issue if any as `Fixes #issue-number` 58 | - Your Program name if any (i.e. - GSSOC21) 59 | - References if any(StackOverFlow or GeeksForGeeks or book, other websites) 60 | - Anything else you want to add 61 | 62 | Submit your pull request and wait for our review. We will soon review and proceed further. You can now choose another issue to work on. 63 | 64 | 65 |

Thanks for your Contribution 😊

66 | 67 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Foss GECPKD 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. 22 | -------------------------------------------------------------------------------- /PixelVibe/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for PixelVibe project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PixelVibe.settings') 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /PixelVibe/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for PixelVibe project. 3 | 4 | Generated by 'django-admin startproject' using Django 3.1.7. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/3.1/ref/settings/ 11 | """ 12 | 13 | from pathlib import Path 14 | 15 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 16 | BASE_DIR = Path(__file__).resolve().parent.parent 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = 'y3rdjwnq!202ek-bl5*wu0kjj*a(w-c*s=5spuh&#__98!00ol' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = ["*"] 29 | 30 | 31 | # Application definition 32 | 33 | INSTALLED_APPS = [ 34 | 'django.contrib.admin', 35 | 'django.contrib.auth', 36 | 'django.contrib.contenttypes', 37 | 'django.contrib.sessions', 38 | 'django.contrib.messages', 39 | 'django.contrib.staticfiles', 40 | 'django.contrib.sites', 41 | 'home', 42 | 'allauth', 43 | 'allauth.account', 44 | 'allauth.socialaccount', 45 | 'allauth.socialaccount.providers.google', 46 | 'allauth.socialaccount.providers.facebook', 47 | 'import_export', 48 | 49 | ] 50 | 51 | MIDDLEWARE = [ 52 | 'django.middleware.security.SecurityMiddleware', 53 | 'django.contrib.sessions.middleware.SessionMiddleware', 54 | 'django.middleware.common.CommonMiddleware', 55 | 'django.middleware.csrf.CsrfViewMiddleware', 56 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 57 | 'django.contrib.messages.middleware.MessageMiddleware', 58 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 59 | ] 60 | 61 | ROOT_URLCONF = 'PixelVibe.urls' 62 | 63 | TEMPLATES = [ 64 | { 65 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 66 | 'DIRS': ['template'], 67 | 'APP_DIRS': True, 68 | 'OPTIONS': { 69 | 'context_processors': [ 70 | 'django.template.context_processors.debug', 71 | 'django.template.context_processors.request', 72 | 'django.contrib.auth.context_processors.auth', 73 | 'django.contrib.messages.context_processors.messages', 74 | ], 75 | }, 76 | }, 77 | ] 78 | 79 | AUTHENTICATION_BACKENDS = [ 80 | 'django.contrib.auth.backends.ModelBackend', 81 | 'allauth.account.auth_backends.AuthenticationBackend', 82 | ] 83 | 84 | WSGI_APPLICATION = 'PixelVibe.wsgi.application' 85 | 86 | IMPORT_EXPORT_USE_TRANSACTIONS = True 87 | # Database 88 | # https://docs.djangoproject.com/en/3.1/ref/settings/#databases 89 | 90 | DATABASES = { 91 | 'default': { 92 | 'ENGINE': 'django.db.backends.sqlite3', 93 | 'NAME': BASE_DIR / 'db.sqlite3', 94 | } 95 | } 96 | 97 | 98 | # Password validation 99 | # https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators 100 | 101 | AUTH_PASSWORD_VALIDATORS = [ 102 | { 103 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 104 | }, 105 | { 106 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 107 | }, 108 | { 109 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 110 | }, 111 | { 112 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 113 | }, 114 | ] 115 | 116 | 117 | # Internationalization 118 | # https://docs.djangoproject.com/en/3.1/topics/i18n/ 119 | 120 | LANGUAGE_CODE = 'en-us' 121 | 122 | TIME_ZONE = 'UTC' 123 | 124 | USE_I18N = True 125 | 126 | USE_L10N = True 127 | 128 | USE_TZ = True 129 | 130 | 131 | # Static files (CSS, JavaScript, Images) 132 | # https://docs.djangoproject.com/en/3.1/howto/static-files/ 133 | 134 | import os 135 | STATIC_URL = '/static/' 136 | STATICFILES_DIRS = [ 137 | os.path.join(BASE_DIR,'static') 138 | ] 139 | 140 | from django.contrib.messages import constants as messages 141 | MESSAGE_TAGS = { 142 | messages.ERROR: 'danger', 143 | } 144 | MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 145 | MEDIA_URL = '/media/' 146 | 147 | 148 | 149 | # Provider specific settings 150 | SOCIALACCOUNT_PROVIDERS = { 151 | 'google': { 152 | 'SCOPE': [ 153 | 'profile', 154 | 'email', 155 | 156 | ], 157 | 'AUTH_PARAMS' : { 158 | 'access_typ' : 'online' 159 | } 160 | }, 161 | 'facebook': { 162 | 'METHOD': 'oauth2', 163 | # 'SDK_URL': '//connect.facebook.net/{locale}/sdk.js', 164 | 'SCOPE': ['email', 'public_profile'], 165 | 'AUTH_PARAMS': {'auth_type': 'reauthenticate'}, 166 | 'INIT_PARAMS': {'cookie': True}, 167 | 'FIELDS': [ 168 | 'id', 169 | 'first_name', 170 | 'last_name', 171 | 'middle_name', 172 | 'name', 173 | 'name_format', 174 | 'picture', 175 | 'short_name' 176 | ], 177 | 'EXCHANGE_TOKEN': True, 178 | # 'LOCALE_FUNC': 'path.to.callable', 179 | 'VERIFIED_EMAIL': False, 180 | 'VERSION': 'v7.0', 181 | } 182 | } 183 | # SITE_ID = 1 184 | LOGIN_REDIRECT_URL = '/' 185 | 186 | # client id = 912151922216-if32l3g352hkkvndgaoh2vhqa1ddj061.apps.googleusercontent.com 187 | # key id = QRbOfSSRhp3cInXICWzhcMkn 188 | # domain = 127.0.0.1:8000 189 | -------------------------------------------------------------------------------- /PixelVibe/urls.py: -------------------------------------------------------------------------------- 1 | """PixelVibe URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/3.1/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import path,include 18 | from django.conf import settings 19 | from django.conf.urls.static import static 20 | from django.contrib import admin 21 | 22 | urlpatterns = [ 23 | path('admin/', admin.site.urls), 24 | path('', include('home.urls')), 25 | path('accounts/', include('allauth.urls')), 26 | ] 27 | urlpatterns += static(settings.MEDIA_URL, 28 | document_root=settings.MEDIA_ROOT) 29 | 30 | handler404 = 'home.views.error_404' 31 | handler500 = 'home.views.error_404' -------------------------------------------------------------------------------- /PixelVibe/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for PixelVibe project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PixelVibe.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /Pycodestyle.md: -------------------------------------------------------------------------------- 1 | pycodestyle - Python style guide checker 2 | =============================================================== 3 | 4 | pycodestyle is a tool to check your Python code against some of the style conventions in `PEP 8`. 5 | 6 | PEP 8: http://www.python.org/dev/peps/pep-0008/ 7 | 8 | 9 | Features 10 | -------- 11 | 12 | * Plugin architecture: Adding new checks is easy. 13 | 14 | * Parseable output: Jump to error location in your editor. 15 | 16 | * Small: Just one Python file, requires only stdlib. You can use just the ``pycodestyle.py`` file for this purpose. 17 | 18 | * Comes with a comprehensive test suite. 19 | 20 | 21 | Installation 22 | ------------ 23 | 24 | You can install, upgrade, and uninstall ``pycodestyle.py`` with these commands:: 25 | 26 | $ pip install pycodestyle 27 | $ pip install --upgrade pycodestyle 28 | $ pip uninstall pycodestyle 29 | 30 | There's also a package for Debian/Ubuntu, but it's not always the latest version. 31 | 32 | 33 | Links 34 | ----- 35 | 36 | * `Read the documentation ` 37 | 38 | * `Fork me on GitHub ` 39 | 40 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 |

6 | 7 | [![Number of Contributors](https://img.shields.io/github/contributors/FOSS-Cell-GECPKD/pixelvibe)](https://github.com/FOSS-Cell-GECPKD/pixelvibe/graphs/contributors) 8 | [![Issues opened](https://img.shields.io/github/issues/FOSS-Cell-GECPKD/pixelvibe)](https://github.com/FOSS-Cell-GECPKD/pixelvibe/issues) 9 | [![Issues closed](https://img.shields.io/github/issues-closed/FOSS-Cell-GECPKD/pixelvibe)](https://github.com/FOSS-Cell-GECPKD/pixelvibe/issues) 10 | [![PRs open](https://img.shields.io/github/issues-pr/FOSS-Cell-GECPKD/pixelvibe)](https://github.com/FOSS-Cell-GECPKD/pixelvibe/pulls) 11 | [![PRs closed](https://img.shields.io/github/issues-pr-closed/FOSS-Cell-GECPKD/pixelvibe)](https://github.com/FOSS-Cell-GECPKD/pixelvibe/pulls) 12 | ![Repo size](https://img.shields.io/github/repo-size/FOSS-Cell-GECPKD/pixelvibe) 13 | 14 | ### 📋 Description 15 | 16 | PixelVibe is a pixel-art maker which is mainly made for the creative art lover in you 😃 17 | ### Demo 🎥 18 | ![PixelVib](https://raw.githubusercontent.com/arpit456jain/pixelvibe/demo/static/gifs/2.gif)
19 | ![PixelVib](https://raw.githubusercontent.com/arpit456jain/pixelvibe/demo/static/gifs/1.gif)
20 | 21 | ### ✅  Features 22 | 1. Variable canvas size as per user requirement 23 | 2. Choice of colors for user 24 | 3. A drop-down menu for 25 | - Brush of varying sizes 26 | - Eraser for clearing 27 | - Undo feature 28 | - Delete feature to clear the screen 29 | - color fill to fill up the page 30 | 4. Signin / sign up page 31 | 5. Forgot password feature 32 | 6. Can change the password when required 33 | 34 | ### 💻 Tech Stack 35 | 36 | PixelVibe uses a number of open source projects to work properly: 37 | ### Front-End: 38 | HTML5 CSS3 JavaScript 39 | BootStrap 40 | 41 | ### Back-End: 42 | Python Django 43 | 44 | ### Data-Base: 45 | SQLite 46 | 47 | 48 | ### Other: 49 | Progressive Web Apps 50 | 51 | ### Project Structure 💁‍♀️ 52 | 53 | ``` 54 | PixelVibe 55 | │ 56 | ├───PixelVibe # Main Project Directory 57 | │ 58 | ├───home # Project Main App Directory 59 | │ │ 60 | │ └───migrations # Migrations 61 | │ 62 | ├───static 63 | | | # Static Directory 64 | │ └───| 65 | │ ├───assets # Image Files 66 | | | 67 | │ ├───css # CSS Files 68 | | | 69 | | ├───fonts # Fonts Used 70 | │ │ 71 | | ├───JS # js Files 72 | │ │ 73 | │ ├───favicons # favicons 74 | │ | 75 | │ 76 | │ 77 | | 78 | ├───templates # Root Template Directory (all html templates) 79 | | 80 | ├───db.sqlite3 # Database File 81 | | 82 | ├───manage.py # For running django server 83 | | 84 | ├───requirements.txt # All modules which are used in project 85 | 86 | ``` 87 | 88 | ## 🚀 Quick Start : 89 | 90 | #### Step 1: Forking the repository : 91 | 92 | To work on an open-source project, you will first need to make your copy of the repository. To do this, you should fork the repository and then clone it so that you have a local working copy. 93 | 94 | Get your own Fork/Copy of repository by clicking `Fork` button right upper corner.

95 | 96 | #### Step 2: Clone the Forked Repository 97 | 98 | After the repository is forked, you can now clone it so that you have a local working copy of the codebase. 99 | 100 | To make your local copy of the repository follow the steps: 101 | - Open the Command Prompt 102 | - Type this command: 103 | 104 | ```bash 105 | $ git clone https://github.com//pixelvibe 106 | ``` 107 | 108 | 109 | #### Step 3: Creating a new branch (IMP) 110 | This is one of the very important step that you should follow to contribute in Open Source. A branch helps to manage the workflow, isolate your code and does not creates a mess. To create a new branch: 111 | 112 | ```bash 113 | $ git branch 114 | $ git checkout -b 115 | ``` 116 | 117 | Keep your cloned repo upto date by pulling from upstream (this will also avoid any merge conflicts while committing new changes) 118 | ```bash 119 | git pull origin main 120 | ``` 121 | 122 | #### Step 4: Setting up Project 123 | 124 | ##### For Django: 125 | **1. Create a Virtual Environment** 126 | 127 | - *On macOS and Linux:* 128 | ```bash 129 | python3 -m venv env 130 | ``` 131 | - *Windows* 132 | ```bash 133 | py -m venv env 134 | ```` 135 | 136 | **2. Activate the Virtual Environment** 137 | - *On Windows* 138 | ```bash 139 | .\env\Scripts\activate 140 | ``` 141 | - *On macOS and Linux:* 142 | ```bash 143 | source env/bin/activate 144 | ``` 145 | 146 | **3. Install dependencies using** 147 | ```bash 148 | pip install -r requirements.txt 149 | ``` 150 | 151 | **4. Make Migrations** 152 | 153 | ```bash 154 | python manage.py makemigrations 155 | python manage.py migrate 156 | ``` 157 | **5. Run Server** 158 | 159 | ```bash 160 | python manage.py runserver 161 | ``` 162 | **6. Create admin** 163 | 164 | ```bash 165 | python manage.py createsuperuser 166 | ``` 167 | 168 | **5.** Go to ` http://127.0.0.1:8000/` and enjoy the application. 169 | 170 | #### Step 5: Contribute 171 | Make relevant changes according to the issue that you were assigned on. Contribute in any way you feel like :) 172 | 173 | #### Step 6: Commiting and Pushing 174 | Once you have modified an existing file or added a new file to the project, you can add it to your local repository, which we can do with the git add command. 175 | 176 | ```bash 177 | git add . 178 | ``` 179 | With our file staged, we’ll want to record the changes that we made to the repository with the git commit command. 180 | 181 | The commit message is an important aspect of your code contribution; it helps the other contributors fully understand the change you have made, why you made it, and how significant it is. 182 | 183 | ```bash 184 | git commit -m "useful commit message" 185 | ``` 186 | 187 | At this point you can use the git push command to push the changes to the current branch of your forked repository: 188 | 189 | ```bash 190 | git push origin 191 | ``` 192 | 193 | #### Step 7: Create Pull Request 194 | Now, you are ready to make a pull request to the original repository. 195 | 196 | You should navigate to your forked repository, and press the "Compare & pull request" button on the page. 197 | 198 | GitHub will alert you that you can merge the two branches because there is no competing code. You should add in a title, a comment, and then press the “Create pull request” button. 199 | 200 | ## ⚙ Contributing Guidelines 201 | Please go through the Contributing guidelines here. 202 | ## 📖 Code Of Conduct 203 | You can find the Code of Conduct here. 204 | 205 | ### ✅  PEP8 Standards to be followed 206 | - Please follow the guidelines of PEP8 as given in here. 207 | 208 | ### ✅  Pycode style to be followed 209 | - Please follow the guidelines of python module pycodestyle as given in here. 210 | 211 |

Project Admin ❤️

212 |

213 | 214 | 215 | 216 |

Ankita Puri

217 | 218 |

Mentor

219 |

220 | 221 | 222 | 223 | 224 |

Adarsh Vulli


Arpit Jain

225 | 226 | ### 🚀 Contributing 227 | This repository is contribution friendly. If you would like to add or improve, your contribution is welcome! 228 | Do not forget to follow [Contribution Guidelines](Contributing.md) and [Code of Conduct](CODE_OF_CONDUCT.md) 😃 229 | 230 | ## 📘  License 231 | 232 | The PixelVibe is released under the under terms of the [MIT License](LICENSE). 233 | 234 | ## Open Source Program(s) 235 | 236 | This project is a part of GSSOC 2021. 237 | 238 | 239 | This project is a part of SWOC 2021. 240 | 241 | 242 | 243 | [![forthebadge](https://forthebadge.com/images/badges/built-with-love.svg)](https://forthebadge.com) 244 | [![forthebadge](https://forthebadge.com/images/badges/built-by-developers.svg)](https://forthebadge.com) 245 | 246 | show some ❤️  by giving the star to this repo 247 | -------------------------------------------------------------------------------- /browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #da532c 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/db.sqlite3 -------------------------------------------------------------------------------- /home/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from import_export.admin import ImportExportModelAdmin 4 | from home.models import Contact,Gallery 5 | admin.site.register(Gallery) 6 | 7 | @admin.register(Contact) 8 | class ContactAdmin(ImportExportModelAdmin): 9 | pass -------------------------------------------------------------------------------- /home/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class HomeConfig(AppConfig): 5 | name = 'home' 6 | -------------------------------------------------------------------------------- /home/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/home/migrations/__init__.py -------------------------------------------------------------------------------- /home/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | # Create your models here. 5 | class Contact(models.Model): 6 | id = models.AutoField(primary_key=True) 7 | firstname = models.CharField(max_length=40) 8 | lastname = models.CharField(max_length=40) 9 | email = models.EmailField(max_length=40) 10 | content = models.TextField(max_length=400) 11 | number = models.CharField(max_length=10) 12 | 13 | def __str__(self): 14 | return (self.firstname) 15 | 16 | 17 | 18 | # # Create your models here. 19 | class Gallery(models.Model): 20 | sno = models.AutoField(primary_key=True) 21 | name = models.CharField(max_length=250) 22 | img = models.ImageField(upload_to="Arts") 23 | 24 | 25 | def __str__(self): 26 | return "Art from \t\t"+self.name -------------------------------------------------------------------------------- /home/resources.py: -------------------------------------------------------------------------------- 1 | from import_export import resources 2 | from home.models import Contact 3 | 4 | class FeedBackResource(resources.ModelResource): 5 | class Meta: 6 | model = Contact -------------------------------------------------------------------------------- /home/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /home/urls.py: -------------------------------------------------------------------------------- 1 | """PixelVibe URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/3.1/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import path 18 | from home import views 19 | urlpatterns = [ 20 | path('',views.home , name='home' ), 21 | path('paint/',views.paint , name='paint' ), 22 | path('signup/',views.handleSignUp , name='handleSignUp' ), 23 | path('login/',views.Handlelogin , name='login' ), 24 | path('logout/',views.logout , name='logout' ), 25 | path('contact/',views.contact , name='contact' ), 26 | path('forgotPass/',views.forgotPass , name='forgotPass' ), 27 | path('otp/',views.otpVerification , name='otpVerification' ), 28 | path('passwordReset/',views.passwordReset , name='passwordReset' ), 29 | path('changePassword/',views.changePassword , name='changePassword' ), 30 | path('changeDimensions/',views.changeDimensions , name='changeDimensions' ), 31 | 32 | 33 | ] 34 | -------------------------------------------------------------------------------- /home/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render,redirect 2 | from django.http import HttpResponse, request 3 | # now for using login sys we import user model 4 | from django.contrib.auth.models import User,auth 5 | from django.contrib.auth import authenticate, login, logout 6 | from home.models import Contact,Gallery 7 | from django.contrib import messages 8 | from django.contrib.auth.decorators import login_required 9 | import math 10 | import random 11 | from django.contrib.auth.hashers import make_password, check_password 12 | import smtplib 13 | import re 14 | admin_email = "pixelzvibe@gmail.com" 15 | admin_password = "pixelvibeart123" 16 | 17 | 18 | regex = '^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[.]\w{2,3}$' 19 | def check(email): 20 | if(re.search(regex,email)): 21 | return True 22 | else: 23 | return False 24 | params={} 25 | # Create your views here. 26 | def home(request): 27 | allArts = Gallery.objects.all() 28 | params['allArts']=allArts 29 | return render(request, 'homepage.html',params) 30 | def changeDimensions(request): 31 | global params 32 | params = {} 33 | return redirect('/paint') 34 | 35 | def paint(request): 36 | global params 37 | if request.user.is_authenticated: 38 | pass 39 | else: 40 | messages.error(request,"Please Login First !!") 41 | return redirect('/login') 42 | if request.method == 'GET': 43 | print('get') 44 | if 'height' in params.keys() and 'width' in params.keys(): 45 | return render(request,"canvas.html",params) 46 | else: 47 | print('post') 48 | height = request.POST['height'] 49 | width = request.POST['width'] 50 | width = float(width) 51 | height = float(height) 52 | print(height,width,type(height)) 53 | if int(width) <= 80 and int(height) <= 80: 54 | pass 55 | else: 56 | messages.error(request,"Width and height must be less than 80!!") 57 | return redirect("/changeDimensions") 58 | if int(width) >= 5 and int(height) >= 5: 59 | pass 60 | else: 61 | messages.error(request,"Width and height must be greater than 4!!") 62 | return redirect("/changeDimensions") 63 | params['height'] = int(height) 64 | params['width'] = int(width) 65 | print(params) 66 | return render(request,"canvas.html",params) 67 | return render(request, 'user_input.html') 68 | 69 | 70 | def handleSignUp(request): 71 | if request.method=="POST": 72 | # Get the post parameters 73 | username=request.POST['username'] 74 | email=request.POST['email'] 75 | pass1=request.POST['password'] 76 | pass2=request.POST['cpassword'] 77 | # form validations for signup added by arpit jain 78 | if(check(email) == True): 79 | pass 80 | else: 81 | messages.error(request,"Email is not valid :( Please Try Again") 82 | return redirect('/signup') 83 | if pass1 == pass2: 84 | # checking if username is exist 85 | if User.objects.filter(username=username).exists(): 86 | messages.error(request,'user already exist Try a different username!') 87 | return redirect('/signup') 88 | else: 89 | if User.objects.filter(email=email).exists(): 90 | messages.error(request,'email already exist Try a different email!') 91 | return redirect('/signup') 92 | elif len(pass1)<=5: 93 | messages.error(request,'Password must be at least 6 characters Long!!') 94 | return redirect('/signup') 95 | else: 96 | # Create the user 97 | myuser = User.objects.create_user(username, email, pass1) 98 | myuser.save() 99 | messages.success(request,'Successfully!! Registred Please Login') 100 | return redirect('/login') 101 | 102 | else: 103 | messages.error(request,'password not matched Please Try Again!') 104 | return redirect('/signup') 105 | else: 106 | return render(request,'signup.html') 107 | 108 | def send_warning_email(email): 109 | try: 110 | con = smtplib.SMTP("smtp.gmail.com",587) 111 | con.ehlo() 112 | con.starttls() 113 | global admin_email 114 | global admin_password 115 | con.login(admin_email,admin_password) 116 | msg = "Some One is Trying To Login With Your Account !!" 117 | con.sendmail(admin_email,email,"Subject:Login Warning \n\n"+msg) 118 | except: 119 | pass 120 | 121 | 122 | 123 | login_users = {} 124 | def Handlelogin(request): 125 | if request.method == 'POST': 126 | username = request.POST['username'] 127 | password = request.POST['password'] 128 | print(username,password) 129 | exist = User.objects.filter(username=username).exists() 130 | print(exist) 131 | if not exist: 132 | messages.error(request," username not Found Please Sign Up") 133 | return redirect('/login') 134 | user = User.objects.filter(username=username).first() 135 | print(user,user.password,password) 136 | 137 | user=authenticate(username=username,password=password) 138 | if user is not None: 139 | if username in login_users.keys(): 140 | del(login_users[user.username]) 141 | login(request, user) 142 | print("Successfully Logged In") 143 | print('loged in') 144 | return redirect("/") 145 | else: 146 | print("Someone tried to login and failed.") 147 | if username in login_users.keys(): 148 | login_users[username]+=1 149 | else: 150 | login_users[username]=1 151 | print(login_users) 152 | if login_users[username] == 5: 153 | user1 = User.objects.filter(username=username).first() 154 | print(user1.email) 155 | send_warning_email(user1.email) 156 | print("They used username: {} and password: {}".format(username,password)) 157 | 158 | messages.error(request,"Invalid credentials! Please try again") 159 | return redirect("/login") 160 | else: 161 | return render(request,'login_new.html') 162 | 163 | def logout(request): 164 | global params 165 | params={} 166 | auth.logout(request) 167 | messages.success(request,"Successfully logged out") 168 | return redirect('/login') 169 | 170 | def send_email_to_Admin(msg,email): 171 | try: 172 | con = smtplib.SMTP("smtp.gmail.com",587) 173 | con.ehlo() 174 | con.starttls() 175 | global admin_email 176 | global admin_password 177 | con.login(admin_email,admin_password) 178 | msg = str(msg) 179 | con.sendmail(admin_email,email,"Subject:Contact Response To PixelVibe \n\n"+msg) 180 | except: 181 | pass 182 | 183 | 184 | def contact(request): 185 | if request.method=="POST": 186 | print('post') 187 | firstname = request.POST['firstname'] 188 | lastname = request.POST['lastname'] 189 | email = request.POST['email'] 190 | number = request.POST['number'] 191 | content = request.POST['content'] 192 | print(firstname,email,content,number) 193 | if len(firstname)<2 or len(email)<3 or len(number)<10 or len(content)<4: 194 | messages.error(request, "Please fill the form correctly") 195 | else: 196 | ins = Contact(firstname=firstname,lastname=lastname,email=email,content=content,number=number) 197 | ins.save() 198 | msg = str(firstname) + "is trying to contact with us. \nmsg : " + str(content) 199 | print("sending mail") 200 | global admin_email 201 | send_email_to_Admin(msg,admin_email) 202 | messages.success(request,'Thank You for contacting Us!! Your message has been saved ') 203 | return redirect('/contact') 204 | else: 205 | print('not post') 206 | return render(request,'contact.html') 207 | 208 | def error_404(request, *args, **argv): 209 | data = {} 210 | return render(request,'404.html', data) 211 | 212 | error = 0 213 | def send_email_to_user(otp,email): 214 | try: 215 | con = smtplib.SMTP("smtp.gmail.com",587) 216 | con.ehlo() 217 | con.starttls() 218 | global admin_email 219 | global admin_password 220 | con.login(admin_email,admin_password) 221 | print("login failed") 222 | print("yo") 223 | msg = "Otp is "+str(otp) 224 | con.sendmail(admin_email,email,"Subject:Password Reset \n\n"+msg) 225 | except: 226 | global error 227 | error=1 228 | return redirect("/forgotPass") 229 | 230 | global_dict = {'otp':"",'email':"",'otpcheck':""} 231 | def generate_otp(): 232 | digits = [i for i in range(0, 10)] 233 | random_str = "" 234 | for i in range(6): 235 | index = math.floor(random.random() * 10) 236 | random_str += str(digits[index]) 237 | print(random_str,type(random_str)) 238 | global_dict['otp'] = random_str 239 | send_email_to_user(random_str,global_dict['email']) 240 | return 241 | 242 | def forgotPass(request): 243 | global error 244 | if request.method == 'POST': 245 | email = request.POST['email'] 246 | if User.objects.filter(email=email).exists(): 247 | print("exist") 248 | global_dict['email'] = email 249 | generate_otp() 250 | if error == 1: 251 | messages.error(request,"Some Error occurred in sending Email!") 252 | return redirect("/forgotPass") 253 | else: 254 | pass 255 | messages.success(request, 'An otp is send to your Email please Enter that otp') 256 | return redirect('/otp') 257 | else: 258 | messages.error(request,"Email Not Found! Please Sign Up") 259 | return redirect('/signup') 260 | else: 261 | return render(request,'forgot.html') 262 | 263 | def otpVerification(request): 264 | if request.method == 'POST': 265 | get_otp = request.POST["otp"] 266 | if global_dict['otp'] == get_otp: 267 | print("match") 268 | global_dict['otpcheck'] = "1" 269 | return redirect('/passwordReset') 270 | else: 271 | print("otp is",global_dict['otp']) 272 | messages.error(request, 'Otp not Matched Please Try Again') 273 | return redirect("/otp") 274 | else: 275 | if global_dict['email']!="": 276 | return render(request,'otp.html') 277 | else: 278 | messages.error(request, 'Please Enter a Valid Email First!') 279 | return redirect('/forgotPass') 280 | 281 | def passwordReset(request): 282 | if request.method == 'POST': 283 | password = request.POST["password"] 284 | cpassword = request.POST["cpassword"] 285 | if password != cpassword: 286 | messages.error(request,"Password not Matched") 287 | return redirect("/passwordReset") 288 | else: 289 | if len(password)<=5: 290 | messages.error(request,'Password must be at least 6 characters Long!!') 291 | return redirect("/passwordReset") 292 | else: 293 | pass 294 | user = User.objects.filter(email=global_dict['email']).first() 295 | user.password = make_password(password) 296 | print(user,user.email,user.password) 297 | user.save() 298 | messages.success(request,"Password reset successfully! Please Login") 299 | return redirect('/login') 300 | else: 301 | if global_dict['email']!="": 302 | if global_dict['otp']!="" and global_dict['otpcheck'] == "1": 303 | return render(request,'passwordReset.html') 304 | else: 305 | messages.error(request,"Please Enter a Valid Otp First!") 306 | return redirect('/otp') 307 | else: 308 | messages.error(request, 'Please Enter a Valid Email First!') 309 | return redirect('/forgotPass') 310 | 311 | def send_confirmation_email(email): 312 | try: 313 | con = smtplib.SMTP("smtp.gmail.com",587) 314 | con.ehlo() 315 | con.starttls() 316 | global admin_email 317 | global admin_password 318 | con.login(admin_email,admin_password) 319 | msg = "Password is changed of your Account !!" 320 | con.sendmail(admin_email,email,"Subject:Login Warning \n\n"+msg) 321 | except: 322 | pass 323 | 324 | def changePassword(request): 325 | if request.user.is_authenticated: 326 | pass 327 | else: 328 | messages.error(request,"Please Login First !!") 329 | return redirect('/login') 330 | if request.method == "POST": 331 | current_password = request.POST["current_password"] 332 | new_password = request.POST["new_password"] 333 | confirm_password = request.POST["confirm_password"] 334 | print(new_password,confirm_password) 335 | user = User.objects.filter(username=request.user).first() 336 | print(user.password) 337 | 338 | if check_password(current_password,user.password): 339 | pass 340 | else: 341 | messages.error(request,"Current Password Not Matched") 342 | return redirect("/changePassword") 343 | if len(new_password)<=5: 344 | messages.error(request,'Password must be at least 6 characters Long!!') 345 | return redirect("/changePassword") 346 | else: 347 | pass 348 | if new_password != confirm_password: 349 | messages.error(request,"Password not Matched") 350 | return redirect("/changePassword") 351 | else: 352 | user.password = make_password(new_password) 353 | user.save() 354 | print("email is ",user.email) 355 | send_confirmation_email(user.email) 356 | login(request,user) 357 | messages.success(request,"Password changed successfully Please Login Again!") 358 | return redirect("/login") 359 | else: 360 | pass 361 | 362 | return render(request,"changePassword.html") -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | """Run administrative tasks.""" 9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PixelVibe.settings') 10 | try: 11 | from django.core.management import execute_from_command_line 12 | except ImportError as exc: 13 | raise ImportError( 14 | "Couldn't import Django. Are you sure it's installed and " 15 | "available on your PYTHONPATH environment variable? Did you " 16 | "forget to activate a virtual environment?" 17 | ) from exc 18 | execute_from_command_line(sys.argv) 19 | 20 | 21 | if __name__ == '__main__': 22 | main() 23 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | django 2 | django-import-export 3 | pillow 4 | django-allauth -------------------------------------------------------------------------------- /site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "PixelVibe", 3 | "short_name": "PV", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /static/JS/darkmode.js: -------------------------------------------------------------------------------- 1 | var element = document.body; 2 | // var togglebutton = document.getElementById("toggle"); 3 | const currentTheme = localStorage.getItem("theme"); 4 | console.log("helo", currentTheme); 5 | // If the current theme in localStorage is "dark"... 6 | if (currentTheme == "dark") { 7 | console.log("Its dark"); 8 | // togglebutton.innerHTML = "Light Mode"; 9 | element.classList.toggle("dark-mode"); 10 | 11 | theme = "dark"; 12 | localStorage.setItem("theme", theme); 13 | } else { 14 | console.log("Its Light"); 15 | // togglebutton.innerHTML = "Dark Mode"; 16 | theme = "light"; 17 | localStorage.setItem("theme", theme); 18 | } 19 | 20 | function myFunction() { 21 | console.log("myFunction"); 22 | const currentTheme = localStorage.getItem("theme"); 23 | if (currentTheme == "dark") { 24 | console.log("prev itss dark now it is light"); 25 | element.classList.toggle("dark-mode"); 26 | theme = "light"; 27 | localStorage.setItem("theme", theme); 28 | // togglebutton.innerHTML = "Dark Mode"; 29 | } else { 30 | console.log("prev is light now its dark"); 31 | element.classList.toggle("dark-mode"); 32 | theme = "dark"; 33 | localStorage.setItem("theme", theme); 34 | // togglebutton.innerHTML = "Light Mode"; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /static/JS/preloader.js: -------------------------------------------------------------------------------- 1 | //preloader 2 | let foldingCube = document.querySelector('.folding-cube'); 3 | window.addEventListener('load', function () { 4 | setTimeout(function(){ foldingCube.parentElement.removeChild(foldingCube);}, 3000); 5 | }); 6 | -------------------------------------------------------------------------------- /static/JS/showPassword.js: -------------------------------------------------------------------------------- 1 | const togglePassword2 = document.querySelector('#togglePassword2'); 2 | const togglePassword3 = document.querySelector('#togglePassword3'); 3 | 4 | const password2 = document.querySelector('#password2'); 5 | const password3 = document.querySelector('#password3'); 6 | 7 | 8 | togglePassword2.addEventListener('click', function (e) { 9 | // toggle the type attribute 10 | const type = password2.getAttribute('type') === 'password' ? 'text' : 'password'; 11 | password2.setAttribute('type', type); 12 | // toggle the eye slash icon 13 | this.classList.toggle('fa-eye-slash'); 14 | }); 15 | togglePassword3.addEventListener('click', function (e) { 16 | // toggle the type attribute 17 | const type = password3.getAttribute('type') === 'password' ? 'text' : 'password'; 18 | password3.setAttribute('type', type); 19 | // toggle the eye slash icon 20 | this.classList.toggle('fa-eye-slash'); 21 | }); 22 | 23 | -------------------------------------------------------------------------------- /static/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/android-chrome-192x192.png -------------------------------------------------------------------------------- /static/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/android-chrome-512x512.png -------------------------------------------------------------------------------- /static/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/apple-touch-icon.png -------------------------------------------------------------------------------- /static/assets/downarrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/assets/downarrow.png -------------------------------------------------------------------------------- /static/assets/favicon_pixelVibe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/assets/favicon_pixelVibe.png -------------------------------------------------------------------------------- /static/assets/nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/assets/nav.png -------------------------------------------------------------------------------- /static/assets/pixelVibe.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/assets/pixelVibe.gif -------------------------------------------------------------------------------- /static/assets/pixel_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/assets/pixel_logo.jpg -------------------------------------------------------------------------------- /static/assets/pixel_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/assets/pixel_logo.png -------------------------------------------------------------------------------- /static/assets/uparrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/assets/uparrow.png -------------------------------------------------------------------------------- /static/css/canvas.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | padding: 0; 4 | text-align: center; 5 | font-weight: bold; 6 | background-color: #fdb1bb; 7 | overflow-x: hidden; 8 | overflow-y: auto; 9 | } 10 | /* navbar */ 11 | .navbar { 12 | background: #203a68; 13 | font-size: 1.1rem; 14 | box-shadow: 0 0.3rem 2rem rgb(0 0 0 / 10%); 15 | } 16 | /* navbar */ 17 | 18 | /* Title Section */ 19 | .title-img { 20 | height: 130px; 21 | width: 130px; 22 | left: 30%; 23 | transform: rotate(-20deg); 24 | } 25 | 26 | .color_change { 27 | color: #313131; 28 | font-size: 5rem; 29 | font-weight: bold; 30 | animation: colorchange 8s infinite alternate; 31 | } 32 | 33 | @keyframes colorchange { 34 | 0% { 35 | color: #6e1224; 36 | } 37 | 5% { 38 | color: #5e17eb; 39 | } 40 | 10% { 41 | color: #8e44ad; 42 | } 43 | 15% { 44 | color: #b84352; 45 | } 46 | 20% { 47 | color: #1abc9c; 48 | } 49 | 25% { 50 | color: #d61ba7; 51 | } 52 | 53 | 30% { 54 | color: #d35400; 55 | } 56 | 57 | 40% { 58 | color: #7f91aa; 59 | } 60 | 61 | 50% { 62 | color: #34495e; 63 | } 64 | 65 | 60% { 66 | color: blue; 67 | } 68 | 69 | 70% { 70 | color: #383a3b; 71 | } 72 | 80% { 73 | color: #0a7029; 74 | } 75 | 76 | 90% { 77 | color: #2980b9; 78 | } 79 | 80 | 100% { 81 | } 82 | } 83 | 84 | /* Dropdown Button */ 85 | .dropbtn { 86 | display: inline-block; 87 | cursor: pointer; 88 | padding: 12px; 89 | margin: 10px; 90 | border: none; 91 | outline: none; 92 | background: whitesmoke; 93 | border-radius: 3px; 94 | } 95 | 96 | .bar1, 97 | .bar2, 98 | .bar3 { 99 | width: 35px; 100 | height: 5px; 101 | background-color: #333; 102 | margin: 6px 0; 103 | transition: 0.4s; 104 | } 105 | 106 | .change .bar1 { 107 | -webkit-transform: rotate(-45deg) translate(-9px, 6px); 108 | transform: rotate(-45deg) translate(-9px, 6px); 109 | } 110 | 111 | .change .bar2 { 112 | opacity: 0; 113 | } 114 | 115 | .change .bar3 { 116 | -webkit-transform: rotate(45deg) translate(-8px, -8px); 117 | transform: rotate(45deg) translate(-8px, -8px); 118 | } 119 | 120 | .dropdown { 121 | position: relative; 122 | display: inline-block; 123 | } 124 | 125 | .dropdown-content { 126 | display: none; 127 | position: absolute; 128 | background-color: #f1f1f1; 129 | min-width: 200px; 130 | z-index: 1; 131 | left: 50%; 132 | transform: translateX(-50%); 133 | } 134 | 135 | .dropdown-content li { 136 | color: black; 137 | padding: 12px 16px; 138 | text-decoration: none; 139 | display: block; 140 | padding-left: 0; 141 | } 142 | 143 | .dropdown-content li:hover { 144 | background-color: #ddd; 145 | cursor: pointer; 146 | } 147 | 148 | ul { 149 | padding: 0; 150 | list-style-type: none; 151 | } 152 | 153 | .show { 154 | display: block; 155 | } 156 | /* css for Dropdown Button end*/ 157 | 158 | /* Canvas-div Section */ 159 | 160 | #canvas-div { 161 | display: flex; 162 | justify-content: space-evenly; 163 | } 164 | 165 | 166 | 167 | /*CSS for the canvas*/ 168 | 169 | .main-canvas { 170 | margin: 10px; 171 | box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.5); 172 | width: 75%; 173 | max-width: 550px; 174 | background-color: white; 175 | cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADNklEQVRIS63UTWgUdxjH8e8zbvbFTXZ3dlXatLWHKoqhKFQpCD2UvpFKmsrGVYIoCoIoSsGT4EERz95z0IpU2mKlFltaWipF20MrscGmMVVjgtksJu1mM/v+MvMv89801dZosnFOc5hnPvz+z/N/5JW26DGBTCza8sPXhw/1y7sHyzzFRzasMQ9jGCd2drxZ2b7p9RFRXFI458LR8RvSdrSyUEu2dqzb0Nn+1pX329/w2elx7GLB/WfNn7/8u2/ykx2yjb6FIKJufeXDDP2KYrVj2xSSI9hWklD6OEJhDOiQOL2NIuIWqj9/PI5SR9x3p5Yn/9MBmPyDlggKuI9DpyT4uRGkDiSvrsLLb3bZ8jiTR2gyesmPgJOC5jAIpBA6Jc4v80XqgLrsIfntVcc6/WqmP0XwBfCGoTAKzig0N4MIaRza55tEAxq5ySoUl1C8lO5Hgs/XkWIKqkMQimjkLxSbZQtX5ppkBtBIPysw+Fw5tE3dAv8y8JtQGIfKMITdJIoJhG6J891ckIcAjQzyHA5fKsXazAAEngF/FAr3oToGoQCIjYVNQrbyzZOQ/wEa6aWVgD6udZlBxLcE/DEoTkA5CRE/iEMOxXbZwsXHIY8EpnvSClxUDuutIfCGILC0jpRGIeImqWEh7JYuPpsNmRXQyAAx4Aul2Oj2xBeBwLI6UnGPy6eRErBttiSPBR5ALgCvTd1GmhZD4Fkop6EwBGZQN97dL7uki0//m+SJwHTjl+DwkYK3c8NgeMAd45KL3AQzpEc4i8N+SXD2QWROgEausZggFxS8Y90BTwCCrXWkNABh98YbuKt+j8T/ReYMaKSPIF4+BjZN3UEWeetJKlOQvwGmqZO4yD7p4pRbMy9AI9eJ4OeMu2WzI/X6lhehnIF8H5gxjRQRPpA4PfMGNHKPAHnOoei0hhFjEXp/VVOQH4RwDAyDKrC7IWAGyXIaIeEmUQpalkNtEKwUmEs1crJhYKYnHnow6M4lwSlDKArVu5CdpBiN8fKCgOnpaiLIh0B37h4oG5pL5KTKLklwfsHA9Bb2YtCjFDsKSdK1MfZGdnK+oSmabefoxmd5jya+l5VM/PPd34paOjK8tyR0AAAAAElFTkSuQmCC") 0 0 , crosshair; 176 | touch-action: none; 177 | image-rendering: -moz-crisp-edges; 178 | image-rendering: -webkit-crisp-edges; 179 | image-rendering: pixelated; 180 | image-rendering: crisp-edges; 181 | margin-left: 20%; 182 | } 183 | 184 | .main-canvas.erasing { 185 | cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAFBUlEQVR42qWUWUxUVxjHv+/emTsbsw/o1KAjiT6Qplaf1ERMk/alTfvUFh8kZiKaWBfiiFFUQFGBwoBSCtraKbZJt6RpU9v0obZ9EFGspXWroJVxWAYGZrsw+3Ln9MwoAxR3v5d7Tu45/993/uf7DsJzxNWPf34REPRAwLts8+s3HrQGn1W8u+W7V1CvPCnVKJckI7HbxB14P0+vOr2wuIg8F2Dwm3PoGveblYX5lbnRpCmVSAJJChBeoOeDfcO7NApZR/67a8gzARzfdqLbM2FRmuY15iFCzOlDYJAAISBSyjGYqyIBx3i5SiI+Zlq3ljwV4M7353FyImSW52k/mc9xEBv1ZfYTGvcGgCKdkkwoOPDfGSlVyrmOpetfJU8E6PupCwO+oFlvMjZp/BGNEIpBWje9ecqLzDhFT6KQAK+T8+7egV0yCdvxWMDVX7owOBG0GFW5jbqogEI4SpWz26YZaR7HEq4gD2JDHnREwrev/dVT/EhAz+8X0Mf7zBq9zrY0LCOpQIQ6AdMXSGPKIkYsQsaoInEXDyJgcTgeJcW7N735UMDlzm70+rxmlU7bJBDQ5PIpMCY4mFmD2fTpAvHSXIg4xgEjSRCpcuCG1zWw8cD2DQ8EXLp4Cf1en4VTSBvFnBQSyUQm8wVRDo0R8fTFpc0Ss4TJV0O4dwgZwhKxVApX7vTz+zuajjj9I3Pv4CIV93rcZplCbstR0iPH49lkKSQDyItQE1J0wrFI9DISHfEAE00hy0nIwJgHtrYerOGj/lO73tk4NgtwobsbPW6PWaGQN6nVGk0imbxfy3iv2DO3S4iBAoyTLDAmNYbso4SJCMBJZXjX5Sb7Pm1qvTncZ60s2TZmbtgTzwLOdZ5Hnvdb5HK5VW/IhZSQog6Q+15jZpz5Ug7DMjBfZwDx5UFg4ylgaF9c6r0VPPLVh83DPqetZUeV862KTUK20c7++httIt5Ms7bNMxpJShDu9w5MdWNmjJnCYYhMJoWJQAAMIQaV4zFiHxwFy6m6w96w17b97Q2uLY3749lC+OHMGQyHw2adTt+0cNEiTSqVemjZilgWJBIOPF4fJTGglMnB8XcfWFuaW28N/Gu1rN/sKmusis/cg1XV1csLCwu/Xrly1RJ6oXOac6reqThhGAYdg0NErVaBhNpypeuPUENbc7PH5bbV7NjrNO/dJvw/KTSZTG+0tbf/+PLy5RCLxXCO8enMRWJMJONkfGwcZXI5YRkG+np7oa6u9nBwImAzrytxVRydnXkWkJ+fv7ahofGzNUVrFmX0yOwFDLVFoM/xsNMJUokU0v7/c/0GfNDa0mrvt1u3bNzs2l/zYPEpgNZgMLxXsW/fnqKitUrMFArJGEMdIfRUYL/rQLVaTThOjF2d5wMnTrQfo6exVeypcG7dsVWARwTW1deLTnd0GGl5llqt1qqXli0jLM06/W9yMkBGRkZBkaOgMIb09d7EutramslAwFayvsRVXf3wzGc+J9TLeq69vW1+QUFBeVlZ2fZVq1dnrBkYGAIpbX36DsP169fgo5MnW/v7+62lpZtchw4dfKx4FpCOtrZ2trb26As5OTmvrVixokShUGjxnl8QDoX4P3t6Pg8Gg2fLy3ePWCw7hScRnwVIx4HKSvGXX3yhsdvtWjrlZvyKL15c4C8uLubr6+sSTyo+B5COnRYL+n0+lmaO0w2BRKvVCMePHydPI56O/wCo7VGjqySC0AAAAABJRU5ErkJggg==") 0 0, crosshair; 186 | } 187 | 188 | .area { 189 | background: rgb(0, 0, 0); 190 | background: -webkit-linear-gradient(to left, #363583, #1b25e4); 191 | width: 100%; 192 | height: 100vh; 193 | } 194 | 195 | .wrap { 196 | position: relative; 197 | top: 70%; 198 | left: 50%; 199 | width: 0; 200 | height: 0; 201 | transform-style: preserve-3d; 202 | perspective: 1000px; 203 | animation: rotate 25s infinite linear; 204 | margin: 10px; 205 | background: -webkit-linear-gradient(to left, #424e34, #91ff14); 206 | } 207 | 208 | @keyframes rotate { 209 | 100% { 210 | transform: rotateY(360deg) rotateX(360deg); 211 | } 212 | } 213 | 214 | .c { 215 | position: absolute; 216 | width: 2px; 217 | height: 2px; 218 | border-radius: 50%; 219 | opacity: 0; 220 | } 221 | 222 | .c:nth-child(1) { 223 | animation: orbit1 25s infinite; 224 | animation-delay: 0.01s; 225 | background-color: rgba(255, 85, 0, 1); 226 | } 227 | 228 | #b-margin { 229 | padding-bottom: 30px; 230 | } 231 | 232 | .selected{ 233 | background-color: lightgray; 234 | } 235 | 236 | 237 | /* Colour palette styles */ 238 | 239 | #palette { 240 | display: grid; 241 | height: 50vh; 242 | width: 20vw; 243 | margin-left: 10px; 244 | gap: 10px; 245 | grid-template-columns: repeat(3, 1fr); 246 | grid-template-rows: repeat(6, 1fr); 247 | /* border: 2px solid rgb(194, 58, 121); */ 248 | padding: 10px; 249 | background-color: whitesmoke; 250 | border-radius: 10px; 251 | } 252 | 253 | #palette-prompt { 254 | font-family: "Chewy", cursive; 255 | letter-spacing: 3px; 256 | grid-column: span 3; 257 | font-size: 2rem; 258 | text-shadow: -0.5px 0 black, 0 0.5px black, 0.5px 0 black, 0 -0.5px black; 259 | } 260 | 261 | .palette-color, #palette-color-input { 262 | cursor: pointer; 263 | border-radius: 10px; 264 | } 265 | 266 | .palette-color:hover, #palette-color-input:hover { 267 | transform: scale(1.1); 268 | } 269 | 270 | /* to highlight the currently chosen color, toggle the selected class on the color */ 271 | 272 | .color.selected { 273 | border: 3px solid white; 274 | } 275 | 276 | #palette-choose-any-prompt { 277 | grid-column: span 2; 278 | display: flex; 279 | justify-content: center; 280 | align-items: center; 281 | } 282 | 283 | #palette-color-input { 284 | height: 100%; 285 | width: 100%; 286 | border: none; 287 | } 288 | 289 | /* responsive css */ 290 | 291 | @media (max-width: 400px) { 292 | .size-picker-form { 293 | margin-left: 8%; 294 | margin-right: 8%; 295 | } 296 | #canvas-div { 297 | display: flex; 298 | flex-direction: column; 299 | justify-content: space-evenly; 300 | } 301 | .dropdown { 302 | position: relative; 303 | display: inline-block; 304 | right: -19px; 305 | left: -13vh; 306 | bottom: 14vh; 307 | } 308 | .dropbtn { 309 | display: inline-block; 310 | cursor: pointer; 311 | padding: 5px; 312 | margin: 1px; 313 | border: none; 314 | outline: none; 315 | background: whitesmoke; 316 | border-radius: 3px; 317 | left: 11vw; 318 | position: relative; 319 | top: 12vh; 320 | 321 | } 322 | .bar1, .bar2, .bar3 { 323 | width: 26px; 324 | height: 5px; 325 | background-color: #333; 326 | margin: 6px 0; 327 | transition: 0.4s; 328 | } 329 | .dropdown-content { 330 | position: absolute; 331 | background-color: #f1f1f1; 332 | min-width: 131px; 333 | z-index: 1; 334 | left: 37%; 335 | bottom: -15vh; 336 | transform: translateX(-50%); 337 | } 338 | .dropdown-content li { 339 | color: black; 340 | padding: 6px 5px; 341 | text-decoration: none; 342 | display: block; 343 | padding-left: 0; 344 | } 345 | .color_change { 346 | color: #313131; 347 | font-size: 2rem; 348 | font-weight: bold; 349 | animation: colorchange 8s infinite alternate; 350 | width: 55%; 351 | margin-left: 28%; 352 | } 353 | #palette 354 | { 355 | width:85vw; 356 | } 357 | .row 358 | { 359 | margin:0 !important; 360 | } 361 | .main-canvas { 362 | margin:1px !important; 363 | box-shadow: 0px 0px 2px 0px rgb(0 0 0 / 50%); 364 | width: 99%; 365 | max-width: 550px; 366 | background-color: white; 367 | cursor: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADNklEQVRIS63UTWgUdxjH8e8zbvbFTXZ3dlXatLWHKoqhKFQpCD2UvpFKmsrGVYIoCoIoSsGT4EERz95z0IpU2mKlFltaWipF20MrscGmMVVjgtksJu1mM/v+MvMv89801dZosnFOc5hnPvz+z/N/5JW26DGBTCza8sPXhw/1y7sHyzzFRzasMQ9jGCd2drxZ2b7p9RFRXFI458LR8RvSdrSyUEu2dqzb0Nn+1pX329/w2elx7GLB/WfNn7/8u2/ykx2yjb6FIKJufeXDDP2KYrVj2xSSI9hWklD6OEJhDOiQOL2NIuIWqj9/PI5SR9x3p5Yn/9MBmPyDlggKuI9DpyT4uRGkDiSvrsLLb3bZ8jiTR2gyesmPgJOC5jAIpBA6Jc4v80XqgLrsIfntVcc6/WqmP0XwBfCGoTAKzig0N4MIaRza55tEAxq5ySoUl1C8lO5Hgs/XkWIKqkMQimjkLxSbZQtX5ppkBtBIPysw+Fw5tE3dAv8y8JtQGIfKMITdJIoJhG6J891ckIcAjQzyHA5fKsXazAAEngF/FAr3oToGoQCIjYVNQrbyzZOQ/wEa6aWVgD6udZlBxLcE/DEoTkA5CRE/iEMOxXbZwsXHIY8EpnvSClxUDuutIfCGILC0jpRGIeImqWEh7JYuPpsNmRXQyAAx4Aul2Oj2xBeBwLI6UnGPy6eRErBttiSPBR5ALgCvTd1GmhZD4Fkop6EwBGZQN97dL7uki0//m+SJwHTjl+DwkYK3c8NgeMAd45KL3AQzpEc4i8N+SXD2QWROgEausZggFxS8Y90BTwCCrXWkNABh98YbuKt+j8T/ReYMaKSPIF4+BjZN3UEWeetJKlOQvwGmqZO4yD7p4pRbMy9AI9eJ4OeMu2WzI/X6lhehnIF8H5gxjRQRPpA4PfMGNHKPAHnOoei0hhFjEXp/VVOQH4RwDAyDKrC7IWAGyXIaIeEmUQpalkNtEKwUmEs1crJhYKYnHnow6M4lwSlDKArVu5CdpBiN8fKCgOnpaiLIh0B37h4oG5pL5KTKLklwfsHA9Bb2YtCjFDsKSdK1MfZGdnK+oSmabefoxmd5jya+l5VM/PPd34paOjK8tyR0AAAAAElFTkSuQmCC) 0 0 , crosshair; 368 | touch-action: none; 369 | image-rendering: -moz-crisp-edges; 370 | image-rendering: -webkit-crisp-edges; 371 | image-rendering: pixelated; 372 | image-rendering: crisp-edges; 373 | margin-left:1px !important; 374 | } 375 | } 376 | 377 | -------------------------------------------------------------------------------- /static/css/darkmode.css: -------------------------------------------------------------------------------- 1 | /* css for dark mode start */ 2 | .switch { 3 | position: relative; 4 | display: inline-block; 5 | width: 3.8rem; 6 | height: 2.1rem; 7 | margin-top:0.6rem; 8 | } 9 | 10 | /* // Hide checkbox 11 | */ 12 | .switch input { 13 | opacity: 0; 14 | width: 0; 15 | height: 0; 16 | } 17 | 18 | /* // The slider 19 | */ 20 | .slider { 21 | position: absolute; 22 | cursor: pointer; 23 | top: 0; 24 | left: 0; 25 | right: 0; 26 | bottom: 0; 27 | background-color: lightblue; 28 | transition: 0.4s ease-in-out; 29 | } 30 | 31 | /* 32 | // Design of slider for light mode 33 | */ 34 | .slider:before { 35 | position: absolute; 36 | content: ""; 37 | height: 23px; 38 | width: 23px; 39 | left: 6px; 40 | bottom: 6px; 41 | background-color: yellow; 42 | box-shadow: 0px 0px 5px 4px #ffd900; 43 | transition: 0.4s; 44 | } 45 | /* // When theme is dark, background is dark */ 46 | .dark-mode .slider { 47 | background-color: #3a2864; 48 | } 49 | 50 | /* // If theme is dark, but slider is to the left, move it to the right and turn it into a moon 51 | */ 52 | .dark-mode .slider:before { 53 | transform: translateX(26px); 54 | height: 3px; 55 | width: 3px; 56 | background-color: lightgrey; 57 | bottom: 15px; 58 | left: 10px; 59 | box-shadow: 10px -7px 0px 1px lightgrey, -4px -8px 0px 0px lightgrey, 6px 6px 0px 1px lightgrey, 5px -1px 5px 13px white, 5px -1px 0px 12px white; 60 | } 61 | 62 | /* Rounded sliders */ 63 | .slider.round { 64 | border-radius: 34px; 65 | } 66 | 67 | .slider.round:before { 68 | border-radius: 50%; 69 | } 70 | 71 | .dark-mode{ 72 | background-color: rgb(36, 35, 35); 73 | } 74 | 75 | /* css for dark mode ends */ 76 | -------------------------------------------------------------------------------- /static/css/form.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@500&display=swap'); 2 | *{ 3 | margin: 0; 4 | padding: 0; 5 | box-sizing: border-box; 6 | font-family: 'Poppins', sans-serif; 7 | } 8 | html,body{ 9 | height: 100%; 10 | } 11 | body{ 12 | display: grid; 13 | place-items: center; 14 | background: linear-gradient(16deg, rgba(254,167,186,1) 16%, rgba(255,237,204,1) 61%); 15 | 16 | } 17 | .field 18 | { 19 | text-align: center; 20 | } 21 | .content{ 22 | margin-top: 11vh; 23 | width: 330px; 24 | background: #421921; 25 | border-radius: 30px; 26 | padding: 40px 30px; 27 | box-shadow: -3px -3px 7px #ffffff73, 28 | 2px 2px 5px rgba(94,104,121,0.288); 29 | } 30 | .content .text{ 31 | font-size: 33px; 32 | font-weight: 600; 33 | margin-bottom: 35px; 34 | color: #ffffff; 35 | } 36 | .content .field{ 37 | height: 50px; 38 | width: 100%; 39 | display: flex; 40 | margin: 12px 0px; 41 | position: relative; 42 | } 43 | .field input{ 44 | height: 100%; 45 | width: 100%; 46 | padding-left: 45px; 47 | font-size: 18px; 48 | outline: none; 49 | border: none; 50 | color: #595959; 51 | border-radius: 25px; 52 | background: #dde1e7; 53 | box-shadow: inset 2px 2px 5px #babecc, 54 | inset -5px 5px 10px #ffffff73; 55 | } 56 | .field input:focus{ 57 | box-shadow: inset 1px 1px 2px #babecc, 58 | inset -1px 1px 2px #ffffff73; 59 | } 60 | .field:nth-child(2){ 61 | margin-top: 20px; 62 | } 63 | .field span{ 64 | position: absolute; 65 | width: 50px; 66 | line-height: 50px; 67 | color: #595959; 68 | margin-left: 10px; 69 | } 70 | .field label{ 71 | position: absolute; 72 | top: 50%; 73 | left: 45px; 74 | pointer-events: none; 75 | color: #666666; 76 | transform: translateY(-50%); 77 | } 78 | .field input:focus ~ label{ 79 | color: #666666; 80 | } 81 | 82 | .field input:valid ~ label{ 83 | opacity: 0; 84 | } 85 | .forgot-pass{ 86 | text-align: left; 87 | margin: 10px 0 10px 5px; 88 | } 89 | .forgot-pass a{ 90 | font-size: 14px; 91 | color: #3498db; 92 | text-decoration: none; 93 | } 94 | .forgot-pass:hover a{ 95 | text-decoration: underline; 96 | } 97 | .content button{ 98 | margin:5px; 99 | width: 100%; 100 | height: 50px; 101 | color: #595959; 102 | font-size: 17px; 103 | font-weight: 550; 104 | background: #dde1e7; 105 | border: none; 106 | outline: none; 107 | border-radius: 25px; 108 | cursor: pointer; 109 | box-shadow: 2px 2px 5px #babecc, 110 | -5px 5px 10px #ffffff73; 111 | } 112 | button:hover{ 113 | color: #3498db; 114 | box-shadow: inset 2px 2px 5px #babecc, 115 | inset -5px 5px 10px #ffffff73; 116 | } 117 | .signup{ 118 | font-size: 16px; 119 | color: #fcfcfc; 120 | margin: 10px 0; 121 | } 122 | .signup a{ 123 | color: #3498db; 124 | text-decoration: none; 125 | } 126 | .signup a:hover{ 127 | text-decoration: underline; 128 | } 129 | 130 | .dark-mode 131 | { 132 | background:linear-gradient(16deg, rgb(156 102 114) 16%, rgb(153 141 119) 61%) !important; 133 | } 134 | .google 135 | { 136 | background-color:#f44336 !important; 137 | color: #fff !important; 138 | margin:5px !important; 139 | } 140 | .facebook { 141 | background-color:#01579b !important; 142 | color: #fff !important; 143 | margin:5px !important; 144 | } 145 | .btn-font { 146 | color: #fff; 147 | } -------------------------------------------------------------------------------- /static/css/homepage.css: -------------------------------------------------------------------------------- 1 | /* css for navbar start */ 2 | .navbar 3 | { 4 | background:#203a68; 5 | font-size: 1.1rem; 6 | box-shadow: 0 0.3rem 2rem rgb(0 0 0 / 10%); 7 | } 8 | .nav-link 9 | { 10 | color:#fff !important; 11 | font-size:1.3rem; 12 | } 13 | .navbar-nav .nav-item 14 | { 15 | padding:0px 10px; 16 | } 17 | /* css for navbar ends */ 18 | #section-1 19 | { 20 | height:91vh; 21 | background:url("/static/assets/pixelVibe.gif"); 22 | background-repeat:no-repeat; 23 | background-size:100% 100%; 24 | } 25 | #section-2 h1 26 | { 27 | font-size:5rem; 28 | font-weight:700; 29 | } 30 | #section-2 p 31 | { 32 | font-size:1.5rem; 33 | } 34 | #section-3 h1 35 | { 36 | font-size:4rem; 37 | font-weight:700; 38 | } 39 | /* our team start */ 40 | 41 | .our-team{ 42 | box-shadow: 0 0 1px 1px rgba(0, 0, 0, 0.15); 43 | text-align: center; 44 | overflow: hidden; 45 | position: relative; 46 | transition: all 0.3s ease-in-out 0s; 47 | } 48 | 49 | .our-team .pic:before{ 50 | content: ""; 51 | background: #716a9e; 52 | position: absolute; 53 | top: 10px; 54 | left: 10px; 55 | bottom: 10px; 56 | right: 10px; 57 | opacity: 0.78; 58 | transform: scale(0); 59 | transition: all 0.3s ease-in-out 0s; 60 | } 61 | 62 | .our-team:hover .pic:before{ 63 | transform: scale(1); 64 | } 65 | 66 | .our-team .pic img{ 67 | width: 100%; 68 | height: auto; 69 | } 70 | 71 | .our-team .social{ 72 | list-style: none; 73 | padding: 0; 74 | margin: 0; 75 | width: 100%; 76 | position: absolute; 77 | top: 40%; 78 | opacity: 0; 79 | transition: all 0.3s ease-in-out 0s; 80 | } 81 | 82 | .our-team:hover .social{ 83 | opacity: 1; 84 | } 85 | 86 | .our-team .social li{ 87 | display: inline-block; 88 | position: relative; 89 | transition: all 0.3s ease-in-out 0s; 90 | } 91 | 92 | .our-team .social li:nth-child(1){ 93 | transform: translate3d(22px, -19px, 0px); 94 | } 95 | 96 | .our-team:hover .social li:nth-child(1){ 97 | transform: translate3d(62px, -19px, 0px); 98 | } 99 | 100 | .our-team .social li:nth-child(2){ 101 | transform: translate3d(36px, 38px, 0px); 102 | } 103 | 104 | .our-team:hover .social li:nth-child(2){ 105 | transform: translate3d(36px, 8px, 0px); 106 | } 107 | 108 | .our-team .social li:nth-child(3){ 109 | transform: translate3d(-18px, -75px, 0px); 110 | } 111 | 112 | .our-team:hover .social li:nth-child(3){ 113 | transform: translate3d(-18px, -46px, 0px); 114 | } 115 | 116 | .our-team .social li:nth-child(4){ 117 | transform: translate3d(-5px, -19px, 0px); 118 | } 119 | 120 | .our-team:hover .social li:nth-child(4){ 121 | transform: translate3d(-43px, -19px, 0px); 122 | } 123 | 124 | .our-team .social li a{ 125 | display: block; 126 | width: 35px; 127 | height: 35px; 128 | line-height: 35px; 129 | background: #333; 130 | font-size: 16px; 131 | color: #fff; 132 | margin: 0 15px 0 0; 133 | transform: rotate(45deg); 134 | transition: all 0.3s ease-in-out 0s; 135 | } 136 | 137 | .our-team .social li a:hover{ 138 | line-height: 35px; 139 | background: #fff; 140 | color: #333; 141 | transform: rotate(-45deg); 142 | } 143 | 144 | .our-team .social li a i{ 145 | transform: rotate(-45deg); 146 | transition: all 0.3s ease-in-out 0s; 147 | } 148 | 149 | .our-team .social li a:hover i{ 150 | transform: rotate(45deg); 151 | } 152 | 153 | .our-team .team-content{ 154 | padding: 15px 10px; 155 | background: #fff; 156 | position: relative; 157 | transition: all 0.3s ease-in-out 0s; 158 | } 159 | 160 | .our-team .title{ 161 | font-size: 18px; 162 | font-weight: 700; 163 | color: #333; 164 | text-transform: uppercase; 165 | margin: 0 0 12px 0; 166 | } 167 | 168 | .our-team small{ 169 | display: block; 170 | font-size: 14px; 171 | color: #999; 172 | margin-bottom: 8px; 173 | } 174 | 175 | .our-team .team-layer{ 176 | width: 100%; 177 | padding: 34px 10px; 178 | background: #f7f7f7; 179 | border-bottom: 2px solid #716a9e; 180 | position: absolute; 181 | bottom: -50px; 182 | left: 0; 183 | opacity: 0; 184 | transition: all 0.3s ease-in-out 0s; 185 | } 186 | 187 | .our-team:hover .team-layer{ 188 | bottom: 0; 189 | opacity: 1; 190 | } 191 | 192 | .our-team .team-layer a{ 193 | display: inline-block; 194 | font-size: 18px; 195 | font-weight: 700; 196 | color: #333; 197 | text-transform: uppercase; 198 | margin: 0 0 12px 0; 199 | transition: all 0.3s ease-in-out 0s; 200 | } 201 | 202 | .our-team .team-layer a:hover{ 203 | color: #716a9e; 204 | } 205 | 206 | .our-team .post{ 207 | display: block; 208 | font-size: 14px; 209 | color: #999; 210 | text-transform: capitalize; 211 | } 212 | 213 | 214 | /* our team end */ 215 | 216 | 217 | /* new footer */ 218 | .footer p 219 | { 220 | font-size:1.5rem; 221 | text-align: center; 222 | font-weight: normal; 223 | letter-spacing: .1rem; 224 | color:#fff; 225 | } 226 | .footer-distributed { 227 | background: #666; 228 | box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.12); 229 | box-sizing: border-box; 230 | width: 100%; 231 | text-align: left; 232 | font: bold 16px sans-serif; 233 | padding: 55px 50px; 234 | } 235 | 236 | .footer-distributed .footer-left, 237 | .footer-distributed .footer-center, 238 | .footer-distributed .footer-right { 239 | display: inline-block; 240 | vertical-align: top; 241 | } 242 | 243 | /* Footer left */ 244 | /* The company logo */ 245 | 246 | .footer-distributed h3 { 247 | color: #ffffff; 248 | font: normal 36px 'Open Sans', cursive; 249 | margin: 0; 250 | } 251 | 252 | .footer-distributed h3 span { 253 | color: aqua; 254 | } 255 | 256 | /* Footer links */ 257 | 258 | .footer-distributed .footer-links { 259 | color: #ffffff; 260 | margin: 20px 0 12px; 261 | padding: 0; 262 | } 263 | 264 | .footer-distributed .footer-links a { 265 | display: inline-block; 266 | line-height: 1.8; 267 | font-weight: 400; 268 | text-decoration: none; 269 | color: inherit; 270 | } 271 | 272 | .footer-distributed .footer-company-name { 273 | color: #222; 274 | font-size: 14px; 275 | font-weight: normal; 276 | margin: 0; 277 | } 278 | 279 | /* Footer Center */ 280 | .footer-distributed .footer-center i { 281 | background-color: #33383b; 282 | color: #ffffff; 283 | font-size: 25px; 284 | width: 38px; 285 | height: 38px; 286 | border-radius: 50%; 287 | text-align: center; 288 | line-height: 42px; 289 | margin: 10px 15px; 290 | vertical-align: middle; 291 | } 292 | 293 | .footer-distributed .footer-center i.fa-envelope { 294 | font-size: 17px; 295 | line-height: 38px; 296 | } 297 | 298 | .footer-distributed .footer-center p { 299 | display: inline-block; 300 | color: #ffffff; 301 | font-weight: 400; 302 | vertical-align: middle; 303 | margin: 0; 304 | } 305 | 306 | .footer-distributed .footer-center p span { 307 | display: block; 308 | font-weight: normal; 309 | font-size: 14px; 310 | line-height: 2; 311 | } 312 | 313 | .footer-distributed .footer-center p a { 314 | color: lightseagreen; 315 | text-decoration: none; 316 | ; 317 | } 318 | 319 | .footer-distributed .footer-links a:before { 320 | content: "|"; 321 | font-weight: 300; 322 | font-size: 20px; 323 | left: 0; 324 | color: #fff; 325 | display: inline-block; 326 | padding-right: 5px; 327 | } 328 | 329 | .footer-distributed .footer-links .link-1:before { 330 | content: none; 331 | } 332 | 333 | /* Footer Right */ 334 | .footer-distributed .footer-company-about { 335 | line-height: 20px; 336 | color: #fff; 337 | font-size:1rem; 338 | font-weight: normal; 339 | margin: 0; 340 | } 341 | 342 | .footer-distributed .footer-company-about span { 343 | display: block; 344 | color: #ffffff; 345 | font-size: 1.5rem; 346 | font-weight: bold; 347 | margin-bottom: 20px; 348 | margin-top: 2vh; 349 | } 350 | /* If you don't want the footer to be responsive, remove these media queries */ 351 | 352 | @media (max-width: 880px) { 353 | 354 | .footer-distributed { 355 | font: bold 14px sans-serif; 356 | } 357 | 358 | .footer-distributed .footer-left, 359 | .footer-distributed .footer-right { 360 | display: block; 361 | width: 100%; 362 | text-align: center; 363 | } 364 | 365 | .footer-distributed .footer-center i { 366 | margin-left: 0; 367 | } 368 | 369 | .footer-distributed .footer-center 370 | { 371 | display: block; 372 | width: 100%; 373 | text-align: center; 374 | } 375 | .footer-center .inner-footer-center 376 | { 377 | width:90%; 378 | margin:auto; 379 | text-align: center; 380 | } 381 | .footer-distributed .footer-company-about span { 382 | margin-bottom:2vh; 383 | margin-top: 7vh; 384 | } 385 | .footer-distributed .footer-company-about 386 | { 387 | margin-bottom:5vh; 388 | } 389 | } 390 | 391 | /* css for social media icons start */ 392 | .rounded-social-buttons { 393 | text-align: center; 394 | } 395 | 396 | .rounded-social-buttons .social-button { 397 | display: inline-block; 398 | position: relative; 399 | cursor: pointer; 400 | width: 3.125rem; 401 | height: 3.125rem; 402 | border: 0.125rem solid transparent; 403 | padding: 0; 404 | text-decoration: none; 405 | text-align: center; 406 | color: #fefefe; 407 | font-size: 1.5625rem; 408 | font-weight: normal; 409 | line-height: 2em; 410 | border-radius: 1.6875rem; 411 | transition: all 0.5s ease; 412 | margin-right: 0.25rem; 413 | margin-bottom: 0.25rem; 414 | } 415 | 416 | .rounded-social-buttons .social-button:hover, .rounded-social-buttons .social-button:focus { 417 | -webkit-transform: rotate(360deg); 418 | -ms-transform: rotate(360deg); 419 | transform: rotate(360deg); 420 | } 421 | 422 | .rounded-social-buttons .fa-twitter, .fa-facebook-f, .fa-linkedin, .fa-youtube, .fa-instagram { 423 | font-size: 25px; 424 | } 425 | 426 | .rounded-social-buttons .social-button.facebook { 427 | background: #3b5998; 428 | } 429 | 430 | .rounded-social-buttons .social-button.facebook:hover, .rounded-social-buttons .social-button.facebook:focus { 431 | color: #3b5998; 432 | background: #fefefe; 433 | border-color: #3b5998; 434 | } 435 | 436 | .rounded-social-buttons .social-button.twitter { 437 | background: #55acee; 438 | } 439 | 440 | .rounded-social-buttons .social-button.twitter:hover, .rounded-social-buttons .social-button.twitter:focus { 441 | color: #55acee; 442 | background: #fefefe; 443 | border-color: #55acee; 444 | } 445 | 446 | .rounded-social-buttons .social-button.linkedin { 447 | background: #007bb5; 448 | } 449 | 450 | .rounded-social-buttons .social-button.linkedin:hover, .rounded-social-buttons .social-button.linkedin:focus { 451 | color: #007bb5; 452 | background: #fefefe; 453 | border-color: #007bb5; 454 | } 455 | 456 | .rounded-social-buttons .social-button.github { 457 | background: black; 458 | } 459 | 460 | .rounded-social-buttons .social-button.github:hover, .rounded-social-buttons .social-button.github:focus { 461 | color: black; 462 | background: #ffff; 463 | border-color: black; 464 | } 465 | 466 | .rounded-social-buttons .social-button.instagram { 467 | background: #d52c79; 468 | } 469 | 470 | .rounded-social-buttons .social-button.instagram:hover, .rounded-social-buttons .social-button.instagram:focus { 471 | color: #125688; 472 | background: #fefefe; 473 | border-color: #125688; 474 | } 475 | .rounded-social-buttons .social-button.whatsapp { 476 | background:#4ced69; 477 | } 478 | .rounded-social-buttons .social-button.whatsapp:hover, .rounded-social-buttons .social-button.whatsapp:focus { 479 | color:#4ced69; 480 | background: #fefefe; 481 | border-color:#4ced69 ; 482 | } 483 | /* css for social media icons start */ 484 | /* css for footer ends here */ 485 | 486 | /* ////////////////////////////////////////////////////////////////// */ 487 | 488 | 489 | /* css for back to top start */ 490 | html { 491 | scroll-behavior: smooth; 492 | } 493 | a 494 | { 495 | text-decoration: none; 496 | } 497 | #button { 498 | display: inline-block; 499 | background: linear-gradient(16deg, rgba(254,167,186,1) 16%, rgba(255,237,204,1) 61%); 500 | width: 52px; 501 | height: 52px; 502 | text-align: center; 503 | border-radius: 25px; 504 | position: fixed; 505 | bottom: 5px; 506 | left: -5px; 507 | transition: background-color .3s, 508 | opacity .5s, visibility .5s; 509 | opacity: 0; 510 | visibility: hidden; 511 | z-index: 1000; 512 | } 513 | #button::after { 514 | content: "\f077"; 515 | font-family: FontAwesome; 516 | font-weight: normal; 517 | font-style: normal; 518 | font-size: 2em; 519 | line-height: 50px; 520 | color: #421921; 521 | } 522 | #button:hover { 523 | cursor: pointer; 524 | background-color: rgb(57, 26, 197); 525 | } 526 | #button:active { 527 | background-color: #555; 528 | } 529 | #button.show { 530 | opacity: 1; 531 | visibility: visible; 532 | } 533 | 534 | /* Styles for the content section */ 535 | 536 | 537 | @media (min-width: 500px) { 538 | 539 | #button { 540 | margin: 30px; 541 | } 542 | } 543 | /* css for back to top ends */ 544 | 545 | .dark-mode .navbar 546 | { 547 | background:#172a4b; 548 | } 549 | .dark-mode #section-2 h1 , .dark-mode #section-2 p , .dark-mode #section-3 h1 550 | { 551 | color: #fff !important; 552 | } 553 | /* for small screens media queries will be here */ 554 | 555 | @media screen and (max-width: 992px) { 556 | #section-1 557 | { 558 | height:41vh; 559 | background-repeat:no-repeat; 560 | background-size:100% 100%; 561 | } 562 | 563 | #section-2 p 564 | { 565 | font-size:1.3rem; 566 | } 567 | 568 | } 569 | 570 | 571 | svg { 572 | width:100%; 573 | } 574 | .wave { 575 | animation: wave 3s linear; 576 | animation-iteration-count:infinite; 577 | fill: #fdb1bb; 578 | } 579 | .drop { 580 | fill: transparent; 581 | animation: drop 5s ease infinite normal; 582 | stroke: #4478e3; 583 | stroke-width:0.5; 584 | opacity:.6; 585 | transform: translateY(80%); 586 | } 587 | .drop1 { 588 | transform-origin: 20px 3px; 589 | } 590 | .drop2 { 591 | animation-delay: 3s; 592 | animation-duration:3s; 593 | transform-origin: 25px 3px; 594 | } 595 | .drop3 { 596 | animation-delay: -2s; 597 | animation-duration:3.4s; 598 | transform-origin: 16px 3px; 599 | } 600 | .gooeff { 601 | filter: url(#goo); 602 | } 603 | #wave2 { 604 | animation-duration:5s; 605 | animation-direction: reverse; 606 | opacity: .6 607 | } 608 | #wave3 { 609 | animation-duration: 7s; 610 | opacity:.3; 611 | } 612 | @keyframes drop { 613 | 0% { 614 | transform: translateY(80%); 615 | opacity:.6; 616 | } 617 | 80% { 618 | transform: translateY(80%); 619 | opacity:.6; 620 | } 621 | 90% { 622 | transform: translateY(10%) ; 623 | opacity:.6; 624 | } 625 | 100% { 626 | transform: translateY(0%) scale(1.5); 627 | stroke-width:0.2; 628 | opacity:0; 629 | } 630 | } 631 | @keyframes wave { 632 | to {transform: translateX(-100%);} 633 | } 634 | @keyframes ball { 635 | to {transform: translateY(20%);} 636 | } 637 | 638 | /* Custom Scrollbar */ 639 | ::-webkit-scrollbar 640 | { 641 | width: 12px; 642 | } 643 | 644 | ::-webkit-scrollbar-thumb 645 | { 646 | background-color: #ffb4bd; 647 | } 648 | ::-webkit-scrollbar-thumb:hover 649 | { 650 | background-color: #ffa1b8; 651 | } 652 | 653 | ::-webkit-scrollbar-button:single-button { 654 | background-color: rgb(255, 253, 253); 655 | display: block; 656 | background-size: 10px; 657 | background-repeat: no-repeat; 658 | } 659 | 660 | /* Up */ 661 | ::-webkit-scrollbar-button:single-button:vertical:decrement { 662 | height: 16px; 663 | width: 16px; 664 | background-position: center 4px; 665 | background-image: url("../assets/uparrow.png"); 666 | } 667 | 668 | /* Down */ 669 | ::-webkit-scrollbar-button:single-button:vertical:increment { 670 | height: 16px; 671 | width: 16px; 672 | background-position: center 2px; 673 | background-image: url("../assets/downarrow.png"); 674 | } 675 | i { 676 | font-size: 1.5rem !important; 677 | } 678 | 679 | .dropdown-menu { 680 | min-width: 8rem !important; 681 | padding: 0px !important; 682 | } 683 | .dropdown-menu li a 684 | { 685 | font-size: 15px !important; 686 | padding: 5px 4px !important; 687 | color:black !important; 688 | } 689 | .dropdown-menu li a:hover 690 | { 691 | background-color: #1d3866; 692 | color:#fff !important; 693 | } 694 | .item { 695 | width: 17vw; 696 | } 697 | 698 | .item img { 699 | margin: 15px; 700 | padding: 8px; 701 | height: 30vh; 702 | } 703 | 704 | .heading-title { 705 | font-size: 5rem; 706 | font-weight: 700; 707 | } 708 | 709 | .dark-mode .heading-title { 710 | color: #fff; 711 | } 712 | 713 | @media screen and (max-width: 992px) { 714 | .heading-title { 715 | font-size: 2.9rem !important; 716 | font-weight: 700; 717 | } 718 | } 719 | .nav-item:hover 720 | { 721 | background-color: #eba7af !important; 722 | color:black !important; 723 | border-radius:30px; 724 | transition:1s; 725 | } -------------------------------------------------------------------------------- /static/css/login.css: -------------------------------------------------------------------------------- 1 | /* header */ 2 | * { 3 | margin: 0; 4 | padding: 0; 5 | } 6 | * { 7 | box-sizing: border-box; 8 | } 9 | 10 | .main { 11 | background:rgb(87, 86, 85); 12 | text-align: center; 13 | color:rgb(155, 213, 252); 14 | font-family: sans-serif; 15 | font-size: 2.5rem; 16 | margin-top: 200px; 17 | padding: 100px 100px 100px 100px; 18 | } 19 | 20 | @import url("https://fonts.googleapis.com/css2?family=Raleway&display=swap"); 21 | body { 22 | background:rgb(199 230 252); 23 | font-family: "Raleway", sans-serif; 24 | width:100%; 25 | } 26 | .circle { 27 | margin: auto; 28 | position: absolute; 29 | top: 0; 30 | left: 70; 31 | bottom: 20; 32 | right: 0; 33 | width: 100px; 34 | height: 100px; 35 | border-radius: 50%; 36 | border: 0.2em solid #adadad; 37 | box-shadow: 5px 5px 10px 5px rgba(0, 0, 0, 0.5); 38 | overflow: hidden; 39 | background: #eeeeee; 40 | } 41 | .push-btn-container { 42 | position: absolute; 43 | width: 89px; 44 | height: 90px; 45 | top: 0.1em; 46 | left: 0.1em; 47 | border-radius: 50%; 48 | border: 0.2em solid #f5f5f5; 49 | box-shadow: inset 0 0 12px #191919; 50 | overflow: hidden; 51 | background: #0c1618; 52 | } 53 | .centering { 54 | position: absolute; 55 | top: 40%; 56 | left: 40%; 57 | transform: translate(-50%, -50%); 58 | } 59 | .push-toggle { 60 | border-radius: 50%; 61 | background: #0c1618; 62 | height: 70px; 63 | width: 70px; 64 | } 65 | .push-toggle:before { 66 | box-shadow: 0 0 8px 4px rgba(0, 230, 255, 0.99); 67 | border-radius: 50%; 68 | background: rgba(0, 230, 255, 0.99); 69 | position: absolute; 70 | margin-left: -1.5em; 71 | margin-top: -1.5em; 72 | opacity: 0.2; 73 | content: ""; 74 | height: 50px; 75 | width: 50px; 76 | left: 50%; 77 | top: 50%; 78 | } 79 | .push-toggle .push-button { 80 | -webkit-filter: blur(1px); 81 | -moz-filter: blur(1px); 82 | filter: blur(1px); 83 | transition: all 300ms cubic-bezier(0.12, 1, 0.15, 1); 84 | box-shadow: 0 7px 6px -2px #236b6c, inset 0 -2px 2px -1px #46c1c3, 85 | 0 -5px 7px -1px #236b6c, inset 0 3px 2px -1px #46c1c3, 86 | inset 0 0 5px 1px #287a7b, inset 0 5px 8px 0 #236b6c; 87 | border-radius: 50px; 88 | position: absolute; 89 | background: #194c4d; 90 | margin-left: -1.4em; 91 | margin-top: -1.4em; 92 | display: block; 93 | height: 35px; 94 | width: 35px; 95 | left: 55%; 96 | top: 55%; 97 | } 98 | .push-toggle .push-btn-label { 99 | transition: color 300ms ease-out; 100 | top: 4em; 101 | left: 4em; 102 | text-align: center; 103 | position: absolute; 104 | font-size: 0.35em; 105 | display: block; 106 | height: 25%; 107 | width: 45%; 108 | color: #191919; 109 | } 110 | .push-toggle input { 111 | opacity: 0; 112 | position: absolute; 113 | cursor: pointer; 114 | z-index: 10; 115 | height: 90%; 116 | width: 90%; 117 | right: 0.7em; 118 | } 119 | .push-toggle input:active ~ .push-button { 120 | box-shadow: 0 7px 15px -2px rgba(0, 0, 0, 0.2), 121 | inset 0 -4px 15px 1px rgba(255, 255, 255, 0.5), 122 | 0 -5px 8px -1px rgba(255, 255, 255, 0.3), 123 | inset 0 4px 8px 0 rgba(0, 0, 0, 0.2), 124 | inset 0 0 5px 1px rgba(255, 255, 255, 0.3); 125 | } 126 | .push-toggle input:active ~ .push-btn-label { 127 | font-size: 2em; 128 | color: rgba(0, 230, 255, 0.99); 129 | } 130 | .push-toggle input:checked ~ .push-button { 131 | box-shadow: 0 7px 8px -2px rgba(0, 0, 0, 0.2), 132 | inset 0 -4px 8px -1px rgba(255, 255, 255, 0.4), 133 | 0 -5px 6px -1px rgba(255, 255, 255, 0.3), 134 | inset 0 4px 10px 0 rgba(0, 0, 0, 0.1), 135 | inset 0 0 3px 1px rgba(255, 255, 255, 0.3); 136 | } 137 | .dark-mode .push-toggle .push-btn-label { 138 | top:4em; 139 | color: #c3eb78 !important; 140 | } 141 | .dark-mode { 142 | background:#0c1618; 143 | } 144 | .dark-mode .username{ 145 | box-shadow: inset 2px 2px 5px #0d0d0e, 146 | inset -5px -5px 10px #0c0c0c; 147 | } 148 | /* for White color of text in dark mode */ 149 | .dark-mode .user-input , .dark-mode .pass-input 150 | { 151 | color: #fff; 152 | } 153 | .dark-mode .password { 154 | box-shadow: inset 2px 2px 5px #0d0d0e, 155 | inset -5px -5px 10px #0c0c0c; 156 | } 157 | .dark-mode .email { 158 | box-shadow: inset 2px 2px 5px #0d0d0e, 159 | inset -5px -5px 10px #0c0c0c; 160 | } 161 | .dark-mode .box{ 162 | background: #0b2d34; 163 | box-shadow: 0px 0px 18px 14px rgba(255, 255, 255, 0.25); 164 | } 165 | .dark-mode .toggle-btn 166 | { 167 | box-shadow: 0px 0px 8px 4px rgba(255, 255, 255, 0.3); 168 | } 169 | .dark-mode .toggle-btn::before 170 | { 171 | box-shadow: 0px 0px 8px 4px rgba(255, 255, 255, 0.3); 172 | } 173 | .dark-mode .toggle-btn::after 174 | { 175 | box-shadow: 13px 13px 20px #232324, 176 | -13px -13px 20px #0c0c0c; 177 | } 178 | .dark-mode .signup-btn 179 | { 180 | box-shadow: 0px 0px 8px 4px rgba(255, 255, 255, 0.3); 181 | background:rgb(185, 107, 185); 182 | } 183 | .dark-mode .link a { 184 | text-decoration: none; 185 | color:rgb(128, 122, 122); 186 | font-size: 15px; 187 | } 188 | .dark-mode footer{ 189 | color: #ffffff; 190 | } 191 | 192 | .light-mode { 193 | margin: top; 194 | right: 8783rem; 195 | color: #0c1618; 196 | top: -8em; 197 | left: 0.5em; 198 | } 199 | 200 | /* Login form */ 201 | 202 | .box{ 203 | width: 350px; 204 | height: 500px; 205 | background:rgb(199 230 252); 206 | padding: 60px 35px 35px 35px; 207 | border-radius: 40px; 208 | box-shadow: 13px 13px 20px #70a19f, 209 | -13px -13px 20px #e4ffff; 210 | position: relative; 211 | overflow: hidden; 212 | } 213 | .signup{ 214 | position: absolute; 215 | bottom: 0; 216 | left: 0; 217 | width: 100%; 218 | height: 400px; 219 | transition: 0.5s; 220 | border-radius: 40px 221 | } 222 | .login{ 223 | position: absolute; 224 | bottom: 0; 225 | left: 101%; 226 | width: 100%; 227 | height: 400px; 228 | border-radius: 40px; 229 | transition: 0.5s; 230 | } 231 | .input-group{ 232 | width: 95%; 233 | padding: 15px 5px 5px 5px; 234 | 235 | } 236 | .input-group input { 237 | border: none; 238 | outline:none; 239 | background: none; 240 | font-size: 21px; 241 | text-align: justify; 242 | /* because of this it is of black color in both modes */ 243 | /* color: black; */ 244 | 245 | 246 | padding:15px 10px 15px 5px; 247 | } 248 | /* CSS for icons */ 249 | .material-icons{ 250 | height: 25px; 251 | margin:0 10px -3px 20px; 252 | padding:10px 0px 15px 5px; 253 | color: gray; 254 | } 255 | .username, .password, .email { 256 | margin-bottom: 20px; 257 | border-radius: 25px; 258 | box-shadow: inset 2px 2px 5px #9fd6d2, 259 | inset -5px -5px 10px #96dff5; 260 | } 261 | /* CSS for signup button starts from here */ 262 | .signup-btn { 263 | margin: 10px 0px 0px 80px; 264 | outline: none; 265 | border:none; 266 | cursor: pointer; 267 | width: 50%; 268 | height: 50px; 269 | border-radius: 30px; 270 | font-size: 20px; 271 | 272 | font-weight: 700; 273 | font-family: 'Lato', sans-serif; 274 | color:#fff; 275 | text-align: center; 276 | background: rgb(185, 107, 185); 277 | box-shadow: 3px 3px 8px #000, 278 | -3px -3px 8px white; 279 | transition: 0.5s; 280 | } 281 | .signup-btn:hover { 282 | 283 | background:#c1bbdd; 284 | box-shadow: inset 3px 3px 8px #9fd6d2, 285 | inset -3px -3px 8px #dcddd9; 286 | color: black; 287 | } 288 | .signup-btn:active { 289 | background: #c1bbdd; 290 | box-shadow: inset 3px 3px 8px #9fd6d2 , 291 | inset -3px -3px 8px #dcddd9 ; 292 | } 293 | /* CSS For Login page starts*/ 294 | .input-signin { 295 | width: 95%; 296 | padding: 75px 5px 5px 5px; 297 | } 298 | .input-signin input { 299 | border: none; 300 | outline:none; 301 | background: none; 302 | font-size: 22px; 303 | color: black; 304 | padding:20px 10px 20px 5px; 305 | } 306 | .input-signin svg { 307 | height: 20px; 308 | margin:0 10px -3px 20px; 309 | } 310 | .link { 311 | padding-top: 20px; 312 | text-align: center; 313 | } 314 | .link a { 315 | text-decoration: none; 316 | color:black; 317 | font-size: 15px; 318 | } 319 | /* CSS For Toggle button starts*/ 320 | .toggle-btn{ 321 | -webkit-appearance: none; 322 | width: 150px; 323 | height: 40px; 324 | border: 1px ; 325 | position: absolute; 326 | top: 40px; 327 | left: calc(50% - 75px); 328 | border-radius: 100px; 329 | box-shadow: inset 3px 3px 8px #9fd6d2, 330 | inset -3px -3px 8px #87ece7 ; 331 | 332 | } 333 | .toggle-btn:before{ 334 | content: 'Sign Up'; 335 | font-weight: bolder; 336 | color: white; 337 | position: absolute; 338 | top: 0; 339 | left:0; 340 | width: 55%; 341 | height: 100%; 342 | background-color:#966fd6; 343 | border-radius: 100px; 344 | display: grid; 345 | place-items: center; 346 | transition: 0.5s; 347 | box-shadow: 3px 3px 8px #9fd6d2, 348 | -3px -3px 8px #8df8fc ; 349 | } 350 | .toggle-btn:checked:before{ 351 | content: 'Login'; 352 | font-weight: bolder; 353 | color: white; 354 | position: absolute; 355 | left:50%; 356 | } 357 | .toggle-btn:checked + .signup{ 358 | left: -101%; 359 | } 360 | .toggle-btn:checked + .signup + .login{ 361 | left: 0%; 362 | } 363 | 364 | 365 | /* css code for login/signup ends here */ 366 | 367 | /* media queries for login/signup */ 368 | 369 | @media only screen and (max-width:990px) 370 | { 371 | .box{ 372 | width: 350px; 373 | height: 500px; 374 | margin-top:5rem; 375 | background:rgb(199 230 252); 376 | padding: 60px 35px 35px 35px; 377 | border-radius: 40px; 378 | box-shadow: 13px 13px 20px #70a19f, 379 | -13px -13px 20px #e4ffff; 380 | position: relative; 381 | overflow: hidden; 382 | } 383 | 384 | /* css for reducing the size of light button */ 385 | /* Will work on it */ 386 | } 387 | 388 | /* ********************* FOOTER **************** */ 389 | 390 | .footer-sec{ 391 | position: absolute; 392 | left: 40%; 393 | right: 50%; 394 | bottom: 0; 395 | text-align: center; 396 | overflow: hidden; 397 | width:60%; 398 | margin-right:30%; 399 | } 400 | .love { 401 | display: inline-block; 402 | position: relative; 403 | font-family: "Raleway", sans-serif; 404 | top: .2em; 405 | font-size: 1.5em; 406 | color: #e74c3c; 407 | -webkit-transform: scale(.9); 408 | -moz-transform: scale(.9); 409 | transform: scale(.9); 410 | -webkit-animation: love .5s infinite linear alternate-reverse; 411 | -moz-animation: love .5s infinite linear alternate-reverse; 412 | animation: love .5s infinite linear alternate-reverse; 413 | } 414 | .footer-content{ 415 | font-size: 2em; 416 | font-family: Montserrat; 417 | } 418 | @-webkit-keyframes love { 419 | to {-webkit-transform: scale(1.2);} 420 | } 421 | @-moz-keyframes love { 422 | to {-moz-transform: scale(1.2);} 423 | } 424 | @keyframes love { 425 | to {transform: scale(1.2);} 426 | } 427 | 428 | 429 | @keyframes fave-heart { 430 | 0% { 431 | background-position: 0 0; 432 | } 433 | 100% { 434 | background-position: -2800px 0; 435 | } 436 | } 437 | 438 | /* ********************* Forgot Passowrd page ********************* */ 439 | 440 | .container{ 441 | text-align: center; 442 | padding: 20px; 443 | font-family: Lato, sans-serif; 444 | } 445 | 446 | .container h1{ 447 | font-size: 2.4em; 448 | } 449 | 450 | .container p{ 451 | margin-bottom: 1.2em; 452 | font-size: 1.2em; 453 | } 454 | 455 | input[name=uname] { 456 | text-align: justify; 457 | border: none; 458 | outline: none; 459 | background: none; 460 | font-size: 22px; 461 | color: black; 462 | padding: 18px 142px 18px 2px; 463 | 464 | } 465 | 466 | /* Set a style for all buttons */ 467 | button { 468 | margin-top:7px; 469 | outline: none; 470 | border: none; 471 | cursor: pointer; 472 | width: 50%; 473 | height: 50px; 474 | border-radius: 30px; 475 | font-size: 20px; 476 | font-weight: 700; 477 | font-family: Lato, sans-serif; 478 | color: rgb(255, 255, 255); 479 | text-align: center; 480 | background: rgb(185, 107, 185); 481 | box-shadow: rgb(0 0 0) 3px 3px 8px, white -3px -3px 8px; 482 | transition: all 0.5s ease 0s; 483 | } 484 | 485 | button:hover { 486 | background:#c1bbdd; 487 | box-shadow: inset 3px 3px 8px #9fd6d2, 488 | inset -3px -3px 8px #dcddd9; 489 | color: black; 490 | } 491 | 492 | /* Extra styles for the cancel button */ 493 | .cancelbtn { 494 | width: auto; 495 | padding: 10px 18px; 496 | background-color: #f44336; 497 | margin-top: 0px; 498 | } 499 | 500 | /* The Modal (background) */ 501 | .modal { 502 | display: none; /* Hidden by default */ 503 | position: fixed; /* Stay in place */ 504 | z-index: 1; /* Sit on top */ 505 | left: 0; 506 | top: 0; 507 | width: 100%; 508 | height: 100%; 509 | overflow: hidden; 510 | background-color: rgb(0,0,0); /* Fallback color */ 511 | background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ 512 | padding-top: 60px; 513 | } 514 | 515 | /* Modal Content/Box */ 516 | .modal-content { 517 | background-color:rgb(199, 230, 252); 518 | border-radius: 2em; 519 | margin: auto auto; 520 | border: 1px solid #888; 521 | max-width: 30em; 522 | border-radius: 40px; 523 | box-shadow: rgb(112 161 159) 13px 13px 20px, rgb(228 255 255) -13px -13px 20px; 524 | } 525 | 526 | /* Add Zoom Animation */ 527 | .animate { 528 | -webkit-animation: animatezoom 0.6s; 529 | animation: animatezoom 0.6s 530 | } 531 | 532 | @-webkit-keyframes animatezoom { 533 | from {-webkit-transform: scale(0)} 534 | to {-webkit-transform: scale(1)} 535 | } 536 | 537 | @keyframes animatezoom { 538 | from {transform: scale(0)} 539 | to {transform: scale(1)} 540 | } 541 | 542 | 543 | /* ************* Media Query for footer *********** */ 544 | @media (min-width: 100px) and (max-width: 375px) { 545 | .footer-sec{ 546 | margin-left: -707px; 547 | margin-top: 49px; 548 | 549 | 550 | } 551 | } 552 | @media (min-width: 425px) and (max-width: 760px) { 553 | .footer-sec{ 554 | margin-left: -548px; 555 | margin-top: 49px; 556 | 557 | 558 | } 559 | } 560 | @media (min-width: 375px) and (max-width: 425px) { 561 | .footer-sec{ 562 | margin-left: -585px; 563 | margin-top: 49px; 564 | 565 | 566 | } 567 | } 568 | @media (min-width: 375px) and (max-width: 425px) { 569 | .footer-sec{ 570 | margin-left: -585px; 571 | margin-top: 49px; 572 | 573 | 574 | } 575 | } 576 | @media (min-width: 768px) and (max-width: 1023px) { 577 | .footer-sec{ 578 | margin-left: -382px; 579 | margin-top: 49px; 580 | 581 | 582 | } 583 | } 584 | @media (min-width: 1023px) and (max-width: 1440px) { 585 | .footer-sec{ 586 | margin-left: -259px; 587 | margin-top: 49px; 588 | 589 | 590 | } 591 | } 592 | -------------------------------------------------------------------------------- /static/css/preloader.css: -------------------------------------------------------------------------------- 1 | /* preloader */ 2 | .folding-cube ul{ 3 | position: fixed; 4 | top: 48vh; 5 | left: 45vw; 6 | margin: 0; 7 | padding: 0; 8 | width: 80px; 9 | height: 80px; 10 | transform: rotate(45deg); 11 | } 12 | .folding-cube ul li{ 13 | list-style: none; 14 | position: relative; 15 | width: 40px; 16 | height: 40px; 17 | float: left; 18 | } 19 | .folding-cube ul li:before{ 20 | content: ''; 21 | position: absolute; 22 | top: 0; 23 | left: 0; 24 | width: 100%; 25 | height: 100%; 26 | transform-origin:100% 100%; 27 | animation: animate 3.3s linear infinite; 28 | } 29 | .folding-cube ul li:nth-child(1){ 30 | transform: rotate(0deg); 31 | } 32 | .folding-cube ul li:nth-child(1):before{ 33 | animation-delay: 0s; 34 | /* background: #f57b70; */ 35 | background: #FFA3B8; 36 | } 37 | .folding-cube ul li:nth-child(2){ 38 | transform: rotate(90deg); 39 | } 40 | .folding-cube ul li:nth-child(2):before{ 41 | animation-delay: 0.4s; 42 | background:#FFA3B8; 43 | } 44 | .folding-cube ul li:nth-child(3){ 45 | transform: rotate(270deg); 46 | } 47 | .folding-cube ul li:nth-child(3):before{ 48 | animation-delay: 1.2s; 49 | background: #FFA3B8; 50 | } 51 | .folding-cube ul li:nth-child(4){ 52 | transform: rotate(180deg); 53 | } 54 | .folding-cube ul li:nth-child(4):before{ 55 | animation-delay: 0.8s; 56 | background: #FFA3B8; 57 | } 58 | @keyframes animate{ 59 | 0%{ 60 | transform: perspective(200px) rotateX(0deg); 61 | opacity: 0; 62 | } 63 | 10%{ 64 | transform: perspective(200px) rotateX(-180deg); 65 | opacity: 0; 66 | } 67 | 25%{ 68 | transform: perspective(200px) rotateX(0deg); 69 | opacity: 1; 70 | } 71 | 75%{ 72 | transform: perspective(200px) rotateX(0deg); 73 | opacity: 1; 74 | } 75 | 90%{ 76 | transform: perspective(200px) rotateY(180deg); 77 | opacity: 0; 78 | } 79 | 100%{ 80 | transform: perspective(200px) rotateY(0deg); 81 | opacity: 0; 82 | } 83 | } 84 | .folding-cube{ 85 | width: 100%; 86 | height: 550vh; 87 | overflow: hidden; 88 | background-color:#FFECCB; 89 | position: absolute; 90 | top: 0; 91 | left: 0; 92 | z-index: 9999; 93 | display: flex; 94 | align-items: center; 95 | justify-content: center; 96 | } 97 | .cVijEW 98 | { 99 | z-index: 10 !important; 100 | } -------------------------------------------------------------------------------- /static/css/theme.css: -------------------------------------------------------------------------------- 1 | .settings{ 2 | position: absolute; 3 | right: 5px; 4 | top:5px; 5 | color: white; 6 | cursor: pointer; 7 | } 8 | 9 | .StyleSwitcher{ 10 | position: absolute; 11 | top:0px; 12 | right: -202px; 13 | width: 200px; 14 | color: #000; 15 | font-weight: bolder; 16 | background-color: white; 17 | box-shadow: 5px 6px 8px rgb(61, 58, 58); 18 | text-align: start; 19 | padding: 10px; 20 | transform: scale(0); 21 | } 22 | .unhideStylenav{ 23 | display: flex; 24 | flex-direction: column; 25 | transform: scale(1); 26 | transition: transform.4s ease; 27 | } 28 | 29 | #circlestyle1{ 30 | background-color: #FFD700; 31 | width: 25px; 32 | height: 25px; 33 | border-radius: 50%; 34 | margin: 3px; 35 | cursor: pointer; 36 | } 37 | #circlestyle2 { 38 | background-color:#4feff7; 39 | width: 25px; 40 | height: 25px; 41 | border-radius: 50%; 42 | margin: 3px; 43 | cursor: pointer; 44 | } 45 | 46 | #circlestyle3 { 47 | background-color: #98ff98; 48 | width: 25px; 49 | height: 25px; 50 | border-radius: 50%; 51 | margin: 3px; 52 | cursor: pointer; 53 | } 54 | #circlestyle4 { 55 | background-color: #FFFDD0; 56 | width: 25px; 57 | height: 25px; 58 | border-radius: 50%; 59 | margin: 3px; 60 | cursor: pointer; 61 | } 62 | 63 | #circlestyle5 { 64 | background-color: rgb(5, 255, 5); 65 | width: 25px; 66 | height: 25px; 67 | border-radius: 50%; 68 | margin: 3px; 69 | cursor: pointer; 70 | } 71 | 72 | -------------------------------------------------------------------------------- /static/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/favicon-16x16.png -------------------------------------------------------------------------------- /static/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/favicon-32x32.png -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/favicon.ico -------------------------------------------------------------------------------- /static/favicon_pixelVibe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/favicon_pixelVibe.png -------------------------------------------------------------------------------- /static/fonts/Wagnasty-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/fonts/Wagnasty-webfont.woff -------------------------------------------------------------------------------- /static/fonts/comic_zine_ot-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/fonts/comic_zine_ot-webfont.woff -------------------------------------------------------------------------------- /static/fonts/slkscr-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/fonts/slkscr-webfont.woff -------------------------------------------------------------------------------- /static/gifs/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/gifs/1.gif -------------------------------------------------------------------------------- /static/gifs/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/gifs/2.gif -------------------------------------------------------------------------------- /static/images/Affluent-Women-Mailing-Lists.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/images/Affluent-Women-Mailing-Lists.jpg -------------------------------------------------------------------------------- /static/images/Sam-Revilter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/images/Sam-Revilter.jpg -------------------------------------------------------------------------------- /static/images/arts/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/images/arts/1.jpg -------------------------------------------------------------------------------- /static/images/arts/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/images/arts/1.png -------------------------------------------------------------------------------- /static/images/arts/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/images/arts/2.jpg -------------------------------------------------------------------------------- /static/images/arts/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/images/arts/2.png -------------------------------------------------------------------------------- /static/images/bg4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/images/bg4.png -------------------------------------------------------------------------------- /static/images/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/images/image.png -------------------------------------------------------------------------------- /static/images/person-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/images/person-2.jpg -------------------------------------------------------------------------------- /static/images/team4-large.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/images/team4-large.jpg -------------------------------------------------------------------------------- /static/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankitapuri/pixelvibe/9f1ea1068a74b05e12d732d4d7d078d7c1058610/static/mstile-150x150.png -------------------------------------------------------------------------------- /static/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.11, written by Peter Selinger 2001-2013 9 | 10 | 12 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /template/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | PageNotFound 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 122 | 123 | 124 | 125 | 126 |

127 | 128 | 129 | 130 |

Oops!

131 |

Page not found.

132 |

404

133 | Go back home 134 |
135 | 136 | 137 | -------------------------------------------------------------------------------- /template/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% load static %} 4 | 5 | 6 | 7 | {% block title %}{% endblock title %} 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 80 | 81 | 82 | 98 | 99 | 100 | {% for message in messages %} 101 | 105 | {% endfor %} 106 | 107 | {% block body %}{% endblock body %} 108 | 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /template/canvas.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% load static %} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | Canvas 31 | 32 | 72 | 73 | 74 | 75 | 76 |
77 | 83 |
84 | 85 | 140 | 141 |
142 |
143 | 144 |
Body Skin
145 |
146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 |
154 |
155 | 156 | 157 | 158 | 159 |
160 |
161 |
162 |
163 |
164 |
165 | 166 |
167 |
168 |

PixelVibe

169 |
170 |
171 |
172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 |
181 |
182 | 183 | 184 | 206 | 207 | 208 | 209 |
210 |
Pick a colour!
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
Choose any color!
224 | 225 |
226 | 227 |
228 |
229 | 230 | 231 | 429 | 430 | 431 | 432 | 433 | 434 | 453 | 480 | 481 | 482 | -------------------------------------------------------------------------------- /template/changePassword.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block title %}Change Password{% endblock title %} 3 | {% block body %} 4 |
5 |
Change Password
6 |
7 | {% csrf_token %} 8 |
9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 | 17 | 18 | 19 |
20 |
21 |
22 |

A lowercase letter

23 |

A capital (uppercase) letter

24 |

A number

25 |

Minimum 8 characters

26 |
27 |
28 |
29 | 30 | 31 | 32 | 33 |
34 |
35 |

PasswordMatched

36 |
37 | 38 | 39 |
40 | 42 |
43 | 44 | 78 | 180 | {% endblock body %} -------------------------------------------------------------------------------- /template/contact.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% load static %} 5 | 6 | 7 | Contact Us 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 177 | 178 | 179 | 180 | 181 | 241 | 242 | 243 | {% for message in messages %} 244 | 248 | {% endfor %} 249 |
250 |
251 |
252 |
253 |
254 |

Let's Chat

255 |

Whether you have a question , or simply want to connect.

256 |
257 |

Feel free to send me a message in the contact form

258 | 259 |
260 |
261 |
262 |
263 |
264 | {% csrf_token %} 265 |

Contact us

266 | 271 | 272 | 273 | 274 | 275 | 276 | 278 |
279 |
280 |
281 |
282 |
283 |
284 | 285 | 296 | 297 | 298 | 299 | 300 | 301 | 320 | 321 | 322 | -------------------------------------------------------------------------------- /template/forgot.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block title %}Forgot Password{% endblock title %} 3 | {% block body %} 4 |
5 |
Enter Email
6 |
7 | {% csrf_token %} 8 |
9 | 10 | 11 | 12 |
13 | 14 |
15 | 17 |
18 | {% endblock body %} -------------------------------------------------------------------------------- /template/homepage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% load static %} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | Home 30 | 31 | 32 | 35 | 36 | 37 | 38 | 40 | 43 | 44 | 45 | 46 | 47 |
48 | 49 | 50 | 51 | 52 |
53 | 59 |
60 | 61 | 62 | 126 | 127 | {% for message in messages %} 128 | 132 | {% endfor %} 133 | 134 | 135 |
136 | 137 |
138 | 139 | 140 |
141 |

Let Us Paint

142 |

You are never too old to paint. Let your dreams get colors with our brush. Painting sharpens the 143 | mind through conceptual visualization and implementation, plus, boosts memory skills. People using creative 144 | outlets such as writing, painting and drawing have less chance of developing memory loss illnesses when they get 145 | older. 146 |

147 |
148 | 149 | 150 | 151 | 152 |
153 |
154 |
155 |

Meet Our Team

156 |
157 | 158 |
159 |
160 |
161 |
162 | 163 | 169 |
170 |
171 |

Williamson

172 | web developer 173 | Email: mail@example.com 174 |
175 |
176 | Williamson 177 | web developer 178 |
179 |
180 |
181 | 182 |
183 |
184 |
185 | 186 | 192 |
193 |
194 |

kristina

195 | Web Designer 196 | Email: mail@example.com 197 |
198 |
199 | kristina 200 | Web Designer 201 |
202 |
203 |
204 | 205 |
206 |
207 |
208 | 209 | 215 |
216 |
217 |

Steve Thomas

218 | web developer 219 | Email: mail@example.com 220 |
221 |
222 | Steve Thomas 223 | web developer 224 |
225 |
226 |
227 | 228 |
229 |
230 |
231 | 232 | 238 |
239 |
240 |

Miranda joy

241 | Web Designer 242 | Email: mail@example.com 243 |
244 |
245 | Miranda joy 246 | Web Designer 247 |
248 |
249 |
250 |
251 |
252 |
253 | 254 | 255 | 256 | 257 |
258 |

Our Art Gallery

259 | 281 |
282 | 283 | 284 | 285 | 286 |
287 |
288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 301 | 302 | 303 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 321 | 322 | 323 | 324 | 325 |
326 | 327 |
328 | 329 | 330 | 331 | 410 | 413 | 414 | 415 | 416 | 419 | 420 | 422 | 423 | 438 | 439 | 440 | 441 | 460 | 461 | 462 | 463 | 464 | 465 | -------------------------------------------------------------------------------- /template/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Login/Signup Form 5 | 6 | 7 | 8 | 9 | 10 | 30 | 31 | 32 | 33 | 34 |
35 |
36 | 37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 |
45 |
46 |
47 | 48 | 49 | 50 |
51 | 52 | 53 | 54 | 84 | 85 | 86 | 87 | 88 | 109 | 110 |
111 | 112 | 113 | 114 | 115 | 133 | 134 |
135 |
136 |
137 |
138 | 139 | 140 | 141 | 146 | 147 |
148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | -------------------------------------------------------------------------------- /template/login_new.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block title %}Login Form{% endblock title %} 3 | {% load socialaccount %} 4 | {% providers_media_js %} 5 | {% block body %} 6 |
7 |
Sign in
8 |
9 | {% csrf_token %} 10 |
11 | 12 | 13 | 14 |
15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 26 |
27 | 28 | 29 | 30 |
31 | 43 | {% endblock body %} -------------------------------------------------------------------------------- /template/otp.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block title %}Otp varification{% endblock title %} 3 | {% block body %} 4 |
5 |
Enter Otp
6 |
7 | {% csrf_token %} 8 |
9 | 10 | 11 | 12 |
13 | 14 |
15 | 17 |
18 | {% endblock body %} -------------------------------------------------------------------------------- /template/passwordReset.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block title %}Password reset{% endblock title %} 3 | {% block body %} 4 |
5 |
Reset Password
6 |
7 | {% csrf_token %} 8 |
9 | 10 | 11 | 12 | 13 |
14 |
15 |
16 |

A lowercase letter

17 |

A capital (uppercase) letter

18 |

A number

19 |

Minimum 8 characters

20 |
21 |
22 |
23 | 24 | 25 | 26 | 27 |
28 |
29 |

PasswordMatched

30 |
31 | 32 | 33 |
34 | 36 |
37 | 39 | 141 | {% endblock body %} -------------------------------------------------------------------------------- /template/signup.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% block title %}Sign Up Form{% endblock title %} 3 | {% block body %} 4 | 7 |
8 |
Sign Up
9 |
10 | {% csrf_token %} 11 |
12 | 13 | 14 | 15 |
16 |
17 | 18 | 19 | 20 |
21 |
22 | 23 | 24 | 25 | 26 |
27 |
28 |
29 |

A lowercase letter

30 |

A capital (uppercase) letter

31 |

A number

32 |

Minimum 8 characters

33 |
34 |
35 |
36 | 37 | 38 | 39 | 40 |
41 |
42 |

PasswordMatched

43 |
44 | 45 | 48 |
49 | 51 |
52 | 54 | 156 | {% endblock body %} -------------------------------------------------------------------------------- /template/user_input.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% load static %} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | user_input 29 | 225 | 226 | 227 | 228 | 229 | 230 |
231 |
232 |
233 | 234 |
235 |
236 |

PixelVibe

237 |
238 |
239 |
240 | 241 | {% for message in messages %} 242 | 246 | {% endfor %} 247 | 248 | 249 |
250 |
251 | {% csrf_token %} 252 |
253 |
254 |
Style Switcher
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
Body Skin
263 |
264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 |
272 |
273 |
274 |

Choose Grid Size

275 | 276 | 277 | 278 | 279 |
280 | 281 | 283 |
284 | Psst...recommended 16x16 and above 285 |
286 |
287 | 288 | 289 | 290 | 291 | 292 | 367 | 368 | 369 | --------------------------------------------------------------------------------