
Expand your horizons
50 |
├── .gdnconfig ├── .gitattributes ├── .github ├── dependabot.yml └── workflows │ ├── azure-dev-validate.yml │ ├── azure-dev.yml │ └── python-app.yml ├── .gitignore ├── .vscode └── launch.json ├── LICENSE ├── README.md ├── azure.yaml ├── demo-application ├── README.md ├── gunicorn.conf.py ├── manage.py ├── project │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── relecloud │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20210330_2200.py │ │ ├── 0003_auto_20210331_1932.py │ │ ├── 0004_auto_20210331_2016.py │ │ └── __init__.py │ ├── models.py │ ├── static │ │ ├── res │ │ │ ├── css │ │ │ │ ├── theme.css │ │ │ │ └── theme.css.map │ │ │ └── img │ │ │ │ ├── astronaut.jpeg │ │ │ │ ├── bit_cosmos.png │ │ │ │ ├── cosmos-db.jpeg │ │ │ │ └── small-logo.png │ │ └── scss │ │ │ └── custom.scss │ ├── templates │ │ ├── about.html │ │ ├── base.html │ │ ├── cruise_detail.html │ │ ├── destination_detail.html │ │ ├── destinations.html │ │ ├── index.html │ │ └── info_request_create.html │ ├── tests.py │ ├── urls.py │ └── views.py ├── requirements-test.txt ├── requirements.txt ├── startup.sh └── startup_asgi.sh ├── django-3-cheatsheet.pdf ├── infra ├── abbreviations.json ├── applicationinsights.bicep ├── main.bicep ├── main.parameters.json ├── resources.bicep └── role.bicep ├── loadtest ├── http-test.jmx ├── locustfile.py └── smoketest.yaml └── slides.pdf /.gdnconfig: -------------------------------------------------------------------------------- 1 | { 2 | "tools": [ 3 | { 4 | "tool": { 5 | "name": "TemplateAnalyzer", 6 | "version": "Latest" 7 | }, 8 | "arguments": { 9 | "AnalyzeDirectory": "$(WorkingDirectory)", 10 | "AnalyzeTemplate": "", 11 | "ParametersFilePath": "", 12 | "Verbose": "true", 13 | "IncludeNonSecurityRules": "true", 14 | "Help": "" 15 | } 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | *.{cmd,[cC][mM][dD]} text eol=crlf 3 | *.{bat,[bB][aA][tT]} text eol=crlf 4 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "pip" # See documentation for possible values 9 | directory: "/demo-application" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /.github/workflows/azure-dev-validate.yml: -------------------------------------------------------------------------------- 1 | name: Validate bicep scripts 2 | on: 3 | workflow_dispatch: 4 | push: 5 | branches: 6 | - main 7 | - master 8 | pull_request: 9 | branches: 10 | - main 11 | - master 12 | 13 | jobs: 14 | build: 15 | 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: Checkout 19 | uses: actions/checkout@v3 20 | 21 | - name: Build Bicep for linting 22 | uses: azure/CLI@v1 23 | with: 24 | inlineScript: az config set bicep.use_binary_from_path=false && az bicep build -f infra/main.bicep --stdout 25 | 26 | - name: Run Microsoft Security DevOps Analysis 27 | uses: microsoft/security-devops-action@preview 28 | id: msdo 29 | with: 30 | tools: templateanalyzer 31 | 32 | - name: Upload alerts to Security tab 33 | uses: github/codeql-action/upload-sarif@v2 34 | with: 35 | sarif_file: ${{ steps.msdo.outputs.sarifFile }} 36 | -------------------------------------------------------------------------------- /.github/workflows/azure-dev.yml: -------------------------------------------------------------------------------- 1 | name: Provision and Deploy 2 | on: 3 | workflow_dispatch: 4 | push: 5 | branches: 6 | - main 7 | - master 8 | 9 | permissions: 10 | id-token: write 11 | contents: read 12 | 13 | jobs: 14 | build-and-deploy: 15 | runs-on: ubuntu-latest 16 | container: 17 | image: mcr.microsoft.com/azure-dev-cli-apps:latest 18 | env: 19 | AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }} 20 | AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }} 21 | AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }} 22 | AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }} 23 | steps: 24 | - name: Checkout 25 | uses: actions/checkout@v3 26 | 27 | - name: Log in with Azure (Federated Credentials) 28 | if: ${{ env.AZURE_CLIENT_ID != '' }} 29 | run: | 30 | azd auth login ` 31 | --client-id "$Env:AZURE_CLIENT_ID" ` 32 | --federated-credential-provider "github" ` 33 | --tenant-id "$Env:AZURE_TENANT_ID" 34 | shell: pwsh 35 | 36 | - name: Log in with Azure (Client Credentials) 37 | if: ${{ env.AZURE_CREDENTIALS != '' }} 38 | run: | 39 | $info = $Env:AZURE_CREDENTIALS | ConvertFrom-Json -AsHashtable; 40 | Write-Host "::add-mask::$($info.clientSecret)" 41 | 42 | azd auth login ` 43 | --client-id "$($info.clientId)" ` 44 | --client-secret "$($info.clientSecret)" ` 45 | --tenant-id "$($info.tenantId)" 46 | shell: pwsh 47 | env: 48 | AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }} 49 | 50 | - name: Provision Infrastructure 51 | run: azd provision --no-prompt 52 | env: 53 | AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }} 54 | AZURE_LOCATION: ${{ vars.AZURE_LOCATION }} 55 | AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }} 56 | 57 | - name: Deploy Application 58 | run: azd deploy --no-prompt 59 | env: 60 | AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }} 61 | AZURE_LOCATION: ${{ vars.AZURE_LOCATION }} 62 | AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }} 63 | 64 | - name: Export environment variables 65 | run: | 66 | azd env get-values | grep AZURE_LOAD_TEST_NAME | sed 's/="/=/' | sed 's/"$//' >> $GITHUB_ENV 67 | azd env get-values | grep AZURE_LOAD_TEST_HOST | sed 's/="/=/' | sed 's/"$//' >> $GITHUB_ENV 68 | azd env get-values | grep AZURE_RESOURCE_GROUP_NAME | sed 's/="/=/' | sed 's/"$//' >> $GITHUB_ENV 69 | 70 | - name: Azure authentication (load testing) 71 | uses: azure/login@v1 72 | with: 73 | creds: ${{ secrets.AZURE_LT_CREDENTIALS }} 74 | 75 | - name: 'Azure Load Testing' 76 | uses: tonybaloney/load-testing@error_detail 77 | with: 78 | loadTestConfigFile: 'loadtest/smoketest.yaml' 79 | loadTestResource: ${{ env.AZURE_LOAD_TEST_NAME }} 80 | resourceGroup: ${{ env.AZURE_RESOURCE_GROUP_NAME }} 81 | env: | 82 | [ 83 | { 84 | "name": "domain", 85 | "value": "${{ env.AZURE_LOAD_TEST_HOST }}" 86 | } 87 | ] 88 | 89 | - uses: actions/upload-artifact@v2 90 | with: 91 | name: loadTestResults 92 | path: ${{ github.workspace }}/loadTest 93 | -------------------------------------------------------------------------------- /.github/workflows/python-app.yml: -------------------------------------------------------------------------------- 1 | # This workflow will install Python dependencies, run tests and lint with a single version of Python 2 | # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python 3 | 4 | name: Python application 5 | 6 | on: 7 | push: 8 | branches: [ "main" ] 9 | pull_request: 10 | branches: [ "main" ] 11 | 12 | permissions: 13 | contents: read 14 | 15 | jobs: 16 | build: 17 | 18 | runs-on: ubuntu-latest 19 | 20 | steps: 21 | - uses: actions/checkout@v3 22 | - name: Set up Python 3.10 23 | uses: actions/setup-python@v3 24 | with: 25 | python-version: "3.10" 26 | - name: Install dependencies 27 | working-directory: demo-application 28 | run: | 29 | python -m pip install --upgrade pip 30 | pip install -r requirements.txt 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | .vscode/settings.json 131 | .azure 132 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Run Django", 9 | "type": "python", 10 | "request": "launch", 11 | "program": "${workspaceFolder}/demo-application/manage.py", 12 | "args": [ 13 | "runserver", 14 | ], 15 | "cwd": "${workspaceFolder}", 16 | "django": true, 17 | "envFile": "${workspaceFolder}/.env" 18 | }, 19 | { 20 | "name": "Migrate", 21 | "type": "python", 22 | "request": "launch", 23 | "program": "${workspaceFolder}/demo-application/manage.py", 24 | "args": [ 25 | "migrate" 26 | ], 27 | "django": true 28 | }, 29 | { 30 | "name": "Super", 31 | "type": "python", 32 | "request": "launch", 33 | "program": "${workspaceFolder}/demo-application/manage.py", 34 | "args": [ 35 | "createsuperuser" 36 | ], 37 | "django": true 38 | } 39 | ] 40 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Anthony Shaw 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Django on Azure sample repo 2 | 3 | A copy of [the slides from my Django on Azure PyCon US 2021 workshop](slides.pdf) is available in this repository. 4 | 5 | ## Deployment 6 | 7 | 1. Run the following command to initialize the project. 8 | 9 | ```bash 10 | azd init --template https://github.com/tonybaloney/django-on-azure 11 | ``` 12 | 13 | This command will clone the code to your current folder and prompt you for the following information: 14 | 15 | - `Environment Name`: This will be used as a prefix for the resource group that will be created to hold all Azure resources. This name should be unique within your Azure subscription. 16 | 17 | 2. Run the following command to build a deployable copy of your application, provision the template's infrastructure to Azure and also deploy the application code to those newly provisioned resources. 18 | 19 | ```bash 20 | azd up 21 | ``` 22 | 23 | This command will prompt you for the following information: 24 | - `Azure Location`: The Azure location where your resources will be deployed. 25 | - `Azure Subscription`: The Azure Subscription where your resources will be deployed. 26 | 27 | > NOTE: This may take a while to complete as it executes three commands: `azd package` (builds a deployable copy of your application), `azd provision` (provisions Azure resources), and `azd deploy` (deploys application code). You will see a progress indicator as it packages, provisions and deploys your application. 28 | 29 | Checkout the [Azure Dev CLI documentation for more instructions on using the CLI](https://docs.microsoft.com/en-us/azure/developer/azure-developer-cli/get-started?WT.mc_id=python-00000-anthonyshaw). 30 | 31 | ## Sections 32 | 33 | ### Azure Architecture 34 | 35 | #### Links 36 | 37 | - [Tutorial: Deploy a Django web app with PostgreSQL in Azure App Service](https://docs.microsoft.com/azure/app-service/tutorial-python-postgresql-app?WT.mc_id=python-00000-anthonyshaw) 38 | 39 | ### Azure Web Apps 40 | 41 | [App Service Pricing](https://azure.microsoft.com/en-au/pricing/details/app-service/linux/?WT.mc_id=python-00000-anthonyshaw) 42 | 43 | #### App Service Components 44 | 45 | - [Web Apps](https://docs.microsoft.com/en-us/azure/app-service/?WT.mc_id=python-00000-anthonyshaw) 46 | - [App Service Plans](https://docs.microsoft.com/en-us/azure/app-service/overview-hosting-plans?WT.mc_id=python-00000-anthonyshaw) 47 | - [Continuous Deployment with App Service](https://tonybaloney.github.io/posts/django-on-azure-beyond-hello-world.html#testing) 48 | - [Using LocustIO to load test Django](https://tonybaloney.github.io/posts/django-on-azure-beyond-hello-world.html#performance) 49 | - [Django Template Caching](https://docs.djangoproject.com/en/3.2/topics/cache/) 50 | - [Scale up an App in Azure](https://docs.microsoft.com/en-us/azure/app-service/manage-scale-up?WT.mc_id=python-00000-anthonyshaw) 51 | 52 | #### Configuring ASGI workers 53 | 54 | 1. Add the following `startup.sh` script 55 | 56 | ```console 57 | gunicorn --workers 8 --threads 4 --timeout 60 --access-logfile '-' --error-logfile '-' --bind=0.0.0.0:8000 -k uvicorn.workers.UvicornWorker --chdir=/home/site/wwwroot your_django_app.asgi 58 | ``` 59 | 60 | 2. Make sure you add `uvicorn` to the `requirements.txt` file 61 | 3. Pick the right number of workers and threads for the instance size 62 | 4. To enable this startup command, you need to set the startup command to startup.sh in Settings -> Configuration -> General Settings -> Startup command. After making these changes, the application will restart 63 | 64 | ### Databases 65 | 66 | #### Overview of DBaaS offerings 67 | 68 | - [Azure Database for PostgreSQL](https://docs.microsoft.com/en-au/azure/postgresql/?WT.mc_id=python-00000-anthonyshaw) 69 | - [Azure SQL](https://docs.microsoft.com/en-us/azure/azure-sql/database/sql-database-paas-overview?WT.mc_id=python-00000-anthonyshaw) 70 | - [Azure Database for MySQL](https://docs.microsoft.com/en-us/azure/mysql/?WT.mc_id=python-00000-anthonyshaw) 71 | - [Azure Database for MariaDB](https://docs.microsoft.com/en-us/azure/mariadb/?WT.mc_id=python-00000-anthonyshaw) 72 | - [Django support for Microsoft SQL Server](https://github.com/microsoft/mssql-django?WT.mc_id=python-00000-anthonyshaw) 73 | - [Azure Database for Postgres Pricing](https://docs.microsoft.com/en-us/azure/app-service/?WT.mc_id=python-00000-anthonyshaw) 74 | 75 | #### Types of Postgres Deployment on Azure 76 | 77 | - [Flexible Server Overview](https://docs.microsoft.com/en-au/azure/postgresql/flexible-server/overview?WT.mc_id=python-00000-anthonyshaw) 78 | - [Single Server Overview](https://docs.microsoft.com/en-us/azure/postgresql/overview?WT.mc_id=python-00000-anthonyshaw) 79 | - [Hyperscale (Citus) Server](https://docs.microsoft.com/en-au/azure/postgresql/hyperscale-overview?WT.mc_id=python-00000-anthonyshaw) 80 | - [Azure Arc enabled Postgres](https://docs.microsoft.com/en-us/azure/azure-arc/data/what-is-azure-arc-enabled-postgres-hyperscale?WT.mc_id=python-00000-anthonyshaw) 81 | 82 | #### Other Useful Links 83 | 84 | - [Performance optimizations for Postgres on Azure](https://www.citusdata.com/blog/2020/05/20/postgres-tips-for-django-and-python/) 85 | 86 | ### Content Delivery 87 | 88 | - [Static Files and CDN example](https://tonybaloney.github.io/posts/django-on-azure-beyond-hello-world.html#storage) 89 | - [Azure CDN Pricing](https://azure.microsoft.com/pricing/details/cdn/?WT.mc_id=python-0000-anthonyshaw) 90 | 91 | ### Monitoring and Insights 92 | 93 | - [OpenCensus extension for Django](https://pypi.org/project/opencensus-ext-django/) 94 | - [OpenCensus extension for Azure](https://pypi.org/project/opencensus-ext-azure/) 95 | 96 | ### Deployment and DevOps 97 | 98 | - [Azure Pipelines Examples](https://tonybaloney.github.io/posts/django-on-azure-beyond-hello-world.html#testing) 99 | 100 | ### Extra Components 101 | 102 | - [Writing an Azure Function for Python](https://docs.microsoft.com/en-us/azure/azure-functions/create-first-function-vs-code-python?WT.mc_id=python-00000-anthonyshaw) 103 | - [SendGrid on the Azure Marketplace](https://azuremarketplace.microsoft.com/marketplace/apps/SendGrid.SendGrid?WT.mc_id=python-0000-anthonyshaw) 104 | 105 | -------------------------------------------------------------------------------- /azure.yaml: -------------------------------------------------------------------------------- 1 | # yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json 2 | 3 | name: pycon-django-workshop 4 | metadata: 5 | template: pycon-django-workshop@0.0.1-beta 6 | services: 7 | web: 8 | project: demo-application/ 9 | language: py 10 | host: appservice 11 | -------------------------------------------------------------------------------- /demo-application/README.md: -------------------------------------------------------------------------------- 1 | # ReleCloud sample 2 | 3 | This is a sample Django project 4 | 5 | ## Install and startup steps 6 | 7 | ```bash 8 | # Linux/macOS/BASH 9 | python3 -m venv venv 10 | source ./venv/bin/activate 11 | pip install -r requirements.txt 12 | python manage.py runserver 13 | 14 | # Windows 15 | python -m venv venv 16 | .\\venv\\scripts\\activate 17 | pip install -r requirements.txt 18 | python manage.py runserver 19 | ``` 20 | -------------------------------------------------------------------------------- /demo-application/gunicorn.conf.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from opentelemetry.instrumentation.django import DjangoInstrumentor 4 | from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter 5 | 6 | from opentelemetry.sdk.trace import TracerProvider 7 | from opentelemetry.sdk.trace.export import BatchSpanProcessor 8 | from opentelemetry.sdk.resources import SERVICE_NAME, Resource 9 | 10 | def post_fork(server, worker): 11 | server.log.info("Worker spawned (pid: %s)", worker.pid) 12 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') 13 | if 'APPLICATIONINSIGHTS_CONNECTION_STRING' in os.environ: 14 | tracer = TracerProvider(resource=Resource({SERVICE_NAME: "Django"})) 15 | tracer.add_span_processor(BatchSpanProcessor( 16 | AzureMonitorTraceExporter.from_connection_string( 17 | os.getenv('APPLICATIONINSIGHTS_CONNECTION_STRING') 18 | ) 19 | )) 20 | DjangoInstrumentor().instrument(tracer_provider = tracer) 21 | -------------------------------------------------------------------------------- /demo-application/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | from opentelemetry.instrumentation.django import DjangoInstrumentor 6 | from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter 7 | 8 | from opentelemetry.sdk.trace import TracerProvider 9 | from opentelemetry.sdk.trace.export import BatchSpanProcessor 10 | from opentelemetry.sdk.resources import SERVICE_NAME, Resource 11 | 12 | def main(): 13 | """Run administrative tasks.""" 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') 15 | os.environ.setdefault('WEBSITE_HOSTNAME', 'localhost') 16 | 17 | if 'APPLICATIONINSIGHTS_CONNECTION_STRING' in os.environ: 18 | tracer = TracerProvider(resource=Resource({SERVICE_NAME: "FastAPI"})) 19 | tracer.add_span_processor(BatchSpanProcessor( 20 | AzureMonitorTraceExporter.from_connection_string( 21 | os.getenv('APPLICATIONINSIGHTS_CONNECTION_STRING') 22 | ) 23 | )) 24 | DjangoInstrumentor().instrument(tracer_provider = tracer) 25 | try: 26 | 27 | from django.core.management import execute_from_command_line 28 | except ImportError as exc: 29 | raise ImportError( 30 | "Couldn't import Django. Are you sure it's installed and " 31 | "available on your PYTHONPATH environment variable? Did you " 32 | "forget to activate a virtual environment?" 33 | ) from exc 34 | execute_from_command_line(sys.argv) 35 | 36 | 37 | if __name__ == '__main__': 38 | main() 39 | -------------------------------------------------------------------------------- /demo-application/project/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tonybaloney/django-on-azure/f04641c27fe96c0aad6b7927d10d6670d026efe0/demo-application/project/__init__.py -------------------------------------------------------------------------------- /demo-application/project/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for project project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /demo-application/project/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for project project. 3 | 4 | Generated by 'django-admin startproject' using Django 3.1.7. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/3.1/ref/settings/ 11 | """ 12 | import os 13 | from pathlib import Path 14 | from azure.identity import DefaultAzureCredential 15 | 16 | 17 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 18 | BASE_DIR = Path(__file__).resolve().parent.parent 19 | 20 | 21 | # Quick-start development settings - unsuitable for production 22 | # See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/ 23 | 24 | # SECURITY WARNING: keep the secret key used in production secret! 25 | SECRET_KEY = os.getenv("SECRET_KEY") 26 | 27 | # SECURITY WARNING: don't run with debug turned on in production! 28 | DEBUG = False 29 | 30 | ALLOWED_HOSTS = [os.environ["WEBSITE_HOSTNAME"], '127.0.0.1', 'localhost'] 31 | 32 | DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' 33 | 34 | # Application definition 35 | 36 | INSTALLED_APPS = [ 37 | 'django.contrib.admin', 38 | 'django.contrib.auth', 39 | 'django.contrib.contenttypes', 40 | 'django.contrib.sessions', 41 | 'django.contrib.messages', 42 | 'django.contrib.staticfiles', 43 | 'storages', 44 | 'crispy_forms', 45 | 'crispy_bootstrap4', 46 | 'relecloud.apps.RelecloudConfig', 47 | ] 48 | 49 | CRISPY_TEMPLATE_PACK = 'bootstrap4' 50 | CRISPY_ALLOWED_TEMPLATE_PACKS = 'bootstrap4' 51 | 52 | MIDDLEWARE = [ 53 | 'django.middleware.security.SecurityMiddleware', 54 | 'django.contrib.sessions.middleware.SessionMiddleware', 55 | 'django.middleware.common.CommonMiddleware', 56 | 'django.middleware.csrf.CsrfViewMiddleware', 57 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 58 | 'django.contrib.messages.middleware.MessageMiddleware', 59 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 60 | ] 61 | 62 | ROOT_URLCONF = 'project.urls' 63 | 64 | TEMPLATES = [ 65 | { 66 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 67 | 'DIRS': [], 68 | 'APP_DIRS': True, 69 | 'OPTIONS': { 70 | 'context_processors': [ 71 | 'django.template.context_processors.debug', 72 | 'django.template.context_processors.request', 73 | 'django.contrib.auth.context_processors.auth', 74 | 'django.contrib.messages.context_processors.messages', 75 | ], 76 | }, 77 | }, 78 | ] 79 | 80 | WSGI_APPLICATION = 'project.wsgi.application' 81 | 82 | 83 | # Database 84 | # https://docs.djangoproject.com/en/3.1/ref/settings/#databases 85 | 86 | if "DATABASE_ADDRESS" not in os.environ: 87 | DATABASES = { 88 | "default": { 89 | "ENGINE": "django.db.backends.sqlite3", 90 | "NAME": BASE_DIR / "db.sqlite3", 91 | } 92 | } 93 | else: 94 | DATABASES = { 95 | "default": { 96 | "ENGINE": "django.db.backends.postgresql", 97 | "NAME": "django", 98 | "USER": os.getenv("DATABASE_USERNAME"), 99 | "PASSWORD": os.getenv("DATABASE_PASSWORD"), 100 | "HOST": os.getenv("DATABASE_ADDRESS"), 101 | "PORT": "5432", 102 | "OPTIONS": {"sslmode": "require"}, 103 | }, 104 | } 105 | 106 | # Password validation 107 | # https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators 108 | 109 | AUTH_PASSWORD_VALIDATORS = [ 110 | { 111 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 112 | }, 113 | { 114 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 115 | }, 116 | { 117 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 118 | }, 119 | { 120 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 121 | }, 122 | ] 123 | 124 | 125 | # Internationalization 126 | # https://docs.djangoproject.com/en/3.1/topics/i18n/ 127 | 128 | LANGUAGE_CODE = 'en-us' 129 | 130 | TIME_ZONE = 'UTC' 131 | 132 | USE_I18N = True 133 | 134 | USE_L10N = True 135 | 136 | USE_TZ = True 137 | 138 | AZURE_ACCOUNT_NAME = os.environ.get("AZURE_STORAGEACCOUNT_NAME", False) 139 | AZURE_MEDIA_CONTAINER = os.environ.get("AZURE_MEDIA_CONTAINER", "media") 140 | AZURE_STATIC_CONTAINER = os.environ.get("AZURE_STATIC_CONTAINER", "static") 141 | 142 | # AZURE_CUSTOM_DOMAIN = f'{AZURE_ACCOUNT_NAME}.azureedge.net' # CDN URL 143 | AZURE_CUSTOM_DOMAIN = f"{AZURE_ACCOUNT_NAME}.blob.core.windows.net" # Files URL 144 | 145 | STORAGES = { 146 | "default": { 147 | "BACKEND": "storages.backends.azure_storage.AzureStorage", 148 | "OPTIONS": { 149 | "token_credential": DefaultAzureCredential(), 150 | "account_name": AZURE_ACCOUNT_NAME, 151 | "azure_container": AZURE_MEDIA_CONTAINER, 152 | "expiration_secs": 3600, 153 | }, 154 | }, 155 | "staticfiles": { 156 | "BACKEND": "storages.backends.azure_storage.AzureStorage", 157 | "OPTIONS": { 158 | "token_credential": DefaultAzureCredential(), 159 | "account_name": AZURE_ACCOUNT_NAME, 160 | "azure_container": AZURE_STATIC_CONTAINER, 161 | "expiration_secs": 3600, 162 | }, 163 | }, 164 | } 165 | 166 | STATIC_URL = f"https://{AZURE_CUSTOM_DOMAIN}/{AZURE_STATIC_CONTAINER}/" 167 | MEDIA_URL = f"https://{AZURE_CUSTOM_DOMAIN}/{AZURE_MEDIA_CONTAINER}/" 168 | 169 | STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles") 170 | # any static paths you want to publish 171 | STATICFILES_DIRS = [os.path.join(BASE_DIR, "relecloud", "static")] 172 | 173 | 174 | INSTRUMENTATION_KEY = os.getenv("APPINSIGHTS_CONNECTION_STRING", None) 175 | LOGGING = { 176 | 'version': 1, 177 | 'disable_existing_loggers': False, 178 | 'handlers': { 179 | 'console': { 180 | 'class': 'logging.StreamHandler', 181 | }, 182 | }, 183 | 'root': { 184 | 'handlers': ['console'], 185 | 'level': 'WARNING', 186 | }, 187 | } 188 | -------------------------------------------------------------------------------- /demo-application/project/urls.py: -------------------------------------------------------------------------------- 1 | """project URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/3.1/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import path, include 18 | 19 | urlpatterns = [ 20 | path('', include('relecloud.urls')), 21 | path('admin/', admin.site.urls), 22 | ] 23 | -------------------------------------------------------------------------------- /demo-application/project/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for project project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /demo-application/relecloud/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tonybaloney/django-on-azure/f04641c27fe96c0aad6b7927d10d6670d026efe0/demo-application/relecloud/__init__.py -------------------------------------------------------------------------------- /demo-application/relecloud/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from . import models 3 | 4 | # Register your models here. 5 | admin.site.register(models.Cruise) 6 | admin.site.register(models.Destination) 7 | admin.site.register(models.InfoRequest) 8 | -------------------------------------------------------------------------------- /demo-application/relecloud/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class RelecloudConfig(AppConfig): 5 | name = 'relecloud' 6 | -------------------------------------------------------------------------------- /demo-application/relecloud/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.7 on 2021-03-30 21:46 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | initial = True 10 | 11 | dependencies = [ 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='Cabin', 17 | fields=[ 18 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 19 | ('name', models.CharField(max_length=50, unique=True)), 20 | ('description', models.TextField(max_length=2000)), 21 | ], 22 | ), 23 | migrations.CreateModel( 24 | name='Cruise', 25 | fields=[ 26 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 27 | ('destination', models.CharField(max_length=50, unique=True)), 28 | ('description', models.TextField(max_length=2000)), 29 | ], 30 | ), 31 | migrations.CreateModel( 32 | name='CruiseCabin', 33 | fields=[ 34 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 35 | ('price', models.DecimalField(decimal_places=2, max_digits=10)), 36 | ('cabin', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='relecloud.cabin')), 37 | ('cruise', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='relecloud.cruise')), 38 | ], 39 | ), 40 | ] 41 | -------------------------------------------------------------------------------- /demo-application/relecloud/migrations/0002_auto_20210330_2200.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.7 on 2021-03-30 22:00 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('relecloud', '0001_initial'), 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='Destination', 16 | fields=[ 17 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 18 | ('name', models.CharField(max_length=50, unique=True)), 19 | ('description', models.TextField(max_length=2000)), 20 | ], 21 | ), 22 | migrations.CreateModel( 23 | name='InfoRequest', 24 | fields=[ 25 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 26 | ('name', models.CharField(max_length=50, unique=True)), 27 | ('email', models.EmailField(max_length=254)), 28 | ('notes', models.TextField(max_length=2000)), 29 | ], 30 | ), 31 | migrations.RemoveField( 32 | model_name='cruisecabin', 33 | name='cabin', 34 | ), 35 | migrations.RemoveField( 36 | model_name='cruisecabin', 37 | name='cruise', 38 | ), 39 | migrations.RenameField( 40 | model_name='cruise', 41 | old_name='destination', 42 | new_name='name', 43 | ), 44 | migrations.DeleteModel( 45 | name='Cabin', 46 | ), 47 | migrations.DeleteModel( 48 | name='CruiseCabin', 49 | ), 50 | migrations.AddField( 51 | model_name='inforequest', 52 | name='cruise', 53 | field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='relecloud.cruise'), 54 | ), 55 | migrations.AddField( 56 | model_name='cruise', 57 | name='destinations', 58 | field=models.ManyToManyField(to='relecloud.Destination'), 59 | ), 60 | ] 61 | -------------------------------------------------------------------------------- /demo-application/relecloud/migrations/0003_auto_20210331_1932.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.7 on 2021-03-31 19:32 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('relecloud', '0002_auto_20210330_2200'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='cruise', 15 | name='destinations', 16 | field=models.ManyToManyField(related_name='cruises', to='relecloud.Destination'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /demo-application/relecloud/migrations/0004_auto_20210331_2016.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.7 on 2021-03-31 20:16 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('relecloud', '0003_auto_20210331_1932'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='inforequest', 15 | name='name', 16 | field=models.CharField(max_length=50), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /demo-application/relecloud/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tonybaloney/django-on-azure/f04641c27fe96c0aad6b7927d10d6670d026efe0/demo-application/relecloud/migrations/__init__.py -------------------------------------------------------------------------------- /demo-application/relecloud/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | class Destination(models.Model): 5 | name = models.CharField( 6 | unique=True, 7 | max_length=50, 8 | null=False, 9 | blank=False, 10 | ) 11 | description = models.TextField( 12 | max_length=2000, 13 | null=False, 14 | blank=False 15 | ) 16 | def __str__(self): 17 | return self.name 18 | 19 | class Cruise(models.Model): 20 | name = models.CharField( 21 | unique=True, 22 | max_length=50, 23 | null=False, 24 | blank=False, 25 | ) 26 | description = models.TextField( 27 | max_length=2000, 28 | null=False, 29 | blank=False 30 | ) 31 | destinations = models.ManyToManyField( 32 | Destination, 33 | related_name='cruises' 34 | ) 35 | def __str__(self): 36 | return self.name 37 | 38 | class InfoRequest(models.Model): 39 | name = models.CharField( 40 | max_length=50, 41 | null=False, 42 | blank=False, 43 | ) 44 | email = models.EmailField() 45 | notes = models.TextField( 46 | max_length=2000, 47 | null=False, 48 | blank=False 49 | ) 50 | cruise = models.ForeignKey( 51 | Cruise, 52 | on_delete=models.PROTECT 53 | ) 54 | -------------------------------------------------------------------------------- /demo-application/relecloud/static/res/css/theme.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sourceRoot":"","sources":["../../node_modules/bootstrap/scss/bootstrap.scss","../../scss/custom.scss","../../node_modules/bootstrap/scss/_root.scss","../../node_modules/bootstrap/scss/_reboot.scss","../../node_modules/bootstrap/scss/_variables.scss","../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../node_modules/bootstrap/scss/mixins/_hover.scss","../../node_modules/bootstrap/scss/_type.scss","../../node_modules/bootstrap/scss/mixins/_lists.scss","../../node_modules/bootstrap/scss/_images.scss","../../node_modules/bootstrap/scss/mixins/_image.scss","../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../node_modules/bootstrap/scss/_code.scss","../../node_modules/bootstrap/scss/_grid.scss","../../node_modules/bootstrap/scss/mixins/_grid.scss","../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../node_modules/bootstrap/scss/mixins/_grid-framework.scss","../../node_modules/bootstrap/scss/_tables.scss","../../node_modules/bootstrap/scss/mixins/_table-row.scss","../../node_modules/bootstrap/scss/_forms.scss","../../node_modules/bootstrap/scss/mixins/_transition.scss","../../node_modules/bootstrap/scss/mixins/_forms.scss","../../node_modules/bootstrap/scss/mixins/_gradients.scss","../../node_modules/bootstrap/scss/_buttons.scss","../../node_modules/bootstrap/scss/mixins/_buttons.scss","../../node_modules/bootstrap/scss/_transitions.scss","../../node_modules/bootstrap/scss/_dropdown.scss","../../node_modules/bootstrap/scss/mixins/_caret.scss","../../node_modules/bootstrap/scss/mixins/_nav-divider.scss","../../node_modules/bootstrap/scss/_button-group.scss","../../node_modules/bootstrap/scss/_input-group.scss","../../node_modules/bootstrap/scss/_custom-forms.scss","../../node_modules/bootstrap/scss/_nav.scss","../../node_modules/bootstrap/scss/_navbar.scss","../../node_modules/bootstrap/scss/_card.scss","../../node_modules/bootstrap/scss/_breadcrumb.scss","../../node_modules/bootstrap/scss/_pagination.scss","../../node_modules/bootstrap/scss/mixins/_pagination.scss","../../node_modules/bootstrap/scss/_badge.scss","../../node_modules/bootstrap/scss/mixins/_badge.scss","../../node_modules/bootstrap/scss/_jumbotron.scss","../../node_modules/bootstrap/scss/_alert.scss","../../node_modules/bootstrap/scss/mixins/_alert.scss","../../node_modules/bootstrap/scss/_progress.scss","../../node_modules/bootstrap/scss/_media.scss","../../node_modules/bootstrap/scss/_list-group.scss","../../node_modules/bootstrap/scss/mixins/_list-group.scss","../../node_modules/bootstrap/scss/_close.scss","../../node_modules/bootstrap/scss/_toasts.scss","../../node_modules/bootstrap/scss/_modal.scss","../../node_modules/bootstrap/scss/_tooltip.scss","../../node_modules/bootstrap/scss/mixins/_reset-text.scss","../../node_modules/bootstrap/scss/_popover.scss","../../node_modules/bootstrap/scss/_carousel.scss","../../node_modules/bootstrap/scss/mixins/_clearfix.scss","../../node_modules/bootstrap/scss/_spinners.scss","../../node_modules/bootstrap/scss/utilities/_align.scss","../../node_modules/bootstrap/scss/mixins/_background-variant.scss","../../node_modules/bootstrap/scss/utilities/_background.scss","../../node_modules/bootstrap/scss/utilities/_borders.scss","../../node_modules/bootstrap/scss/utilities/_display.scss","../../node_modules/bootstrap/scss/utilities/_embed.scss","../../node_modules/bootstrap/scss/utilities/_flex.scss","../../node_modules/bootstrap/scss/utilities/_float.scss","../../node_modules/bootstrap/scss/utilities/_interactions.scss","../../node_modules/bootstrap/scss/utilities/_overflow.scss","../../node_modules/bootstrap/scss/utilities/_position.scss","../../node_modules/bootstrap/scss/utilities/_screenreaders.scss","../../node_modules/bootstrap/scss/mixins/_screen-reader.scss","../../node_modules/bootstrap/scss/utilities/_shadows.scss","../../node_modules/bootstrap/scss/utilities/_sizing.scss","../../node_modules/bootstrap/scss/utilities/_spacing.scss","../../node_modules/bootstrap/scss/utilities/_stretched-link.scss","../../node_modules/bootstrap/scss/utilities/_text.scss","../../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../../node_modules/bootstrap/scss/mixins/_text-emphasis.scss","../../node_modules/bootstrap/scss/mixins/_text-hide.scss","../../node_modules/bootstrap/scss/utilities/_visibility.scss","../../node_modules/bootstrap/scss/_print.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgkBQ;AChkBR;EAGI;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAKF;EACA;;;ACCF;AAAA;AAAA;EAGE;;;AAGF;EACE;EACA;EACA;EACA;;;AAMF;EACE;;;AAUF;EACE;EACA,aCqO4B;ECrJxB,WAtCa;EFxCjB,aC8O4B;ED7O5B,aCkP4B;EDjP5B,OCnCS;EDoCT;EACA,kBC9CS;;;AD0DX;EACE;;;AASF;EACE;EACA;EACA;;;AAaF;EACE;EACA,eCgN4B;;;ADzM9B;EACE;EACA,eCoF0B;;;ADzE5B;AAAA;EAEE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;AAAA;AAAA;AAAA;EAIE;;;AAGF;EACE,aCiJ4B;;;AD9I9B;EACE;EACA;;;AAGF;EACE;;;AAGF;AAAA;EAEE,aCoI4B;;;ADjI9B;EExFI;;;AFiGJ;AAAA;EAEE;EEnGE;EFqGF;EACA;;;AAGF;EAAM;;;AACN;EAAM;;;AAON;EACE,OCXwC;EDYxC,iBCXwC;EDYxC;;AGhLA;EHmLE,OCdsC;EDetC,iBCdsC;;;ADuB1C;EACE;EACA;;AG/LA;EHkME;EACA;;;AASJ;AAAA;AAAA;AAAA;EAIE,aCyD4B;EC7M1B;;;AFwJJ;EAEE;EAEA;EAEA;EAGA;;;AAQF;EAEE;;;AAQF;EACE;EACA;;;AAGF;EAGE;EACA;;;AAQF;EACE;;;AAGF;EACE,aC6E4B;ED5E5B,gBC4E4B;ED3E5B,OCtQS;EDuQT;EACA;;;AAOF;EAEE;EACA;;;AAQF;EAEE;EACA,eC2JsC;;;ADrJxC;EAEE;;;AAQF;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EE5PE;EF8PF;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAMF;EACE;;;AAMF;EACE;;;AAOF;AAAA;AAAA;AAAA;EAIE;;;AASE;AAAA;AAAA;AAAA;EACE;;;AAMN;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAIF;EACE;EAEA;;;AAGF;EAME;EAEA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EEnSI,WAtCa;EF2UjB;EACA;EACA;;;AAGF;EACE;;;AAIF;AAAA;EAEE;;;AAGF;EAKE;EACA;;;AAOF;EACE;;;AAQF;EACE;EACA;;;AAOF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAKF;EACE;;;AI5dF;AAAA;EAEE,eHqS4B;EGnS5B,aHqS4B;EGpS5B,aHqS4B;;;AGjS9B;EFgHM,WAtCa;;;AEzEnB;EF+GM,WAtCa;;;AExEnB;EF8GM,WAtCa;;;AEvEnB;EF6GM,WAtCa;;;AEtEnB;EF4GM,WAtCa;;;AErEnB;EF2GM,WAtCa;;;AEnEnB;EFyGM,WAtCa;EEjEjB,aHuS4B;;;AGnS9B;EFmGM,WAtCa;EE3DjB,aH0R4B;EGzR5B,aHiR4B;;;AG/Q9B;EF8FM,WAtCa;EEtDjB,aHsR4B;EGrR5B,aH4Q4B;;;AG1Q9B;EFyFM,WAtCa;EEjDjB,aHkR4B;EGjR5B,aHuQ4B;;;AGrQ9B;EFoFM,WAtCa;EE5CjB,aH8Q4B;EG7Q5B,aHkQ4B;;;AG1P9B;EACE,YHgFO;EG/EP,eH+EO;EG9EP;EACA;;;AAQF;AAAA;EFMI;EEHF,aH0N4B;;;AGvN9B;AAAA;EAEE,SHkQ4B;EGjQ5B,kBH0Q4B;;;AGlQ9B;EC/EE;EACA;;;ADmFF;ECpFE;EACA;;;ADsFF;EACE;;AAEA;EACE,cHoP0B;;;AG1O9B;EFjCI;EEmCF;;;AAIF;EACE,eHuBO;ECRH,WAtCa;;;AE2BnB;EACE;EF7CE;EE+CF,OH1GS;;AG4GT;EACE;;;AEnHJ;ECIE;EAGA;;;ADDF;EACE,SLmgCkC;EKlgClC,kBLRS;EKST;EEEE;EDPF;EAGA;;;ADcF;EAEE;;;AAGF;EACE;EACA;;;AAGF;EJkCI;EIhCF,OL3BS;;;AQZX;EPuEI;EOrEF,ORmCQ;EQlCR;;AAGA;EACE;;;AAKJ;EACE;EP0DE;EOxDF,ORTS;EQUT,kBRDS;EOEP;;ACG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ADQN;EC3DA;EFAE,kBlBsEW;EoBpEb,cpBoEa;;AEhEb;EkBAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAEE;EFbA,kBED2D;EAgB3D,cAhBqG;EAqBnG;;AAKJ;EAEE;EACA,kBpB0CW;EoBzCX,cpByCW;;AoBlCb;EAGE;EACA,kBAzC+I;EA6C/I,cA7CyL;;AA+CzL;EAKI;;;ADQN;EC3DA;EFAE,kBlBsEW;EoBpEb,cpBoEa;;AEhEb;EkBAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAEE;EFbA,kBED2D;EAgB3D,cAhBqG;EAqBnG;;AAKJ;EAEE;EACA,kBpB0CW;EoBzCX,cpByCW;;AoBlCb;EAGE;EACA,kBAzC+I;EA6C/I,cA7CyL;;AA+CzL;EAKI;;;ADQN;EC3DA;EFAE,kBlBsEW;EoBpEb,cpBoEa;;AEhEb;EkBAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAEE;EFbA,kBED2D;EAgB3D,cAhBqG;EAqBnG;;AAKJ;EAEE;EACA,kBpB0CW;EoBzCX,cpByCW;;AoBlCb;EAGE;EACA,kBAzC+I;EA6C/I,cA7CyL;;AA+CzL;EAKI;;;ADcN;ECPA,OpBYa;EoBXb,cpBWa;;AEhEb;EkBwDE,OALgD;EAMhD,kBpBOW;EoBNX,cpBMW;;AoBHb;EAEE;;AAGF;EAEE,OpBJW;EoBKX;;AAGF;EAGE;EACA,kBpBZW;EoBaX,cpBbW;;AoBeX;EAKI;;;ADzBN;ECPA,OpBYa;EoBXb,cpBWa;;AEhEb;EkBwDE,OALgD;EAMhD,kBpBOW;EoBNX,cpBMW;;AoBHb;EAEE;;AAGF;EAEE,OpBJW;EoBKX;;AAGF;EAGE;EACA,kBpBZW;EoBaX,cpBbW;;AoBeX;EAKI;;;ADzBN;ECPA,OpBYa;EoBXb,cpBWa;;AEhEb;EkBwDE,OALgD;EAMhD,kBpBOW;EoBNX,cpBMW;;AoBHb;EAEE;;AAGF;EAEE,OpBJW;EoBKX;;AAGF;EAGE;EACA,kBpBZW;EoBaX,cpBbW;;AoBeX;EAKI;;;ADzBN;ECPA,OpBYa;EoBXb,cpBWa;;AEhEb;EkBwDE,OALgD;EAMhD,kBpBOW;EoBNX,cpBMW;;AoBHb;EAEE;;AAGF;EAEE,OpBJW;EoBKX;;AAGF;EAGE;EACA,kBpBZW;EoBaX,cpBbW;;AoBeX;EAKI;;;ADzBN;ECPA,OpBYa;EoBXb,cpBWa;;AEhEb;EkBwDE,OALgD;EAMhD,kBpBOW;EoBNX,cpBMW;;AoBHb;EAEE;;AAGF;EAEE,OpBJW;EoBKX;;AAGF;EAGE;EACA,kBpBZW;EoBaX,cpBbW;;AoBeX;EAKI;;;ADzBN;ECPA,OpBYa;EoBXb,cpBWa;;AEhEb;EkBwDE,OALgD;EAMhD,kBpBOW;EoBNX,cpBMW;;AoBHb;EAEE;;AAGF;EAEE,OpBJW;EoBKX;;AAGF;EAGE;EACA,kBpBZW;EoBaX,cpBbW;;AoBeX;EAKI;;;ADzBN;ECPA,OpBYa;EoBXb,cpBWa;;AEhEb;EkBwDE,OALgD;EAMhD,kBpBOW;EoBNX,cpBMW;;AoBHb;EAEE;;AAGF;EAEE,OpBJW;EoBKX;;AAGF;EAGE;EACA,kBpBZW;EoBaX,cpBbW;;AoBeX;EAKI;;;ADzBN;ECPA,OpBYa;EoBXb,cpBWa;;AEhEb;EkBwDE,OALgD;EAMhD,kBpBOW;EoBNX,cpBMW;;AoBHb;EAEE;;AAGF;EAEE,OpBJW;EoBKX;;AAGF;EAGE;EACA,kBpBZW;EoBaX,cpBbW;;AoBeX;EAKI;;;ADdR;EACE,anB4M4B;EmB3M5B,OnB2FwC;EmB1FxC,iBnB2FwC;;AEpKxC;EiB4EE,OnByFsC;EmBxFtC,iBnByFsC;;AmBtFxC;EAEE,iBnBoFsC;;AmBjFxC;EAEE,OnBtFO;EmBuFP;;;AAWJ;ECPE;EnBuBI,WAtCa;EmBiBjB,apB+H4B;EOvN1B;;;AYiGJ;ECXE;EnBuBI,WAtCa;EmBiBjB,apBgI4B;EOxN1B;;;AY0GJ;EACE;EACA;;AAGA;EACE,YnBuT0B;;;AmB/S5B;AAAA;AAAA;EACE;;;AE3IJ;ELgBM,YKfJ;;ALmBI;EKpBN;ILqBQ;;;AKlBN;EACE;;;AAKF;EACE;;;AAIJ;EACE;EACA;EACA;ELDI,YKEJ;;ALEI;EKNN;ILOQ;;;;AMpBR;AAAA;AAAA;AAAA;EAIE;;;AAGF;EACE;;ACoBE;EACE;EACA,avB+NwB;EuB9NxB,gBvB6NwB;EuB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;AAWF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EnB3JI;EACA;;;AmBqKJ;AAAA;AAAA;AAAA;AAAA;AAAA;EnBxJI;EACA;;;AoBxCJ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA,c3BwfsC;;;A2BrfxC;EACE;EACA;EACA;EACA,O3BofsC;E2BnftC;EACA;;AAEA;EACE,O3BzBO;E2B0BP,c3ByN0B;EkBpP1B,kBlBoP0B;;A2BpN5B;EAKI,Y3B+VwB;;A2B3V5B;EACE,c3BqboC;;A2BlbtC;EACE,O3B7CO;E2B8CP,kB3Bif4C;E2Bhf5C,c3Bgf4C;;A2Bze5C;EACE,O3BjDK;;A2BmDL;EACE,kB3BxDG;;;A2BkEX;EACE;EACA;EAEA;;AAIA;EACE;EACA;EACA;EACA;EACA,O3BuboC;E2BtbpC,Q3BsboC;E2BrbpC;EACA;EACA,kB3BrFO;E2BsFP;;AAKF;EACE;EACA;EACA;EACA;EACA,O3BwaoC;E2BvapC,Q3BuaoC;E2BtapC;EACA;;;AAUF;EpBlGE;;AoBuGA;EACE;;AAKF;EACE,c3B0HwB;EkBpP1B,kBlBoP0B;;A2BtH1B;EACE;;AAKF;ETpIA,kBlBwhB4C;;A2BjZ5C;ETvIA,kBlBwhB4C;;;A2BtY9C;EAEE,e3ByZ4C;;A2BrZ5C;EACE;;AAKF;ET9JA,kBlBwhB4C;;;A2B/WhD;EACE;;AAGE;EACE;EACA,O3BiY0C;E2BhY1C;EAEA,e3B+X0C;;A2B5X5C;EACE;EACA;EACA,O3B0X0C;E2BzX1C,Q3ByX0C;E2BxX1C,kB3BpLK;E2BsLL,e3BqX0C;EgBviB1C,YWmLA;;AX/KA;EWuKF;IXtKI;;;AWmLJ;EACE,kB3BlMK;E2BmML;;AAKF;ETzMA,kBlBwhB4C;;;A2BlUhD;EACE;EACA;EACA,Q3BoRsC;E2BnRtC;E1BjGI,WAtCa;E0B0IjB,a3B4D4B;E2B3D5B,a3BgE4B;E2B/D5B,O3BvNS;E2BwNT;EACA;EACA;EpBtNE;EoByNF;;AAEA;EACE,c3BuPoC;E2BtPpC;EAKE,Y3BkW8B;;A2B/VhC;EAME,O3B/OK;E2BgPL,kB3BvPK;;A2B2PT;EAEE;EACA,e3B8H0B;E2B7H1B;;AAGF;EACE,O3B7PO;E2B8PP,kB3BlQO;;A2BsQT;EACE;;AAIF;EACE;EACA;;;AAIJ;EACE,Q3ByNsC;E2BxNtC,a3BgH4B;E2B/G5B,gB3B+G4B;E2B9G5B,c3B+G4B;EC9QxB,WAtCa;;;A0ByMnB;EACE,Q3BkNsC;E2BjNtC,a3B6G4B;E2B5G5B,gB3B4G4B;E2B3G5B,c3B4G4B;ECnRxB,WAtCa;;;A0BsNnB;EACE;EACA;EACA;EACA,Q3BgMsC;E2B/LtC;;;AAGF;EACE;EACA;EACA;EACA,Q3BwLsC;E2BvLtC;EACA;EACA;;AAEA;EACE,c3BoKoC;E2BnKpC,Y3BwE0B;;A2BpE5B;EAEE,kB3B/TO;;A2BmUP;EACE,S3B0Ta;;A2BtTjB;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,Q3BuJsC;E2BtJtC;EACA;EAEA,a3BjE4B;E2BkE5B,a3B7D4B;E2B8D5B,O3BpVS;E2BqVT,kB3B5VS;E2B6VT;EpBlVE;;AoBsVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA,Q3BgIoC;E2B/HpC;EACA,a3B7E0B;E2B8E1B,O3BpWO;E2BqWP;ET7WA,kBlBGO;E2B4WP;EpBnWA;;;AoB8WJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIA;EAA0B,Y3BmOe;;A2BlOzC;EAA0B,Y3BkOe;;A2BjOzC;EAA0B,Y3BiOe;;A2B9N3C;EACE;;AAGF;EACE,O3BmNyC;E2BlNzC,Q3BkNyC;E2BjNzC;ETlZA,kBlBoP0B;E2BgK1B,Q3BkNyC;EO1lBzC;ESFE,YW6YF;EACA;;AX1YE;EWiYJ;IXhYM;;;AW2YJ;ET1ZA,kBlB2mByC;;A2B5M3C;EACE,O3B4LgC;E2B3LhC,Q3B4LgC;E2B3LhC;EACA,Q3B2LgC;E2B1LhC,kB3BhaO;E2BiaP;EpBzZA;;AoB8ZF;EACE,O3BwLyC;E2BvLzC,Q3BuLyC;EkBnmBzC,kBlBoP0B;E2B0L1B,Q3BwLyC;EO1lBzC;ESFE,YWuaF;EACA;;AXpaE;EW4ZJ;IX3ZM;;;AWqaJ;ETpbA,kBlB2mByC;;A2BlL3C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;;EAEA;IAEE;IACA,c9BuqB8B;I8BtqB9B;IACA,a9BqqB8B;;;;A8BxpBlC;EACE,e9BupBgC;;AWlxBhC;EmBuHJ;IAQI;IACA;;EAGA;IAEE;IACA;;EAEA;IACE;IACA;;EAKA;IvBzKJ;IACA;;EuB2KM;AAAA;IAGE;;EAEF;AAAA;IAGE;;EAIJ;IvB1KJ;IACA;;EuB4KM;AAAA;IAGE;;EAEF;AAAA;IAGE;;;;AAcV;EACE,e9B4kBgC;;AWpwBhC;EmBsLJ;IAMI,c9BylBgC;I8BxlBhC,Y9BylBgC;I8BxlBhC;IACA;;EAEA;IACE;IACA;;;;AAUN;EACE;;AAEA;EACE;;AAEA;EACE;EvBvOF;EACA;;AuB0OA;EvBzPA;EACA;;AuB4PA;EvBtQA;EuBwQE;;;AC1RN;EACE;EACA;EACA;EACA,e/BmiCkC;E+BjiClC;EACA,kB/BES;EOSP;;;AwBLF;EACE,c/BuhCgC;;A+BrhChC;EACE;EACA,e/BmhC8B;E+BlhC9B,O/BNK;E+BOL;;AAUJ;EACE;;AAGF;EACE;;AAGF;EACE,O/B1BO;;;AgCbX;EACE;E5BGA;EACA;EGaE;;;AyBZJ;EACE;EACA;EACA;EACA;EACA,ahCmxBkC;EgClxBlC,OhCmKwC;EgCjKxC,kBhCPS;EgCQT;;AAEA;EACE;EACA,OhC8JsC;EgC7JtC;EACA,kBhCZO;EgCaP,chCZO;;AgCeT;EACE;EACA,ShC2wBgC;EgC1wBhC,YhC8W0B;;;AgCxW1B;EACE;EzBaF;EACA;;AyBTA;EzBNA;EACA;;AyBUF;EACE;EACA,OhCxCO;EgCyCP,kBhC0M0B;EgCzM1B,chCyM0B;;AgCtM5B;EACE,OhCxCO;EgCyCP;EAEA;EACA,kBhClDO;EgCmDP,chChDO;;;AiCPT;EACE;EhC2HE,WAtCa;EgCnFf,ajCmO0B;;AiC9NxB;E1BqCF;EACA;;A0BjCE;E1BkBF;EACA;;;A0BhCF;EACE;EhC2HE,WAtCa;EgCnFf,ajCoO0B;;AiC/NxB;E1BqCF;EACA;;A0BjCE;E1BkBF;EACA;;;A2B9BJ;EACE;EACA;EjCiEE;EiC/DF,alCuR4B;EkCtR5B;EACA;EACA;EACA;E3BKE;ESFE,YkBDJ;;AlBKI;EkBfN;IlBgBQ;;;AdLN;EgCGI;;;AAKJ;EACE;;;AAKJ;EACE;EACA;;;AAOF;EACE,elC+3BkC;EkC93BlC,clC83BkC;EOr5BhC;;;A2BgCF;ECjDA;EACA,kBnC0Ea;;AE5Db;EiCVI;EACA;;AAGF;EAEE;EACA;;;ADqCJ;ECjDA;EACA,kBnC0Ea;;AE5Db;EiCVI;EACA;;AAGF;EAEE;EACA;;;ADqCJ;ECjDA;EACA,kBnC0Ea;;AE5Db;EiCVI;EACA;;AAGF;EAEE;EACA;;;ADqCJ;ECjDA;EACA,kBnC0Ea;;AE5Db;EiCVI;EACA;;AAGF;EAEE;EACA;;;ADqCJ;ECjDA;EACA,kBnC0Ea;;AE5Db;EiCVI;EACA;;AAGF;EAEE;EACA;;;ADqCJ;ECjDA;EACA,kBnC0Ea;;AE5Db;EiCVI;EACA;;AAGF;EAEE;EACA;;;ADqCJ;ECjDA;EACA,kBnC0Ea;;AE5Db;EiCVI;EACA;;AAGF;EAEE;EACA;;;ADqCJ;ECjDA;EACA,kBnC0Ea;;AE5Db;EiCVI;EACA;;AAGF;EAEE;EACA;;;ACbN;EACE;EACA,epCuzBkC;EoCrzBlC,kBpCKS;EOSP;;AI0CA;EyB5DJ;IAQI;;;;AAIJ;EACE;EACA;E7BIE;;;A8BdJ;EACE;EACA;EACA,erCu9BkC;EqCt9BlC;E9BUE;;;A8BLJ;EAEE;;;AAIF;EACE,arC4Q4B;;;AqCpQ9B;EACE;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAUF;EC/CA,ODgDqH;EnB3CnH,kBmB2CuB;EC9CzB,cD8CqE;;AC5CrE;EACE;;AAGF;EACE;;;ADsCF;EC/CA,ODgDqH;EnB3CnH,kBmB2CuB;EC9CzB,cD8CqE;;AC5CrE;EACE;;AAGF;EACE;;;ADsCF;EC/CA,ODgDqH;EnB3CnH,kBmB2CuB;EC9CzB,cD8CqE;;AC5CrE;EACE;;AAGF;EACE;;;ADsCF;EC/CA,ODgDqH;EnB3CnH,kBmB2CuB;EC9CzB,cD8CqE;;AC5CrE;EACE;;AAGF;EACE;;;ADsCF;EC/CA,ODgDqH;EnB3CnH,kBmB2CuB;EC9CzB,cD8CqE;;AC5CrE;EACE;;AAGF;EACE;;;ADsCF;EC/CA,ODgDqH;EnB3CnH,kBmB2CuB;EC9CzB,cD8CqE;;AC5CrE;EACE;;AAGF;EACE;;;ADsCF;EC/CA,ODgDqH;EnB3CnH,kBmB2CuB;EC9CzB,cD8CqE;;AC5CrE;EACE;;AAGF;EACE;;;ADsCF;EC/CA,ODgDqH;EnB3CnH,kBmB2CuB;EC9CzB,cD8CqE;;AC5CrE;EACE;;AAGF;EACE;;;ACRF;EACE;IAAO;;EACP;IAAK;;;AAIT;EACE;EACA,QvCg+BkC;EuC/9BlC;EACA;EtCmHI,WAtCa;EsC3EjB,kBvCLS;EOSP;;;AgCCJ;EACE;EACA;EACA;EACA;EACA,OvCjBS;EuCkBT;EACA;EACA,kBvCq9BkC;EgBh+B9B,YuBYJ;;AvBRI;EuBDN;IvBEQ;;;;AuBUR;ErBYE;EqBVA;;;AAIA;EACE;;AAGE;EAJJ;IAKM;;;;AC1CR;EACE;EACA;;;AAGF;EACE;;;ACFF;EACE;EACA;EAGA;EACA;ElCQE;;;AkCEJ;EACE;EACA,OzCRS;EyCST;;AvCPA;EuCWE;EACA,OzCdO;EyCeP;EACA,kBzCtBO;;AyCyBT;EACE,OzClBO;EyCmBP,kBzC1BO;;;AyCmCX;EACE;EACA;EACA;EAGA,kBzC3CS;EyC4CT;;AAEA;ElC1BE;EACA;;AkC6BF;ElChBE;EACA;;AkCmBF;EAEE,OzClDO;EyCmDP;EACA,kBzC1DO;;AyC8DT;EACE;EACA,OzChEO;EyCiEP,kBzCkL0B;EyCjL1B,czCiL0B;;AyC9K5B;EACE;;AAEA;EACE;EACA,kBzC2JwB;;;AyC7I1B;EACE;;AAGE;ElC1BJ;EAZA;;AkC2CI;ElC3CJ;EAYA;;AkCoCI;EACE;;AAGF;EACE,kBzC0HoB;EyCzHpB;;AAEA;EACE;EACA,mBzCqHkB;;;AWhL1B;E8BmCA;IACE;;EAGE;IlC1BJ;IAZA;;EkC2CI;IlC3CJ;IAYA;;EkCoCI;IACE;;EAGF;IACE,kBzC0HoB;IyCzHpB;;EAEA;IACE;IACA,mBzCqHkB;;;AWhL1B;E8BmCA;IACE;;EAGE;IlC1BJ;IAZA;;EkC2CI;IlC3CJ;IAYA;;EkCoCI;IACE;;EAGF;IACE,kBzC0HoB;IyCzHpB;;EAEA;IACE;IACA,mBzCqHkB;;;AWhL1B;E8BmCA;IACE;;EAGE;IlC1BJ;IAZA;;EkC2CI;IlC3CJ;IAYA;;EkCoCI;IACE;;EAGF;IACE,kBzC0HoB;IyCzHpB;;EAEA;IACE;IACA,mBzCqHkB;;;AWhL1B;E8BmCA;IACE;;EAGE;IlC1BJ;IAZA;;EkC2CI;IlC3CJ;IAYA;;EkCoCI;IACE;;EAGF;IACE,kBzC0HoB;IyCzHpB;;EAEA;IACE;IACA,mBzCqHkB;;;AyCvG9B;ElCnHI;;AkCsHF;EACE;;AAEA;EACE;;;ACzIJ;EACE,ODoJsE;ECnJtE,kBDmJuC;;AvCxIzC;EwCPM,OD+IkE;EC9IlE;;AAGF;EACE,O1CPG;E0CQH,kBDyIkE;ECxIlE,cDwIkE;;;ACrJxE;EACE,ODoJsE;ECnJtE,kBDmJuC;;AvCxIzC;EwCPM,OD+IkE;EC9IlE;;AAGF;EACE,O1CPG;E0CQH,kBDyIkE;ECxIlE,cDwIkE;;;ACrJxE;EACE,ODoJsE;ECnJtE,kBDmJuC;;AvCxIzC;EwCPM,OD+IkE;EC9IlE;;AAGF;EACE,O1CPG;E0CQH,kBDyIkE;ECxIlE,cDwIkE;;;ACrJxE;EACE,ODoJsE;ECnJtE,kBDmJuC;;AvCxIzC;EwCPM,OD+IkE;EC9IlE;;AAGF;EACE,O1CPG;E0CQH,kBDyIkE;ECxIlE,cDwIkE;;;ACrJxE;EACE,ODoJsE;ECnJtE,kBDmJuC;;AvCxIzC;EwCPM,OD+IkE;EC9IlE;;AAGF;EACE,O1CPG;E0CQH,kBDyIkE;ECxIlE,cDwIkE;;;ACrJxE;EACE,ODoJsE;ECnJtE,kBDmJuC;;AvCxIzC;EwCPM,OD+IkE;EC9IlE;;AAGF;EACE,O1CPG;E0CQH,kBDyIkE;ECxIlE,cDwIkE;;;ACrJxE;EACE,ODoJsE;ECnJtE,kBDmJuC;;AvCxIzC;EwCPM,OD+IkE;EC9IlE;;AAGF;EACE,O1CPG;E0CQH,kBDyIkE;ECxIlE,cDwIkE;;;ACrJxE;EACE,ODoJsE;ECnJtE,kBDmJuC;;AvCxIzC;EwCPM,OD+IkE;EC9IlE;;AAGF;EACE,O1CPG;E0CQH,k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AAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAQF;EAAwB;;;AACxB;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAwB;;;AACxB;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAwB;;;AACxB;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAwB;;;AACxB;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAwB;;;AACxB;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AA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","file":"theme.css"} -------------------------------------------------------------------------------- /demo-application/relecloud/static/res/img/astronaut.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tonybaloney/django-on-azure/f04641c27fe96c0aad6b7927d10d6670d026efe0/demo-application/relecloud/static/res/img/astronaut.jpeg -------------------------------------------------------------------------------- /demo-application/relecloud/static/res/img/bit_cosmos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tonybaloney/django-on-azure/f04641c27fe96c0aad6b7927d10d6670d026efe0/demo-application/relecloud/static/res/img/bit_cosmos.png -------------------------------------------------------------------------------- /demo-application/relecloud/static/res/img/cosmos-db.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tonybaloney/django-on-azure/f04641c27fe96c0aad6b7927d10d6670d026efe0/demo-application/relecloud/static/res/img/cosmos-db.jpeg -------------------------------------------------------------------------------- /demo-application/relecloud/static/res/img/small-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tonybaloney/django-on-azure/f04641c27fe96c0aad6b7927d10d6670d026efe0/demo-application/relecloud/static/res/img/small-logo.png -------------------------------------------------------------------------------- /demo-application/relecloud/static/scss/custom.scss: -------------------------------------------------------------------------------- 1 | @import "../node_modules/bootstrap/scss/bootstrap"; 2 | 3 | // Brand Colors 4 | $blue: #20448c; 5 | $indigo: #011640; 6 | $purple: #6232a6; 7 | $pink: #c04bf2; 8 | $red: #dc3545; 9 | $orange: #fd7e14; 10 | $yellow: #ffc107; 11 | $green: #28a745; 12 | $teal: #20c997; 13 | $cyan: #224d73; 14 | $white: #fff; 15 | $gray-100: #f8f9fa; 16 | $gray-200: #e9ecef; 17 | $gray-300: #dee2e6; 18 | $gray-400: #ced4da; 19 | $gray-500: #adb5bd; 20 | $gray-600: #868e96; 21 | $gray-700: #495057; 22 | $gray-800: #343a40; 23 | $gray-900: #212529; 24 | $black: #000; 25 | $grays: (100: $gray-100, 200: $gray-200, 300: $gray-300, 400: $gray-400, 500: $gray-500, 600: $gray-600, 700: $gray-700, 800: $gray-800, 900: $gray-900); 26 | $theme-colors: (primary: $indigo, secondary: $purple, success: $indigo, info: $cyan, warning: $pink, danger: $cyan, light: $gray-100, dark: $gray-800); 27 | $colors: (blue: $blue, indigo: $indigo, purple: $purple, pink: $pink, red: $red, orange: $orange, yellow: $yellow, green: $green, teal: $teal, cyan: $cyan, white: $white, gray: $gray-600,gray-dark: $gray-800); 28 | $theme-color-interval: 8%; 29 | 30 | 31 | // Spacing 32 | $spacer: 1rem; 33 | $spacers: (0: 0, 1: ($spacer * 0.25), 2: ($spacer * 0.5), 3: $spacer, 4: ($spacer * 1.5), 5: ($spacer * 3)); 34 | $sizes: (25: 25%, 50: 50%, 75: 75%, 100: 100%); 35 | 36 | 37 | // Options 38 | $enable-rounded: true; 39 | $enable-shadows: false; 40 | $enable-gradients: false; 41 | $enable-transitions: true; 42 | $enable-hover-media-query: false; 43 | $enable-grid-classes: true; 44 | $enable-print-styles: true; 45 | 46 | 47 | // Body 48 | $body-bg: $white; 49 | $body-color: $indigo; 50 | 51 | 52 | // Links 53 | $link-color: $purple; 54 | $link-decoration: underline; 55 | $link-hover-color: darken($link-color, 15%); 56 | $link-hover-decoration: underline; 57 | 58 | 59 | // Grid 60 | $grid-breakpoints: (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px); 61 | $container-max-widths: (sm: 540px, md: 720px, lg: 960px, xl: 1140px); 62 | $grid-columns: 12; 63 | $grid-gutter-width: 30px; 64 | 65 | 66 | // Components 67 | $line-height-lg: 1.5; 68 | $line-height-sm: 1.5; 69 | $border-width: 1px; 70 | $border-radius: 0.25rem; 71 | $border-radius-lg: 0.3rem; 72 | $border-radius-sm: 0.2rem; 73 | $component-active-color: $white; 74 | $component-active-bg: theme-color('primary'); 75 | $caret-width: 0.3em; 76 | $transition-base: all 0.2s ease-in-out; 77 | $transition-fade: opacity 0.15s linear; 78 | $transition-collapse: height 0.35s ease; 79 | 80 | 81 | // Fonts 82 | $font-family-sans-serif: "Raleway", Arial, sans-serif; 83 | $font-family-monospace: Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; 84 | $font-family-base: $font-family-sans-serif; 85 | $font-size-base: 1rem; 86 | $font-size-lg: 1.25rem; 87 | $font-size-sm: 0.875rem; 88 | $font-weight-normal: normal; 89 | $font-weight-bold: bold; 90 | $font-weight-base: $font-weight-normal; 91 | $line-height-base: 1.5; 92 | $h1-font-size: 2.5rem; 93 | $h2-font-size: 2rem; 94 | $h3-font-size: 1.75rem; 95 | $h4-font-size: 1.5rem; 96 | $h5-font-size: 1.25rem; 97 | $h6-font-size: 1rem; 98 | $headings-margin-bottom: ($spacer / 2); 99 | $headings-font-family: "Elevon", Arial; 100 | $headings-font-weight: bold; 101 | $headings-line-height: 1.1; 102 | $headings-color: $indigo; 103 | $display1-size: 6rem; 104 | $display2-size: 5.5rem; 105 | $display3-size: 4.5rem; 106 | $display4-size: 3.5rem; 107 | $display1-weight: 300; 108 | $display2-weight: 300; 109 | $display3-weight: 300; 110 | $display4-weight: 300; 111 | $display-line-height: $headings-line-height; 112 | $lead-font-size: 1.25rem; 113 | $lead-font-weight: 300; 114 | $small-font-size: 80%; 115 | $text-muted: $gray-600; 116 | $blockquote-small-color: $gray-600; 117 | $blockquote-font-size: ($font-size-base * 1.25); 118 | $hr-border-color: rgba($black, 0.1); 119 | $hr-border-width: $border-width; 120 | $mark-padding: 0.2em; 121 | $dt-font-weight: $font-weight-bold; 122 | $kbd-box-shadow: inset 0 -0.1rem 0 rgba($black, 0.25); 123 | $nested-kbd-font-weight: $font-weight-bold; 124 | $list-inline-padding: 5px; 125 | $mark-bg: #fcf8e3; 126 | 127 | 128 | // Buttons 129 | $input-btn-padding-y: 0.5rem; 130 | $input-btn-padding-x: 0.75rem; 131 | $input-btn-line-height: 1.25; 132 | $input-btn-padding-y-sm: 0.25rem; 133 | $input-btn-padding-x-sm: 0.5rem; 134 | $input-btn-line-height-sm: 1.5; 135 | $input-btn-padding-y-lg: 0.5rem; 136 | $input-btn-padding-x-lg: 1rem; 137 | $input-btn-line-height-lg: 1.5; 138 | $btn-font-weight: $font-weight-normal; 139 | $btn-box-shadow: inset 0 1px 0 rgba($white, 0.15), 0 1px 1px rgba($black, 0.075); 140 | $btn-focus-box-shadow: 0 0 0 3px rgba(theme-color('primary'), 0.25); 141 | $btn-active-box-shadow: inset 0 3px 5px rgba($black, 0.125); 142 | $btn-link-disabled-color: $gray-600; 143 | $btn-block-spacing-y: 0.5rem; 144 | $btn-border-radius: $border-radius; 145 | $btn-border-radius-lg: $border-radius-lg; 146 | $btn-border-radius-sm: $border-radius-sm; 147 | $btn-transition: all 0.15s ease-in-out; 148 | 149 | 150 | // Forms 151 | $input-bg: $white; 152 | $input-disabled-bg: $gray-200; 153 | $input-color: $gray-700; 154 | $input-border-color: rgba($black, 0.15); 155 | $input-btn-border-width: $border-width; 156 | $input-box-shadow: inset 0 1px 1px rgba($black, 0.075); 157 | $input-border-radius: $border-radius; 158 | $input-border-radius-lg: $border-radius-lg; 159 | $input-border-radius-sm: $border-radius-sm; 160 | $input-focus-bg: $input-bg; 161 | $input-focus-border-color: lighten(theme-color('primary'), 25%); 162 | $input-focus-box-shadow: $input-box-shadow, $btn-focus-box-shadow; 163 | $input-focus-color: $input-color; 164 | $input-placeholder-color: $gray-600; 165 | $input-height-border: $input-btn-border-width * 2; 166 | $input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2); 167 | $input-height: calc(#{$input-height-inner} + #{$input-height-border}); 168 | $input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2); 169 | $input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}); 170 | $input-height-inner-lg: ($font-size-sm * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2); 171 | $input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}); 172 | $input-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; 173 | $form-text-margin-top: 0.25rem; 174 | $form-check-margin-bottom: 0.5rem; 175 | $form-check-input-gutter: 1.25rem; 176 | $form-check-input-margin-y: 0.25rem; 177 | $form-check-input-margin-x: 0.25rem; 178 | $form-check-inline-margin-x: 0.75rem; 179 | $form-group-margin-bottom: 1rem; 180 | $input-group-addon-bg: $gray-200; 181 | $input-group-addon-border-color: $input-border-color; 182 | $custom-control-gutter: 1.5rem; 183 | $custom-control-spacer-y: 0.25rem; 184 | $custom-control-spacer-x: 1rem; 185 | $custom-control-indicator-size: 1rem; 186 | $custom-control-indicator-bg: #ddd; 187 | $custom-control-indicator-bg-size: 50% 50%; 188 | $custom-control-indicator-box-shadow: inset 0 0.25rem 0.25rem rgba($black, 0.1); 189 | $custom-control-indicator-disabled-bg: $gray-200; 190 | $custom-control-description-disabled-color: $gray-600; 191 | $custom-control-indicator-checked-color: $white; 192 | $custom-control-indicator-checked-bg: theme-color('primary'); 193 | $custom-control-indicator-checked-box-shadow: none; 194 | $custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, 0 0 0 3px theme-color('primary'); 195 | $custom-control-indicator-active-color: $white; 196 | $custom-control-indicator-active-bg: lighten(theme-color('primary'), 35%); 197 | $custom-control-indicator-active-box-shadow: none; 198 | $custom-checkbox-indicator-border-radius: $border-radius; 199 | $custom-checkbox-indicator-indeterminate-bg: theme-color('primary'); 200 | $custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color; 201 | $custom-checkbox-indicator-indeterminate-box-shadow: none; 202 | $custom-radio-indicator-border-radius: 50%; 203 | $custom-select-padding-y: 0.375rem; 204 | $custom-select-padding-x: 0.75rem; 205 | $custom-select-height: $input-height; 206 | $custom-select-indicator-padding: 1rem; 207 | $custom-select-line-height: $input-btn-line-height; 208 | $custom-select-color: $input-color; 209 | $custom-select-disabled-color: $gray-600; 210 | $custom-select-bg: $white; 211 | $custom-select-disabled-bg: $gray-200; 212 | $custom-select-bg-size: 8px 10px; 213 | $custom-select-indicator-color: #333; 214 | $custom-select-border-width: $input-btn-border-width; 215 | $custom-select-border-color: $input-border-color; 216 | $custom-select-border-radius: $border-radius; 217 | $custom-select-focus-border-color: lighten(theme-color('primary'), 25%); 218 | $custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, 0.075), 0 0 5px rgba($custom-select-focus-border-color, 0.5); 219 | $custom-select-font-size-sm: 75%; 220 | $custom-select-height-sm: $input-height-sm; 221 | $custom-file-height: 2.5rem; 222 | $custom-file-width: 14rem; 223 | $custom-file-focus-box-shadow: 0 0 0 0.075rem $white, 0 0 0 0.2rem theme-color('primary'); 224 | $custom-file-padding-y: 1rem; 225 | $custom-file-padding-x: 0.5rem; 226 | $custom-file-line-height: 1.5; 227 | $custom-file-color: $gray-700; 228 | $custom-file-bg: $white; 229 | $custom-file-border-width: $border-width; 230 | $custom-file-border-color: $input-border-color; 231 | $custom-file-border-radius: $border-radius; 232 | $custom-file-box-shadow: inset 0 0.2rem 0.4rem rgba($black, 0.05); 233 | $custom-file-button-color: $custom-file-color; 234 | $custom-file-button-bg: $gray-200; 235 | $custom-file-text: (placeholder: (en: 'Choose file...'), button-label: (en: 'Browse')); 236 | $form-feedback-valid-color: theme-color('success'); 237 | $form-feedback-invalid-color: theme-color('danger'); 238 | 239 | 240 | // Dropdown 241 | $dropdown-min-width: 10rem; 242 | $dropdown-padding-y: 0.5rem; 243 | $dropdown-spacer: 0.125rem; 244 | $dropdown-bg: $white; 245 | $dropdown-border-color: rgba($black, 0.15); 246 | $dropdown-border-width: $border-width; 247 | $dropdown-divider-bg: $gray-200; 248 | $dropdown-box-shadow: 0 0.5rem 1rem rgba($black, 0.175); 249 | $dropdown-link-color: $gray-900; 250 | $dropdown-link-hover-color: darken($gray-900, 5%); 251 | $dropdown-link-hover-bg: $gray-100; 252 | $dropdown-link-active-color: $component-active-color; 253 | $dropdown-link-active-bg: $component-active-bg; 254 | $dropdown-link-disabled-color: $gray-600; 255 | $dropdown-item-padding-y: 0.25rem; 256 | $dropdown-item-padding-x: 1.5rem; 257 | $dropdown-header-color: $gray-600; 258 | 259 | 260 | // Navs 261 | $nav-link-padding-y: 0.5rem; 262 | $nav-link-padding-x: 1rem; 263 | $nav-link-disabled-color: $gray-600; 264 | $nav-tabs-border-color: #ddd; 265 | $nav-tabs-border-width: $border-width; 266 | $nav-tabs-border-radius: $border-radius; 267 | $nav-tabs-link-hover-border-color: $gray-200; 268 | $nav-tabs-link-active-color: $gray-700; 269 | $nav-tabs-link-active-bg: $body-bg; 270 | $nav-tabs-link-active-border-color: #ddd; 271 | $nav-pills-border-radius: $border-radius; 272 | $nav-pills-link-active-color: $component-active-color; 273 | $nav-pills-link-active-bg: $component-active-bg; 274 | 275 | 276 | // Navbar 277 | $navbar-padding-y: ($spacer / 2); 278 | $navbar-padding-x: $spacer; 279 | $navbar-brand-font-size: $font-size-lg; 280 | $nav-link-height: $navbar-brand-font-size * $line-height-base; 281 | $navbar-brand-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2); 282 | $navbar-brand-padding-y: ($navbar-brand-height - $nav-link-height) / 2; 283 | $navbar-toggler-padding-y: 0.25rem; 284 | $navbar-toggler-padding-x: 0.75rem; 285 | $navbar-toggler-font-size: $font-size-lg; 286 | $navbar-toggler-border-radius: $btn-border-radius; 287 | $navbar-dark-color: rgba($white, 0.5); 288 | $navbar-dark-hover-color: rgba($white, 0.75); 289 | $navbar-dark-active-color: rgba($white, 1); 290 | $navbar-dark-disabled-color: rgba($white, 0.25); 291 | $navbar-dark-toggler-border-color: rgba($white, 0.1); 292 | $navbar-light-color: rgba($black, 0.5); 293 | $navbar-light-hover-color: rgba($black, 0.7); 294 | $navbar-light-active-color: rgba($black, 0.9); 295 | $navbar-light-disabled-color: rgba($black, 0.3); 296 | $navbar-light-toggler-border-color: rgba($black, 0.1); 297 | 298 | 299 | // Tables 300 | $table-cell-padding: 0.75rem; 301 | $table-cell-padding-sm: 0.3rem; 302 | $table-bg: transparent; 303 | $table-accent-bg: rgba($black, 0.05); 304 | $table-hover-bg: rgba($black, 0.075); 305 | $table-active-bg: $table-hover-bg; 306 | $table-border-width: $border-width; 307 | $table-border-color: $gray-200; 308 | $table-head-bg: $gray-200; 309 | $table-head-color: $gray-700; 310 | $table-inverse-bg: $gray-900; 311 | $table-inverse-accent-bg: rgba($white, 0.05); 312 | $table-inverse-hover-bg: rgba($white, 0.075); 313 | $table-inverse-border-color: lighten($gray-900, 7.5%); 314 | $table-inverse-color: $body-bg; 315 | 316 | 317 | // Z Index 318 | $zindex-dropdown: 1000; 319 | $zindex-sticky: 1020; 320 | $zindex-fixed: 1030; 321 | $zindex-modal-backdrop: 1040; 322 | $zindex-modal: 1050; 323 | $zindex-popover: 1060; 324 | $zindex-tooltip: 1070; 325 | 326 | 327 | // Pagination 328 | $pagination-padding-y: 0.5rem; 329 | $pagination-padding-x: 0.75rem; 330 | $pagination-padding-y-sm: 0.25rem; 331 | $pagination-padding-x-sm: 0.5rem; 332 | $pagination-padding-y-lg: 0.75rem; 333 | $pagination-padding-x-lg: 1.5rem; 334 | $pagination-line-height: 1.25; 335 | $pagination-color: $link-color; 336 | $pagination-bg: $white; 337 | $pagination-border-width: $border-width; 338 | $pagination-border-color: #ddd; 339 | $pagination-hover-color: $link-hover-color; 340 | $pagination-hover-bg: $gray-200; 341 | $pagination-hover-border-color: #ddd; 342 | $pagination-active-color: $white; 343 | $pagination-active-bg: theme-color('primary'); 344 | $pagination-active-border-color: theme-color('primary'); 345 | $pagination-disabled-color: $gray-600; 346 | $pagination-disabled-bg: $white; 347 | $pagination-disabled-border-color: #ddd; 348 | 349 | 350 | // Jumbotron 351 | $jumbotron-padding: 2rem; 352 | $jumbotron-bg: $gray-200; 353 | 354 | 355 | // Cards 356 | $card-spacer-y: 0.75rem; 357 | $card-spacer-x: 1.25rem; 358 | $card-border-width: 1px; 359 | $card-border-radius: $border-radius; 360 | $card-border-color: rgba($black, 0.125); 361 | $card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}); 362 | $card-cap-bg: rgba($black, 0.03); 363 | $card-bg: $white; 364 | $card-img-overlay-padding: 1.25rem; 365 | $card-deck-margin: ($grid-gutter-width / 2); 366 | $card-columns-count: 3; 367 | $card-columns-gap: 1.25rem; 368 | $card-columns-margin: $card-spacer-y; 369 | 370 | 371 | // Tooltip 372 | $tooltip-max-width: 200px; 373 | $tooltip-color: $white; 374 | $tooltip-bg: $black; 375 | $tooltip-opacity: 0.9; 376 | $tooltip-padding-y: 3px; 377 | $tooltip-padding-x: 8px; 378 | $tooltip-margin: 0; 379 | $tooltip-arrow-width: 5px; 380 | $tooltip-arrow-height: 5px; 381 | $tooltip-arrow-color: $tooltip-bg; 382 | 383 | 384 | // Popovers 385 | $popover-inner-padding: 1px; 386 | $popover-bg: $white; 387 | $popover-max-width: 276px; 388 | $popover-border-width: $border-width; 389 | $popover-border-color: rgba($black, 0.2); 390 | $popover-box-shadow: 0 5px 10px rgba($black, 0.2); 391 | $popover-header-bg: darken($popover-bg, 3%); 392 | $popover-header-color: $headings-color; 393 | $popover-header-padding-y: 8px; 394 | $popover-header-padding-x: 14px; 395 | $popover-body-color: $body-color; 396 | $popover-body-padding-y: 9px; 397 | $popover-body-padding-x: 14px; 398 | $popover-arrow-width: 10px; 399 | $popover-arrow-height: 5px; 400 | $popover-arrow-color: $popover-bg; 401 | $popover-arrow-outer-width: ($popover-arrow-width + 1px); 402 | $popover-arrow-outer-color: fade-in($popover-border-color, 0.05); 403 | 404 | 405 | // Badges 406 | $badge-color: $white; 407 | $badge-font-size: 75%; 408 | $badge-font-weight: $font-weight-bold; 409 | $badge-padding-y: 0.25em; 410 | $badge-padding-x: 0.4em; 411 | $badge-pill-padding-x: 0.6em; 412 | $badge-pill-border-radius: 10rem; 413 | 414 | 415 | // Modals 416 | $modal-inner-padding: 15px; 417 | $modal-dialog-margin: 10px; 418 | $modal-dialog-margin-y-sm-up: 30px; 419 | $modal-title-line-height: $line-height-base; 420 | $modal-content-bg: $white; 421 | $modal-content-border-color: rgba($black, 0.2); 422 | $modal-content-border-width: $border-width; 423 | $modal-content-box-shadow-xs: 0 3px 9px rgba($black, 0.5); 424 | $modal-content-box-shadow-sm-up: 0 5px 15px rgba($black, 0.5); 425 | $modal-backdrop-bg: $black; 426 | $modal-backdrop-opacity: 0.5; 427 | $modal-header-border-color: $gray-200; 428 | $modal-footer-border-color: $modal-header-border-color; 429 | $modal-header-border-width: $modal-content-border-width; 430 | $modal-footer-border-width: $modal-header-border-width; 431 | $modal-header-padding: 15px; 432 | $modal-lg: 800px; 433 | $modal-md: 500px; 434 | $modal-sm: 300px; 435 | $modal-transition: transform 0.3s ease-out; 436 | 437 | 438 | // Alerts 439 | $alert-padding-y: 0.75rem; 440 | $alert-padding-x: 1.25rem; 441 | $alert-margin-bottom: 1rem; 442 | $alert-border-radius: $border-radius; 443 | $alert-link-font-weight: $font-weight-bold; 444 | $alert-border-width: $border-width; 445 | 446 | 447 | // Progress bars 448 | $progress-height: 1rem; 449 | $progress-font-size: 0.75rem; 450 | $progress-bg: $gray-200; 451 | $progress-border-radius: $border-radius; 452 | $progress-box-shadow: inset 0 0.1rem 0.1rem rgba($black, 0.1); 453 | $progress-bar-color: $white; 454 | $progress-bar-bg: theme-color('primary'); 455 | $progress-bar-animation-timing: 1s linear infinite; 456 | $progress-bar-transition: width 0.6s ease; 457 | 458 | 459 | // List group 460 | $list-group-bg: $white; 461 | $list-group-border-color: rgba($black, 0.125); 462 | $list-group-border-width: $border-width; 463 | $list-group-border-radius: $border-radius; 464 | $list-group-item-padding-y: 0.75rem; 465 | $list-group-item-padding-x: 1.25rem; 466 | $list-group-hover-bg: $gray-100; 467 | $list-group-active-color: $component-active-color; 468 | $list-group-active-bg: $component-active-bg; 469 | $list-group-active-border-color: $list-group-active-bg; 470 | $list-group-disabled-color: $gray-600; 471 | $list-group-disabled-bg: $list-group-bg; 472 | $list-group-action-color: $gray-700; 473 | $list-group-action-hover-color: $list-group-action-color; 474 | $list-group-action-active-color: $body-color; 475 | $list-group-action-active-bg: $gray-200; 476 | 477 | 478 | // Image thumbnails 479 | $thumbnail-padding: 0.25rem; 480 | $thumbnail-bg: $body-bg; 481 | $thumbnail-border-width: $border-width; 482 | $thumbnail-border-color: #ddd; 483 | $thumbnail-border-radius: $border-radius; 484 | $thumbnail-box-shadow: 0 1px 2px rgba($black, 0.075); 485 | $thumbnail-transition: all 0.2s ease-in-out; 486 | 487 | 488 | // Figures 489 | $figure-caption-font-size: 90%; 490 | $figure-caption-color: $gray-600; 491 | 492 | 493 | // Breadcrumbs 494 | $breadcrumb-padding-y: 0.75rem; 495 | $breadcrumb-padding-x: 1rem; 496 | $breadcrumb-item-padding: 0.5rem; 497 | $breadcrumb-bg: $gray-200; 498 | $breadcrumb-divider-color: $gray-600; 499 | $breadcrumb-active-color: $gray-600; 500 | $breadcrumb-divider: '/'; 501 | 502 | 503 | // Carousel 504 | $carousel-control-color: $white; 505 | $carousel-control-width: 15%; 506 | $carousel-control-opacity: 0.5; 507 | $carousel-indicator-width: 30px; 508 | $carousel-indicator-height: 3px; 509 | $carousel-indicator-spacer: 3px; 510 | $carousel-indicator-active-bg: $white; 511 | $carousel-caption-width: 70%; 512 | $carousel-caption-color: $white; 513 | $carousel-control-icon-width: 20px; 514 | $carousel-transition: transform 0.6s ease; 515 | 516 | 517 | // Close 518 | $close-font-size: $font-size-base * 1.5; 519 | $close-font-weight: $font-weight-bold; 520 | $close-color: $black; 521 | $close-text-shadow: 0 1px 0 $white; 522 | 523 | 524 | // Code 525 | $code-font-size: 90%; 526 | $code-padding-y: 0.2rem; 527 | $code-padding-x: 0.4rem; 528 | $code-color: #bd4147; 529 | $code-bg: $gray-100; 530 | $kbd-color: $white; 531 | $kbd-bg: $gray-900; 532 | $pre-color: $gray-900; 533 | $pre-scrollable-max-height: 340px; 534 | 535 | 536 | // Options 537 | $enable-rounded: true; 538 | $enable-shadows: false; 539 | $enable-gradients: false; 540 | $enable-transitions: true; 541 | $enable-hover-media-query: false; 542 | $enable-grid-classes: true; 543 | $enable-print-styles: true; 544 | 545 | body { 546 | font-family: $font-family-sans-serif; 547 | color: $indigo; 548 | } 549 | 550 | .display-1, .display-2, .display-3 { 551 | font-family: $headings-font-family; 552 | } 553 | 554 | .nav-link { 555 | font-family: "Elevon", Arial 556 | } 557 | 558 | .navbar { 559 | font-size: 16pt !important; 560 | color: white; 561 | } 562 | 563 | .main-header { 564 | min-height: 600px; 565 | border-radius: 0; 566 | padding-top: 100px; 567 | } 568 | 569 | .main-header * { 570 | color: white; 571 | } 572 | 573 | .bg-translucent-secondary { 574 | background-color: rgba(192, 75, 242, 0.5) !important; 575 | } 576 | 577 | @import url("https://use.typekit.net/abj6ial.css"); -------------------------------------------------------------------------------- /demo-application/relecloud/templates/about.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block title %} 4 | ReleCloud - About 5 | {% endblock %} 6 | 7 | {% block content %} 8 |
10 | Formed in 2021, ReleCloud is a Redmond, WA based company with our head in the clouds - or stars really. We want to offer people the best possible experience for passengers exploring space. 11 |
12 | {% endblock content %} -------------------------------------------------------------------------------- /demo-application/relecloud/templates/base.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | 3 | 4 | 5 | 6 | 7 |10 | {{ cruise.description }} 11 |
12 |You can explore {{ cruise }} on the following cruises:
13 |10 | {{ destination.description }} 11 |
12 |You can explore {{ destination }} on the following cruises:
13 |10 | If you can imagine it, we travel to it! Below is our list of confirmed destinations. 11 |
12 |10 | We are the premier space travel company. We have a scheduled first launch in 2030, but why wait? You can learn more about our destinations, and signup to be notified of our first launch. This is a once in a lifetime experience you certainly don't want to miss! 11 |
12 | {% endblock content %} -------------------------------------------------------------------------------- /demo-application/relecloud/templates/info_request_create.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% load crispy_forms_tags %} 4 | 5 | {% block title %} 6 | ReleCloud - Request information 7 | {% endblock title %} 8 | 9 | {% block content %} 10 |true
104 |