├── .gitignore ├── CHANGELOG.md ├── Dockerfile ├── LICENSE.md ├── Procfile ├── README.md ├── app ├── __init__.py ├── static │ └── assets │ │ ├── css │ │ ├── bootstrap.min.css │ │ ├── bootstrap.min.css.map │ │ ├── paper-dashboard.css │ │ ├── paper-dashboard.css.map │ │ └── paper-dashboard.min.css │ │ ├── demo │ │ ├── demo.css │ │ └── demo.js │ │ ├── fonts │ │ ├── nucleo-icons.eot │ │ ├── nucleo-icons.ttf │ │ ├── nucleo-icons.woff │ │ └── nucleo-icons.woff2 │ │ ├── img │ │ ├── apple-icon.png │ │ ├── bg5.jpg │ │ ├── damir-bosnjak.jpg │ │ ├── default-avatar.png │ │ ├── faces │ │ │ ├── ayo-ogunseinde-1.jpg │ │ │ ├── ayo-ogunseinde-2.jpg │ │ │ ├── clem-onojeghuo-1.jpg │ │ │ ├── clem-onojeghuo-2.jpg │ │ │ ├── clem-onojeghuo-3.jpg │ │ │ ├── clem-onojeghuo-4.jpg │ │ │ ├── erik-lucatero-1.jpg │ │ │ ├── erik-lucatero-2.jpg │ │ │ ├── joe-gardner-1.jpg │ │ │ ├── joe-gardner-2.jpg │ │ │ ├── kaci-baum-1.jpg │ │ │ └── kaci-baum-2.jpg │ │ ├── favicon.png │ │ ├── header.jpg │ │ ├── jan-sendereks.jpg │ │ ├── logo-small.png │ │ └── mike.jpg │ │ ├── js │ │ ├── core │ │ │ ├── bootstrap.min.js │ │ │ ├── jquery.min.js │ │ │ └── popper.min.js │ │ ├── paper-dashboard.js │ │ ├── paper-dashboard.js.map │ │ ├── paper-dashboard.min.js │ │ └── plugins │ │ │ ├── bootstrap-notify.js │ │ │ ├── chartjs.min.js │ │ │ └── perfect-scrollbar.min.js │ │ └── scss │ │ ├── paper-dashboard.scss │ │ └── paper-dashboard │ │ ├── _alerts.scss │ │ ├── _animated-buttons.scss │ │ ├── _buttons.scss │ │ ├── _cards.scss │ │ ├── _checkboxes-radio.scss │ │ ├── _dropdown.scss │ │ ├── _fixed-plugin.scss │ │ ├── _footers.scss │ │ ├── _images.scss │ │ ├── _inputs.scss │ │ ├── _misc.scss │ │ ├── _mixins.scss │ │ ├── _navbar.scss │ │ ├── _nucleo-outline.scss │ │ ├── _page-header.scss │ │ ├── _responsive.scss │ │ ├── _sidebar-and-main-panel.scss │ │ ├── _tables.scss │ │ ├── _typography.scss │ │ ├── _variables.scss │ │ ├── cards │ │ ├── _card-chart.scss │ │ ├── _card-map.scss │ │ ├── _card-plain.scss │ │ ├── _card-stats.scss │ │ └── _card-user.scss │ │ ├── mixins │ │ ├── _buttons.scss │ │ ├── _cards.scss │ │ ├── _dropdown.scss │ │ ├── _inputs.scss │ │ ├── _page-header.scss │ │ ├── _transparency.scss │ │ └── _vendor-prefixes.scss │ │ └── plugins │ │ ├── _plugin-animate-bootstrap-notify.scss │ │ └── _plugin-perfect-scrollbar.scss ├── templates │ ├── icons.html │ ├── includes │ │ ├── footer.html │ │ ├── navigation.html │ │ ├── scripts.html │ │ └── sidebar.html │ ├── index.html │ ├── layouts │ │ ├── base-fullscreen.html │ │ └── base.html │ ├── login.html │ ├── map.html │ ├── notifications.html │ ├── page-403.html │ ├── page-404.html │ ├── page-500.html │ ├── register.html │ ├── tables.html │ ├── typography.html │ └── user.html └── views.py ├── docker-compose.yml ├── gunicorn-cfg.py ├── media ├── jinja-template-paper-dashboard-intro.gif ├── jinja-template-paper-dashboard-screen-alerts.png ├── jinja-template-paper-dashboard-screen-icons.png ├── jinja-template-paper-dashboard-screen-login.png ├── jinja-template-paper-dashboard-screen-maps.png ├── jinja-template-paper-dashboard-screen-register.png ├── jinja-template-paper-dashboard-screen-user.png └── jinja-template-paper-dashboard-screen.png ├── nginx └── appseed-app.conf ├── package.json ├── requirements.txt ├── run.py └── runtime.txt /.gitignore: -------------------------------------------------------------------------------- 1 | flask/ 2 | *.pyc 3 | dev 4 | node_modules 5 | app/database.db 6 | app/build 7 | yarn.lock 8 | yarn-error.log 9 | *.psd 10 | env/ 11 | env__/ 12 | .vscode/symbols.json 13 | app/db.sqlite3 14 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ## [1.0.1] 2021-05-19 4 | ### Bump Codebase 5 | 6 | - Bump Codebase: [Jinja Template](https://github.com/app-generator/boilerplate-code-jinja) v1.0.5 7 | - UI: Paper Dashboard - v2.0.1 8 | 9 | ## [1.0.0] 2020-08-11 10 | ### Initial Release 11 | 12 | - Update Licensing information 13 | - Add CHANGELOG.md to track all changes 14 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.6 2 | 3 | ENV FLASK_APP run.py 4 | 5 | COPY run.py gunicorn-cfg.py requirements.txt ./ 6 | COPY app app 7 | 8 | RUN pip install -r requirements.txt 9 | 10 | EXPOSE 5005 11 | CMD ["gunicorn", "--config", "gunicorn-cfg.py", "run:app"] 12 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | Copyright (c) 2019 - present [AppSeed](http://appseed.us/) 4 | 5 |
6 | 7 | ## Licensing Information 8 | 9 |
10 | 11 | | Item | - | 12 | | ---------------------------------- | --- | 13 | | License Type | MIT | 14 | | Use for print | **YES** | 15 | | Create single personal website/app | **YES** | 16 | | Create single website/app for client | **YES** | 17 | | Create multiple website/apps for clients | **YES** | 18 | | Create multiple SaaS applications | **YES** | 19 | | End-product paying users | **YES** | 20 | | Product sale | **YES** | 21 | | Remove footer credits | **YES** | 22 | | --- | --- | 23 | | Remove copyright mentions from source code | NO | 24 | | Create HTML/CSS template for sale | NO | 25 | | Create Theme/Template for CMS for sale | NO | 26 | | Separate sale of our UI Elements | NO | 27 | 28 |
29 | 30 | --- 31 | For more information regarding licensing, please contact the AppSeed Service < *support@appseed.us* > 32 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn run:app --log-file=- 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [Jinja Paper Dashboard](https://docs.appseed.us/products/jinja-templates/paper-dashboard) 2 | 3 | **Jinja Template** project generated by AppSeed on top of a **Paper Dashboard** design (free version). The project is a super simple Flask project WITHOUT database, ORM, or any other hard dependency. The project can be used as a codebase for future project or to migrate the Jinja files and assets to a legacy Python-based project that uses Jinja as template engine (Flask, Bottle, Django). 4 | 5 |
6 | 7 | > Features: 8 | 9 | - UI Kit: **Paper Dashboard** (Free Version) by **Creative-Tim** 10 | - Render Engine: Flask / **Jinja2** 11 | - Deployment scripts: Docker, Gunicorn/Nginx, HEROKU 12 | - Support via **Github** (issues tracker) and [Discord](https://discord.gg/fZC6hup). 13 | 14 |
15 | 16 | > Links 17 | 18 | - [Jinja Paper Dashboard](https://jinja-paper-dashboard.appseed-srv1.com) - LIVE Demo 19 | - [Jinja Paper Dashboard](https://docs.appseed.us/products/jinja-templates/paper-dashboard) - product documentation 20 | 21 |
22 | 23 | ## UI Kit - [Paper Dashboard](https://appseed.us/ui-kit/paper-design) 24 | 25 | *Vendor Notes* - Paper Dashboard2 is a beautiful Bootstrap 4 admin dashboard with a large number of components, designed to look neat and organized. If you are looking for a tool to manage and visualize data about your business, this dashboard is the thing for you. It combines colors that are easy on the eye, spacious cards, beautiful typography, and graphics. Paper Dashboard 2 comes packed with all plugins that you might need inside a project and documentation on how to get started. It is light and easy to use, and also very powerful. 26 | 27 |
28 | 29 | ![Template Jinja2 Theme - Template project provided by AppSeed.](https://raw.githubusercontent.com/app-generator/jinja-template-paper-dashboard/master/media/jinja-template-paper-dashboard-screen.png) 30 | 31 |
32 | 33 | ## Build from sources 34 | 35 | ```bash 36 | $ # Clone the sources 37 | $ git clone https://github.com/app-generator/jinja-paper-dashboard.git 38 | $ cd jinja-paper-dashboard 39 | $ 40 | $ # Virtualenv modules installation (Unix based systems) 41 | $ virtualenv env 42 | $ source env/bin/activate 43 | $ 44 | $ # Virtualenv modules installation (Windows based systems) 45 | $ # virtualenv env 46 | $ # .\env\Scripts\activate 47 | $ 48 | $ # Install requirements 49 | $ pip3 install -r requirements.txt 50 | $ 51 | $ # Set the FLASK_APP environment variable 52 | $ (Unix/Mac) export FLASK_APP=run.py 53 | $ (Windows) set FLASK_APP=run.py 54 | $ (Powershell) $env:FLASK_APP = ".\run.py" 55 | $ 56 | $ # Set up the DEBUG environment 57 | $ # (Unix/Mac) export FLASK_ENV=development 58 | $ # (Windows) set FLASK_ENV=development 59 | $ # (Powershell) $env:FLASK_ENV = "development" 60 | $ 61 | $ # Run the Jinja Template 62 | $ # --host=0.0.0.0 - expose the app on all network interfaces (default 127.0.0.1) 63 | $ # --port=5000 - specify the app port (default 5000) 64 | $ flask run --host=0.0.0.0 --port=5000 65 | $ 66 | $ # Access the UI in browser: http://127.0.0.1:5000/ 67 | ``` 68 | 69 |
70 | 71 | ## Code-base structure 72 | 73 | The project has a simple structure, represented as bellow: 74 | 75 | ```bash 76 | < PROJECT ROOT > 77 | | 78 | |-- app/__init__.py 79 | |-- app/ 80 | | |-- static/ 81 | | | |-- # CSS files, Javascripts files 82 | | | 83 | | |-- templates/ 84 | | | | 85 | | | |-- includes/ # Page chunks, components 86 | | | | | 87 | | | | |-- navigation.html # Top bar 88 | | | | |-- sidebar.html # Left sidebar 89 | | | | |-- scripts.html # JS scripts common to all pages 90 | | | | |-- footer.html # The common footer 91 | | | | 92 | | | |-- layouts/ # App Layouts (the master pages) 93 | | | | | 94 | | | | |-- base.html # Used by common pages like index, UI 95 | | | | |-- base-fullscreen.html # Used by auth pages (login, register) 96 | | | | 97 | | | index.html # The default page 98 | | | login.html # Auth Login Page 99 | | | register.html # Auth Registration Page 100 | | | page-404.html # Error 404 page (page not found) 101 | | | page-500.html # Error 500 page (server error) 102 | | | *.html # All other pages provided by the UI Kit 103 | | 104 | |-- requirements.txt 105 | | 106 | |-- run.py 107 | | 108 | |-- ************************************************************************ 109 | ``` 110 | 111 |
112 | 113 | ## Deployment 114 | 115 | The project comes with a basic configuration for [Docker](https://www.docker.com/), [Gunicorn](https://gunicorn.org/), and [Waitress](https://docs.pylonsproject.org/projects/waitress/en/stable/). 116 | 117 |
118 | 119 | ### [Docker](https://www.docker.com/) execution 120 | --- 121 | 122 | The steps to start the template using Docker: 123 | 124 | > Get the code 125 | 126 | ```bash 127 | $ git clone https://github.com/app-generator/jinja-paper-dashboard.git 128 | $ cd jinja-paper-dashboard 129 | ``` 130 | 131 | > Start the app in Docker 132 | 133 | ```bash 134 | $ sudo docker-compose pull && sudo docker-compose build && sudo docker-compose up -d 135 | ``` 136 | 137 | Visit `http://localhost:5005` in your browser. The app should be up & running. 138 | 139 |
140 | 141 | ### [Gunicorn](https://gunicorn.org/) 142 | --- 143 | 144 | Gunicorn 'Green Unicorn' is a Python WSGI HTTP Server for UNIX. 145 | 146 | > Install using pip 147 | 148 | ```bash 149 | $ pip install gunicorn 150 | ``` 151 | > Start the app using gunicorn binary 152 | 153 | ```bash 154 | $ gunicorn --bind 0.0.0.0:8001 run:app 155 | Serving on http://localhost:8001 156 | ``` 157 | 158 | Visit `http://localhost:8001` in your browser. The app should be up & running. 159 | 160 |
161 | 162 | ### [Waitress](https://docs.pylonsproject.org/projects/waitress/en/stable/) 163 | --- 164 | 165 | Waitress (Gunicorn equivalent for Windows) is meant to be a production-quality pure-Python WSGI server with very acceptable performance. It has no dependencies except ones that live in the Python standard library. 166 | 167 | > Install using pip 168 | 169 | ```bash 170 | $ pip install waitress 171 | ``` 172 | > Start the app using [waitress-serve](https://docs.pylonsproject.org/projects/waitress/en/stable/runner.html) 173 | 174 | ```bash 175 | $ waitress-serve --port=8001 run:app 176 | Serving on http://localhost:8001 177 | ``` 178 | 179 | Visit `http://localhost:8001` in your browser. The app should be up & running. 180 | 181 |
182 | 183 | ## Credits & Links 184 | 185 | - [Flask Framework](https://www.palletsprojects.com/p/flask/) - The official website 186 | 187 |
188 | 189 | --- 190 | [Jinja Paper Dashboard](https://docs.appseed.us/products/jinja-templates/paper-dashboard) - Provided by **AppSeed** [Web App Generator](https://appseed.us/app-generator). 191 | -------------------------------------------------------------------------------- /app/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- encoding: utf-8 -*- 2 | """ 3 | Copyright (c) 2019 - present AppSeed.us 4 | """ 5 | 6 | # import Flask 7 | from flask import Flask 8 | 9 | # Inject Flask magic 10 | app = Flask(__name__) 11 | 12 | # App Config - the minimal footprint 13 | app.config['TESTING' ] = True 14 | app.config['SECRET_KEY'] = 'S#perS3crEt_JamesBond' 15 | 16 | # Import routing to render the pages 17 | from app import views 18 | -------------------------------------------------------------------------------- /app/static/assets/demo/demo.css: -------------------------------------------------------------------------------- 1 | .tim-row { 2 | margin-bottom: 20px; 3 | } 4 | 5 | .tim-white-buttons { 6 | background-color: #777777; 7 | } 8 | 9 | .typography-line { 10 | padding-left: 25%; 11 | margin-bottom: 35px; 12 | position: relative; 13 | display: block; 14 | width: 100%; 15 | } 16 | 17 | .typography-line span { 18 | bottom: 10px; 19 | color: #c0c1c2; 20 | display: block; 21 | font-weight: 400; 22 | font-size: 13px; 23 | line-height: 13px; 24 | left: 0; 25 | position: absolute; 26 | width: 260px; 27 | text-transform: none; 28 | } 29 | 30 | .tim-row { 31 | padding-top: 60px; 32 | } 33 | 34 | .tim-row h3 { 35 | margin-top: 0; 36 | } 37 | 38 | .offline-doc .page-header { 39 | display: flex; 40 | align-items: center; 41 | } 42 | 43 | .offline-doc .footer { 44 | position: absolute; 45 | width: 100%; 46 | background: transparent; 47 | bottom: 0; 48 | color: #fff; 49 | z-index: 1; 50 | } 51 | 52 | @media all and (min-width: 992px) { 53 | .sidebar .nav>li.active-pro { 54 | position: absolute; 55 | width: 100%; 56 | bottom: 10px; 57 | } 58 | } 59 | 60 | .card.card-upgrade .card-category { 61 | max-width: 530px; 62 | margin: 0 auto; 63 | } 64 | 65 | /* Nucleo Style */ 66 | 67 | .demo-iconshtml { 68 | font-size: 62.5%; 69 | } 70 | 71 | .demo-icons body { 72 | font-size: 1.6rem; 73 | font-family: sans-serif; 74 | color: #333333; 75 | background: white; 76 | } 77 | 78 | .demo-icons a { 79 | color: #608CEE; 80 | text-decoration: none; 81 | } 82 | 83 | .demo-icons header { 84 | text-align: center; 85 | padding: 100px 0 0; 86 | } 87 | 88 | .demo-icons header h1 { 89 | font-size: 2.8rem; 90 | } 91 | 92 | .demo-icons header p { 93 | font-size: 1.4rem; 94 | margin-top: 1em; 95 | } 96 | 97 | .demo-icons header a:hover { 98 | text-decoration: underline; 99 | } 100 | 101 | .demo-icons .nc-icon { 102 | font-size: 34px; 103 | } 104 | 105 | .demo-icons section h2 { 106 | border-bottom: 1px solid #e2e2e2; 107 | padding: 0 0 1em .2em; 108 | margin-bottom: 1em; 109 | } 110 | 111 | .demo-icons ul { 112 | padding-left: 0; 113 | } 114 | 115 | .demo-icons ul::after { 116 | clear: both; 117 | content: ""; 118 | display: table; 119 | } 120 | 121 | .demo-icons ul li { 122 | width: 20%; 123 | float: left; 124 | padding: 16px 0; 125 | text-align: center; 126 | border-radius: .25em; 127 | -webkit-transition: background 0.2s; 128 | -moz-transition: background 0.2s; 129 | transition: background 0.2s; 130 | -webkit-user-select: none; 131 | -moz-user-select: none; 132 | -ms-user-select: none; 133 | user-select: none; 134 | overflow: hidden; 135 | } 136 | 137 | .demo-icons ul li:hover { 138 | background: #f4f4f4; 139 | } 140 | 141 | .demo-icons ul p, 142 | .demo-icons ul em, 143 | .demo-icons ul input { 144 | display: inline-block; 145 | font-size: 1rem; 146 | color: #999999; 147 | -webkit-user-select: auto; 148 | -moz-user-select: auto; 149 | -ms-user-select: auto; 150 | user-select: auto; 151 | white-space: nowrap; 152 | width: 100%; 153 | overflow: hidden; 154 | text-overflow: ellipsis; 155 | cursor: pointer; 156 | } 157 | 158 | .demo-icons ul p { 159 | padding: 20px 0 0; 160 | font-size: 12px; 161 | margin: 0; 162 | } 163 | 164 | .demo-icons ul p::selection, 165 | .demo-icons ul em::selection { 166 | background: #608CEE; 167 | color: #efefef; 168 | } 169 | 170 | .demo-icons ul em { 171 | font-size: 12px; 172 | } 173 | 174 | .demo-icons ul em::before { 175 | content: '['; 176 | } 177 | 178 | .demo-icons ul em::after { 179 | content: ']'; 180 | } 181 | 182 | .demo-icons ul input { 183 | text-align: center; 184 | background: transparent; 185 | border: none; 186 | box-shadow: none; 187 | outline: none; 188 | display: none; 189 | } -------------------------------------------------------------------------------- /app/static/assets/demo/demo.js: -------------------------------------------------------------------------------- 1 | demo = { 2 | initPickColor: function() { 3 | $('.pick-class-label').click(function() { 4 | var new_class = $(this).attr('new-class'); 5 | var old_class = $('#display-buttons').attr('data-class'); 6 | var display_div = $('#display-buttons'); 7 | if (display_div.length) { 8 | var display_buttons = display_div.find('.btn'); 9 | display_buttons.removeClass(old_class); 10 | display_buttons.addClass(new_class); 11 | display_div.attr('data-class', new_class); 12 | } 13 | }); 14 | }, 15 | 16 | initDocChart: function() { 17 | chartColor = "#FFFFFF"; 18 | 19 | ctx = document.getElementById('chartHours').getContext("2d"); 20 | 21 | myChart = new Chart(ctx, { 22 | type: 'line', 23 | 24 | data: { 25 | labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct"], 26 | datasets: [{ 27 | borderColor: "#6bd098", 28 | backgroundColor: "#6bd098", 29 | pointRadius: 0, 30 | pointHoverRadius: 0, 31 | borderWidth: 3, 32 | data: [300, 310, 316, 322, 330, 326, 333, 345, 338, 354] 33 | }, 34 | { 35 | borderColor: "#f17e5d", 36 | backgroundColor: "#f17e5d", 37 | pointRadius: 0, 38 | pointHoverRadius: 0, 39 | borderWidth: 3, 40 | data: [320, 340, 365, 360, 370, 385, 390, 384, 408, 420] 41 | }, 42 | { 43 | borderColor: "#fcc468", 44 | backgroundColor: "#fcc468", 45 | pointRadius: 0, 46 | pointHoverRadius: 0, 47 | borderWidth: 3, 48 | data: [370, 394, 415, 409, 425, 445, 460, 450, 478, 484] 49 | } 50 | ] 51 | }, 52 | options: { 53 | legend: { 54 | display: false 55 | }, 56 | 57 | tooltips: { 58 | enabled: false 59 | }, 60 | 61 | scales: { 62 | yAxes: [{ 63 | 64 | ticks: { 65 | fontColor: "#9f9f9f", 66 | beginAtZero: false, 67 | maxTicksLimit: 5, 68 | //padding: 20 69 | }, 70 | gridLines: { 71 | drawBorder: false, 72 | zeroLineColor: "#ccc", 73 | color: 'rgba(255,255,255,0.05)' 74 | } 75 | 76 | }], 77 | 78 | xAxes: [{ 79 | barPercentage: 1.6, 80 | gridLines: { 81 | drawBorder: false, 82 | color: 'rgba(255,255,255,0.1)', 83 | zeroLineColor: "transparent", 84 | display: false, 85 | }, 86 | ticks: { 87 | padding: 20, 88 | fontColor: "#9f9f9f" 89 | } 90 | }] 91 | }, 92 | } 93 | }); 94 | 95 | }, 96 | 97 | initChartsPages: function() { 98 | chartColor = "#FFFFFF"; 99 | 100 | ctx = document.getElementById('chartHours').getContext("2d"); 101 | 102 | myChart = new Chart(ctx, { 103 | type: 'line', 104 | 105 | data: { 106 | labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct"], 107 | datasets: [{ 108 | borderColor: "#6bd098", 109 | backgroundColor: "#6bd098", 110 | pointRadius: 0, 111 | pointHoverRadius: 0, 112 | borderWidth: 3, 113 | data: [300, 310, 316, 322, 330, 326, 333, 345, 338, 354] 114 | }, 115 | { 116 | borderColor: "#f17e5d", 117 | backgroundColor: "#f17e5d", 118 | pointRadius: 0, 119 | pointHoverRadius: 0, 120 | borderWidth: 3, 121 | data: [320, 340, 365, 360, 370, 385, 390, 384, 408, 420] 122 | }, 123 | { 124 | borderColor: "#fcc468", 125 | backgroundColor: "#fcc468", 126 | pointRadius: 0, 127 | pointHoverRadius: 0, 128 | borderWidth: 3, 129 | data: [370, 394, 415, 409, 425, 445, 460, 450, 478, 484] 130 | } 131 | ] 132 | }, 133 | options: { 134 | legend: { 135 | display: false 136 | }, 137 | 138 | tooltips: { 139 | enabled: false 140 | }, 141 | 142 | scales: { 143 | yAxes: [{ 144 | 145 | ticks: { 146 | fontColor: "#9f9f9f", 147 | beginAtZero: false, 148 | maxTicksLimit: 5, 149 | //padding: 20 150 | }, 151 | gridLines: { 152 | drawBorder: false, 153 | zeroLineColor: "#ccc", 154 | color: 'rgba(255,255,255,0.05)' 155 | } 156 | 157 | }], 158 | 159 | xAxes: [{ 160 | barPercentage: 1.6, 161 | gridLines: { 162 | drawBorder: false, 163 | color: 'rgba(255,255,255,0.1)', 164 | zeroLineColor: "transparent", 165 | display: false, 166 | }, 167 | ticks: { 168 | padding: 20, 169 | fontColor: "#9f9f9f" 170 | } 171 | }] 172 | }, 173 | } 174 | }); 175 | 176 | 177 | ctx = document.getElementById('chartEmail').getContext("2d"); 178 | 179 | myChart = new Chart(ctx, { 180 | type: 'pie', 181 | data: { 182 | labels: [1, 2, 3], 183 | datasets: [{ 184 | label: "Emails", 185 | pointRadius: 0, 186 | pointHoverRadius: 0, 187 | backgroundColor: [ 188 | '#e3e3e3', 189 | '#4acccd', 190 | '#fcc468', 191 | '#ef8157' 192 | ], 193 | borderWidth: 0, 194 | data: [342, 480, 530, 120] 195 | }] 196 | }, 197 | 198 | options: { 199 | 200 | legend: { 201 | display: false 202 | }, 203 | 204 | pieceLabel: { 205 | render: 'percentage', 206 | fontColor: ['white'], 207 | precision: 2 208 | }, 209 | 210 | tooltips: { 211 | enabled: false 212 | }, 213 | 214 | scales: { 215 | yAxes: [{ 216 | 217 | ticks: { 218 | display: false 219 | }, 220 | gridLines: { 221 | drawBorder: false, 222 | zeroLineColor: "transparent", 223 | color: 'rgba(255,255,255,0.05)' 224 | } 225 | 226 | }], 227 | 228 | xAxes: [{ 229 | barPercentage: 1.6, 230 | gridLines: { 231 | drawBorder: false, 232 | color: 'rgba(255,255,255,0.1)', 233 | zeroLineColor: "transparent" 234 | }, 235 | ticks: { 236 | display: false, 237 | } 238 | }] 239 | }, 240 | } 241 | }); 242 | 243 | var speedCanvas = document.getElementById("speedChart"); 244 | 245 | var dataFirst = { 246 | data: [0, 19, 15, 20, 30, 40, 40, 50, 25, 30, 50, 70], 247 | fill: false, 248 | borderColor: '#fbc658', 249 | backgroundColor: 'transparent', 250 | pointBorderColor: '#fbc658', 251 | pointRadius: 4, 252 | pointHoverRadius: 4, 253 | pointBorderWidth: 8, 254 | }; 255 | 256 | var dataSecond = { 257 | data: [0, 5, 10, 12, 20, 27, 30, 34, 42, 45, 55, 63], 258 | fill: false, 259 | borderColor: '#51CACF', 260 | backgroundColor: 'transparent', 261 | pointBorderColor: '#51CACF', 262 | pointRadius: 4, 263 | pointHoverRadius: 4, 264 | pointBorderWidth: 8 265 | }; 266 | 267 | var speedData = { 268 | labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], 269 | datasets: [dataFirst, dataSecond] 270 | }; 271 | 272 | var chartOptions = { 273 | legend: { 274 | display: false, 275 | position: 'top' 276 | } 277 | }; 278 | 279 | var lineChart = new Chart(speedCanvas, { 280 | type: 'line', 281 | hover: false, 282 | data: speedData, 283 | options: chartOptions 284 | }); 285 | }, 286 | 287 | initGoogleMaps: function() { 288 | var myLatlng = new google.maps.LatLng(40.748817, -73.985428); 289 | var mapOptions = { 290 | zoom: 13, 291 | center: myLatlng, 292 | scrollwheel: false, //we disable de scroll over the map, it is a really annoing when you scroll through page 293 | styles: [{ 294 | "featureType": "water", 295 | "stylers": [{ 296 | "saturation": 43 297 | }, { 298 | "lightness": -11 299 | }, { 300 | "hue": "#0088ff" 301 | }] 302 | }, { 303 | "featureType": "road", 304 | "elementType": "geometry.fill", 305 | "stylers": [{ 306 | "hue": "#ff0000" 307 | }, { 308 | "saturation": -100 309 | }, { 310 | "lightness": 99 311 | }] 312 | }, { 313 | "featureType": "road", 314 | "elementType": "geometry.stroke", 315 | "stylers": [{ 316 | "color": "#808080" 317 | }, { 318 | "lightness": 54 319 | }] 320 | }, { 321 | "featureType": "landscape.man_made", 322 | "elementType": "geometry.fill", 323 | "stylers": [{ 324 | "color": "#ece2d9" 325 | }] 326 | }, { 327 | "featureType": "poi.park", 328 | "elementType": "geometry.fill", 329 | "stylers": [{ 330 | "color": "#ccdca1" 331 | }] 332 | }, { 333 | "featureType": "road", 334 | "elementType": "labels.text.fill", 335 | "stylers": [{ 336 | "color": "#767676" 337 | }] 338 | }, { 339 | "featureType": "road", 340 | "elementType": "labels.text.stroke", 341 | "stylers": [{ 342 | "color": "#ffffff" 343 | }] 344 | }, { 345 | "featureType": "poi", 346 | "stylers": [{ 347 | "visibility": "off" 348 | }] 349 | }, { 350 | "featureType": "landscape.natural", 351 | "elementType": "geometry.fill", 352 | "stylers": [{ 353 | "visibility": "on" 354 | }, { 355 | "color": "#b8cb93" 356 | }] 357 | }, { 358 | "featureType": "poi.park", 359 | "stylers": [{ 360 | "visibility": "on" 361 | }] 362 | }, { 363 | "featureType": "poi.sports_complex", 364 | "stylers": [{ 365 | "visibility": "on" 366 | }] 367 | }, { 368 | "featureType": "poi.medical", 369 | "stylers": [{ 370 | "visibility": "on" 371 | }] 372 | }, { 373 | "featureType": "poi.business", 374 | "stylers": [{ 375 | "visibility": "simplified" 376 | }] 377 | }] 378 | 379 | } 380 | var map = new google.maps.Map(document.getElementById("map"), mapOptions); 381 | 382 | var marker = new google.maps.Marker({ 383 | position: myLatlng, 384 | title: "Hello World!" 385 | }); 386 | 387 | // To add the marker to the map, call setMap(); 388 | marker.setMap(map); 389 | }, 390 | 391 | showNotification: function(from, align) { 392 | color = 'primary'; 393 | 394 | $.notify({ 395 | icon: "nc-icon nc-bell-55", 396 | message: "Welcome to Paper Dashboard - a beautiful bootstrap dashboard for every web developer." 397 | 398 | }, { 399 | type: color, 400 | timer: 8000, 401 | placement: { 402 | from: from, 403 | align: align 404 | } 405 | }); 406 | } 407 | 408 | }; -------------------------------------------------------------------------------- /app/static/assets/fonts/nucleo-icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/fonts/nucleo-icons.eot -------------------------------------------------------------------------------- /app/static/assets/fonts/nucleo-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/fonts/nucleo-icons.ttf -------------------------------------------------------------------------------- /app/static/assets/fonts/nucleo-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/fonts/nucleo-icons.woff -------------------------------------------------------------------------------- /app/static/assets/fonts/nucleo-icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/fonts/nucleo-icons.woff2 -------------------------------------------------------------------------------- /app/static/assets/img/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/apple-icon.png -------------------------------------------------------------------------------- /app/static/assets/img/bg5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/bg5.jpg -------------------------------------------------------------------------------- /app/static/assets/img/damir-bosnjak.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/damir-bosnjak.jpg -------------------------------------------------------------------------------- /app/static/assets/img/default-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/default-avatar.png -------------------------------------------------------------------------------- /app/static/assets/img/faces/ayo-ogunseinde-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/faces/ayo-ogunseinde-1.jpg -------------------------------------------------------------------------------- /app/static/assets/img/faces/ayo-ogunseinde-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/faces/ayo-ogunseinde-2.jpg -------------------------------------------------------------------------------- /app/static/assets/img/faces/clem-onojeghuo-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/faces/clem-onojeghuo-1.jpg -------------------------------------------------------------------------------- /app/static/assets/img/faces/clem-onojeghuo-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/faces/clem-onojeghuo-2.jpg -------------------------------------------------------------------------------- /app/static/assets/img/faces/clem-onojeghuo-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/faces/clem-onojeghuo-3.jpg -------------------------------------------------------------------------------- /app/static/assets/img/faces/clem-onojeghuo-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/faces/clem-onojeghuo-4.jpg -------------------------------------------------------------------------------- /app/static/assets/img/faces/erik-lucatero-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/faces/erik-lucatero-1.jpg -------------------------------------------------------------------------------- /app/static/assets/img/faces/erik-lucatero-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/faces/erik-lucatero-2.jpg -------------------------------------------------------------------------------- /app/static/assets/img/faces/joe-gardner-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/faces/joe-gardner-1.jpg -------------------------------------------------------------------------------- /app/static/assets/img/faces/joe-gardner-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/faces/joe-gardner-2.jpg -------------------------------------------------------------------------------- /app/static/assets/img/faces/kaci-baum-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/faces/kaci-baum-1.jpg -------------------------------------------------------------------------------- /app/static/assets/img/faces/kaci-baum-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/faces/kaci-baum-2.jpg -------------------------------------------------------------------------------- /app/static/assets/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/favicon.png -------------------------------------------------------------------------------- /app/static/assets/img/header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/header.jpg -------------------------------------------------------------------------------- /app/static/assets/img/jan-sendereks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/jan-sendereks.jpg -------------------------------------------------------------------------------- /app/static/assets/img/logo-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/logo-small.png -------------------------------------------------------------------------------- /app/static/assets/img/mike.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/app/static/assets/img/mike.jpg -------------------------------------------------------------------------------- /app/static/assets/js/paper-dashboard.js: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | ========================================================= 4 | * Paper Dashboard 2 - v2.0.1 5 | ========================================================= 6 | 7 | * Product Page: https://www.creative-tim.com/product/paper-dashboard-2 8 | * Copyright 2020 Creative Tim (http://www.creative-tim.com) 9 | 10 | * Designed by www.invisionapp.com Coded by www.creative-tim.com 11 | 12 | ========================================================= 13 | 14 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 15 | 16 | */ 17 | 18 | (function() { 19 | isWindows = navigator.platform.indexOf('Win') > -1 ? true : false; 20 | 21 | if (isWindows) { 22 | // if we are on windows OS we activate the perfectScrollbar function 23 | var ps = new PerfectScrollbar('.sidebar'); 24 | var ps1 = new PerfectScrollbar('.sidebar-wrapper'); 25 | var ps2 = new PerfectScrollbar('.main-panel'); 26 | $('html').addClass('perfect-scrollbar-on'); 27 | 28 | } else { 29 | $('html').addClass('perfect-scrollbar-off'); 30 | } 31 | })(); 32 | 33 | transparent = true; 34 | transparentDemo = true; 35 | fixedTop = false; 36 | 37 | navbar_initialized = false; 38 | backgroundOrange = false; 39 | sidebar_mini_active = false; 40 | toggle_initialized = false; 41 | 42 | seq = 0, delays = 80, durations = 500; 43 | seq2 = 0, delays2 = 80, durations2 = 500; 44 | 45 | $(document).ready(function() { 46 | 47 | if ($('.full-screen-map').length == 0 && $('.bd-docs').length == 0) { 48 | // On click navbar-collapse the menu will be white not transparent 49 | $('.collapse').on('show.bs.collapse', function() { 50 | $(this).closest('.navbar').removeClass('navbar-transparent').addClass('bg-white'); 51 | }).on('hide.bs.collapse', function() { 52 | $(this).closest('.navbar').addClass('navbar-transparent').removeClass('bg-white'); 53 | }); 54 | } 55 | 56 | paperDashboard.initMinimizeSidebar(); 57 | 58 | $navbar = $('.navbar[color-on-scroll]'); 59 | scroll_distance = $navbar.attr('color-on-scroll') || 500; 60 | 61 | // Check if we have the class "navbar-color-on-scroll" then add the function to remove the class "navbar-transparent" so it will transform to a plain color. 62 | if ($('.navbar[color-on-scroll]').length != 0) { 63 | paperDashboard.checkScrollForTransparentNavbar(); 64 | $(window).on('scroll', paperDashboard.checkScrollForTransparentNavbar) 65 | } 66 | 67 | $('.form-control').on("focus", function() { 68 | $(this).parent('.input-group').addClass("input-group-focus"); 69 | }).on("blur", function() { 70 | $(this).parent(".input-group").removeClass("input-group-focus"); 71 | }); 72 | 73 | // Activate bootstrapSwitch 74 | $('.bootstrap-switch').each(function() { 75 | $this = $(this); 76 | data_on_label = $this.data('on-label') || ''; 77 | data_off_label = $this.data('off-label') || ''; 78 | 79 | $this.bootstrapSwitch({ 80 | onText: data_on_label, 81 | offText: data_off_label 82 | }); 83 | }); 84 | }); 85 | 86 | $(document).on('click', '.navbar-toggle', function() { 87 | $toggle = $(this); 88 | 89 | if (paperDashboard.misc.navbar_menu_visible == 1) { 90 | $('html').removeClass('nav-open'); 91 | paperDashboard.misc.navbar_menu_visible = 0; 92 | setTimeout(function() { 93 | $toggle.removeClass('toggled'); 94 | $('#bodyClick').remove(); 95 | }, 550); 96 | 97 | } else { 98 | setTimeout(function() { 99 | $toggle.addClass('toggled'); 100 | }, 580); 101 | 102 | div = '
'; 103 | $(div).appendTo('body').click(function() { 104 | $('html').removeClass('nav-open'); 105 | paperDashboard.misc.navbar_menu_visible = 0; 106 | setTimeout(function() { 107 | $toggle.removeClass('toggled'); 108 | $('#bodyClick').remove(); 109 | }, 550); 110 | }); 111 | 112 | $('html').addClass('nav-open'); 113 | paperDashboard.misc.navbar_menu_visible = 1; 114 | } 115 | }); 116 | 117 | $(window).resize(function() { 118 | // reset the seq for charts drawing animations 119 | seq = seq2 = 0; 120 | 121 | if ($('.full-screen-map').length == 0 && $('.bd-docs').length == 0) { 122 | $navbar = $('.navbar'); 123 | isExpanded = $('.navbar').find('[data-toggle="collapse"]').attr("aria-expanded"); 124 | if ($navbar.hasClass('bg-white') && $(window).width() > 991) { 125 | $navbar.removeClass('bg-white').addClass('navbar-transparent'); 126 | } else if ($navbar.hasClass('navbar-transparent') && $(window).width() < 991 && isExpanded != "false") { 127 | $navbar.addClass('bg-white').removeClass('navbar-transparent'); 128 | } 129 | } 130 | }); 131 | 132 | paperDashboard = { 133 | misc: { 134 | navbar_menu_visible: 0 135 | }, 136 | 137 | initMinimizeSidebar: function() { 138 | if ($('.sidebar-mini').length != 0) { 139 | sidebar_mini_active = true; 140 | } 141 | 142 | $('#minimizeSidebar').click(function() { 143 | var $btn = $(this); 144 | 145 | if (sidebar_mini_active == true) { 146 | $('body').addClass('sidebar-mini'); 147 | sidebar_mini_active = true; 148 | paperDashboard.showSidebarMessage('Sidebar mini activated...'); 149 | } else { 150 | $('body').removeClass('sidebar-mini'); 151 | sidebar_mini_active = false; 152 | paperDashboard.showSidebarMessage('Sidebar mini deactivated...'); 153 | } 154 | 155 | // we simulate the window Resize so the charts will get updated in realtime. 156 | var simulateWindowResize = setInterval(function() { 157 | window.dispatchEvent(new Event('resize')); 158 | }, 180); 159 | 160 | // we stop the simulation of Window Resize after the animations are completed 161 | setTimeout(function() { 162 | clearInterval(simulateWindowResize); 163 | }, 1000); 164 | }); 165 | }, 166 | 167 | showSidebarMessage: function(message) { 168 | try { 169 | $.notify({ 170 | icon: "now-ui-icons ui-1_bell-53", 171 | message: message 172 | }, { 173 | type: 'info', 174 | timer: 4000, 175 | placement: { 176 | from: 'top', 177 | align: 'right' 178 | } 179 | }); 180 | } catch (e) { 181 | console.log('Notify library is missing, please make sure you have the notifications library added.'); 182 | } 183 | 184 | } 185 | 186 | }; 187 | 188 | function hexToRGB(hex, alpha) { 189 | var r = parseInt(hex.slice(1, 3), 16), 190 | g = parseInt(hex.slice(3, 5), 16), 191 | b = parseInt(hex.slice(5, 7), 16); 192 | 193 | if (alpha) { 194 | return "rgba(" + r + ", " + g + ", " + b + ", " + alpha + ")"; 195 | } else { 196 | return "rgb(" + r + ", " + g + ", " + b + ")"; 197 | } 198 | } -------------------------------------------------------------------------------- /app/static/assets/js/paper-dashboard.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["_site_dashboard_free/assets/js/dashboard-free.js"],"names":["hexToRGB","hex","alpha","r","parseInt","slice","g","b","isWindows","navigator","platform","indexOf","PerfectScrollbar","$","addClass","backgroundOrange","navbar_initialized","fixedTop","transparentDemo","transparent","toggle_initialized","sidebar_mini_active","seq","delays","durations","seq2","delays2","durations2","document","ready","length","on","this","closest","removeClass","paperDashboard","initMinimizeSidebar","$navbar","scroll_distance","attr","checkScrollForTransparentNavbar","window","parent","each","$this","data_on_label","data","data_off_label","bootstrapSwitch","onText","offText","$toggle","misc","navbar_menu_visible","setTimeout","remove","div","appendTo","click","resize","isExpanded","find","hasClass","width","showSidebarMessage","simulateWindowResize","setInterval","dispatchEvent","Event","clearInterval","message","notify","icon","type","timer","placement","from","align","e","console","log"],"mappings":"AA2LA,SAASA,SAASC,EAAKC,GACnB,IAAIC,EAAIC,SAASH,EAAII,MAAM,EAAG,GAAI,IAC9BC,EAAIF,SAASH,EAAII,MAAM,EAAG,GAAI,IAC9BE,EAAIH,SAASH,EAAII,MAAM,EAAG,GAAI,IAElC,OAAIH,EACO,QAAUC,EAAI,KAAOG,EAAI,KAAOC,EAAI,KAAOL,EAAQ,IAEnD,OAASC,EAAI,KAAOG,EAAI,KAAOC,EAAI,KAlLlD,WAGI,GAFAC,WAAiD,EAArCC,UAAUC,SAASC,QAAQ,OAEnCH,UAAW,CAEH,IAAII,iBAAiB,YACpB,IAAIA,iBAAiB,oBACrB,IAAIA,iBAAiB,eAC/BC,EAAE,QAAQC,SAAS,6BAGnBD,EAAE,QAAQC,SAAS,yBAX1B,GAoBAC,iBADAC,mBAFAC,WADAC,gBADAC,aAAc,GAOdC,mBADAC,qBAAsB,EAGtBC,IAAM,EAAGC,OAAS,GAAIC,UAAY,IAClCC,KAAO,EAAGC,QAAU,GAAIC,WAAa,IAErCd,EAAEe,UAAUC,MAAM,WAEoB,GAAhChB,EAAE,oBAAoBiB,QAAuC,GAAxBjB,EAAE,YAAYiB,QAErDjB,EAAE,aAAakB,GAAG,mBAAoB,WAClClB,EAAEmB,MAAMC,QAAQ,WAAWC,YAAY,sBAAsBpB,SAAS,cACvEiB,GAAG,mBAAoB,WACtBlB,EAAEmB,MAAMC,QAAQ,WAAWnB,SAAS,sBAAsBoB,YAAY,cAI5EC,eAAeC,sBAEfC,QAAUxB,EAAE,4BACZyB,gBAAkBD,QAAQE,KAAK,oBAAsB,IAGV,GAAxC1B,EAAE,4BAA4BiB,SAC7BK,eAAeK,kCACf3B,EAAE4B,QAAQV,GAAG,SAAUI,eAAeK,kCAG1C3B,EAAE,iBAAiBkB,GAAG,QAAS,WAC3BlB,EAAEmB,MAAMU,OAAO,gBAAgB5B,SAAS,uBACzCiB,GAAG,OAAQ,WACVlB,EAAEmB,MAAMU,OAAO,gBAAgBR,YAAY,uBAI/CrB,EAAE,qBAAqB8B,KAAK,WACxBC,MAAQ/B,EAAEmB,MACVa,cAAgBD,MAAME,KAAK,aAAe,GAC1CC,eAAiBH,MAAME,KAAK,cAAgB,GAE5CF,MAAMI,gBAAgB,CAClBC,OAAQJ,cACRK,QAASH,qBAKnBlC,EAAEe,UAAUG,GAAG,QAAS,iBAAkB,WACtCoB,QAAUtC,EAAEmB,MAEkC,GAA3CG,eAAeiB,KAAKC,qBACnBxC,EAAE,QAAQqB,YAAY,YACtBC,eAAeiB,KAAKC,oBAAsB,EAC1CC,WAAW,WACPH,QAAQjB,YAAY,WACpBrB,EAAE,cAAc0C,UACjB,OAGHD,WAAW,WACPH,QAAQrC,SAAS,YAClB,KAEH0C,IAAM,6BACN3C,EAAE2C,KAAKC,SAAS,QAAQC,MAAM,WAC1B7C,EAAE,QAAQqB,YAAY,YACtBC,eAAeiB,KAAKC,oBAAsB,EACtCC,WAAW,WACPH,QAAQjB,YAAY,WACpBrB,EAAE,cAAc0C,UAClB,OAGV1C,EAAE,QAAQC,SAAS,YACnBqB,eAAeiB,KAAKC,oBAAsB,KAIlDxC,EAAE4B,QAAQkB,OAAO,WAEbrC,IAAMG,KAAO,EAEsB,GAAhCZ,EAAE,oBAAoBiB,QAAuC,GAAxBjB,EAAE,YAAYiB,SACpDO,QAAUxB,EAAE,WACZ+C,WAAa/C,EAAE,WAAWgD,KAAK,4BAA4BtB,KAAK,iBAC5DF,QAAQyB,SAAS,aAAmC,IAApBjD,EAAE4B,QAAQsB,QAC5C1B,QAAQH,YAAY,YAAYpB,SAAS,sBAChCuB,QAAQyB,SAAS,uBAAyBjD,EAAE4B,QAAQsB,QAAU,KAAqB,SAAdH,YAC9EvB,QAAQvB,SAAS,YAAYoB,YAAY,yBAKjDC,eAAiB,CACfiB,KAAK,CACDC,oBAAqB,GAGzBjB,oBAAoB,WACgB,GAA7BvB,EAAE,iBAAiBiB,SACpBT,qBAAsB,GAGxBR,EAAE,oBAAoB6C,MAAM,WACb7C,EAAEmB,MAEa,GAAvBX,qBACDR,EAAE,QAAQC,SAAS,gBACnBO,qBAAsB,EACtBc,eAAe6B,mBAAmB,+BAElCnD,EAAE,QAAQqB,YAAY,gBACtBb,qBAAsB,EACtBc,eAAe6B,mBAAmB,gCAIpC,IAAIC,EAAuBC,YAAY,WACnCzB,OAAO0B,cAAc,IAAIC,MAAM,YACjC,KAGFd,WAAW,WACPe,cAAcJ,IAChB,QAIVD,mBAAoB,SAASM,GAC3B,IACEzD,EAAE0D,OAAO,CACLC,KAAM,4BACNF,QAASA,GACT,CACEG,KAAM,OACNC,MAAO,IACPC,UAAW,CACPC,KAAM,MACNC,MAAO,WAGjB,MAAOC,GACPC,QAAQC,IAAI"} -------------------------------------------------------------------------------- /app/static/assets/js/paper-dashboard.min.js: -------------------------------------------------------------------------------- 1 | function hexToRGB(a,e){var i=parseInt(a.slice(1,3),16),n=parseInt(a.slice(3,5),16),s=parseInt(a.slice(5,7),16);return e?"rgba("+i+", "+n+", "+s+", "+e+")":"rgb("+i+", "+n+", "+s+")"}!function(){if(isWindows=-1',$(div).appendTo("body").click(function(){$("html").removeClass("nav-open"),paperDashboard.misc.navbar_menu_visible=0,setTimeout(function(){$toggle.removeClass("toggled"),$("#bodyClick").remove()},550)}),$("html").addClass("nav-open"),paperDashboard.misc.navbar_menu_visible=1)}),$(window).resize(function(){seq=seq2=0,0==$(".full-screen-map").length&&0==$(".bd-docs").length&&($navbar=$(".navbar"),isExpanded=$(".navbar").find('[data-toggle="collapse"]').attr("aria-expanded"),$navbar.hasClass("bg-white")&&991<$(window).width()?$navbar.removeClass("bg-white").addClass("navbar-transparent"):$navbar.hasClass("navbar-transparent")&&$(window).width()<991&&"false"!=isExpanded&&$navbar.addClass("bg-white").removeClass("navbar-transparent"))}),paperDashboard={misc:{navbar_menu_visible:0},initMinimizeSidebar:function(){0!=$(".sidebar-mini").length&&(sidebar_mini_active=!0),$("#minimizeSidebar").click(function(){$(this);1==sidebar_mini_active?($("body").addClass("sidebar-mini"),sidebar_mini_active=!0,paperDashboard.showSidebarMessage("Sidebar mini activated...")):($("body").removeClass("sidebar-mini"),sidebar_mini_active=!1,paperDashboard.showSidebarMessage("Sidebar mini deactivated..."));var a=setInterval(function(){window.dispatchEvent(new Event("resize"))},180);setTimeout(function(){clearInterval(a)},1e3)})},showSidebarMessage:function(a){try{$.notify({icon:"now-ui-icons ui-1_bell-53",message:a},{type:"info",timer:4e3,placement:{from:"top",align:"right"}})}catch(a){console.log("Notify library is missing, please make sure you have the notifications library added.")}}}; 2 | //# sourceMappingURL=_site_dashboard_free/assets/js/dashboard-free.js.map -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | ========================================================= 4 | * Paper Dashboard 2 - v2.0.1 5 | ========================================================= 6 | 7 | * Product Page: https://www.creative-tim.com/product/paper-dashboard-2 8 | * Copyright 2020 Creative Tim (http://www.creative-tim.com) 9 | 10 | * Coded by www.creative-tim.com 11 | 12 | ========================================================= 13 | 14 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 15 | 16 | */ 17 | 18 | @import 'paper-dashboard/variables'; 19 | @import 'paper-dashboard/mixins'; 20 | 21 | // Plugins CSS 22 | @import "paper-dashboard/plugins/plugin-animate-bootstrap-notify"; 23 | @import "paper-dashboard/plugins/plugin-perfect-scrollbar"; 24 | 25 | // Core CSS 26 | @import "paper-dashboard/buttons"; 27 | @import "paper-dashboard/inputs"; 28 | @import "paper-dashboard/typography"; 29 | @import "paper-dashboard/misc"; 30 | @import "paper-dashboard/checkboxes-radio"; 31 | 32 | 33 | // components 34 | @import "paper-dashboard/navbar"; 35 | @import "paper-dashboard/page-header"; 36 | @import "paper-dashboard/dropdown"; 37 | @import "paper-dashboard/alerts"; 38 | @import "paper-dashboard/images"; 39 | @import "paper-dashboard/nucleo-outline"; 40 | @import "paper-dashboard/tables"; 41 | @import "paper-dashboard/sidebar-and-main-panel"; 42 | @import "paper-dashboard/footers"; 43 | @import "paper-dashboard/fixed-plugin"; 44 | 45 | // cards 46 | @import "paper-dashboard/cards"; 47 | @import "paper-dashboard/cards/card-plain"; 48 | @import "paper-dashboard/cards/card-chart"; 49 | @import "paper-dashboard/cards/card-user"; 50 | @import "paper-dashboard/cards/card-map"; 51 | @import "paper-dashboard/cards/card-stats"; 52 | 53 | @import "paper-dashboard/responsive"; 54 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_alerts.scss: -------------------------------------------------------------------------------- 1 | .alert { 2 | border: 0; 3 | border-radius: $border-radius-small; 4 | color: $white-color; 5 | padding-top: .9rem; 6 | padding-bottom: .9rem; 7 | position: relative; 8 | 9 | &.alert-success { 10 | background-color: lighten($success-color, 5%); 11 | } 12 | 13 | &.alert-danger { 14 | background-color: lighten($danger-color, 5%); 15 | } 16 | 17 | &.alert-warning { 18 | background-color: lighten($warning-color, 5%); 19 | } 20 | 21 | &.alert-info { 22 | background-color: lighten($info-color, 5%); 23 | } 24 | 25 | &.alert-primary { 26 | background-color: lighten($primary-color, 5%); 27 | } 28 | 29 | &.alert-default { 30 | background-color: lighten($default-color, 5%); 31 | } 32 | 33 | .close { 34 | color: $white-color; 35 | opacity: .9; 36 | text-shadow: none; 37 | line-height: 0; 38 | outline: 0; 39 | 40 | i.fa, 41 | i.nc-icon { 42 | font-size: 14px !important; 43 | } 44 | 45 | &:hover, 46 | &:focus { 47 | opacity: 1; 48 | } 49 | } 50 | 51 | span[data-notify="icon"]{ 52 | font-size: 27px; 53 | display: block; 54 | left: 19px; 55 | position: absolute; 56 | top: 50%; 57 | margin-top: -11px; 58 | } 59 | 60 | button.close{ 61 | position: absolute; 62 | right: 10px; 63 | top: 50%; 64 | margin-top: -13px; 65 | width: 25px; 66 | height: 25px; 67 | padding: 3px; 68 | } 69 | 70 | .close ~ span{ 71 | display: block; 72 | max-width: 89%; 73 | } 74 | 75 | &.alert-with-icon{ 76 | padding-left: 65px; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_animated-buttons.scss: -------------------------------------------------------------------------------- 1 | //animations 2 | 3 | .icon-property{ 4 | @include transition($slow-transition-time, $transition-bezier); 5 | position: relative; 6 | display: inline-block; 7 | } 8 | 9 | #animated-buttons{ 10 | .btn{ 11 | i{ 12 | position: relative; 13 | top: 3px; 14 | margin-top: -3px; 15 | } 16 | } 17 | } 18 | 19 | .btn-rotate{ 20 | i{ 21 | @extend .icon-property; 22 | } 23 | 24 | &:hover, 25 | &:focus{ 26 | i{ 27 | @include rotate-53(); 28 | } 29 | } 30 | } 31 | 32 | .btn-magnify{ 33 | i{ 34 | @extend .icon-property; 35 | } 36 | 37 | &:hover, 38 | &:focus{ 39 | i{ 40 | @include transform-scale(1.22); 41 | } 42 | } 43 | } 44 | 45 | .btn-move-left{ 46 | i{ 47 | @extend .icon-property; 48 | margin-right: 0; 49 | } 50 | 51 | &:hover, 52 | &:focus{ 53 | i{ 54 | @include transform-translate-x(-5px); 55 | } 56 | } 57 | } 58 | 59 | .btn-move-right{ 60 | i{ 61 | @extend .icon-property; 62 | margin-right: 0; 63 | } 64 | 65 | &:hover, 66 | &:focus{ 67 | i{ 68 | @include transform-translate-x(5px); 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_buttons.scss: -------------------------------------------------------------------------------- 1 | .btn, 2 | .navbar .navbar-nav > a.btn{ 3 | border-width: $border-thick; 4 | font-weight: $font-weight-semi; 5 | font-size: $font-size-small; 6 | line-height: $line-height; 7 | text-transform: uppercase; 8 | border: none; 9 | margin: 10px 1px; 10 | border-radius: $border-radius-small; 11 | padding: $padding-btn-vertical $padding-btn-horizontal; 12 | cursor: pointer; 13 | 14 | @include btn-styles($default-color, $default-states-color); 15 | @include transition($fast-transition-time, linear); 16 | 17 | &:hover, 18 | &:focus{ 19 | @include opacity(1); 20 | outline: 0 !important; 21 | } 22 | &:active, 23 | &.active, 24 | .open > &.dropdown-toggle { 25 | @include box-shadow(none); 26 | outline: 0 !important; 27 | } 28 | 29 | .badge{ 30 | margin: 0; 31 | } 32 | 33 | &.btn-icon { 34 | // see above for color variations 35 | height: $btn-icon-size-regular; 36 | min-width: $btn-icon-size-regular; 37 | width: $btn-icon-size-regular; 38 | padding: 0; 39 | font-size: $btn-icon-font-size-regular; 40 | overflow: hidden; 41 | position: relative; 42 | line-height: normal; 43 | 44 | &.btn-simple{ 45 | padding: 0; 46 | } 47 | 48 | &.btn-sm{ 49 | height: $btn-icon-size-small; 50 | min-width: $btn-icon-size-small; 51 | width: $btn-icon-size-small; 52 | 53 | .fa, 54 | .far, 55 | .fas, 56 | .nc-icon{ 57 | font-size: $btn-icon-font-size-small; 58 | } 59 | } 60 | 61 | &.btn-lg{ 62 | height: $btn-icon-size-lg; 63 | min-width: $btn-icon-size-lg; 64 | width: $btn-icon-size-lg; 65 | 66 | .fa, 67 | .far, 68 | .fas, 69 | .nc-icon{ 70 | font-size: $btn-icon-font-size-lg; 71 | } 72 | } 73 | 74 | &:not(.btn-footer) .nc-icon, 75 | &:not(.btn-footer) .fa, 76 | &:not(.btn-footer) .far, 77 | &:not(.btn-footer) .fas{ 78 | position: absolute; 79 | top: 50%; 80 | left: 50%; 81 | transform: translate(-12px, -12px); 82 | line-height: 1.5626rem; 83 | width: 24px; 84 | } 85 | 86 | &.btn-neutral { 87 | font-size: 20px; 88 | } 89 | } 90 | 91 | &:not(.btn-icon) .nc-icon{ 92 | position: relative; 93 | top: 1px; 94 | } 95 | } 96 | 97 | // Apply the mixin to the buttons 98 | // .btn-default { @include btn-styles($default-color, $default-states-color); } 99 | .btn-primary { @include btn-styles($primary-color, $primary-states-color); } 100 | .btn-success { @include btn-styles($success-color, $success-states-color); } 101 | .btn-info { @include btn-styles($info-color, $info-states-color); } 102 | .btn-warning { @include btn-styles($warning-color, $warning-states-color); } 103 | .btn-danger { @include btn-styles($danger-color, $danger-states-color); } 104 | // .btn-neutral { @include btn-styles($white-color, $white-color); } 105 | 106 | .btn-outline-default { @include btn-outline-styles($default-color, $default-states-color); } 107 | .btn-outline-primary { @include btn-outline-styles($primary-color, $primary-states-color); } 108 | .btn-outline-success { @include btn-outline-styles($success-color, $success-states-color); } 109 | .btn-outline-info { @include btn-outline-styles($info-color, $info-states-color); } 110 | .btn-outline-warning { @include btn-outline-styles($warning-color, $warning-states-color); } 111 | .btn-outline-danger { @include btn-outline-styles($danger-color, $danger-states-color); } 112 | .btn-outline-neutral { @include btn-outline-styles($white-color, $default-states-color); 113 | &:hover, 114 | &:focus{ 115 | color: $default-states-color; 116 | background-color: $white-color; 117 | } 118 | } 119 | .btn-neutral { 120 | @include btn-styles($white-color, $white-color); 121 | color: $default-color; 122 | &:hover, 123 | &:focus{ 124 | color: $default-states-color; 125 | } 126 | 127 | &.btn-border{ 128 | &:hover, 129 | &:focus{ 130 | color: $default-color; 131 | } 132 | 133 | &:active, 134 | &.active, 135 | .open > &.dropdown-toggle{ 136 | background-color: $white-color; 137 | color: $default-color; 138 | } 139 | } 140 | 141 | &.btn-link:active, 142 | &.btn-link.active{ 143 | background-color: transparent; 144 | } 145 | } 146 | 147 | .btn{ 148 | &:disabled, 149 | &[disabled], 150 | &.disabled{ 151 | @include opacity(.5); 152 | pointer-events: none; 153 | } 154 | } 155 | .btn-simple{ 156 | border: $border; 157 | border-color: $default-color; 158 | padding: $padding-btn-vertical - 1 $padding-round-horizontal - 1; 159 | background-color: $transparent-bg; 160 | } 161 | 162 | .btn-simple, 163 | .btn-link{ 164 | &.disabled, 165 | &:disabled, 166 | &[disabled], 167 | fieldset[disabled] & { 168 | &, 169 | &:hover, 170 | &:focus, 171 | &.focus, 172 | &:active, 173 | &.active { 174 | background-color: $transparent-bg; 175 | } 176 | } 177 | } 178 | 179 | .btn-link{ 180 | border: $none; 181 | padding: $padding-base-vertical $padding-base-horizontal; 182 | background-color: $transparent-bg; 183 | } 184 | 185 | .btn-lg{ 186 | @include btn-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $border-radius-large); 187 | } 188 | .btn-sm{ 189 | @include btn-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $border-radius-small); 190 | } 191 | 192 | .btn-wd { 193 | min-width: 140px; 194 | } 195 | .btn-group.select{ 196 | width: 100%; 197 | } 198 | .btn-group.select .btn{ 199 | text-align: left; 200 | } 201 | .btn-group.select .caret{ 202 | position: absolute; 203 | top: 50%; 204 | margin-top: -1px; 205 | right: 8px; 206 | } 207 | .btn-group { 208 | .btn + .btn { 209 | margin-left: -3px; 210 | } 211 | .btn { 212 | &:focus { 213 | background-color: $info-color !important; 214 | } 215 | } 216 | } 217 | 218 | 219 | .btn-round{ 220 | border-width: $border-thin; 221 | border-radius: $btn-round-radius; 222 | padding-right: $padding-round-horizontal; 223 | padding-left: $padding-round-horizontal; 224 | 225 | &.btn-simple{ 226 | padding: $padding-btn-vertical - 1 $padding-round-horizontal - 1; 227 | } 228 | } 229 | 230 | .no-caret { 231 | &.dropdown-toggle::after { 232 | display: none; 233 | } 234 | } 235 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_cards.scss: -------------------------------------------------------------------------------- 1 | .card{ 2 | border-radius: $border-radius-extreme; 3 | box-shadow: 0 6px 10px -4px rgba(0, 0, 0, 0.15); 4 | background-color: #FFFFFF; 5 | color: $card-black-color; 6 | margin-bottom: 20px; 7 | position: relative; 8 | border: 0 none; 9 | 10 | -webkit-transition: transform 300ms cubic-bezier(0.34, 2, 0.6, 1), box-shadow 200ms ease; 11 | -moz-transition: transform 300ms cubic-bezier(0.34, 2, 0.6, 1), box-shadow 200ms ease; 12 | -o-transition: transform 300ms cubic-bezier(0.34, 2, 0.6, 1), box-shadow 200ms ease; 13 | -ms-transition: transform 300ms cubic-bezier(0.34, 2, 0.6, 1), box-shadow 200ms ease; 14 | transition: transform 300ms cubic-bezier(0.34, 2, 0.6, 1), box-shadow 200ms ease; 15 | 16 | .card-body{ 17 | padding: 15px 15px 10px 15px; 18 | 19 | &.table-full-width{ 20 | padding-left: 0; 21 | padding-right: 0; 22 | } 23 | } 24 | 25 | .card-header{ 26 | &:not([data-background-color]){ 27 | background-color: transparent; 28 | } 29 | padding: 15px 15px 0; 30 | border: 0; 31 | 32 | .card-title{ 33 | margin-top: 10px; 34 | } 35 | } 36 | 37 | .map{ 38 | border-radius: $border-radius-small; 39 | 40 | &.map-big{ 41 | height: 500px; 42 | } 43 | } 44 | 45 | &[data-background-color="orange"]{ 46 | background-color: $primary-color; 47 | 48 | .card-header{ 49 | background-color: $primary-color; 50 | } 51 | 52 | .card-footer{ 53 | .stats{ 54 | color: $white-color; 55 | } 56 | } 57 | } 58 | 59 | &[data-background-color="red"]{ 60 | background-color: $danger-color; 61 | } 62 | 63 | &[data-background-color="yellow"]{ 64 | background-color: $warning-color; 65 | } 66 | 67 | &[data-background-color="blue"]{ 68 | background-color: $info-color; 69 | } 70 | 71 | &[data-background-color="green"]{ 72 | background-color: $success-color; 73 | } 74 | 75 | .image{ 76 | overflow: hidden; 77 | height: 200px; 78 | position: relative; 79 | } 80 | 81 | .avatar{ 82 | width: 30px; 83 | height: 30px; 84 | overflow: hidden; 85 | border-radius: 50%; 86 | margin-bottom: 15px; 87 | } 88 | 89 | .numbers { 90 | font-size: 2em; 91 | } 92 | 93 | .big-title { 94 | font-size: 12px; 95 | text-align: center; 96 | font-weight: 500; 97 | padding-bottom: 15px; 98 | } 99 | 100 | label{ 101 | font-size: $font-size-small; 102 | margin-bottom: 5px; 103 | color: $dark-gray; 104 | } 105 | 106 | .card-footer{ 107 | background-color: transparent; 108 | border: 0; 109 | 110 | 111 | .stats{ 112 | i{ 113 | margin-right: 5px; 114 | position: relative; 115 | top: 0px; 116 | color: $default-color; 117 | } 118 | } 119 | 120 | .btn{ 121 | margin: 0; 122 | } 123 | } 124 | 125 | &.card-plain{ 126 | background-color: transparent; 127 | box-shadow: none; 128 | border-radius: 0; 129 | 130 | 131 | .card-body{ 132 | padding-left: 5px; 133 | padding-right: 5px; 134 | } 135 | 136 | img{ 137 | border-radius: $border-radius-extreme; 138 | } 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_checkboxes-radio.scss: -------------------------------------------------------------------------------- 1 | .from-check, 2 | .form-check-radio { 3 | margin-bottom: 12px; 4 | position: relative; 5 | } 6 | 7 | .form-check { 8 | padding-left: 0; 9 | margin-bottom: .5rem; 10 | 11 | .form-check-label{ 12 | display: inline-block; 13 | position: relative; 14 | cursor: pointer; 15 | padding-left: 35px; 16 | line-height: 26px; 17 | margin-bottom: 0; 18 | } 19 | 20 | .form-check-sign::before, 21 | .form-check-sign::after { 22 | content: " "; 23 | display: inline-block; 24 | position: absolute; 25 | width: 24px; 26 | height: 24px; 27 | left: 0; 28 | cursor: pointer; 29 | border-radius: 6px; 30 | top: 0; 31 | background-color: #AAA7A4; 32 | -webkit-transition: opacity 0.3s linear; 33 | -moz-transition: opacity 0.3s linear; 34 | -o-transition: opacity 0.3s linear; 35 | -ms-transition: opacity 0.3s linear; 36 | transition: opacity 0.3s linear; 37 | } 38 | .form-check-sign::after { 39 | font-family: 'FontAwesome'; 40 | content: "\f00c"; 41 | top: -1px; 42 | text-align: center; 43 | font-size: 15px; 44 | opacity: 0; 45 | color: #FFF; 46 | border: 0; 47 | background-color: inherit; 48 | } 49 | &.disabled{ 50 | .form-check-label{ 51 | color: $dark-gray; 52 | opacity: .5; 53 | cursor: not-allowed; 54 | } 55 | } 56 | 57 | } 58 | 59 | .form-check.disabled .form-check-label, 60 | .form-check.disabled .form-check-label { 61 | 62 | } 63 | 64 | .form-check input[type="checkbox"], 65 | .form-check-radio input[type="radio"]{ 66 | opacity: 0; 67 | position: absolute; 68 | visibility: hidden; 69 | } 70 | .form-check input[type="checkbox"]:checked + .form-check-sign::after{ 71 | opacity: 1; 72 | } 73 | 74 | .form-control input[type="checkbox"]:disabled + .form-check-sign::before, 75 | .checkbox input[type="checkbox"]:disabled + .form-check-sign::after{ 76 | cursor: not-allowed; 77 | } 78 | 79 | .form-check .form-check-label input[type="checkbox"]:disabled + .form-check-sign, 80 | .form-check-radio input[type="radio"]:disabled + .form-check-sign{ 81 | pointer-events: none !important; 82 | } 83 | 84 | .form-check-radio{ 85 | margin-left: -3px; 86 | 87 | .form-check-label{ 88 | padding-left: 2rem; 89 | } 90 | &.disabled{ 91 | .form-check-label{ 92 | color: $dark-gray; 93 | opacity: .5; 94 | cursor: not-allowed; 95 | } 96 | } 97 | } 98 | 99 | .form-check-radio .form-check-sign::before{ 100 | font-family: 'FontAwesome'; 101 | content: "\f10c"; 102 | font-size: 22px; 103 | -webkit-font-smoothing: antialiased; 104 | -moz-osx-font-smoothing: grayscale; 105 | display: inline-block; 106 | position: absolute; 107 | opacity: .50; 108 | left: 5px; 109 | top: -5px; 110 | } 111 | 112 | .form-check-label input[type="checkbox"]:checked + .form-check-sign:before{ 113 | background-color: #66615B; 114 | } 115 | 116 | .form-check-radio input[type="radio"] + .form-check-sign:after, 117 | .form-check-radio input[type="radio"] { 118 | opacity: 0; 119 | @include transition-opacity(0.3s, linear); 120 | content:" "; 121 | display: block; 122 | } 123 | 124 | .form-check-radio input[type="radio"]:checked + .form-check-sign::after { 125 | font-family: 'FontAwesome'; 126 | content: "\f192"; 127 | top: -5px; 128 | position: absolute; 129 | left: 5px; 130 | opacity: 1; 131 | font-size: 22px; 132 | } 133 | 134 | .form-check-radio input[type="radio"]:checked + .form-check-sign::after{ 135 | opacity: 1; 136 | } 137 | 138 | 139 | .form-check-radio input[type="radio"]:disabled + .form-check-sign::before, 140 | .form-check-radio input[type="radio"]:disabled + .form-check-sign::after { 141 | color: $dark-gray; 142 | } 143 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_fixed-plugin.scss: -------------------------------------------------------------------------------- 1 | .fixed-plugin{ 2 | position: fixed; 3 | right: 0; 4 | width: 64px; 5 | background: rgba(0,0,0,.3); 6 | z-index: 1031; 7 | border-radius: 8px 0 0 8px; 8 | text-align: center; 9 | top: 120px; 10 | 11 | li > a, 12 | .badge{ 13 | transition: all .34s; 14 | -webkit-transition: all .34s; 15 | -moz-transition: all .34s; 16 | } 17 | 18 | .fa-cog{ 19 | color: #FFFFFF; 20 | padding: 10px; 21 | border-radius: 0 0 6px 6px; 22 | width: auto; 23 | } 24 | 25 | .dropdown-menu{ 26 | right: 80px; 27 | left: auto !important; 28 | top: -52px !important; 29 | width: 290px; 30 | border-radius: 10px; 31 | padding: 0 10px; 32 | } 33 | 34 | .dropdown .dropdown-menu .nc-icon{ 35 | top: 2px; 36 | right: 10px; 37 | font-size: 14px; 38 | } 39 | 40 | .dropdown-menu:after, 41 | .dropdown-menu:before{ 42 | right: 10px; 43 | margin-left: auto; 44 | left: auto; 45 | } 46 | 47 | .fa-circle-thin{ 48 | color: #FFFFFF; 49 | } 50 | 51 | .active .fa-circle-thin{ 52 | color: #00bbff; 53 | } 54 | 55 | .dropdown-menu > .active > a, 56 | .dropdown-menu > .active > a:hover, 57 | .dropdown-menu > .active > a:focus{ 58 | color: #777777; 59 | text-align: center; 60 | } 61 | 62 | img{ 63 | border-radius: 0; 64 | width: 100%; 65 | height: 100px; 66 | margin: 0 auto; 67 | } 68 | 69 | .dropdown-menu li > a:hover, 70 | .dropdown-menu li > a:focus{ 71 | box-shadow: none; 72 | } 73 | 74 | .badge{ 75 | border: 3px solid #FFFFFF; 76 | border-radius: 50%; 77 | cursor: pointer; 78 | display: inline-block; 79 | height: 23px; 80 | margin-right: 5px; 81 | position: relative; 82 | width: 23px; 83 | 84 | &.badge-light { 85 | border: 1px solid $light-gray; 86 | 87 | &.active, 88 | &:hover { 89 | border: 3px solid #0bf; 90 | } 91 | } 92 | } 93 | 94 | .badge.active, 95 | .badge:hover{ 96 | border-color: #00bbff; 97 | } 98 | 99 | .badge-blue{ 100 | background-color: $brand-info; 101 | } 102 | .badge-green{ 103 | background-color: $brand-success; 104 | } 105 | .badge-orange{ 106 | background-color: $brand-primary; 107 | } 108 | .badge-yellow{ 109 | background-color: $brand-warning; 110 | } 111 | .badge-red{ 112 | background-color: $brand-danger; 113 | } 114 | 115 | h5{ 116 | font-size: 14px; 117 | margin: 10px; 118 | } 119 | 120 | .dropdown-menu li{ 121 | display: block; 122 | padding: 15px 2px; 123 | width: 25%; 124 | float: left; 125 | } 126 | 127 | li.adjustments-line, 128 | li.header-title, 129 | li.button-container{ 130 | width: 100%; 131 | height: 35px; 132 | min-height: inherit; 133 | } 134 | 135 | li.button-container{ 136 | height: auto; 137 | 138 | div{ 139 | margin-bottom: 5px; 140 | } 141 | } 142 | 143 | #sharrreTitle{ 144 | text-align: center; 145 | padding: 10px 0; 146 | height: 50px; 147 | } 148 | 149 | li.header-title{ 150 | height: 30px; 151 | line-height: 25px; 152 | font-size: 12px; 153 | font-weight: 600; 154 | text-align: center; 155 | text-transform: uppercase; 156 | } 157 | 158 | .adjustments-line{ 159 | p{ 160 | float: left; 161 | display: inline-block; 162 | margin-bottom: 0; 163 | font-size: 1em; 164 | color: #3C4858; 165 | } 166 | 167 | a{ 168 | color: transparent; 169 | 170 | .badge-colors{ 171 | position: relative; 172 | top: -2px; 173 | } 174 | 175 | a:hover, 176 | a:focus{ 177 | color: transparent; 178 | } 179 | } 180 | 181 | .togglebutton{ 182 | text-align: center; 183 | 184 | .label-switch{ 185 | position: relative; 186 | left: -10px; 187 | font-size: $font-size-mini; 188 | color: $default-color; 189 | 190 | &.label-right{ 191 | left: 10px; 192 | } 193 | } 194 | 195 | .toggle{ 196 | margin-right: 0; 197 | } 198 | } 199 | 200 | .dropdown-menu > li.adjustments-line > a{ 201 | padding-right: 0; 202 | padding-left: 0; 203 | border-bottom: 1px solid #ddd; 204 | border-radius: 0; 205 | margin: 0; 206 | } 207 | } 208 | 209 | 210 | 211 | .dropdown-menu{ 212 | > li{ 213 | & > a.img-holder{ 214 | font-size: 16px; 215 | text-align: center; 216 | border-radius: 10px; 217 | background-color: #FFF; 218 | border: 3px solid #FFF; 219 | padding-left: 0; 220 | padding-right: 0; 221 | opacity: 1; 222 | cursor: pointer; 223 | display: block; 224 | max-height: 100px; 225 | overflow: hidden; 226 | padding: 0; 227 | 228 | img{ 229 | margin-top: auto; 230 | } 231 | } 232 | 233 | a.switch-trigger:hover, 234 | & > a.switch-trigger:focus{ 235 | background-color: transparent; 236 | } 237 | 238 | &:hover, 239 | &:focus{ 240 | > a.img-holder{ 241 | border-color: rgba(0, 187, 255, 0.53);; 242 | } 243 | } 244 | } 245 | 246 | > .active > a.img-holder, 247 | > .active > a.img-holder{ 248 | border-color: #00bbff; 249 | background-color: #FFFFFF; 250 | } 251 | 252 | } 253 | 254 | .btn-social{ 255 | width: 50%; 256 | display: block; 257 | width: 48%; 258 | float: left; 259 | font-weight: 600; 260 | } 261 | 262 | .btn-social{ 263 | i{ 264 | margin-right: 5px; 265 | } 266 | 267 | &:first-child{ 268 | margin-right: 2%; 269 | } 270 | } 271 | 272 | .dropdown{ 273 | .dropdown-menu{ 274 | transform-origin: 0 0; 275 | 276 | &:before{ 277 | border-bottom: 16px solid rgba(0, 0, 0, 0); 278 | border-left: 16px solid rgba(0,0,0,0.2); 279 | border-top: 16px solid rgba(0,0,0,0); 280 | right: -27px; 281 | bottom: 425px; 282 | } 283 | 284 | &:after{ 285 | border-bottom: 16px solid rgba(0, 0, 0, 0); 286 | border-left: 16px solid #FFFFFF; 287 | border-top: 16px solid rgba(0,0,0,0); 288 | right: -26px; 289 | bottom: 425px; 290 | } 291 | 292 | &:before, 293 | &:after{ 294 | content: ""; 295 | display: inline-block; 296 | position: absolute; 297 | width: 16px; 298 | transform: translateY(-50px); 299 | -webkit-transform: translateY(-50px); 300 | -moz-transform: translateY(-50px); 301 | } 302 | } 303 | 304 | &.show-dropdown .show{ 305 | .dropdown-menu .show{ 306 | transform: translate3d(0, -60px, 0)!important; 307 | bottom: auto!important; 308 | top: 0!important; 309 | } 310 | } 311 | } 312 | 313 | .bootstrap-switch{ 314 | margin:0; 315 | } 316 | } 317 | 318 | .fixed-plugin { 319 | .show-dropdown { 320 | .dropdown-menu[x-placement=bottom-start] { 321 | @include transform-translate-y-fixed-plugin (-100px); 322 | 323 | &:before, 324 | &:after { 325 | top: 100px; 326 | } 327 | } 328 | .dropdown-menu[x-placement=top-start] { 329 | @include transform-translate-y-fixed-plugin (100px); 330 | } 331 | 332 | &.show { 333 | .dropdown-menu.show[x-placement=bottom-start] { 334 | @include transform-translate-y-fixed-plugin (-60px); 335 | } 336 | 337 | .dropdown-menu.show[x-placement=top-start] { 338 | @include transform-translate-y-fixed-plugin (470px); 339 | } 340 | } 341 | } 342 | } 343 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_footers.scss: -------------------------------------------------------------------------------- 1 | .footer{ 2 | padding: 24px 0; 3 | 4 | &.footer-default{ 5 | background-color: #f2f2f2; 6 | } 7 | 8 | nav{ 9 | display: inline-block; 10 | float: left; 11 | padding-left: 0; 12 | } 13 | 14 | ul{ 15 | margin-bottom: 0; 16 | padding: 0; 17 | list-style: none; 18 | 19 | li{ 20 | display: inline-block; 21 | 22 | a{ 23 | color: inherit; 24 | padding: $padding-base-vertical; 25 | font-size: $font-size-small; 26 | text-transform: uppercase; 27 | text-decoration: none; 28 | 29 | &:hover{ 30 | text-decoration: none; 31 | } 32 | } 33 | } 34 | } 35 | 36 | .copyright{ 37 | font-size: $font-size-small; 38 | line-height: 1.8; 39 | } 40 | 41 | &:after{ 42 | display: table; 43 | clear: both; 44 | content: " "; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_images.scss: -------------------------------------------------------------------------------- 1 | img{ 2 | max-width: 100%; 3 | border-radius: $border-radius-small; 4 | } 5 | .img-raised{ 6 | box-shadow: $box-shadow-raised; 7 | } 8 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_inputs.scss: -------------------------------------------------------------------------------- 1 | @include placeholder() { 2 | color: $dark-gray; 3 | }; 4 | 5 | 6 | .form-control { 7 | background-color: $white-color; 8 | border: 1px solid $medium-gray; 9 | border-radius: $border-radius-base; 10 | color: $font-color; 11 | line-height: normal; 12 | height: auto; 13 | font-size: $font-size-base; 14 | @include transition-input-focus-color(); 15 | @include box-shadow(none); 16 | 17 | &:focus { 18 | border: 1px solid $dark-gray; 19 | @include box-shadow(none); 20 | outline: 0 !important; 21 | color: $default-color; 22 | 23 | & + .input-group-append .input-group-text, 24 | & ~ .input-group-append .input-group-text, 25 | & + .input-group-prepend .input-group-text, 26 | & ~ .input-group-prepend .input-group-text{ 27 | border: 1px solid #ccc; 28 | border-left: none; 29 | background-color: $transparent-bg; 30 | } 31 | } 32 | 33 | .has-success &, 34 | .has-error &, 35 | .has-success &:focus, 36 | .has-error &:focus{ 37 | @include box-shadow(none); 38 | } 39 | 40 | .has-success &{ 41 | border: 1px solid $table-line-color; 42 | color: $font-color; 43 | 44 | &.form-control-success{ 45 | padding-right: 2.5em !important; 46 | } 47 | } 48 | .has-success &:focus{ 49 | border: 1px solid $success-color; 50 | color: $success-color; 51 | } 52 | .has-danger &{ 53 | background-color: $danger-input-bg; 54 | border: 1px solid $danger-color; 55 | color: $danger-color; 56 | 57 | &.form-control-danger{ 58 | padding-right: 2.5em !important; 59 | } 60 | } 61 | .has-danger &:focus{ 62 | background-color: $white-color; 63 | border: 1px solid $danger-color; 64 | } 65 | 66 | & + .form-control-feedback{ 67 | border-radius: $border-radius-large; 68 | font-size: $font-size-base; 69 | margin-top: -7px; 70 | position: absolute; 71 | right: 10px; 72 | top: 50%; 73 | vertical-align: middle; 74 | } 75 | 76 | .open &{ 77 | border-radius: $border-radius-large $border-radius-large 0 0; 78 | border-bottom-color: transparent; 79 | } 80 | 81 | & + .input-group-append .input-group-text, 82 | & + .input-group-prepend .input-group-text{ 83 | background-color: $white-bg; 84 | } 85 | } 86 | 87 | 88 | @include form-control-lg-padding($padding-large-vertical, $padding-input-horizontal); 89 | @include input-base-padding($padding-input-vertical, $padding-input-horizontal); 90 | 91 | .input-group { 92 | &.has-success { 93 | .input-group-prepend, 94 | .input-group-append { 95 | .input-group-text { 96 | border: 1px solid $table-line-color; 97 | color: $font-color; 98 | background-color: $white-color; 99 | border-right: none; 100 | } 101 | } 102 | } 103 | } 104 | 105 | .form-group.no-border, 106 | .input-group.no-border{ 107 | .form-control, 108 | .form-control + .input-group-prepend .input-group-text, 109 | .form-control + .input-group-append .input-group-text{ 110 | background-color: $opacity-gray-3; 111 | border: medium none; 112 | &:focus, 113 | &:active, 114 | &:active{ 115 | border: medium none; 116 | background-color: $opacity-gray-5; 117 | } 118 | } 119 | 120 | .form-control{ 121 | &:focus{ 122 | & + .input-group-prepend .input-group-text, 123 | & + .input-group-append .input-group-text{ 124 | background-color: $opacity-gray-5; 125 | } 126 | } 127 | } 128 | 129 | .input-group-prepend .input-group-text, 130 | .input-group-append .input-group-text{ 131 | background-color: $opacity-gray-3; 132 | border: none; 133 | } 134 | } 135 | 136 | .has-error{ 137 | .form-control-feedback, .control-label{ 138 | color: $danger-color; 139 | } 140 | } 141 | .has-success{ 142 | .form-control-feedback, .control-label{ 143 | color: $success-color; 144 | } 145 | } 146 | 147 | .input-group.has-danger { 148 | .input-group-prepend { 149 | border-radius: $border-radius-base; 150 | .input-group-text { 151 | border: 1px solid $danger-color; 152 | border-right: none; 153 | } 154 | } 155 | .error { 156 | display: block; 157 | width: 100%; 158 | color: $danger-color; 159 | margin-top: 3px; 160 | } 161 | } 162 | 163 | .input-group.has-success { 164 | .input-group-prepend { 165 | border-radius: $border-radius-base; 166 | .input-group-text { 167 | // border: 1px solid $success-color; 168 | border-right: none; 169 | } 170 | } 171 | } 172 | 173 | 174 | .input-group-focus{ 175 | .input-group-prepend .input-group-text, 176 | .input-group-append .input-group-text{ 177 | background-color: $white-bg; 178 | border-color: $dark-gray; 179 | } 180 | 181 | &.no-border{ 182 | .input-group-prepend .input-group-text, 183 | .input-group-append .input-group-text{ 184 | background-color: $opacity-gray-5; 185 | } 186 | } 187 | 188 | &.has-danger { 189 | .input-group-append, 190 | .input-group-prepend { 191 | .input-group-text { 192 | background-color: $danger-input-bg; 193 | } 194 | } 195 | } 196 | 197 | &.has-success { 198 | .input-group-append, 199 | .input-group-prepend { 200 | .input-group-text { 201 | background-color: $success-input-bg; 202 | border: 1px solid $success-color; 203 | border-right: none; 204 | } 205 | } 206 | } 207 | } 208 | 209 | .input-group-append .input-group-text, 210 | .input-group-prepend .input-group-text { 211 | background-color: transparent; 212 | border: 1px solid $light-gray; 213 | color: $default-color; 214 | border-top-right-radius: $border-radius-base; 215 | border-bottom-right-radius: $border-radius-base; 216 | 217 | & i{ 218 | opacity: .5; 219 | } 220 | 221 | @include transition-input-focus-color(); 222 | 223 | .has-danger &{ 224 | background-color: $danger-input-bg; 225 | } 226 | .has-success &{ 227 | background-color: $success-input-bg; 228 | } 229 | .has-danger.input-group-focus &{ 230 | background-color: $white-color; 231 | color: $danger-color; 232 | } 233 | .has-success.input-group-focus &{ 234 | background-color: $white-color; 235 | color: $success-color; 236 | } 237 | .has-danger .form-control:focus + &{ 238 | color: $danger-color; 239 | } 240 | .has-success .form-control:focus + &{ 241 | color: $success-color; 242 | } 243 | 244 | & + .form-control, 245 | & ~ .form-control{ 246 | @include input-size($padding-base-vertical - 1, $padding-base-horizontal); 247 | padding-left: 18px; 248 | } 249 | 250 | i{ 251 | width: 17px; 252 | } 253 | } 254 | 255 | .input-group-append, 256 | .input-group-prepend{ 257 | margin: 0; 258 | } 259 | 260 | 261 | .input-group-append .input-group-text{ 262 | border-left: none; 263 | } 264 | .input-group-prepend .input-group-text{ 265 | border-right: none; 266 | } 267 | 268 | .input-group, 269 | .form-group{ 270 | margin-bottom: 10px; 271 | position: relative; 272 | 273 | .form-control-static{ 274 | margin-top: 9px; 275 | } 276 | &.has-danger { 277 | .error { 278 | color: $danger-color; 279 | } 280 | } 281 | } 282 | .input-group[disabled]{ 283 | .input-group-prepend .input-group-text, 284 | .input-group-append .input-group-text{ 285 | background-color: $light-gray; 286 | } 287 | } 288 | 289 | .input-group .form-control:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child){ 290 | border-radius: $border-radius-base; 291 | border-top-left-radius: 0; 292 | border-bottom-left-radius: 0; 293 | border-left: 0 none; 294 | } 295 | 296 | .input-group .form-control:first-child, 297 | .input-group-btn:first-child > .dropdown-toggle, 298 | .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { 299 | border-right: 0 none; 300 | } 301 | .input-group .form-control:last-child, 302 | .input-group-btn:last-child > .dropdown-toggle, 303 | .input-group-btn:first-child > .btn:not(:first-child) { 304 | border-left: 0 none; 305 | } 306 | .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { 307 | background-color: $light-gray; 308 | color: $default-color; 309 | cursor: not-allowed; 310 | } 311 | 312 | .input-group-btn .btn{ 313 | border-width: $border-thin; 314 | padding: $padding-btn-vertical $padding-base-horizontal; 315 | } 316 | .input-group-btn .btn-default:not(.btn-fill){ 317 | border-color: $medium-gray; 318 | } 319 | 320 | .input-group-btn:last-child > .btn{ 321 | margin-left: 0; 322 | } 323 | textarea.form-control{ 324 | max-width: 100%; 325 | max-height: 80px; 326 | padding: 10px 10px 0 0; 327 | resize: none; 328 | border: none; 329 | border: 1px solid $light-gray; 330 | border-radius: $border-radius-base; 331 | line-height: 2; 332 | } 333 | 334 | .has-success, 335 | .has-danger{ 336 | 337 | &.form-group .form-control, 338 | &.form-group.no-border .form-control{ 339 | padding-right: $padding-input-horizontal + 21; 340 | } 341 | } 342 | 343 | .form.form-newsletter .form-group{ 344 | float: left; 345 | width: 78%; 346 | margin-right: 2%; 347 | margin-top: 9px; 348 | } 349 | 350 | .input-group .input-group-btn{ 351 | padding: 0 12px; 352 | } 353 | 354 | // Input files - hide actual input - requires specific markup in the sample. 355 | .form-group input[type=file] { 356 | opacity: 0; 357 | position: absolute; 358 | top: 0; 359 | right: 0; 360 | bottom: 0; 361 | left: 0; 362 | width: 100%; 363 | height: 100%; 364 | z-index: 100; 365 | } 366 | 367 | .form-text{ 368 | font-size: $font-size-small; 369 | } 370 | 371 | .form-control-lg{ 372 | padding: 0; 373 | font-size: inherit; 374 | line-height: 0; 375 | border-radius: 0; 376 | } 377 | 378 | .form-horizontal{ 379 | .col-form-label, 380 | .label-on-right{ 381 | padding: 10px 5px 0 15px; 382 | text-align: right; 383 | max-width: 180px; 384 | } 385 | 386 | .checkbox-radios{ 387 | margin-bottom: 15px; 388 | 389 | .form-check:first-child{ 390 | margin-top: 8px; 391 | } 392 | } 393 | 394 | .label-on-right{ 395 | text-align: left; 396 | padding: 10px 15px 0 5px; 397 | } 398 | 399 | .form-check-inline{ 400 | margin-top: 6px; 401 | } 402 | } 403 | 404 | // .input-group .input-group-prepend .input-group-text { 405 | // padding: 7px 0 10px 10px; 406 | // } 407 | // .input-group.no-border .form-control+.input-group-append .input-group-text { 408 | // padding: 8px 11px 11px 0; 409 | // } 410 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_misc.scss: -------------------------------------------------------------------------------- 1 | body{ 2 | color: $black-color; 3 | font-size: $font-size-base; 4 | font-family: $sans-serif-family; 5 | -moz-osx-font-smoothing: grayscale; 6 | -webkit-font-smoothing: antialiased; 7 | } 8 | 9 | .main{ 10 | position: relative; 11 | background: $white-color; 12 | } 13 | /* Animations */ 14 | .nav-pills .nav-link, 15 | .navbar, 16 | .nav-tabs .nav-link, 17 | .sidebar .nav a, 18 | .sidebar .nav a i, 19 | .animation-transition-general, 20 | .tag, 21 | .tag [data-role="remove"], 22 | .animation-transition-general{ 23 | @include transition($general-transition-time, $transition-ease); 24 | } 25 | 26 | //transition for dropdown caret 27 | .dropdown-toggle:after, 28 | .bootstrap-switch-label:before, 29 | .caret{ 30 | @include transition($fast-transition-time, $transition-ease); 31 | } 32 | 33 | .dropdown-toggle[aria-expanded="true"]:after, 34 | a[data-toggle="collapse"][aria-expanded="true"] .caret, 35 | .card-collapse .card a[data-toggle="collapse"][aria-expanded="true"] i, 36 | .card-collapse .card a[data-toggle="collapse"].expanded i{ 37 | @include rotate-180(); 38 | } 39 | 40 | .button-bar{ 41 | display: block; 42 | position: relative; 43 | width: 22px; 44 | height: 1px; 45 | border-radius: 1px; 46 | background: $white-bg; 47 | 48 | & + .button-bar{ 49 | margin-top: 7px; 50 | } 51 | 52 | &:nth-child(2){ 53 | width: 17px; 54 | } 55 | } 56 | 57 | .caret{ 58 | display: inline-block; 59 | width: 0; 60 | height: 0; 61 | margin-left: 2px; 62 | vertical-align: middle; 63 | border-top: 4px dashed; 64 | border-top: 4px solid\9; 65 | border-right: 4px solid transparent; 66 | border-left: 4px solid transparent; 67 | } 68 | 69 | .pull-left{ 70 | float: left; 71 | } 72 | .pull-right{ 73 | float: right; 74 | } 75 | 76 | 77 | .offline-doc { 78 | .navbar.navbar-transparent{ 79 | padding-top: 25px; 80 | border-bottom: none; 81 | 82 | .navbar-minimize { 83 | display: none; 84 | } 85 | .navbar-brand, 86 | .collapse .navbar-nav .nav-link { 87 | color: $white-color !important; 88 | } 89 | } 90 | .footer { 91 | z-index: 3 !important; 92 | } 93 | .page-header{ 94 | .container { 95 | z-index: 3; 96 | } 97 | &:after { 98 | background-color: rgba(0, 0, 0, 0.5); 99 | content: ""; 100 | display: block; 101 | height: 100%; 102 | left: 0; 103 | position: absolute; 104 | top: 0; 105 | width: 100%; 106 | z-index: 2; 107 | } 108 | } 109 | } 110 | 111 | .fixed-plugin { 112 | .dropdown-menu li { 113 | padding: 2px !important; 114 | } 115 | } 116 | 117 | // badge color 118 | 119 | .badge{ 120 | &.badge-default{ 121 | @include badge-color($default-color); 122 | } 123 | &.badge-primary{ 124 | @include badge-color($primary-color); 125 | } 126 | &.badge-info{ 127 | @include badge-color($info-color); 128 | } 129 | &.badge-success{ 130 | @include badge-color($success-color); 131 | } 132 | &.badge-warning{ 133 | @include badge-color($warning-color); 134 | } 135 | &.badge-danger{ 136 | @include badge-color($danger-color); 137 | } 138 | &.badge-neutral{ 139 | @include badge-color($white-color); 140 | color: inherit; 141 | } 142 | } 143 | 144 | .card-user { 145 | form { 146 | .form-group { 147 | margin-bottom: 20px; 148 | } 149 | } 150 | } 151 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_mixins.scss: -------------------------------------------------------------------------------- 1 | //Components 2 | @import "mixins/buttons"; 3 | @import "mixins/vendor-prefixes"; 4 | @import "mixins/inputs"; 5 | @import "mixins/page-header"; 6 | @import "mixins/dropdown"; 7 | @import "mixins/cards"; 8 | @import "mixins/transparency"; 9 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_navbar.scss: -------------------------------------------------------------------------------- 1 | .navbar{ 2 | padding-top: $navbar-padding-base; 3 | padding-bottom: $navbar-padding-base; 4 | min-height: 53px; 5 | margin-bottom: 20px; 6 | 7 | a{ 8 | vertical-align: middle; 9 | 10 | &:not(.btn):not(.dropdown-item){ 11 | color: $white-color; 12 | } 13 | 14 | &.dropdown-item{ 15 | color: $default-color; 16 | } 17 | } 18 | 19 | 20 | 21 | &.bg-white{ 22 | .input-group .form-control, 23 | .input-group.no-border .form-control{ 24 | color: $default-color; 25 | 26 | @include placeholder(){ 27 | color: $default-color; 28 | }; 29 | } 30 | .input-group-prepend .input-group-text i, 31 | .input-group-append .input-group-text i{ 32 | color: $default-color; 33 | opacity: .5; 34 | } 35 | } 36 | 37 | .form-group, 38 | .input-group{ 39 | margin: 0; 40 | margin-left: -3px; 41 | margin-right: 5px; 42 | 43 | .form-group-addon, 44 | .input-group-prepend .input-group-text, 45 | .input-group-append .input-group-text{ 46 | color: $default-color; 47 | 48 | i { 49 | opacity: 1; 50 | } 51 | } 52 | 53 | &.no-border{ 54 | .form-control{ 55 | color: $default-color; 56 | 57 | @include placeholder(){ 58 | color: $default-color; 59 | }; 60 | } 61 | } 62 | } 63 | 64 | p{ 65 | display: inline-block; 66 | margin: 0; 67 | line-height: 1.8em; 68 | font-size: 1em; 69 | font-weight: 400; 70 | } 71 | 72 | &.navbar-absolute{ 73 | position: absolute; 74 | width: 100%; 75 | padding-top: 10px; 76 | z-index: 1029; 77 | } 78 | 79 | .documentation &{ 80 | &.fixed-top{ 81 | left: 0; 82 | width: initial; 83 | } 84 | } 85 | 86 | .navbar-wrapper{ 87 | display: inline-flex; 88 | align-items: center; 89 | 90 | .navbar-minimize{ 91 | padding-right: 10px; 92 | 93 | .btn{ 94 | margin: 0; 95 | } 96 | } 97 | 98 | .navbar-toggle{ 99 | .navbar-toggler{ 100 | padding-left: 0; 101 | } 102 | 103 | &:hover{ 104 | & .navbar-toggler-bar.bar2{ 105 | width: 22px; 106 | } 107 | } 108 | } 109 | } 110 | 111 | 112 | 113 | .navbar-nav{ 114 | &.navbar-logo{ 115 | position: absolute; 116 | left: 0; 117 | right: 0; 118 | margin: 0 auto; 119 | width: 49px; 120 | top: -4px; 121 | } 122 | 123 | .nav-link.btn{ 124 | padding: $padding-btn-vertical $padding-btn-horizontal; 125 | &.btn-lg{ 126 | padding: $padding-large-vertical $padding-large-horizontal; 127 | } 128 | &.btn-sm{ 129 | padding: $padding-small-vertical $padding-small-horizontal; 130 | } 131 | } 132 | 133 | .nav-link{ 134 | text-transform: uppercase; 135 | font-size: $font-size-mini; 136 | padding: $padding-base-vertical $padding-base-horizontal; 137 | line-height: $line-height-nav-link; 138 | margin-right: 3px; 139 | 140 | i.fa + p, 141 | i.nc-icon + p{ 142 | margin-left: 3px; 143 | } 144 | 145 | i.fa, 146 | i.nc-icon{ 147 | font-size: 18px; 148 | position: relative; 149 | top: 3px; 150 | text-align: center; 151 | width: 21px; 152 | } 153 | 154 | i.nc-icon{ 155 | top: 4px; 156 | font-size: 16px; 157 | } 158 | 159 | &.profile-photo{ 160 | .profile-photo-small{ 161 | width: 27px; 162 | height: 27px; 163 | } 164 | } 165 | 166 | &.disabled{ 167 | opacity: .5; 168 | color: $white-color; 169 | } 170 | } 171 | 172 | .nav-item.active .nav-link:not(.btn), 173 | .nav-item .nav-link:not(.btn):focus, 174 | .nav-item .nav-link:not(.btn):hover, 175 | .nav-item .nav-link:not(.btn):active{ 176 | border-radius: $border-radius-small; 177 | color: $default-color; 178 | } 179 | } 180 | 181 | .logo-container{ 182 | width: 27px; 183 | height: 27px; 184 | overflow: hidden; 185 | margin: 0 auto; 186 | border-radius: 50%; 187 | border: 1px solid transparent; 188 | } 189 | 190 | .navbar-brand{ 191 | text-transform: capitalize; 192 | font-size: $font-size-large-navbar; 193 | padding-top: $padding-base-vertical; 194 | padding-bottom: $padding-base-vertical; 195 | line-height: $line-height-nav-link; 196 | } 197 | 198 | .navbar-toggler{ 199 | width: 37px; 200 | height: 27px; 201 | vertical-align: middle; 202 | outline: 0; 203 | cursor: pointer; 204 | 205 | & .navbar-toggler-bar.navbar-kebab{ 206 | width: 3px; 207 | height: 3px; 208 | border-radius: 50%; 209 | margin: 0 auto; 210 | } 211 | } 212 | 213 | .button-dropdown{ 214 | .navbar-toggler-bar:nth-child(2){ 215 | width: 17px; 216 | } 217 | } 218 | 219 | &.navbar-transparent{ 220 | background-color: $transparent-bg !important; 221 | box-shadow: none; 222 | border-bottom: 1px solid #ddd; 223 | 224 | a:not(.dropdown-item):not(.btn){ 225 | color: $default-color; 226 | 227 | &.disabled{ 228 | opacity: .5; 229 | color: $default-color; 230 | } 231 | } 232 | 233 | .button-bar{ 234 | background: $default-color; 235 | } 236 | 237 | .nav-item .nav-link:not(.btn){ 238 | color: $default-color; 239 | } 240 | .nav-item.active .nav-link:not(.btn), 241 | .nav-item .nav-link:not(.btn):focus, 242 | .nav-item .nav-link:not(.btn):hover, 243 | .nav-item .nav-link:not(.btn):focus:hover, 244 | .nav-item .nav-link:not(.btn):active { 245 | color: $primary-color; 246 | } 247 | } 248 | 249 | &.bg-white { 250 | a:not(.dropdown-item):not(.btn){ 251 | color: $default-color; 252 | 253 | &.disabled{ 254 | opacity: .5; 255 | color: $default-color; 256 | } 257 | } 258 | 259 | .button-bar{ 260 | background: $default-color; 261 | } 262 | 263 | .nav-item.active .nav-link:not(.btn), 264 | .nav-item .nav-link:not(.btn):focus, 265 | .nav-item .nav-link:not(.btn):hover, 266 | .nav-item .nav-link:not(.btn):active{ 267 | color: $info-color; 268 | } 269 | 270 | .logo-container{ 271 | border: 1px solid $default-color; 272 | } 273 | } 274 | 275 | .navbar-collapse { 276 | .nav-item { 277 | a { 278 | font-size: $font-size-base; 279 | } 280 | } 281 | } 282 | } 283 | 284 | .bg-default{ 285 | background-color: $default-color !important; 286 | } 287 | 288 | .bg-primary{ 289 | background-color: $primary-color !important; 290 | } 291 | 292 | .bg-info{ 293 | background-color: $info-color !important; 294 | } 295 | 296 | .bg-success{ 297 | background-color: $success-color !important; 298 | } 299 | 300 | .bg-danger{ 301 | background-color: $danger-color !important; 302 | } 303 | 304 | .bg-warning{ 305 | background-color: $warning-color !important; 306 | } 307 | 308 | .bg-white{ 309 | background-color: $white-color !important; 310 | } 311 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_page-header.scss: -------------------------------------------------------------------------------- 1 | .page-header{ 2 | min-height: 100vh; 3 | max-height: 1000px; 4 | padding: 0; 5 | color: $white-color; 6 | position: relative; 7 | 8 | .page-header-image{ 9 | position: absolute; 10 | background-size: cover; 11 | background-position: center center; 12 | width: 100%; 13 | height: 100%; 14 | z-index: -1; 15 | } 16 | 17 | .content-center{ 18 | position: absolute; 19 | top: 50%; 20 | left: 50%; 21 | z-index: 2; 22 | -ms-transform: translate(-50%, -50%); 23 | -webkit-transform: translate(-50%, -50%); 24 | transform: translate(-50%, -50%); 25 | text-align: center; 26 | color: #FFFFFF; 27 | padding: 0 15px; 28 | width: 100%; 29 | max-width: 880px; 30 | 31 | } 32 | 33 | footer{ 34 | position: absolute; 35 | bottom: 0; 36 | width: 100%; 37 | } 38 | 39 | .container{ 40 | height: 100%; 41 | z-index: 1; 42 | } 43 | 44 | .category, 45 | .description{ 46 | color: $opacity-8; 47 | } 48 | 49 | &.page-header-small{ 50 | min-height: 60vh; 51 | max-height: 440px; 52 | } 53 | 54 | &.page-header-mini{ 55 | min-height: 40vh; 56 | max-height: 340px; 57 | } 58 | 59 | .title{ 60 | margin-bottom: 15px; 61 | } 62 | .title + h4{ 63 | margin-top: 10px; 64 | } 65 | 66 | &:after, 67 | &:before{ 68 | position: absolute; 69 | z-index: 0; 70 | width: 100%; 71 | height: 100%; 72 | display: block; 73 | left: 0; 74 | top: 0; 75 | content: ""; 76 | } 77 | 78 | &:before{ 79 | background-color: rgba(0,0,0,.3); 80 | } 81 | 82 | &[filter-color="orange"]{ 83 | @include linear-gradient(rgba($black-color,.20), rgba(224, 23, 3, 0.6)); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_sidebar-and-main-panel.scss: -------------------------------------------------------------------------------- 1 | .wrapper{ 2 | position: relative; 3 | top: 0; 4 | height: 100vh; 5 | 6 | &.wrapper-full-page{ 7 | min-height: 100vh; 8 | height: auto; 9 | } 10 | } 11 | 12 | .sidebar, 13 | .off-canvas-sidebar{ 14 | position: fixed; 15 | top: 0; 16 | height: 100%; 17 | bottom: 0; 18 | width: 260px; 19 | left: 0; 20 | z-index: 1030; 21 | border-right: 1px solid #ddd; 22 | 23 | .sidebar-wrapper{ 24 | position: relative; 25 | height: calc(100vh - 75px); 26 | overflow: auto; 27 | width: 260px; 28 | z-index: 4; 29 | padding-bottom: 100px; 30 | 31 | .dropdown .dropdown-backdrop{ 32 | display: none !important; 33 | } 34 | 35 | .navbar-form{ 36 | border: none; 37 | } 38 | } 39 | 40 | .navbar-minimize{ 41 | position: absolute; 42 | right: 20px; 43 | top: 2px; 44 | opacity: 1; 45 | 46 | @extend .animation-transition-general; 47 | } 48 | .logo-tim{ 49 | border-radius: 50%; 50 | border: 1px solid #333; 51 | display: block; 52 | height: 61px; 53 | width: 61px; 54 | float: left; 55 | overflow: hidden; 56 | 57 | img{ 58 | width: 60px; 59 | height: 60px; 60 | } 61 | } 62 | 63 | .nav{ 64 | margin-top: 20px; 65 | display: block; 66 | 67 | .caret{ 68 | top: 14px; 69 | position: absolute; 70 | right: 10px; 71 | } 72 | 73 | li{ 74 | > a + div .nav li > a{ 75 | margin-top: 7px; 76 | } 77 | 78 | > a{ 79 | margin: 10px 15px 0; 80 | color: $white-color; 81 | display: block; 82 | text-decoration: none; 83 | position: relative; 84 | text-transform: uppercase; 85 | cursor: pointer; 86 | font-size: 12px; 87 | padding: 10px 8px; 88 | line-height: 30px; 89 | opacity: .7; 90 | } 91 | 92 | .nav > li > a{ 93 | padding: 5px 8px; 94 | } 95 | 96 | &.active > a, 97 | &.active > a > i { 98 | opacity: 1; 99 | } 100 | 101 | &:hover:not(.active) > a, 102 | &:focus:not(.active) > a { 103 | opacity: 1; 104 | } 105 | } 106 | 107 | i{ 108 | font-size: 24px; 109 | float: left; 110 | margin-right: 12px; 111 | line-height: 30px; 112 | width: 34px; 113 | text-align: center; 114 | color: $opacity-5; 115 | position: relative; 116 | } 117 | 118 | p { 119 | margin-bottom: 0; 120 | } 121 | 122 | .collapse, 123 | .collapsing { 124 | .nav { 125 | margin-top: 0; 126 | } 127 | } 128 | } 129 | 130 | .sidebar-background{ 131 | position: absolute; 132 | z-index: 1; 133 | height: 100%; 134 | width: 100%; 135 | display: block; 136 | top: 0; 137 | left: 0; 138 | background-size: cover; 139 | background-position: center center; 140 | 141 | &:after{ 142 | position: absolute; 143 | z-index: 3; 144 | width: 100%; 145 | height: 100%; 146 | content: ""; 147 | display: block; 148 | background: #FFFFFF; 149 | opacity: 1; 150 | } 151 | } 152 | 153 | .logo{ 154 | position: relative; 155 | padding: 7px $padding-base-horizontal; 156 | z-index: 4; 157 | 158 | a.logo-mini, 159 | a.logo-normal{ 160 | @extend .animation-transition-general; 161 | } 162 | 163 | a.logo-mini{ 164 | opacity: 1; 165 | float: left; 166 | width: 34px; 167 | text-align: center; 168 | margin-left: 10px; 169 | margin-right: 12px; 170 | } 171 | 172 | a.logo-normal{ 173 | display: block; 174 | opacity: 1; 175 | padding: 11px 0 8px; 176 | @include transform-translate-x(0px); 177 | } 178 | 179 | &:after{ 180 | content: ''; 181 | position: absolute; 182 | bottom: 0; 183 | right: 15px; 184 | height: 1px; 185 | width: calc(100% - 30px); 186 | background-color: $opacity-5; 187 | 188 | } 189 | 190 | p{ 191 | float: left; 192 | font-size: 20px; 193 | margin: 10px 10px; 194 | color: $white-color; 195 | line-height: 20px; 196 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 197 | } 198 | 199 | .simple-text{ 200 | text-transform: uppercase; 201 | padding: $padding-base-vertical 0; 202 | display: block; 203 | white-space: nowrap; 204 | font-size: $font-size-large; 205 | color: $white-color; 206 | text-decoration: none; 207 | font-weight: $font-weight-normal; 208 | line-height: 30px; 209 | overflow: hidden; 210 | } 211 | } 212 | 213 | .logo-tim{ 214 | border-radius: 50%; 215 | border: 1px solid #333; 216 | display: block; 217 | height: 61px; 218 | width: 61px; 219 | float: left; 220 | overflow: hidden; 221 | 222 | img{ 223 | width: 60px; 224 | height: 60px; 225 | } 226 | } 227 | 228 | &:before, 229 | &:after{ 230 | display: block; 231 | content: ""; 232 | opacity: 1; 233 | position: absolute; 234 | width: 100%; 235 | height: 100%; 236 | top: 0; 237 | left: 0; 238 | } 239 | 240 | &:after{ 241 | @include icon-gradient($default-color); 242 | z-index: 3; 243 | } 244 | 245 | &[data-color="white"]{ 246 | @include sidebar-color($white-color); 247 | @include sidebar-text-color($default-color); 248 | } 249 | &[data-color="black"]{ 250 | @include sidebar-color($dark-color); 251 | } 252 | 253 | 254 | // Active color changing 255 | 256 | &[data-active-color="primary"]{ 257 | @include sidebar-active-color($primary-color); 258 | } 259 | &[data-active-color="info"]{ 260 | @include sidebar-active-color($info-color); 261 | } 262 | &[data-active-color="success"]{ 263 | @include sidebar-active-color($success-color); 264 | } 265 | &[data-active-color="warning"]{ 266 | @include sidebar-active-color($warning-color); 267 | } 268 | &[data-active-color="danger"]{ 269 | @include sidebar-active-color($danger-color); 270 | } 271 | &[data-active-color="default"]{ 272 | @include sidebar-active-color($default-color); 273 | } 274 | } 275 | 276 | .visible-on-sidebar-regular{ 277 | display: inline-block !important; 278 | } 279 | .visible-on-sidebar-mini{ 280 | display: none !important; 281 | } 282 | 283 | .off-canvas-sidebar{ 284 | .nav { 285 | > li > a, 286 | > li > a:hover{ 287 | color: $white-color; 288 | } 289 | 290 | > li > a:focus{ 291 | background: rgba(200, 200, 200, 0.2); 292 | } 293 | } 294 | } 295 | 296 | 297 | .main-panel{ 298 | position: relative; 299 | float: right; 300 | width: $sidebar-width; 301 | background-color: #f4f3ef;; 302 | 303 | 304 | @include transition (0.50s, cubic-bezier(0.685, 0.0473, 0.346, 1)); 305 | 306 | > .content{ 307 | padding: 0 30px 30px; 308 | min-height: calc(100vh - 123px); 309 | margin-top: 93px; 310 | } 311 | 312 | > .navbar{ 313 | margin-bottom: 0; 314 | } 315 | 316 | 317 | .header{ 318 | margin-bottom: 50px; 319 | } 320 | } 321 | 322 | 323 | .perfect-scrollbar-on{ 324 | .sidebar, 325 | .main-panel{ 326 | height: 100%; 327 | max-height: 100%; 328 | } 329 | } 330 | 331 | .panel-header { 332 | height: 260px; 333 | padding-top: 80px; 334 | padding-bottom: 45px; 335 | background: #141E30; /* fallback for old browsers */ 336 | background: -webkit-gradient(linear, left top, right top, from(#0c2646), color-stop(60%, #204065), to(#2a5788)); 337 | background: linear-gradient(to right, #0c2646 0%, #204065 60%, #2a5788 100%); 338 | position: relative; 339 | overflow: hidden; 340 | 341 | .header{ 342 | .title{ 343 | color: $white-color; 344 | } 345 | .category{ 346 | max-width: 600px; 347 | color: $opacity-5; 348 | margin: 0 auto; 349 | font-size: 13px; 350 | 351 | a{ 352 | color: $white-color; 353 | } 354 | } 355 | } 356 | } 357 | 358 | .panel-header-sm{ 359 | height: 135px; 360 | } 361 | 362 | .panel-header-lg{ 363 | height: 380px 364 | } 365 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_tables.scss: -------------------------------------------------------------------------------- 1 | .table{ 2 | 3 | .img-wrapper{ 4 | width: 40px; 5 | height: 40px; 6 | border-radius: 50%; 7 | overflow: hidden; 8 | margin: 0 auto; 9 | } 10 | 11 | .img-row{ 12 | max-width: 60px; 13 | width: 60px; 14 | } 15 | 16 | .form-check{ 17 | margin: 0; 18 | 19 | & label .form-check-sign::before, 20 | & label .form-check-sign::after{ 21 | top: -17px; 22 | left: 4px; 23 | } 24 | } 25 | 26 | .btn{ 27 | margin: 0; 28 | } 29 | 30 | small,.small{ 31 | font-weight: 300; 32 | } 33 | 34 | .card-tasks .card-body &{ 35 | margin-bottom: 0; 36 | 37 | > thead > tr > th, 38 | > tbody > tr > th, 39 | > tfoot > tr > th, 40 | > thead > tr > td, 41 | > tbody > tr > td, 42 | > tfoot > tr > td{ 43 | padding-top: 0; 44 | padding-bottom: 0; 45 | } 46 | } 47 | 48 | > thead > tr > th{ 49 | font-size: 14px; 50 | font-weight: $font-weight-bold; 51 | padding-bottom: 0; 52 | text-transform: uppercase; 53 | border: 0; 54 | } 55 | 56 | .radio, 57 | .checkbox{ 58 | margin-top: 0; 59 | margin-bottom: 0; 60 | padding: 0; 61 | width: 15px; 62 | 63 | .icons{ 64 | position: relative; 65 | } 66 | 67 | label{ 68 | &:after, 69 | &:before{ 70 | top: -17px; 71 | left: -3px; 72 | } 73 | } 74 | } 75 | > thead > tr > th, 76 | > tbody > tr > th, 77 | > tfoot > tr > th, 78 | > thead > tr > td, 79 | > tbody > tr > td, 80 | > tfoot > tr > td{ 81 | padding: 12px 7px; 82 | vertical-align: middle; 83 | } 84 | 85 | .th-description{ 86 | max-width: 150px; 87 | } 88 | .td-price{ 89 | font-size: 26px; 90 | font-weight: $font-weight-light; 91 | margin-top: 5px; 92 | position: relative; 93 | top: 4px; 94 | text-align: right; 95 | } 96 | .td-total{ 97 | font-weight: $font-weight-bold; 98 | font-size: $font-size-h5; 99 | padding-top: 20px; 100 | text-align: right; 101 | } 102 | 103 | .td-actions .btn{ 104 | margin: 0px; 105 | } 106 | 107 | > tbody > tr{ 108 | position: relative; 109 | } 110 | } 111 | 112 | .table-shopping{ 113 | > thead > tr > th{ 114 | font-size: $font-size-h6; 115 | text-transform: uppercase; 116 | } 117 | > tbody > tr > td{ 118 | font-size: $font-paragraph; 119 | 120 | b{ 121 | display: block; 122 | margin-bottom: 5px; 123 | } 124 | } 125 | .td-name{ 126 | font-weight: $font-weight-normal; 127 | font-size: 1.5em; 128 | small{ 129 | color: $dark-gray; 130 | font-size: 0.75em; 131 | font-weight: $font-weight-light; 132 | } 133 | } 134 | .td-number{ 135 | font-weight: $font-weight-light; 136 | font-size: $font-size-h4; 137 | } 138 | .td-name{ 139 | min-width: 200px; 140 | } 141 | .td-number{ 142 | text-align: right; 143 | min-width: 170px; 144 | 145 | small{ 146 | margin-right: 3px; 147 | } 148 | } 149 | 150 | .img-container{ 151 | width: 120px; 152 | max-height: 160px; 153 | overflow: hidden; 154 | display: block; 155 | 156 | img{ 157 | width: 100%; 158 | } 159 | } 160 | } 161 | 162 | .table-responsive{ 163 | overflow: scroll; 164 | padding-bottom: 10px; 165 | } 166 | 167 | #tables .table-responsive{ 168 | margin-bottom: 30px; 169 | } 170 | 171 | .table-hover>tbody>tr:hover{ 172 | background-color: #f5f5f5; 173 | } 174 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/_typography.scss: -------------------------------------------------------------------------------- 1 | button, 2 | input, 3 | optgroup, 4 | select, 5 | textarea{ 6 | font-family: $sans-serif-family; 7 | } 8 | h1,h2,h3,h4,h5,h6{ 9 | font-weight: $font-weight-normal; 10 | } 11 | 12 | a{ 13 | color: $primary-color; 14 | &:hover, 15 | &:focus{ 16 | color: $primary-color; 17 | } 18 | } 19 | h1, .h1 { 20 | font-size: $font-size-h1; 21 | line-height: 1.15; 22 | margin-bottom: $margin-base-vertical * 2; 23 | 24 | small{ 25 | font-weight: $font-weight-bold; 26 | text-transform: uppercase; 27 | opacity: .8; 28 | } 29 | } 30 | h2, .h2{ 31 | font-size: $font-size-h2; 32 | margin-bottom: $margin-base-vertical * 2; 33 | } 34 | h3, .h3{ 35 | font-size: $font-size-h3; 36 | margin-bottom: $margin-base-vertical * 2; 37 | line-height: 1.4em; 38 | } 39 | h4, .h4{ 40 | font-size: $font-size-h4; 41 | line-height: 1.45em; 42 | margin-top: $margin-base-vertical * 2; 43 | margin-bottom: $margin-base-vertical; 44 | 45 | & + .category, 46 | &.title + .category{ 47 | margin-top: -10px; 48 | } 49 | } 50 | h5, .h5 { 51 | font-size: $font-size-h5; 52 | line-height: 1.4em; 53 | margin-bottom: 15px; 54 | } 55 | h6, .h6{ 56 | font-size: $font-size-h6; 57 | font-weight: $font-weight-bold; 58 | text-transform: uppercase; 59 | } 60 | p{ 61 | &.description{ 62 | font-size: 1.14em; 63 | } 64 | } 65 | 66 | // i.fa{ 67 | // font-size: 18px; 68 | // position: relative; 69 | // top: 1px; 70 | // } 71 | 72 | .title{ 73 | font-weight: $font-weight-bold; 74 | 75 | &.title-up{ 76 | text-transform: uppercase; 77 | 78 | a{ 79 | color: $black-color; 80 | text-decoration: none; 81 | } 82 | } 83 | & + .category{ 84 | margin-top: -10px; 85 | } 86 | } 87 | 88 | .description, 89 | .card-description, 90 | .footer-big p, 91 | .card .footer .stats{ 92 | color: $dark-gray; 93 | font-weight: $font-weight-light; 94 | } 95 | .category, 96 | .card-category{ 97 | text-transform: capitalize; 98 | font-weight: $font-weight-normal; 99 | color: $dark-gray; 100 | font-size: $font-size-mini; 101 | } 102 | 103 | .card-category{ 104 | font-size: $font-size-h6; 105 | } 106 | 107 | .text-primary, 108 | a.text-primary:focus, a.text-primary:hover { 109 | color: $brand-primary !important; 110 | } 111 | .text-info, 112 | a.text-info:focus, a.text-info:hover { 113 | color: $brand-info !important; 114 | } 115 | .text-success, 116 | a.text-success:focus, a.text-success:hover { 117 | color: $brand-success !important; 118 | } 119 | .text-warning, 120 | a.text-warning:focus, a.text-warning:hover { 121 | color: $brand-warning !important; 122 | } 123 | .text-danger, 124 | a.text-danger:focus, a.text-danger:hover { 125 | color: $brand-danger !important; 126 | } 127 | 128 | .text-gray, 129 | a.text-gray:focus, a.text-gray:hover{ 130 | color: $light-gray !important; 131 | } 132 | 133 | 134 | .blockquote{ 135 | border-left: none; 136 | border: 1px solid $default-color; 137 | padding: 20px; 138 | font-size: $font-size-blockquote; 139 | line-height: 1.8; 140 | 141 | small{ 142 | color: $default-color; 143 | font-size: $font-size-small; 144 | text-transform: uppercase; 145 | } 146 | 147 | &.blockquote-primary{ 148 | border-color: $primary-color; 149 | color: $primary-color; 150 | 151 | small{ 152 | color: $primary-color; 153 | } 154 | } 155 | 156 | &.blockquote-danger{ 157 | border-color: $danger-color; 158 | color: $danger-color; 159 | 160 | small{ 161 | color: $danger-color; 162 | } 163 | } 164 | 165 | &.blockquote-white{ 166 | border-color: $opacity-8; 167 | color: $white-color; 168 | 169 | small{ 170 | color: $opacity-8; 171 | } 172 | } 173 | } 174 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/cards/_card-chart.scss: -------------------------------------------------------------------------------- 1 | .card-chart { 2 | .card-header{ 3 | .card-title{ 4 | margin-top: 10px; 5 | margin-bottom: 0; 6 | } 7 | .card-category{ 8 | margin-bottom: 5px; 9 | } 10 | } 11 | 12 | .table{ 13 | margin-bottom: 0; 14 | 15 | td{ 16 | border-top: none; 17 | border-bottom: 1px solid #e9ecef; 18 | } 19 | } 20 | 21 | .card-progress { 22 | margin-top: 30px; 23 | } 24 | 25 | .chart-area { 26 | height: 190px; 27 | width: calc(100% + 30px); 28 | margin-left: -15px; 29 | margin-right: -15px; 30 | } 31 | .card-footer { 32 | margin-top: 15px; 33 | 34 | .stats{ 35 | color: $dark-gray; 36 | } 37 | } 38 | 39 | .dropdown{ 40 | position: absolute; 41 | right: 20px; 42 | top: 20px; 43 | 44 | .btn{ 45 | margin: 0; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/cards/_card-map.scss: -------------------------------------------------------------------------------- 1 | .map{ 2 | height: 500px; 3 | } 4 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/cards/_card-plain.scss: -------------------------------------------------------------------------------- 1 | 2 | .card-plain{ 3 | background: transparent; 4 | box-shadow: none; 5 | 6 | .card-header, 7 | .card-footer{ 8 | margin-left: 0; 9 | margin-right: 0; 10 | background-color: transparent; 11 | } 12 | 13 | &:not(.card-subcategories).card-body{ 14 | padding-left: 0; 15 | padding-right: 0; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/cards/_card-stats.scss: -------------------------------------------------------------------------------- 1 | %card-stats{ 2 | hr{ 3 | margin: 5px 15px; 4 | } 5 | } 6 | 7 | 8 | .card-stats{ 9 | .card-body{ 10 | padding: 15px 15px 0px; 11 | 12 | .numbers{ 13 | text-align: right; 14 | font-size: 2em; 15 | 16 | p{ 17 | margin-bottom: 0; 18 | } 19 | .card-category { 20 | color: $dark-gray; 21 | font-size: 16px; 22 | line-height: 1.4em; 23 | } 24 | } 25 | } 26 | .card-footer{ 27 | padding: 0px 15px 15px; 28 | 29 | .stats{ 30 | color: $dark-gray; 31 | } 32 | 33 | hr{ 34 | margin-top: 10px; 35 | margin-bottom: 15px; 36 | } 37 | } 38 | .icon-big { 39 | font-size: 3em; 40 | min-height: 64px; 41 | 42 | i{ 43 | line-height: 59px; 44 | } 45 | } 46 | 47 | 48 | } 49 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/cards/_card-user.scss: -------------------------------------------------------------------------------- 1 | .card-user{ 2 | .image{ 3 | height: 130px; 4 | 5 | img { 6 | border-radius: 12px; 7 | } 8 | } 9 | 10 | .author{ 11 | text-align: center; 12 | text-transform: none; 13 | margin-top: -77px; 14 | 15 | a + p.description{ 16 | margin-top: -7px; 17 | } 18 | } 19 | 20 | .avatar{ 21 | width: 124px; 22 | height: 124px; 23 | border: 1px solid $white-color; 24 | position: relative; 25 | } 26 | 27 | .card-body{ 28 | min-height: 240px; 29 | } 30 | 31 | hr{ 32 | margin: 5px 15px 15px; 33 | } 34 | 35 | .card-body + .card-footer { 36 | padding-top: 0; 37 | } 38 | 39 | .card-footer { 40 | h5 { 41 | font-size: 1.25em; 42 | margin-bottom: 0; 43 | } 44 | } 45 | 46 | .button-container{ 47 | margin-bottom: 6px; 48 | text-align: center; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/mixins/_buttons.scss: -------------------------------------------------------------------------------- 1 | // Mixin for generating new styles 2 | @mixin btn-styles($btn-color, $btn-states-color) { 3 | background-color: $btn-color; 4 | 5 | &:hover, 6 | &:focus, 7 | &:active, 8 | &.active, 9 | &:active:focus, 10 | &:active:hover, 11 | &.active:focus, 12 | &.active:hover, 13 | .show > &.dropdown-toggle, 14 | .show > &.dropdown-toggle:focus, 15 | .show > &.dropdown-toggle:hover { 16 | background-color: $btn-states-color !important; 17 | color: $white-color !important; 18 | box-shadow: none !important; 19 | } 20 | 21 | &:not([data-action]):hover{ 22 | box-shadow: none; 23 | } 24 | 25 | &.disabled, 26 | &:disabled, 27 | &[disabled], 28 | fieldset[disabled] & { 29 | &, 30 | &:hover, 31 | &:focus, 32 | &.focus, 33 | &:active, 34 | &.active { 35 | background-color: $btn-color; 36 | border-color: $btn-color; 37 | } 38 | } 39 | 40 | // btn-neutral style 41 | @if $btn-color == $white-color{ 42 | color: $primary-color; 43 | 44 | &.btn-danger{ 45 | color: $danger-color; 46 | 47 | &:hover, 48 | &:focus, 49 | &:active, 50 | &:active:focus{ 51 | color: $danger-states-color !important; 52 | } 53 | } 54 | 55 | &.btn-info{ 56 | color: $info-color !important; 57 | 58 | &:hover, 59 | &:focus, 60 | &:active, 61 | &:active:focus{ 62 | color: $info-states-color !important; 63 | } 64 | } 65 | 66 | &.btn-warning{ 67 | color: $warning-color !important; 68 | 69 | &:hover, 70 | &:focus, 71 | &:active, 72 | &:active:focus{ 73 | color: $warning-states-color !important; 74 | } 75 | } 76 | 77 | &.btn-success{ 78 | color: $success-color !important; 79 | 80 | &:hover, 81 | &:focus, 82 | &:active, 83 | &:active:focus{ 84 | color: $success-states-color !important; 85 | } 86 | } 87 | 88 | &.btn-default{ 89 | color: $default-color !important; 90 | 91 | &:hover, 92 | &:focus, 93 | &:active, 94 | &:active:focus{ 95 | color: $default-states-color !important; 96 | } 97 | } 98 | 99 | &.active, 100 | &:active, 101 | &:active:focus, 102 | &:active:hover, 103 | &.active:focus, 104 | &.active:hover, 105 | .show > &.dropdown-toggle, 106 | .show > &.dropdown-toggle:focus, 107 | .show > &.dropdown-toggle:hover { 108 | background-color: $white-color !important; 109 | color: $primary-states-color !important; 110 | box-shadow: none !important; 111 | } 112 | 113 | &:hover, 114 | &:focus{ 115 | color: $primary-states-color !important; 116 | 117 | &:not(.nav-link){ 118 | box-shadow: none; 119 | } 120 | 121 | } 122 | 123 | } @else { 124 | color: $white-color; 125 | } 126 | 127 | &.btn-simple{ 128 | color: $btn-color; 129 | border-color: $btn-color; 130 | 131 | &:hover, 132 | &:focus, 133 | &:active{ 134 | background-color: $transparent-bg; 135 | color: $btn-states-color; 136 | border-color: $btn-states-color; 137 | box-shadow: none; 138 | } 139 | } 140 | 141 | &.btn-link{ 142 | color: $btn-color; 143 | 144 | &:hover, 145 | &:focus, 146 | &:active, 147 | &:active:focus { 148 | background-color: $transparent-bg; 149 | color: $btn-states-color; 150 | text-decoration: none; 151 | box-shadow: none; 152 | } 153 | } 154 | } 155 | 156 | @mixin btn-outline-styles($btn-color, $btn-states-color){ 157 | background: $transparent-bg; 158 | border: 2px solid $btn-color !important; 159 | color: $btn-color; 160 | @include opacity(1); 161 | 162 | &:hover, 163 | &:focus, 164 | &:active, 165 | &:focus:active, 166 | &.active, 167 | .open > &.dropdown-toggle { 168 | background-color: $btn-color !important; 169 | color: $fill-font-color !important; 170 | border-color: $btn-color !important; 171 | .caret{ 172 | border-top-color: $fill-font-color !important; 173 | } 174 | } 175 | 176 | .caret{ 177 | border-top-color: $white-color !important; 178 | } 179 | 180 | &.disabled, 181 | &:disabled, 182 | &[disabled], 183 | fieldset[disabled] & { 184 | &, 185 | &:hover, 186 | &:focus, 187 | &.focus, 188 | &:active, 189 | &.active { 190 | background-color: $transparent-bg !important; 191 | border-color: $btn-color !important; 192 | } 193 | } 194 | } 195 | 196 | @mixin btn-size($padding-vertical, $padding-horizontal, $font-size, $border){ 197 | font-size: $font-size; 198 | border-radius: $border; 199 | padding: $padding-vertical $padding-horizontal; 200 | 201 | &.btn-simple{ 202 | padding: $padding-vertical - 1 $padding-horizontal - 1; 203 | } 204 | 205 | } 206 | 207 | @mixin rotate-180(){ 208 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); 209 | -webkit-transform: rotate(180deg); 210 | -ms-transform: rotate(180deg); 211 | transform: rotate(180deg); 212 | } 213 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/mixins/_cards.scss: -------------------------------------------------------------------------------- 1 | @mixin icon-color($color) { 2 | box-shadow: 0px 9px 30px -6px $color; 3 | color: $color; 4 | } 5 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/mixins/_dropdown.scss: -------------------------------------------------------------------------------- 1 | @mixin dropdown-colors($brand-color, $dropdown-header-color, $dropdown-color, $background-color ) { 2 | background-color: $brand-color; 3 | 4 | &:before{ 5 | color: $brand-color; 6 | } 7 | 8 | .dropdown-header:not([href]):not([tabindex]){ 9 | color: $dropdown-header-color; 10 | } 11 | 12 | .dropdown-item{ 13 | color: $dropdown-color; 14 | 15 | &:hover, 16 | &:focus{ 17 | background-color: $background-color; 18 | } 19 | } 20 | 21 | .dropdown-divider{ 22 | background-color: $background-color; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/mixins/_inputs.scss: -------------------------------------------------------------------------------- 1 | @mixin input-size($padding-vertical, $padding-horizontal){ 2 | padding: $padding-vertical $padding-horizontal; 3 | } 4 | 5 | @mixin form-control-placeholder($color, $opacity){ 6 | .form-control::-moz-placeholder{ 7 | color: $color; 8 | @include opacity(1); 9 | } 10 | .form-control:-moz-placeholder{ 11 | color: $color; 12 | @include opacity(1); 13 | } 14 | .form-control::-webkit-input-placeholder{ 15 | color: $color; 16 | @include opacity(1); 17 | } 18 | .form-control:-ms-input-placeholder{ 19 | color: $color; 20 | @include opacity(1); 21 | } 22 | } 23 | 24 | @mixin placeholder() { 25 | &::-moz-placeholder {@content; } // Firefox 26 | &:-ms-input-placeholder {@content; } // Internet Explorer 10+ 27 | &::-webkit-input-placeholder {@content; } // Safari and Chrome 28 | } 29 | 30 | @mixin light-form(){ 31 | border-radius: 0; 32 | border:0; 33 | padding: 0; 34 | background-color: transparent; 35 | 36 | } 37 | 38 | 39 | @mixin form-control-lg-padding($padding-vertical, $padding-horizontal) { 40 | .form-group.no-border.form-control-lg, 41 | .input-group.no-border.form-control-lg{ 42 | .input-group-append .input-group-text{ 43 | padding: $padding-vertical 0 $padding-vertical $padding-horizontal; 44 | } 45 | 46 | .form-control{ 47 | padding: $padding-vertical $padding-horizontal; 48 | 49 | & + .input-group-prepend .input-group-text, 50 | & + .input-group-append .input-group-text{ 51 | padding: $padding-vertical $padding-horizontal $padding-vertical 0; 52 | } 53 | } 54 | } 55 | 56 | .form-group.form-control-lg, 57 | .input-group.form-control-lg{ 58 | .form-control{ 59 | padding: $padding-vertical - 1 $padding-horizontal - 1; 60 | 61 | & + .input-group-prepend .input-group-text, 62 | & + .input-group-append .input-group-text{ 63 | padding: $padding-vertical - 1 $padding-horizontal - 1 $padding-vertical - 1 0; 64 | } 65 | } 66 | 67 | .input-group-prepend .input-group-text, 68 | .input-group-append .input-group-text{ 69 | padding: $padding-vertical - 1 0 $padding-vertical $padding-horizontal - 1; 70 | 71 | & + .form-control{ 72 | padding: $padding-vertical $padding-horizontal - 1 $padding-vertical $padding-horizontal - 3; 73 | } 74 | } 75 | } 76 | } 77 | 78 | 79 | 80 | @mixin input-base-padding($padding-vertical, $padding-horizontal) { 81 | .form-group.no-border, 82 | .input-group.no-border{ 83 | .form-control{ 84 | padding: $padding-vertical $padding-horizontal; 85 | 86 | & + .input-group-prepend .input-group-text, 87 | & + .input-group-append .input-group-text{ 88 | padding: $padding-vertical $padding-horizontal $padding-vertical 0; 89 | } 90 | } 91 | 92 | .input-group-prepend .input-group-text, 93 | .input-group-append .input-group-text{ 94 | padding: $padding-vertical 0 $padding-vertical $padding-horizontal; 95 | } 96 | } 97 | 98 | .form-group, 99 | .input-group{ 100 | .form-control{ 101 | padding: $padding-vertical - 1 $padding-horizontal - 1 $padding-vertical - 1 $padding-horizontal - 1; 102 | 103 | & + .input-group-prepend .input-group-text, 104 | & + .input-group-append .input-group-text{ 105 | padding: $padding-vertical - 1 $padding-horizontal - 1 $padding-vertical - 1 0; 106 | } 107 | } 108 | 109 | .input-group-prepend .input-group-text, 110 | .input-group-append .input-group-text{ 111 | padding: $padding-vertical - 1 0 $padding-vertical - 1 $padding-horizontal - 1; 112 | 113 | & + .form-control, 114 | & ~ .form-control{ 115 | padding:$padding-vertical - 1 $padding-horizontal $padding-vertical $padding-horizontal - 3; 116 | } 117 | } 118 | } 119 | } 120 | 121 | 122 | //color1 = $opacity-5 123 | //color2 = $opacity-8 124 | //color3 = $white-color 125 | //color4 = $transparent-bg 126 | //color5 = $opacity-1 127 | //color6 = $opacity-2 128 | 129 | 130 | @mixin input-coloured-bg($color1, $color2, $color3, $color4, $color5, $color6) { 131 | @include form-control-placeholder(darken($color2, 8%), 1); 132 | 133 | .form-control{ 134 | border-color: $color1; 135 | color: $color2; 136 | 137 | &:focus{ 138 | border-color: $color3; 139 | background-color: $color4; 140 | color: $color3; 141 | } 142 | } 143 | 144 | .has-success, 145 | .has-danger{ 146 | &:after{ 147 | color: $color3; 148 | } 149 | } 150 | 151 | .has-danger{ 152 | .form-control{ 153 | background-color: $color4; 154 | } 155 | } 156 | 157 | .input-group-prepend .input-group-text, 158 | .input-group-append .input-group-text{ 159 | background-color: $color4; 160 | border-color: $color1; 161 | color: $color2; 162 | } 163 | 164 | .input-group-focus{ 165 | .input-group-prepend .input-group-text, 166 | .input-group-append .input-group-text{ 167 | background-color: $color4; 168 | border-color: $color3; 169 | color: $color3; 170 | } 171 | } 172 | 173 | .form-group.no-border, 174 | .input-group.no-border{ 175 | .form-control{ 176 | background-color: $color5; 177 | color: $color2; 178 | 179 | &:focus, 180 | &:active, 181 | &:active{ 182 | background-color: $color6; 183 | color: $color3; 184 | } 185 | } 186 | 187 | .form-control + .input-group-prepend .input-group-text, 188 | .form-control + .input-group-append .input-group-text{ 189 | background-color: $color5; 190 | 191 | &:focus, 192 | &:active, 193 | &:active{ 194 | background-color: $color6; 195 | color: $color3; 196 | } 197 | } 198 | 199 | .form-control{ 200 | &:focus{ 201 | & + .input-group-prepend .input-group-text, 202 | & + .input-group-append .input-group-text{ 203 | background-color: $color6; 204 | color: $color3; 205 | } 206 | } 207 | } 208 | 209 | .input-group-prepend .input-group-text, 210 | .input-group-append .input-group-text{ 211 | background-color: $color5; 212 | border: none; 213 | color: $color2; 214 | } 215 | 216 | &.input-group-focus{ 217 | .input-group-prepend .input-group-text, 218 | .input-group-append .input-group-text{ 219 | background-color: $color6; 220 | color: $color3; 221 | } 222 | } 223 | } 224 | } 225 | 226 | @mixin transition-input-focus-color() { 227 | -webkit-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; 228 | -moz-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; 229 | -o-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; 230 | -ms-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; 231 | transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; 232 | } 233 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/mixins/_page-header.scss: -------------------------------------------------------------------------------- 1 | @mixin linear-gradient($color1, $color2){ 2 | background: $color1; /* For browsers that do not support gradients */ 3 | background: -webkit-linear-gradient(90deg, $color1 , $color2); /* For Safari 5.1 to 6.0 */ 4 | background: -o-linear-gradient(90deg, $color1, $color2); /* For Opera 11.1 to 12.0 */ 5 | background: -moz-linear-gradient(90deg, $color1, $color2); /* For Firefox 3.6 to 15 */ 6 | background: linear-gradient(0deg, $color1 , $color2); /* Standard syntax */ 7 | } 8 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/mixins/_transparency.scss: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | @mixin opacity($opacity) { 4 | opacity: $opacity; 5 | // IE8 filter 6 | $opacity-ie: ($opacity * 100); 7 | filter: #{alpha(opacity=$opacity-ie)}; 8 | } 9 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/mixins/_vendor-prefixes.scss: -------------------------------------------------------------------------------- 1 | @mixin box-shadow($shadow...) { 2 | -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1 3 | box-shadow: $shadow; 4 | } 5 | 6 | @mixin transition($time, $type){ 7 | -webkit-transition: all $time $type; 8 | -moz-transition: all $time $type; 9 | -o-transition: all $time $type; 10 | -ms-transition: all $time $type; 11 | transition: all $time $type; 12 | } 13 | 14 | 15 | @mixin sidebar-color($color){ 16 | &:after{ 17 | background: $color; 18 | } 19 | } 20 | 21 | @mixin bar-animation($type){ 22 | -webkit-animation: $type 500ms linear 0s; 23 | -moz-animation: $type 500ms linear 0s; 24 | animation: $type 500ms 0s; 25 | -webkit-animation-fill-mode: forwards; 26 | -moz-animation-fill-mode: forwards; 27 | animation-fill-mode: forwards; 28 | } 29 | 30 | @mixin sidebar-active-color($font-color){ 31 | .nav { 32 | li { 33 | &.active > a, 34 | &.active > a i, 35 | &.active > a[data-toggle="collapse"], 36 | &.active > a[data-toggle="collapse"] i, 37 | &.active > a[data-toggle="collapse"] ~ div > ul > li.active .sidebar-mini-icon, 38 | &.active > a[data-toggle="collapse"] ~ div > ul > li.active > a { 39 | color: $font-color; 40 | opacity: 1; 41 | } 42 | } 43 | } 44 | } 45 | 46 | @mixin transition-opacity($time, $type){ 47 | -webkit-transition: opacity $time $type; 48 | -moz-transition: opacity $time $type; 49 | -o-transition: opacity $time $type; 50 | -ms-transition: opacity $time $type; 51 | transition: opacity $time $type; 52 | } 53 | 54 | @mixin transform-translate-y-dropdown($value) { 55 | -webkit-transform: translate3d(-20px,$value,0) !important; 56 | -moz-transform: translate3d(-20px,$value,0) !important; 57 | -o-transform: translate3d(-20px,$value,0) !important; 58 | -ms-transform: translate3d(-20px,$value,0) !important; 59 | transform: translate3d(-20px,$value,0) !important; 60 | } 61 | 62 | @mixin transform-translate-x($value){ 63 | -webkit-transform: translate3d($value, 0, 0); 64 | -moz-transform: translate3d($value, 0, 0); 65 | -o-transform: translate3d($value, 0, 0); 66 | -ms-transform: translate3d($value, 0, 0); 67 | transform: translate3d($value, 0, 0); 68 | } 69 | 70 | @mixin transform-translate-y($value){ 71 | -webkit-transform: translate3d(0,$value,0) !important; 72 | -moz-transform: translate3d(0,$value,0) !important; 73 | -o-transform: translate3d(0,$value,0) !important; 74 | -ms-transform: translate3d(0,$value,0) !important; 75 | transform: translate3d(0,$value,0) !important; 76 | } 77 | 78 | @mixin transform-translate-y-fixed-plugin($value){ 79 | -webkit-transform: translate3d(0,$value,0) !important; 80 | -moz-transform: translate3d(0,$value,0) !important; 81 | -o-transform: translate3d(0,$value,0) !important; 82 | -ms-transform: translate3d(0,$value,0) !important; 83 | transform: translate3d(0,$value,0) !important; 84 | } 85 | 86 | @mixin icon-gradient($color, $bottomColor: #000){ 87 | background: $color; 88 | background: -webkit-linear-gradient($color 0%, $bottomColor 80%); 89 | background: -o-linear-gradient($color 0%, $bottomColor 80%); 90 | background: -moz-linear-gradient($color 0%, $bottomColor 80%); 91 | background: linear-gradient($color 0%, $bottomColor 80%); 92 | } 93 | 94 | @mixin topbar-x-rotation(){ 95 | @keyframes topbar-x { 96 | 0% {top: 0px; transform: rotate(0deg); } 97 | 45% {top: 6px; transform: rotate(145deg); } 98 | 75% {transform: rotate(130deg); } 99 | 100% {transform: rotate(135deg); } 100 | } 101 | @-webkit-keyframes topbar-x { 102 | 0% {top: 0px; -webkit-transform: rotate(0deg); } 103 | 45% {top: 6px; -webkit-transform: rotate(145deg); } 104 | 75% {-webkit-transform: rotate(130deg); } 105 | 100% { -webkit-transform: rotate(135deg); } 106 | } 107 | @-moz-keyframes topbar-x { 108 | 0% {top: 0px; -moz-transform: rotate(0deg); } 109 | 45% {top: 6px; -moz-transform: rotate(145deg); } 110 | 75% {-moz-transform: rotate(130deg); } 111 | 100% { -moz-transform: rotate(135deg); } 112 | } 113 | } 114 | 115 | 116 | @mixin topbar-back-rotation(){ 117 | @keyframes topbar-back { 118 | 0% { top: 6px; transform: rotate(135deg); } 119 | 45% { transform: rotate(-10deg); } 120 | 75% { transform: rotate(5deg); } 121 | 100% { top: 0px; transform: rotate(0); } 122 | } 123 | 124 | @-webkit-keyframes topbar-back { 125 | 0% { top: 6px; -webkit-transform: rotate(135deg); } 126 | 45% { -webkit-transform: rotate(-10deg); } 127 | 75% { -webkit-transform: rotate(5deg); } 128 | 100% { top: 0px; -webkit-transform: rotate(0); } 129 | } 130 | 131 | @-moz-keyframes topbar-back { 132 | 0% { top: 6px; -moz-transform: rotate(135deg); } 133 | 45% { -moz-transform: rotate(-10deg); } 134 | 75% { -moz-transform: rotate(5deg); } 135 | 100% { top: 0px; -moz-transform: rotate(0); } 136 | } 137 | } 138 | 139 | @mixin bottombar-x-rotation(){ 140 | @keyframes bottombar-x { 141 | 0% {bottom: 0px; transform: rotate(0deg);} 142 | 45% {bottom: 6px; transform: rotate(-145deg);} 143 | 75% {transform: rotate(-130deg);} 144 | 100% {transform: rotate(-135deg);} 145 | } 146 | @-webkit-keyframes bottombar-x { 147 | 0% {bottom: 0px; -webkit-transform: rotate(0deg);} 148 | 45% {bottom: 6px; -webkit-transform: rotate(-145deg);} 149 | 75% {-webkit-transform: rotate(-130deg);} 150 | 100% {-webkit-transform: rotate(-135deg);} 151 | } 152 | @-moz-keyframes bottombar-x { 153 | 0% {bottom: 0px; -moz-transform: rotate(0deg);} 154 | 45% {bottom: 6px; -moz-transform: rotate(-145deg);} 155 | 75% {-moz-transform: rotate(-130deg);} 156 | 100% {-moz-transform: rotate(-135deg);} 157 | } 158 | } 159 | 160 | @mixin bottombar-back-rotation{ 161 | @keyframes bottombar-back { 162 | 0% { bottom: 6px;transform: rotate(-135deg);} 163 | 45% { transform: rotate(10deg);} 164 | 75% { transform: rotate(-5deg);} 165 | 100% { bottom: 0px;transform: rotate(0);} 166 | } 167 | @-webkit-keyframes bottombar-back { 168 | 0% {bottom: 6px;-webkit-transform: rotate(-135deg);} 169 | 45% {-webkit-transform: rotate(10deg);} 170 | 75% {-webkit-transform: rotate(-5deg);} 171 | 100% {bottom: 0px;-webkit-transform: rotate(0);} 172 | } 173 | @-moz-keyframes bottombar-back { 174 | 0% {bottom: 6px;-moz-transform: rotate(-135deg);} 175 | 45% {-moz-transform: rotate(10deg);} 176 | 75% {-moz-transform: rotate(-5deg);} 177 | 100% {bottom: 0px;-moz-transform: rotate(0);} 178 | } 179 | 180 | } 181 | 182 | @mixin sidebar-text-color($text-color){ 183 | .nav { 184 | li { 185 | a, 186 | a i, 187 | a[data-toggle="collapse"], 188 | a[data-toggle="collapse"] i, 189 | a[data-toggle="collapse"] ~ div > ul > li .sidebar-mini-icon, 190 | a[data-toggle="collapse"] ~ div > ul > li > a { 191 | color: $text-color; 192 | opacity: .7; 193 | } 194 | 195 | &:hover:not(.active) > a, 196 | &:focus:not(.active) > a { 197 | opacity: 1; 198 | } 199 | } 200 | } 201 | 202 | .logo { 203 | .simple-text { 204 | color: $text-color; 205 | } 206 | &:after { 207 | background-color: $text-color; 208 | opacity: .4; 209 | } 210 | } 211 | 212 | .user { 213 | .info a span, 214 | .nav .sidebar-mini-icon, 215 | .nav .sidebar-normal { 216 | color: $text-color !important; 217 | } 218 | &:after { 219 | background-color: $text-color; 220 | opacity: .4; 221 | } 222 | } 223 | } 224 | 225 | @mixin badge-color($color) { 226 | border-color: $color; 227 | background-color: $color; 228 | } 229 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/plugins/_plugin-animate-bootstrap-notify.scss: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | // This file was modified by Creative Tim to keep only the animation that we need for Bootstrap Notify 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | @charset "UTF-8"; 34 | 35 | /*! 36 | Animate.css - http://daneden.me/animate 37 | Licensed under the MIT license - http://opensource.org/licenses/MIT 38 | 39 | Copyright (c) 2015 Daniel Eden 40 | */ 41 | 42 | .animated { 43 | -webkit-animation-duration: 1s; 44 | animation-duration: 1s; 45 | -webkit-animation-fill-mode: both; 46 | animation-fill-mode: both; 47 | } 48 | 49 | .animated.infinite { 50 | -webkit-animation-iteration-count: infinite; 51 | animation-iteration-count: infinite; 52 | } 53 | 54 | .animated.hinge { 55 | -webkit-animation-duration: 2s; 56 | animation-duration: 2s; 57 | } 58 | 59 | .animated.bounceIn, 60 | .animated.bounceOut { 61 | -webkit-animation-duration: .75s; 62 | animation-duration: .75s; 63 | } 64 | 65 | .animated.flipOutX, 66 | .animated.flipOutY { 67 | -webkit-animation-duration: .75s; 68 | animation-duration: .75s; 69 | } 70 | 71 | @-webkit-keyframes shake { 72 | from, to { 73 | -webkit-transform: translate3d(0, 0, 0); 74 | transform: translate3d(0, 0, 0); 75 | } 76 | 77 | 10%, 30%, 50%, 70%, 90% { 78 | -webkit-transform: translate3d(-10px, 0, 0); 79 | transform: translate3d(-10px, 0, 0); 80 | } 81 | 82 | 20%, 40%, 60%, 80% { 83 | -webkit-transform: translate3d(10px, 0, 0); 84 | transform: translate3d(10px, 0, 0); 85 | } 86 | } 87 | 88 | @keyframes shake { 89 | from, to { 90 | -webkit-transform: translate3d(0, 0, 0); 91 | transform: translate3d(0, 0, 0); 92 | } 93 | 94 | 10%, 30%, 50%, 70%, 90% { 95 | -webkit-transform: translate3d(-10px, 0, 0); 96 | transform: translate3d(-10px, 0, 0); 97 | } 98 | 99 | 20%, 40%, 60%, 80% { 100 | -webkit-transform: translate3d(10px, 0, 0); 101 | transform: translate3d(10px, 0, 0); 102 | } 103 | } 104 | 105 | .shake { 106 | -webkit-animation-name: shake; 107 | animation-name: shake; 108 | } 109 | 110 | 111 | 112 | @-webkit-keyframes fadeInDown { 113 | from { 114 | opacity: 0; 115 | -webkit-transform: translate3d(0, -100%, 0); 116 | transform: translate3d(0, -100%, 0); 117 | } 118 | 119 | to { 120 | opacity: 1; 121 | -webkit-transform: none; 122 | transform: none; 123 | } 124 | } 125 | 126 | @keyframes fadeInDown { 127 | from { 128 | opacity: 0; 129 | -webkit-transform: translate3d(0, -100%, 0); 130 | transform: translate3d(0, -100%, 0); 131 | } 132 | 133 | to { 134 | opacity: 1; 135 | -webkit-transform: none; 136 | transform: none; 137 | } 138 | } 139 | 140 | .fadeInDown { 141 | -webkit-animation-name: fadeInDown; 142 | animation-name: fadeInDown; 143 | } 144 | 145 | 146 | @-webkit-keyframes fadeOut { 147 | from { 148 | opacity: 1; 149 | } 150 | 151 | to { 152 | opacity: 0; 153 | } 154 | } 155 | 156 | @keyframes fadeOut { 157 | from { 158 | opacity: 1; 159 | } 160 | 161 | to { 162 | opacity: 0; 163 | } 164 | } 165 | 166 | .fadeOut { 167 | -webkit-animation-name: fadeOut; 168 | animation-name: fadeOut; 169 | } 170 | 171 | @-webkit-keyframes fadeOutDown { 172 | from { 173 | opacity: 1; 174 | } 175 | 176 | to { 177 | opacity: 0; 178 | -webkit-transform: translate3d(0, 100%, 0); 179 | transform: translate3d(0, 100%, 0); 180 | } 181 | } 182 | 183 | @keyframes fadeOutDown { 184 | from { 185 | opacity: 1; 186 | } 187 | 188 | to { 189 | opacity: 0; 190 | -webkit-transform: translate3d(0, 100%, 0); 191 | transform: translate3d(0, 100%, 0); 192 | } 193 | } 194 | 195 | .fadeOutDown { 196 | -webkit-animation-name: fadeOutDown; 197 | animation-name: fadeOutDown; 198 | } 199 | 200 | @-webkit-keyframes fadeOutUp { 201 | from { 202 | opacity: 1; 203 | } 204 | 205 | to { 206 | opacity: 0; 207 | -webkit-transform: translate3d(0, -100%, 0); 208 | transform: translate3d(0, -100%, 0); 209 | } 210 | } 211 | 212 | @keyframes fadeOutUp { 213 | from { 214 | opacity: 1; 215 | } 216 | 217 | to { 218 | opacity: 0; 219 | -webkit-transform: translate3d(0, -100%, 0); 220 | transform: translate3d(0, -100%, 0); 221 | } 222 | } 223 | 224 | .fadeOutUp { 225 | -webkit-animation-name: fadeOutUp; 226 | animation-name: fadeOutUp; 227 | } 228 | -------------------------------------------------------------------------------- /app/static/assets/scss/paper-dashboard/plugins/_plugin-perfect-scrollbar.scss: -------------------------------------------------------------------------------- 1 | /* perfect-scrollbar v0.6.13 */ 2 | .ps-container { 3 | -ms-touch-action: auto; 4 | touch-action: auto; 5 | overflow: hidden !important; 6 | -ms-overflow-style: none; } 7 | @supports (-ms-overflow-style: none) { 8 | .ps-container { 9 | overflow: auto !important; } } 10 | @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { 11 | .ps-container { 12 | overflow: auto !important; } } 13 | .ps-container.ps-active-x > .ps-scrollbar-x-rail, 14 | .ps-container.ps-active-y > .ps-scrollbar-y-rail { 15 | display: block; 16 | background-color: transparent; } 17 | .ps-container.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail { 18 | background-color: #eee; 19 | opacity: 0.9; } 20 | .ps-container.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail > .ps-scrollbar-x { 21 | background-color: #999; 22 | height: 11px; } 23 | .ps-container.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail { 24 | background-color: #eee; 25 | opacity: 0.9; } 26 | .ps-container.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail > .ps-scrollbar-y { 27 | background-color: #999; 28 | width: 11px; } 29 | .ps-container > .ps-scrollbar-x-rail { 30 | display: none; 31 | position: absolute; 32 | /* please don't change 'position' */ 33 | opacity: 0; 34 | -webkit-transition: background-color .2s linear, opacity .2s linear; 35 | -o-transition: background-color .2s linear, opacity .2s linear; 36 | -moz-transition: background-color .2s linear, opacity .2s linear; 37 | transition: background-color .2s linear, opacity .2s linear; 38 | bottom: 0px; 39 | /* there must be 'bottom' for ps-scrollbar-x-rail */ 40 | height: 15px; } 41 | .ps-container > .ps-scrollbar-x-rail > .ps-scrollbar-x { 42 | position: absolute; 43 | /* please don't change 'position' */ 44 | background-color: #aaa; 45 | -webkit-border-radius: 6px; 46 | -moz-border-radius: 6px; 47 | border-radius: 6px; 48 | -webkit-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out; 49 | transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out; 50 | -o-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out; 51 | -moz-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out; 52 | transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out; 53 | transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -webkit-border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out; 54 | bottom: 2px; 55 | /* there must be 'bottom' for ps-scrollbar-x */ 56 | height: 6px; } 57 | .ps-container > .ps-scrollbar-x-rail:hover > .ps-scrollbar-x, .ps-container > .ps-scrollbar-x-rail:active > .ps-scrollbar-x { 58 | height: 11px; } 59 | .ps-container > .ps-scrollbar-y-rail { 60 | display: none; 61 | position: absolute; 62 | /* please don't change 'position' */ 63 | opacity: 0; 64 | -webkit-transition: background-color .2s linear, opacity .2s linear; 65 | -o-transition: background-color .2s linear, opacity .2s linear; 66 | -moz-transition: background-color .2s linear, opacity .2s linear; 67 | transition: background-color .2s linear, opacity .2s linear; 68 | right: 0; 69 | /* there must be 'right' for ps-scrollbar-y-rail */ 70 | width: 15px; } 71 | .ps-container > .ps-scrollbar-y-rail > .ps-scrollbar-y { 72 | position: absolute; 73 | /* please don't change 'position' */ 74 | background-color: #aaa; 75 | -webkit-border-radius: 6px; 76 | -moz-border-radius: 6px; 77 | border-radius: 6px; 78 | -webkit-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out; 79 | transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out; 80 | -o-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out; 81 | -moz-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out; 82 | transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out; 83 | transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -webkit-border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out; 84 | right: 2px; 85 | /* there must be 'right' for ps-scrollbar-y */ 86 | width: 6px; } 87 | .ps-container > .ps-scrollbar-y-rail:hover > .ps-scrollbar-y, .ps-container > .ps-scrollbar-y-rail:active > .ps-scrollbar-y { 88 | width: 11px; } 89 | .ps-container:hover.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail { 90 | background-color: #eee; 91 | opacity: 0.9; } 92 | .ps-container:hover.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail > .ps-scrollbar-x { 93 | background-color: #999; 94 | height: 11px; } 95 | .ps-container:hover.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail { 96 | background-color: #eee; 97 | opacity: 0.9; } 98 | .ps-container:hover.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail > .ps-scrollbar-y { 99 | background-color: #999; 100 | width: 11px; } 101 | .ps-container:hover > .ps-scrollbar-x-rail, 102 | .ps-container:hover > .ps-scrollbar-y-rail { 103 | opacity: 0.6; } 104 | .ps-container:hover > .ps-scrollbar-x-rail:hover { 105 | background-color: #eee; 106 | opacity: 0.9; } 107 | .ps-container:hover > .ps-scrollbar-x-rail:hover > .ps-scrollbar-x { 108 | background-color: #999; } 109 | .ps-container:hover > .ps-scrollbar-y-rail:hover { 110 | background-color: #eee; 111 | opacity: 0.9; } 112 | .ps-container:hover > .ps-scrollbar-y-rail:hover > .ps-scrollbar-y { 113 | background-color: #999; } 114 | -------------------------------------------------------------------------------- /app/templates/includes/footer.html: -------------------------------------------------------------------------------- 1 | 2 | 20 | -------------------------------------------------------------------------------- /app/templates/includes/navigation.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 59 | 60 | -------------------------------------------------------------------------------- /app/templates/includes/scripts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/templates/includes/sidebar.html: -------------------------------------------------------------------------------- 1 | 98 | 99 | -------------------------------------------------------------------------------- /app/templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "layouts/base.html" %} 2 | 3 | {% block title %} Dashboard {% endblock %} 4 | 5 | 6 | {% block stylesheets %}{% endblock stylesheets %} 7 | 8 | {% block content %} 9 | 10 |
11 | 12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | 20 |
21 |
22 |
23 |
24 |

Capacity

25 |

150GB

26 |

27 |
28 |
29 |
30 | 37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | 46 |
47 |
48 |
49 |
50 |

Revenue

51 |

$ 1,345

52 |

53 |
54 |
55 |
56 | 63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 | 72 |
73 |
74 |
75 |
76 |

Errors

77 |

23

78 |

79 |
80 |
81 |
82 | 89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | 98 |
99 |
100 |
101 |
102 |

Followers

103 |

+45K

104 |

105 |
106 |
107 |
108 | 115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
Users Behavior
123 |

24 Hours performance

124 |
125 |
126 | 127 |
128 | 134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
Email Statistics
142 |

Last Campaign Performance

143 |
144 |
145 | 146 |
147 | 159 |
160 |
161 |
162 |
163 |
164 |
NASDAQ: AAPL
165 |

Line Chart with Points

166 |
167 |
168 | 169 |
170 | 180 |
181 |
182 |
183 |
184 | 185 | {% endblock content %} 186 | 187 | 188 | {% block javascripts %} 189 | 190 | 196 | 197 | {% endblock javascripts %} 198 | -------------------------------------------------------------------------------- /app/templates/layouts/base-fullscreen.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/templates/layouts/base.html: -------------------------------------------------------------------------------- 1 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | Jinja Paper Dashboard - {% block title %}{% endblock %} | AppSeed 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | {% block stylesheets %}{% endblock stylesheets %} 41 | 42 | 43 | 44 | 45 |
46 | 47 | {% include 'includes/sidebar.html' %} 48 | 49 |
50 | 51 | {% include 'includes/navigation.html' %} 52 | 53 | {% block content %}{% endblock content %} 54 | 55 | {% include 'includes/footer.html' %} 56 | 57 |
58 |
59 | 60 | {% include 'includes/scripts.html' %} 61 | 62 | 63 | {% block javascripts %}{% endblock javascripts %} 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /app/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends "layouts/base.html" %} 2 | 3 | {% block title %} Login {% endblock %} 4 | 5 | 6 | {% block stylesheets %}{% endblock stylesheets %} 7 | 8 | {% block content %} 9 | 10 | 11 |
12 |
13 | 14 |
15 |
16 |
17 |
18 | Login 19 |
20 |

21 | Add your credentials 22 |

23 |
24 |
25 |
26 | 27 |
28 |
29 |
30 | 31 | 32 |
33 |
34 |
35 | 36 |
37 |
38 |
39 | 40 | 41 |
42 |
43 |
44 | 45 | 46 |
47 |
48 |
49 | 50 |     Don't have an account? Register 51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | 59 |
60 |
61 | 62 | {% endblock content %} 63 | 64 | 65 | {% block javascripts %}{% endblock javascripts %} 66 | -------------------------------------------------------------------------------- /app/templates/map.html: -------------------------------------------------------------------------------- 1 | {% extends "layouts/base.html" %} 2 | 3 | {% block title %} Google Maps {% endblock %} 4 | 5 | 6 | {% block stylesheets %}{% endblock stylesheets %} 7 | 8 | {% block content %} 9 | 10 | 11 |
12 |
13 |
14 |
15 |
16 | Google Maps 17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | 26 | {% endblock content %} 27 | 28 | 29 | {% block javascripts %} 30 | 31 | 32 | 33 | 38 | 39 | {% endblock javascripts %} 40 | -------------------------------------------------------------------------------- /app/templates/notifications.html: -------------------------------------------------------------------------------- 1 | {% extends "layouts/base.html" %} 2 | 3 | {% block title %} UI Notification {% endblock %} 4 | 5 | 6 | {% block stylesheets %}{% endblock stylesheets %} 7 | 8 | {% block content %} 9 | 10 | 11 |
12 |
13 |
14 |
15 |
16 |
Notifications
17 |

Handcrafted by our friend Robert McIntosh. Please checkout the full documentation.

18 |
19 |
20 |
21 |
22 |
23 |
24 |
Notifications Style
25 |
26 |
27 |
28 | This is a plain notification 29 |
30 |
31 | 34 | This is a notification with close button. 35 |
36 |
37 | 40 | 41 | This is a notification with close button and icon. 42 |
43 |
44 | 47 | 48 | This is a notification with close button and icon and have many lines. You can see that the icon and the close button are always vertically aligned. This is a beautiful notification. So you don't have to worry about the style. 49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
Notification states
57 |
58 |
59 |
60 | 63 | Primary - This is a regular notification made with ".alert-primary" 64 |
65 |
66 | 69 | Info - This is a regular notification made with ".alert-info" 70 |
71 |
72 | 75 | Success - This is a regular notification made with ".alert-success" 76 |
77 |
78 | 81 | Warning - This is a regular notification made with ".alert-warning" 82 |
83 |
84 | 87 | Danger - This is a regular notification made with ".alert-danger" 88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |

105 | Notifications Places 106 |

Click to view notifications

107 |

108 |
109 |
110 |
111 |
112 |
113 |
114 | 115 |
116 |
117 | 118 |
119 |
120 | 121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 | 130 |
131 |
132 | 133 |
134 |
135 | 136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 | 147 | {% endblock content %} 148 | 149 | 150 | {% block javascripts %}{% endblock javascripts %} 151 | -------------------------------------------------------------------------------- /app/templates/page-403.html: -------------------------------------------------------------------------------- 1 | {% extends "layouts/base.html" %} 2 | 3 | {% block title %} Error 403 {% endblock %} 4 | 5 | 6 | {% block stylesheets %}{% endblock stylesheets %} 7 | 8 | {% block content %} 9 | 10 |
11 |
12 |
13 |
14 |
15 |
Error 403
16 | 17 |
18 |

19 | Access denied - Please contact support or authenticate. 20 |
21 | 22 | - Login 23 | 24 |

25 |
26 |
27 |
28 |
29 |
30 |
31 | 32 | {% endblock content %} 33 | 34 | 35 | {% block javascripts %}{% endblock javascripts %} 36 | -------------------------------------------------------------------------------- /app/templates/page-404.html: -------------------------------------------------------------------------------- 1 | {% extends "layouts/base.html" %} 2 | 3 | {% block title %} Error 404 {% endblock %} 4 | 5 | 6 | {% block stylesheets %}{% endblock stylesheets %} 7 | 8 | {% block content %} 9 | 10 |
11 |
12 |
13 |
14 |
15 |
Error 404
16 | 17 |
18 |

19 | Page not found 20 |
21 | 22 | - Home 23 | 24 |

25 |
26 |
27 |
28 |
29 |
30 |
31 | 32 | {% endblock content %} 33 | 34 | 35 | {% block javascripts %}{% endblock javascripts %} 36 | -------------------------------------------------------------------------------- /app/templates/page-500.html: -------------------------------------------------------------------------------- 1 | {% extends "layouts/base.html" %} 2 | 3 | {% block title %} Error 500 {% endblock %} 4 | 5 | 6 | {% block stylesheets %}{% endblock stylesheets %} 7 | 8 | {% block content %} 9 | 10 |
11 |
12 |
13 |
14 |
15 |
Error 500
16 | 17 |
18 |

19 | Server error - Please contact support. 20 |
21 | 22 | - Home 23 | 24 |

25 |
26 |
27 |
28 |
29 |
30 |
31 | 32 | {% endblock content %} 33 | 34 | 35 | {% block javascripts %}{% endblock javascripts %} 36 | -------------------------------------------------------------------------------- /app/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "layouts/base.html" %} 2 | 3 | {% block title %} Register {% endblock %} 4 | 5 | 6 | {% block stylesheets %}{% endblock stylesheets %} 7 | 8 | {% block content %} 9 | 10 |
11 |
12 | 13 |
14 |
15 |
16 |
17 | Register 18 |
19 |

20 | Add your credentials 21 |

22 |
23 |
24 |
25 | 26 |
27 |
28 |
29 | 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 |
55 |
56 |
57 | 58 |     Have an account? Login 59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | 67 |
68 |
69 | 70 | {% endblock content %} 71 | 72 | 73 | {% block javascripts %}{% endblock javascripts %} 74 | -------------------------------------------------------------------------------- /app/templates/tables.html: -------------------------------------------------------------------------------- 1 | {% extends "layouts/base.html" %} 2 | 3 | {% block title %} Tables {% endblock %} 4 | 5 | 6 | {% block stylesheets %}{% endblock stylesheets %} 7 | 8 | {% block content %} 9 | 10 |
11 |
12 |
13 |
14 |
15 |

Simple Table

16 |
17 |
18 |
19 | 20 | 21 | 24 | 27 | 30 | 33 | 34 | 35 | 36 | 39 | 42 | 45 | 48 | 49 | 50 | 53 | 56 | 59 | 62 | 63 | 64 | 67 | 70 | 73 | 76 | 77 | 78 | 81 | 84 | 87 | 90 | 91 | 92 | 95 | 98 | 101 | 104 | 105 | 106 | 109 | 112 | 115 | 118 | 119 | 120 | 123 | 126 | 129 | 132 | 133 | 134 |
22 | Name 23 | 25 | Country 26 | 28 | City 29 | 31 | Salary 32 |
37 | Dakota Rice 38 | 40 | Niger 41 | 43 | Oud-Turnhout 44 | 46 | $36,738 47 |
51 | Minerva Hooper 52 | 54 | Curaçao 55 | 57 | Sinaai-Waas 58 | 60 | $23,789 61 |
65 | Sage Rodriguez 66 | 68 | Netherlands 69 | 71 | Baileux 72 | 74 | $56,142 75 |
79 | Philip Chaney 80 | 82 | Korea, South 83 | 85 | Overland Park 86 | 88 | $38,735 89 |
93 | Doris Greene 94 | 96 | Malawi 97 | 99 | Feldkirchen in Kärnten 100 | 102 | $63,542 103 |
107 | Mason Porter 108 | 110 | Chile 111 | 113 | Gloucester 114 | 116 | $78,615 117 |
121 | Jon Porter 122 | 124 | Portugal 125 | 127 | Gloucester 128 | 130 | $98,615 131 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |

Table on Plain Background

143 |

Here is a subtitle for this table

144 |
145 |
146 |
147 | 148 | 149 | 152 | 155 | 158 | 161 | 162 | 163 | 164 | 167 | 170 | 173 | 176 | 177 | 178 | 181 | 184 | 187 | 190 | 191 | 192 | 195 | 198 | 201 | 204 | 205 | 206 | 209 | 212 | 215 | 218 | 219 | 220 | 223 | 226 | 229 | 232 | 233 | 234 | 237 | 240 | 243 | 246 | 247 | 248 | 251 | 254 | 257 | 260 | 261 | 262 |
150 | Name 151 | 153 | Country 154 | 156 | City 157 | 159 | Salary 160 |
165 | Dakota Rice 166 | 168 | Niger 169 | 171 | Oud-Turnhout 172 | 174 | $36,738 175 |
179 | Minerva Hooper 180 | 182 | Curaçao 183 | 185 | Sinaai-Waas 186 | 188 | $23,789 189 |
193 | Sage Rodriguez 194 | 196 | Netherlands 197 | 199 | Baileux 200 | 202 | $56,142 203 |
207 | Philip Chaney 208 | 210 | Korea, South 211 | 213 | Overland Park 214 | 216 | $38,735 217 |
221 | Doris Greene 222 | 224 | Malawi 225 | 227 | Feldkirchen in Kärnten 228 | 230 | $63,542 231 |
235 | Mason Porter 236 | 238 | Chile 239 | 241 | Gloucester 242 | 244 | $78,615 245 |
249 | Jon Porter 250 | 252 | Portugal 253 | 255 | Gloucester 256 | 258 | $98,615 259 |
263 |
264 |
265 |
266 |
267 |
268 |
269 | 270 | {% endblock content %} 271 | 272 | 273 | {% block javascripts %}{% endblock javascripts %} 274 | -------------------------------------------------------------------------------- /app/templates/typography.html: -------------------------------------------------------------------------------- 1 | {% extends "layouts/base.html" %} 2 | 3 | {% block title %} Typography {% endblock %} 4 | 5 | 6 | {% block stylesheets %}{% endblock stylesheets %} 7 | 8 | {% block content %} 9 | 10 |
11 |
12 |
13 |
14 |
15 |
Paper Table Heading
16 |

Created using Montserrat Font Family

17 |
18 |
19 |
20 |

Header 1The Life of Paper Dashboard

21 |
22 |
23 |

Header 2The Life of Paper Dashboard

24 |
25 |
26 |

Header 3The Life of Paper Dashboard

27 |
28 |
29 |

Header 4The Life of Paper Dashboard

30 |
31 |
32 |
Header 5The Life of Paper Dashboard
33 |
34 |
35 |
Header 6The Life of Paper Dashboard
36 |
37 |
38 |

Paragraph 39 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers. I understand culture. I am the nucleus. I think that’s a responsibility that I have, to push possibilities, to show people, this is the level that things could be at. 40 |

41 |
42 |
43 | Quote 44 |
45 |

46 | "I will be the leader of a company that ends up being worth billions of dollars, because I got the answers. I understand culture. I am the nucleus. I think that’s a responsibility that I have, to push possibilities, to show people, this is the level that things could be at." 47 |
48 |
49 | 50 | - Noaa 51 | 52 |

53 |
54 |
55 |
56 | Muted Text 57 |

58 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers... 59 |

60 |
61 |
62 | Primary Text 63 |

64 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers...

65 |
66 |
67 | Info Text 68 |

69 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers...

70 |
71 |
72 | Success Text 73 |

74 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers...

75 |
76 |
77 | Warning Text 78 |

79 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers... 80 |

81 |
82 |
83 | Danger Text 84 |

85 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers...

86 |
87 |
88 |

Small Tag 89 | Header with small subtitle
90 | Use "small" tag for the headers 91 |

92 |
93 |
94 |
95 |
96 |
97 |
98 | 99 | {% endblock content %} 100 | 101 | 102 | {% block javascripts %}{% endblock javascripts %} 103 | -------------------------------------------------------------------------------- /app/templates/user.html: -------------------------------------------------------------------------------- 1 | {% extends "layouts/base.html" %} 2 | 3 | {% block title %} User Profile {% endblock %} 4 | 5 | 6 | {% block stylesheets %}{% endblock stylesheets %} 7 | 8 | {% block content %} 9 | 10 |
11 |
12 |
13 |
14 |
15 | ... 16 |
17 |
18 |
19 | 20 | ... 21 |
Chet Faker
22 |
23 |

24 | @chetfaker 25 |

26 |
27 |

28 | "I like the way you work it
29 | No diggity
30 | I wanna bag it up" 31 |

32 |
33 | 49 |
50 |
51 |
52 |

Team Members

53 |
54 |
55 |
    56 |
  • 57 |
    58 |
    59 |
    60 | Circle Image 61 |
    62 |
    63 |
    64 | DJ Khaled 65 |
    66 | Offline 67 |
    68 |
    69 | 70 |
    71 |
    72 |
  • 73 |
  • 74 |
    75 |
    76 |
    77 | Circle Image 78 |
    79 |
    80 |
    81 | Creative Tim 82 |
    83 | Available 84 |
    85 |
    86 | 87 |
    88 |
    89 |
  • 90 |
  • 91 |
    92 |
    93 |
    94 | Circle Image 95 |
    96 |
    97 |
    98 | Flume 99 |
    100 | Busy 101 |
    102 |
    103 | 104 |
    105 |
    106 |
  • 107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
Edit Profile
115 |
116 |
117 |
118 |
119 |
120 |
121 | 122 | 123 |
124 |
125 |
126 |
127 | 128 | 129 |
130 |
131 |
132 |
133 | 134 | 135 |
136 |
137 |
138 |
139 |
140 |
141 | 142 | 143 |
144 |
145 |
146 |
147 | 148 | 149 |
150 |
151 |
152 |
153 |
154 |
155 | 156 | 157 |
158 |
159 |
160 |
161 |
162 |
163 | 164 | 165 |
166 |
167 |
168 |
169 | 170 | 171 |
172 |
173 |
174 |
175 | 176 | 177 |
178 |
179 |
180 |
181 |
182 |
183 | 184 | 185 |
186 |
187 |
188 |
189 |
190 | 191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 | 200 | {% endblock content %} 201 | 202 | 203 | {% block javascripts %}{% endblock javascripts %} 204 | -------------------------------------------------------------------------------- /app/views.py: -------------------------------------------------------------------------------- 1 | # -*- encoding: utf-8 -*- 2 | """ 3 | Copyright (c) 2019 - present AppSeed.us 4 | """ 5 | 6 | # Flask modules 7 | from flask import render_template, request 8 | from jinja2 import TemplateNotFound 9 | 10 | # App modules 11 | from app import app 12 | 13 | # App main route + generic routing 14 | @app.route('/', defaults={'path': 'index.html'}) 15 | @app.route('/') 16 | def index(path): 17 | 18 | try: 19 | 20 | # Detect the current page 21 | segment = get_segment( request ) 22 | 23 | # Serve the file (if exists) from app/templates/FILE.html 24 | return render_template( path, segment=segment ) 25 | 26 | except TemplateNotFound: 27 | return render_template('page-404.html'), 404 28 | 29 | def get_segment( request ): 30 | 31 | try: 32 | 33 | segment = request.path.split('/')[-1] 34 | 35 | if segment == '': 36 | segment = 'index' 37 | 38 | return segment 39 | 40 | except: 41 | return None 42 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | appseed-app: 4 | restart: always 5 | env_file: .env 6 | build: . 7 | ports: 8 | - "5005:5005" 9 | networks: 10 | - db_network 11 | - web_network 12 | nginx: 13 | restart: always 14 | image: "nginx:latest" 15 | ports: 16 | - "85:85" 17 | volumes: 18 | - ./nginx:/etc/nginx/conf.d 19 | networks: 20 | - web_network 21 | depends_on: 22 | - appseed-app 23 | networks: 24 | db_network: 25 | driver: bridge 26 | web_network: 27 | driver: bridge -------------------------------------------------------------------------------- /gunicorn-cfg.py: -------------------------------------------------------------------------------- 1 | # -*- encoding: utf-8 -*- 2 | """ 3 | Copyright (c) 2019 - present AppSeed.us 4 | """ 5 | 6 | bind = '0.0.0.0:5005' 7 | workers = 1 8 | accesslog = '-' 9 | loglevel = 'debug' 10 | capture_output = True 11 | enable_stdio_inheritance = True 12 | -------------------------------------------------------------------------------- /media/jinja-template-paper-dashboard-intro.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/media/jinja-template-paper-dashboard-intro.gif -------------------------------------------------------------------------------- /media/jinja-template-paper-dashboard-screen-alerts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/media/jinja-template-paper-dashboard-screen-alerts.png -------------------------------------------------------------------------------- /media/jinja-template-paper-dashboard-screen-icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/media/jinja-template-paper-dashboard-screen-icons.png -------------------------------------------------------------------------------- /media/jinja-template-paper-dashboard-screen-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/media/jinja-template-paper-dashboard-screen-login.png -------------------------------------------------------------------------------- /media/jinja-template-paper-dashboard-screen-maps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/media/jinja-template-paper-dashboard-screen-maps.png -------------------------------------------------------------------------------- /media/jinja-template-paper-dashboard-screen-register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/media/jinja-template-paper-dashboard-screen-register.png -------------------------------------------------------------------------------- /media/jinja-template-paper-dashboard-screen-user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/media/jinja-template-paper-dashboard-screen-user.png -------------------------------------------------------------------------------- /media/jinja-template-paper-dashboard-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/jinja-paper-dashboard/299cd160aa2e41391ff21bf462c5d3c64db019a2/media/jinja-template-paper-dashboard-screen.png -------------------------------------------------------------------------------- /nginx/appseed-app.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 85; 3 | 4 | location / { 5 | proxy_pass http://localhost:5005/; 6 | proxy_set_header Host $host; 7 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jinja-light-bootstrap", 3 | "mastertemplate": "boilerplate-code-jinja", 4 | "version": "1.0.1", 5 | "description": "Template project - Flask/Jinja2 Theme", 6 | "scripts": {}, 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/app-generator/jinja-light-bootstrap" 10 | }, 11 | "bugs": { 12 | "url": "https://github.com/app-generator/jinja-light-bootstrap/issues", 13 | "email": "support@appseed.us" 14 | }, 15 | "author": "AppSeed App Generator (https://appseed.us)", 16 | "engines": { 17 | "node": ">=10.0.0" 18 | }, 19 | "dependencies": {}, 20 | "devDependencies": {} 21 | } -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | flask==1.1.2 2 | gunicorn==20.0.4 3 | jinja2==2.11.3 4 | -------------------------------------------------------------------------------- /run.py: -------------------------------------------------------------------------------- 1 | # -*- encoding: utf-8 -*- 2 | """ 3 | Copyright (c) 2019 - present AppSeed.us 4 | """ 5 | 6 | from app import app 7 | -------------------------------------------------------------------------------- /runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.8.10 2 | --------------------------------------------------------------------------------