Stand up Print Forge as a 3D-printed toy shop with color variants and printer photography.

Replaces the client_site template branding, adds shop/shipping, and points beta CI at master for easy deploy.

Closes #1
This commit is contained in:
westfarn committed 2026-09-06 08:28:04 -05:00
1 parent 8a97e3fbe2
commit b2029b6c0f
336 files changed
+9132 -2428

No files matched your search

+32 -13
View File
@@ -10,17 +10,17 @@ DJANGO_SECRET_KEY=dev-only-change-me
DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0 DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0
# Leave empty for SQLite, or point at local compose Postgres: # Leave empty for SQLite, or point at local compose Postgres:
# DATABASE_URL=postgres://client_site:client_site@127.0.0.1:5432/client_site # DATABASE_URL=postgres://print_forge:print_forge@127.0.0.1:5432/print_forge
SITE_UNDER_CONSTRUCTION=false SITE_UNDER_CONSTRUCTION=false
SITE_NAME=Your Company SITE_NAME="Print Forge"
SITE_TAGLINE=A tagline for the public site SITE_TAGLINE="Handcrafted 3D printed toys"
PUBLIC_SITE_URL=http://127.0.0.1:8000 PUBLIC_SITE_URL=http://127.0.0.1:8000
CONTACT_PHONE= CONTACT_PHONE=630-632-0202
CONTACT_EMAIL=hello@example.com CONTACT_EMAIL=Printforgeprints@gmail.com
CONTACT_ADDRESS= CONTACT_ADDRESS=
CONTACT_SERVICE_AREA= CONTACT_SERVICE_AREA=Chicagoland
CREDIT_NAME=AI ML Operations, LLC CREDIT_NAME="AI ML Operations, LLC"
CREDIT_URL=https://aimloperations.com CREDIT_URL=https://aimloperations.com
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -30,11 +30,15 @@ CREDIT_URL=https://aimloperations.com
# Disabled apps are omitted from INSTALLED_APPS (no models, admin, URLs, nav). # Disabled apps are omitted from INSTALLED_APPS (no models, admin, URLs, nav).
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
FEATURE_EMAIL_SMS=true FEATURE_EMAIL_SMS=true
FEATURE_DIRECT_MAIL=true FEATURE_DIRECT_MAIL=false
FEATURE_BLOG=true FEATURE_BLOG=false
FEATURE_PAYMENTS=true FEATURE_PAYMENTS=true
FEATURE_SOCIAL=true FEATURE_SOCIAL=false
FEATURE_SOCIAL_AI=true FEATURE_SOCIAL_AI=false
FEATURE_SHOP=true
FEATURE_POS_SYNC=false
FEATURE_EVENTS=false
FEATURE_SHIPPING=true
# reCAPTCHA (optional locally — form skips captcha when empty) # reCAPTCHA (optional locally — form skips captcha when empty)
RECAPTCHA_PUBLIC_KEY= RECAPTCHA_PUBLIC_KEY=
@@ -48,8 +52,8 @@ EMAIL_PORT=2525
EMAIL_USE_TLS=true EMAIL_USE_TLS=true
# Inbox From. Docker Compose .env cannot parse: "Name" <addr> # Inbox From. Docker Compose .env cannot parse: "Name" <addr>
# Use bare address (SITE_NAME is wrapped) OR one quoted string: # Use bare address (SITE_NAME is wrapped) OR one quoted string:
# DEFAULT_FROM_EMAIL="Your Company <noreply@example.com>" # DEFAULT_FROM_EMAIL="Your Company <noreply@printforgeprints.com>"
DEFAULT_FROM_EMAIL=noreply@example.com DEFAULT_FROM_EMAIL=Printforgeprints@gmail.com
# Console (default in DJANGO_ENV=dev) prints mail to container logs. # Console (default in DJANGO_ENV=dev) prints mail to container logs.
# EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend # EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
SMTP2GO_SMS_API_KEY= SMTP2GO_SMS_API_KEY=
@@ -74,6 +78,21 @@ STRIPE_PUBLISHABLE_KEY=
STRIPE_WEBHOOK_SECRET= STRIPE_WEBHOOK_SECRET=
STRIPE_CURRENCY=usd STRIPE_CURRENCY=usd
# Shop — FEATURE_SHOP (requires email/SMS + payments)
# SHOP_PRINT_QUEUE_LIMIT_MINUTES=0
# POS sync — FEATURE_POS_SYNC (requires shop). Required in beta/prod.
POS_WEBHOOK_SECRET=
POS_API_BASE_URL=
POS_API_TOKEN=
# Shipping — FEATURE_SHIPPING (requires shop). EasyPost optional; CSV export always works.
EASYPOST_API_KEY=
SHIP_FROM_LINE1=
SHIP_FROM_CITY=
SHIP_FROM_STATE=
SHIP_FROM_ZIP=
# Social — SOCIAL_TOKEN_ENCRYPTION_KEY required when FEATURE_SOCIAL=true # Social — SOCIAL_TOKEN_ENCRYPTION_KEY required when FEATURE_SOCIAL=true
# LinkedIn / Instagram App ID + Secret: Portal → Social accounts (not env). # LinkedIn / Instagram App ID + Secret: Portal → Social accounts (not env).
META_APP_ID= META_APP_ID=
+41 -22
View File
@@ -1,7 +1,7 @@
# Secret env files for server-infra deploy. Never commit. # Secret env files for server-infra deploy. Never commit.
# Copy on the control node: # Copy on the control node:
# ~/Documents/secrets/<slug>_site/<slug>_site_prod.env # ~/Documents/secrets/print_forge/print_forge_prod.env
# ~/Documents/secrets/<slug>_site/<slug>_site_beta.env # ~/Documents/secrets/print_forge/print_forge_beta.env
# #
# Docker Compose: if a secret contains $ (e.g. DATABASE_URL password), escape # Docker Compose: if a secret contains $ (e.g. DATABASE_URL password), escape
# each $ as $$ or compose will treat $word as a variable. # each $ as $$ or compose will treat $word as a variable.
@@ -9,34 +9,38 @@
DJANGO_ENV=prod DJANGO_ENV=prod
DJANGO_DEBUG=false DJANGO_DEBUG=false
DJANGO_SECRET_KEY=replace-with-a-long-random-secret DJANGO_SECRET_KEY=replace-with-a-long-random-secret
DJANGO_ALLOWED_HOSTS=example.com,www.example.com DJANGO_ALLOWED_HOSTS=printforgeprints.com,www.printforgeprints.com
SITE_UNDER_CONSTRUCTION=true SITE_UNDER_CONSTRUCTION=true
SITE_NAME=Your Company SITE_NAME="Print Forge"
SITE_TAGLINE=A tagline for the public site SITE_TAGLINE="Handcrafted 3D printed toys"
PUBLIC_SITE_URL=https://example.com PUBLIC_SITE_URL=https://printforgeprints.com
DEFAULT_FROM_EMAIL=noreply@example.com DEFAULT_FROM_EMAIL=Printforgeprints@gmail.com
CONTACT_PHONE= CONTACT_PHONE=630-632-0202
CONTACT_EMAIL= CONTACT_EMAIL=Printforgeprints@gmail.com
CONTACT_ADDRESS= CONTACT_ADDRESS=
CONTACT_SERVICE_AREA= CONTACT_SERVICE_AREA=Chicagoland
CREDIT_NAME=AI ML Operations, LLC CREDIT_NAME="AI ML Operations, LLC"
CREDIT_URL=https://aimloperations.com CREDIT_URL=https://aimloperations.com
# Optional catalog features — false unless purchased. # Optional catalog features — false unless purchased.
# Turning a flag on later: set true, redeploy, migrate. Do not auto-drop tables. # Turning a flag on later: set true, redeploy, migrate. Do not auto-drop tables.
FEATURE_EMAIL_SMS=false FEATURE_EMAIL_SMS=true
FEATURE_DIRECT_MAIL=false FEATURE_DIRECT_MAIL=false
FEATURE_BLOG=false FEATURE_BLOG=false
FEATURE_PAYMENTS=false FEATURE_PAYMENTS=true
FEATURE_SOCIAL=false FEATURE_SOCIAL=false
FEATURE_SOCIAL_AI=false FEATURE_SOCIAL_AI=false
FEATURE_SHOP=true
FEATURE_POS_SYNC=false
FEATURE_EVENTS=false
FEATURE_SHIPPING=true
# Shared external Postgres (10.0.0.230) # Shared external Postgres (10.0.0.230)
DATABASE_URL=postgres://westfarn:replace-db-password@10.0.0.230:5432/client_site DATABASE_URL=postgres://westfarn:replace-db-password@10.0.0.230:5432/print_forge
WEB_PORT=8004 WEB_PORT=8007
RECAPTCHA_PUBLIC_KEY=replace-me RECAPTCHA_PUBLIC_KEY=replace-me
RECAPTCHA_PRIVATE_KEY=replace-me RECAPTCHA_PRIVATE_KEY=replace-me
@@ -63,6 +67,21 @@ STRIPE_PUBLISHABLE_KEY=
STRIPE_WEBHOOK_SECRET= STRIPE_WEBHOOK_SECRET=
STRIPE_CURRENCY=usd STRIPE_CURRENCY=usd
# Required when FEATURE_SHOP=true (also requires FEATURE_EMAIL_SMS + FEATURE_PAYMENTS)
# SHOP_PRINT_QUEUE_LIMIT_MINUTES=0
# Required when FEATURE_POS_SYNC=true in beta/prod (also requires FEATURE_SHOP)
POS_WEBHOOK_SECRET=
POS_API_BASE_URL=
POS_API_TOKEN=
# Optional when FEATURE_SHIPPING=true (also requires FEATURE_SHOP)
EASYPOST_API_KEY=
SHIP_FROM_LINE1=
SHIP_FROM_CITY=
SHIP_FROM_STATE=
SHIP_FROM_ZIP=
# Required when FEATURE_SOCIAL=true # Required when FEATURE_SOCIAL=true
META_APP_ID= META_APP_ID=
META_APP_SECRET= META_APP_SECRET=
@@ -78,8 +97,8 @@ OLLAMA_TIMEOUT_SECONDS=120
# Token must match SHORTENER_API_TOKENS on url_shortening_service (name:secret). # Token must match SHORTENER_API_TOKENS on url_shortening_service (name:secret).
# Generate: python -c "import secrets; print(secrets.token_urlsafe(32))" # Generate: python -c "import secrets; print(secrets.token_urlsafe(32))"
SHORTENER_BASE_URL=https://shortener.aimloperations.com SHORTENER_BASE_URL=https://shortener.aimloperations.com
SHORTENER_API_TOKEN=acme:replace-me SHORTENER_API_TOKEN=print_forge:replace-me
# UTM_SOURCE=acme # optional; default is a slug of SITE_NAME # UTM_SOURCE=print-forge # optional; default is a slug of SITE_NAME
NOMINATIM_BASE_URL=http://10.0.0.128:8089 NOMINATIM_BASE_URL=http://10.0.0.128:8089
NOMINATIM_TIMEOUT_SECONDS=8 NOMINATIM_TIMEOUT_SECONDS=8
@@ -92,11 +111,11 @@ TIANJI_WEBSITE_ID=
GUNICORN_WORKERS=2 GUNICORN_WORKERS=2
GUNICORN_BIND=0.0.0.0:8000 GUNICORN_BIND=0.0.0.0:8000
# BETA overrides — <slug>-preview.aimloperations.com # BETA overrides — print-forge-preview.aimloperations.com
# DJANGO_ENV=beta # DJANGO_ENV=beta
# SITE_UNDER_CONSTRUCTION=false # SITE_UNDER_CONSTRUCTION=false
# PUBLIC_SITE_URL=https://example-preview.aimloperations.com # PUBLIC_SITE_URL=https://print-forge-preview.aimloperations.com
# DATABASE_URL=postgres://westfarn:replace-db-password@10.0.0.230:5432/client_site_beta # DATABASE_URL=postgres://westfarn:replace-db-password@10.0.0.230:5432/print_forge_beta
# WEB_PORT=8014 # WEB_PORT=8019
# SHORTENER_BASE_URL=https://shortener-beta.aimloperations.com # SHORTENER_BASE_URL=https://shortener-beta.aimloperations.com
# SHORTENER_API_TOKEN=acme:replace-with-a-different-token # SHORTENER_API_TOKEN=print_forge:replace-with-a-different-token
+4 -4
View File
@@ -3,7 +3,7 @@ name: Deploy Beta
on: on:
push: push:
branches: branches:
- main - master
jobs: jobs:
unit-tests: unit-tests:
@@ -55,7 +55,7 @@ jobs:
-e DJANGO_SECRET_KEY=test-secret-key \ -e DJANGO_SECRET_KEY=test-secret-key \
-e DJANGO_DEBUG=true \ -e DJANGO_DEBUG=true \
-e DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,testserver \ -e DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,testserver \
-e DATABASE_URL=postgres://client_site:client_site@db:5432/client_site \ -e DATABASE_URL=postgres://print_forge:print_forge@db:5432/print_forge \
-e SITE_UNDER_CONSTRUCTION=false \ -e SITE_UNDER_CONSTRUCTION=false \
web uv run python manage.py test web uv run python manage.py test
@@ -66,9 +66,9 @@ jobs:
SERVER_INFRA_ROOT: /home/westfarn/Documents/repos/server-infra SERVER_INFRA_ROOT: /home/westfarn/Documents/repos/server-infra
ANSIBLE_PRIVATE_KEY_FILE: /home/westfarn/.ssh/ansible_deploy ANSIBLE_PRIVATE_KEY_FILE: /home/westfarn/.ssh/ansible_deploy
steps: steps:
- name: Deploy client_site beta to all webservers - name: Deploy print_forge beta to all webservers
run: | run: |
"$SERVER_INFRA_ROOT/scripts/deploy.sh" \ "$SERVER_INFRA_ROOT/scripts/deploy.sh" \
--app client_site \ --app print_forge \
--env beta \ --env beta \
--ref "${{ gitea.sha }}" --ref "${{ gitea.sha }}"
+3 -3
View File
@@ -53,7 +53,7 @@ jobs:
-e DJANGO_SECRET_KEY=test-secret-key \ -e DJANGO_SECRET_KEY=test-secret-key \
-e DJANGO_DEBUG=true \ -e DJANGO_DEBUG=true \
-e DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,testserver \ -e DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,testserver \
-e DATABASE_URL=postgres://client_site:client_site@db:5432/client_site \ -e DATABASE_URL=postgres://print_forge:print_forge@db:5432/print_forge \
-e SITE_UNDER_CONSTRUCTION=false \ -e SITE_UNDER_CONSTRUCTION=false \
web uv run python manage.py test web uv run python manage.py test
@@ -64,9 +64,9 @@ jobs:
SERVER_INFRA_ROOT: /home/westfarn/Documents/repos/server-infra SERVER_INFRA_ROOT: /home/westfarn/Documents/repos/server-infra
ANSIBLE_PRIVATE_KEY_FILE: /home/westfarn/.ssh/ansible_deploy ANSIBLE_PRIVATE_KEY_FILE: /home/westfarn/.ssh/ansible_deploy
steps: steps:
- name: Deploy client_site prod to all webservers - name: Deploy print_forge prod to all webservers
run: | run: |
"$SERVER_INFRA_ROOT/scripts/deploy.sh" \ "$SERVER_INFRA_ROOT/scripts/deploy.sh" \
--app client_site \ --app print_forge \
--env prod \ --env prod \
--ref "${{ gitea.sha }}" --ref "${{ gitea.sha }}"
+3
View File
@@ -177,3 +177,6 @@ cython_debug/
# Django collectstatic output # Django collectstatic output
staticfiles/ staticfiles/
# Downloaded Pexels originals used to regenerate public photos
.pexels-cache/
+1 -1
View File
@@ -9,7 +9,7 @@ ENV PYTHONDONTWRITEBYTECODE=1 \
WORKDIR /app WORKDIR /app
RUN apt-get update \ RUN apt-get update \
&& apt-get install -y --no-install-recommends libpq5 \ && apt-get install -y --no-install-recommends libpq5 libgomp1 \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
+26 -55
View File
@@ -1,49 +1,31 @@
# web_django_template # Print Forge
Gitea template for AI ML Operations client websites 3D printed toy shop for Print Forge
([Web Design & Hosting](https://aimloperations.com/web_design)). ([Web Design & Hosting](https://aimloperations.com/web_design)).
Clone this repo (or **Use this template**), run `scripts/bootstrap-client.sh`, Public site + client portal, plus purchased catalog add-ons: email & SMS,
set branding + `FEATURE_*` flags in the secret env file, deploy. payments, e-commerce, and shipping automation.
Always included: public site (landing, about, contact) and client portal ## Catalog
(login, dashboard, leads, UTM analytics). Optional catalog add-ons are
separate Django apps. A flag that is off keeps the app out of
`INSTALLED_APPS` — no models, admin, URLs, or portal nav.
## Catalog → flags
| Catalog item | Flag | App | | Catalog item | Flag | App |
|---|---|---| |---|---|---|
| Public site | (always on) | `public` | | Public site | (always on) | `public` |
| Client portal + UTM | (always on) | `accounts`, `dashboard`, `leads`, `analytics`, `contacts`, `core` | | Client portal + UTM | (always on) | `accounts`, `dashboard`, `leads`, `analytics`, `contacts`, `core` |
| Email & SMS | `FEATURE_EMAIL_SMS` | `email_sms` | | Email & SMS | `FEATURE_EMAIL_SMS` | `email_sms` |
| Direct mail (PCM) | `FEATURE_DIRECT_MAIL` | `directmail` | | Payments (Stripe) | `FEATURE_PAYMENTS` | `payments` |
| Blog | `FEATURE_BLOG` | `blog` | | E-commerce storefront | `FEATURE_SHOP` | `shop` |
| Payments (Stripe) | `FEATURE_PAYMENTS` | `payments` (requires email/SMS) | | Shipping automation | `FEATURE_SHIPPING` | `shipping` |
| Social consolidation | `FEATURE_SOCIAL` | `social` |
| AI social generator | `FEATURE_SOCIAL_AI` | `social_ai` (requires social) |
## New client Off for this client: direct mail, blog, social, social AI, POS sync, event ticketing.
```bash ## Contact
# 1. Create repo from this Gitea template, clone it.
# 2. Rename package + branding placeholders:
./scripts/bootstrap-client.sh acme_site "Acme HVAC" acmehvac.com
# 3. Brand public templates and static/brand/ (logo, colors, copy). - Phone: 630-632-0202
- Email: Printforgeprints@gmail.com
- Public URL (placeholder until DNS): https://printforgeprints.com
# 4. Secrets on the control node: ## Local
mkdir -p ~/Documents/secrets/acme_site
cp .env.prod.example ~/Documents/secrets/acme_site/acme_site_prod.env
# Flip only purchased FEATURE_* flags. Fill provider secrets.
./scripts/validate-env.sh ~/Documents/secrets/acme_site/acme_site_prod.env
# 5. Infra: Postgres on 10.0.0.230, server-infra app_catalog, NPM, CI.
# 6. Deploy. Create a portal user (createsuperuser).
```
Local:
```bash ```bash
cp .env.example .env cp .env.example .env
@@ -54,30 +36,19 @@ uv run python manage.py runserver
# or: docker compose up # or: docker compose up
``` ```
## Deploy
```bash
mkdir -p ~/Documents/secrets/print_forge
cp .env.prod.example ~/Documents/secrets/print_forge/print_forge_prod.env
# Fill Stripe, SMTP2GO, shortener, and DB secrets.
./scripts/validate-env.sh ~/Documents/secrets/print_forge/print_forge_prod.env
```
Infra: Postgres on 10.0.0.230, server-infra app_catalog, NPM, CI.
Create a portal user with `createsuperuser` after first deploy.
## Stack ## Stack
Django 6 + uv · Postgres (prod/beta); SQLite locally · dj-queue · Docker · Django 6 + uv · Postgres (prod/beta); SQLite locally · dj-queue · Docker ·
server-infra Ansible deploy. server-infra Ansible deploy.
Ollama for social drafts lives on the LAN at `http://10.0.0.128:11434`.
Do not call a public Ollama host.
## Campaign tracked links (piha.li)
When `FEATURE_EMAIL_SMS` or `FEATURE_DIRECT_MAIL` is on, composers auto-insert a
homepage URL with `utm_source` (slug of `SITE_NAME`, or `UTM_SOURCE`),
`utm_medium` = channel, and `utm_campaign` = campaign name. Configured
`SHORTENER_BASE_URL` + `SHORTENER_API_TOKEN` mint that URL via
[url_shortening_service](https://git.aimloperations.com/ai_ml_operations/url_shortening_service)
and put `piha.li` / `beta.piha.li` short links in SMS, email hrefs, and postcard QR codes.
Caller secrets (this repo's env file):
```text
SHORTENER_BASE_URL=https://shortener.aimloperations.com
SHORTENER_API_TOKEN=<slug>:<secret>
```
Operator secrets (`url_shortening_service_*`): `SHORTENER_API_TOKENS=<slug>:<same-secret>`
and `SHORT_ALLOWED_HOSTS` must include the client domain. Mint against the **API host**,
never `piha.li`.
+21 -12
View File
@@ -2,13 +2,13 @@ services:
db: db:
image: postgres:16-alpine image: postgres:16-alpine
environment: environment:
POSTGRES_DB: client_site POSTGRES_DB: print_forge
POSTGRES_USER: client_site POSTGRES_USER: print_forge
POSTGRES_PASSWORD: client_site POSTGRES_PASSWORD: print_forge
volumes: volumes:
- postgres_data:/var/lib/postgresql/data - postgres_data:/var/lib/postgresql/data
healthcheck: healthcheck:
test: ["CMD-SHELL", "pg_isready -U client_site -d client_site"] test: ["CMD-SHELL", "pg_isready -U print_forge -d print_forge"]
interval: 5s interval: 5s
timeout: 5s timeout: 5s
retries: 10 retries: 10
@@ -19,8 +19,11 @@ services:
ports: ports:
- "8000:8000" - "8000:8000"
# Bind-mount source so edit → runserver auto-reload (no rebuild). # Bind-mount source so edit → runserver auto-reload (no rebuild).
# Lockfile mounts + entrypoint `uv sync` pick up new deps without a rebuild.
volumes: volumes:
- ./site:/app/site - ./site:/app/site
- ./pyproject.toml:/app/pyproject.toml
- ./uv.lock:/app/uv.lock
# No required env_file — CI has no .env. Defaults below; for local secrets: # No required env_file — CI has no .env. Defaults below; for local secrets:
# docker compose --env-file .env up # docker compose --env-file .env up
# #
@@ -32,21 +35,25 @@ services:
DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-dev-only-change-me} DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-dev-only-change-me}
DJANGO_DEBUG: ${DJANGO_DEBUG:-true} DJANGO_DEBUG: ${DJANGO_DEBUG:-true}
DJANGO_ALLOWED_HOSTS: ${DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1,0.0.0.0} DJANGO_ALLOWED_HOSTS: ${DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1,0.0.0.0}
DATABASE_URL: ${COMPOSE_DATABASE_URL:-postgres://client_site:client_site@db:5432/client_site} DATABASE_URL: ${COMPOSE_DATABASE_URL:-postgres://print_forge:print_forge@db:5432/print_forge}
SITE_UNDER_CONSTRUCTION: ${SITE_UNDER_CONSTRUCTION:-false} SITE_UNDER_CONSTRUCTION: ${SITE_UNDER_CONSTRUCTION:-false}
FEATURE_EMAIL_SMS: ${FEATURE_EMAIL_SMS:-true} FEATURE_EMAIL_SMS: ${FEATURE_EMAIL_SMS:-true}
FEATURE_DIRECT_MAIL: ${FEATURE_DIRECT_MAIL:-true} FEATURE_DIRECT_MAIL: ${FEATURE_DIRECT_MAIL:-false}
FEATURE_BLOG: ${FEATURE_BLOG:-true} FEATURE_BLOG: ${FEATURE_BLOG:-false}
FEATURE_PAYMENTS: ${FEATURE_PAYMENTS:-true} FEATURE_PAYMENTS: ${FEATURE_PAYMENTS:-true}
FEATURE_SOCIAL: ${FEATURE_SOCIAL:-true} FEATURE_SOCIAL: ${FEATURE_SOCIAL:-false}
FEATURE_SOCIAL_AI: ${FEATURE_SOCIAL_AI:-true} FEATURE_SOCIAL_AI: ${FEATURE_SOCIAL_AI:-false}
FEATURE_SHOP: ${FEATURE_SHOP:-true}
FEATURE_POS_SYNC: ${FEATURE_POS_SYNC:-false}
FEATURE_EVENTS: ${FEATURE_EVENTS:-false}
FEATURE_SHIPPING: ${FEATURE_SHIPPING:-true}
PUBLIC_SITE_URL: ${PUBLIC_SITE_URL:-http://127.0.0.1:8000} PUBLIC_SITE_URL: ${PUBLIC_SITE_URL:-http://127.0.0.1:8000}
EMAIL_HOST: ${EMAIL_HOST:-mail.smtp2go.com} EMAIL_HOST: ${EMAIL_HOST:-mail.smtp2go.com}
EMAIL_HOST_USER: ${EMAIL_HOST_USER:-} EMAIL_HOST_USER: ${EMAIL_HOST_USER:-}
EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD:-} EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD:-}
EMAIL_PORT: ${EMAIL_PORT:-2525} EMAIL_PORT: ${EMAIL_PORT:-2525}
EMAIL_USE_TLS: ${EMAIL_USE_TLS:-true} EMAIL_USE_TLS: ${EMAIL_USE_TLS:-true}
DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL:-noreply@example.com} DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL:-Printforgeprints@gmail.com}
# Dev default = console. Set smtp backend in `.env` for real SMTP2GO sends. # Dev default = console. Set smtp backend in `.env` for real SMTP2GO sends.
EMAIL_BACKEND: ${EMAIL_BACKEND:-django.core.mail.backends.console.EmailBackend} EMAIL_BACKEND: ${EMAIL_BACKEND:-django.core.mail.backends.console.EmailBackend}
SMTP2GO_SMS_API_KEY: ${SMTP2GO_SMS_API_KEY:-} SMTP2GO_SMS_API_KEY: ${SMTP2GO_SMS_API_KEY:-}
@@ -78,12 +85,14 @@ services:
entrypoint: ["/worker-entrypoint.sh"] entrypoint: ["/worker-entrypoint.sh"]
volumes: volumes:
- ./site:/app/site - ./site:/app/site
- ./pyproject.toml:/app/pyproject.toml
- ./uv.lock:/app/uv.lock
environment: environment:
DJANGO_ENV: ${DJANGO_ENV:-dev} DJANGO_ENV: ${DJANGO_ENV:-dev}
DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-dev-only-change-me} DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-dev-only-change-me}
DJANGO_DEBUG: ${DJANGO_DEBUG:-true} DJANGO_DEBUG: ${DJANGO_DEBUG:-true}
DJANGO_ALLOWED_HOSTS: ${DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1,0.0.0.0} DJANGO_ALLOWED_HOSTS: ${DJANGO_ALLOWED_HOSTS:-localhost,127.0.0.1,0.0.0.0}
DATABASE_URL: ${COMPOSE_DATABASE_URL:-postgres://client_site:client_site@db:5432/client_site} DATABASE_URL: ${COMPOSE_DATABASE_URL:-postgres://print_forge:print_forge@db:5432/print_forge}
PUBLIC_SITE_URL: ${PUBLIC_SITE_URL:-http://127.0.0.1:8000} PUBLIC_SITE_URL: ${PUBLIC_SITE_URL:-http://127.0.0.1:8000}
DISPATCH_DUE_INTERVAL_SECONDS: ${DISPATCH_DUE_INTERVAL_SECONDS:-15} DISPATCH_DUE_INTERVAL_SECONDS: ${DISPATCH_DUE_INTERVAL_SECONDS:-15}
EMAIL_HOST: ${EMAIL_HOST:-mail.smtp2go.com} EMAIL_HOST: ${EMAIL_HOST:-mail.smtp2go.com}
@@ -91,7 +100,7 @@ services:
EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD:-} EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD:-}
EMAIL_PORT: ${EMAIL_PORT:-2525} EMAIL_PORT: ${EMAIL_PORT:-2525}
EMAIL_USE_TLS: ${EMAIL_USE_TLS:-true} EMAIL_USE_TLS: ${EMAIL_USE_TLS:-true}
DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL:-noreply@example.com} DEFAULT_FROM_EMAIL: ${DEFAULT_FROM_EMAIL:-Printforgeprints@gmail.com}
EMAIL_BACKEND: ${EMAIL_BACKEND:-django.core.mail.backends.console.EmailBackend} EMAIL_BACKEND: ${EMAIL_BACKEND:-django.core.mail.backends.console.EmailBackend}
SMTP2GO_SMS_API_KEY: ${SMTP2GO_SMS_API_KEY:-} SMTP2GO_SMS_API_KEY: ${SMTP2GO_SMS_API_KEY:-}
SMTP2GO_WEBHOOK_SECRET: ${SMTP2GO_WEBHOOK_SECRET:-} SMTP2GO_WEBHOOK_SECRET: ${SMTP2GO_WEBHOOK_SECRET:-}
+4 -2
View File
@@ -1,7 +1,7 @@
[project] [project]
name = "web-django-template" name = "print-forge"
version = "0.1.0" version = "0.1.0"
description = "Template for AI ML Operations client websites (public site + portal + optional catalog apps)" description = "Print Forge — 3D printed toy shop (public site, portal, shop, shipping)"
readme = "README.md" readme = "README.md"
requires-python = ">=3.12" requires-python = ">=3.12"
dependencies = [ dependencies = [
@@ -16,6 +16,8 @@ dependencies = [
"requests>=2.32.0", "requests>=2.32.0",
"stripe>=11.0.0", "stripe>=11.0.0",
"whitenoise>=6.9.0", "whitenoise>=6.9.0",
"pillow>=12.3.0",
"rembg[cpu]>=2.0.83",
] ]
[dependency-groups] [dependency-groups]
+7 -7
View File
@@ -16,19 +16,19 @@ fi
ROOT="$(cd "$(dirname "$0")/.." && pwd)" ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT" cd "$ROOT"
if [[ "$SLUG" == "client_site" ]]; then if [[ "$SLUG" == "print_forge" ]]; then
echo "slug is already client_site — branding defaults only." echo "slug is already print_forge — branding defaults only."
else else
echo "Renaming package client_site → $SLUG" echo "Renaming package print_forge → $SLUG"
if [[ -d site/client_site ]]; then if [[ -d site/print_forge ]]; then
mv site/client_site "site/$SLUG" mv site/print_forge "site/$SLUG"
fi fi
grep -rl 'client_site' \ grep -rl 'print_forge' \
--exclude-dir=.git --exclude-dir=.venv --exclude-dir=__pycache__ \ --exclude-dir=.git --exclude-dir=.venv --exclude-dir=__pycache__ \
--exclude='*.png' --exclude='*.jpg' --exclude='*.woff*' --exclude='*.eot' \ --exclude='*.png' --exclude='*.jpg' --exclude='*.woff*' --exclude='*.eot' \
--exclude='uv.lock' . \ --exclude='uv.lock' . \
| while read -r f; do | while read -r f; do
sed -i "s/client_site/${SLUG}/g" "$f" sed -i "s/print_forge/${SLUG}/g" "$f"
done done
fi fi
+7 -2
View File
@@ -1,6 +1,11 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
cd /app
if [[ "${DJANGO_ENV:-}" == "dev" || "${DJANGO_USE_RUNSERVER:-}" == "true" ]]; then
echo "Syncing Python deps..."
uv sync --frozen
fi
cd /app/site cd /app/site
wait_for_database() { wait_for_database() {
@@ -14,7 +19,7 @@ wait_for_database() {
import os import os
import sys import sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "client_site.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "print_forge.settings")
import django import django
from django.db import connections from django.db import connections
@@ -51,6 +56,6 @@ fi
uv run python manage.py collectstatic --noinput uv run python manage.py collectstatic --noinput
exec uv run gunicorn client_site.wsgi:application \ exec uv run gunicorn print_forge.wsgi:application \
--bind "${GUNICORN_BIND:-0.0.0.0:8000}" \ --bind "${GUNICORN_BIND:-0.0.0.0:8000}" \
--workers "${GUNICORN_WORKERS:-2}" --workers "${GUNICORN_WORKERS:-2}"
+174
View File
@@ -0,0 +1,174 @@
#!/usr/bin/env python3
"""Replace public-site t-shirt mockups with 3D printer / printed-toy photos."""
from __future__ import annotations
import io
import urllib.request
from pathlib import Path
from PIL import Image, ImageOps
ROOT = Path(__file__).resolve().parent.parent
IMAGES = ROOT / "site" / "print_forge" / "static" / "images"
CACHE = ROOT / ".pexels-cache"
USER_HERO = [
Path(
"/home/westfarn/.cursor/projects/home-westfarn-Documents-repos-print-forge/assets/"
"pexels-jakubzerdzicki-20688553-82987c3e-5bc2-4514-9eb0-2eb9518d5d63.png"
),
Path(
"/home/westfarn/.cursor/projects/home-westfarn-Documents-repos-print-forge/assets/"
"pexels-jakubzerdzicki-24859620-43b11020-90b7-4d02-9c78-d28b2cc14a4e.png"
),
]
PEXELS = {
"figurine": 13624760,
"miniatures": 35063297,
"tray": 19583534,
"neon": 30720501,
"extruder": 31336922,
"spool": 30658376,
"lab": 23533991,
"neon2": 18296466,
"workshop": 30482193,
"nozzle": 23533982,
"hex": 30620861,
"orange_parts": 20688553,
"maker": 24859620,
}
UA = (
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
)
def fetch_pexels(photo_id: int) -> Path:
CACHE.mkdir(parents=True, exist_ok=True)
dest = CACHE / f"pexels-{photo_id}.jpg"
if dest.exists() and dest.stat().st_size > 20_000:
return dest
url = (
f"https://images.pexels.com/photos/{photo_id}/"
f"pexels-photo-{photo_id}.jpeg?auto=compress&cs=tinysrgb&dpr=2&w=2000"
)
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": "image/*"})
with urllib.request.urlopen(req, timeout=60) as resp:
data = resp.read()
if len(data) < 5000:
raise RuntimeError(f"Pexels {photo_id} too small ({len(data)} bytes)")
dest.write_bytes(data)
return dest
def open_image(path: Path) -> Image.Image:
image = Image.open(path)
image.load()
image = ImageOps.exif_transpose(image) or image
return image.convert("RGB")
def cover_crop(image: Image.Image, width: int, height: int, focus: str = "center") -> Image.Image:
src_w, src_h = image.size
scale = max(width / src_w, height / src_h)
new_w = max(width, int(src_w * scale + 0.5))
new_h = max(height, int(src_h * scale + 0.5))
resized = image.resize((new_w, new_h), Image.Resampling.LANCZOS)
if focus == "left":
left = 0
elif focus == "right":
left = new_w - width
else:
left = (new_w - width) // 2
if focus == "top":
top = 0
elif focus == "bottom":
top = new_h - height
else:
top = (new_h - height) // 2
return resized.crop((left, top, left + width, top + height))
def save_jpeg(image: Image.Image, dest: Path, quality: int = 86) -> None:
dest.parent.mkdir(parents=True, exist_ok=True)
image.save(dest, format="JPEG", quality=quality, optimize=True, progressive=True)
def save_png(image: Image.Image, dest: Path) -> None:
dest.parent.mkdir(parents=True, exist_ok=True)
image.save(dest, format="PNG", optimize=True)
def main() -> None:
sources: dict[str, Image.Image] = {
"hero1": open_image(USER_HERO[0]),
"hero2": open_image(USER_HERO[1]),
}
failed = []
for name, photo_id in PEXELS.items():
try:
sources[name] = open_image(fetch_pexels(photo_id))
print(f"ok {name} {photo_id} {sources[name].size}")
except Exception as exc: # noqa: BLE001
failed.append(f"{name}/{photo_id}: {exc}")
print(f"fail {name} {photo_id}: {exc}")
def src(*names: str) -> Image.Image:
for name in names:
if name in sources:
return sources[name]
raise KeyError(names)
jobs = [
("slider-image-01-1132x657.jpg", src("hero1"), (1132, 657), "center", "jpeg"),
("slider-image-02-1132x657.jpg", src("hero2"), (1132, 657), "center", "jpeg"),
("box-nina-img-364x474.jpg", src("figurine", "tray", "hero1"), (364, 474), "center", "jpeg"),
("box-nina-img-mini-217x328.jpg", src("spool", "extruder", "hero2"), (217, 328), "center", "jpeg"),
("gallery-22-1200x800-original.jpg", src("figurine", "hero1"), (1200, 800), "center", "jpeg"),
("gallery-22-582x299.jpg", src("figurine", "hero1"), (582, 299), "center", "jpeg"),
("gallery-22-582x558.jpg", src("workshop", "hero2"), (582, 558), "center", "jpeg"),
("gallery-4-1200x800-original.jpg", src("miniatures", "tray", "hero1"), (1200, 800), "center", "jpeg"),
("gallery-23-287x252.jpg", src("miniatures", "tray", "hero1"), (287, 252), "center", "jpeg"),
("gallery-23-1200x800-original.jpg", src("tray", "miniatures", "hero1"), (1200, 800), "center", "jpeg"),
("quote-1-287x252.jpg", src("tray", "miniatures", "hero1"), (287, 252), "center", "jpeg"),
("gallery-20-800x1200-original.jpg", src("spool", "extruder", "hero2"), (800, 1200), "center", "jpeg"),
("gallery-20-287x252.jpg", src("spool", "extruder", "hero2"), (287, 252), "center", "jpeg"),
("gallery-2-1200x800-original.jpg", src("neon", "neon2", "hero2"), (1200, 800), "center", "jpeg"),
("gallery-21-287x252.jpg", src("neon", "neon2", "hero2"), (287, 252), "center", "jpeg"),
("gallery-21-1200x800-original.jpg", src("lab", "workshop", "hero2"), (1200, 800), "center", "jpeg"),
("video-1-549x384.jpg", src("nozzle", "extruder", "hero1"), (549, 384), "center", "jpeg"),
("image-1-333x262.jpg", src("tray", "miniatures", "hero1"), (333, 262), "center", "jpeg"),
("bg-breadcrumbs.jpg", src("hero2", "workshop", "lab"), (1920, 414), "center", "jpeg"),
("bg-image-1.jpg", src("hero2", "workshop", "lab"), (1920, 950), "center", "jpeg"),
("product-1-292x256.png", src("figurine", "hero1"), (292, 256), "center", "png"),
("product-2-292x256.png", src("miniatures", "tray", "hero1"), (292, 256), "center", "png"),
("product-3-292x256.png", src("tray", "hero1"), (292, 256), "center", "png"),
("product-4-292x256.png", src("hex", "neon", "hero2"), (292, 256), "center", "png"),
("product-5-292x256.png", src("spool", "extruder", "hero2"), (292, 256), "center", "png"),
("product-6-292x256.png", src("lab", "workshop", "hero2"), (292, 256), "center", "png"),
("product-mini-1-146x132.png", src("figurine", "hero1"), (146, 132), "center", "png"),
("product-mini-2-146x132.png", src("tray", "hero1"), (146, 132), "center", "png"),
("single-product-1-530x480.png", src("figurine", "hero1"), (530, 480), "center", "png"),
("single-product-2-530x480.png", src("miniatures", "tray", "hero1"), (530, 480), "center", "png"),
("single-product-3-530x480.png", src("hero1", "tray"), (530, 480), "center", "png"),
]
for filename, image, size, focus, kind in jobs:
framed = cover_crop(image, *size, focus=focus)
dest = IMAGES / filename
if kind == "png":
save_png(framed, dest)
else:
save_jpeg(framed, dest)
print(f"wrote {filename} {framed.size}")
if failed:
print("download warnings:")
for item in failed:
print(" ", item)
if __name__ == "__main__":
main()
+35
View File
@@ -82,6 +82,41 @@ if _true "${FEATURE_SOCIAL_AI:-}"; then
exit 1 exit 1
fi fi
fi fi
if _true "${FEATURE_SHOP:-}"; then
if ! _true "${FEATURE_EMAIL_SMS:-}"; then
echo "FEATURE_SHOP requires FEATURE_EMAIL_SMS" >&2
exit 1
fi
if ! _true "${FEATURE_PAYMENTS:-}"; then
echo "FEATURE_SHOP requires FEATURE_PAYMENTS" >&2
exit 1
fi
fi
if _true "${FEATURE_POS_SYNC:-}"; then
if ! _true "${FEATURE_SHOP:-}"; then
echo "FEATURE_POS_SYNC requires FEATURE_SHOP" >&2
exit 1
fi
if [[ "$DJANGO_ENV" == "prod" || "$DJANGO_ENV" == "beta" ]]; then
required_vars+=(POS_WEBHOOK_SECRET)
fi
fi
if _true "${FEATURE_EVENTS:-}"; then
if ! _true "${FEATURE_EMAIL_SMS:-}"; then
echo "FEATURE_EVENTS requires FEATURE_EMAIL_SMS" >&2
exit 1
fi
if ! _true "${FEATURE_PAYMENTS:-}"; then
echo "FEATURE_EVENTS requires FEATURE_PAYMENTS" >&2
exit 1
fi
fi
if _true "${FEATURE_SHIPPING:-}"; then
if ! _true "${FEATURE_SHOP:-}"; then
echo "FEATURE_SHIPPING requires FEATURE_SHOP" >&2
exit 1
fi
fi
missing=() missing=()
for var in "${required_vars[@]}"; do for var in "${required_vars[@]}"; do
+6 -1
View File
@@ -1,6 +1,11 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
cd /app
if [[ "${DJANGO_ENV:-}" == "dev" ]]; then
echo "Syncing Python deps..."
uv sync --frozen
fi
cd /app/site cd /app/site
wait_for_database() { wait_for_database() {
@@ -14,7 +19,7 @@ wait_for_database() {
import os import os
import sys import sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "client_site.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "print_forge.settings")
import django import django
from django.db import connections from django.db import connections
+2 -1
View File
@@ -5,7 +5,8 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sign in · Portal · {{ SITE_NAME }}</title> <title>Sign in · Portal · {{ SITE_NAME }}</title>
<link rel="icon" href="{% static 'brand/favicon-32.png' %}" type="image/png"> <link rel="icon" href="{% static 'brand/favicon.ico' %}" type="image/x-icon">
<link rel="apple-touch-icon" href="{% static 'brand/apple-touch-icon.png' %}">
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Work+Sans:300,400,500,700%7CPoppins:400,600,700"> <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Work+Sans:300,400,500,700%7CPoppins:400,600,700">
<link rel="stylesheet" href="{% static 'css/portal.css' %}"> <link rel="stylesheet" href="{% static 'css/portal.css' %}">
</head> </head>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

-6
View File
@@ -1,6 +0,0 @@
/*!
* Bootstrap v4.0.0 (https://getbootstrap.com)
* Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ :root { --blue: #007bff; --indigo: #6610f2; --purple: #6f42c1; --pink: #e83e8c; --red: #dc3545; --orange: #fd7e14; --yellow: #ffc107; --green: #28a745; --teal: #20c997; --cyan: #17a2b8; --white: #fff; --gray: #6c757d; --gray-dark: #343a40; --breakpoint-xs: 0; --breakpoint-sm: 576px; --breakpoint-md: 768px; --breakpoint-lg: 992px; --breakpoint-xl: 1200px; --breakpoint-xxl: 1600px; --font-family-sans-serif: "Work Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; --font-family-monospace: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } *, *::before, *::after { box-sizing: border-box; } html { font-family: sans-serif; line-height: 1.15; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -ms-overflow-style: scrollbar; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } @-ms-viewport { width: device-width; } article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } body { margin: 0; font-family: "Work Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size: 16px; font-weight: 300; line-height: 1.5; color: #74757f; text-align: left; background-color: #fff; } [tabindex="-1"]:focus { outline: 0 !important; } hr { box-sizing: content-box; height: 0; overflow: visible; } h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: 0.5rem; } p { margin-top: 0; margin-bottom: 1rem; } abbr[title], abbr[data-original-title] { text-decoration: underline; text-decoration: underline dotted; cursor: help; border-bottom: 0; } address { margin-bottom: 1rem; font-style: normal; line-height: inherit; } ol, ul, dl { margin-top: 0; margin-bottom: 1rem; } ol ol, ul ul, ol ul, ul ol { margin-bottom: 0; } dt { font-weight: inherit; } dd { margin-bottom: .5rem; margin-left: 0; } blockquote { margin: 0 0 1rem; } dfn { font-style: italic; } b, strong { font-weight: bolder; } small { font-size: 80%; } sub, sup { position: relative; font-size: 75%; line-height: 0; vertical-align: baseline; } sub { bottom: -.25em; } sup { top: -.5em; } a { color: #0045b6; text-decoration: none; background-color: transparent; -webkit-text-decoration-skip: objects; } a:hover { color: #00286a; text-decoration: underline; } a:not([href]):not([tabindex]) { text-decoration: none; } a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { text-decoration: none; } a:not([href]):not([tabindex]):focus { outline: 0; } pre, code, kbd, samp { font-family: monospace, monospace; font-size: 1em; } pre { margin-top: 0; margin-bottom: 1rem; overflow: auto; -ms-overflow-style: scrollbar; } figure { margin: 0 0 1rem; } img { vertical-align: middle; border-style: none; } svg:not(:root) { overflow: hidden; } table { border-collapse: collapse; } caption { padding-top: 0.75rem; padding-bottom: 0.75rem; color: #6c757d; text-align: left; caption-side: bottom; } th { text-align: inherit; } label { display: inline-block; margin-bottom: .5rem; } button { border-radius: 0; } button:focus { outline: 1px dotted; outline: 5px auto -webkit-focus-ring-color; } input, button, select, optgroup, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } button, input { overflow: visible; } button, select { text-transform: none; } button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { padding: 0; border-style: none; } input[type="radio"], input[type="checkbox"] { box-sizing: border-box; padding: 0; } input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] { -webkit-appearance: listbox; } textarea { overflow: auto; resize: vertical; } fieldset { min-width: 0; padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; max-width: 100%; padding: 0; margin-bottom: .5rem; font-size: 1.5rem; line-height: inherit; color: inherit; white-space: normal; } progress { vertical-align: baseline; } [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } [type="search"] { outline-offset: -2px; -webkit-appearance: none; } [type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-file-upload-button { font: inherit; -webkit-appearance: button; } output { display: inline-block; } summary { display: list-item; cursor: pointer; } template { display: none; } [hidden] { display: none !important; } h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { margin-bottom: 0.5rem; font-family: "Poppins", sans-serif; font-weight: 400; line-height: 1.1; color: #151515; } h1,Line truncated
-18
View File
@@ -1,18 +0,0 @@
/*
*
* Fonts
*/␍/*
*
* Font Awesome Icons 4.7.0
* --------------------------------------------------
*/␍@font-face {␍ font-family: 'FontAwesome';␍ src: url("../fonts/fontawesome-webfont.eot?v=4.7.0");␍ src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");␍ font-weight: normal;␍ font-style: normal;␍}␍␍.fa {␍ display: inline-block;␍ font-family: 'FontAwesome';␍ font-size: inherit;␍ text-rendering: auto;␍ -webkit-font-smoothing: antialiased;␍ -moz-osx-font-smoothing: grayscale;␍}␍␍[class*='fa-']:before {␍ font-weight: 400;␍ font-family: 'FontAwesome';␍}␍␍/* makes the font 33% larger relative to the icon container */␍.fa-lg {␍ font-size: 1.33333333em;␍ line-height: 0.75em;␍ vertical-align: -15%;␍}␍␍.fa-2x {␍ font-size: 2em;␍}␍␍.fa-3x {␍ font-size: 3em;␍}␍␍.fa-4x {␍ font-size: 4em;␍}␍␍.fa-5x {␍ font-size: 5em;␍}␍␍.fa-fw {␍ width: 1.28571429em;␍ text-align: center;␍}␍␍.fa-ul {␍ padding-left: 0;␍ margin-left: 2.14285714em;␍ list-style-type: none;␍}␍␍.fa-ul > li {␍ position: relative;␍}␍␍.fa-li {␍ position: absolute;␍ left: -2.14285714em;␍ width: 2.14285714em;␍ top: 0.14285714em;␍ text-align: center;␍}␍␍.fa-li.fa-lg {␍ left: -1.85714286em;␍}␍␍.fa-border {␍ padding: .2em .25em .15em;␍ border: solid 0.08em #eeeeee;␍ border-radius: .1em;␍}␍␍.fa-pull-left {␍ float: left;␍}␍␍.fa-pull-right {␍ float: right;␍}␍␍.fa.fa-pull-left {␍ margin-right: .3em;␍}␍␍.fa.fa-pull-right {␍ margin-left: .3em;␍}␍␍/* Deprecated as of 4.4.0 */␍.pull-right {␍ float: right;␍}␍␍.pull-left {␍ float: left;␍}␍␍.fa.pull-left {␍ margin-right: .3em;␍}␍␍.fa.pull-right {␍ margin-left: .3em;␍}␍␍.fa-spin {␍ -webkit-animation: fa-spin 2s infinite linear;␍ animation: fa-spin 2s infinite linear;␍}␍␍.fa-pulse {␍ -webkit-animation: fa-spin 1s infinite steps(8);␍ animation: fa-spin 1s infinite steps(8);␍}␍␍@-webkit-keyframes fa-spin {␍ 0% {␍ -webkit-transform: rotate(0deg);␍ transform: rotate(0deg);␍ }␍ 100% {␍ -webkit-transform: rotate(359deg);␍ transform: rotate(359deg);␍ }␍}␍␍@keyframes fa-spin {␍ 0% {␍ -webkit-transform: rotate(0deg);␍ transform: rotate(0deg);␍ }␍ 100% {␍ -webkit-transform: rotate(359deg);␍ transform: rotate(359deg);␍ }␍}␍␍.fa-rotate-90 {␍ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";␍ -webkit-transform: rotate(90deg);␍ -ms-transform: rotate(90deg);␍ transform: rotate(90deg);␍}␍␍.fa-rotate-180 {␍ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";␍ -webkit-transform: rotate(180deg);␍ -ms-transform: rotate(180deg);␍ transform: rotate(180deg);␍}␍␍.fa-rotate-270 {␍ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";␍ -webkit-transform: rotate(270deg);␍ -ms-transform: rotate(270deg);␍ transform: rotate(270deg);␍}␍␍.fa-flip-horizontal {␍ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";␍ -webkit-transform: scale(-1, 1);␍ -ms-transform: scale(-1, 1);␍ transform: scale(-1, 1);␍}␍␍.fa-flip-vertical {␍ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";␍ -webkit-transform: scale(1, -1);␍ -ms-transform: scale(1, -1);␍ transform: scale(1, -1);␍}␍␍:root .fa-rotate-90,␍:root .fa-rotate-180,␍:root .fa-rotate-270,␍:root .fa-flip-horizontal,␍:root .fa-flip-vertical {␍ filter: none;␍}␍␍.fa-stack {␍ position: relative;␍ display: inline-block;␍ width: 2em;␍ height: 2em;␍ line-height: 2em;␍ vertical-align: middle;␍}␍␍.fa-stack-1x,␍.fa-stack-2x {␍ position: absolute;␍ left: 0;␍ width: 100%;␍ text-align: center;␍}␍␍.fa-stack-1x {␍ line-height: inherit;␍}␍␍.fa-stack-2x {␍ font-size: 2em;␍}␍␍.fa-inverse {␍ color: #ffffff;␍}␍␍/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
readers do not read off random characters that represent icons */ .fa-glass:before { content: "\f000"; } .fa-music:before { content: "\f001"; } .fa-search:before { content: "\f002"; } .fa-envelope-o:before { content: "\f003"; } .fa-heart:before { content: "\f004"; } .fa-star:before { content: "\f005"; } .fa-star-o:before { content: "\f006"; } .fa-user:before { content: "\f007"; } .fa-film:before { content: "\f008"; } .fa-th-large:before { content: "\f009"; } .fa-th:before { content: "\f00a"; } .fa-th-list:before { content: "\f00b"; } .fa-check:before { content: "\f00c"; } .fa-remove:before, .fa-close:before, .fa-times:before { content: "\f00d"; } .fa-search-plus:before { content: "\f00e"; } .fa-search-minus:before { content: "\f010"; } .fa-power-off:before { content: "\f011"; } .fa-signal:before { content: "\f012"; } .fa-gear:before, .fa-cog:before { content: "\f013"; } .fa-trash-o:before { content: "\f014"; } .fa-home:before { content: "\f015"; } .fa-file-o:before { content: "\f016"; } .fa-clock-o:before { content: "\f017"; } .fa-road:before { content: "\f018"; } .fa-download:before { content: "\f019"; } .fa-arrow-circle-o-down:before { content: "\f01a"; } .fa-arrow-circle-o-up:before { content: "\f01b"; } .fa-inbox:before { content: "\f01c"; } .fa-play-circle-o:before { content: "\f01d"; } .fa-rotate-right:before, .fa-repeat:before { content: "\f01e"; } .fa-refresh:before { content: "\f021"; } .fa-list-alt:before { content: "\f022"; } .fa-lock:before { content: "\f023"; } .fa-flag:before { content: "\f024"; } .fa-headphones:before { content: "\f025"; } .fa-volume-off:before { content: "\f026"; } .fa-volume-down:before { content: "\f027"; } .fa-volume-up:before { content: "\f028"; } .fa-qrcode:before { content: "\f029"; } .fa-barcode:before { content: "\f02a"; } .fa-tag:before { content: "\f02b"; } .fa-tags:before { content: "\f02c"; } .fa-book:before { content: "\f02d"; } .fa-bookmark:before { content: "\f02e"; } .fa-print:before { content: "\f02f"; } .fa-camera:before { content: "\f030"; } .fa-font:before { content: "\f031"; } .fa-bold:before { content: "\f032"; } .fa-italic:before { content: "\f033"; } .fa-text-height:before { content: "\f034"; } .fa-text-width:before { content: "\f035"; } .fa-align-left:before { content: "\f036"; } .fa-align-center:before { content: "\f037"; } .fa-align-right:before { content: "\f038"; } .fa-align-justify:before { content: "\f039"; } .fa-list:before { content: "\f03a"; } .fa-dedent:before, .fa-outdent:before { content: "\f03b"; } .fa-indent:before { content: "\f03c"; } .fa-video-camera:before { content: "\f03d"; } .fa-photo:before, .fa-image:before, .fa-picture-o:before { content: "\f03e"; } .fa-pencil:before { content: "\f040"; } .fa-map-marker:before { content: "\f041"; } .fa-adjust:before { content: "\f042"; } .fa-tint:before { content: "\f043"; } .fa-edit:before, .fa-pencil-square-o:before { content: "\f044"; } .fa-share-square-o:before { content: "\f045"; } .fa-check-square-o:before { content: "\f046"; } .fa-arrows:before { content: "\f047"; } .fa-step-backward:before { content: "\f048"; } .fa-fast-backward:before { content: "\f049"; } .fa-backward:before { content: "\f04a"; } .fa-play:before { content: "\f04b"; } .fa-pause:before { content: "\f04c"; } .fa-stop:before { content: "\f04d"; } .fa-forward:before { content: "\f04e"; } .fa-fast-forward:before { content: "\f050"; } .fa-step-forward:before { content: "\f051"; } .fa-eject:before { content: "\f052"; } .fa-chevron-left:before { content: "\f053"; } .fa-chevron-right:before { content: "\f054"; } .fa-plus-circle:before { content: "\f055"; } .fa-minus-circle:before { content: "\f056"; } .fa-times-circle:before { content: "\f057"; } .fa-check-circle:before { content: "\f058"; } .fa-question-circle:before { content: "\f059"; } .fa-info-circle:before { content: "\f05a"; } .fa-crosshairs:before { content: "\f05b"; } .fa-times-circle-o:before { content: "\f05c"; } .fa-check-circle-o:before { content: "\f05d"; } .fa-ban:before { content: "\f05e"; } .fa-arrow-left:before { content: "\f060"; } .fa-arrow-right:before { content: "\f061"; } .fa-arrow-up:before { content: "\f062"; } .fa-arrow-down:before { content: "\f063"; } .fa-mail-forward:before, .fa-share:before { content: "\f064"; } .fa-expand:before { content: "\f065"; } .fa-compress:before { content: "\f066"; } .fa-plus:before { content: "\f067"; } .fa-minus:before { content: "\f068"; } .fa-asterisk:before { content: "\f069"; } .fa-exclamation-circle:before { content: "\f06a"; } .fa-gift:before { content: "\f06b"; } .fa-leaf:before { content: "\f06c"; } .fa-fire:before { content: "\f06d"; } .fa-eye:before { content: "\f06e"; } .fa-eye-slash:before { content: "\f070"; } .fa-warning:before, .fa-exclamation-triangle:before { content: "\f071"; } .fa-plane:Line truncated
*
* Material Design Icons
* --------------------------------------------------
*/ @font-face { font-family: "Material Design Icons"; src: url("../fonts/materialdesignicons-webfont.eot?v=1.4.57"); src: url("../fonts/materialdesignicons-webfont.eot?#iefix&v=1.4.57") format("embedded-opentype"), url("../fonts/materialdesignicons-webfont.woff2?v=1.4.57") format("woff2"), url("../fonts/materialdesignicons-webfont.woff?v=1.4.57") format("woff"), url("../fonts/materialdesignicons-webfont.ttf?v=1.4.57") format("truetype"), url("../fonts/materialdesignicons-webfont.svg?v=1.4.57#materialdesigniconsregular") format("svg"); font-weight: normal; font-style: normal; } .mdi { display: inline-block; font: normal normal normal 24px/1 "Material Design Icons"; font-size: inherit; text-rendering: auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; transform: translate(0, 0); } .mdi-access-point:before { content: "\f101"; } .mdi-access-point-network:before { content: "\f102"; } .mdi-account:before { content: "\f103"; } .mdi-account-alert:before { content: "\f104"; } .mdi-account-box:before { content: "\f105"; } .mdi-account-box-outline:before { content: "\f106"; } .mdi-account-check:before { content: "\f107"; } .mdi-account-circle:before { content: "\f108"; } .mdi-account-convert:before { content: "\f109"; } .mdi-account-key:before { content: "\f10a"; } .mdi-account-location:before { content: "\f10b"; } .mdi-account-minus:before { content: "\f10c"; } .mdi-account-multiple:before { content: "\f10d"; } .mdi-account-multiple-outline:before { content: "\f10e"; } .mdi-account-multiple-plus:before { content: "\f10f"; } .mdi-account-network:before { content: "\f110"; } .mdi-account-off:before { content: "\f111"; } .mdi-account-outline:before { content: "\f112"; } .mdi-account-plus:before { content: "\f113"; } .mdi-account-remove:before { content: "\f114"; } .mdi-account-search:before { content: "\f115"; } .mdi-account-star:before { content: "\f116"; } .mdi-account-star-variant:before { content: "\f117"; } .mdi-account-switch:before { content: "\f118"; } .mdi-adjust:before { content: "\f119"; } .mdi-air-conditioner:before { content: "\f11a"; } .mdi-airballoon:before { content: "\f11b"; } .mdi-airplane:before { content: "\f11c"; } .mdi-airplane-off:before { content: "\f11d"; } .mdi-airplay:before { content: "\f11e"; } .mdi-alarm:before { content: "\f11f"; } .mdi-alarm-check:before { content: "\f120"; } .mdi-alarm-multiple:before { content: "\f121"; } .mdi-alarm-off:before { content: "\f122"; } .mdi-alarm-plus:before { content: "\f123"; } .mdi-album:before { content: "\f124"; } .mdi-alert:before { content: "\f125"; } .mdi-alert-box:before { content: "\f126"; } .mdi-alert-circle:before { content: "\f127"; } .mdi-alert-octagon:before { content: "\f128"; } .mdi-alert-outline:before { content: "\f129"; } .mdi-alpha:before { content: "\f12a"; } .mdi-alphabetical:before { content: "\f12b"; } .mdi-amazon:before { content: "\f12c"; } .mdi-amazon-clouddrive:before { content: "\f12d"; } .mdi-ambulance:before { content: "\f12e"; } .mdi-anchor:before { content: "\f12f"; } .mdi-android:before { content: "\f130"; } .mdi-android-debug-bridge:before { content: "\f131"; } .mdi-android-studio:before { content: "\f132"; } .mdi-apple:before { content: "\f133"; } .mdi-apple-finder:before { content: "\f134"; } .mdi-apple-ios:before { content: "\f135"; } .mdi-apple-mobileme:before { content: "\f136"; } .mdi-apple-safari:before { content: "\f137"; } .mdi-appnet:before { content: "\f138"; } .mdi-apps:before { content: "\f139"; } .mdi-archive:before { content: "\f13a"; } .mdi-arrange-bring-forward:before { content: "\f13b"; } .mdi-arrange-bring-to-front:before { content: "\f13c"; } .mdi-arrange-send-backward:before { content: "\f13d"; } .mdi-arrange-send-to-back:before { content: "\f13e"; } .mdi-arrow-all:before { content: "\f13f"; } .mdi-arrow-bottom-drop-circle:before { content: "\f140"; } .mdi-arrow-bottom-left:before { content: "\f141"; } .mdi-arrow-bottom-right:before { content: "\f142"; } .mdi-arrow-collapse:before { content: "\f143"; } .mdi-arrow-down:before { content: "\f144"; } .mdi-arrow-down-bold:before { content: "\f145"; } .mdi-arrow-down-bold-circle:before { content: "\f146"; } .mdi-arrow-down-bold-circle-outline:before { content: "\f147"; } .mdi-arrow-down-bold-hexagon-outline:before { content: "\f148"; } .mdi-arrow-expand:before { content: "\f149"; } .mdi-arrow-left:before { content: "\f14a"; } .mdi-arrow-left-bold:before { content: "\f14b"; } .mdi-arrow-left-bold-circle:before { content: "\f14c"; } .mdi-arrow-left-bold-circle-outline:before { content: "\f14d"; } .mdi-arrow-left-bold-hexagon-outline:before { content: "\f14e"; } .mdi-arrow-right:before { content: "\f14f"; } .mdi-arrow-right-bold:before { content: "\f150"; } .mdi-arrow-right-bold-circle:before { content: "\f151"; } .mdi-arrow-right-bold-circle-outline:before {Line truncated
* Title: Bigmug Line Flaticon Pack
* Author: Catalin Fertu
* Source: http://www.flaticon.com/packs/bigmug-line
* License: CC BY 3.0 (http://creativecommons.org/licenses/by/3.0/)
*/ @font-face { font-family: "fl-bigmug-line"; src: url("../fonts/fl-bigmug-line.eot"); src: url("../fonts/fl-bigmug-line.eot#iefix") format("embedded-opentype"), url("../fonts/fl-bigmug-line.woff") format("woff"), url("../fonts/fl-bigmug-line.ttf") format("truetype"), url("../fonts/fl-bigmug-line.svg") format("svg"); font-weight: normal; font-style: normal; } .fl-bigmug-line-ico, [class^="fl-bigmug-line-"]:before, [class*=" fl-bigmug-line-"]:before, [class^="fl-bigmug-line-"]:after, [class*=" fl-bigmug-line-"]:after { font-family: 'fl-bigmug-line'; font-size: inherit; font-weight: 400; font-style: normal; } .fl-bigmug-line-add137:before { content: "\e000"; } .fl-bigmug-line-add139:before { content: "\e001"; } .fl-bigmug-line-add149:before { content: "\e002"; } .fl-bigmug-line-airplane86:before { content: "\e003"; } .fl-bigmug-line-alarm31:before { content: "\e004"; } .fl-bigmug-line-arrow592:before { content: "\e005"; } .fl-bigmug-line-attach8:before { content: "\e006"; } .fl-bigmug-line-attachment15:before { content: "\e007"; } .fl-bigmug-line-audio46:before { content: "\e008"; } .fl-bigmug-line-back44:before { content: "\e009"; } .fl-bigmug-line-back46:before { content: "\e00a"; } .fl-bigmug-line-big104:before { content: "\e00b"; } .fl-bigmug-line-book188:before { content: "\e00c"; } .fl-bigmug-line-bookmark28:before { content: "\e00d"; } .fl-bigmug-line-bottle34:before { content: "\e00e"; } .fl-bigmug-line-button5:before { content: "\e00f"; } .fl-bigmug-line-buttons5:before { content: "\e010"; } .fl-bigmug-line-cellphone55:before { content: "\e011"; } .fl-bigmug-line-cellular9:before { content: "\e012"; } .fl-bigmug-line-center10:before { content: "\e013"; } .fl-bigmug-line-chat51:before { content: "\e014"; } .fl-bigmug-line-chat55:before { content: "\e015"; } .fl-bigmug-line-checkmark14:before { content: "\e016"; } .fl-bigmug-line-checkmark15:before { content: "\e017"; } .fl-bigmug-line-checkmark16:before { content: "\e018"; } .fl-bigmug-line-circular220:before { content: "\e019"; } .fl-bigmug-line-circular224:before { content: "\e01a"; } .fl-bigmug-line-circular228:before { content: "\e01b"; } .fl-bigmug-line-circular229:before { content: "\e01c"; } .fl-bigmug-line-clipboard68:before { content: "\e01d"; } .fl-bigmug-line-close42:before { content: "\e01e"; } .fl-bigmug-line-cloud255:before { content: "\e01f"; } .fl-bigmug-line-cloud260:before { content: "\e020"; } .fl-bigmug-line-cocktail26:before { content: "\e021"; } .fl-bigmug-line-code30:before { content: "\e022"; } .fl-bigmug-line-collapse5:before { content: "\e023"; } .fl-bigmug-line-comment45:before { content: "\e024"; } .fl-bigmug-line-compass80:before { content: "\e025"; } .fl-bigmug-line-contract5:before { content: "\e026"; } .fl-bigmug-line-copy23:before { content: "\e027"; } .fl-bigmug-line-crescent23:before { content: "\e028"; } .fl-bigmug-line-cropping1:before { content: "\e029"; } .fl-bigmug-line-cross81:before { content: "\e02a"; } .fl-bigmug-line-cross83:before { content: "\e02b"; } .fl-bigmug-line-cube29:before { content: "\e02c"; } .fl-bigmug-line-double97:before { content: "\e02d"; } .fl-bigmug-line-double98:before { content: "\e02e"; } .fl-bigmug-line-double99:before { content: "\e02f"; } .fl-bigmug-line-down55:before { content: "\e030"; } .fl-bigmug-line-down56:before { content: "\e031"; } .fl-bigmug-line-down58:before { content: "\e032"; } .fl-bigmug-line-down59:before { content: "\e033"; } .fl-bigmug-line-down64:before { content: "\e034"; } .fl-bigmug-line-download136:before { content: "\e035"; } .fl-bigmug-line-download142:before { content: "\e036"; } .fl-bigmug-line-download146:before { content: "\e037"; } .fl-bigmug-line-download147:before { content: "\e038"; } .fl-bigmug-line-download148:before { content: "\e039"; } .fl-bigmug-line-electrical17:before { content: "\e03a"; } .fl-bigmug-line-electronic57:before { content: "\e03b"; } .fl-bigmug-line-email64:before { content: "\e03c"; } .fl-bigmug-line-email67:before { content: "\e03d"; } .fl-bigmug-line-equalization3:before { content: "\e03e"; } .fl-bigmug-line-equalizer26:before { content: "\e03f"; } .fl-bigmug-line-event6:before { content: "\e040"; } .fl-bigmug-line-expand25:before { content: "\e041"; } .fl-bigmug-line-expanding2:before { content: "\e042"; } .fl-bigmug-line-fast33:before { content: "\e043"; } .fl-bigmug-line-favourites5:before { content: "\e044"; } .fl-bigmug-line-file68:before { content: "\e045"; } .fl-bigmug-line-file69:before { content: "\e046"; } .fl-bigmug-line-film57:before { content: "\e047"; } .fl-bigmug-line-flag53:before { content: "\e048"; } .fl-bigmug-line-fog10:before { content: "\e049"; } .fl-bigmug-line-foggy3:before { content: "\e04a"; } .fl-bigmug-line-folder173:before { content: "\e04b"; } .fl-bigmug-line-fork34:before { content: "\e04c"; } .fl-bigmug-line-four87:before { conteLine truncated
-239
View File
@@ -1,239 +0,0 @@
@charset "UTF-8"; /*
* Trunk version 2.0.0
*/ a:focus, button:focus { outline: none !important; } button::-moz-focus-inner { border: 0; } *:focus { outline: none; } blockquote { padding: 0; margin: 0; } input, button, select, textarea { outline: none; } label { margin-bottom: 0; } p { margin: 0; } ul, ol { list-style: none; padding: 0; margin: 0; } ul li, ol li { display: block; } dl { margin: 0; } dt, dd { line-height: inherit; } dt { font-weight: inherit; } dd { margin-bottom: 0; } cite { font-style: normal; } form { margin-bottom: 0; } blockquote { padding-left: 0; border-left: 0; } address { margin-top: 0; margin-bottom: 0; } figure { margin-bottom: 0; } html p a:hover { text-decoration: none; } /*
*
* Typography
*/ body { font-family: "Work Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size: 14px; line-height: 1.7; font-weight: 300; color: #74757f; background-color: #fff; -webkit-text-size-adjust: none; -webkit-font-smoothing: subpixel-antialiased; letter-spacing: .03em; } @media (min-width: 768px) { body { font-size: 16px; line-height: 1.5; } } h1, h2, h3, h4, h5, h6, [class^='heading-'] { margin-top: 0; margin-bottom: 0; color: #151515; } h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover, [class^='heading-'] a:hover { color: #0045b6; } h1 span, h2 span, h3 span, h4 span, h5 span, h6 span, [class^='heading-'] span { display: inline-block; } h1 span[data-toggle='modal'], h2 span[data-toggle='modal'], h3 span[data-toggle='modal'], h4 span[data-toggle='modal'], h5 span[data-toggle='modal'], h6 span[data-toggle='modal'], [class^='heading-'] span[data-toggle='modal'] { border-bottom: 2px dashed rgba(0, 69, 182, 0.3); cursor: pointer; } h1 > span.icon, h2 > span.icon, h3 > span.icon, h4 > span.icon, h5 > span.icon, h6 > span.icon, [class^='heading-'] > span.icon { display: inline-block; margin-right: 5px; } h1, .heading-1 { font-size: 30px; line-height: 1.15; letter-spacing: 0; } @media (min-width: 576px) { h1, .heading-1 { font-size: 32px; } } @media (min-width: 768px) { h1, .heading-1 { font-size: 46px; line-height: 1.25; } } @media (min-width: 992px) { h1, .heading-1 { font-size: 54px; } } @media (min-width: 1200px) { h1, .heading-1 { font-size: 58px; } } @media (min-width: 1600px) { h1, .heading-1 { font-size: 90px; line-height: 0.88889; } } h2, .heading-2 { font-family: "Poppins", sans-serif; font-size: 28px; line-height: 1.4; letter-spacing: 0; } @media (min-width: 576px) { h2, .heading-2 { font-size: 30px; } } @media (min-width: 768px) { h2, .heading-2 { font-size: 44px; } } @media (min-width: 1200px) { h2, .heading-2 { font-size: 50px; line-height: 1.4; } } h3, .heading-3 { font-size: 24px; line-height: 1.3; letter-spacing: 0; } @media (min-width: 768px) { h3, .heading-3 { font-size: 30px; line-height: 1.4; } } @media (min-width: 1200px) { h3, .heading-3 { font-size: 38px; line-height: 1.21053; } } h3 .big, .heading-3 .big { font-size: 2em; line-height: 1; } h4, .heading-4 { font-size: 18px; line-height: 1.5; letter-spacing: 0; } @media (min-width: 1200px) { h4, .heading-4 { font-size: 24px; line-height: 1.33333; } } h4.h4-smaller, .heading-4.h4-smaller { font-size: 19px; } @media (min-width: 1200px) { h4.h4-smaller, .heading-4.h4-smaller { font-size: 22px; line-height: 1.45455; } } h5, .heading-5 { font-size: 16px; line-height: 1.5; letter-spacing: .01em; } @media (min-width: 768px) { h5, .heading-5 { font-size: 22px; line-height: 1.27273; } } h6, .heading-6 { font-family: "Poppins", sans-serif; font-size: 14px; line-height: 1.8; letter-spacing: .2em; text-transform: uppercase; } @media (min-width: 768px) { h6, .heading-6 { font-size: 16px; line-height: 1.5; font-weight: 700; } } .title-decorated { position: relative; padding-left: 40px; text-align: left; } .title-decorated::before { content: ''; position: absolute; left: 0; top: 12px; width: 30px; border-bottom: 1px solid; } .title-docor-text { font-size: 20px; color: #fff; } @media (min-width: 576px) { .title-docor-text { font-size: 24px; } } @media (min-width: 768px) { .title-docor-text { padding-left: 96px; font-size: 37px; } .title-docor-text::before { width: 74px; border-bottom-width: 2px; } } @media (min-width: 768px) { .title-decorated-lg { padding-left: 80px; } .title-decorated-lg::before { width: 62px; } .title-decorated-lg + p { margin-top: 32px; } } small, .small { display: block; font-size: 12px; line-height: 1.5; } mark, .mark { padding: 3px 5px; color: #fff; background: #0045b6; } strong { font-weight: 700; color: #74757f; } .big { font-size: 16px; line-height: 1.55; } @media (min-width: 768px) { .big { font-size: 20px; line-height: 1.6; } } .lead { font-size: 24px; line-height: 34px; font-weight: 300; } code { padding: 4px 5px; border-radius: 0; font-size: 90%; color: #111111; background: #f5f6fa; } .text-large { font-family: "Poppins", sans-serif; font-size: 30px; font-weight: 500; letter-spacing: 0; line-height: 1.2; text-transform: uppercase; } @media (min-width: 576px) { .text-large { font-size: 55px; } } @media (min-width: 768px) { .text-large { font-size: 68px; } } @media (min-width: 992px) { .text-large { font-size: 80px; } } @media (min-width: 1200px) { .text-large { font-size: 100px; } } .context-dark .text-large, .bg-gray-700 .text-large, .bg-gray-800 .text-large, .bg-primary .text-large, .bg-primary-darker .text-large { color: #fff; } .text-extra-large { font-size: 100px; line-height: .8Line truncated
*
* Brand
*/ .brand { display: inline-block; } .brand .brand-logo-light { display: none; } .brand .brand-logo-dark { display: block; } /*
*
* Links
*/ a { transition: all 0.3s ease-in-out; } a, a:focus, a:active, a:hover { text-decoration: none; } a, a:focus, a:active { color: #0045b6; } a:hover { color: #00286a; } a[href*='tel'], a[href*='mailto'] { white-space: nowrap; } .link-hover { color: #343db0; } .link-default, .link-default:active, .link-default:focus { color: #74757f; } .link-default:hover { color: #0045b6; } .context-dark .link-default, .bg-gray-700 .link-default, .bg-gray-800 .link-default, .bg-primary .link-default, .bg-primary-darker .link-default { color: #aeb1be; } .context-dark .link-default:hover, .bg-gray-700 .link-default:hover, .bg-gray-800 .link-default:hover, .bg-primary .link-default:hover, .bg-primary-darker .link-default:hover { color: #fff; } .link-image { display: block; max-width: 75%; margin-left: auto; margin-right: auto; opacity: .45; transition: all 0.3s ease-in-out; } .link-image:hover { opacity: 1; } .privacy-link { display: inline-block; color: #4854ed; } * + .privacy-link { margin-top: 25px; } /*
*
* Blocks
*/ .block-center, .block-sm, .block-lg { margin-left: auto; margin-right: auto; } .block-sm { max-width: 560px; } .block-lg { max-width: 768px; } .block-center { padding: 10px; } .block-center:hover .block-center-header { background-color: #0045b6; } .block-center-title { background-color: #fff; } @media (max-width: 1599.98px) { .block-center { padding: 20px; } .block-center:hover .block-center-header { background-color: #fff; } .block-center-header { background-color: #0045b6; } } /*
*
* Boxes
*/ .box-minimal { display: flex; margin-left: -15px; text-align: left; } .box-minimal > * { margin-left: 15px; } .box-chloe__icon { font-size: 26px; } .box-minimal-icon .box-chloe__icon { position: relative; top: 4px; min-width: 26px; font-size: 24px; line-height: 1; color: #0045b6; } .box-minimal-icon .box-chloe__icon.fl-bigmug-line-checkmark14 { font-size: 20px; } .box-minimal-icon .box-chloe__icon .box-chloe__icon { position: relative; top: 4px; min-width: 26px; font-size: 24px; line-height: 1; } .box-minimal-text { width: 100%; max-width: 320px; margin-left: auto; margin-right: auto; } * + .box-minimal { margin-top: 30px; } * + .box-minimal-title { margin-top: 10px; } * + .box-minimal-text { margin-top: 15px; } @media (max-width: 575.98px) { .box-minimal { max-width: 360px; margin-left: auto; margin-right: auto; } } @media (max-width: 767.98px) { .box-minimal * + p { margin-top: 7px; } } @media (min-width: 768px) { .box-minimal { padding-right: 15px; margin-left: -30px; } .box-minimal > * { margin-left: 30px; } } @media (min-width: 992px) and (max-width: 1199.98px) { .box-minimal { padding-right: 0; } .box-minimal-title { font-size: 22px; } } @media (min-width: 1200px) { .box-minimal-icon, .box-chloe__icon { top: 0; font-size: 36px; } .box-minimal-icon .box-chloe__icon, .box-chloe__icon .box-chloe__icon { font-size: 32px; top: 0; } .box-minimal-icon.fl-bigmug-line-checkmark14, .box-chloe__icon.fl-bigmug-line-checkmark14 { font-size: 30px; } } .box-light { text-align: left; } .box-light-icon { font-size: 30px; line-height: 1; color: #0045b6; } * + .box-light-title { margin-top: 10px; } @media (max-width: 575.98px) { .box-light { max-width: 300px; margin-left: auto; margin-right: auto; } } @media (min-width: 768px) { .box-light { max-width: 240px; } .box-chloe__icon { font-size: 32px; } * + .box-light-title { margin-top: 16px; } } @media (min-width: 768px) and (max-width: 1199.98px) { .box-light-title { font-size: 20px; } } @media (min-width: 992px) { .box-light-icon { font-size: 32px; } * + .box-light-title { margin-top: 25px; } } @media (min-width: 1200px) { .box-light-icon { font-size: 40px; } } .box-creative { max-width: 330px; margin-left: auto; margin-right: auto; text-align: center; cursor: default; } .box-creative:hover .box-creative-icon { color: #fff; } .box-creative:hover .box-creative-icon::after { opacity: 1; visibility: visible; transform: translate3d(0, 0, 0); } .box-creative-shadow .box-creative-icon { background: #fff; border: 0; box-shadow: 0 17px 24px 0 rgba(0, 0, 0, 0.05); } .box-creative-icon { position: relative; z-index: 0; display: inline-flex; align-items: center; justify-content: center; width: 2.8em; height: 2.8em; border: 2px solid #e8e9ee; border-radius: 50%; font-size: 24px; line-height: 1; color: #0045b6; } .box-creative-icon::before { position: relative; z-index: 2; } .box-creative-icon::after { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: -1; border-radius: inherit; background: #0045b6; border-color: #0045b6; pointer-events: none; opacity: 0; visibility: hidden; transition: .15s ease-in; transform: scale3d(1.05, 1.05, 1.05); } * + .box-creative-icon { margin-top: 10px; } * + .box-creative-title { margin-top: 10px; } @media (min-width: 768px) { .box-creative-icon { font-size: 30px; } * + .box-creative-title { margin-top: 15px; } } @media (max-width: 991.98px) { .box-creative * + p { margin-top: 10px; } } @media (min-width: 1200px) { .box-creative-icon { width: 2.4em; height: 2.4em; font-size: 40px; } * + .box-creative-title { margin-top: 24px; } } .box-1 { max-width: 280px; margin-left: auto; margin-right: auto; } @media (min-width: 768px) { .box-2 { padding-right: 30px; } } @media (min-width: 992px) { .box-2 { padding-right: 35px; } } @media (min-width: 1200px) { .box-2 { padding-right: 100px; } } @media (min-width: 992px) { .box-3 { padding-left: 10px; } } @media (min-width: 1200px) { .box-3 { padding-left: 70px; } } div.box-cta-1 { display: inline-table; text-align: center; vertical-align: middle; margin-bottom: -25px; margin-left: -40px; } div.box-cta-1:empty { margin-bottom: 0; margin-left: 0; } div.box-cta-1 > * { display: inline-block; margin: 0 0 25px 40px; } div.box-cta-1 > * { margin-top: 0; vertical-align: middle; } div.box-cta-thin { display: inline-table; text-align: center; vertical-align: middle; margin-bottom: -25px; margin-left: -30px; } div.box-cta-thin:empty { margin-bottom: 0; margin-left: 0; } div.box-cta-thin > * { display: inline-block; margin: 0 0 25px 30px; } div.box-cta-thin > * { margin-top: 0; vertical-align: middle; } @media (min-width: 768px) and (max-width: 991.98px) { div.box-cta-thin > * { max-width: 500px; } } .box-indigo { positionLine truncated
* Element groups
*/ html .group { margin-bottom: -15px; margin-left: -20px; } html .group:empty { margin-bottom: 0; margin-left: 0; } html .group > * { display: inline-block; margin: 0 0 15px 20px; } @media (min-width: 992px) { html .group { margin-left: -30px; } html .group > * { margin-left: 30px; } } html .group-xs { margin-bottom: -7px; margin-left: -7px; } html .group-xs:empty { margin-bottom: 0; margin-left: 0; } html .group-xs > * { display: inline-block; margin: 0 0 7px 7px; } html .group-sm { margin-bottom: -10px; margin-left: -10px; } html .group-sm:empty { margin-bottom: 0; margin-left: 0; } html .group-sm > * { display: inline-block; margin: 0 0 10px 10px; } html .group-lg { margin-bottom: -25px; margin-left: -40px; } html .group-lg:empty { margin-bottom: 0; margin-left: 0; } html .group-lg > * { display: inline-block; margin: 0 0 25px 40px; } html .group-xl { margin-bottom: -20px; margin-left: -30px; } html .group-xl:empty { margin-bottom: 0; margin-left: 0; } html .group-xl > * { display: inline-block; margin: 0 0 20px 30px; } @media (min-width: 992px) { html .group-xl { margin-bottom: -20px; margin-left: -45px; } html .group-xl > * { margin-bottom: 20px; margin-left: 45px; } } html .group-sm-justify .button { padding-left: 20px; padding-right: 20px; } @media (min-width: 768px) { html .group-sm-justify { display: flex; align-items: center; justify-content: center; } html .group-sm-justify > * { flex-grow: 1; flex-shrink: 0; } html .group-sm-justify .button { min-width: 130px; padding-left: 20px; padding-right: 20px; } } html .group-middle { display: table; vertical-align: middle; } html .group-middle > * { vertical-align: middle; } * + .group { margin-top: 30px; } * + .group-xs { margin-top: 35px; } * + .group-sm { margin-top: 30px; } * + .group-xl { margin-top: 20px; } /*
*
* Responsive units
*/ .unit { display: flex; flex: 0 1 100%; margin-bottom: -30px; margin-left: -20px; } .unit > * { margin-bottom: 30px; margin-left: 20px; } .unit:empty { margin-bottom: 0; margin-left: 0; } .unit-body { flex: 0 1 auto; } .unit-left, .unit-right { flex: 0 0 auto; max-width: 100%; } .unit-spacing-xs { margin-bottom: -15px; margin-left: -7px; } .unit-spacing-xs > * { margin-bottom: 15px; margin-left: 7px; } /*
*
* Lists
*/ .list > li + li { margin-top: 10px; } .list-xs > li + li { margin-top: 8px; } .list-sm > li + li { margin-top: 15px; } .list-md > li + li { margin-top: 18px; } .list-lg > li + li { margin-top: 25px; } .list-xl li + li { margin-top: 30px; } @media (min-width: 1200px) { .list-xl * + p { margin-top: 18px; } } @media (min-width: 1600px) { .list-xl * + p { margin-top: 24px; } } @media (min-width: 768px) { .list-xl > li + li { margin-top: 60px; } } @media (min-width: 1600px) { .list-xl > li + li { margin-top: 78px; } } .list-inline > li { display: inline-block; } html .list-inline-md { transform: translate3d(0, -8px, 0); margin-bottom: -8px; margin-left: -10px; margin-right: -10px; } html .list-inline-md > * { margin-top: 8px; padding-left: 10px; padding-right: 10px; } @media (min-width: 992px) { html .list-inline-md { margin-left: -14px; margin-right: -14px; } html .list-inline-md > * { padding-left: 14px; padding-right: 14px; } } .list-terms dt { font-size: 20px; line-height: 1.3; font-weight: 700; letter-spacing: 0; color: #495057; } .list-terms dt + dd { margin-top: 8px; } .list-terms dd + dt { margin-top: 25px; } * + .list-terms { margin-top: 25px; } .list-terms + .privacy-link { margin-top: 20px; } @media (min-width: 768px) { .list-terms dt { font-size: 24px; } .list-terms dd + dt { margin-top: 40px; } } @media (min-width: 992px) { .list-terms dt + dd { margin-top: 18px; } .list-terms dd + dt { margin-top: 55px; } } @media (min-width: 1200px) { .list-terms dt { max-width: 85%; } } @media (min-width: 1600px) { .list-terms dd + dt { margin-top: 75px; } .list-terms + .privacy-link { margin-top: 75px; } } .index-list { counter-reset: li; } .index-list > li .list-index-counter:before { content: counter(li, decimal-leading-zero); counter-increment: li; } .list-marked { text-align: left; } .list-marked > li::before { position: relative; top: 1px; display: inline-block; min-width: 25px; content: '\f14f'; font: 400 14px 'Material Design Icons'; line-height: inherit; color: #aeb1be; } .list-marked > li + li { margin-top: 9px; } * + .list-marked { margin-top: 15px; } .list-ordered { counter-reset: li; text-align: left; } .list-ordered > li { position: relative; padding-left: 25px; } .list-ordered > li:before { content: counter(li, decimal) "."; counter-increment: li; position: absolute; top: 0; left: 0; display: inline-block; width: 15px; color: #aeb1be; } .list-ordered > li + li { margin-top: 9px; } * + .list-ordered { margin-top: 15px; } .list-nav { transform: translate3d(0, -10px, 0); margin-bottom: -10px; margin-left: -10px; margin-right: -10px; font-family: "Poppins", sans-serif; font-weight: 400; font-size: .875em; letter-spacing: .08em; text-transform: uppercase; color: #495057; } .list-nav > * { margin-top: 10px; padding-left: 10px; padding-right: 10px; } .list-nav li { display: inline-block; vertical-align: middle; } .list-nav a { color: inherit; } .list-nav a:hover { color: #0045b6; } @media (min-width: 768px) { .list-nav { margin-left: -13px; margin-right: -13px; } .list-nav > * { padding-left: 13px; padding-right: 13px; } } @media (min-width: 992px) { .list-nav { margin-left: -28px; margin-right: -28px; } .list-nav > * { padding-left: 28px; padding-right: 28px; } } .context-dark .list-nav, .bg-gray-700 .list-nav, .bg-gray-800 .list-nav, .bg-primary .list-nav, .bg-primary-darker .list-nav { color: #fff; } .context-dark .list-nav a:hover, .bg-gray-700 .list-nav a:hover, .bg-gray-800 .list-nav a:hover, .bg-primary .list-nav a:hover, .bg-primary-darker .list-nav a:hover { color: #aeb1be; } .list-inline-bordered { margin-left: -18px; margin-right: -18px; color: #495057; } .list-inline-bordered > * { padding-left: 18px; padding-right: 18px; } .list-inline-bordered * { color: inherit; } .list-inline-bordered > li > button { background: none; border: none; display: inline-block; padding: 0; outline: none; outline-offset: 0; cursor: pointer; -webkit-appearance: none; transition: .22s; } .list-inline-bordered > li > button::-moz-focus-inner { border: none; padding: 0; } .list-inline-bordered > li { display: inline-block; line-height: 24px; } .list-inline-bordered > li:not(:last-child) { border-right: 1px solid #74757f; } .context-dark .list-inline-bordered, .bg-gray-700 .list-inline-bordered, .bg-gray-800 .list-inline-bordered, .bg-primary .list-inline-bordered, .bg-primary-darker .list-inline-bordered { color: #fff; } .context-dark .list-inline-bordered button.active, .bg-gray-700 .list-inline-bordered button.active, .bg-gray-800 .list-inline-bordered button.active, .bg-primary .list-inline-bordered button.active, .bg-primary-darker .list-inline-bordered button.active, .context-dark .list-inline-bordered button:hover, .bg-gray-700 .list-inline-bordered button:hover, .bg-gray-800 .list-inline-bLine truncated
*
* Images
*/ img { display: inline-block; max-width: 100%; height: auto; } .img-responsive { width: 100%; } /*
*
* Icons
*/ .icon { display: inline-block; font-size: 16px; line-height: 1; } .icon::before { position: relative; display: inline-block; font-weight: 400; font-style: normal; speak: none; text-transform: none; } .icon-creative { display: inline-block; text-align: center; width: 2em; height: 2em; line-height: 2em; border-radius: 50%; } .icon-creative, .icon-creative:active, .icon-creative:focus { color: #aeb1be; } .icon-creative::after { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: -1; border-radius: inherit; pointer-events: none; opacity: 0; transform: scale3d(0, 0, 0); transition: .22s; } .icon-creative:hover { color: #fff; } .icon-creative:hover::after { opacity: 1; transform: scale3d(1, 1, 1); } .icon-creative[class*='facebook']::after { background: #2059a0; } .icon-creative[class*='twitter']::after { background: #00aae6; } .icon-creative[class*='instagram']::after { background: linear-gradient(to top, #f15823 0%, #a7058e 100%); } .icon-creative[class*='google']::after { background: #ff3807; } .icon-creative[class*='linkedin']::after { background: #2881a8; } .icon-modern { width: 2em; height: 2em; line-height: 2em; text-align: center; border-radius: 50%; border: 1px solid #e8e9ee; color: #151515; } .icon-circle { border-radius: 50%; } .icon-sm { font-size: 20px; } .icon-md { font-size: 1.5em; } .icon-lg { font-size: 1.875em; } /*
*
* Tables custom
*/ .table { width: 100%; max-width: 100%; text-align: left; background: #fff; border-collapse: collapse; } .table th, .table td { color: #495057; vertical-align: middle; } .table th { padding: 13px 24px; border-top: 0; font-size: 16px; font-weight: 300; } .table thead th { border-bottom: 1px solid #aeb1be; } .table td { padding: 23px 24px; } .table tbody tr:first-child td { border-top: 0; } .table tr td { border-bottom: 1px solid #e8e9ee; } .table tfoot td { font-weight: 700; } * + .table-responsive { margin-top: 30px; } @media (min-width: 768px) { * + .table-responsive { margin-top: 40px; } } .table-hover tbody tr { transition: .55s; } .table-hover tbody tr:hover { background: #f5f6fa; } .table-job-positions th, .table-job-positions td { white-space: nowrap; } .table-job-positions td:first-child { width: 8%; padding-right: 6px; text-align: center; } .table-job-positions .position { color: #0045b6; } .table-job-positions time { display: block; white-space: nowrap; } @media (max-width: 575.98px) { .table-job-positions th, .table-job-positions td { padding-left: 12px; padding-right: 12px; } .table-job-positions td { padding-top: 10px; padding-bottom: 10px; } } .table-responsive + .button-lg { margin-top: 30px; } @media (min-width: 1200px) { .table-responsive + .button-lg { margin-top: 40px; } } @media (min-width: 1600px) { .table-responsive + .button-lg { margin-top: 55px; } } /*
*
* Dividers
*/ hr { margin-top: 0; margin-bottom: 0; border-top: 1px solid #e8e9ee; } .context-dark hr, .bg-gray-700 hr, .bg-gray-800 hr, .bg-primary hr, .bg-primary-darker hr { border-top-color: #74757f; } .divider-small { font-size: 0; line-height: 0; } .divider-small::after { content: ''; display: inline-block; width: 70px; height: 2px; background-color: #0045b6; } .divider-small + h3, .divider-small + .heading-3, .divider-small-outer + h3, .divider-small-outer + .heading-3 { margin-top: 20px; } /*
*
* Buttons
*/ .button { position: relative; overflow: hidden; display: inline-block; padding: 13px 35px; font-size: 14px; line-height: 1.25; border: 2px solid; border-radius: 6px; font-family: "Poppins", sans-serif; font-weight: 500; letter-spacing: 0.1em; text-transform: uppercase; white-space: nowrap; text-overflow: ellipsis; text-align: center; cursor: pointer; vertical-align: middle; user-select: none; transition: 0.25s cubic-bezier(0.2, 1, 0.3, 1); } .form-btn { display: block; width: 100%; height: 100%; } .button-block { display: block; width: 100%; } .button-default, .button-default:focus { color: #aeb1be; background-color: #495057; border-color: #495057; } .button-default:hover, .button-default:active { color: #fff; background-color: #0045b6; border-color: #0045b6; } .button.button-primary, .button.button-primary:focus { color: #fff; background-color: #0045b6; border-color: #0045b6; } .button.button-primary:hover, .button.button-primary:active { color: #fff; background-color: #232426; border-color: #232426; } html .button.button-primary-lighten, html .button.button-primary-lighten:focus { color: #fff; background-color: #0045b6; border-color: #0045b6; } html .button.button-primary-lighten:hover, html .button.button-primary-lighten:active { color: #fff; background-color: #232426; border-color: #232426; } .button-accent-outline, .button-accent-outline:focus { color: #151515; background-color: transparent; border-color: #0045b6; } .button-accent-outline:hover, .button-accent-outline:active { color: #fff; background-color: #0045b6; border-color: #0045b6; } .button-primary-outline, .button-primary-outline:focus { color: #151515; background-color: transparent; border-color: #151515; } .button-primary-outline:hover, .button-primary-outline:active { color: #fff; background-color: #0045b6; border-color: #0045b6; } .button-gray-bordered { border-width: 1px; } .button-gray-bordered, .button-gray-bordered:focus { color: #151515; background-color: transparent; border-color: #aeb1be; } .button-gray-bordered:hover, .button-gray-bordered:active { color: #fff; background-color: #0045b6; border-color: #0045b6; } .button-primary-white, .button-primary-white:focus { color: #111111; background-color: #fff; border-color: transparent; } .button-primary-white:hover, .button-primary-white:active { color: #fff; background-color: #0045b6; border-color: #0045b6; } .button.button-facebook, .button.button-facebook:focus { color: #fff; background-color: #2059a0; border-color: #2059a0; } .button.button-facebook:hover, .button.button-facebook:active { color: #fff; background-color: #2465b5; border-color: #2465b5; } .button.button-twitter, .button.button-twitter:focus { color: #fff; background-color: #00aae6; border-color: #00aae6; } .button.button-twitter:hover, .button.button-twitter:active { color: #fff; background-color: #01bdff; border-color: #01bdff; } .button.button-google, .button.button-google:focus { color: #fff; background-color: #ff3807; border-color: #ff3807; } .button.button-google:hover, .button.button-google:active { color: #fff; background-color: #ff4c21; border-color: #ff4c21; } .button-winona { position: relative; overflow: hidden; display: inline-block; vertical-align: middle; text-align: center; } .button-winona .content-original, .button-winona .content-dubbed { vertical-align: middle; transition: transform 0.3s cubic-bezier(0.2, 1, 0.3, 1), opacity 0.3s cubic-bezier(0.2, 1, 0.3, 1); } .button-winona .content-original { display: block; } .button-winona .content-dubbed { position: absolute; width: 100%; top: 50%; left: 0; opacity: 0; transform: translate3d(0, 0, 0); } .button-winona:hover .content-original { opacity: 0; transform: translate3d(0, -30%, 0); } .button-winona:hover .content-dubbed { opacity: 1; transform: translate3d(0, 0, 0) translateY(-50%); } .button-sm { padding: 9px 32px; font-size: 12px; line-height: 1.5; } .button-lg { padding: 14px 35px; font-size: 15px; line-height: 1.5; } @media (min-width: 576px) { .button-lg { font-size: 16px; padding-left: 55px; padding-right: 55px; } } .button-lg--smaller { padding-left: 35px; padding-right: 35px; } html .button.button-icon { display: inline-flex; } .button-icon { justify-content: center; align-items: center; vertical-align: middle; } .button-icon .icon { position: relative; top: -1px; display: inline-block; vertical-align: middle; color: inherit; font-size: 1.55em; line-height: 1em; transition: none; } .button-icon:hover .icon { color: inherit; } .button-icon-left .icon { padding-right: 5px; } .button-icon-right { flex-direction: row-reverse; } .button-icon-right .icon { padding-left: 8px; } .button-icon.button-icon-only { padding-left: 20px; padding-right: 20px; } .button-icon.button-lg .icon { padding-right: 8px; } .button-icon.button-lg.button-icon-right .icon { padding: 0 0 0 8pxLine truncated
*
* Form styles
*/ .rd-form { position: relative; text-align: left; } .rd-form .button { min-height: 48px; } .rd-form .button-icon-only { padding-top: 11px; padding-bottom: 11px; } * + .rd-form { margin-top: 20px; } input:-webkit-autofill ~ label, input:-webkit-autofill ~ .form-validation { color: #000 !important; } .form-wrap { position: relative; } .form-wrap.has-error .form-input { border-color: #dc0000; } .form-wrap.has-focus .form-input { border-color: #0045b6; } * + .form-wrap { margin-top: 24px; } .form-input { display: block; width: 100%; min-height: 48px; padding: 11px 19px; font-size: 16px; font-weight: 400; line-height: 1.5; color: #495057; background-color: #fff; background-image: none; border-radius: 6px; -webkit-appearance: none; transition: .3s ease-in-out; font-family: "Work Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; border: 1px solid #c5c6cd; } .form-input:focus { outline: 0; } textarea.form-input { height: 150px; min-height: 48px; max-height: 255px; resize: vertical; } .form-label, .form-label-outside { margin-bottom: 0; font-weight: 300; } .form-label { position: absolute; top: 24px; left: 0; right: 0; padding-left: 19px; padding-right: 19px; font-size: 16px; font-weight: 400; line-height: 1.5; color: #495057; pointer-events: none; text-align: left; z-index: 9; transition: .25s; will-change: transform; transform: translateY(-50%); } .form-label.focus { opacity: 0; } .form-label.auto-fill { color: #495057; } .form-label-outside { width: 100%; padding-right: 150px; margin-bottom: 4px; font-size: 14px; color: #aeb1be; cursor: pointer; } .form-label-outside ~ .form-validation { top: 10px; } [data-x-mode='true'] .form-label { pointer-events: auto; } .form-validation { position: absolute; right: 15px; top: 0; z-index: 11; margin-top: 3px; font-size: 10px; font-weight: 500; line-height: 12px; letter-spacing: 0; color: #dc0000; transition: .3s; transform: scale3d(1, 1, 1); } .form-validation:empty { transform: scale3d(1, 0, 1); } .form-validation-left .form-validation { top: 2px; bottom: auto; right: auto; left: 14px; } #form-output-global { position: fixed; bottom: 30px; left: 15px; z-index: 2000; visibility: hidden; transform: translate3d(-500px, 0, 0); transition: .3s all ease; } #form-output-global.active { visibility: visible; transform: translate3d(0, 0, 0); } @media (min-width: 576px) { #form-output-global { left: 30px; } } .form-output { position: absolute; top: 100%; left: 0; font-size: 10px; font-weight: 400; line-height: 1.2; margin-top: 2px; transition: .3s; opacity: 0; visibility: hidden; } .form-output.active { opacity: 1; visibility: visible; } .form-output.error { color: #dc0000; } .form-output.success { color: #98bf44; } .radio .radio-custom, .radio-inline .radio-custom, .checkbox .checkbox-custom, .checkbox-inline .checkbox-custom { opacity: 0; } .radio .radio-custom, .radio .radio-custom-dummy, .radio-inline .radio-custom, .radio-inline .radio-custom-dummy, .checkbox .checkbox-custom, .checkbox .checkbox-custom-dummy, .checkbox-inline .checkbox-custom, .checkbox-inline .checkbox-custom-dummy { position: absolute; left: 0; width: 14px; height: 14px; outline: none; cursor: pointer; } .radio .radio-custom-dummy, .radio-inline .radio-custom-dummy, .checkbox .checkbox-custom-dummy, .checkbox-inline .checkbox-custom-dummy { pointer-events: none; background: #fff; } .radio .radio-custom-dummy::after, .radio-inline .radio-custom-dummy::after, .checkbox .checkbox-custom-dummy::after, .checkbox-inline .checkbox-custom-dummy::after { position: absolute; opacity: 0; transition: .22s; } .radio .radio-custom:focus, .radio-inline .radio-custom:focus, .checkbox .checkbox-custom:focus, .checkbox-inline .checkbox-custom:focus { outline: none; } .radio input, .radio-inline input, .checkbox input, .checkbox-inline input { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; clip-path: inset(50%); border: 0; } .radio-custom:checked + .radio-custom-dummy:after, .checkbox-custom:checked + .checkbox-custom-dummy:after { opacity: 1; } .radio, .radio-inline { padding-left: 28px; } .radio .radio-custom-dummy, .radio-inline .radio-custom-dummy { top: 1px; left: 0; width: 18px; height: 18px; border-radius: 50%; border: 1px solid #74757f; } .radio .radio-custom-dummy::after, .radio-inline .radio-custom-dummy::after { content: ''; top: 3px; right: 3px; bottom: 3px; left: 3px; background: #495057; border-radius: inherit; } .checkbox, .checkbox-inline { padding-left: 28px; } .checkbox .checkbox-custom-dummy, .checkbox-inline .checkbox-custom-dummy { left: 0; width: 18px; height: 18px; margin: 0; border: 1px solid #74757f; } .checkbox .checkbox-custom-dummy::after, .checkbox-inline .checkbox-custom-dummy::after { contentLine truncated
*
* Posts
*/ .post-inline { max-width: 313px; } .post-inline-title a { color: inherit; } .post-inline-meta { transform: translate3d(0, -5px, 0); margin-bottom: -5px; margin-left: -10px; margin-right: -10px; color: rgba(255, 255, 255, 0.3); } .post-inline-meta > * { margin-top: 5px; padding-left: 10px; padding-right: 10px; } .post-inline-meta > li { position: relative; display: inline-block; } .post-inline-meta > li:not(:last-child)::after { content: ''; position: absolute; right: 0; top: 50%; width: 1px; height: 1px; border-radius: 50%; background: #495057; } .post-inline-meta a { color: inherit; } * + .post-inline { margin-top: 15px; } * + .post-inline-meta { margin-top: 5px; } @media (min-width: 768px) { * + .post-inline { margin-top: 22px; } } .context-dark .post-inline-title, .bg-gray-700 .post-inline-title, .bg-gray-800 .post-inline-title, .bg-primary .post-inline-title, .bg-primary-darker .post-inline-title { color: #fff; } .context-dark .post-inline-title a:hover, .bg-gray-700 .post-inline-title a:hover, .bg-gray-800 .post-inline-title a:hover, .bg-primary .post-inline-title a:hover, .bg-primary-darker .post-inline-title a:hover { color: #aeb1be; } .context-dark .post-inline-meta > li:not(:last-child)::after, .bg-gray-700 .post-inline-meta > li:not(:last-child)::after, .bg-gray-800 .post-inline-meta > li:not(:last-child)::after, .bg-primary .post-inline-meta > li:not(:last-child)::after, .bg-primary-darker .post-inline-meta > li:not(:last-child)::after { background: #aeb1be; } .context-dark .post-inline-meta a:hover, .bg-gray-700 .post-inline-meta a:hover, .bg-gray-800 .post-inline-meta a:hover, .bg-primary .post-inline-meta a:hover, .bg-primary-darker .post-inline-meta a:hover { color: #fff; } .post-classic { text-align: left; } .post-classic-media { position: relative; display: block; } .post-classic-media::before { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; background: rgba(73, 80, 87, 0.4); transition: .4s ease-in-out; opacity: 0; visibility: hidden; pointer-events: none; } .post-classic-media img { width: 100%; } .post-classic-media:hover::before { opacity: 1; visibility: visible; } .post-classic-meta { transform: translate3d(0, -3px, 0); margin-bottom: -3px; margin-left: -14px; margin-right: -14px; color: #aeb1be; } .post-classic-meta > * { margin-top: 3px; padding-left: 14px; padding-right: 14px; } .post-classic-meta > li { position: relative; display: inline-block; } .post-classic-meta > li:not(:last-child)::after { content: ''; position: absolute; right: 0; top: 50%; width: 2px; height: 2px; background: #aeb1be; transform: translate3d(0, -50%, 0); } .post-classic-meta a:hover { color: #343db0; } * + .post-classic-meta { margin-top: 15px; } * + .post-classic-title { margin-top: 9px; } @media (max-width: 575.98px) { .post-classic { max-width: 360px; margin-left: auto; margin-right: auto; } } @media (min-width: 576px) and (max-width: 767.98px) { .post-classic-title { font-size: 17px; } } @media (min-width: 768px) { .post-classic-meta { transform: translate3d(0, -5px, 0); margin-bottom: -5px; margin-left: -20px; margin-right: -20px; } .post-classic-meta > * { margin-top: 5px; padding-left: 20px; padding-right: 20px; } * + .post-classic-meta { margin-top: 25px; } } @media (min-width: 992px) and (max-width: 1199.98px) { .post-classic-meta { margin-left: -15px; margin-right: -15px; font-size: 14px; } .post-classic-meta > * { padding-left: 15px; padding-right: 15px; } } .post-modern { text-align: left; } .post-modern-title { color: #151515; font-weight: 400; } .post-modern-title a:hover { color: #0045b6; } .post-modern-media { position: relative; display: block; } .post-modern-media::before { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; background: rgba(73, 80, 87, 0.4); transition: .22s ease-in-out; opacity: 0; visibility: hidden; pointer-events: none; } .post-modern-media img { width: 100%; } .post-modern-media:hover::before { opacity: 1; visibility: visible; } .post-modern-meta { transform: translate3d(0, -5px, 0); margin-bottom: -5px; margin-left: -15px; margin-right: -15px; color: #495057; font-weight: 500; } .post-modern-meta > * { margin-top: 5px; padding-left: 15px; padding-right: 15px; } .post-modern-meta > li { position: relative; display: inline-block; line-height: 24px; font-size: 18px; } .post-modern-meta > li:not(:last-child)::after { content: ''; position: absolute; right: 0; top: 50%; width: 1px; height: 1.5em; background: #e8e9ee; transform: translate3d(0, -50%, 0); } .post-modern-meta a:hover { color: #343db0; } .post-modern-meta + p { color: #151515; } * + .post-modern-title { margin-top: 9px; } * + .post-modern-meta { margin-top: 10px; } @media (max-width: 575.98px) { .post-modern { max-width: 430px; margin-left: auto; marginLine truncated
*
* Quotes
*/ .quote-light-mark { fill: #aeb1be; } .quote-light-cite { font-size: 20px; color: #0045b6; } .quote-light-caption { line-height: 1.2; } .quote-light-text { font-size: 16px; line-height: 1.5; letter-spacing: 0; color: #495057; } html img.quote-light-image { display: inline-block; } * + .quote-light { margin-top: 30px; } * + .quote-light-caption { margin-top: 3px; } * + .quote-light-mark { margin-top: 15px; } * + .quote-light-text { margin-top: 8px; } * + .quote-light-footer { margin-top: 20px; } @media (min-width: 576px) { .quote-light-cite { font-size: 20px; } } @media (min-width: 768px) { .quote-light-cite { font-size: 24px; } .quote-light-text { font-size: 21px; line-height: 1.45; } * + .quote-light { margin-top: 40px; } * + .quote-light-mark { margin-top: 35px; } * + .quote-light-text { margin-top: 15px; } * + .quote-light-footer { margin-top: 30px; } } @media (min-width: 1600px) { .quote-light-text { font-size: 24px; line-height: 1.33333; } * + .quote-light { margin-top: 50px; } * + .quote-light-mark { margin-top: 50px; } * + .quote-light-footer { margin-top: 45px; } } .quote-classic { text-align: left; } .quote-classic-meta { display: flex; align-items: center; flex-wrap: wrap; margin-bottom: -20px; margin-left: -20px; } .quote-classic-meta:empty { margin-bottom: 0; margin-left: 0; } .quote-classic-meta > * { display: inline-block; margin: 0 0 20px 20px; } .quote-classic-avatar { position: relative; overflow: hidden; width: 50px; height: 50px; border-radius: 50%; flex-shrink: 0; } .quote-classic-avatar img { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); min-height: 100%; min-width: 100%; width: auto; height: auto; max-width: none; } @supports (object-fit: cover) { .quote-classic-avatar img { left: 0; top: 0; width: 100%; height: 100%; transform: none; object-fit: cover; object-position: center center; } } .quote-classic-cite { font-size: 24px; line-height: 1.2; color: #151515; font-family: "Poppins", sans-serif; } .quote-classic-caption { color: #151515; } * + .quote-classic-text { margin-top: 25px; } * + .quote-classic-caption { margin-top: 0; } @media (max-width: 575.98px) { .quote-classic { margin-left: auto; margin-right: auto; } } .quote-modern { text-align: left; } .quote-modern-meta { display: flex; align-items: center; flex-wrap: wrap; margin-bottom: -20px; margin-left: -20px; } .quote-modern-meta:empty { margin-bottom: 0; margin-left: 0; } .quote-modern-meta > * { display: inline-block; margin: 0 0 20px 20px; } .quote-modern-avatar { position: relative; overflow: hidden; z-index: 2; width: 50px; height: 50px; border-radius: 50%; flex-shrink: 0; } .quote-modern-avatar img { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); min-height: 100%; min-width: 100%; width: auto; height: auto; max-width: none; } @supports (object-fit: cover) { .quote-modern-avatar img { left: 0; top: 0; width: 100%; height: 100%; transform: none; object-fit: cover; object-position: center center; } } .quote-modern-cite { font-size: 20px; line-height: 1.2; color: #0045b6; } .quote-modern-caption { color: #aeb1be; } .quote-modern-mark { fill: #aeb1be; } * + .quote-modern-meta { margin-top: 25px; } * + .quote-modern-caption { margin-top: 0; } * + .quote-modern-text { margin-top: 10px; } .quote-modern-big .quote-modern-text { font-size: 18px; line-height: 1.5; color: #495057; } @media (min-width: 992px) { .quote-modern-big .quote-modern-text { font-size: 20px; } } @media (min-width: 1200px) { .quote-modern-big .quote-modern-text { font-size: 24px; line-height: 1.33333; } .quote-modern-big * + .quote-modern-text { margin-top: 20px; } } /*
*
* Thumbnails
*/ .video-overlay { position: absolute; top: 0; right: 0; bottom: 0; left: 0; background-position: center center; background-size: cover; cursor: pointer; } .figure-light figcaption { padding-top: 15px; color: #74757f; } * + .figure-light { margin-top: 20px; } @media (min-width: 1200px) { * + .figure-light { margin-top: 40px; } } .figure-card { position: relative; overflow: hidden; display: flex; } .figure-card .figure-card-sizer { display: block; width: 100%; } .figure-card .figure-card-sizer::before { display: block; content: ''; visibility: hidden; padding-bottom: 56.25%; } .figure-card img { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); min-height: 100%; min-width: 100%; width: auto; height: auto; max-width: none; } @supports (object-fit: cover) { .figure-card img { height: 100%; width: 100%; left: 0; top: 0; transform: none; object-fit: cover; object-position: center center; } } .thumbnail-video-1 { position: relative; text-align: center; } .thumbnail-video-1 .embed-responsive::before { min-height: 250px; } .thumbnail-video-1 .video-overlay { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 20px; z-index: 1; background-position: 80% center; } .thumbnail-video-1 .video-overlay::after { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; background: rgba(0, 0, 0, 0.4); z-index: -1; } .thumbnail-video-1 * + .button-video { margin-top: 25px; } .thumbnail-minimal { position: relative; overflow: hidden; display: block; } .thumbnail-minimal::before { content: ''; display: block; padding-bottom: 100%; } .thumbnail-minimal-image { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); min-height: 100%; min-width: 100%; width: auto; height: auto; max-width: none; } @supports (object-fit: cover) { .thumbnail-minimal-image { left: 0; top: 0; width: 100%; height: 100%; transform: none; object-fit: cover; object-position: center center; } } .thumbnail-minimal-caption { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 1; background: rgba(0, 69, 182, 0.6); display: flex; align-items: center; justify-content: center; opacity: 0; visibility: hidden; transition: all 0.3s ease-in-out; } .thumbnail-minimal-caption::before { content: '\f504'; font-family: 'Material Design Icons'; font-size: 30px; line-height: 1; color: #fff; } .thumbnail-minimal:hover .thumbnail-minimal-caption { opacity: 1; visibility: visible; } .thumbnail-classic { position: relative; overflow: hidden; display: flex; text-align: left; } .thumbnail-classic * { color: inherit; } .thumbnail-classic, .thumbnail-classic:active, .thumbnail-classic:focus, .thumbnail-classic:hover { color: #fff; } .thumbnail-classic:hover { color: #fff; } .thumbnail-classic > * { width: 100%; flex-shrink: 0; } .thumbnail-classic-sm .thumbnail-classic-dummy::before { padding-bottom: 69.18919%; } .thumbnail-classic-dummy { width: 100%; } .thumbnail-classic-dummy::before { content: ''; display: block; visibility: hidden; pointer-events: none; padding-bottom: 73.84615%; } .thumbnail-classic-image { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); min-height: 100%; min-width: 100%; width: auto; height: auto; max-width: none; } @supports (object-fit: cover) { .thumbnail-classic-image { left: 0; top: 0; width: 100%; height: 100%; transform: none; object-fit: cover; object-position: center center; } } .thumbnail-classic-caption { position: relative; z-index: 1; display: flex; flex-direction: column; justify-content: flex-end; width: 100%; padding: 20px; background: rgba(73, 80, 87, 0.4); font-size: 14px; } .thumbnail-classic-caption * + p { margin-top: 5px; } .thumbnail-classic-title { font-size: 20px; line-height: 1.3; } @media (max-width: 575.98px) { .thumbnail-classic { max-width: 360px; margin-left: auto; margin-right: auto; } } @media (min-width: 768px) { .thumbnail-classic-caption { padding: 25px 20px; } } @media (min-width: 992px) { .thumbnail-classic-lg .thumbnail-classic-dummy::before { padding-bottom: 147.69231%; } } @media (min-width: 1200px) { .thumbnail-classic-caption { padding: 30px 40px; font-size: 16px; } .thumbnail-classic-caption * + p { margin-top: 8px; } .thumbnail-classic-title { font-size: 24px; } } html:not(.tablet):not(.mobile) .thumbnail-classic-caption { opacity: 0; visibility: hidden; transition: .3s all linear; background: rgba(73, 80, 87, 0.6); } html:not(.tablet):not(.mobile) .thumbnail-classic:hover .thumbnail-classic-caption { opacity: 1; visibility: visible; } html:not(.tablet):not(.mobile) .hoverdir-item .thumbnail-classic-caption { opacity: 1; visibility: visible; transform: translate(-100%, 0); } html:not(.tablet):not(.mobile)[data-x-mode='true'] .Line truncated
*
* Breadcrumbs
*/ .breadcrumbs-custom { position: relative; display: flex; background-color: #495057; background-position: 20% 20%; } .breadcrumbs-custom .breadcrumbs-custom-subtitle { color: #aeb1be; } @media (min-width: 576px) { .breadcrumbs-custom { padding: 60px 0; } } @media (min-width: 1200px) { .breadcrumbs-custom { padding: 0; } } .breadcrumbs-custom-inner { display: flex; min-height: inherit; width: 100%; padding: 50px 0 25px; } .breadcrumbs-custom-container { display: flex; flex-direction: column; justify-content: space-between; } .breadcrumbs-custom-container::before { content: ''; display: block; } .breadcrumbs-custom-path { margin-left: -15px; margin-right: -15px; } .breadcrumbs-custom-path > * { padding-left: 15px; padding-right: 15px; } .breadcrumbs-custom-path li { position: relative; display: inline-block; vertical-align: middle; color: #aeb1be; } .breadcrumbs-custom-path li::after { content: ""; font-family: "FontAwesome"; position: absolute; top: 51%; right: -5px; display: inline-block; font-size: inherit; font-style: normal; color: rgba(255, 255, 255, 0.5); transform: translate3d(0, -50%, 0); } .breadcrumbs-custom-path li:last-child:after { display: none; } .breadcrumbs-custom-path a { display: inline; vertical-align: middle; } .breadcrumbs-custom-path a, .breadcrumbs-custom-path a:active, .breadcrumbs-custom-path a:focus { color: #aeb1be; } .breadcrumbs-custom-path a:hover { color: #fff; } * + .breadcrumbs-custom-path { margin-top: 25px; } .breadcrumbs-custom-subtitle + .breadcrumbs-custom-title { margin-top: 15px; } @media (min-width: 576px) { .breadcrumbs-custom-path { margin-left: -30px; margin-right: -30px; } .breadcrumbs-custom-path > * { padding-left: 30px; padding-right: 30px; } * + .breadcrumbs-custom-path { margin-top: 30px; } } @media (min-width: 768px) { .breadcrumbs-custom { min-height: 23.75vw; } .breadcrumbs-custom-inner { padding: 80px 0 30px; } .breadcrumbs-custom-subtitle + .breadcrumbs-custom-title { margin-top: 5px; } } @media (min-width: 992px) { .breadcrumbs-custom-inner { padding-bottom: 40px; } .breadcrumbs-custom-subtitle + .breadcrumbs-custom-title { margin-top: 10px; } } @media (min-width: 1600px) { .breadcrumbs-custom { min-height: 520px; } .breadcrumbs-custom-inner { padding: 130px 0 40px 0; } .breadcrumbs-custom-subtitle + .breadcrumbs-custom-title { margin-top: 20px; } } /*
*
* Pagination custom
*/ .pagination { font-size: 0; line-height: 0; margin-bottom: -10px; margin-left: -10px; } .pagination:empty { margin-bottom: 0; margin-left: 0; } .pagination > * { display: inline-block; margin: 0 0 10px 10px; } .page-item { display: inline-block; vertical-align: middle; text-align: center; font-weight: 700; } .page-link { display: inline-flex; align-items: center; justify-content: center; min-width: 48px; min-height: 48px; padding: 10px 10px; border: 0; border-radius: 6px; font-family: "Poppins", sans-serif; font-size: 14px; font-weight: 500; line-height: 1.71429; background-color: #0045b6; color: #fff; transition: all 0.3s ease-in-out; } .page-link.button-winona * { line-height: inherit; } .page-link.button-winona .content-dubbed { margin-top: -1px; } .page-link:hover, .page-link:focus, .page-link:active { color: #fff; background-color: #151515; } .page-item.active > .page-link, .page-item.active > .page-link:hover, .page-item.active > .page-link:focus, .page-item.active > .page-link:active { color: #fff; background-color: #151515; } .page-item.disabled > .page-link, .page-item.disabled > .page-link:hover, .page-item.disabled > .page-link:focus, .page-item.disabled > .page-link:active { color: #74757f; background-color: #e8e9ee; } .page-item-control .icon::before { font-family: 'FontAwesome'; font-size: 11px; line-height: 24px; } .page-item-control:first-child .icon::before { content: '\f053'; margin-left: -1px; } .page-item-control:last-child .icon::before { content: '\f054'; margin-right: -1px; } * + .pagination { margin-top: 35px; } @media (min-width: 992px) { * + .pagination { margin-top: 55px; } } @media (min-width: 1600px) { * + .pagination { margin-top: 70px; } } /*
*
* Snackbars
*/ .snackbars { padding: 9px 16px; margin-left: auto; margin-right: auto; color: #fff; text-align: left; background-color: #0045b6; box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); border-radius: 6px; font-size: 14px; } .snackbars .icon-xxs { font-size: 18px; } .snackbars p span:last-child { padding-left: 14px; } .snackbars-left { display: inline-block; margin-bottom: 0; } .snackbars-right { display: inline-block; float: right; text-transform: uppercase; } .snackbars-right:hover { text-decoration: underline; } @media (min-width: 576px) { .snackbars { max-width: 540px; padding: 12px 15px; font-size: 15px; } } /*
*
* Footers
*/ .footer-standard h4 + *, .footer-standard .heading-4 + * { margin-top: 14px; } .footer-standard-main { padding: 35px 0 15px; } .footer-standard-aside { padding: 30px 0; } .footer-standard-aside { margin-bottom: -18px; text-align: center; } .footer-standard-aside > * { margin-bottom: 18px; } .footer-standard-aside > * { margin-top: 0; } @media (max-width: 575.98px) { .footer-standard .box-1 { margin-left: 0; } } @media (min-width: 768px) and (max-width: 991.98px) { .footer-standard .box-1 { margin-left: 0; } } @media (min-width: 768px) { .footer-standard h4 + *, .footer-standard .heading-4 + * { margin-top: 25px; } .footer-standard-main { padding: 55px 0 20px; } .footer-standard-aside { display: flex; align-items: center; flex-wrap: wrap; justify-content: space-between; text-align: center; margin-left: -20px; } .footer-standard-aside > * { margin-left: 20px; } } @media (min-width: 1200px) { .footer-standard-main { padding: 80px 0 50px; } } .footer-minimal { padding: 30px 0; } .footer-minimal-inner { margin-bottom: -18px; text-align: center; } .footer-minimal-inner > * { margin-bottom: 18px; } .footer-minimal-inner > * { margin-top: 0; } .footer-minimal-inner .rights a { padding-bottom: 2px; position: relative; } .footer-minimal-inner .rights a:before { content: ''; position: absolute; left: 0; height: 1px; bottom: 0; width: 0; display: block; transition: all ease .35s; background-color: #fff; } .footer-minimal-inner .rights a:hover { color: #fff; } .footer-minimal-inner .rights a:hover:before { content: ''; width: 100%; transition: all ease .35s; } @media (min-width: 768px) { .footer-minimal-inner { display: flex; align-items: center; flex-wrap: wrap; justify-content: space-between; text-align: center; margin-left: -20px; } .footer-minimal-inner > * { margin-left: 20px; } } .footer-advanced.bg-gray-700 h1, .footer-advanced.bg-gray-700 h2, .footer-advanced.bg-gray-700 h3, .footer-advanced.bg-gray-700 h4, .footer-advanced.bg-gray-700 h5, .footer-advanced.bg-gray-700 h6, .footer-advanced.bg-gray-700 [class^='heading-'] { color: #aeb1be; } .footer-advanced h4 + *, .footer-advanced .heading-4 + * { margin-top: 14px; } .footer-advanced-main { padding: 35px 0 15px; } .footer-advanced-aside { padding: 30px 0; } .footer-advanced-layout { margin-bottom: -18px; text-align: center; } .footer-advanced-layout > * { margin-bottom: 18px; } .footer-advanced-layout > * { margin-top: 0; } @media (min-width: 768px) and (max-width: 991.98px) { .footer-advanced .box-1 { margin-left: 0; } } @media (min-width: 992px) and (max-width: 1199.98px) { .footer-advanced-text { font-size: 14px; line-height: 1.7; } } .footer-advanced-text { color: rgba(255, 255, 255, 0.3); } @media (min-width: 768px) { .footer-advanced-main { padding: 55px 0 20px; } .footer-advanced-aside { padding: 35px 0; } .footer-advanced-layout { display: flex; align-items: center; flex-wrap: wrap; justify-content: space-between; text-align: center; margin-left: -20px; } .footer-advanced-layout > * { margin-left: 20px; } .footer-advanced-aside + .container { margin-top: 10px; } } @media (min-width: 1200px) { .footer-advanced h4 + *, .footer-advanced .heading-4 + * { margin-top: 35px; } .footer-advanced-main { padding: 80px 0 60px; } .footer-advanced-aside + .container { margin-top: 20px; } } .footer-linked.bg-gray-700 h1, .footer-linked.bg-gray-700 h2, .footer-linked.bg-gray-700 h3, .footer-linked.bg-gray-700 h4, .footer-linked.bg-gray-700 h5, .footer-linked.bg-gray-700 h6, .footer-linked.bg-gray-700 [class^='heading-'] { color: #aeb1be; } .footer-linked.bg-gray-700 .list { color: #fff; } .footer-linked.bg-gray-700 .list a:hover { color: rgba(255, 255, 255, 0.6); } .footer-linked h4 + *, .footer-linked .heading-4 + * { margin-top: 14px; } .footer-linked h4 + hr, .footer-linked .heading-4 + hr { margin-top: 15px; } .footer-linked * + .row { margin-top: 25px; } .footer-linked-main { padding: 35px 0 15px; } .footer-linked-aside { padding: 30px 0; } .footer-linked-layout { margin-bottom: -18px; text-align: center; } .footer-linked-layout > * { margin-bottom: 18px; } .footer-linked-layout > * { margin-top: 0; } @media (min-width: 768px) and (max-width: 991.98px) { .footer-linked .box-1 { margin-left: 0; } } @media (min-width: 992px) and (max-width: 1199.98px) { .footer-linked-text { font-size: 14px; line-height: 1.7; } } @media (min-width: 768px) { .footer-linked-main { padding: 65px 0 40px; } .footer-linked-aside { padding: 30px 0; } .footer-linked-layout { display: flex; align-items: center; flex-wrap: wrap; justify-content: space-between; text-align: center; margin-left: -20px; } .footer-linked-layout > * { margin-left: 20px; } .footer-linked-aside + .container { margin-top: 10px; } } @media (min-width: 1200px) { .footer-linked Line truncated
*
* Pricing tables
*/ .pricing-minimal { position: relative; z-index: 1; padding: 25px 20px; border: 1px solid #aeb1be; border-radius: 6px; text-align: left; transition: .22s; cursor: default; } .pricing-minimal:hover { border-color: #0045b6; } .pricing-minimal:hover::before { visibility: visible; transform: translate3d(0, 0, 0); } .pricing-minimal-price { font-size: 26px; line-height: 1; font-weight: 700; letter-spacing: 0; color: #495057; } .pricing-minimal-price span { display: inline; } .pricing-minimal-price-currency { font-size: .65em; vertical-align: top; } .pricing-minimal-divider { border-bottom: 1px solid #aeb1be; } * + .pricing-minimal-price { margin-top: 10px; } * + .pricing-minimal-divider { margin-top: 20px; } @media (max-width: 575.98px) { .pricing-minimal { max-width: 350px; margin-left: auto; margin-right: auto; } } @media (min-width: 576px) { .pricing-minimal { padding: 20px; } } @media (min-width: 768px) { .pricing-minimal-price { font-size: 36px; } } @media (min-width: 768px) { .pricing-minimal { padding: 30px 38px; } } @media (min-width: 992px) and (max-width: 1199.98px) { .pricing-minimal { padding: 25px 20px; } } @media (min-width: 1200px) { .pricing-minimal { padding: 38px 40px; } } .pricing-modern { padding: 35px 20px; border: 1px solid #aeb1be; border-radius: 6px; text-align: center; } .pricing-modern * + .button { margin-top: 20px; } .pricing-group-modern { border: 1px solid #aeb1be; border-radius: 6px; } .pricing-group-modern .pricing-modern { border: 0; border-radius: 0; } .pricing-modern-rating { color: #0045b6; } .pricing-modern-rating > li { display: inline-block; width: 26px; font-size: 30px; line-height: .9; } .pricing-modern-title { font-weight: 700; } .pricing-modern-table { display: inline-table; } .pricing-modern-table td { padding: 3px 8px; color: #74757f; } .pricing-modern-table td:first-child { text-align: right; color: #495057; } .pricing-modern-table td:last-child { text-align: left; } .pricing-modern-price { font-size: 24px; font-weight: 300; line-height: 1.2; } .pricing-modern-price span { display: inline; } .pricing-modern-price-currency { font-size: .65em; vertical-align: top; } * + .pricing-group-modern { margin-top: 35px; } * + .pricing-modern-title { margin-top: 5px; } * + .pricing-modern-table { margin-top: 20px; } * + .pricing-modern-price { margin-top: 15px; } @media (max-width: 575.98px) { .pricing-group-modern { max-width: 360px; margin-left: auto; margin-right: auto; } .pricing-group-modern .pricing-modern + .pricing-modern { border-top: 1px solid #aeb1be; } } @media (min-width: 576px) and (max-width: 991.98px) { .pricing-group-modern .pricing-modern:nth-child(odd) { border-right: 1px solid #aeb1be; } .pricing-group-modern .pricing-modern:nth-child(n + 3) { border-top: 1px solid #aeb1be; } } @media (min-width: 576px) { .pricing-group-modern { display: flex; flex-wrap: wrap; } .pricing-group-modern .pricing-modern { width: 100%; max-width: 50%; } .pricing-modern { padding: 55px 20px; } * + .pricing-group-modern { margin-top: 50px; } * + .pricing-modern-table { margin-top: 25px; } * + .pricing-modern-price { margin-top: 30px; } } @media (min-width: 768px) { .pricing-modern-price { font-size: 30px; } } @media (min-width: 992px) { .pricing-group-modern .pricing-modern { max-width: 25%; border-right: 1px solid #aeb1be; } .pricing-group-modern .pricing-modern:nth-child(4n) { border-right: 0; } .pricing-group-modern .pricing-modern:nth-child(n + 5) { border-top: 1px solid #aeb1be; } } @media (min-width: 992px) and (max-width: 1199.98px) { .pricing-modern .button { display: block; padding-left: 15px; padding-right: 15px; } } @media (min-width: 1200px) { .pricing-modern-price { font-size: 36px; } * + .pricing-modern-table { margin-top: 35px; } * + .pricing-modern-price { margin-top: 40px; } } @media (min-width: 1600px) { * + .pricing-group-modern { margin-top: 75px; } } /*
*
* Profiles
*/ .profile-classic { text-align: left; } .profile-classic-main { position: relative; overflow: hidden; z-index: 1; border-radius: 6px; } .profile-classic-image { min-width: 100%; } .profile-classic-caption { position: absolute; left: 0; right: 0; bottom: 0; padding: 10px; background: rgba(0, 69, 182, 0.6); } .profile-classic-caption .icon-creative { color: #fff; } .profile-classic-title { color: #0045b6; } .profile-classic-title a:hover { color: #343db0; } .profile-classic-position { color: #aeb1be; } * + .profile-classic-title { margin-top: 15px; } * + .profile-classic-position { margin-top: 5px; } @media (max-width: 575.98px) { .profile-classic { max-width: 360px; margin-left: auto; margin-right: auto; } } @media (min-width: 576px) and (max-width: 767.98px) { .profile-classic-caption { padding-left: 5px; padding-right: 5px; } .profile-classic-caption .icon-sm { font-size: 18px; } .profile-classic-caption .group { margin-left: -3px; } .profile-classic-caption .group > * { margin-left: 3px; } } @media (min-width: 992px) and (max-width: 1199.98px) { .profile-classic-caption { padding-left: 5px; padding-right: 5px; } .profile-classic-caption .icon-sm { font-size: 18px; } .profile-classic-caption .group { margin-left: -3px; } .profile-classic-caption .group > * { margin-left: 3px; } } @media (min-width: 1200px) { * + .profile-classic-title { margin-top: 20px; } } html:not(.tablet):not(.mobile) .profile-classic:hover .profile-classic-caption { opacity: 1; visibility: visible; } html:not(.tablet):not(.mobile) .profile-classic-caption { top: 0; display: flex; flex-direction: column; justify-content: flex-end; opacity: 0; visibility: hidden; transition: .33s ease-in-out; } .profile-creative { display: flex; margin-left: -15px; text-align: left; color: #74757f; } .profile-creative > * { margin-left: 15px; } .profile-creative-figure { position: relative; overflow: hidden; max-width: 80px; flex-shrink: 0; } .profile-creative-image { width: 100%; border-radius: 6px; } .profile-creative-main { flex-grow: 1; } .profile-creative-title a { color: #151515; font-weight: 300; } .profile-creative-title a:hover { color: #0045b6; } .profile-creative-position { color: #151515; } .profile-creative-contacts { color: #151515; } .profile-creative-contacts a { color: inherit; font-weight: 400; } .profile-creative-contacts a:hover { color: #0045b6; } * + .profile-creative-position { margin-top: 0; } * + .profile-creative-contacts { margin-top: 15px; } @media (min-width: 576px) { .profile-creative { margin-left: -30px; } .profile-creative > * { margin-left: 30px; } .profile-creative-figure { max-width: 22%; } } @media (min-width: 768px) { .profile-creative-figure { max-width: 29%; } .profile-creative-main { padding-right: 30px; } * + .profile-creative-contacts { margin-top: 22px; } } @media (min-width: 992px) and (max-width: 1199.98px) { .profile-creative { margin-left: -20px; } .profile-creative > * { margin-left: 20px; } .profile-creative-figure { max-width: 25%; } .profile-creative-main { padding-right: 10px; } } .profile-minimal { position: relative; overflow: hidden; border-radius: 6px; color: #fff; text-align: left; } .profile-minimal::before { content: ''; display: block; padding-bottom: 100%; } .profile-minimal-image { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); min-height: 100%; min-width: 100%; width: auto; height: auto; max-width: none; } @supports (object-fit: cover) { .profile-minimal-image { left: 0; top: 0; width: 100%; height: 100%; transform: none; object-fit: cover; object-position: center center; } } .profile-minimal-caption { position: absolute; top: 0; right: 0; bottom: 0; left: 0; display: flex; flex-direction: column; justify-content: flex-end; padding: 25px; background: rgba(73, 80, 87, 0.4); } .profile-minimal-title { color: #fff; } * + .profile-minimal-position { margin-top: 5px; } @media (max-width: 575.98px) { .profile-minimal { max-width: 360px; margin-left: auto; margin-right: auto; } } @media (min-width: 1200px) { .profile-minimal-caption { padding: 35px; } * + .profile-minimal-position { margin-top: 10px; } } html:not(.tablet):not(.mobile) .profile-minimal:hover .profile-minimal-caption { opacity: 1; visibility: visible; } html:not(.tablet):not(.mobile) .profile-minimal-caption { opacity: 0; visibility: hidden; transition: .35s ease-in; background: rgba(73, 80, 87, 0.6); } .profile-modern { text-align: left; } .profile-modern > * + * { margin-top: 35px; } .profile-modern-header { display: flex; justify-content: space-between; flex-wrap: wrap; margin-bottom: -10px; margin-left: -20px; } .profile-modern-header:empty { margin-bottom: 0; margin-left: 0; } .profile-modern-header > * { display: inline-block; margin: 0 0 Line truncated
*
* Counters
*/ .counter-minimal { position: relative; text-align: center; color: #495057; } .counter-minimal-icon { font-size: 24px; line-height: 1; color: #0045b6; } .counter-minimal-main { font-family: "Poppins", sans-serif; font-size: 36px; font-weight: 500; line-height: 1.2; letter-spacing: 0; } .counter-minimal-main > * { display: inline; font: inherit; } .counter-minimal-main span { display: inline; } * + .counter-minimal-title { margin-top: 10px; } * + .counter-minimal-main { margin-top: 15px; } @media (max-width: 575.98px) { .counter-minimal-title { font-size: 16px; line-height: 1.4; } } @media (min-width: 768px) { .counter-minimal-icon { font-size: 28px; } } @media (min-width: 768px) { .counter-minimal-title { font-size: 18px; } .counter-minimal-main { font-size: 48px; } } @media (min-width: 1200px) { * + .counter-minimal-main { margin-top: 25px; } * + .counter-minimal-title { margin-top: 18px; } } /*
*
* Layouts
*/ .layout-bordered { text-align: center; } .layout-bordered-item { border: 0 solid #d3d5db; } .layout-bordered-item-inner { display: flex; flex-direction: column; justify-content: center; max-width: 290px; padding: 0 15px; margin-left: auto; margin-right: auto; } .layout-bordered-item-inner a { color: #151515; } .layout-bordered-item-inner > * + * { margin-top: 10px; } @media (max-width: 767.98px) { .layout-bordered-item { padding: 30px 0; } .layout-bordered-item:first-child { padding-top: 0; } .layout-bordered-item:last-child { padding-bottom: 0; } .layout-bordered-item + .layout-bordered-item { border-top-width: 1px; } } @media (min-width: 768px) { .layout-bordered { display: flex; } .layout-bordered-item { flex-grow: 1; } .layout-bordered-item-inner > * + * { margin-top: 15px; } } @media (min-width: 768px) and (max-width: 991.98px) { .layout-bordered-item { font-size: 15px; } } @media (min-width: 768px) { .layout-bordered-item { flex-basis: 33.333%; border-right-width: 1px; } .layout-bordered-item:first-child { border-left-width: 1px; } } .layout-navbar-demo { position: relative; overflow: hidden; min-height: 400px; background: #e8e9ee; } .layout-navbar-demo.layout-navbar-demo-lg { min-height: 650px; } .layout-navbar-demo .rd-navbar-fixed .rd-navbar-panel { position: relative; z-index: 10; } .layout-navbar-demo .rd-navbar-fixed .rd-navbar-nav-wrap { position: absolute; z-index: 9; } .layout-navbar-demo .rd-navbar-fixed .rd-navbar-main-outer, .layout-navbar-demo .rd-navbar-fixed .rd-navbar-main-element { position: static; } .layout-navbar-demo .rd-navbar-fixed .rd-navbar-search { position: static; } .layout-navbar-demo .rd-navbar-fixed .rd-navbar-panel .rd-navbar-search-toggle { position: static; z-index: 10; } .layout-navbar-demo .rd-navbar-fixed div.rd-navbar-block { top: -1px; right: 10px; white-space: nowrap; } .layout-navbar-demo .rd-navbar-fixed div.rd-navbar-block > * { display: inline-block; margin-top: 0; white-space: normal; vertical-align: middle; } .layout-navbar-demo .rd-navbar-fixed div.rd-navbar-block > * + * { margin-left: 8px; } .layout-navbar-demo .rd-navbar-fixed div.rd-navbar-block .rd-navbar-search-toggle { margin-top: 6px; } .layout-navbar-demo .rd-navbar-fixed div.rd-navbar-popup { position: absolute; } .layout-navbar-demo .rd-navbar-fixed.rd-navbar [class*='rd-navbar-fixed-element'] { position: absolute; z-index: 1000; } .layout-navbar-demo .rd-navbar-fixed.rd-navbar .rd-search { position: absolute; z-index: 1; } .layout-navbar-demo .rd-navbar-fixed .rd-navbar-collapse-content { position: absolute; z-index: 1; } @media (min-width: 1200px) { .layout-navbar-demo { min-height: 550px; } .layout-navbar-demo.layout-navbar-demo-lg { min-height: 650px; } } .container + .layout-navbar-demo { margin-top: 20px; } .blog-layout-aside { padding: 4px 0; background: #f5f6fa; } .blog-layout-aside .rd-search .form-input { border-color: transparent; } .blog-layout-aside-item { padding: 25px 30px; } .blog-layout-aside-item .blog-layout-aside-title + * { margin-top: 15px; } .blog-layout-aside-item a { color: #151515; } .blog-layout-aside-title { font-size: 22px; line-height: 1.5; } * + .blog-layout-aside { margin-top: 55px; } @media (min-width: 768px) { * + .blog-layout-aside { margin-top: 70px; } } @media (min-width: 768px) and (max-width: 991.98px) { .blog-layout-aside { columns: 2; break-inside: avoid; } .blog-layout-aside-item { display: inline-block; width: 100%; } } @media (min-width: 992px) { .blog-layout { display: flex; align-items: flex-start; margin-left: -30px; } .blog-layout > * { margin-left: 30px; } .blog-layout-main { flex-grow: 1; max-width: 66.66667%; } .blog-layout-aside { flex-shrink: 0; max-width: 33.33333%; } * + .blog-layout-aside { margin-top: 0; } } @media (min-width: 1200px) { .blog-layout-aside-item { padding: 35px 40px; } } .blog-layout-aside .list-marked * > a { transition: all ease .35s; display: inline-block; } .blog-layout-aside .list-marked * > a:hover { text-indent: 5px; transition: all ease .35s; } /*
*
* Timeline
*/ .timeline-classic { text-align: left; } .timeline-classic-item { position: relative; overflow: hidden; padding: 0 0 70px 35px; margin-bottom: -25px; } .timeline-classic-item:last-child { padding-bottom: 0; margin-bottom: 0; } .timeline-classic-item-image { width: 100%; } .timeline-classic-item-title { font-family: "Poppins", sans-serif; font-size: 24px; line-height: 1.2; font-weight: 300; letter-spacing: 0; text-transform: uppercase; } .thumbnail-classic-item-subtitle { font-size: 16px; line-height: 1.5; color: #151515; } .timeline-classic-item-divider { position: absolute; top: 0; left: 0; display: flex; flex-grow: 1; flex-direction: column; align-items: center; padding-top: 25px; } .timeline-classic-item-divider::before { content: ''; display: block; width: 15px; height: 15px; border: 2px solid #0045b6; border-radius: 50%; } .timeline-classic-item-divider::after { content: ''; position: absolute; top: 40px; left: 50%; margin-left: -1px; width: 2px; height: 300vh; background: #0045b6; min-height: 100px; } * + .timeline-classic-item-main { margin-top: 20px; } .context-dark .timeline-classic-item-divider::before, .bg-gray-700 .timeline-classic-item-divider::before, .bg-gray-800 .timeline-classic-item-divider::before, .bg-primary .timeline-classic-item-divider::before, .bg-primary-darker .timeline-classic-item-divider::before { border-color: #fff; } .context-dark .timeline-classic-item-divider::after, .bg-gray-700 .timeline-classic-item-divider::after, .bg-gray-800 .timeline-classic-item-divider::after, .bg-primary .timeline-classic-item-divider::after, .bg-primary-darker .timeline-classic-item-divider::after { background: #fff; } .context-dark .thumbnail-classic-item-subtitle, .bg-gray-700 .thumbnail-classic-item-subtitle, .bg-gray-800 .thumbnail-classic-item-subtitle, .bg-primary .thumbnail-classic-item-subtitle, .bg-primary-darker .thumbnail-classic-item-subtitle { color: #fff; } @media (max-width: 575.98px) { .timeline-classic-item { max-width: 450px; margin-left: auto; margin-right: auto; } } @media (max-width: 767.98px) { .timeline-classic-item { flex-wrap: wrap; } .timeline-classic-item-main, .timeline-classic-item-aside { width: 100%; } } @media (min-width: 768px) { .timeline-classic-item { display: flex; padding-left: 0; padding-bottom: 90px; } .timeline-classic-item-aside { max-width: 33.33%; } .timeline-classic-item-main { max-width: 60%; } .timeline-classic-item-divider { position: relative; padding: 25px 20px 0; } .timeline-classic-item-title { font-size: 32px; } .thumbnail-classic-item-subtitle { font-size: 18px; line-height: 1.4; } * + .timeline-classic-item-main { margin-top: 0; } } @media (min-width: 992px) { .timeline-classic-item * + h4, .timeline-classic-item * + .heading-4 { margin-top: 20px; } .timeline-classic-item-title { font-size: 36px; } .thumbnail-classic-item-subtitle { font-size: 20px; line-height: 1.4; } .timeline-classic-item-aside { max-width: 37%; } .timeline-classic-item-main { max-width: 50%; } } @media (min-width: 1200px) { .timeline-classic-item-aside { max-width: 33.33%; } .timeline-classic-item-title { font-size: 48px; } } @media (min-width: 1600px) { .timeline-classic-item { padding-bottom: 125px; } .timeline-classic-item * + h4, .timeline-classic-item * + .heading-4 { margin-top: 30px; } } /*
*
* Careers
*/ .career-classic { text-align: left; } .career-classic-divider { border-bottom: 1px solid #aeb1be; } .career-classic-list { transform: translate3d(0, -10px, 0); margin-bottom: -10px; margin-left: -20px; margin-right: -20px; } .career-classic-list > * { margin-top: 10px; padding-left: 20px; padding-right: 20px; } .career-classic-list > li { display: inline-block; vertical-align: middle; white-space: nowrap; } .career-classic-list > li > * { display: inline-block; vertical-align: middle; } .career-classic-list > li > * + * { margin-left: 8px; } .career-classic-list .icon { font-size: 1.25em; color: #0045b6; } * + .career-classic-divider { margin-top: 10px; } * + .career-classic-list { margin-top: 15px; } @media (max-width: 575.98px) { .career-classic { max-width: 360px; margin-left: auto; margin-right: auto; } } @media (min-width: 768px) { * + .career-classic-divider { margin-top: 20px; } * + .career-classic-list { margin-top: 20px; } } /*
*
* Comments
*/ .comment-classic { display: flex; align-items: flex-start; text-align: left; padding-bottom: 20px; border-bottom: 1px solid #e8e9ee; } .comment-classic > * + * { margin-left: 20px; } .comment-classic-figure { position: relative; flex-shrink: 0; width: 48px; height: 48px; } .comment-classic-image { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); min-height: 100%; min-width: 100%; width: auto; height: auto; border-radius: 50%; max-width: none; } @supports (object-fit: cover) { .comment-classic-image { left: 0; top: 0; width: 100%; height: 100%; transform: none; object-fit: cover; object-position: center center; } } .comment-classic-main { flex-grow: 1; } .comment-classic-name { color: #0045b6; } .comment-classic-text { color: #495057; } .comment-classic-meta { display: flex; align-items: center; justify-content: space-between; } .comment-classic-meta time { color: #74757f; } .comment-classic-reply { font-size: 24px; line-height: 1; color: #aeb1be; } .comment-classic-reply::before { content: '\f549'; font-family: 'Material Design Icons'; } .comment-classic-reply:hover { color: #0045b6; } * + .comment-classic-text { margin-top: 8px; } * + .comment-classic-meta { margin-top: 5px; } @media (min-width: 576px) { .comment-classic > * + * { margin-left: 25px; } .comment-classic-reply { font-size: 28px; } } .comment-classic-group .comment-classic-group { margin-left: 25px; } .comment-classic-group * + .comment-classic-group { margin-top: 30px; } * + .comment-classic-group { margin-top: 50px; } .comment-classic-group + .comment-classic-group { margin-top: 30px; } @media (min-width: 768px) { .comment-classic-group .comment-classic-group { margin-left: 75px; } } /*
*
* Jumbotron Classic
*/ .jumbotron-classic.bg-gray-700 h6, .jumbotron-classic.bg-gray-700 .heading-6 { color: #fff; } .jumbotron-classic.parallax-container { background-position: 60% center; } .jumbotron-classic .parallax-content { width: 100%; } .jumbotron-classic-content { max-width: 650px; display: flex; flex-direction: column; justify-content: center; height: 100%; } .jumbotron-classic-content .title-docor-text:before { top: 50%; } @media (max-width: 1599.98px) { .jumbotron-classic-content { padding: 120px 0; } } @media (max-width: 767.98px) { .jumbotron-classic-content { padding: 60px 0 80px 0; } } @media (max-width: 1199.98px) { .jumbotron-classic.parallax-container::before { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; pointer-events: none; background: linear-gradient(to right, rgba(73, 80, 87, 0.6), rgba(73, 80, 87, 0.2)); } } @media (min-width: 768px) { .jumbotron-classic-inner { padding: 200px 0 140px; } } @media (min-width: 1600px) { .jumbotron-classic-content { padding: 200px 0 150px; } } .jumbotron-modern { position: relative; display: flex; text-align: center; } .jumbotron-modern-inner { position: relative; z-index: 1; display: flex; align-items: center; width: 100%; padding: 50px 0; } .jumbotron-modern-content { max-width: 770px; margin-left: auto; margin-right: auto; } @media (max-width: 767.98px) { .jumbotron-modern .form-layout-1 { display: inline-block; max-width: 360px; } } @media (max-width: 1199.98px) { .jumbotron-modern::before { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; pointer-events: none; background: linear-gradient(to bottom, rgba(73, 80, 87, 0.4), rgba(73, 80, 87, 0)); } } @media (min-width: 768px) { .jumbotron-modern-inner { padding: 100px 0 140px; } } @media (min-width: 1200px) { .jumbotron-modern-inner { min-height: 41.66667vw; } } .jumbotron-indigo-header { padding: 40px 0; } .jumbotron-indigo-main { padding: 10px 0 40px; } @media (min-width: 768px) { .jumbotron-indigo-header { padding: 50px 0; } .jumbotron-indigo-main { padding: 50px 0 185px; } } /*
*
* Page layout
*/ .page { position: relative; overflow: hidden; min-height: 100vh; } .page.fadeIn { animation-timing-function: ease-out; } .page.fadeOut { animation-timing-function: ease-in; } [data-x-mode] .page { opacity: 1; } html.boxed body { background: #f5f6fa url(../images/bg-pattern-boxed.png) repeat fixed; } @media (min-width: 1630px) { html.boxed .page { max-width: 1600px; margin-left: auto; margin-right: auto; box-shadow: 0 0 23px 0 rgba(1, 1, 1, 0.1); } html.boxed .rd-navbar-static { max-width: 1600px; margin-left: auto; margin-right: auto; } html.boxed .rd-navbar-static.rd-navbar--is-stuck { max-width: 1600px; width: 100%; left: calc(50% - 1600px); right: calc(50% - 1600px); } } .page-header-navbar { position: relative; z-index: 1080; } .page-header-navbar .rd-navbar-wrap { position: absolute; top: 0; left: 0; right: 0; z-index: 1080; } /*
*
* Text styling
*/ .text-italic { font-style: italic; } .text-normal { font-style: normal; } .text-underline { text-decoration: underline; } .text-strike { text-decoration: line-through; } .font-weight-thin { font-weight: 100; } .font-weight-light { font-weight: 300; } .font-weight-regular { font-weight: 400; } .font-weight-medium { font-weight: 500; } .font-weight-sbold { font-weight: 600; } .font-weight-ubold { font-weight: 900; } .text-spacing-0 { letter-spacing: 0; } /*
*
* Offsets
*/ * + p, * + .list-inline-comma { margin-top: 16px; } h3 + p, .heading-3 + p, h3 + .p, .heading-3 + .p { margin-top: 18px; } h4 + p, .heading-4 + p, h4 + .p, .heading-4 + .p { margin-top: 16px; } * + h1, * + .heading-1 { margin-top: 15px; } h3 + h1, h3 + .heading-1, .heading-3 + h1, .heading-3 + .heading-1 { margin-top: 5px; } h6 + h1, h6 + .heading-1, .heading-6 + h1, .heading-6 + .heading-1 { margin-top: 10px; } * + h4, * + .heading-4 { margin-top: 15px; } * + h5, * + .heading-5 { margin-top: 15px; } h6 + p, .heading-6 + p { margin-top: 22px; } p + h2, p + .heading-2 { margin-top: 15px; } p + p { margin-top: 14px; } img + p { margin-top: 15px; } h3 + p { font-size: 16px; } h3 + img { margin-top: 42px; } p + hr { margin-top: 35px; } * + .row { margin-top: 30px; } * + .big { margin-top: 20px; } * + .text-block { margin-top: 25px; } * + .button, * + .button-outer { margin-top: 25px; } * + .list-sm { margin-top: 25px; } * + form.form-inline { margin-top: 18px; } * + form.rd-form-small { margin-top: 25px; } html * + .offset-top-1 { margin-top: 40px; } html * + .offset-top-2 { margin-top: 50px; } html * + .offset-top-3 { margin-top: 20px; } html * + .offset-top-4 { margin-top: 18px; } html .page * + .offset-top-5 { margin-top: 40px; } h3 + .row, .heading-3 + .row, h3 + .owl-carousel, .heading-3 + .owl-carousel { margin-top: 35px; } .container + .container { margin-top: 35px; } .container + .section { margin-top: 25px; } .row + .row { margin-top: 35px; } .row + .button-lg { margin-top: 30px; } .list-sm + .group-xs { margin-top: 20px; } @media (min-width: 768px) { * + p, * + .list-inline-comma { margin-top: 20px; } * + .big { margin-top: 25px; } * + .button, * + .button-outer { margin-top: 34px; } * + .row { margin-top: 40px; } * + .text-block { margin-top: 30px; } .container + .section { margin-top: 30px; } .row + .button-lg { margin-top: 45px; } html * + .offset-top-2 { margin-top: 50px; } } @media (min-width: 992px) { * + h1, * + .heading-1 { margin-top: 22px; } h3 + p, .heading-3 + p, h3 + .p, .heading-3 + .p { margin-top: 24px; } h3 + .row, .heading-3 + .row, h3 + .owl-carousel, .heading-3 + .owl-carousel { margin-top: 55px; } html * + .offset-top-1 { margin-top: 60px; } html * + .offset-top-3 { margin-top: 30px; } html * + .offset-top-4 { margin-top: 24px; } html .page * + .offset-top-5 { margin-top: 60px; } .progress-linear + .button { margin-top: 55px; } .row + .group { margin-top: 45px; } } @media (min-width: 1200px) { * + .button, * + .button-outer { margin-top: 40px; } * + .rd-form { margin-top: 40px; } h3 + p, .heading-3 + p, h3 + .p, .heading-3 + .p { margin-top: 20px; } html * + .offset-top-1 { margin-top: 70px; } .container + .container { margin-top: 60px; } .row + .row { margin-top: 60px; } } @media (min-width: 1600px) { h3 + .row, .heading-3 + .row, h3 + .owl-carousel, .heading-3 + .owl-carousel { margin-top: 75px; } html * + .offset-top-1 { margin-top: 144px; } html * + .offset-top-2 { margin-top: 50px; } .row + .button-lg { margin-top: 70px; } } .row-0 { margin-bottom: 0px; } .row-0:empty { margin-bottom: 0; } .row-0 > * { margin-bottom: 0px; } .row-10 { margin-bottom: -10px; } .row-10:empty { margin-bottom: 0; } .row-10 > * { margin-bottom: 10px; } .row-x-10 { margin-bottom: -10px; margin-left: -5px; margin-right: -5px; } .row-x-10:empty { margin-bottom: 0; } .row-x-10 > * { margin-bottom: 10px; } .row-x-10 > [class*='col'] { padding-left: 5px; padding-right: 5px; } .row-20 { margin-bottom: -20px; } .row-20:empty { margin-bottom: 0; } .row-20 > * { margin-bottom: 20px; } .row-30 { margin-bottom: -30px; } .row-30:empty { margin-bottom: 0; } .row-30 > * { margin-bottom: 30px; } .row-50 { margin-bottom: -50px; } .row-50:empty { margin-bottom: 0; } .row-50 > * { margin-bottom: 50px; } .row-60 { margin-bottom: -50px; } .row-60:empty { margin-bottom: 0; } .row-60 > * { margin-bottom: 50px; } .row-45 { margin-bottom: -45px; } .row-45:empty { margin-bottom: 0; } .row-45 > * { margin-bottom: 45px; } @media (min-width: 768px) { .row-md-50 { margin-bottom: -50px; } .row-md-50:empty { margin-bottom: 0; } .row-md-50 > * { margin-bottom: 50px; } } @media (min-width: 992px) { .row-md-30 { margin-bottom: -30px; } .row-md-30:empty { margin-bottom: 0; } .row-md-30 > * { margin-bottom: 30px; } } @media (min-width: 1600px) { .row-xxl-70 { margin-bottom: -70px; } .row-xxl-70:empty { margin-bottom: 0; } .row-xxl-70 > * { margin-bottom: 70px; } } /*
*
* Sections
*/ .section-xs { padding: 30px 0; } .section-sm { padding: 35px 0; } .section-sm.section-first { padding-top: 65px; } .section-sm.section-last { padding-bottom: 80px; } .section-md, .section-lg, .section-xl { padding: 50px 0; } .section-1 { padding: 35px 0; } .section-collapse + .section-collapse { padding-top: 0; } .section-collapse:last-child { padding-bottom: 0; } html [class*='section-'].section-bottom-0 { padding-bottom: 0; } @media (min-width: 576px) { .section-xs { padding: 40px 0; } } @media (min-width: 768px) { .section-sm { padding: 45px 0; } .section-sm.section-first { padding-top: 90px; } .section-sm.section-last { padding-bottom: 90px; } .section-md { padding: 60px 0; } .section-lg { padding: 72px 0; } .section-lg.section-first { padding-top: 100px; } .section-lg.section-last { padding-bottom: 100px; } .section-xl { padding: 80px 0; } .section-1 { padding: 60px 0; } } @media (min-width: 992px) { .section-md { padding: 60px 0 70px; } .section-xl { padding: 100px 0; } .section-1 { padding: 80px 0; } } @media (min-width: 1200px) { .section-sm { padding: 60px 0; } .section-sm.section-first { padding-top: 80px; } .section-sm.section-last { padding-bottom: 80px; } } @media (min-width: 1600px) { .section-sm.section-first { padding-top: 120px; } .section-sm.section-last { padding-bottom: 120px; } .section-md { padding: 85px 0 95px; } .section-lg { padding: 120px 0; } .section-lg.section-first { padding-top: 120px; } .section-lg.section-last { padding-bottom: 120px; } .section-xl { padding: 160px 0; } .section-1 { padding: 90px 0 100px; } } .section-single { display: flex; } .section-single::before { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; pointer-events: none; background: rgba(21, 21, 21, 0.4); } .section-single * + .rd-mailform-wrap { margin-top: 35px; } .section-single * + .countdown-wrap { margin-top: 30px; } .section-single .countdown-wrap + * { margin-top: 35px; } .section-single-dummy { visibility: hidden; pointer-events: none; } .section-single-header { padding: calc(1em + 3vh) 0 calc(1em + 2vh); } .section-single-main { padding: calc(1em + 4vh) 0; } .section-single-footer { padding: calc(1em + 2vh) 0 calc(1em + 3vh); } .section-single-inner { position: relative; z-index: 1; display: flex; flex-direction: column; align-items: center; justify-content: space-between; width: 100%; min-height: 100vh; padding-top: 6vh; } .section-single-inner > * { width: 100%; } @supports (display: grid) { .section-single-inner { display: grid; justify-items: center; align-content: space-between; grid-template-columns: 1fr; } } @media (max-width: 575.98px) { .section-single .section-single-main-content { max-width: 240px; margin-left: auto; margin-right: auto; } } @media (max-width: 767.98px) { .section-single .button-lg { font-size: 15px; padding-left: 25px; padding-right: 25px; } } @media (min-width: 768px) { .section-single::before { display: none; } .section-single-inner { padding-top: 7vh; } } @media (min-width: 1200px) { .section-single * + .countdown-wrap { margin-top: 50px; } .section-single .countdown-wrap + * { margin-top: 50px; } } .section-overlap { position: relative; padding: 40px 0; } .section-overlap .row { flex-wrap: nowrap; flex-direction: column; align-items: flex-end; } .section-overlap [class*='col'] { flex-basis: auto; } .section-overlap * + [class*='col'] { margin-top: 10px; } .section-overlap * + .col-offset-1 { margin-top: 20px; } .section-overlap-image { position: absolute; top: 0; right: 0; bottom: 0; left: 0; background-size: cover; background-position: center center; background-repeat: no-repeat; } .section-overlap-content { position: relative; z-index: 1; } @media (max-width: 767.98px) { .section-overlap-content .container { padding: 20px 15px; background: linear-gradient(to right, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.8)); } .section-overlap-content .container > * { max-width: 380px; } } @media (max-width: 767.98px) and (min-width: 576px) { .section-overlap-content .container { padding: 40px 50px; } } @media (min-width: 768px) and (max-width: 991.98px) { .section-overlap-image::before { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 1; pointer-events: none; background: linear-gradient(to left, rgba(245, 246, 250, 0.4), rgba(245, 246, 250, 0)); } } @media (min-width: 768px) { .section-overlap { padding: 75px 0; } .section-overlap * + [class*='col'] { margin-top: 20px; } .section-overlap * + .col-offset-1 { margin-top: 40px; } .section-overlap-image { background-position: 80% 50%; width: calc(50% - 60px + 35px); } } @media (min-width: 992px) { .section-overlap { padding: 100px 0; } .section-overlap-image { width: calc(50% - -80Line truncated
*
* Grid modules
*/ .range { display: flex; flex-wrap: wrap; } .cell-inner { width: 100%; padding-right: 15px; padding-left: 15px; } .range > [class*='cell'] { position: relative; width: 100%; min-height: 1px; } .range > [class*='cell'] > .row { margin: 0; } .range > [class*='cell'].container { padding: 0; } .range > [class*='col'] { padding: 0; } @media (min-width: 576px) { .cell-sm-6 { flex: 0 0 50%; max-width: 50%; } .cell-sm-6 .cell-inner { max-width: 270px; } .range > [class*='cell-sm']:nth-child(odd) .cell-inner { margin-left: auto; } .range.flex-sm-row-reverse > [class*='cell-sm']:nth-child(odd) .cell-inner { margin-left: 0; } .range.flex-sm-row-reverse > [class*='cell-sm']:nth-child(even) .cell-inner { margin-left: auto; } .range > [class*='cell-sm'].container { margin: 0; } } @media (min-width: 768px) { .range > [class*='cell-md']:nth-child(odd) .cell-inner { margin-left: auto; } .range.flex-md-row-reverse > [class*='cell-md']:nth-child(odd) .cell-inner { margin-left: 0; } .range.flex-md-row-reverse > [class*='cell-md']:nth-child(even) .cell-inner { margin-left: auto; } .range > [class*='cell-md'].container { margin: 0; } } @media (min-width: 992px) { [class*='cell-lg'] > .row > [class*='col'] { flex-basis: 100%; } .cell-lg-5 { flex: 0 0 calc(50% - 80px); max-width: calc(50% - 80px); } .cell-lg-5 .cell-inner { max-width: 400px; } .cell-lg-6 { flex: 0 0 50%; max-width: 50%; } .cell-lg-6 .cell-inner { max-width: 480px; } .range > [class*='cell-lg']:nth-child(odd) .cell-inner { margin-left: auto; } .range.flex-lg-row-reverse > [class*='cell-lg']:nth-child(odd) .cell-inner { margin-left: 0; } .range.flex-lg-row-reverse > [class*='cell-lg']:nth-child(even) .cell-inner { margin-left: auto; } .range > [class*='cell-lg'].container { margin: 0; } } @media (min-width: 1200px) { .range > [class*='cell-xl'].container { margin: 0; } .range > [class*='cell-xl']:nth-child(odd) .cell-inner { margin-left: auto; } .range .cell-inner { flex-basis: 100%; } .cell-xl-7 { flex: 0 0 calc(50% - -100px); max-width: calc(50% - -100px); } .cell-xl-7 .cell-inner { max-width: 700px; } .cell-lg-6, .cell-xl-6 { flex: 0 0 50%; max-width: 50%; } .cell-lg-6 .cell-inner, .cell-xl-6 .cell-inner { max-width: 600px; } .cell-xl-5 { flex: 0 0 calc(50% - 100px); max-width: calc(50% - 100px); } .cell-xl-5 .cell-inner { max-width: 500px; } .cell-xl-4 { flex: 0 0 calc(50% - 200px); max-width: calc(50% - 200px); } .cell-xl-4 .cell-inner { max-width: 400px; } } @media (min-width: 1600px) { .cell-xxl-6 { flex: 0 0 50%; max-width: 50%; } .cell-xxl-6 .cell-inner { max-width: 600px; } } /*
*
* Backgrounds
*/ .context-dark, .bg-gray-700, .bg-gray-800, .bg-primary, .bg-primary-darker, .context-dark h1, .bg-gray-700 h1, .bg-gray-800 h1, .bg-primary h1, .bg-primary-darker h1, .context-dark h2, .bg-gray-700 h2, .bg-gray-800 h2, .bg-primary h2, .bg-primary-darker h2, .context-dark h3, .bg-gray-700 h3, .bg-gray-800 h3, .bg-primary h3, .bg-primary-darker h3, .context-dark h4, .bg-gray-700 h4, .bg-gray-800 h4, .bg-primary h4, .bg-primary-darker h4, .context-dark h5, .bg-gray-700 h5, .bg-gray-800 h5, .bg-primary h5, .bg-primary-darker h5, .context-dark h6, .bg-gray-700 h6, .bg-gray-800 h6, .bg-primary h6, .bg-primary-darker h6, .context-dark [class^='heading-'], .bg-gray-700 [class^='heading-'], .bg-gray-800 [class^='heading-'], .bg-primary [class^='heading-'], .bg-primary-darker [class^='heading-'] { color: #fff; } .context-dark p a, .bg-gray-700 p a, .bg-gray-800 p a, .bg-primary p a, .bg-primary-darker p a { color: inherit; } .context-dark .big, .bg-gray-700 .big, .bg-gray-800 .big, .bg-primary .big, .bg-primary-darker .big { color: #fff; } .context-dark .brand .brand-logo-dark, .bg-gray-700 .brand .brand-logo-dark, .bg-gray-800 .brand .brand-logo-dark, .bg-primary .brand .brand-logo-dark, .bg-primary-darker .brand .brand-logo-dark { display: none; } .context-dark .brand .brand-logo-light, .bg-gray-700 .brand .brand-logo-light, .bg-gray-800 .brand .brand-logo-light, .bg-primary .brand .brand-logo-light, .bg-primary-darker .brand .brand-logo-light { display: block; } .context-dark .button-primary:hover, .bg-gray-700 .button-primary:hover, .bg-gray-800 .button-primary:hover, .bg-primary .button-primary:hover, .bg-primary-darker .button-primary:hover { background: #4854ed; border-color: #4854ed; } /**
* Light Backgrounds
*/ .bg-gray-100 { background-color: #f5f6fa; } /**
* Dark Backgrounds
*/ .bg-gray-700 { color: #aeb1be; background-color: #232426; } .bg-gray-700 a { color: inherit; } .bg-gray-700 a:hover { color: #fff; } .bg-gray-700 p a:hover { color: #fff; } .bg-gray-800 { background-color: #151515; } /**
* Accent Backgrounds
*/ .bg-primary { background-color: #0045b6; } .bg-primary-darker { background-color: #29293a; } /**
* Background Image
*/ [class*='bg-'] { background-size: cover; background-position: center center; } @media (max-width: 1199.98px) { .bg-image-light { position: relative; } .bg-image-light::before { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; background: rgba(255, 255, 255, 0.1); } } .bg-image-1 { position: relative; background-position: 30% 100%; } .bg-image-1::before { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; background: #495057; opacity: .6; } .bg-image-1 > * { position: relative; z-index: 1; } @media (min-width: 576px) { .bg-image-1 { background-position: 72% 100%; } .bg-image-1::before { opacity: .2; } } @media (min-width: 768px) { .bg-image-1 { background-position: 54% 100%; } .bg-image-1::before { display: none; } } @media (min-width: 992px) { html:not(.tablet):not(.mobile) .bg-fixed { background-attachment: fixed; } } .primary-overlay { position: relative; } .primary-overlay:before { position: absolute; content: ''; top: 0; right: 0; bottom: 0; left: 0; background-color: rgba(21, 21, 21, 0.45); pointer-events: none; z-index: 1; display: block; } /*
*
* Utilities custom
*/ .height-fill { position: relative; display: flex; flex-direction: column; align-items: stretch; } .height-fill > * { flex-grow: 1; flex-shrink: 0; } .object-inline { white-space: nowrap; } .object-inline > * { display: inline-block; min-width: 20px; vertical-align: top; white-space: normal; } .object-inline.wow span { display: inline-block; } .object-inline > * + * { margin-left: 11px; } .wow-outer .object-inline span { display: inline-block; } .oh { position: relative; overflow: hidden; } .text-decoration-lines { position: relative; overflow: hidden; width: 100%; text-align: center; } .text-decoration-lines-content { position: relative; display: inline-block; padding: 0 20px; } .text-decoration-lines-content::before, .text-decoration-lines-content::after { content: ''; position: absolute; height: 1px; background: #aeb1be; top: 50%; width: 100vw; } .text-decoration-lines-content::before { left: 0; transform: translate3d(-100%, 0, 0); } .text-decoration-lines-content::after { right: 0; transform: translate3d(100%, 0, 0); } * + .text-decoration-lines { margin-top: 30px; } .text-block > * { margin-left: .125em; margin-right: .125em; } @media (min-width: 992px) { .offset-right-1 { margin-right: 40px; } } .banner { background-position: center center; background-size: cover; } .phone-frame { max-width: 296px; padding: 0 5px; margin-left: auto; margin-right: auto; box-shadow: -46.037px 40.02px 21px 0px rgba(0, 0, 0, 0.02); } @media (max-width: 767.98px) { .phone-frame { display: none; } } .tip-mark { display: inline-flex; align-items: center; justify-content: center; width: 2em; height: 2em; padding-left: 2px; margin-bottom: 5px; font-size: 12px; line-height: 2em; vertical-align: middle; text-align: center; border-radius: 50%; border: 1px solid #e8e9ee; color: #0045b6; } /*
*
* Insets
*/ @media (min-width: 576px) { .inset-left-1 { padding-left: 10px; } } @media (min-width: 768px) { .inset-left-1 { padding-left: 30px; } } @media (min-width: 992px) { .inset-left-1 { padding-left: 0; } } @media (min-width: 992px) and (max-width: 1199.98px) { .inset-left-2 { padding-left: 30px; } } @media (min-width: 576px) { .inset-right-1 { padding-right: 20px; } } @media (min-width: 768px) { .inset-right-1 { padding-right: 30px; } } @media (min-width: 992px) and (max-width: 1199.98px) { .inset-right-1 { padding-right: 0; } } @media (min-width: 992px) { .inset-right-2 { padding-right: 30px; } } @media (min-width: 1200px) { .inset-right-2 { padding-right: 0; } } @media (min-width: 992px) { .inset-right-3 { padding-left: 5px; } } @media (min-width: 1200px) { .inset-right-3 { padding-right: 0; } } /*
*
* Animate.css
*/ .animated { animation-duration: 1s; animation-fill-mode: both; opacity: 1; } .animated.infinite { animation-iteration-count: infinite; } .animated.hinge { animation-duration: 2s; } html:not(.lt-ie10) .not-animated { opacity: 0; } @keyframes fadeIn { 0% { opacity: 0; } 100% { opacity: 1; } } .fadeIn { animation-name: fadeIn; } @keyframes fadeInUp { 0% { opacity: 0; transform: translate3d(0, 100%, 0); } 100% { opacity: 1; transform: none; } } .fadeInUp { animation-name: fadeInUp; } @keyframes fadeInDown { 0% { opacity: 0; transform: translate3d(0, -100%, 0); } 100% { opacity: 1; transform: none; } } .fadeInDown { animation-name: fadeInDown; } @keyframes fadeInLeft { 0% { opacity: 0; transform: translate3d(-100%, 0, 0); } 100% { opacity: 1; transform: none; } } .fadeInLeft { animation-name: fadeInLeft; } @keyframes fadeInRight { 0% { opacity: 0; transform: translate3d(100%, 0, 0); } 100% { opacity: 1; transform: none; } } .fadeInRight { animation-name: fadeInRight; } @keyframes fadeOut { 0% { opacity: 1; } 100% { opacity: 0; } } .fadeOut { animation-name: fadeOut; } @keyframes slideInDown { 0% { transform: translate3d(0, -100%, 0); visibility: visible; } 100% { transform: translate3d(0, 0, 0); } } .slideInDown { animation-name: slideInDown; } @keyframes slideInUp { 0% { transform: translate3d(0, 100%, 0); visibility: visible; } 100% { transform: translate3d(0, 0, 0); } } .slideInUp { animation-name: slideInUp; } @keyframes slideInLeft { 0% { transform: translate3d(-100%, 0, 0); visibility: visible; } 100% { transform: translate3d(0, 0, 0); } } .slideInLeft { animation-name: slideInLeft; } @keyframes slideInRight { 0% { transform: translate3d(100%, 0, 0); visibility: visible; } 100% { transform: translate3d(0, 0, 0); } } .slideInRight { animation-name: slideInRight; } @keyframes slideOutDown { 0% { transform: translate3d(0, 0, 0); } 100% { visibility: hidden; transform: translate3d(0, 100%, 0); } } .slideOutDown { animation-name: slideOutDown; } @keyframes scaleInY { 0% { top: 0; bottom: 100%; } 50% { transform: scale3d(1, 1, 1); } 100% { top: 100%; bottom: auto; transform: scale3d(1, 0, 1); } } @keyframes scaleFadeIn { 0% { height: 0; } 100% { height: 100%; } } .scaleFadeIn { display: flex; overflow: hidden; animation-name: scaleFadeIn; animation-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); } .scaleFadeInWrap { display: flex; align-items: stretch; } .wow-outer { position: relative; overflow: hidden; } @keyframes scaleInVertical { 0% { transform: scale3d(1, 0, 1); } 100% { transform: scale3d(1, 1, 1); } } .scaleInVertical { animation-name: scaleInVertical; } @keyframes fadeInLeftSmall { 0% { opacity: 0; transform: translate3d(-20px, 0, 0); } 100% { opacity: 1; transform: none; } } .fadeInLeftSmall { animation-name: fadeInLeftSmall; } @keyframes fadeInUpSmall { 0% { opacity: 0; transform: translate3d(0, 20px, 0); } 100% { opacity: 1; transform: none; } } .fadeInUpSmall { animation-name: fadeInUpSmall; } @keyframes fadeSlideInDown { 0% { opacity: 0; transform: translate3d(0, -50%, 0); visibility: visible; } 10% { opacity: 1; } 100% { transform: translate3d(0, 0, 0); } } .fadeSlideInDown { animation-name: fadeSlideInDown; } @keyframes fadeSlideInUp { 0% { opacity: 0; transform: translate3d(0, 50%, 0); visibility: visible; } 10% { opacity: 1; } 100% { transform: translate3d(0, 0, 0); } } .fadeSlideInUp { animation-name: fadeSlideInUp; } .wow { backface-visibility: hidden; } /*
*
* Preloader
*/ .preloader { position: fixed; left: 0; top: 0; bottom: 0; right: 0; z-index: 10000; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 20px; transition: .3s all ease; pointer-events: none; backface-visibility: hidden; } .preloader::before, .preloader::after { content: ''; position: absolute; left: 0; right: 0; transition: .2s linear; transform: translateY(0); pointer-events: none; } .preloader::before { top: 0; bottom: 50%; background: #fff; } .preloader::after { top: 50%; bottom: 0; background: #f5f6fa; } .preloader.loaded::before, .preloader.loaded::after { transition: .4s linear; } .preloader.loaded::before { transform: translateY(-100%); } .preloader.loaded::after { transform: translateY(100%); } .preloader.loaded .preloader-logo, .preloader.loaded .preloader-body { opacity: 0; visibility: hidden; transition: 0s; } .preloader-logo, .preloader-body { transition: 0s .2s; } .preloader-logo { position: relative; z-index: 10; transform: translate3d(0, -50%, 0); padding: 40px; } .preloader-body { position: absolute; top: 50%; transform: translate3d(0, -50%, 0); left: 0; right: 0; z-index: 10; text-align: center; } #loadingProgressG { width: 100vw; height: 5px; overflow: hidden; background: #e8e9ee; border-radius: 6px; margin: auto; } .loadingProgressG { background: #0045b6; margin-top: 0; margin-left: -100vw; animation-name: bounce_loadingProgressG; animation-duration: 2.5s; animation-iteration-count: infinite; animation-timing-function: linear; width: 100vw; height: 5px; transition: .5s; } @keyframes bounce_loadingProgressG { 0% { margin-left: -100vw; } 100% { margin-left: 100vw; } } /*
*
* ToTop
*/ .ui-to-top { position: fixed; right: 15px; bottom: 15px; z-index: 100; width: 48px; height: 48px; border-radius: 6px; color: #fff; background: #0045b6; overflow: hidden; text-align: center; text-decoration: none; transition: transform 0.45s ease-in-out, background 0.3s cubic-bezier(0.2, 1, 0.3, 1); transform: translate3d(0, 100px, 0); } .ui-to-top::before, .ui-to-top::after { content: '\f239'; font-family: 'Material Design Icons'; font-size: 20px; line-height: 48px; vertical-align: middle; transition: transform 0.3s cubic-bezier(0.2, 1, 0.3, 1), opacity 0.3s cubic-bezier(0.2, 1, 0.3, 1); } .ui-to-top::before { display: block; } .ui-to-top::after { position: absolute; width: 100%; top: 50%; left: 0; opacity: 0; transform: translate3d(0, 0, 0); } .ui-to-top:hover::before { opacity: 0; transform: translate3d(0, -30%, 0); } .ui-to-top:hover::after { opacity: 1; transform: translate3d(0, 0, 0) translateY(-50%); } .ui-to-top:hover { color: #fff; background: #4854ed; text-decoration: none; } .ui-to-top:focus { color: #fff; } .ui-to-top.active { transform: translate3d(0, 0, 0); } html.mobile .ui-to-top, html.tablet .ui-to-top { display: none !important; } @media (min-width: 576px) { .ui-to-top { right: 40px; bottom: 40px; } } /*
*
* RD Navbar
*/ @keyframes rd-navbar-slide-down { 0% { transform: translateY(-100%); } 100% { transform: translateY(0); } } @keyframes rd-navbar-slide-up { 0% { transform: translateY(0); } 100% { transform: translateY(-100%); } } .rd-navbar-wrap, .rd-navbar, .rd-menu, .rd-navbar-nav, .rd-navbar-panel, .rd-navbar-static .rd-menu, .rd-navbar-fixed .rd-navbar-nav-wrap, .rd-navbar-fixed .rd-navbar-submenu { transition: 0.35s all cubic-bezier(0.65, 0.05, 0.36, 1); } .rd-navbar--no-transition, .rd-navbar--no-transition * { transition: none !important; } .rd-navbar, .rd-navbar.rd-navbar--is-clone { display: none; } .rd-navbar.rd-navbar-fixed + .rd-navbar.rd-navbar--is-clone, .rd-navbar.rd-navbar-sidebar + .rd-navbar.rd-navbar--is-clone { display: none; } .rd-navbar { display: none; background: #fff; } .rd-navbar-outer { position: relative; z-index: 1080; } .rd-nav-link { font: 400 14px/20px "Poppins", sans-serif; letter-spacing: .08em; text-transform: uppercase; } .rd-navbar-toggle { display: inline-block; position: relative; width: 40px; height: 40px; line-height: 40px; cursor: pointer; color: #495057; background-color: transparent; border: none; display: none; } .rd-navbar-toggle span { position: relative; display: block; margin: auto; transition: .3s all ease; } .rd-navbar-toggle span::after, .rd-navbar-toggle span::before { content: ""; position: absolute; left: 0; top: -6px; transition: .3s all ease; } .rd-navbar-toggle span::after { top: 5px; } .rd-navbar-toggle span::after, .rd-navbar-toggle span::before, .rd-navbar-toggle span { width: 24px; height: 2px; background-color: #495057; backface-visibility: hidden; border-radius: 5; } .rd-navbar-toggle.active span { background: transparent; transition: .01s; } .rd-navbar-toggle.active span::before, .rd-navbar-toggle.active span::after { transform-origin: 50% 50%; top: 0; } .rd-navbar-toggle.active span::before { transform: rotate(45deg); } .rd-navbar-toggle.active span::after { transform: rotate(-45deg); } .rd-navbar-collapse-toggle { background: none; border: none; display: inline-block; padding: 0; outline: none; outline-offset: 0; cursor: pointer; -webkit-appearance: none; display: inline-block; position: relative; width: 40px; height: 40px; line-height: 40px; cursor: pointer; color: #495057; display: none; } .rd-navbar-collapse-toggle::-moz-focus-inner { border: none; padding: 0; } .rd-navbar-collapse-toggle span { top: 50%; margin-top: -2.5px; } .rd-navbar-collapse-toggle span, .rd-navbar-collapse-toggle span::before, .rd-navbar-collapse-toggle span::after { position: absolute; width: 5px; height: 5px; line-height: 5px; text-align: center; background: #495057; left: 50%; margin-left: -2.5px; border-radius: 50%; transition: .3s all ease; } .rd-navbar-collapse-toggle span::before, .rd-navbar-collapse-toggle span::after { content: ''; } .rd-navbar-collapse-toggle span::before { bottom: 100%; margin-bottom: 2.5px; } .rd-navbar-collapse-toggle span::after { top: 100%; margin-top: 2.5px; } .rd-navbar-collapse-toggle.active span { transform: scale(0.7); } .rd-navbar-collapse-toggle.active span::before { transform: translateY(15px); } .rd-navbar-collapse-toggle.active span::after { transform: translateY(-15px); } .rd-navbar-brand a { display: block; } .rd-navbar-search { position: relative; display: inline-flex; } .rd-navbar-search .form-input { padding-right: 50px; } .rd-navbar-search .rd-search-form-submit { position: absolute; top: 0; bottom: 0; right: 0; width: 50px; padding: 0; margin: 0; border: none; cursor: pointer; background-color: transparent; font-size: 20px; color: #aeb1be; transition: .33s; } .rd-navbar-search .rd-search-form-submit:hover { color: #0045b6; } .rd-navbar-search .rd-search-results-live { pointer-events: none; } .rd-navbar-search .rd-search-results-live > * { pointer-events: auto; } .rd-navbar-search-toggle { background: none; border: none; display: inline-block; padding: 0; outline: none; outline-offset: 0; cursor: pointer; -webkit-appearance: none; } .rd-navbar-search-toggle::-moz-focus-inner { border: none; padding: 0; } .rd-navbar-dropdown { display: none; } .rd-navbar-popup { position: absolute; padding: 15px 25px 20px 20px; width: calc(100vw - 10px); border-radius: 6px; opacity: 0; visibility: hidden; transition: .2s; overflow: hidden; background-color: #495057; } .rd-navbar-popup::before { content: ''; position: absolute; right: 0; left: 0; top: 0; bottom: 0; z-index: -1; transform: scale3d(1, 0.1, 1); transform-origin: 50% 0; background: #495057; border-radius: inherit; transition: .5s; } .rd-navbar-popup > * { position: relative; z-index: 1; opacity: 0; visibility: hidden; transition: .5s; transform-origin: 50% 0; transform: scale3d(1, 0.9, 1); } .rd-navbar-popup.active { opacity: 1; visibility: visible; } .rd-navbar-popup.active > * { opacity: Line truncated
* @subsection RD Navbar Static
*/ .rd-navbar-static { display: block; position: relative; } .rd-navbar-static .rd-nav-item { display: inline-block; } .rd-navbar-static .rd-nav-item.focus .rd-nav-link, .rd-navbar-static .rd-nav-item.opened .rd-nav-link { color: rgba(255, 255, 255, 0.5); background: transparent; } .rd-navbar-static .rd-nav-item.focus > .rd-navbar-submenu-toggle, .rd-navbar-static .rd-nav-item.opened > .rd-navbar-submenu-toggle { color: #fff; } .rd-navbar-static .rd-nav-item.active .rd-nav-link { color: rgba(255, 255, 255, 0.5); background: transparent; } .rd-navbar-static .rd-nav-item.active > .rd-navbar-submenu-toggle { color: #fff; } .rd-navbar-static .rd-nav-item.focus > .rd-navbar-submenu-toggle::before, .rd-navbar-static .rd-nav-item.opened > .rd-navbar-submenu-toggle::before, .rd-navbar-static .rd-nav-item .rd-nav-link:hover + .rd-navbar-submenu-toggle::before { transform: rotate(180deg); color: rgba(255, 255, 255, 0.5); } .rd-navbar-static .rd-nav-item > .rd-navbar-submenu-toggle { margin-left: 4px; font-family: "Material Design Icons"; font-size: 16px; cursor: pointer; color: #fff; } .rd-navbar-static .rd-nav-item > .rd-navbar-submenu-toggle::before { position: relative; display: inline-block; transition: .22s; content: '\f236'; } .rd-navbar-static .rd-nav-item > .rd-navbar-submenu-toggle:hover { color: rgba(255, 255, 255, 0.4); } .rd-navbar-static .rd-nav-item > .rd-navbar-submenu { margin-top: 20px; } .rd-navbar-static .rd-nav-item + .rd-nav-item { margin-left: 35px; } .rd-navbar-static .rd-nav-link { position: relative; display: inline-block; color: #fff; transition: .25s; padding-bottom: 2px; } .rd-navbar-static .rd-nav-link:hover { color: rgba(255, 255, 255, 0.4); } .rd-navbar-static .rd-menu { position: absolute; z-index: 15; display: block; padding: 16px 27px; margin-top: 22px; margin-left: -27px; visibility: hidden; opacity: 0; text-align: left; box-shadow: 0 5px 10px 1px rgba(20, 20, 28, 0.3); border-radius: 6px; transform: translate3d(0, 30px, 0); } .rd-navbar-static .rd-dropdown-item + .rd-dropdown-item, .rd-navbar-static .rd-megamenu-list-item + .rd-megamenu-list-item { margin-top: 7px; } .rd-navbar-static .rd-navbar-dropdown { position: absolute; left: 0; width: 290px; background: #232426; z-index: 5; } .rd-navbar-static .rd-navbar-dropdown .rd-navbar-dropdown { top: -1px; left: 100%; z-index: 2; margin-top: -15px; margin-left: 15px; transform: translate3d(30px, 0, 0); } .rd-navbar-static .rd-navbar-dropdown .rd-navbar-dropdown.rd-navbar-open-left { left: auto; right: 100%; margin-left: 0; margin-right: 15px; transform: translate3d(-30px, 0, 0); } .rd-navbar-static .rd-dropdown-item.focus .rd-dropdown-link, .rd-navbar-static .rd-dropdown-item.opened .rd-dropdown-link { color: #fff; } .rd-navbar-static .rd-dropdown-link { color: #aeb1be; } .rd-navbar-static .rd-dropdown-link:hover { color: #fff; } .rd-navbar-static .rd-navbar-dropdown li > a, .rd-navbar-static .rd-megamenu-list li > a { position: relative; left: -13px; display: flex; padding: 4px 18px 4px 0; text-align: left; } .rd-navbar-static .rd-navbar-dropdown li > a, .rd-navbar-static .rd-navbar-dropdown li > a:focus, .rd-navbar-static .rd-navbar-dropdown li > a:active, .rd-navbar-static .rd-megamenu-list li > a, .rd-navbar-static .rd-megamenu-list li > a:focus, .rd-navbar-static .rd-megamenu-list li > a:active { color: #aeb1be; } .rd-navbar-static .rd-navbar-dropdown li > a:hover, .rd-navbar-static .rd-megamenu-list li > a:hover { color: #fff; } .rd-navbar-static .rd-navbar-dropdown li > a, .rd-navbar-static .rd-navbar-dropdown li > a::before, .rd-navbar-static .rd-megamenu-list li > a, .rd-navbar-static .rd-megamenu-list li > a::before { transition: all .2s ease-in-out; } .rd-navbar-static .rd-navbar-dropdown li > a::before, .rd-navbar-static .rd-megamenu-list li > a::before { position: relative; top: -1px; left: -6px; display: inline-block; content: '\f238'; font-family: 'Material Design Icons'; font-size: inherit; line-height: inherit; color: #fff; opacity: 0; visibility: hidden; } .rd-navbar-static .rd-navbar-dropdown li.focus > a, .rd-navbar-static .rd-navbar-dropdown li.opened > a, .rd-navbar-static .rd-navbar-dropdown li > a:hover, .rd-navbar-static .rd-megamenu-list li.focus > a, .rd-navbar-static .rd-megamenu-list li.opened > a, .rd-navbar-static .rd-megamenu-list li > a:hover { left: -13px; padding-left: 18px; padding-right: 0; } .rd-navbar-static .rd-navbar-dropdown li.focus > a::before, .rd-navbar-static .rd-navbar-dropdown li.opened > a::before, .rd-navbar-static .rd-navbar-dropdown li > a:hover::before, .rd-navbar-static .rd-megamenu-list li.focus > a::before, .rd-navbar-static .rd-megamenu-list li.opened > a::before, .rd-navbar-static .rd-megamenu-list li > a:hover::before { left: -7px; opacity: 1; visibility: visible; } .rd-navbar-static .rd-navbar-megamenu { display: flex; left: 0; overflow: hidden; max-width: 7Line truncated
*
* RD Navbar Fixed
*/ .rd-navbar-fixed { display: block; width: 100%; } .rd-navbar-fixed .rd-navbar-toggle { display: inline-block; } .rd-navbar-fixed .rd-navbar-brand { position: relative; top: -2px; margin-left: 12px; font-size: 0; line-height: 0; text-align: left; } .rd-navbar-fixed .rd-navbar-brand img { max-width: 160px; max-height: 58px; width: auto; height: auto; } .rd-navbar-fixed .rd-navbar-panel { position: fixed; left: 0; top: 0; right: 0; z-index: 1080; display: flex; align-items: center; height: 56px; padding: 8px; } .rd-navbar-fixed .rd-navbar-nav-wrap { position: fixed; left: 0; top: -56px; bottom: -56px; z-index: 1079; width: 270px; padding: 112px 0 81px; overflow-y: auto; overflow-x: hidden; -webkit-overflow-scrolling: touch; font-size: 14px; line-height: 34px; transform: translateX(-110%); } .rd-navbar-fixed .rd-navbar-nav-wrap::-webkit-scrollbar { width: 4px; } .rd-navbar-fixed .rd-navbar-nav-wrap::-webkit-scrollbar-thumb { background: #1d73ff; border: none; border-radius: 0; opacity: .2; } .rd-navbar-fixed .rd-navbar-nav-wrap::-webkit-scrollbar-track { background: #0045b6; border: none; border-radius: 0; } .rd-navbar-fixed .rd-navbar-nav-wrap.active { transform: translateX(0); } .rd-navbar-fixed .rd-navbar-nav { display: block; margin: 15px 0; height: auto; text-align: left; } .rd-navbar-fixed .rd-nav-item { text-align: left; } .rd-navbar-fixed .rd-nav-item + .rd-nav-item { margin-top: 4px; } .rd-navbar-fixed .rd-nav-link { display: block; padding: 14px 56px 14px 18px; } .rd-navbar-fixed li.opened > .rd-navbar-dropdown { padding: 4px 0 0; } .rd-navbar-fixed li.opened > .rd-navbar-megamenu { padding-top: 15px; padding-bottom: 15px; } .rd-navbar-fixed li.opened > .rd-menu { opacity: 1; height: auto; } .rd-navbar-fixed li.opened > .rd-navbar-submenu-toggle::after { transform: rotate(180deg); } .rd-navbar-fixed .rd-menu { display: none; transition: opacity 0.3s, height 0.4s ease; opacity: 0; height: 0; overflow: hidden; } .rd-navbar-fixed .rd-navbar-submenu { position: relative; } .rd-navbar-fixed .rd-navbar-submenu .rd-navbar-dropdown .rd-navbar-submenu-toggle:after { height: 34px; line-height: 34px; } .rd-navbar-fixed .rd-navbar-submenu .rd-navbar-dropdown > li > a { padding-left: 30px; } .rd-navbar-fixed .rd-navbar-submenu .rd-navbar-dropdown li li > a, .rd-navbar-fixed .rd-navbar-submenu .rd-navbar-megamenu ul li li > a { padding-left: 46px; } .rd-navbar-fixed .rd-navbar-submenu.opened > .rd-navbar-dropdown, .rd-navbar-fixed .rd-navbar-submenu.opened > .rd-navbar-megamenu { display: block; } .rd-navbar-fixed .rd-megamenu-list > li > a, .rd-navbar-fixed .rd-navbar-dropdown > li > a { display: block; padding: 9px 56px 9px 16px; font-size: 14px; line-height: 1.5; } .rd-navbar-fixed .rd-megamenu-list > li + li, .rd-navbar-fixed .rd-navbar-dropdown > li + li { margin-top: 3px; } .rd-navbar-fixed .rd-megamenu-list > li > a { padding-left: 30px; } .rd-navbar-fixed .rd-navbar-megamenu .rd-megamenu-title { position: relative; display: block; padding: 0 18px 7px; font-size: 16px; line-height: 1.5; } .rd-navbar-fixed .rd-navbar-megamenu .rd-megamenu-title::after { content: ''; position: absolute; left: 20px; right: 20px; bottom: 0; border-bottom: 1px solid; } .rd-navbar-fixed .rd-navbar-megamenu * + .rd-megamenu-list { margin-top: 11px; } .rd-navbar-fixed .rd-navbar-megamenu * + .rd-megamenu-title { margin-top: 20px; } .rd-navbar-fixed .rd-navbar-megamenu > li + li { margin-top: 20px; } .rd-navbar-fixed .rd-navbar-submenu-toggle { cursor: pointer; } .rd-navbar-fixed .rd-navbar-submenu-toggle::after { content: '\f107'; position: absolute; top: 0; right: 0; width: 56px; height: 48px; font: 400 14px "FontAwesome"; line-height: 48px; text-align: center; transition: 0.4s all ease; z-index: 2; cursor: pointer; } .rd-navbar-fixed .rd-navbar-collapse-toggle { display: block; top: 8px; z-index: 1081; } .rd-navbar-fixed .rd-navbar-collapse-content { position: fixed; right: 0; top: 56px; z-index: 1079; transform: translate3d(0, -10px, 0); padding: 30px; width: auto; border-radius: 0 0 0 6px; text-align: left; font-size: 14px; opacity: 0; visibility: hidden; transition: .3s; } .rd-navbar-fixed .rd-navbar-collapse-content.active { transform: translate3d(0, 0, 0); opacity: 1; visibility: visible; } .rd-navbar-fixed .rd-navbar-collapse-content > * + * { margin-top: 25px; } .rd-navbar-fixed .rd-navbar-main-outer, .rd-navbar-fixed .rd-navbar-main-element { position: absolute; float: left; width: 100%; } .rd-navbar-fixed .rd-navbar-search .rd-search { position: fixed; right: 0; left: 0; top: 56px; z-index: 1079; width: 100%; opacity: 0; visibility: hidden; transition: .3s; transform: translate3d(0, -100%, 0); } .rd-navbar-fixed .rd-navbar-search .rd-search-results-live { display: none; } .rd-navbar-fixed .rd-navbar-search .form-input { padding-right: 60px; } Line truncated
*
* RD Navbar Sidebar
*/ .rd-navbar-sidebar { display: block; background: #fff; } .rd-navbar-sidebar .rd-navbar-main-outer { padding-left: 15px; padding-right: 15px; } .rd-navbar-sidebar .rd-navbar-main { position: relative; display: flex; align-items: center; justify-content: space-between; padding: 22px 60px 22px 0; max-width: 1200px; margin-left: auto; margin-right: auto; transition: 0.5s cubic-bezier(0.4, 0, 0.2, 1); } .rd-navbar-sidebar .rd-navbar-main-element { display: flex; align-items: center; } .rd-navbar-sidebar .rd-navbar-main-element > * + * { margin-left: 20px; } .rd-navbar-sidebar .rd-navbar-toggle { position: absolute; right: 0; top: 50%; transform: translateY(-50%); display: block; z-index: 1102; } .rd-navbar-sidebar .rd-navbar-panel { min-width: 200px; text-align: center; } .rd-navbar-sidebar .rd-navbar-brand img { width: auto; height: auto; max-width: 200px; max-height: 200px; } .rd-navbar-sidebar .rd-navbar-nav-wrap { position: fixed; top: 0; bottom: 0; right: 0; z-index: 1101; width: 450px; padding: 94px 0 0 0; background: #fff; transition: 0.5s cubic-bezier(0.4, 0, 0.2, 1); transform: translateX(100%); box-shadow: 0 0 13px 0 rgba(174, 177, 190, 0.16); } .rd-navbar-sidebar .rd-navbar-nav-wrap.active { transition-delay: .1s; transform: translateX(0); } .rd-navbar-sidebar .rd-navbar-nav { height: calc(100vh - 100px); overflow-x: hidden; overflow-y: auto; -webkit-overflow-scrolling: touch; border-top: 1px solid #e8e9ee; } .rd-navbar-sidebar .rd-nav-item { position: relative; display: block; padding: 19px 30px 19px 40px; } .rd-navbar-sidebar .rd-nav-item.active .rd-nav-link { color: #0045b6; } .rd-navbar-sidebar .rd-nav-item .rd-nav-link, .rd-navbar-sidebar .rd-nav-item > .rd-navbar-submenu-toggle { font-size: 18px; } .rd-navbar-sidebar .rd-nav-item + .rd-nav-item { border-top: 1px solid #e8e9ee; } .rd-navbar-sidebar .rd-nav-item:last-child { border-bottom: 1px solid #e8e9ee; margin-bottom: 30px; } .rd-navbar-sidebar .rd-nav-link { max-width: calc(100% - 30px); word-break: break-all; font-size: 18px; line-height: 1.4; text-transform: none; color: #aeb1be; } .rd-navbar-sidebar .rd-nav-link:hover { color: #0045b6; } .rd-navbar-sidebar .rd-navbar-submenu .opened > .rd-navbar-submenu-toggle::after { transform: rotate(180deg); } .rd-navbar-sidebar .rd-navbar-submenu > .rd-navbar-dropdown, .rd-navbar-sidebar .rd-navbar-submenu > .rd-navbar-megamenu { display: none; opacity: 0; visibility: hidden; will-change: opacity, visibility; transition: opacity .2s; } .rd-navbar-sidebar .rd-navbar-submenu.opened > .rd-navbar-dropdown, .rd-navbar-sidebar .rd-navbar-submenu.opened > .rd-navbar-megamenu { display: block; opacity: 1; visibility: visible; } .rd-navbar-sidebar .rd-navbar-submenu > .rd-navbar-submenu > .rd-navbar-dropdown, .rd-navbar-sidebar .rd-navbar-submenu > .rd-navbar-submenu > .rd-navbar-megamenu { transform: translateY(30px); } .rd-navbar-sidebar .rd-navbar-submenu > .rd-navbar-submenu.opened > .rd-navbar-dropdown, .rd-navbar-sidebar .rd-navbar-submenu > .rd-navbar-submenu.opened > .rd-navbar-megamenu { transform: translateY(0); } .rd-navbar-sidebar .rd-navbar-submenu > .rd-navbar-submenu .rd-navbar-submenu > .rd-navbar-dropdown { transform: translateX(-20px); } .rd-navbar-sidebar .rd-navbar-submenu > .rd-navbar-submenu .rd-navbar-submenu.opened > .rd-navbar-dropdown { transform: translateX(0); } .rd-navbar-sidebar .rd-nav-item > .rd-navbar-submenu-toggle, .rd-navbar-sidebar .rd-nav-item .rd-navbar--has-dropdown > .rd-navbar-submenu-toggle { position: absolute; top: 0; right: 0; padding-top: inherit; padding-right: inherit; padding-left: 10px; margin-bottom: inherit; display: inline-block; width: 30px; margin-left: 5px; text-align: center; cursor: pointer; color: #495057; } .rd-navbar-sidebar .rd-nav-item > .rd-navbar-submenu-toggle:hover, .rd-navbar-sidebar .rd-nav-item .rd-navbar--has-dropdown > .rd-navbar-submenu-toggle:hover { color: #0045b6; } .rd-navbar-sidebar .rd-nav-item > .rd-navbar-submenu-toggle::after, .rd-navbar-sidebar .rd-nav-item .rd-navbar--has-dropdown > .rd-navbar-submenu-toggle::after { content: '\f107'; position: relative; display: inline-block; font-family: "FontAwesome"; font-size: inherit; line-height: inherit; text-align: center; vertical-align: middle; transition: 0.4s all ease; z-index: 2; will-change: transform; } .rd-navbar-sidebar .rd-nav-item .rd-navbar--has-dropdown > .rd-navbar-submenu-toggle { font-size: 14px; color: #aeb1be; margin-left: 7px; } .rd-navbar-sidebar .rd-menu { margin-top: 31px; } .rd-navbar-sidebar .rd-navbar-dropdown, .rd-navbar-sidebar .rd-megamenu-list { font-size: 14px; } .rd-navbar-sidebar .rd-navbar-dropdown li > a, .rd-navbar-sidebar .rd-megamenu-list li > a { position: relative; left: -13px; display: flex; padding: 4px 18px 4px 0; text-align: left; } .rd-navbar-sidebar .rd-navbar-dropdown li > a, .rd-navbar-sidebar .Line truncated
*
* RD Navbar Minimal
*
*/ .rd-navbar-minimal.rd-navbar-static { border-bottom: 1px solid transparent; } .rd-navbar-minimal.rd-navbar-static .rd-navbar-main-outer { padding-left: 15px; padding-right: 15px; } .rd-navbar-minimal.rd-navbar-static .rd-navbar-main { position: relative; display: flex; align-items: center; justify-content: space-between; max-width: 1170px; padding: 20px 0; margin-left: auto; margin-right: auto; } .rd-navbar-minimal.rd-navbar-static .rd-navbar-main-element { position: relative; display: flex; align-items: center; justify-content: space-between; min-width: 690px; } .rd-navbar-minimal.rd-navbar-static .rd-navbar-brand img { width: auto; height: auto; max-width: 200px; max-height: 200px; } .rd-navbar-minimal.rd-navbar-static .rd-navbar-megamenu { margin-top: 24px; width: calc(100% + 27px + 15px); } .rd-navbar-minimal.rd-navbar-static .rd-navbar-search-toggle span { font-size: 20px; } @media (min-width: 1200px) { .rd-navbar-minimal.rd-navbar-static .rd-navbar-main { padding: 30px 0; } .rd-navbar-minimal.rd-navbar-static .rd-menu { margin-top: 34px; } } .rd-navbar-minimal.rd-navbar-static.rd-navbar--is-stuck, .rd-navbar-minimal.rd-navbar-static.rd-navbar--is-clone { border-bottom-color: #e8e9ee; } .rd-navbar-minimal.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-main, .rd-navbar-minimal.rd-navbar-static.rd-navbar--is-clone .rd-navbar-main { padding: 20px 0; } .rd-navbar-minimal.rd-navbar-static.rd-navbar--is-stuck .rd-menu, .rd-navbar-minimal.rd-navbar-static.rd-navbar--is-clone .rd-menu { margin-top: 24px; } .rd-navbar-minimal.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-nav-item > .rd-navbar-submenu, .rd-navbar-minimal.rd-navbar-static.rd-navbar--is-clone .rd-navbar-nav-item > .rd-navbar-submenu { margin-top: 17px; } .rd-navbar-minimal.rd-navbar-fixed .rd-navbar-search-toggle { position: fixed; right: 10px; top: 5px; } .rd-navbar-minimal.rd-navbar-fixed .rd-navbar-search .form-input { border-width: 1px 0 1px 0; border-radius: 0; } .rd-navbar-minimal-wide.rd-navbar-static .rd-navbar-main { padding: 54px 0; } .rd-navbar-minimal-wide.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-main { padding: 21px 0; } .context-dark .rd-navbar-minimal .rd-nav-link, .bg-gray-700 .rd-navbar-minimal .rd-nav-link, .bg-gray-800 .rd-navbar-minimal .rd-nav-link, .bg-primary .rd-navbar-minimal .rd-nav-link, .bg-primary-darker .rd-navbar-minimal .rd-nav-link, .context-dark .rd-navbar-minimal .rd-navbar-submenu-toggle, .bg-gray-700 .rd-navbar-minimal .rd-navbar-submenu-toggle, .bg-gray-800 .rd-navbar-minimal .rd-navbar-submenu-toggle, .bg-primary .rd-navbar-minimal .rd-navbar-submenu-toggle, .bg-primary-darker .rd-navbar-minimal .rd-navbar-submenu-toggle, .context-dark .rd-navbar-minimal .rd-navbar-search-toggle, .bg-gray-700 .rd-navbar-minimal .rd-navbar-search-toggle, .bg-gray-800 .rd-navbar-minimal .rd-navbar-search-toggle, .bg-primary .rd-navbar-minimal .rd-navbar-search-toggle, .bg-primary-darker .rd-navbar-minimal .rd-navbar-search-toggle { color: #fff; } .context-dark .rd-navbar-minimal.rd-navbar-static, .bg-gray-700 .rd-navbar-minimal.rd-navbar-static, .bg-gray-800 .rd-navbar-minimal.rd-navbar-static, .bg-primary .rd-navbar-minimal.rd-navbar-static, .bg-primary-darker .rd-navbar-minimal.rd-navbar-static { background-color: transparent; } .context-dark .rd-navbar-minimal.rd-navbar-static .rd-nav-item.opened .rd-nav-link, .bg-gray-700 .rd-navbar-minimal.rd-navbar-static .rd-nav-item.opened .rd-nav-link, .bg-gray-800 .rd-navbar-minimal.rd-navbar-static .rd-nav-item.opened .rd-nav-link, .bg-primary .rd-navbar-minimal.rd-navbar-static .rd-nav-item.opened .rd-nav-link, .bg-primary-darker .rd-navbar-minimal.rd-navbar-static .rd-nav-item.opened .rd-nav-link, .context-dark .rd-navbar-minimal.rd-navbar-static .rd-nav-item.focus .rd-nav-link, .bg-gray-700 .rd-navbar-minimal.rd-navbar-static .rd-nav-item.focus .rd-nav-link, .bg-gray-800 .rd-navbar-minimal.rd-navbar-static .rd-nav-item.focus .rd-nav-link, .bg-primary .rd-navbar-minimal.rd-navbar-static .rd-nav-item.focus .rd-nav-link, .bg-primary-darker .rd-navbar-minimal.rd-navbar-static .rd-nav-item.focus .rd-nav-link, .context-dark .rd-navbar-minimal.rd-navbar-static .rd-nav-item.active .rd-nav-link, .bg-gray-700 .rd-navbar-minimal.rd-navbar-static .rd-nav-item.active .rd-nav-link, .bg-gray-800 .rd-navbar-minimal.rd-navbar-static .rd-nav-item.active .rd-nav-link, .bg-primary .rd-navbar-minimal.rd-navbar-static .rd-nav-item.active .rd-nav-link, .bg-primary-darker .rd-navbar-minimal.rd-navbar-static .rd-nav-item.active .rd-nav-link, .context-dark .rd-navbar-minimal.rd-navbar-static .rd-nav-item.opened .rd-navbar-submenu-toggle, .bg-gray-700 .rd-navbar-minimal.rd-navbar-static .rd-nav-item.opened .rd-navbar-submenu-toggle, .bg-gray-800 .rd-navbar-minimal.rd-navbar-static .rd-nav-item.opened .rd-navbar-submenu-toggle, .bg-primary .rd-navbar-minimal.rd-navbar-static .rd-nav-item.opened .rd-navbar-submenu-toggle, .bg-primary-Line truncated
*
* RD Navbar Corporate
*
*/ .rd-navbar-corporate.rd-navbar-static .rd-navbar-aside-outer, .rd-navbar-corporate.rd-navbar-static .rd-navbar-main-outer { padding-left: 15px; padding-right: 15px; } .rd-navbar-corporate.rd-navbar-static .rd-navbar-aside, .rd-navbar-corporate.rd-navbar-static .rd-navbar-main { max-width: 1170px; margin-left: auto; margin-right: auto; } .rd-navbar-corporate.rd-navbar-static .rd-navbar-aside { display: flex; align-items: center; justify-content: space-between; padding: 30px 0 40px; } .rd-navbar-corporate.rd-navbar-static .rd-navbar-main-outer { background: rgba(51, 51, 51, 0.1); position: absolute; top: 100%; z-index: 10; width: 100%; } .rd-navbar-corporate.rd-navbar-static .rd-navbar-main { position: relative; padding: 16px 0; } .rd-navbar-corporate.rd-navbar-static .rd-navbar-nav-wrap { position: relative; display: flex; flex-direction: row-reverse; align-items: center; justify-content: space-between; min-width: 690px; } .ie-10 .rd-navbar-corporate.rd-navbar-static .rd-navbar-collapse, .ie-11 .rd-navbar-corporate.rd-navbar-static .rd-navbar-collapse { width: 100%; max-width: 870px; } .ie-10 .rd-navbar-corporate.rd-navbar-static .unit, .ie-11 .rd-navbar-corporate.rd-navbar-static .unit { flex: auto; } .rd-navbar-corporate.rd-navbar-static .rd-navbar-panel + .rd-navbar-collapse { margin-left: 50px; } .rd-navbar-corporate.rd-navbar-static .rd-navbar-collapse-content { display: flex; align-items: center; justify-content: center; } .rd-navbar-corporate.rd-navbar-static .rd-navbar-collapse-content .button { flex-shrink: 0; } .rd-navbar-corporate.rd-navbar-static .rd-navbar-collapse-content > * { margin-top: 0; } .rd-navbar-corporate.rd-navbar-static .rd-navbar-collapse-content > * + * { margin-left: 50px; } .rd-navbar-corporate.rd-navbar-static .rd-menu { margin-top: 21px; } .rd-navbar-corporate.rd-navbar-static .rd-navbar-megamenu { margin-top: 24px; } @media (min-width: 1200px) { .rd-navbar-corporate.rd-navbar-static .rd-navbar-collapse-content > * + * { margin-left: 92px; } .rd-navbar-corporate.rd-navbar-static .rd-nav-item + .rd-nav-item { margin-left: 55px; } } .rd-navbar-corporate.rd-navbar-static.rd-navbar--is-stuck, .rd-navbar-corporate.rd-navbar-static.rd-navbar--is-clone { border-bottom-color: #e8e9ee; } .rd-navbar-corporate.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-aside-outer, .rd-navbar-corporate.rd-navbar-static.rd-navbar--is-clone .rd-navbar-aside-outer { display: none; } .rd-navbar-corporate.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-main-outer, .rd-navbar-corporate.rd-navbar-static.rd-navbar--is-clone .rd-navbar-main-outer { background: #232426; box-shadow: 0 5px 10px 0px rgba(20, 20, 28, 0.3); } .rd-navbar-corporate.rd-navbar-static.rd-navbar--is-stuck .rd-navbar-nav-item > .rd-navbar-submenu, .rd-navbar-corporate.rd-navbar-static.rd-navbar--is-clone .rd-navbar-nav-item > .rd-navbar-submenu { margin-top: 17px; } .rd-navbar-corporate.rd-navbar-fixed .rd-navbar-search { margin: 20px 5px; } .rd-navbar-corporate.rd-navbar-fixed .rd-navbar-search-toggle { display: none; } .rd-navbar-corporate.rd-navbar-fixed .rd-search { position: relative; top: 0; left: 0; transform: none; opacity: 1; visibility: visible; z-index: 1; } .rd-navbar-corporate.rd-navbar-fixed .rd-navbar-nav { margin: 0; } /**
*
* RD Navbar Thin
*
*/ .rd-navbar-thin.rd-navbar-static { background-color: #495057; border-bottom: 1px solid transparent; } .rd-navbar-thin.rd-navbar-static .rd-navbar-main-outer { padding-left: 15px; padding-right: 15px; } .rd-navbar-thin.rd-navbar-static .rd-navbar-main { position: relative; display: flex; align-items: center; justify-content: space-between; max-width: 1170px; padding: 23px 0; margin-left: auto; margin-right: auto; } .rd-navbar-thin.rd-navbar-static .rd-navbar-nav-wrap { position: absolute; top: 0; bottom: 0; left: 200px; right: 80px; z-index: 102; display: flex; align-items: center; justify-content: flex-end; min-width: 690px; background: #495057; opacity: 0; visibility: hidden; transition: .44s ease-in-out; } .rd-navbar-thin.rd-navbar-static .rd-navbar-nav-wrap .rd-navbar-brand { display: none; } .rd-navbar-thin.rd-navbar-static .rd-navbar-nav-wrap.active { opacity: 1; visibility: visible; } .rd-navbar-thin.rd-navbar-static .rd-navbar-panel { display: flex; align-items: center; justify-content: space-between; width: 100%; padding-right: 50px; } .ie-10 .rd-navbar-thin.rd-navbar-static .rd-navbar-panel, .ie-11 .rd-navbar-thin.rd-navbar-static .rd-navbar-panel { justify-content: flex-start; } .ie-10 .rd-navbar-thin.rd-navbar-static .rd-navbar-block, .ie-11 .rd-navbar-thin.rd-navbar-static .rd-navbar-block { width: 100%; justify-content: flex-end; } .rd-navbar-thin.rd-navbar-static .rd-navbar-toggle { position: absolute; right: 0; top: 50%; display: block; transform: translate3d(0, -50%, 0); } .rd-navbar-thin.rd-navbar-static .rd-navbar-block { display: flex; align-items: center; } .rd-navbar-thin.rd-navbar-static .rd-navbar-brand { max-width: 300px; } .rd-navbar-thin.rd-navbar-static .rd-navbar-brand img { width: auto; height: auto; max-width: 200px; max-height: 200px; } .rd-navbar-thin.rd-navbar-static .rd-nav-link, .rd-navbar-thin.rd-navbar-static .rd-navbar-submenu-toggle, .rd-navbar-thin.rd-navbar-static .rd-navbar-search-toggle { color: #fff; } .rd-navbar-thin.rd-navbar-static .rd-nav-item.opened .rd-nav-link, .rd-navbar-thin.rd-navbar-static .rd-nav-item.focus .rd-nav-link, .rd-navbar-thin.rd-navbar-static .rd-nav-item.active .rd-nav-link, .rd-navbar-thin.rd-navbar-static .rd-nav-item.opened .rd-navbar-submenu-toggle, .rd-navbar-thin.rd-navbar-static .rd-nav-item.focus .rd-navbar-submenu-toggle, .rd-navbar-thin.rd-navbar-static .rd-nav-item.active .rd-navbar-submenu-toggle, .rd-navbar-thin.rd-navbar-static .rd-nav-link:hover, .rd-navbar-thin.rd-navbar-static .rd-nav-link:hover ~ .rd-navbar-submenu-toggle, .rd-navbar-thin.rd-navbar-static .rd-navbar-search-toggle:hover { color: #1d73ff; } .rd-navbar-thin.rd-navbar-static .rd-menu { margin-top: 27px; } .rd-navbar-thin.rd-navbar-static .rd-navbar-megamenu { margin-top: 24px; width: calc(100% + 27px + 15px); } .rd-navbar-thin.rd-navbar-static .rd-navbar-search { position: static; } .rd-navbar-thin.rd-navbar-static * + .rd-navbar-search-toggle { margin-left: 60px; } .rd-navbar-thin.rd-navbar-static .rd-search { position: absolute; top: 0; bottom: 0; left: 0; right: 0; display: flex; width: calc(100% - 70px); margin: 0; } .rd-navbar-thin.rd-navbar-static .rd-search .form-wrap { display: flex; width: 100%; background: #495057; } .rd-navbar-thin.rd-navbar-static .rd-search .form-wrap::before { content: '\f43b'; position: absolute; top: 50%; transform: translate3d(0, -50%, 0); font-family: 'Material Design Icons'; font-size: 30px; line-height: 1; color: #fff; } .rd-navbar-thin.rd-navbar-static .rd-search .form-input, .rd-navbar-thin.rd-navbar-static .rd-search .form-label { padding-left: 40px; font-size: 30px; color: #fff; } .rd-navbar-thin.rd-navbar-static .rd-search .form-input { background-color: transparent; border: 0; border-radius: 0; } .rd-navbar-thin.rd-navbar-static .rd-search .form-label { top: 50%; transform: translate3d(0, -50%, 0); } .rd-navbar-thin.rd-navbar-static .rd-search-results-live { height: 100vh; margin: 1px 0 0 0; } .rd-navbar-thin.rd-navbar-static .search-list { display: flex; flex-wrap: wrap; margin-bottom: -20px; } .rd-navbar-thin.rd-navbar-static .search-list-item { width: 25%; padding-left: 15px; padding-right: 15px; margin-bottom: 20px; } .rd-navbar-thin.rd-navbar-static .search-list-item + .search-list-item { margin-top: 0; } .rd-navbar-thin.rd-navbar-static .rd-navbar-search-toggle { position: relative; z-index: 12; } .rd-navbar-thin.rd-navbar-static .rd-navbar-popup { left: 50%; z-index: 110; transform: translateX(-50%); margin-top: 30px; } .rd-navbar-thin.rd-navbar-static .list-inline-bordered { position: relative; } @media (min-width: 992px) and (max-width: 1199.98px) { .rd-navbar-thin.rd-navbar-static .rd-nav-item + .rd-nav-item { margin-left: 30px; } } @media (min-width: 1200px) { .rd-navbar-thin.rd-navbar-static .rd-navbar-panel { padding-right: 70px; } .rd-navbar-thin.rd-navbar-statLine truncated
*
* Swiper
*/ .swiper-container { position: relative; display: flex; margin: 0 auto; overflow: hidden; list-style: none; padding: 0; /* Fix of Webkit flickering */ z-index: 1; pointer-events: none; } .swiper-container, .swiper-container * { backface-visibility: hidden; } .swiper-container-no-flexbox .swiper-slide { float: left; } .swiper-container-vertical > .swiper-wrapper { flex-direction: column; } .swiper-wrapper { position: relative; z-index: 1; display: flex; align-self: stretch; align-items: stretch; width: 100%; height: auto; min-height: inherit; transition-property: transform; box-sizing: content-box; } .swiper-container-android .swiper-slide, .swiper-wrapper { transform: translate3d(0px, 0, 0); } .swiper-container-multirow > .swiper-wrapper { flex-wrap: wrap; } .swiper-container-free-mode > .swiper-wrapper { transition-timing-function: ease-out; margin: 0 auto; } .swiper-slide { flex-shrink: 0; width: 100%; height: 100%; position: relative; background-size: cover; transition-property: transform, transform; pointer-events: auto; contain: paint; } .swiper-invisible-blank-slide { visibility: hidden; } /* Auto Height */ .swiper-container-autoheight, .swiper-container-autoheight .swiper-slide { height: auto; } .swiper-container-autoheight .swiper-wrapper { align-items: flex-start; transition-property: transform, height; } /* 3D Effects */ .swiper-container-3d { perspective: 1200px; } .swiper-container-3d .swiper-wrapper, .swiper-container-3d .swiper-slide, .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-slide-shadow-bottom, .swiper-container-3d .swiper-cube-shadow { transform-style: preserve-3d; } .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-slide-shadow-bottom { position: absolute; left: 0; top: 0; width: 100%; height: 100%; pointer-events: none; z-index: 10; } .swiper-container-3d .swiper-slide-shadow-left { background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } .swiper-container-3d .swiper-slide-shadow-right { background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } .swiper-container-3d .swiper-slide-shadow-top { background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } .swiper-container-3d .swiper-slide-shadow-bottom { background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } /* IE10 Windows Phone 8 Fixes */ .swiper-container-wp8-horizontal, .swiper-container-wp8-horizontal > .swiper-wrapper { touch-action: pan-y; } .swiper-container-wp8-vertical, .swiper-container-wp8-vertical > .swiper-wrapper { touch-action: pan-x; } .swiper-button-prev, .swiper-button-next { position: absolute; top: 50%; width: 27px; height: 44px; margin-top: -22px; z-index: 10; cursor: pointer; background-size: 27px 44px; background-position: center; background-repeat: no-repeat; } .swiper-button-prev.swiper-button-disabled, .swiper-button-next.swiper-button-disabled { opacity: 0.35; cursor: auto; pointer-events: none; } .swiper-button-lock { display: none; } .swiper-pagination { position: absolute; text-align: center; transition: 300ms opacity; transform: translate3d(0, 0, 0); z-index: 10; } .swiper-pagination.swiper-pagination-hidden { opacity: 0; } /* Common Styles */ .swiper-pagination-fraction, .swiper-pagination-custom, .swiper-container-horizontal > .swiper-pagination-bullets { bottom: 10px; left: 0; width: 100%; } /* Bullets */ .swiper-pagination-bullets-dynamic { overflow: hidden; font-size: 0; } .swiper-pagination-bullets-dynamic .swiper-pagination-bullet { transform: scale(0.33); position: relative; } .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active { transform: scale(1); } .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev { transform: scale(0.66); } .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev { transform: scale(0.33); } .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next { transform: scale(0.66); } .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next { transform: scale(0.33); } .swiper-pagination-bullet { width: 8px; height: 8px; display: inline-block; border-radius: 100%; background: #000; } button.swiper-pagination-bullet { border: none; margin: 0; padding: 0; box-shadow: none; -webkit-appearance: none; -moz-appearance: none; appearance: none; } .swiper-pagination-clickable .swiper-pagination-bullet { cursor: pointer; } .swiper-pagination-bullet-active { opacity: 1; background: #007aff; } .swiper-container-vertical > .swiper-pagination-bullets { right: 10px; top: 50%; transform: translate3d(0px, -50%, 0); } Line truncated
*
* RD Google Map
*/ .google-map { color: #000; height: 200px; } .google-map img { max-width: none !important; } @media (min-width: 576px) { .google-map { height: 250px; } } @media (min-width: 768px) { .google-map { height: 300px; } } @media (min-width: 992px) { .google-map { height: 350px; } } @media (min-width: 1200px) { .google-map { height: 766px; } } .ie-10 .google-map, .ie-11 .google-map { height: 770px; } .map_locations { display: none; } .google-map-container, .google-map { width: 100%; } .google-map-markers { display: none; } /*
*
* Search Results
*/ .rd-search-results-live { position: absolute; left: 0; right: 0; top: 100%; max-height: 600px; overflow-y: auto; margin: -3px 0 0; text-align: left; z-index: 998; } .rd-search-results-live #search-results { position: relative; padding: 10px 0 0; border-bottom-left-radius: 6px; border-bottom-right-radius: 6px; color: #495057; background: #fff; border: 1px solid #c5c6cd; border-top: 0; opacity: 0; visibility: hidden; transform-origin: 50% 0; transform: scale(1, 0.9); transition: .3s all ease; } .rd-search-results-live #search-results.active { opacity: 1; visibility: visible; transform: scale(1, 1); } .rd-search-results-live #search-results.active .form-input { border-bottom-left-radius: 0; } .rd-search-results-live .search-quick-result { padding-left: 15px; padding-right: 15px; font-family: "Poppins", sans-serif; font-size: 14px; font-weight: 500; letter-spacing: .08em; line-height: 30px; text-transform: uppercase; color: #151515; } .rd-search-results-live .search-list { margin-top: 11px; } .rd-search-results-live .search-list li:only-child { padding: 0 15px 15px; } .rd-search-results-live .search-link { color: #aeb1be; } .rd-search-results-live .search-link:hover { color: #0045b6; } .rd-search-results-live .search-error { padding: 0 0 20px; font-size: 14px; line-height: 1.6; } .rd-search-results-live .search-title { position: relative; font-size: 16px; font-weight: 400; color: #151515; } .rd-search-results-live .search-title a:hover { color: #0045b6; } .rd-search-results-live .search-link { display: block; } .rd-search-results-live .search-list-item-all { margin-top: 18px; width: 100%; } .rd-search-results-live .search-submit { position: relative; overflow: hidden; z-index: 0; display: block; padding: 10px 20px; margin: 0 -1px; border-bottom-left-radius: 6px; border-bottom-right-radius: 6px; font-family: "Poppins", sans-serif; font-size: 12px; font-weight: 500; letter-spacing: 0.1em; text-transform: uppercase; text-align: center; color: #fff; background: #0045b6; } .rd-search-results-live .search-submit:hover { color: #fff; background: #4854ed; } .rd-search-results-live .match { display: none; } .not-empty ~ .rd-search-results-live { visibility: visible; opacity: 1; } .rd-search-results-live p { font-size: 14px; } .rd-search-results-live .search-list-item { padding: 0 15px; } .rd-search-results-live * + p { margin-top: 3px; } .rd-search-results-live .search-list-item + .search-list-item { margin-top: 17px; } .rd-search-results .search-list { counter-reset: li; text-align: left; padding-left: 0; font-size: 18px; list-style-type: none; overflow: hidden; } .rd-search-results .search-list li div { overflow: hidden; text-overflow: ellipsis; max-width: 100%; white-space: nowrap; } .rd-search-results .search-list li:only-child::before { display: none; } .rd-search-results .search-list-item { position: relative; padding-left: 40px; font-size: 16px; color: #9b9b9b; } .rd-search-results .search-list-item::before { content: counter(li, decimal) "."; counter-increment: li; position: absolute; left: 0; top: -0.1em; line-height: inherit; } .rd-search-results .search-title { position: relative; color: #0045b6; } .rd-search-results .search-title a { color: inherit; } .rd-search-results .search-title a:hover { color: #343db0; } .rd-search-results .search { color: #fff; padding: 0 .25em; background: #0045b6; } .rd-search-results .match { padding: 5px; font-size: 12px; line-height: 1.7; letter-spacing: .1em; text-transform: uppercase; color: #000; } .rd-search-results .match em { margin: 0; font-style: normal; } .rd-search-results * + .match { margin-top: 10px; } .rd-search-results .search-list-item + .search-list-item { margin-top: 40px; } * + .rd-search-results { margin-top: 40px; } @media (min-width: 768px) { .rd-search-results .search-list-item::before { top: 4px; } .rd-search-results * + p { margin-top: 12px; } * + .rd-search-results { margin-top: 55px; } } @media (min-width: 992px) { .rd-search-results .search-list-item { padding-left: 50px; } .rd-search-results * + p { margin-top: 17px; } .rd-search-results .search-list-item + .search-list-item { margin-top: 50px; } } @media (min-width: 1200px) { * + .rd-search-results { margin-top: 70px; } } @media (min-width: 1600px) { .rd-search-results .search-list-item + .search-list-item { margin-top: 70px; } } .rd-search-classic { position: relative; } .rd-search-classic .form-wrap-inner { position: relative; } .rd-search-classic .form-input { padding-right: 50px; } .rd-search-classic .form-input, .rd-search-classic .form-label { letter-spacing: 0; } .rd-search-classic .rd-search-submit { background: none; border: none; display: inline-block; padding: 0; outline: none; outline-offset: 0; cursor: pointer; -webkit-appearance: none; position: absolute; top: 0; right: 0; bottomLine truncated
*
* Isotope
*/ @keyframes sprite-animation { from { background-position: 0 0; } } [data-isotope-layout] { z-index: 0; display: block; overflow: hidden; min-height: 160px; margin-left: -15px; margin-right: -15px; transition: .4s all ease; } [data-isotope-layout]:after { content: ''; position: absolute; top: 50%; left: 50%; width: 64px; height: 64px; margin-top: 15px; background-image: url("../images/isotope-loader.png"); background-position: -1152px 0; animation: 0.7s sprite-animation steps(18) infinite; transition: .4s all ease; transform: translate3d(-50%, -50%, 0); } [data-isotope-layout] [class*="col-"] { display: block; opacity: 0; will-change: transform; backface-visibility: hidden; transition: .1s opacity ease-in; } [data-isotope-layout].isotope--loaded [class*="col-"] { opacity: 1; } [data-isotope-layout].isotope--loaded:after { opacity: 0; visibility: hidden; } .isotope.isotope-condensed { margin-left: 0; margin-right: 0; overflow: hidden; } .isotope.isotope-condensed [class*='col'] { padding: 0; margin: 0 0 30px 0; } @media (min-width: 576px) { .isotope.isotope-condensed [class*='col'] { margin: 0 -1px -1px 0; } } .isotope-filters-list { position: relative; font-size: 16px; margin-left: -20px; margin-bottom: -10px; } .isotope-filters-list > * { margin-left: 20px; } .isotope-filters-list::after { content: ''; position: absolute; left: 20px; right: 0; bottom: 10px; border-bottom: 1px solid #e8e9ee; } .isotope-filters-list li { display: inline-block; margin-bottom: 10px; } .isotope-filters-list a { position: relative; display: block; z-index: 1; padding-bottom: 10px; color: #74757f; } .isotope-filters-list a::after { content: ''; position: absolute; right: 0; bottom: 0; width: 0; height: 1px; transition: .4s; background: #0045b6; } .isotope-filters-list a:hover { color: #495057; } .isotope-filters-list a.active { color: #495057; } .isotope-filters-list a.active::after { right: auto; left: 0; width: 100%; } @media (min-width: 992px) { .isotope-filters-list { font-size: 18px; margin-left: -48px; } .isotope-filters-list > * { margin-left: 48px; } .isotope-filters-list::after { left: 45px; } } @media (min-width: 1200px) { .isotope-filters-list { font-size: 20px; } } @media (max-width: 767.98px) { .isotope-responsive { margin-left: -7px; margin-right: -7px; margin-bottom: -14px; } .isotope-responsive:empty { margin-bottom: 0; } .isotope-responsive > * { margin-bottom: 14px; } .isotope-responsive [class*='col'] { padding-left: 7px; padding-right: 7px; } } @media (min-width: 768px) { .isotope-responsive { margin-bottom: -30px; } .isotope-responsive:empty { margin-bottom: 0; } .isotope-responsive > * { margin-bottom: 30px; } } @media (max-width: 767.98px) { .isotope-filters-modern { position: relative; z-index: 10; } .isotope-filters-toggle { display: block; padding: 10px 20px; color: #fff; background: #0045b6; box-shadow: none; border: 0; } .isotope-filters-toggle .caret { position: relative; display: inline-block; margin-left: 5px; font-family: "FontAwesome"; font-size: 14px; transition: .22s; will-change: transform; } .isotope-filters-toggle .caret::before { content: '\f107'; } .isotope-filters-toggle.active .caret { transform: scale(1, -1); } .isotope-filters-list { position: absolute; top: 100%; left: 0; z-index: 10; min-width: 240px; margin: 5px 0 0 0; padding: 20px; border: 1px solid #e8e9ee; opacity: 0; visibility: hidden; background: #fff; transition: .3s ease-in; } .isotope-filters-list::after { display: none; } .isotope-filters-list.active { opacity: 1; visibility: visible; } .isotope-filters-list li { display: block; width: 100%; margin-left: 0; } .isotope-filters-list a { padding: 0; } .isotope-filters-list a::after { display: none; } } @media (min-width: 768px) { .isotope-filters-modern .isotope-filters-toggle { display: none; } } * + .isotope { margin-top: 30px; } @media (min-width: 768px) { * + .isotope { margin-top: 47px; } } .nav { display: block; } .tabs-custom { text-align: left; } .tabs-custom .nav-tabs { font-size: 0; line-height: 0; word-spacing: 0; border: 0; } .tabs-custom .nav-tabs:before, .tabs-custom .nav-tabs:after { display: none; } .tabs-custom .nav-item { float: none; border: 0; cursor: pointer; transition: .33s all ease; } .tabs-custom .nav-link { margin: 0; border-radius: 0; border: 0; } .tabs-custom .nav-link.active { cursor: default; border: 0; } .tab-content > .tab-pane { display: block; visibility: hidden; height: 0; overflow: hidden; } .tab-content > .active { visibility: visible; height: auto; overflow: visible; } .tabs-line .nav-tabs { position: relative; } .tabs-line .nav-link { font-size: 16px; line-height: 1.4; text-align: center; vertical-align: middle; } .tabs-line * + .tab-content { maLine truncated
* Card corporate
*/ .card-corporate { border-top: 1px solid #f5f6fa; text-align: left; } .card-corporate:last-child { border-bottom: 1px solid #f5f6fa; } .card-corporate .card-collapse { background: #fff; } .card-corporate .card-title a { position: relative; z-index: 1; padding: 15px 40px 15px 70px; font-size: 17px; line-height: 1.5; letter-spacing: 0; color: #495057; transition: 1.3s all ease; } .card-corporate .card-title a[aria-expanded='true'], .card-corporate .card-title a:hover { color: #0045b6; } .card-corporate .card-title a .card-arrow { transition: .33s; } .card-corporate .card-title a.collapsed { color: #495057; border-bottom-width: 0; } .card-corporate .card-title a.collapsed .card-arrow::before { opacity: 1; } .card-corporate .card-title a.collapsed .card-arrow::after { opacity: 0; } .card-corporate .card-arrow { position: absolute; top: 16px; left: 13px; z-index: 2; width: 20px; height: 20px; color: #0045b6; transition: .33s all ease; text-align: center; } .card-corporate .card-arrow::before, .card-corporate .card-arrow::after { position: absolute; z-index: 4; font-family: 'Material Design Icons'; font-size: 24px; line-height: 1; transition: .22s; } .card-corporate .card-arrow::before { content: '\f505'; opacity: 0; } .card-corporate .card-arrow::after { content: '\f466'; opacity: 1; } .card-corporate .card-collapse { position: relative; z-index: 1; color: #74757f; } .card-corporate .card-body { padding: 2px 44px 25px 70px; } @media (max-width: 767.98px) { .card-corporate .card-arrow { left: 0; } .card-corporate .card-title a, .card-corporate .card-body { padding-left: 50px; } } @media (min-width: 768px) { .card-corporate .card-title a { font-size: 20px; line-height: 1.4; } .card-corporate .card-arrow { top: 18px; } } /*
*
* Tooltop Custom
*/ .tooltip { font-size: 16px; line-height: 1.2; } .tooltip-inner { background-color: #0045b6; } .bs-tooltip-top .arrow::before { border-top-color: #0045b6; } .bs-tooltip-right .arrow::before { border-right-color: #0045b6; } .bs-tooltip-bottom .arrow::before { border-bottom-color: #0045b6; } .bs-tooltip-left .arrow::before { border-left-color: #0045b6; } @media (min-width: 1200px) { .tooltip-inner { padding: 9px 18px; } } /*
*
* Modal Custom
*/ .modal { display: flex !important; padding: 30px 15px 7vh; visibility: hidden; } .modal .close { cursor: pointer; color: #74757f; transition: .22s; } .modal .close span::before { content: '\f24c'; font-family: 'Material Design Icons'; } .modal .close:hover { color: #495057; } .modal.show { visibility: visible; } .modal.fade .modal-dialog { transform: translate3d(0, -30px, 0); } .modal.show .modal-dialog { transform: translate3d(0, 0, 0); } .modal-dialog { display: flex; align-items: flex-start; justify-content: center; margin: 0 auto; } .modal-content { height: 100%; border-radius: 6px; } .modal-body { height: 100%; overflow-y: auto; } @media (min-width: 768px) { .modal-header, .modal-body { padding-left: 30px; padding-right: 30px; } .modal-header { padding-top: 20px; padding-bottom: 20px; } .modal-body { padding-top: 30px; padding-bottom: 30px; } .modal-dialog { max-width: 800px; } } /*
*
* Progress Bars
*/ .progress-linear { position: relative; text-align: left; } .progress-linear .progress-header { display: flex; align-items: center; justify-content: space-between; transform: translate3d(0, -10px, 0); margin-bottom: -10px; margin-left: -5px; margin-right: -5px; } .progress-linear .progress-header > * { margin-top: 10px; padding-left: 5px; padding-right: 5px; } .progress-linear .progress-bar-linear-wrap { height: 2px; background: #f5f6fa; } .progress-linear .progress-bar-linear { width: 0; height: inherit; background: #0045b6; transition: .5s all ease-in-out; } .progress-linear .progress-value::after { content: '\0025'; } * + .progress-linear { margin-top: 25px; } * + .progress-linear-outer { margin-top: 25px; } * + .progress-bar-linear-wrap { margin-top: 8px; } .progress-linear + .progress-linear { margin-top: 20px; } .progress-linear-outer + .progress-linear-outer { margin-top: 20px; } @media (min-width: 768px) { * + .progress-linear { margin-top: 40px; } * + .progress-linear-outer { margin-top: 40px; } } @media (min-width: 1200px) { .progress-linear + .progress-linear { margin-top: 34px; } .progress-linear-outer + .progress-linear-outer { margin-top: 34px; } } /*
*
* Time Circles
*/ .time_circles { position: relative; width: 100%; } .time_circles > div { position: absolute; top: 0 !important; bottom: 0; display: flex; align-items: center; flex-wrap: wrap; justify-content: center; margin-top: -10px; text-align: center; } @media (min-width: 1200px) { #DateCountdown { width: 100%; } } .time_circles > div > h4 { position: absolute; left: 0; top: calc(100% + 14px); right: 0; transform: translateY(-100%); margin: 0; padding: 0; text-align: center; font-family: "Work Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size: 14px !important; line-height: 1.2 !important; color: #868e96; } .time_circles > div > h4 + * { margin-top: 0; } @media (min-width: 576px) { .time_circles > div > h4 { font-size: 16px !important; } } .time_circles > div > span { display: block; text-align: center; letter-spacing: 0; font-size: 24px !important; font-weight: 700; line-height: 1 !important; color: #111111; } .context-dark .time_circles > div > span, .bg-gray-700 .time_circles > div > span, .bg-gray-800 .time_circles > div > span, .bg-primary .time_circles > div > span, .bg-primary-darker .time_circles > div > span { color: #fff; } .context-dark .time_circles > div > h4, .bg-gray-700 .time_circles > div > h4, .bg-gray-800 .time_circles > div > h4, .bg-primary .time_circles > div > h4, .bg-primary-darker .time_circles > div > h4 { color: #fff; } .countdown-wrap { max-width: 530px; padding-bottom: 20px; } * + .countdown-wrap { margin-top: 35px; } .countdown-wrap + .button { margin-top: 40px; } /*
* jQuery mousewheel plugin
*/ /*
------------------------------------------------------------------------------------------------------------------------
1. BASIC STYLE
------------------------------------------------------------------------------------------------------------------------
*/ .mCustomScrollbar { -ms-touch-action: pinch-zoom; touch-action: pinch-zoom; /* direct pointer events to js */ } .mCustomScrollbar.mCS_no_scrollbar, .mCustomScrollbar.mCS_touch_action { -ms-touch-action: auto; touch-action: auto; } .mCustomScrollBox { /* contains plugin's markup */ position: relative; overflow: hidden; height: 100%; max-width: 100%; outline: none; direction: ltr; } .mCSB_container { /* contains the original content */ overflow: hidden; width: auto; height: auto; } /*
------------------------------------------------------------------------------------------------------------------------
2. VERTICAL SCROLLBAR
y-axis
------------------------------------------------------------------------------------------------------------------------
*/ .mCSB_inside > .mCSB_container { margin-right: 30px; } .mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden { margin-right: 0; } /* non-visible scrollbar */ .mCS-dir-rtl-custom > .mCSB_inside > .mCSB_container { /* RTL direction/left-side scrollbar */ margin-right: 0; margin-left: 30px; } .mCS-dir-rtl-custom > .mCSB_inside > .mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden { margin-left: 0; } /* RTL direction/left-side scrollbar */ .mCSB_scrollTools { /* contains scrollbar markup (draggable element, dragger rail, buttons etc.) */ position: absolute; width: 16px; height: auto; left: auto; top: 0; right: 0; bottom: 0; } .mCSB_outside + .mCSB_scrollTools { right: -26px; } /* scrollbar position: outside */ .mCS-dir-rtl-custom > .mCSB_inside > .mCSB_scrollTools, .mCS-dir-rtl-custom > .mCSB_outside + .mCSB_scrollTools { /* RTL direction/left-side scrollbar */ right: auto; left: 0; } .mCS-dir-rtl-custom > .mCSB_outside + .mCSB_scrollTools { left: -26px; } /* RTL direction/left-side scrollbar (scrollbar position: outside) */ .mCSB_scrollTools .mCSB_draggerContainer { /* contains the draggable element and dragger rail markup */ position: absolute; top: 0; left: 0; bottom: 0; right: 0; height: auto; } .mCSB_scrollTools a + .mCSB_draggerContainer { margin: 20px 0; } .mCSB_scrollTools .mCSB_draggerRail { width: 16px; height: 100%; margin: 0 auto; border-radius: 0; } .mCSB_scrollTools .mCSB_dragger { /* the draggable element */ cursor: pointer; width: 100%; height: 30px; /* minimum dragger height */ z-index: 1; } .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar { /* the dragger element */ position: relative; width: 16px; height: 100%; margin: 0 auto; border-radius: 0; text-align: center; } .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar { width: 12px; /* auto-expanded scrollbar */ } .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail { width: 8px; /* auto-expanded scrollbar */ } .mCSB_scrollTools .mCSB_buttonUp, .mCSB_scrollTools .mCSB_buttonDown { display: block; position: absolute; height: 20px; width: 100%; overflow: hidden; margin: 0 auto; cursor: pointer; } .mCSB_scrollTools .mCSB_buttonDown { bottom: 0; } /*
------------------------------------------------------------------------------------------------------------------------
3. HORIZONTAL SCROLLBAR
x-axis
------------------------------------------------------------------------------------------------------------------------
*/ .mCSB_horizontal.mCSB_inside > .mCSB_container { margin-right: 0; margin-bottom: 30px; } .mCSB_horizontal.mCSB_outside > .mCSB_container { min-height: 100%; } .mCSB_horizontal > .mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden { margin-bottom: 0; } /* non-visible scrollbar */ .mCSB_scrollTools.mCSB_scrollTools_horizontal { width: auto; height: 16px; top: auto; right: 0; bottom: 0; left: 0; } .mCustomScrollBox + .mCSB_scrollTools.mCSB_scrollTools_horizontal, .mCustomScrollBox + .mCSB_scrollTools + .mCSB_scrollTools.mCSB_scrollTools_horizontal { bottom: -26px; } /* scrollbar position: outside */ .mCSB_scrollTools.mCSB_scrollTools_horizontal a + .mCSB_draggerContainer { margin: 0 20px; } .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail { width: 100%; height: 2px; margin: 7px 0; } .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger { width: 30px; /* minimum dragger width */ height: 100%; left: 0; } .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar { width: 100%; height: 4px; margin: 6px auto; } .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar { height: 12px; /* auto-expanded scrollbar */ margin: 2px auto; } .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail { height: 8px; /* auto-expanded scrollbar */ margin: 4px 0; } .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft, .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight { display: block; position: absolute; width: 20px; height: 100%; overflow: hidden; margin: 0 auto; cursor: pointer; } .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft { left: 0; } .mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight { right: 0; } /*
------------------------------------------------------------------------------------------------------------------------
4. VERTICAL AND HORIZONTAL SCROLLBARS
yx-axis
------------------------------------------------------------------------------------------------------------------------
*/ .mCSB_container_wrapper { position: absolute; height: auto; width: auto; overflow: hidden; top: 0; left: 0; right: 0; bottom: 0; margin-right: 30px; margin-bottom: 30px; } .mCSB_container_wrapper > .mCSB_container { padding-right: 30px; padding-bottom: 30px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .mCSB_vertical_horizontal > .mCSB_scrollTools.mCSB_scrollTools_vertical { bottom: 20px; } .mCSB_vertical_horizontal > .mCSB_scrollTools.mCSB_scrollTools_horizontal { right: 20px; } /* non-visible horizontal scrollbar */ .mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden + .mCSB_scrollTools.mCSB_scrollTools_vertical { bottom: 0; } /* non-visible vertical scrollbar/RTL direction/left-side scrollbar */ .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden + .mCSB_scrollTools ~ .mCSB_scrollTools.mCSB_scrollTools_horizontal, .mCS-dir-rtl-custom > .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_scrollTools.mCSB_scrollTools_horizontal { right: 0; } /* RTL direction/left-side scrollbar */ .mCS-dir-rtl-custom > .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_scrollTools.mCSB_scrollTools_horizontal { left: 20px; } /* non-visible scrollbar/RTL direction/left-side scrollbar */ .mCS-dir-rtl-custom > .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden + .mCSB_scrollTools ~ .mCSB_scrollTools.mCSB_scrollTools_horizontal { left: 0; } .mCS-dir-rtl-custom > .mCSB_inside > .mCSB_container_wrapper { /* RTL direction/left-side scrollbar */ margin-right: 0; margin-left: 30px; } .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden > .mCSB_container { padding-right: 0; } .mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden > .mCSB_container { padding-bottom: 0; } .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden { margin-right: 0; /* non-visible scrollbar */ margin-left: 0; } /* non-visible horizontal scrollbar */ .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden { margin-bottom: 0; } /*
------------------------------------------------------------------------------------------------------------------------
5. TRANSITIONS
------------------------------------------------------------------------------------------------------------------------
*/ .mCSB_scrollTools, .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, .mCSB_scrollTools .mCSB_buttonUp, .mCSB_scrollTools .mCSB_buttonDown, .mCSB_scrollTools .mCSB_buttonLeft, .mCSB_scrollTools .mCSB_buttonRight { -webkit-transition: opacity .2s ease-in-out, background-color .2s ease-in-out; -moz-transition: opacity .2s ease-in-out, background-color .2s ease-in-out; -o-transition: opacity .2s ease-in-out, background-color .2s ease-in-out; transition: opacity .2s ease-in-out, background-color .2s ease-in-out; } .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar, .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail, .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar, .mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail { -webkit-transition: width .2s ease-out .2s, height .2s ease-out .2s, margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s, opacity .2s ease-in-out, background-color .2s ease-in-out; -moz-transition: width .2s ease-out .2s, height .2s ease-out .2s, margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s, opacity .2s ease-in-out, background-color .2s ease-in-out; -o-transition: width .2s ease-out .2s, height .2s ease-out .2s, margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s, opacity .2s ease-in-out, background-color .2s ease-in-out; transition: width .2s ease-out .2s, height .2s ease-out .2s, margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s, opacity .2s ease-in-out, background-color .2s ease-in-out; } /*
------------------------------------------------------------------------------------------------------------------------
6. SCROLLBAR COLORS, OPACITY AND BACKGROUNDS
------------------------------------------------------------------------------------------------------------------------
*/ /*
----------------------------------------
6.1 THEMES
----------------------------------------
*/ /* default theme ("light") */ .mCSB_scrollTools .mCSB_draggerRail { background-color: transparent; } .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar { background-color: #f2f3f8; } .mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, .mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, .mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar { background-color: #d1d4e6; } .mCSB_scrollTools .mCSB_buttonUp, .mCSB_scrollTools .mCSB_buttonDown, .mCSB_scrollTools .mCSB_buttonLeft, .mCSB_scrollTools .mCSB_buttonRight { background-image: url(../images/mCSB_buttons.png); /* css sprites */ background-repeat: no-repeat; opacity: 0.4; } .mCSB_scrollTools .mCSB_buttonUp { background-position: 0 0; } .mCSB_scrollTools .mCSB_buttonDown { background-position: 0 -20px; } .mCSB_scrollTools .mCSB_buttonLeft { background-position: 0 -40px; } .mCSB_scrollTools .mCSB_buttonRight { background-position: 0 -56px; } .mCSB_scrollTools .mCSB_buttonUp:hover, .mCSB_scrollTools .mCSB_buttonDown:hover, .mCSB_scrollTools .mCSB_buttonLeft:hover, .mCSB_scrollTools .mCSB_buttonRight:hover { opacity: 0.75; } .mCSB_scrollTools .mCSB_buttonUp:active, .mCSB_scrollTools .mCSB_buttonDown:active, .mCSB_scrollTools .mCSB_buttonLeft:active, .mCSB_scrollTools .mCSB_buttonRight:active { opacity: 0.9; } /* theme: "dark" */ .mCS-dark.mCSB_scrollTools .mCSB_draggerRail { background-color: #000000; background-color: rgba(0, 0, 0, 0.15); } .mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar { background-color: #000000; background-color: rgba(0, 0, 0, 0.75); } .mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar { background-color: rgba(0, 0, 0, 0.85); } .mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, .mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar { background-color: rgba(0, 0, 0, 0.9); } .mCS-dark.mCSB_scrollTools .mCSB_buttonUp { background-position: -80px 0; } .mCS-dark.mCSB_scrollTools .mCSB_buttonDown { background-position: -80px -20px; } .mCS-dark.mCSB_scrollTools .mCSB_buttonLeft { background-position: -80px -40px; } .mCS-dark.mCSB_scrollTools .mCSB_buttonRight { background-position: -80px -56px; } /*
*
* Owl Carousel
*/ .owl-carousel .animated { animation-duration: 1000ms; animation-fill-mode: both; } .owl-carousel .owl-animated-in { z-index: 0; } .owl-carousel .owl-animated-out { z-index: 1; } .owl-carousel .fadeOut { animation-name: fadeOut; } @keyframes fadeOut { 0% { opacity: 1; } 100% { opacity: 0; } } /*
* Owl Carousel - Auto Height Plugin
*/ .owl-height { transition: height 500ms ease-in-out; } /*
* Core Owl Carousel CSS File
*/ .owl-carousel { display: none; width: 100%; -webkit-tap-highlight-color: transparent; /* position relative and z-index fix webkit rendering fonts issue */ position: relative; z-index: 1; } .owl-carousel .owl-stage { position: relative; -ms-touch-action: pan-Y; } .owl-carousel .owl-stage:after { content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0; } .owl-carousel .owl-stage-outer { position: relative; overflow: hidden; /* fix for flashing background */ -webkit-transform: translate3d(0px, 0px, 0px); } .owl-carousel .owl-controls .owl-nav .owl-prev, .owl-carousel .owl-controls .owl-nav .owl-next, .owl-carousel .owl-controls .owl-dot { cursor: pointer; user-select: none; } .owl-carousel.owl-loaded { display: block; } .owl-carousel.owl-loading { opacity: 0; display: block; } .owl-carousel.owl-hidden { opacity: 0; } .owl-carousel .owl-refresh .owl-item { display: none; } .owl-carousel .owl-item { position: relative; min-height: 1px; float: left; -webkit-tap-highlight-color: transparent; -webkit-touch-callout: none; } .owl-carousel .owl-grab { cursor: move; cursor: -webkit-grab; cursor: grab; } .owl-carousel.owl-rtl { direction: rtl; } .owl-carousel.owl-rtl .owl-item { float: right; } /* No Js */ .no-js .owl-carousel { display: block; } /*
* Owl Carousel - Lazy Load Plugin
*/ .owl-carousel .owl-item .owl-lazy { opacity: 0; transition: opacity 400ms ease; } /*
* Owl Carousel - Video Plugin
*/ .owl-carousel .owl-video-wrapper { position: relative; height: 100%; background: #000000; } .owl-carousel .owl-video-play-icon { position: absolute; height: 80px; width: 80px; left: 50%; top: 50%; margin-left: -40px; margin-top: -40px; font: 400 40px/80px 'FontAwesome'; cursor: pointer; z-index: 1; transition: scale 100ms ease; } .owl-carousel .owl-video-play-icon:before { content: '\f144'; } .owl-carousel .owl-video-play-icon:hover { transform: scale(1.3); } .owl-carousel .owl-video-playing .owl-video-tn, .owl-carousel .owl-video-playing .owl-video-play-icon { display: none; } .owl-carousel .owl-video-tn { opacity: 0; height: 100%; background-position: center center; background-repeat: no-repeat; background-size: contain; transition: opacity 400ms ease; } .owl-carousel .owl-video-frame { position: relative; z-index: 1; } /*
* Owl Navigation
*/ .owl-nav.disabled { display: none !important; } .owl-prev, .owl-next { position: absolute; top: 50%; transform: translateY(-50%); font: 400 46px/50px 'FontAwesome'; color: #aeb1be; } .owl-prev:hover, .owl-next:hover { color: #0045b6; } .owl-prev { left: 0; } .owl-prev::before { content: '\f104'; } .owl-next { right: 0; } .owl-next::before { content: '\f105'; } /*
* Owl Pagination
*/ .owl-dots { margin-top: 10px; } .owl-dots.disabled { display: none !important; } @media (min-width: 576px) { .owl-dots { margin-top: 25px; } } button.owl-dot { background: none; border: none; display: inline-block; padding: 0; outline: none; outline-offset: 0; cursor: pointer; -webkit-appearance: none; } button.owl-dot::-moz-focus-inner { border: none; padding: 0; } .owl-dot { position: relative; display: inline-flex; align-items: center; justify-content: center; vertical-align: middle; width: 14px; height: 14px; border-radius: 50%; margin-left: 14px; margin-right: 14px; text-align: center; outline: none; cursor: pointer; } .owl-dot::before { content: ''; display: block; width: 100%; height: 100%; transform: scale3d(0.56, 0.56, 0.56); background: #e8e9ee; border-radius: inherit; transition: .2s; } .owl-dot:only-child { display: none; } .owl-dot:hover::before, .owl-dot.active::before { transform: scale3d(1, 1, 1); background-color: #0045b6; } * + .owl-carousel { margin-top: 30px; } .owl-carousel-1 { text-align: center; } .owl-carousel-1 .owl-stage { position: relative; display: flex; align-items: center; } .owl-carousel-centered-pagination .owl-dots { text-align: center; } .owl-carousel-indigo { position: relative; overflow: hidden; max-width: 100vw; padding: 0 15px; margin-left: auto; margin-right: auto; pointer-events: none; } .owl-carousel-indigo, .owl-carousel-indigo * { backface-visibility: hidden; } .owl-carousel-indigo .owl-stage-outer { padding: 23px; margin: -23px; } .owl-carousel-indigo .owl-item.active { pointer-events: auto; } .owl-carousel-indigo .owl-dots { pointer-events: auto; } .owl-carousel-indigo * + .owl-dots { margin-top: 25px; } @media (max-width: 575.98px) { .owl-carousel-indigo .owl-dot { width: 11px; height: 11px; margin: 0 6px; } } @media (min-width: 768px) { .owl-carousel-indigo { padding: 0 0; } .owl-carousel-indigo * + .owl-dots { margin-top: 60px; } } .owl-carousel-dots-space .owl-dots { margin-bottom: 25px; } .lg-sub-html, .lg-toolbar { background-color: rgba(0, 0, 0, 0.45); } @font-face { font-family: lg; src: url(../fonts/lg.eot?n1z373); src: url(../fonts/lg.eot?#iefixn1z373) format("embedded-opentype"), url(../fonts/lg.woff?n1z373) format("woff"), url(../fonts/lg.ttf?n1z373) format("truetype"), url(../fonts/lg.svg?n1z373#lg) format("svg"); font-weight: 400; font-style: normal; } .lg-icon { font-family: lg; speak: none; font-style: normal; font-weight: 400; font-variant: normal; text-transform: none; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .lg-actions .lg-next, .lg-actions .lg-prev { background-color: rgba(0, 0, 0, 0.45); border-radius: 2px; color: #999; cursor: pointer; display: block; font-size: 22px; margin-top: -10px; padding: 8px 10px 9px; position: absolute; top: 50%; z-index: 1180; border: none; outline: 0; } .lg-actions .lg-next.disabled, .lg-actions .lg-prev.disabled { pointer-events: none; opacity: .5; } .lg-actions .lg-next:hover, .lg-actions .lg-prev:hover { color: #fff; } .lg-actions .lg-next { right: 20px; } .lg-actions .lg-next:before { content: "\e095"; } .lg-actions .lg-prev { left: 20px; } .lg-actions .lg-prev:after { content: "\e094"; } @-webkit-keyframes lg-right-end { 0%, 100% { left: 0; } 50% { left: -30px; } } @-moz-keyframes lg-right-end { 0%, 100% { left: 0; } 50% { left: -30px; } } @-ms-keyframes lg-right-end { 0%, 100% { left: 0; } 50% { left: -30px; } } @keyframes lg-right-end { 0%, 100% { left: 0; } 50% { left: -30px; } } @-webkit-keyframes lg-left-end { 0%, 100% { left: 0; } 50% { left: 30px; } } @-moz-keyframes lg-left-end { 0%, 100% { left: 0; } 50% { left: 30px; } } @-ms-keyframes lg-left-end { 0%, 100% { left: 0; } 50% { left: 30px; } } @keyframes lg-left-end { 0%, 100% { left: 0; } 50% { left: 30px; } } .lg-outer.lg-right-end .lg-object { -webkit-animation: lg-right-end .3s; -o-animation: lg-right-end .3s; animation: lg-right-end .3s; position: relative; } .lg-outer.lg-left-end .lg-object { -webkit-animation: lg-left-end .3s; -o-animation: lg-left-end .3s; animation: lg-left-end .3s; position: relative; } .lg-toolbar { z-index: 1182; left: 0; position: absolute; top: 0; width: 100%; } .lg-toolbar .lg-icon { color: #999; cursor: pointer; float: right; font-size: 24px; height: 47px; line-height: 27px; padding: 10px 0; text-align: center; width: 50px; text-decoration: none !important; outline: 0; transition: color .2s linear; } @media (max-width: 575.98px) { .lg-toolbar .lg-icon { font-size: 21px; width: 36px; } } @media (max-width: 575.98px) { #lg-counter { font-size: 14px; line-height: 27px; } } .lg-toolbar .lg-icon:hover { color: #fff; } .lg-toolbar .lg-close:after { content: "\e070"; } .lg-toolbar .lg-download:after { content: Line truncated
*
* Material Parallax
*/ .parallax-content { position: relative; z-index: 1; } .parallax-container { position: relative; overflow: hidden; background-position: center center; background-size: cover; } .material-parallax { position: absolute; top: 0; left: -1px; right: -1px; bottom: 0; z-index: 0; background-position: center center; } .ipad .parallax-container, .iphone .parallax-container { background-attachment: scroll !important; } .material-parallax img { display: none; position: absolute; left: 50%; bottom: 0; min-width: 101%; min-height: 101%; max-width: none; transform: translate3d(-50%, 0, 0); } /*
*
* Slick Carousel
*/ /*rtl:begin:ignore*/ .slick-slider { position: relative; display: block; box-sizing: border-box; -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -ms-touch-action: pan-y; touch-action: pan-y; -webkit-tap-highlight-color: transparent; } .slick-list { position: relative; overflow: hidden; display: block; margin: 0; padding: 0; } .slick-list:focus { outline: none; } .slick-list.dragging { cursor: pointer; cursor: hand; } .slick-slider .slick-track, .slick-slider .slick-list { transform: translate3d(0, 0, 0); } .slick-track { position: relative; left: 0; top: 0; display: block; } .slick-track::before, .slick-track::after { content: ""; display: table; } .slick-track::after { clear: both; } .slick-loading .slick-track { visibility: hidden; } .slick-slide { float: left; height: 100%; min-height: 1px; display: none; } [dir="rtl"] .slick-slide { float: right; } .slick-slide img { display: block; } .slick-slide.slick-loading img { display: none; } .slick-slide.dragging img { pointer-events: none; } .slick-initialized .slick-slide { display: block; } .slick-loading .slick-slide { visibility: hidden; } .slick-vertical .slick-slide { display: block; height: auto; border: 1px solid transparent; } .slick-arrow.slick-hidden { display: none; } .slick-loading .slick-list { background: #fff url("./../images/ajax-loader.gif") center center no-repeat; } /* Icons */ /* Arrows */ .slick-prev, .slick-next { position: absolute; display: block; height: 20px; width: 20px; line-height: 0; font-size: 0; cursor: pointer; color: transparent; background-color: transparent; top: 50%; transform: translate(0, -50%); padding: 0; border: none; outline: none; z-index: 9; } .slick-prev.slick-disabled:before, .slick-next.slick-disabled:before { opacity: 0.25; } .slick-prev::before, .slick-next::before { font-family: "fl-bigmug-line"; font-size: 24px; line-height: 1; color: #0045b6; opacity: 0.75; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; transition: .22s; } .slick-prev:hover::before, .slick-next:hover::before { color: #343db0; } .slick-prev { left: 0; } [dir="rtl"] .slick-prev { left: auto; right: 0; } .slick-prev:before { content: ""; } [dir="rtl"] .slick-prev:before { content: ""; } .slick-next { right: 0; } [dir="rtl"] .slick-next { left: 0; right: auto; } .slick-next:before { content: ""; } [dir="rtl"] .slick-next:before { content: ""; } /* Dots */ .slick-dots { position: absolute; bottom: -45px; list-style: none; display: block; text-align: center; padding: 0; width: 100%; } .slick-dots li { position: relative; display: inline-block; height: 20px; width: 20px; margin: 0 5px; padding: 0; cursor: pointer; } .slick-dots li button { border: 0; background: transparent; display: block; height: 20px; width: 20px; outline: none; line-height: 0; font-size: 0; color: transparent; padding: 5px; cursor: pointer; } .slick-dots li button:hover, .slick-dots li button:focus { outline: none; } .slick-dots li button:hover:before, .slick-dots li button:focus:before { opacity: 1; } .slick-dots li button:before { position: absolute; top: 0; left: 0; content: ""; font-family: "fl-bigmug-line"; font-size: 6px; line-height: 20px; text-align: center; color: #0045b6; opacity: 0.25; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .slick-dots li.slick-active button:before { color: #0045b6; opacity: 0.75; } /*rtl:end:ignore*/ .slick-widget-testimonials .carousel-child { max-width: 570px; padding: 0 50px; margin-left: auto; margin-right: auto; } .slick-widget-testimonials .carousel-child .item { border-radius: 50%; cursor: pointer; transform: scale3d(0.66, 0.66, 0.66); transition: .22s; text-align: center; } .slick-widget-testimonials .carousel-child .slick-center { transform: scale3d(1, 1, 1); } .slick-widget-testimonials .carousel-child img { border-radius: inherit; max-width: 100%; margin: 0 auto; } @media (max-width: 575.98px) { .slick-widget-testimonials .carousel-child .slick-prev { left: 30px; } .slick-widget-testimonials .carousel-child .slick-next { right: 30px; } } .slick-widget-testimonials .carousel-parent { max-width: 780px; margin-left: auto; margin-right: auto; } .slick-widget-testimonials .carousel-parent .item > * { transform-origin: 50% 0; opacity: 0; transition: .44s; } .slick-widget-testimonials .carousel-parent .slick-active > * { opacity: 1; } .slick-widget-testimonials > * + * { margin-top: 20px; } * + .slick-widget-testimonials { margin-top: 30px; } @media (min-width: 768px) { * + .slick-widget-testimonials { margin-top: 55px; } } @media (min-width: 1200px) { * + .slick-widget-testimonials { margin-top: 75px; } } /*
*
* Select 2 v4
*/ .select2 { width: 100% !important; } .select2-container { box-sizing: border-box; display: inline-block; margin: 0; position: relative; vertical-align: middle; } .select2-container .select2-container--default .select2-selection--single { width: 100% !important; } .select2-container .select2-selection--single { display: block; cursor: pointer; user-select: none; } .select2-container .select2-selection--single .select2-selection__rendered { display: block; padding-left: 8px; padding-right: 20px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .select2-container .select2-selection--single .select2-selection__clear { position: relative; } .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { padding-right: 8px; padding-left: 20px; } .select2-container .select2-selection--multiple { display: block; cursor: pointer; min-height: 32px; user-select: none; -webkit-user-select: none; } .select2-container .select2-selection--multiple .select2-selection__rendered { display: inline-block; overflow: hidden; padding-left: 8px; text-overflow: ellipsis; white-space: nowrap; } .select2-container .select2-search--inline { float: left; } .select2-container .select2-search--inline .select2-search__field { border: none; font-size: 100%; margin-top: 5px; padding: 0; } .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { -webkit-appearance: none; } .select2-dropdown { position: absolute; left: -100000px; z-index: 1051; display: block; overflow: hidden; width: 100%; border: 1px; border-radius: 6px; background-color: #fff; box-shadow: 0 0 5px 0 rgba(73, 80, 87, 0.2); } .select2-results { display: block; } .select2-results__options { list-style: none; margin: 0; padding: 0; } .select2-results__option { padding: 6px; user-select: none; -webkit-user-select: none; } .select2-results__option[aria-selected] { cursor: pointer; } .select2-container--open .select2-dropdown { left: 0; } .select2-container--open .select2-dropdown--above { border-bottom: none; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .select2-container--open .select2-dropdown--below { border-top: none; border-top-left-radius: 0; border-top-right-radius: 0; } .select2-search--dropdown { display: block; padding: 4px; } .select2-search--dropdown .select2-search__field { padding: 4px; width: 100%; box-sizing: border-box; } .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { -webkit-appearance: none; } .select2-search--dropdown.select2-search--hide { display: none; } .select2-close-mask { border: 0; margin: 0; padding: 0; display: block; position: fixed; left: 0; top: 0; min-height: 100%; min-width: 100%; height: auto; width: auto; opacity: 0; z-index: 99; background-color: #fff; filter: alpha(opacity=0); } .select2-hidden-accessible { border: 0 !important; clip: rect(0 0 0 0) !important; height: 1px !important; margin: -1px !important; overflow: hidden !important; padding: 0 !important; position: absolute !important; width: 1px !important; } .select2-container--default .select2-selection--single { background-color: #fff; border: 1px; border-radius: 6px; border-style: solid; border-color: #aeb1be; } .select2-container--default .select2-selection--single .select2-selection__rendered { display: block; padding: 11px 29px 11px 19px; color: #495057; font-size: 16px; line-height: 1.5; font-weight: 400; min-height: 48px; } .select2-container--default .select2-selection--single .select2-selection__clear { cursor: pointer; float: right; font-weight: 700; } .select2-container--default .select2-selection--single .select2-selection__placeholder { color: #74757f; } .select2-container--default .select2-selection--single .select2-selection__arrow { position: absolute; top: 50%; transform: translate3d(0, -50%, 0); right: 5px; width: 20px; } .select2-container--default .select2-selection--single .select2-selection__arrow b { pointer-events: none; color: #495057; } .select2-container--default .select2-selection--single .select2-selection__arrow b::before { position: relative; display: inline-block; content: ""; font-family: "Material Design Icons"; font-size: 18px; transform: rotate(0deg); transition: .1s; } .select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { float: left; } .select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { left: 1px; right: auto; } .select2-container--default.select2-container--disabled .select2-selection--single { background-color: #f5f6fa; cursor: default; } .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { display: none; } .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrowLine truncated
*
* D3 Charts
*/ .c3 svg { padding-left: 4px; width: 100%; -webkit-tap-highlight-color: transparent; } .c3 path, .c3 line { fill: none; stroke: #9f9f9f; } .c3 text { font-family: "Work Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size: 16px; fill: #9b9b9b; user-select: none; } .c3-legend-item-tile, .c3-xgrid-focus, .c3-ygrid, .c3-event-rect, .c3-bars path { shape-rendering: crispEdges; } .c3-chart-arc path { stroke: #fff; } .c3-chart-arc text { fill: #fff; font-size: 14px; } /*-- Axis --*/ /*-- Grid --*/ .c3-grid line { stroke: #eaebee; } .c3-grid text { fill: #aaa; } .c3-xgrid, .c3-ygrid { stroke-dasharray: 0 0; } /*-- Text on Chart --*/ .c3-text.c3-empty { fill: #808080; font-size: 2em; } /*-- Line --*/ .c3-line { stroke-width: 3px; } /*-- Point --*/ .c3-circle._expanded_ { stroke-width: 2px; stroke: white; } .c3-selected-circle { fill: white; stroke-width: 2px; } /*-- Bar --*/ .c3-bar { stroke-width: 0; } .c3-bar._expanded_ { fill-opacity: 0.75; } /*-- Focus --*/ .c3-target.c3-focused { opacity: 1; } .c3-target.c3-focused path.c3-line, .c3-target.c3-focused path.c3-step { stroke-width: 2px; } .c3-target.c3-defocused { opacity: 0.3 !important; } /*-- Region --*/ .c3-region { fill: steelblue; fill-opacity: .1; } /*-- Brush --*/ .c3-brush .extent { fill-opacity: .1; fill: #000; } /*-- Select - Drag --*/ /*-- Legend --*/ .c3-legend-item { font-size: 12px; } .c3-legend-item-hidden { opacity: 0.15; } .c3-legend-background { opacity: 0.75; fill: white; stroke: lightgray; stroke-width: 1; } /*-- Title --*/ .c3-title { font: 14px sans-serif; } /*-- Tooltip --*/ .c3-tooltip-container { z-index: 10; } .c3-tooltip { border-collapse: collapse; border-spacing: 0; background-color: #fff; empty-cells: show; opacity: 0.9; border: 1px solid #ccc; } .c3-tooltip tr { border: 1px solid #ccc; } .c3-tooltip th { background-color: #aaa; font-size: 14px; line-height: 1.2; padding: 2px 5px; text-align: left; color: #fff; } .c3-tooltip td { font-size: 13px; padding: 3px 6px; background-color: #fff; color: #000; border-left: 1px dotted #999; } .c3-tooltip td > span { display: inline-block; width: 10px; height: 10px; margin-right: 6px; } .c3-tooltip td.value { text-align: right; } /*-- Area --*/ .c3-area { stroke-width: 0; opacity: 0.2; } /*-- Arc --*/ .c3-chart-arcs-title { dominant-baseline: middle; font-size: 1.3em; } .c3-chart-arcs .c3-chart-arcs-background { fill: #e0e0e0; stroke: none; } .c3-chart-arcs .c3-chart-arcs-gauge-unit { fill: #000; font-size: 16px; } .c3-chart-arcs .c3-chart-arcs-gauge-max { fill: #777; } .c3-chart-arcs .c3-chart-arcs-gauge-min { fill: #777; } .c3-chart-arc .c3-gauge-value { fill: #000; } .c3 .domain { stroke: #c8c8c8; } .d3-chart .tick line { display: none; } .d3-chart .c3-tooltip { opacity: 1; color: #fff; background: #0045b6; border: 1px solid #aeb1be; } .d3-chart .c3-tooltip tr th { padding: 8px 10px; color: #fff; background: #495057; } .d3-chart .c3-tooltip tr td { padding: 5px 10px; color: #838386; background: #fff; } .d3-chart .c3-tooltip .value { border-left: 1px solid #f2f3f9; } #line-chart .c3-tooltip-container { border-radius: 6px; overflow: hidden; box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.05); } #line-chart .c3-tooltip-container tr { border: 0; } #line-chart .c3-tooltip-container .name { border-left: 0; } #line-chart .c3-tooltip-container table { border: 0 solid transparent; border-radius: 6px; } #line-chart .c3-axis-y-label { transform: translateY(-10px); } #line-chart .c3-axis-y .tick text { transform: translateX(1px); } #line-chart .c3-axis-x { text-align: left; } #line-chart .c3-axis-x text { transform: translateX(-1px); text-anchor: start !important; } #line-chart .c3-legend-item { display: none !important; transform: translateY(15px); } #line-chart .c3-legend-item text { font-size: 16px; color: #29293a; } .d3-chart-wrap { width: 100%; max-width: 100%; overflow-y: hidden; overflow-x: auto; padding-bottom: 30px; } .d3-chart-wrap > .d3-chart { min-width: 520px; } .d3-chart-legend { transform: translateY(-5px); margin-bottom: -5px; margin-left: -30px; text-align: center; } .d3-chart-legend > * { display: inline-block; margin-top: 5px; margin-left: 30px; } .d3-chart-legend span { position: relative; display: inline-block; font-size: 16px; color: #74757f; cursor: pointer; } .d3-chart-legend span::before { content: ''; display: inline-block; height: 3px; width: 30px; margin-right: 12px; vertical-align: middle; } .d3-chart-legend span:nth-child(1)::before { background: #0045b6; } .d3-chart-legend span:nth-child(2)::before { background: #aeb1be; } * + .d3-chart-legend { margin-top: 20px; } @media (min-width: 1600px) { .d3-chart-legend span { font-size: 18px; } } .rd-range-input { border: none; background: none; width: auto; } .price-devider { paddinLine truncated
@@ -1,373 +0,0 @@
/* EXIT Realty / MKDRealtor public brand overrides on Real Estate theme */
:root {
--monica-primary: #00626c;
--monica-primary-light: #008898;
--monica-ink: #212121;
--monica-muted: #6b7280;
--monica-surface: #f4f7f7;
--monica-border: #d9e3e4;
}
.footer-brand-row {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 8px;
}
.footer-brand-row img {
height: 40px;
width: auto;
}
.about-subtitle {
font-size: 18px;
color: var(--monica-muted);
}
.page .button-primary,
.page .button-primary:focus,
.page .button-primary:active,
.cookie-consent-banner .button-primary,
.cookie-consent-banner .button-primary:focus,
.cookie-consent-banner .button-primary:active {
background-color: var(--monica-primary) !important;
border-color: var(--monica-primary) !important;
color: #fff !important;
}
.page .button-primary:hover,
.cookie-consent-banner .button-primary:hover {
background-color: var(--monica-primary-light) !important;
border-color: var(--monica-primary-light) !important;
color: #fff !important;
}
/* Theme default blue (#0045b6) → EXIT Realty teal on public chrome */
html .page .text-primary {
color: var(--monica-primary) !important;
}
.page .breadcrumbs-custom-path a,
.page a.link-default {
color: var(--monica-primary);
}
.page a.link-default:hover {
color: var(--monica-primary-light);
}
.page .button-gray-bordered:hover,
.page .button-gray-bordered:active,
.page .button-default:hover,
.page .button-default:active,
.page .button-accent-outline:hover,
.page .button-accent-outline:active,
.page .button-primary-outline:hover,
.page .button-primary-outline:active,
.page .button-primary-white:hover,
.page .button-primary-white:active,
.page .button.button-primary-lighten,
.page .button.button-primary-lighten:focus {
background-color: var(--monica-primary) !important;
border-color: var(--monica-primary) !important;
color: #fff !important;
}
.page .button.button-primary-lighten:hover,
.page .button.button-primary-lighten:active {
background-color: var(--monica-ink) !important;
border-color: var(--monica-ink) !important;
}
.page .button-accent-outline,
.page .button-accent-outline:focus {
border-color: var(--monica-primary) !important;
}
.page .button-video:hover {
color: var(--monica-primary) !important;
}
.page .btn-primary,
.page .btn-primary:active,
.page .btn-primary:focus {
background: var(--monica-primary) !important;
border-color: var(--monica-primary) !important;
}
.page .box-chloe__icon,
.page .box-light-icon,
.page .box-minimal-icon .box-chloe__icon {
color: var(--monica-primary);
}
/* Mobile drawer active/hover — theme uses #0045b6 */
.rd-navbar-fixed .rd-nav-item:hover .rd-nav-link,
.rd-navbar-fixed .rd-nav-item.focus .rd-nav-link,
.rd-navbar-fixed .rd-nav-item.active .rd-nav-link,
.rd-navbar-fixed .rd-nav-item.opened .rd-nav-link {
background: var(--monica-primary) !important;
color: #fff !important;
}
/* Scroll-to-top (injected outside .page) */
.ui-to-top {
background: var(--monica-primary) !important;
color: #fff !important;
box-shadow: 0 6px 16px rgba(0, 98, 108, 0.35);
}
.ui-to-top:hover,
.ui-to-top:focus {
background: var(--monica-primary-light) !important;
color: #fff !important;
}
/* Django flash messages */
.flash {
list-style: none;
margin: 0;
padding: 12px 0 0;
}
.flash li {
max-width: 1200px;
margin: 0 auto 8px;
padding: 12px 16px;
background: #e8f4f5;
border-left: 3px solid #00626c;
color: #0d4a52;
font-size: 14px;
}
.flash li.error,
.flash li.danger {
background: #fee2e2;
border-left-color: #b91c1c;
color: #991b1b;
}
/* Form field errors */
.form-wrap .errorlist {
list-style: none;
margin: 6px 0 0;
padding: 0;
color: #b91c1c;
font-size: 13px;
}
/* Cookie consent — match public EXIT Realty teal brand */
.cookie-consent-banner {
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 11000;
padding: 1rem 1.25rem;
background: rgba(17, 24, 28, 0.96);
border-top: 2px solid var(--monica-primary);
box-shadow: 0 -8px 24px rgba(0, 0, 0, 0.28);
font-family: "Work Sans", sans-serif;
}
.cookie-consent-content {
max-width: 1200px;
margin: 0 auto;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 1rem;
}
.cookie-consent-text {
flex: 1 1 420px;
color: #d7dee3;
font-size: 0.9375rem;
line-height: 1.45;
margin: 0;
font-family: "Work Sans", sans-serif;
font-weight: 400;
}
.cookie-consent-text-short {
display: none;
}
.cookie-consent-actions {
display: flex;
gap: 0.75rem;
flex-shrink: 0;
}
.cookie-consent-banner .button {
min-width: 10rem;
padding-left: 1.5rem;
padding-right: 1.5rem;
letter-spacing: 0.04em;
text-transform: uppercase;
font-family: "Work Sans", sans-serif;
font-weight: 500;
}
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
.footer-link-btn {
background: none;
border: none;
padding: 0;
color: #7dd3da;
font: inherit;
font-size: 13px;
cursor: pointer;
text-decoration: none;
}
.footer-link-btn:hover {
text-decoration: underline;
color: #a8e8ed;
}
.cookie-consent-link {
color: #7dd3da;
text-decoration: underline;
text-underline-offset: 2px;
}
.cookie-consent-link:hover {
color: #fff;
}
.legal-prose {
max-width: 42rem;
}
.legal-prose .legal-lead {
font-size: 1.05rem;
color: var(--monica-ink);
margin-bottom: 1.75rem;
}
.legal-prose h2 {
font-size: 1.35rem;
margin-top: 2rem;
margin-bottom: 0.75rem;
text-transform: none;
letter-spacing: 0;
}
.legal-prose p {
margin-bottom: 1rem;
color: #4b5563;
line-height: 1.65;
}
.legal-prose .legal-updated {
margin-top: 2.5rem;
font-size: 0.875rem;
color: var(--monica-muted);
}
/* Contact form — breathe on narrow viewports */
@media (max-width: 767.98px) {
.contact-form-section > .container {
padding-left: 1.5rem;
padding-right: 1.5rem;
}
.contact-form-section .section-lg {
padding-top: 2.5rem;
padding-bottom: 2.5rem;
}
.contact-form-section h3 {
margin-bottom: 1.25rem;
padding-right: 0.25rem;
}
.contact-message-form .form-wrap {
margin-bottom: 0.35rem;
}
.contact-message-form .form-label-outside {
margin-bottom: 0.35rem;
}
.contact-message-form .row-10 {
margin-left: 0;
margin-right: 0;
}
.contact-message-form .row-10 > [class*="col-"] {
padding-left: 0;
padding-right: 0;
}
}
.footer-aside-copy {
text-align: right;
}
.footer-aside-copy .rights {
margin: 0;
}
.footer-made-by {
margin: 6px 0 0;
font-size: 13px;
color: #9ca3af;
font-family: "Work Sans", sans-serif;
}
.footer-made-by a {
color: #d1d5db;
text-decoration: underline;
}
.footer-made-by a:hover {
color: #fff;
}
.footer-minimal .footer-made-by {
margin-top: 8px;
}
.footer-minimal-inner {
flex-wrap: wrap;
gap: 12px;
}
.pref-check {
display: flex;
align-items: center;
gap: 10px;
font-size: 15px;
color: var(--monica-ink);
cursor: pointer;
}
.pref-check input {
width: 16px;
height: 16px;
}
@media (max-width: 640px) {
.cookie-consent-banner {
padding: 0.625rem 0.75rem;
padding-bottom: max(0.625rem, env(safe-area-inset-bottom));
}
.cookie-consent-content {
flex-direction: column;
align-items: stretch;
gap: 0.625rem;
}
.cookie-consent-text-short {
display: inline;
}
.cookie-consent-text-full {
display: none;
}
.cookie-consent-text {
flex: none;
font-size: 0.8125rem;
line-height: 1.35;
}
.cookie-consent-actions {
width: 100%;
}
}
/* Keep hero slide-2 heading visually aligned with slide-1 h1 (SEO: one h1). */
.swiper-slider-minimal .jumbotron-classic-content h1.font-weight-bold,
.swiper-slider-minimal .jumbotron-classic-content h2.font-weight-bold {
font-size: 2.5rem;
line-height: 1.15;
margin-bottom: 0.5rem;
}
@media (min-width: 768px) {
.swiper-slider-minimal .jumbotron-classic-content h1.font-weight-bold,
.swiper-slider-minimal .jumbotron-classic-content h2.font-weight-bold {
font-size: 3.5rem;
}
}
@media (min-width: 1200px) {
.swiper-slider-minimal .jumbotron-classic-content h1.font-weight-bold,
.swiper-slider-minimal .jumbotron-classic-content h2.font-weight-bold {
font-size: 4.5rem;
}
}
Binary file not shown.
@@ -1,3 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg"><defs><font id="flaticon" horiz-adv-x="512"><font-face units-per-em="512" ascent="448" descent="-64" x-height="240" cap-height="480"/><missing-glyph horiz-adv-x="512"/><glyph unicode="&#xE000;" glyph-name="add137" horiz-adv-x="512" d="M448 256h-128V384c0 35.344 -28.656 64 -64 64c-35.344 0 -64 -28.656 -64 -64v-128H64 c-35.344 0 -64 -28.656 -64 -64c0 -35.344 28.656 -64 64 -64h128v-128c0 -35.344 28.656 -64 64 -64c35.344 0 64 28.656 64 64v128h128c35.344 0 64 28.656 64 64 C512 227.344 483.344 256 448 256zM448 160H288v-160c0 -17.68 -14.32 -32 -32 -32s-32 14.32 -32 32V160H64c-17.68 0 -32 14.32 -32 32c0 17.68 14.32 32 32 32h160V384 c0 17.68 14.32 32 32 32s32 -14.336 32 -32v-160h160c17.68 0 32 -14.32 32 -32C480 174.32 465.68 160 448 160z"/><glyph unicode="&#xE001;" glyph-name="add139" horiz-adv-x="512" d="M256 448C114.608 448 0 333.392 0 192s114.608 -256 256 -256c141.392 0 256 114.624 256 256 S397.392 448 256 448zM256 -32C132.288 -32 32 68.288 32 192S132.288 416 256 416s224 -100.288 224 -224S379.712 -32 256 -32zM352 208h-80v80c0 8.832 -7.168 16 -16 16 c-8.832 0 -16 -7.168 -16 -16v-80h-80c-8.832 0 -16 -7.168 -16 -16s7.168 -16 16 -16h80v-80c0 -8.832 7.168 -16 16 -16c8.832 0 16 7.168 16 16v80h80 c8.832 0 16 7.168 16 16S360.832 208 352 208z"/><glyph unicode="&#xE002;" glyph-name="add149" horiz-adv-x="512" d="M352 208h-80v80c0 8.832 -7.168 16 -16 16s-16 -7.168 -16 -16v-80h-80c-8.832 0 -16 -7.168 -16 -16 c0 -8.832 7.168 -16 16 -16h80v-80c0 -8.832 7.168 -16 16 -16s16 7.168 16 16v80h80c8.832 0 16 7.168 16 16C368 200.832 360.832 208 352 208zM448 448H64 C28.656 448 0 419.344 0 384v-384c0 -35.344 28.656 -64 64 -64h384c35.344 0 64 28.656 64 64V384C512 419.344 483.344 448 448 448zM480 0c0 -17.68 -14.336 -32 -32 -32H64 c-17.68 0 -32 14.32 -32 32V384c0 17.68 14.32 32 32 32h384c17.664 0 32 -14.336 32 -32V0z"/><glyph unicode="&#xE003;" glyph-name="airplane86" horiz-adv-x="512" d="M499.41888892363 435.14677837872c-19.960108794198 20.008128302123 -55.014349579517 15.318223028105 -75.070497389565 -4.7859442898678l-102.05746084347 -101.83336980648 L132.95001094195 399.29221246131C114.83064995154 403.98211773533 96.567230437365 410.03257573389 74.062087723138 387.49542001438c-11.460655891456 -11.492668896739 -35.326351330228 -35.406383843436 0 -70.796761184231l129.82874292681 -106.29918404352L119.42451620971 126.10923187545l-78.816019007722 19.687998249289 c-11.700753431081 3.025228999281 -19.559946228155 0.65626660830963 -25.562384718792 -5.9544189827117c-3.025228999281 -3.7775346234408 -24.970144121049 -20.056147810048 -9.6839340982274 -35.374370838153l91.653234126364 -71.292962766124l71.276956263482 -91.653234126364 c11.076499828055 -11.092506330697 21.368681026667 -4.1776971894832 35.43839684872 9.1877325163348c8.9156219714259 8.9316284740676 6.9948416544221 13.525494732235 4.3057492106168 26.554787882577l-17.81523744021 78.255791415262l83.89008034514 84.178197392691l106.12311251446 -129.82874292681 c35.326351330228 -35.390377340795 59.192046769 -11.476662394098 70.652702660456 0c22.505142714228 22.553162222153 16.454684715666 40.848594741614 11.78078594429 58.9999687373l-70.156501078563 189.6290367962l101.65729827743 102.00944133554 C514.24091036984 380.62863038109 519.37899771782 415.15465657924 499.41888892363 435.14677837872zM477.76209084941 381.63704004752l-119.28045768593 -119.71263325726l72.125300903492 -198.40060024385c3.553443586457 -11.364616875606 1.3445462219026 -25.434332697658 -3.2493200362647 -30.028198955826 c-13.045299652984 -13.077312658267 -22.361084190452 -6.8667896332885 -27.291087004095 -1.376559227186l-115.32685153344 155.80729671429l-127.65185856754 -128.11604714415l22.969331290837 -85.314659080251c-9.0596804952012 9.0916935004846 -62.02519773658 80.016506705849 -63.305717947916 81.297026917185 c-0.84834464001 0.84834464001 -70.492637634039 52.773439209679 -78.015693875637 60.312501953919l81.825241504361 -22.072967142902l130.08484696908 127.73189108075L95.942976834339 336.22659205302c-4.4338012317504 3.9696126551412 -10.260168193329 15.686372588864 1.6806827773783 27.659236564854 c4.5778597555257 4.5938662581674 18.503517053803 5.9864319879951 29.852127426767 2.4329884015381l197.5362491012 -71.581079813674l120.89711445275 118.72023009348c8.4354268921749 8.4514333948166 24.986150623691 7.5870822521649 32.381154844155 0.17607152905868 C485.70131615969 406.22302810517 486.19751774158 390.08847344234 477.76209084941 381.63704004752z"/><glyph unicode="&#xE004;" glyph-name="alarm31" horiz-adv-x="512" d="M368 208h-96V320c0 8.832 -7.168 16 -16 16c-8.832 0 -16 -7.168 -16 -16v-128 c0 -8.832 7.168 -16 16 -16h112c8.832 0 16 7.168 16 16C384 200.832 376.832 208 368 208zM32 368c0 26.512 21.488 48 48 48l32 0V448H80C35.824 448 0 412.176 0 368v-32 h32V368zM432 448h-32l0 -32l32 0c26.512 0 48 -21.488 48 -48v-32h32V368C512 412.176 476.176 448 432 448zM480 192c0 123.712 -100.288 224 -224 224C132.288 416 32 315.712 32 192 c0 -84.832 47.184 -158.64 116.72 -196.656L96 -64h48l42.96 42.96C208.72 Line truncated

Before

Width:  |  Height:  |  Size: 270 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 647 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 455 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 KiB

-299
View File
@@ -1,299 +0,0 @@
/**
* @module jQuery
* @author jQuery Foundation and other contributors
* @see https://code.jquery.com/jquery/
* @license MIT (jquery.org/license)
* @version 3.3.1
*/
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==c.call(e))&&(!(t=i(e))||"function"==typeof(n=f.call(t,"constructor")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function C(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",I="\\["+M+"*("+R+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+M+"*\\]",W=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+I+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),F=new RegExp("^"+M+"*,"+M+"*"),_=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)Line truncated
/**
* @module jQuery Migrate
* @author jQuery Foundation and other contributors
* @see https://code.jquery.com/jquery/
* @license MIT
* @version 3.0.0
*/
"undefined"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(a,b){"use strict";function c(c){var d=b.console;e[c]||(e[c]=!0,a.migrateWarnings.push(c),d&&d.warn&&!a.migrateMute&&(d.warn("JQMIGRATE: "+c),a.migrateTrace&&d.trace&&d.trace()))}function d(a,b,d,e){Object.defineProperty(a,b,{configurable:!0,enumerable:!0,get:function(){return c(e),d}})}a.migrateVersion="3.0.0",function(){var c=b.console&&b.console.log&&function(){b.console.log.apply(b.console,arguments)},d=/^[12]\./;c&&(a&&!d.test(a.fn.jquery)||c("JQMIGRATE: jQuery 3.0.0+ REQUIRED"),a.migrateWarnings&&c("JQMIGRATE: Migrate plugin loaded multiple times"),c("JQMIGRATE: Migrate is installed"+(a.migrateMute?"":" with logging active")+", version "+a.migrateVersion))}();var e={};a.migrateWarnings=[],void 0===a.migrateTrace&&(a.migrateTrace=!0),a.migrateReset=function(){e={},a.migrateWarnings.length=0},"BackCompat"===document.compatMode&&c("jQuery is not compatible with Quirks Mode");var f=a.fn.init,g=a.isNumeric,h=a.find,i=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,j=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g;a.fn.init=function(a){var b=Array.prototype.slice.call(arguments);return"string"==typeof a&&"#"===a&&(c("jQuery( '#' ) is not a valid selector"),b[0]=[]),f.apply(this,b)},a.fn.init.prototype=a.fn,a.find=function(a){var b=Array.prototype.slice.call(arguments);if("string"==typeof a&&i.test(a))try{document.querySelector(a)}catch(d){a=a.replace(j,function(a,b,c,d){return"["+b+c+'"'+d+'"]'});try{document.querySelector(a),c("Attribute selector with '#' must be quoted: "+b[0]),b[0]=a}catch(e){c("Attribute selector with '#' was not fixed: "+b[0])}}return h.apply(this,b)};var k;for(k in h)Object.prototype.hasOwnProperty.call(h,k)&&(a.find[k]=h[k]);a.fn.size=function(){return c("jQuery.fn.size() is deprecated; use the .length property"),this.length},a.parseJSON=function(){return c("jQuery.parseJSON is deprecated; use JSON.parse"),JSON.parse.apply(null,arguments)},a.isNumeric=function(b){function d(b){var c=b&&b.toString();return!a.isArray(b)&&c-parseFloat(c)+1>=0}var e=g(b),f=d(b);return e!==f&&c("jQuery.isNumeric() should not be called on constructed objects"),f},d(a,"unique",a.uniqueSort,"jQuery.unique is deprecated, use jQuery.uniqueSort"),d(a.expr,"filters",a.expr.pseudos,"jQuery.expr.filters is now jQuery.expr.pseudos"),d(a.expr,":",a.expr.pseudos,'jQuery.expr[":"] is now jQuery.expr.pseudos');var l=a.ajax;a.ajax=function(){var a=l.apply(this,arguments);return a.promise&&(d(a,"success",a.done,"jQXHR.success is deprecated and removed"),d(a,"error",a.fail,"jQXHR.error is deprecated and removed"),d(a,"complete",a.always,"jQXHR.complete is deprecated and removed")),a};var m=a.fn.removeAttr,n=a.fn.toggleClass,o=/\S+/g;a.fn.removeAttr=function(b){var d=this;return a.each(b.match(o),function(b,e){a.expr.match.bool.test(e)&&(c("jQuery.fn.removeAttr no longer sets boolean properties: "+e),d.prop(e,!1))}),m.apply(this,arguments)},a.fn.toggleClass=function(b){return void 0!==b&&"boolean"!=typeof b?n.apply(this,arguments):(c("jQuery.fn.toggleClass( boolean ) is deprecated"),this.each(function(){var c=this.getAttribute&&this.getAttribute("class")||"";c&&a.data(this,"__className__",c),this.setAttribute&&this.setAttribute("class",c||b===!1?"":a.data(this,"__className__")||"")}))};var p=!1;a.swap&&a.each(["height","width","reliableMarginRight"],function(b,c){var d=a.cssHooks[c]&&a.cssHooks[c].get;d&&(a.cssHooks[c].get=function(){var a;return p=!0,a=d.apply(this,arguments),p=!1,a})}),a.swap=function(a,b,d,e){var f,g,h={};p||c("jQuery.swap() is undocumented and deprecated");for(g in b)h[g]=a.style[g],a.style[g]=b[g];f=d.apply(a,e||[]);for(g in b)a.style[g]=h[g];return f};var q=a.data;a.data=function(b,d,e){var f;return d&&d!==a.camelCase(d)&&(f=a.hasData(b)&&q.call(this,b),f&&d in f)?(c("jQuery.data() always sets/gets camelCased names: "+d),arguments.length>2&&(f[d]=e),f[d]):q.apply(this,arguments)};var r=a.Tween.prototype.run;a.Tween.prototype.run=function(b){a.easing[this.easing].length>1&&(c('easing function "jQuery.easing.'+this.easing.toString()+'" should use only first argument'),a.easing[this.easing]=a.easing[this.easing].bind(a.easing,b,this.options.duration*b,0,1,this.options.duration)),r.apply(this,arguments)};var s=a.fn.load,t=a.event.fix;a.event.props=[],a.event.fixHooks={},a.event.fix=function(b){var d,e=b.type,f=this.fixHooks[e],g=a.event.props;if(g.length)for(c("jQuery.event.props are deprecated and removed: "+g.join());g.length;)a.event.addProp(g.pop());if(f&&!f._migrated_&&(f._migrated_=!0,c("jQuery.event.fixHooks are deprecated and removed: "+e),(g=f.props)&&g.length))for(;g.length;)a.event.addProp(g.pop());return d=t.call(this,b),f&&f.filter?f.filter(d,b):d},a.each(["load","unload","error"],function(b,d){a.fn[d]=function(){var a=Array.prototype.slice.call(arguments,0);return"load"===d&&"string"==typeof a[0]?s.apply(this,a):(c("jQuery.fn."+d+"() is deprecated"),a.splice(0,0,d),arguments.length?this.on.apply(this,aLine truncated
/**
* @module jQuery Cookie Plugin
* @see https://github.com/carhartl/jquery-cookie
* @license MIT
*/
!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){function n(e){return u.raw?e:encodeURIComponent(e)}function o(e){return u.raw?e:decodeURIComponent(e)}function i(e){return n(u.json?JSON.stringify(e):String(e))}function t(e){0===e.indexOf('"')&&(e=e.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return e=decodeURIComponent(e.replace(c," ")),u.json?JSON.parse(e):e}catch(e){}}function r(n,o){var i=u.raw?n:t(n);return e.isFunction(o)?o(i):i}var c=/\+/g,u=e.cookie=function(t,c,s){if(arguments.length>1&&!e.isFunction(c)){if("number"==typeof(s=e.extend({},u.defaults,s)).expires){var d=s.expires,f=s.expires=new Date;f.setMilliseconds(f.getMilliseconds()+864e5*d)}return document.cookie=[n(t),"=",i(c),s.expires?"; expires="+s.expires.toUTCString():"",s.path?"; path="+s.path:"",s.domain?"; domain="+s.domain:"",s.secure?"; secure":""].join("")}for(var a=t?void 0:{},p=document.cookie?document.cookie.split("; "):[],l=0,m=p.length;l<m;l++){var x=p[l].split("="),g=o(x.shift()),j=x.join("=");if(t===g){a=r(j,c);break}t||void 0===(j=r(j))||(a[g]=j)}return a};u.defaults={},e.removeCookie=function(n,o){return e.cookie(n,"",e.extend({},o,{expires:-1})),!e.cookie(n)}});
/**
* @module Device.js
* @see https://github.com/matthewhudson/device.js
* @license MIT
*/
(function(){var n,e,o,t,i,r,d,a,c,l;e=window.device,n={},window.device=n,t=window.document.documentElement,l=window.navigator.userAgent.toLowerCase(),n.ios=function(){return n.iphone()||n.ipod()||n.ipad()},n.iphone=function(){return!n.windows()&&i("iphone")},n.ipod=function(){return i("ipod")},n.ipad=function(){return i("ipad")},n.android=function(){return!n.windows()&&i("android")},n.androidPhone=function(){return n.android()&&i("mobile")},n.androidTablet=function(){return n.android()&&!i("mobile")},n.blackberry=function(){return i("blackberry")||i("bb10")||i("rim")},n.blackberryPhone=function(){return n.blackberry()&&!i("tablet")},n.blackberryTablet=function(){return n.blackberry()&&i("tablet")},n.windows=function(){return i("windows")},n.windowsPhone=function(){return n.windows()&&i("phone")},n.windowsTablet=function(){return n.windows()&&i("touch")&&!n.windowsPhone()},n.fxos=function(){return(i("(mobile;")||i("(tablet;"))&&i("; rv:")},n.fxosPhone=function(){return n.fxos()&&i("mobile")},n.fxosTablet=function(){return n.fxos()&&i("tablet")},n.meego=function(){return i("meego")},n.cordova=function(){return window.cordova&&"file:"===location.protocol},n.nodeWebkit=function(){return"object"==typeof window.process},n.mobile=function(){return n.androidPhone()||n.iphone()||n.ipod()||n.windowsPhone()||n.blackberryPhone()||n.fxosPhone()||n.meego()},n.tablet=function(){return n.ipad()||n.androidTablet()||n.blackberryTablet()||n.windowsTablet()||n.fxosTablet()},n.desktop=function(){return!n.tablet()&&!n.mobile()},n.television=function(){var n,e=["googletv","viera","smarttv","internet.tv","netcast","nettv","appletv","boxee","kylo","roku","dlnadoc","roku","pov_tv","hbbtv","ce-html"];for(n=0;n<e.length;){if(i(e[n]))return!0;n++}return!1},n.portrait=function(){return window.innerHeight/window.innerWidth>1},n.landscape=function(){return window.innerHeight/window.innerWidth<1},n.noConflict=function(){return window.device=e,this},i=function(n){return-1!==l.indexOf(n)},d=function(n){var e;return e=new RegExp(n,"i"),t.className.match(e)},o=function(n){var e=null;d(n)||(e=t.className.replace(/^\s+|\s+$/g,""),t.className=e+" "+n)},c=function(n){d(n)&&(t.className=t.className.replace(" "+n,""))},n.ios()?n.ipad()?o("ios ipad tablet"):n.iphone()?o("ios iphone mobile"):n.ipod()&&o("ios ipod mobile"):n.android()?o(n.androidTablet()?"android tablet":"android mobile"):n.blackberry()?o(n.blackberryTablet()?"blackberry tablet":"blackberry mobile"):n.windows()?o(n.windowsTablet()?"windows tablet":n.windowsPhone()?"windows mobile":"desktop"):n.fxos()?o(n.fxosTablet()?"fxos tablet":"fxos mobile"):n.meego()?o("meego mobile"):n.nodeWebkit()?o("node-webkit"):n.television()?o("television"):n.desktop()&&o("desktop"),n.cordova()&&o("cordova"),r=function(){n.landscape()?(c("portrait"),o("landscape")):(c("landscape"),o("portrait"))},a=Object.prototype.hasOwnProperty.call(window,"onorientationchange")?"orientationchange":"resize",window.addEventListener?window.addEventListener(a,r,!1):window.attachEvent?window.attachEvent(a,r):window[a]=r,r(),"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return n}):"undefined"!=typeof module&&module.exports?module.exports=n:window.device=n}).call(this);
/**
* @module jQuery resize event
* @see http://benalman.com/projects/jquery-resize-plugin/
* @license MIT
*/
(function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j="resize",d=j+"-special-event",b="delay",f="throttleWindow";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this);
/**
* @module jQuery easing
* @author George McGinley Smith
* @see http://gsgd.co.uk/sandbox/jquery/easing/
* @license BSD
* @version 1.4.0
*/
!function(n){"function"==typeof define&&define.amd?define(["jquery"],function(e){return n(e)}):"object"==typeof module&&"object"==typeof module.exports?exports=n(require("jquery")):n(jQuery)}(function(n){function e(n){var e=7.5625,t=2.75;return n<1/t?e*n*n:n<2/t?e*(n-=1.5/t)*n+.75:n<2.5/t?e*(n-=2.25/t)*n+.9375:e*(n-=2.625/t)*n+.984375}n.easing.jswing=n.easing.swing;var t=Math.pow,u=Math.sqrt,r=Math.sin,i=Math.cos,a=Math.PI,c=1.70158,o=1.525*c,s=2*a/3,f=2*a/4.5;n.extend(n.easing,{def:"easeOutQuad",swing:function(e){return n.easing[n.easing.def](e)},easeInQuad:function(n){return n*n},easeOutQuad:function(n){return 1-(1-n)*(1-n)},easeInOutQuad:function(n){return n<.5?2*n*n:1-t(-2*n+2,2)/2},easeInCubic:function(n){return n*n*n},easeOutCubic:function(n){return 1-t(1-n,3)},easeInOutCubic:function(n){return n<.5?4*n*n*n:1-t(-2*n+2,3)/2},easeInQuart:function(n){return n*n*n*n},easeOutQuart:function(n){return 1-t(1-n,4)},easeInOutQuart:function(n){return n<.5?8*n*n*n*n:1-t(-2*n+2,4)/2},easeInQuint:function(n){return n*n*n*n*n},easeOutQuint:function(n){return 1-t(1-n,5)},easeInOutQuint:function(n){return n<.5?16*n*n*n*n*n:1-t(-2*n+2,5)/2},easeInSine:function(n){return 1-i(n*a/2)},easeOutSine:function(n){return r(n*a/2)},easeInOutSine:function(n){return-(i(a*n)-1)/2},easeInExpo:function(n){return 0===n?0:t(2,10*n-10)},easeOutExpo:function(n){return 1===n?1:1-t(2,-10*n)},easeInOutExpo:function(n){return 0===n?0:1===n?1:n<.5?t(2,20*n-10)/2:(2-t(2,-20*n+10))/2},easeInCirc:function(n){return 1-u(1-t(n,2))},easeOutCirc:function(n){return u(1-t(n-1,2))},easeInOutCirc:function(n){return n<.5?(1-u(1-t(2*n,2)))/2:(u(1-t(-2*n+2,2))+1)/2},easeInElastic:function(n){return 0===n?0:1===n?1:-t(2,10*n-10)*r((10*n-10.75)*s)},easeOutElastic:function(n){return 0===n?0:1===n?1:t(2,-10*n)*r((10*n-.75)*s)+1},easeInOutElastic:function(n){return 0===n?0:1===n?1:n<.5?-t(2,20*n-10)*r((20*n-11.125)*f)/2:t(2,-20*n+10)*r((20*n-11.125)*f)/2+1},easeInBack:function(n){return 2.70158*n*n*n-c*n*n},easeOutBack:function(n){return 1+2.70158*t(n-1,3)+c*t(n-1,2)},easeInOutBack:function(n){return n<.5?t(2*n,2)*(7.189819*n-o)/2:(t(2*n-2,2)*((o+1)*(2*n-2)+o)+2)/2},easeInBounce:function(n){return 1-e(1-n)},easeOutBounce:e,easeInOutBounce:function(n){return n<.5?(1-e(1-2*n))/2:(1+e(2*n-1))/2}})});
/**
* @module TouchSwipe
* @see https://github.com/mattbryson/TouchSwipe-Jquery-Plugin
* @license MIT
* @version 1.6.18
*/
!function(e){"function"==typeof define&&define.amd&&define.amd.jQuery?define(["jquery"],e):e("undefined"!=typeof module&&module.exports?require("jquery"):jQuery)}(function(e){"use strict";function n(n){return!n||void 0!==n.allowPageScroll||void 0===n.swipe&&void 0===n.swipeStatus||(n.allowPageScroll=c),void 0!==n.click&&void 0===n.tap&&(n.tap=n.click),n||(n={}),n=e.extend({},e.fn.swipe.defaults,n),this.each(function(){var r=e(this),i=r.data(D);i||(i=new t(this,n),r.data(D,i))})}function t(n,t){function P(n){if(!(ce()||e(n.target).closest(t.excludedElements,Ve).length>0)){var r=n.originalEvent?n.originalEvent:n;if(!r.pointerType||"mouse"!=r.pointerType||0!=t.fallbackToMouseEvents){var i,l=r.touches,o=l?l[0]:r;return We=y,l?ze=l.length:!1!==t.preventDefaultEvents&&n.preventDefault(),je=0,Ne=null,He=null,Xe=null,_e=0,qe=0,Qe=0,Ce=1,Fe=0,Ye=we(),ue(),pe(0,o),!l||ze===t.fingers||t.fingers===T||X()?(Ze=Oe(),2==ze&&(pe(1,l[1]),qe=Qe=be(Ge[0].start,Ge[1].start)),(t.swipeStatus||t.pinchStatus)&&(i=j(r,We))):i=!1,!1===i?(We=x,j(r,We),i):(t.hold&&(nn=setTimeout(e.proxy(function(){Ve.trigger("hold",[r.target]),t.hold&&(i=t.hold.call(Ve,r,r.target))},this),t.longTapThreshold)),se(!0),null)}}}function L(e){var n=e.originalEvent?e.originalEvent:e;if(We!==m&&We!==x&&!ae()){var r,i=n.touches,l=fe(i?i[0]:n);if(Be=Oe(),i&&(ze=i.length),t.hold&&clearTimeout(nn),We=E,2==ze&&(0==qe?(pe(1,i[1]),qe=Qe=be(Ge[0].start,Ge[1].start)):(fe(i[1]),Qe=be(Ge[0].end,Ge[1].end),Xe=Ee(Ge[0].end,Ge[1].end)),Ce=ye(qe,Qe),Fe=Math.abs(qe-Qe)),ze===t.fingers||t.fingers===T||!i||X()){if(Ne=Se(l.start,l.end),He=Se(l.last,l.end),C(e,He),je=me(l.start,l.end),_e=Te(),de(Ne,je),r=j(n,We),!t.triggerOnTouchEnd||t.triggerOnTouchLeave){var o=!0;if(t.triggerOnTouchLeave){var u=Me(this);o=De(l.end,u)}!t.triggerOnTouchEnd&&o?We=U(E):t.triggerOnTouchLeave&&!o&&(We=U(m)),We!=x&&We!=m||j(n,We)}}else We=x,j(n,We);!1===r&&(We=x,j(n,We))}}function R(e){var n=e.originalEvent?e.originalEvent:e,r=n.touches;if(r){if(r.length&&!ae())return oe(n),!0;if(r.length&&ae())return!0}return ae()&&(ze=Ke),Be=Oe(),_e=Te(),_()||!H()?(We=x,j(n,We)):t.triggerOnTouchEnd||!1===t.triggerOnTouchEnd&&We===E?(!1!==t.preventDefaultEvents&&!1!==e.cancelable&&e.preventDefault(),We=m,j(n,We)):!t.triggerOnTouchEnd&&B()?(We=m,N(n,We,h)):We===E&&(We=x,j(n,We)),se(!1),null}function k(){ze=0,Be=0,Ze=0,qe=0,Qe=0,Ce=1,ue(),se(!1)}function A(e){var n=e.originalEvent?e.originalEvent:e;t.triggerOnTouchLeave&&(We=U(m),j(n,We))}function I(){Ve.unbind(Re,P),Ve.unbind(Ue,k),Ve.unbind(ke,L),Ve.unbind(Ae,R),Ie&&Ve.unbind(Ie,A),se(!1)}function U(e){var n=e,r=Q(),i=H(),l=_();return!r||l?n=x:!i||e!=E||t.triggerOnTouchEnd&&!t.triggerOnTouchLeave?!i&&e==m&&t.triggerOnTouchLeave&&(n=x):n=m,n}function j(e,n){var t,r=e.touches;return(z()||W())&&(t=N(e,n,p)),(Y()||X())&&!1!==t&&(t=N(e,n,f)),ie()&&!1!==t?t=N(e,n,d):le()&&!1!==t?t=N(e,n,g):re()&&!1!==t&&(t=N(e,n,h)),n===x&&k(e),n===m&&(r?r.length||k(e):k(e)),t}function N(n,c,s){var w;if(s==p){if(Ve.trigger("swipeStatus",[c,Ne||null,je||0,_e||0,ze,Ge,He]),t.swipeStatus&&!1===(w=t.swipeStatus.call(Ve,n,c,Ne||null,je||0,_e||0,ze,Ge,He)))return!1;if(c==m&&V()){if(clearTimeout(en),clearTimeout(nn),Ve.trigger("swipe",[Ne,je,_e,ze,Ge,He]),t.swipe&&!1===(w=t.swipe.call(Ve,n,Ne,je,_e,ze,Ge,He)))return!1;switch(Ne){case r:Ve.trigger("swipeLeft",[Ne,je,_e,ze,Ge,He]),t.swipeLeft&&(w=t.swipeLeft.call(Ve,n,Ne,je,_e,ze,Ge,He));break;case i:Ve.trigger("swipeRight",[Ne,je,_e,ze,Ge,He]),t.swipeRight&&(w=t.swipeRight.call(Ve,n,Ne,je,_e,ze,Ge,He));break;case l:Ve.trigger("swipeUp",[Ne,je,_e,ze,Ge,He]),t.swipeUp&&(w=t.swipeUp.call(Ve,n,Ne,je,_e,ze,Ge,He));break;case o:Ve.trigger("swipeDown",[Ne,je,_e,ze,Ge,He]),t.swipeDown&&(w=t.swipeDown.call(Ve,n,Ne,je,_e,ze,Ge,He))}}}if(s==f){if(Ve.trigger("pinchStatus",[c,Xe||null,Fe||0,_e||0,ze,Ce,Ge]),t.pinchStatus&&!1===(w=t.pinchStatus.call(Ve,n,c,Xe||null,Fe||0,_e||0,ze,Ce,Ge)))return!1;if(c==m&&F())switch(Xe){case u:Ve.trigger("pinchIn",[Xe||null,Fe||0,_e||0,ze,Ce,Ge]),t.pinchIn&&(w=t.pinchIn.call(Ve,n,Xe||null,Fe||0,_e||0,ze,Ce,Ge));break;case a:Ve.trigger("pinchOut",[Xe||null,Fe||0,_e||0,ze,Ce,Ge]),t.pinchOut&&(w=t.pinchOut.call(Ve,n,Xe||null,Fe||0,_e||0,ze,Ce,Ge))}}return s==h?c!==x&&c!==m||(clearTimeout(en),clearTimeout(nn),J()&&!ee()?($e=Oe(),en=setTimeout(e.proxy(function(){$e=null,Ve.trigger("tap",[n.target]),t.tap&&(w=t.tap.call(Ve,n,n.target))},this),t.doubleTapThreshold)):($e=null,Ve.trigger("tap",[n.target]),t.tap&&(w=t.tap.call(Ve,n,n.target)))):s==d?c!==x&&c!==m||(clearTimeout(en),clearTimeout(nn),$e=null,Ve.trigger("doubletap",[n.target]),t.doubleTap&&(w=t.doubleTap.call(Ve,n,n.target))):s==g&&(c!==x&&c!==m||(clearTimeout(en),$e=null,Ve.trigger("longtap",[n.target]),t.longTap&&(w=t.longTap.call(Ve,n,n.target)))),w}function H(){var e=!0;return null!==t.threshold&&(e=je>=t.threshold),e}function _(){var e=!1;return null!==t.cancelThreshold&&null!==Ne&&(e=ge(Ne)-je>=t.cancelThreshold),e}function q(){return null===t.pinchThreshold||Fe>=t.pLine truncated
/**
* @module Popper.js
* @author Federico Zivolo
* @see https://github.com/FezVrasta/popper.js
* @license MIT
* @version 1.11.0
*/
(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=window.getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e||-1!==['HTML','BODY','#document'].indexOf(e.nodeName))return window.document.body;var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll)/.test(r+s+p)?e:n(o(e))}function r(e){var o=e&&e.offsetParent,i=o&&o.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(o.nodeName)&&'static'===t(o,'position')?r(o):o:window.document.documentElement}function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstElementChild)===e)}function s(e){return null===e.parentNode?e:s(e.parentNode)}function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return window.document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=o?e:t,n=o?t:e,a=document.createRange();a.setStart(i,0),a.setEnd(n,0);var f=a.commonAncestorContainer;if(e!==f&&t!==f||i.contains(n))return p(f)?f:r(f);var l=s(e);return l.host?d(l.host,t):d(e,s(t).host)}function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:'top',o='top'===t?'scrollTop':'scrollLeft',i=e.nodeName;if('BODY'===i||'HTML'===i){var n=window.document.documentElement,r=window.document.scrollingElement||n;return r[o]}return e[o]}function f(e,t){var o=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=a(t,'top'),n=a(t,'left'),r=o?-1:1;return e.top+=i*r,e.bottom+=i*r,e.left+=n*r,e.right+=n*r,e}function l(e,t){var o='x'===t?'Left':'Top',i='Left'==o?'Right':'Bottom';return+e['border'+o+'Width'].split('px')[0]+ +e['border'+i+'Width'].split('px')[0]}function m(e,t,o,i){return _(t['offset'+e],o['client'+e],o['offset'+e],ie()?o['offset'+e]+i['margin'+('Height'===e?'Top':'Left')]+i['margin'+('Height'===e?'Bottom':'Right')]:0)}function h(){var e=window.document.body,t=window.document.documentElement,o=ie()&&window.getComputedStyle(t);return{height:m('Height',e,t,o),width:m('Width',e,t,o)}}function c(e){return se({},e,{right:e.left+e.width,bottom:e.top+e.height})}function g(e){var o={};if(ie())try{o=e.getBoundingClientRect();var i=a(e,'top'),n=a(e,'left');o.top+=i,o.left+=n,o.bottom+=i,o.right+=n}catch(e){}else o=e.getBoundingClientRect();var r={left:o.left,top:o.top,width:o.right-o.left,height:o.bottom-o.top},p='HTML'===e.nodeName?h():{},s=p.width||e.clientWidth||r.right-r.left,d=p.height||e.clientHeight||r.bottom-r.top,f=e.offsetWidth-s,m=e.offsetHeight-d;if(f||m){var g=t(e);f-=l(g,'x'),m-=l(g,'y'),r.width-=f,r.height-=m}return c(r)}function u(e,o){var i=ie(),r='HTML'===o.nodeName,p=g(e),s=g(o),d=n(e),a=t(o),l=+a.borderTopWidth.split('px')[0],m=+a.borderLeftWidth.split('px')[0],h=c({top:p.top-s.top-l,left:p.left-s.left-m,width:p.width,height:p.height});if(h.marginTop=0,h.marginLeft=0,!i&&r){var u=+a.marginTop.split('px')[0],b=+a.marginLeft.split('px')[0];h.top-=l-u,h.bottom-=l-u,h.left-=m-b,h.right-=m-b,h.marginTop=u,h.marginLeft=b}return(i?o.contains(d):o===d&&'BODY'!==d.nodeName)&&(h=f(h,o)),h}function b(e){var t=window.document.documentElement,o=u(e,t),i=_(t.clientWidth,window.innerWidth||0),n=_(t.clientHeight,window.innerHeight||0),r=a(t),p=a(t,'left'),s={top:r-o.top+o.marginTop,left:p-o.left+o.marginLeft,width:i,height:n};return c(s)}function y(e){var i=e.nodeName;return'BODY'===i||'HTML'===i?!1:'fixed'===t(e,'position')||y(o(e))}function w(e,t,i,r){var p={top:0,left:0},s=d(e,t);if('viewport'===r)p=b(s);else{var a;'scrollParent'===r?(a=n(o(e)),'BODY'===a.nodeName&&(a=window.document.documentElement)):'window'===r?a=window.document.documentElement:a=r;var f=u(a,s);if('HTML'===a.nodeName&&!y(s)){var l=h(),m=l.height,c=l.width;p.top+=f.top-f.marginTop,p.bottom=m+f.top,p.left+=f.left-f.marginLeft,p.right=c+f.left}else p=f}return p.left+=i,p.top+=i,p.right-=i,p.bottom-=i,p}function v(e){var t=e.width,o=e.height;return t*o}function E(e,t,o,i,n){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf('auto'))return e;var p=w(o,i,r,n),s={top:{width:p.width,height:t.top-p.top},right:{width:p.right-t.right,height:p.height},bottom:{width:p.width,height:p.bottom-t.bottom},left:{width:t.left-p.left,height:p.height}},d=Object.keys(s).map(function(e){return se({key:e},s[e],{area:v(s[e])})}).sort(function(e,t){return t.area-e.area}),a=d.filter(function(e){var t=e.width,i=e.height;return t>=o.clientWidth&&i>=o.clientHeight}),f=0<a.length?a[0].key:d[0].key,l=e.split('-')[1];return f+(l?'-'+l:'')}function x(e,t,o){var i=d(t,o);return u(o,i)}function O(e){var t=window.getComputedStyle(e),o=parseFloat(t.marginTop)+parseFloat(t.marginBottom),i=parseFloat(t.marginLeft)+parseFloat(t.marginRight),n={width:e.offsetWidth+i,height:e.offsetHeight+o};return n}function L(e){var t={left:'right',rLine truncated
/**
* @module Bootstrap
* @author Twitter, Inc.
* @see http://getbootstrap.com
* @license MIT
* @version 4.0.0beta2
*/
var bootstrap=function(t,e,n){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}e=e&&e.hasOwnProperty("default")?e.default:e,n=n&&n.hasOwnProperty("default")?n.default:n;var s=function(){function t(t){return{}.toString.call(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase()}function n(){return{bindType:r.end,delegateType:r.end,handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}}}function i(){if(window.QUnit)return!1;var t=document.createElement("bootstrap");for(var e in o)if("undefined"!=typeof t.style[e])return{end:o[e]};return!1}function s(t){var n=this,i=!1;return e(this).one(a.TRANSITION_END,function(){i=!0}),setTimeout(function(){i||a.triggerTransitionEnd(n)},t),this}var r=!1,o={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},a={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var n=t.getAttribute("data-target");n&&"#"!==n||(n=t.getAttribute("href")||"");try{return e(document).find(n).length>0?n:null}catch(t){return null}},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){e(t).trigger(r.end)},supportsTransitionEnd:function(){return Boolean(r)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(e,n,i){for(var s in i)if(Object.prototype.hasOwnProperty.call(i,s)){var r=i[s],o=n[s],l=o&&a.isElement(o)?"element":t(o);if(!new RegExp(r).test(l))throw new Error(e.toUpperCase()+': Option "'+s+'" provided type "'+l+'" but expected type "'+r+'".')}}};return r=i(),e.fn.emulateTransitionEnd=s,a.supportsTransitionEnd()&&(e.event.special[a.TRANSITION_END]=n()),a}(),r=function(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t},o=function(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e},a=function(){var t="alert",n=e.fn[t],i={CLOSE:"close.bs.alert",CLOSED:"closed.bs.alert",CLICK_DATA_API:"click.bs.alert.data-api"},o={ALERT:"alert",FADE:"fade",SHOW:"show"},a=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){t=t||this._element;var e=this._getRootElement(t);this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=s.getSelectorFromElement(t),i=!1;return n&&(i=e(n)[0]),i||(i=e(t).closest("."+o.ALERT)[0]),i},n._triggerCloseEvent=function(t){var n=e.Event(i.CLOSE);return e(t).trigger(n),n},n._removeElement=function(t){var n=this;e(t).removeClass(o.SHOW),s.supportsTransitionEnd()&&e(t).hasClass(o.FADE)?e(t).one(s.TRANSITION_END,function(e){return n._destroyElement(t,e)}).emulateTransitionEnd(150):this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger(i.CLOSED).remove()},t._jQueryInterface=function(n){return this.each(function(){var i=e(this),s=i.data("bs.alert");s||(s=new t(this),i.data("bs.alert",s)),"close"===n&&s[n](this)})},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},r(t,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}}]),t}();return e(document).on(i.CLICK_DATA_API,{DISMISS:'[data-dismiss="alert"]'}.DISMISS,a._handleDismiss(new a)),e.fn[t]=a._jQueryInterface,e.fn[t].Constructor=a,e.fn[t].noConflict=function(){return e.fn[t]=n,a._jQueryInterface},a}(),l=function(){var t="button",n=e.fn[t],i={ACTIVE:"active",BUTTON:"btn",FOCUS:"focus"},s={DATA_TOGGLE_CARROT:'[data-toggle^="button"]',DATA_TOGGLE:'[data-toggle="buttons"]',INPUT:"input",ACTIVE:".active",BUTTON:".btn"},o={CLICK_DATA_API:"click.bs.button.data-api",FOCUS_BLUR_DATA_API:"focus.bs.button.data-api blur.bs.button.data-api"},a=function(){function t(t){this._element=t}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,r=e(this._element).closest(s.DATA_TOGGLE)[0];if(r){var o=e(this._element).find(s.INPUT)[0];if(o){if("radio"===o.type)if(o.checked&&e(this._element).hasClass(i.ACTIVE))t=!1;else{var a=e(r).find(s.ACTIVE)[0];a&&e(a).removeClass(i.ACTIVE)}if(t){if(o.hasAttribute("disabled")||r.hasAttribute("disabled")||o.classList.contains("disabled")||r.classList.contains("disabled"))return;o.checked=!e(this._element).hasClass(i.ACTIVE),e(o).trigger("change")}o.focus(),n=!1}}n&&this._element.setAttribute("aria-pressed",!e(this._element).hasClass(i.ACTIVE)),t&&e(this._element).toggleClass(i.ACTIVE)},n.dispose=function(){e.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(n){return this.each(function(){var i=e(this).data("bs.button");i||(i=new t(this),e(this).data("bs.button",i)),"toggle"===n&&i[n]()})},r(t,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}}]),t}();return e(document).on(o.CLICK_DATA_API,s.DATA_TOGGLE_CARROT,function(t){t.preventDefault();Line truncated
/**
* @module Regula
* @description An annotation-based form-validation framework in Javascript
* @license BSD
* @version 1.3.4
* @copyright Robert Nyman, http://www.robertnyman.com
*/
(function(e,t){typeof define=="function"&&define.amd?define("utils/MapUtils",t):(typeof e.regulaModules=="undefined"&&(e.regulaModules={}),e.regulaModules.MapUtils=t())})(this,function(){return{iterateOverMap:function(e,t){var n=0;for(var r in e)e.hasOwnProperty(r)&&r!=="__size__"&&(t.call(e,r,e[r],n),n++)},exists:function(e,t){var n=!1,r=0;while(!n&&r<e.length)n=t==e[r],r++;return n},put:function(e,t,n){e.__size__||(e.__size__=0),e[t]||e.__size__++,e[t]=n},isEmpty:function(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0}}}),function(e,t){typeof define=="function"&&define.amd?define("utils/DOMUtils",t):(typeof e.regulaModules=="undefined"&&(e.regulaModules={}),e.regulaModules.DOMUtils=t())}(this,function(){function t(e,t,n,r){var i=t=="*"&&e.all?e.all:e.getElementsByTagName(t),s=[],o=typeof r!="undefined"?new RegExp("(^|\\s)"+r+"(\\s|$)"):null,u,a;for(var f=0;f<i.length;f++)u=i[f],a=u.getAttribute&&u.getAttribute(n),typeof a=="string"&&a.length>0&&(typeof r=="undefined"||o&&o.test(a))&&s.push(u);return s}function n(e,t){var n=e.getAttribute&&e.getAttribute(t)||null;if(!n){var r=e.attributes;for(var i=0;i<r.length;i++)r[i].nodeName===t&&(n=r[i].nodeValue)}return n}function r(){return"regula-generated-"+Math.floor(Math.random()*1e6)}function i(){return typeof document.createElement("input").checkValidity=="function"}var e={form:"The form",select:"The select box",textarea:"The text area",checkbox:"The checkbox",radio:"The radio button",text:"The text field",password:"The password",email:"The email",url:"The URL",number:"The number",datetime:"The datetime","datetime-local":"The local datetime",date:"The date",month:"The month",time:"The time",week:"The week",range:"The range",tel:"The telephone number",color:"The color"};return{friendlyInputNames:e,getElementsByAttribute:t,getAttributeValueForElement:n,generateRandomId:r,supportsHTML5Validation:i}}),function(e,t){typeof define=="function"&&define.amd?define("service/GroupService",t):(typeof e.regulaModules=="undefined"&&(e.regulaModules={}),e.regulaModules.GroupService=t())}(this,function(){var e={Default:0},t={0:"Default"},n=[],r=1;return{Group:e,ReverseGroup:t,deletedGroupIndices:n,firstCustomGroupIndex:r}}),function(e,t){typeof define=="function"&&define.amd?define("utils/ArrayUtils",t):(typeof e.regulaModules=="undefined"&&(e.regulaModules={}),e.regulaModules.ArrayUtils=t())}(this,function(){function e(e,t){var n="";for(var r=0;r<e.length;r++)n+=e[r]+t;return n.replace(new RegExp(t+"$"),"")}return{explode:e}}),function(e,t){typeof define=="function"&&define.amd?define("service/ExceptionService",["utils/ArrayUtils"],t):(typeof e.regulaModules=="undefined"&&(e.regulaModules={}),e.regulaModules.ExceptionService=t(e.regulaModules.ArrayUtils))}(this,function(e){function i(e,t,n){var r="";return e!=null?(r=e.id,t==""||t==null||t==undefined?r+=": ":r+="."+t+": "):t!=""&&t!=null&&t!=undefined&&(r="@"+t+": "),r+n}function s(t){var n="Function received: {";for(var r in t)t.hasOwnProperty(r)&&(typeof t[r]=="string"?n+=r+": "+t[r]+", ":t[r]instanceof Array&&(n+=r+": ["+e.explode(t[r],", ")+"], "));return n=n.replace(/, $/,"")+"}",n}var t={IllegalArgumentException:function(e){this.name="IllegalArgumentException",this.message=e},ConstraintDefinitionException:function(e){this.name="ConstraintDefinitionException",this.message=e},BindException:function(e){this.name="BindException",this.message=e},MissingFeatureException:function(e){this.name="MissingFeatureException",this.message=e}};for(var n in t)if(t.hasOwnProperty(n)){var r=t[n];r.prototype=new Error,r.prototype.constructor=r}return{Exception:t,generateExceptionMessage:i,explodeParameters:s}}),function(e,t){typeof define=="function"&&define.amd?define("service/ValidationService",["utils/DOMUtils","utils/MapUtils","service/GroupService","service/ExceptionService","utils/ArrayUtils"],t):(typeof e.regulaModules=="undefined"&&(e.regulaModules={}),e.regulaModules.ValidationService=t(e.regulaModules.DOMUtils,e.regulaModules.MapUtils,e.regulaModules.GroupService,e.regulaModules.ExceptionService,e.regulaModules.ArrayUtils))}(this,function(e,t,n,r,i){function h(e){for(var t in e)e.hasOwnProperty(t)&&v(t,e)}function p(e){s=e.config,o=e.ReverseConstraint,u=e.constraintDefinitions,a=e.boundConstraints}function v(e,t){var n=t[e],i=e.replace(/(^[A-Z]+)/,function(e){return e.toLowerCase()});n.async?c[i]=function(t,i,s){if(typeof s=="undefined")throw new r.Exception.IllegalArgumentException(e+" is an asynchronous constraint, but you have not provided a callback.");return n.validator.call(t,i,c,s)}:c[i]=function(e,t){return n.validator.call(e,t,c)}}function m(e,n,r,i){function a(n,r){var i={};for(var s in n)n.hasOwnProperty(s)&&s!="__size__"&&t.put(i,s,n[s]);if(r.length>0)for(var s in e)e.hasOwnProperty(s)&&s!="__size__"&&t.put(i,s,e[s]);return i}function f(e,t,n,i){var s=o[y.constraintType],a=W(t,s,i),f={group:n,constraintName:e.constraintName,custom:u[s].custom,compound:u[s].compound,async:u[s].async,constraintParameters:yLine truncated
/**
* @module jQuery Form Plugin
* @author M. Alsup
* @see http://malsup.com/jquery/form/
* @license MIT and GPL
* @version 3.51
*/
!function(e){"use strict";"function"==typeof define&&define.amd?define(["../jquery"],e):e("undefined"!=typeof jQuery?jQuery:window.Zepto)}(function(e){"use strict";function t(t){var r=t.data;t.isDefaultPrevented()||(t.preventDefault(),e(t.target).ajaxSubmit(r))}function r(t){var r=t.target,a=e(r);if(!a.is("[type=submit],[type=image]")){var n=a.closest("[type=submit]");if(0===n.length)return;r=n[0]}var i=this;if(i.clk=r,"image"==r.type)if(void 0!==t.offsetX)i.clk_x=t.offsetX,i.clk_y=t.offsetY;else if("function"==typeof e.fn.offset){var o=a.offset();i.clk_x=t.pageX-o.left,i.clk_y=t.pageY-o.top}else i.clk_x=t.pageX-r.offsetLeft,i.clk_y=t.pageY-r.offsetTop;setTimeout(function(){i.clk=i.clk_x=i.clk_y=null},100)}function a(){if(e.fn.ajaxSubmit.debug){var t="[jquery.form] "+Array.prototype.join.call(arguments,"");window.console&&window.console.log?window.console.log(t):window.opera&&window.opera.postError&&window.opera.postError(t)}}var n={};n.fileapi=void 0!==e("<input type='file'/>").get(0).files,n.formdata=void 0!==window.FormData;var i=!!e.fn.prop;e.fn.attr2=function(){if(!i)return this.attr.apply(this,arguments);var e=this.prop.apply(this,arguments);return e&&e.jquery||"string"==typeof e?e:this.attr.apply(this,arguments)},e.fn.ajaxSubmit=function(t){function r(r){var a,n,i=e.param(r,t.traditional).split("&"),o=i.length,s=[];for(a=0;o>a;a++)i[a]=i[a].replace(/\+/g," "),n=i[a].split("="),s.push([decodeURIComponent(n[0]),decodeURIComponent(n[1])]);return s}function o(a){for(var n=new FormData,i=0;i<a.length;i++)n.append(a[i].name,a[i].value);if(t.extraData){var o=r(t.extraData);for(i=0;i<o.length;i++)o[i]&&n.append(o[i][0],o[i][1])}t.data=null;var s=e.extend(!0,{},e.ajaxSettings,t,{contentType:!1,processData:!1,cache:!1,type:u||"POST"});t.uploadProgress&&(s.xhr=function(){var r=e.ajaxSettings.xhr();return r.upload&&r.upload.addEventListener("progress",function(e){var r=0,a=e.loaded||e.position,n=e.total;e.lengthComputable&&(r=Math.ceil(a/n*100)),t.uploadProgress(e,a,n,r)},!1),r}),s.data=null;var c=s.beforeSend;return s.beforeSend=function(e,r){r.data=t.formData?t.formData:n,c&&c.call(this,e,r)},e.ajax(s)}function s(r){function n(e){var t=null;try{e.contentWindow&&(t=e.contentWindow.document)}catch(r){a("cannot get iframe.contentWindow document: "+r)}if(t)return t;try{t=e.contentDocument?e.contentDocument:e.document}catch(r){a("cannot get iframe.contentDocument: "+r),t=e.document}return t}function o(){function t(){try{var e=n(g).readyState;a("state = "+e),e&&"uninitialized"==e.toLowerCase()&&setTimeout(t,50)}catch(r){a("Server abort: ",r," (",r.name,")"),s(k),j&&clearTimeout(j),j=void 0}}var r=f.attr2("target"),i=f.attr2("action"),o="multipart/form-data",c=f.attr("enctype")||f.attr("encoding")||o;w.setAttribute("target",p),(!u||/post/i.test(u))&&w.setAttribute("method","POST"),i!=m.url&&w.setAttribute("action",m.url),m.skipEncodingOverride||u&&!/post/i.test(u)||f.attr({encoding:"multipart/form-data",enctype:"multipart/form-data"}),m.timeout&&(j=setTimeout(function(){T=!0,s(D)},m.timeout));var l=[];try{if(m.extraData)for(var d in m.extraData)m.extraData.hasOwnProperty(d)&&l.push(e.isPlainObject(m.extraData[d])&&m.extraData[d].hasOwnProperty("name")&&m.extraData[d].hasOwnProperty("value")?e('<input type="hidden" name="'+m.extraData[d].name+'">').val(m.extraData[d].value).appendTo(w)[0]:e('<input type="hidden" name="'+d+'">').val(m.extraData[d]).appendTo(w)[0]);m.iframeTarget||v.appendTo("body"),g.attachEvent?g.attachEvent("onload",s):g.addEventListener("load",s,!1),setTimeout(t,15);try{w.submit()}catch(h){var x=document.createElement("form").submit;x.apply(w)}}finally{w.setAttribute("action",i),w.setAttribute("enctype",c),r?w.setAttribute("target",r):f.removeAttr("target"),e(l).remove()}}function s(t){if(!x.aborted&&!F){if(M=n(g),M||(a("cannot access response document"),t=k),t===D&&x)return x.abort("timeout"),void S.reject(x,"timeout");if(t==k&&x)return x.abort("server abort"),void S.reject(x,"error","server abort");if(M&&M.location.href!=m.iframeSrc||T){g.detachEvent?g.detachEvent("onload",s):g.removeEventListener("load",s,!1);var r,i="success";try{if(T)throw"timeout";var o="xml"==m.dataType||M.XMLDocument||e.isXMLDoc(M);if(a("isXml="+o),!o&&window.opera&&(null===M.body||!M.body.innerHTML)&&--O)return a("requeing onLoad callback, DOM not available"),void setTimeout(s,250);var u=M.body?M.body:M.documentElement;x.responseText=u?u.innerHTML:null,x.responseXML=M.XMLDocument?M.XMLDocument:M,o&&(m.dataType="xml"),x.getResponseHeader=function(e){var t={"content-type":m.dataType};return t[e.toLowerCase()]},u&&(x.status=Number(u.getAttribute("status"))||x.status,x.statusText=u.getAttribute("statusText")||x.statusText);var c=(m.dataType||"").toLowerCase(),l=/(json|script|text)/.test(c);if(l||m.textarea){var f=M.getElementsByTagName("textarea")[0];if(f)x.responseText=f.value,x.status=Number(f.getAttribute("status"))||x.status,x.statusText=f.getAttribute("statusText")||x.statusText;else if(l){var p=M.getElementsByTagName("prLine truncated
/**
* @module RDInputLabel
* @author Evgeniy Gusarov
* @license MIT
*/
(function(){!function(t,e,i){var s,n;return n=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isWebkit=/safari|chrome/i.test(navigator.userAgent),s=function(){function s(s,n){this.options=t.extend(!0,{},this.Defaults,n),this.$element=t(s).addClass("rd-input-label"),this.$target=t("#"+this.$element.attr("for")),this.$win=t(i),this.$doc=t(e),this.initialize()}return s.prototype.Defaults={callbacks:null},s.prototype.initialize=function(){return this.$target.on("input",t.proxy(this.change,this)).on("focus",t.proxy(this.focus,this)).on("blur",t.proxy(this.blur,this)).on("hover",t.proxy(this.hover,this)).parents("form").on("reset",t.proxy(this.reset,this)),this.change(),this.hover(),this},s.prototype.hover=function(){return isWebkit&&(this.$target.is(":-webkit-autofill")?this.$element.addClass("auto-fill"):this.$element.removeClass("auto-fill")),this},s.prototype.change=function(){return isWebkit&&(this.$target.is(":-webkit-autofill")?this.$element.addClass("auto-fill"):this.$element.removeClass("auto-fill")),""!==this.$target.val()?(this.$element.hasClass("focus")||this.focus(),this.$element.addClass("not-empty")):this.$element.removeClass("not-empty"),this},s.prototype.focus=function(){return this.$element.addClass("focus"),this},s.prototype.reset=function(){return setTimeout(t.proxy(this.blur,this)),this},s.prototype.blur=function(t){return""===this.$target.val()&&this.$element.removeClass("focus").removeClass("not-empty"),this},s}(),t.fn.extend({RDInputLabel:function(e){return this.each(function(){var i;return i=t(this),i.data("RDInputLabel")?void 0:i.data("RDInputLabel",new s(this,e))})}}),i.RDInputLabel=s}(window.jQuery,document,window),"undefined"!=typeof module&&null!==module?module.exports=window.RDInputLabel:"function"==typeof define&&define.amd&&define(["jquery"],function(){"use strict";return window.RDInputLabel})}).call(this);
/**
* @module Owl carousel
* @version 2.3.0 (beta)
* @author Bartosz Wojciechowski
* @license MIT
*/
!function(a,b,c,d){function e(b,c){this.settings=null,this.options=a.extend({},e.Defaults,c),this.$element=a(b),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},a.each(["onResize","onThrottledResize"],a.proxy(function(b,c){this._handlers[c]=a.proxy(this[c],this)},this)),a.each(e.Plugins,a.proxy(function(a,b){this._plugins[a.charAt(0).toLowerCase()+a.slice(1)]=new b(this)},this)),a.each(e.Workers,a.proxy(function(b,c){this._pipe.push({filter:c.filter,run:a.proxy(c.run,this)})},this)),this.setup(),this.initialize()}e.Defaults={items:3,loop:!1,center:!1,rewind:!1,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:b,fallbackEasing:"swing",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"owl-refresh",loadedClass:"owl-loaded",loadingClass:"owl-loading",rtlClass:"owl-rtl",responsiveClass:"owl-responsive",dragClass:"owl-drag",itemClass:"owl-item",stageClass:"owl-stage",stageOuterClass:"owl-stage-outer",grabClass:"owl-grab"},e.Width={Default:"default",Inner:"inner",Outer:"outer"},e.Type={Event:"event",State:"state"},e.Plugins={},e.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(a){a.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(a){var b=this.settings.margin||"",c=!this.settings.autoWidth,d=this.settings.rtl,e={width:"auto","margin-left":d?b:"","margin-right":d?"":b};!c&&this.$stage.children().css(e),a.css=e}},{filter:["width","items","settings"],run:function(a){var b=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,c=null,d=this._items.length,e=!this.settings.autoWidth,f=[];for(a.items={merge:!1,width:b};d--;)c=this._mergers[d],c=this.settings.mergeFit&&Math.min(c,this.settings.items)||c,a.items.merge=c>1||a.items.merge,f[d]=e?b*c:this._items[d].width();this._widths=f}},{filter:["items","settings"],run:function(){var b=[],c=this._items,d=this.settings,e=Math.max(2*d.items,4),f=2*Math.ceil(c.length/2),g=d.loop&&c.length?d.rewind?e:Math.max(e,f):0,h="",i="";for(g/=2;g>0;)b.push(this.normalize(b.length/2,!0)),h+=c[b[b.length-1]][0].outerHTML,b.push(this.normalize(c.length-1-(b.length-1)/2,!0)),i=c[b[b.length-1]][0].outerHTML+i,g-=1;this._clones=b,a(h).addClass("cloned").appendTo(this.$stage),a(i).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var a=this.settings.rtl?1:-1,b=this._clones.length+this._items.length,c=-1,d=0,e=0,f=[];++c<b;)d=f[c-1]||0,e=this._widths[this.relative(c)]+this.settings.margin,f.push(d+e*a);this._coordinates=f}},{filter:["width","items","settings"],run:function(){var a=this.settings.stagePadding,b=this._coordinates,c={width:Math.ceil(Math.abs(b[b.length-1]))+2*a,"padding-left":a||"","padding-right":a||""};this.$stage.css(c)}},{filter:["width","items","settings"],run:function(a){var b=this._coordinates.length,c=!this.settings.autoWidth,d=this.$stage.children();if(c&&a.items.merge)for(;b--;)a.css.width=this._widths[this.relative(b)],d.eq(b).css(a.css);else c&&(a.css.width=a.items.width,d.css(a.css))}},{filter:["items"],run:function(){this._coordinates.length<1&&this.$stage.removeAttr("style")}},{filter:["width","items","settings"],run:function(a){a.current=a.current?this.$stage.children().index(a.current):0,a.current=Math.max(this.minimum(),Math.min(this.maximum(),a.current)),this.reset(a.current)}},{filter:["position"],run:function(){this.animate(this.coordinates(this._current))}},{filter:["width","position","items","settings"],run:function(){var a,b,c,d,e=this.settings.rtl?1:-1,f=2*this.settings.stagePadding,g=this.coordinates(this.current())+f,h=g+this.width()*e,i=[];for(c=0,d=this._coordinates.length;d>c;c++)a=this._coordinates[c-1]||0,b=Math.abs(this._coordinates[c])+f*e,(this.op(a,"<=",g)&&this.op(a,">",h)||this.op(b,"<",g)&&this.op(b,">",h))&&i.push(c);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+i.join("), :eq(")+")").addClass("active"),this.$stage.children(".center").removeClass("center"),this.settings.center&&this.$stage.children().eq(this.current()).addClass("center")}}],e.prototype.initialize=function(){if(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settinLine truncated
},a.fn.owlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._call=null,this._time=0,this._timeout=0,this._paused=!0,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name?this._core.settings.autoplay?this.play():this.stop():a.namespace&&"position"===a.property.name&&this._paused&&(this._time=0)},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype._next=function(d){this._call=b.setTimeout(a.proxy(this._next,this,d),this._timeout*(Math.round(this.read()/this._timeout)+1)-this.read()),this._core.is("busy")||this._core.is("interacting")||c.hidden||this._core.next(d||this._core.settings.autoplaySpeed)},e.prototype.read=function(){return(new Date).getTime()-this._time},e.prototype.play=function(c,d){var e;this._core.is("rotating")||this._core.enter("rotating"),c=c||this._core.settings.autoplayTimeout,e=Math.min(this._time%(this._timeout||c),c),this._paused?(this._time=this.read(),this._paused=!1):b.clearTimeout(this._call),this._time+=this.read()%c-e,this._timeout=c,this._call=b.setTimeout(a.proxy(this._next,this,d),c-e)},e.prototype.stop=function(){this._core.is("rotating")&&(this._time=0,this._paused=!0,b.clearTimeout(this._call),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&!this._paused&&(this._time=this.read(),this._paused=!0,b.clearTimeout(this._call))},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('<div class="'+this._core.settings.dotClass+'">'+a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"</div>")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:['<span aria-label="prev">&#x2039;</span>','<span aria-label="next">&#x203a;</span>'],navSpeed:!1,navElement:'button role="presentation"',navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("<div>").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(Line truncated
/**
* @module Isotope PACKAGED
* @license GPLv3
* @see http://isotope.metafizzy.co
* @version 2.2.2
*/
!function(t){function e(){}function i(t){function i(e){e.prototype.option||(e.prototype.option=function(e){t.isPlainObject(e)&&(this.options=t.extend(!0,this.options,e))})}function n(e,i){t.fn[e]=function(n){if("string"==typeof n){for(var s=o.call(arguments,1),a=0,u=this.length;u>a;a++){var p=this[a],h=t.data(p,e);if(h)if(t.isFunction(h[n])&&"_"!==n.charAt(0)){var f=h[n].apply(h,s);if(void 0!==f)return f}else r("no such method '"+n+"' for "+e+" instance");else r("cannot call methods on "+e+" prior to initialization; attempted to call '"+n+"'")}return this}return this.each(function(){var o=t.data(this,e);o?(o.option(n),o._init()):(o=new i(this,n),t.data(this,e,o))})}}if(t){var r="undefined"==typeof console?e:function(t){console.error(t)};return t.bridget=function(t,e){i(e),n(t,e)},t.bridget}}var o=Array.prototype.slice;"function"==typeof define&&define.amd?define("jquery-bridget/jquery.bridget",["jquery"],i):i("object"==typeof exports?require("jquery"):t.jQuery)}(window),function(t){function e(e){var i=t.event;return i.target=i.target||i.srcElement||e,i}var i=document.documentElement,o=function(){};i.addEventListener?o=function(t,e,i){t.addEventListener(e,i,!1)}:i.attachEvent&&(o=function(t,i,o){t[i+o]=o.handleEvent?function(){var i=e(t);o.handleEvent.call(o,i)}:function(){var i=e(t);o.call(t,i)},t.attachEvent("on"+i,t[i+o])});var n=function(){};i.removeEventListener?n=function(t,e,i){t.removeEventListener(e,i,!1)}:i.detachEvent&&(n=function(t,e,i){t.detachEvent("on"+e,t[e+i]);try{delete t[e+i]}catch(o){t[e+i]=void 0}});var r={bind:o,unbind:n};"function"==typeof define&&define.amd?define("eventie/eventie",r):"object"==typeof exports?module.exports=r:t.eventie=r}(window),function(){"use strict";function t(){}function e(t,e){for(var i=t.length;i--;)if(t[i].listener===e)return i;return-1}function i(t){return function(){return this[t].apply(this,arguments)}}var o=t.prototype,n=this,r=n.EventEmitter;o.getListeners=function(t){var e,i,o=this._getEvents();if(t instanceof RegExp){e={};for(i in o)o.hasOwnProperty(i)&&t.test(i)&&(e[i]=o[i])}else e=o[t]||(o[t]=[]);return e},o.flattenListeners=function(t){var e,i=[];for(e=0;e<t.length;e+=1)i.push(t[e].listener);return i},o.getListenersAsObject=function(t){var e,i=this.getListeners(t);return i instanceof Array&&(e={},e[t]=i),e||i},o.addListener=function(t,i){var o,n=this.getListenersAsObject(t),r="object"==typeof i;for(o in n)n.hasOwnProperty(o)&&-1===e(n[o],i)&&n[o].push(r?i:{listener:i,once:!1});return this},o.on=i("addListener"),o.addOnceListener=function(t,e){return this.addListener(t,{listener:e,once:!0})},o.once=i("addOnceListener"),o.defineEvent=function(t){return this.getListeners(t),this},o.defineEvents=function(t){for(var e=0;e<t.length;e+=1)this.defineEvent(t[e]);return this},o.removeListener=function(t,i){var o,n,r=this.getListenersAsObject(t);for(n in r)r.hasOwnProperty(n)&&-1!==(o=e(r[n],i))&&r[n].splice(o,1);return this},o.off=i("removeListener"),o.addListeners=function(t,e){return this.manipulateListeners(!1,t,e)},o.removeListeners=function(t,e){return this.manipulateListeners(!0,t,e)},o.manipulateListeners=function(t,e,i){var o,n,r=t?this.removeListener:this.addListener,s=t?this.removeListeners:this.addListeners;if("object"!=typeof e||e instanceof RegExp)for(o=i.length;o--;)r.call(this,e,i[o]);else for(o in e)e.hasOwnProperty(o)&&(n=e[o])&&("function"==typeof n?r.call(this,o,n):s.call(this,o,n));return this},o.removeEvent=function(t){var e,i=typeof t,o=this._getEvents();if("string"===i)delete o[t];else if(t instanceof RegExp)for(e in o)o.hasOwnProperty(e)&&t.test(e)&&delete o[e];else delete this._events;return this},o.removeAllListeners=i("removeEvent"),o.emitEvent=function(t,e){var i,o,n,r=this.getListenersAsObject(t);for(n in r)if(r.hasOwnProperty(n))for(o=r[n].length;o--;)!0===(i=r[n][o]).once&&this.removeListener(t,i.listener),i.listener.apply(this,e||[])===this._getOnceReturnValue()&&this.removeListener(t,i.listener);return this},o.trigger=i("emitEvent"),o.emit=function(t){var e=Array.prototype.slice.call(arguments,1);return this.emitEvent(t,e)},o.setOnceReturnValue=function(t){return this._onceReturnValue=t,this},o._getOnceReturnValue=function(){return!this.hasOwnProperty("_onceReturnValue")||this._onceReturnValue},o._getEvents=function(){return this._events||(this._events={})},t.noConflict=function(){return n.EventEmitter=r,t},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return t}):"object"==typeof module&&module.exports?module.exports=t:n.EventEmitter=t}.call(this),function(t){function e(t){if(t){if("string"==typeof o[t])return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e,n=0,r=i.length;r>n;n++)if(e=i[n]+t,"string"==typeof o[e])return e}}var i="Webkit Moz ms Ms O".split(" "),o=document.documentElement.style;"function"==typeof define&&define.amd?define("get-style-property/get-style-property",[],function(){return e}):"object"==typeof exports?module.exports=e:t.getStyleProperty=e}(window),function(t,eLine truncated
/**
* @module RD Navbar
* @author Evgeniy Gusarov
* @see https://ua.linkedin.com/pub/evgeniy-gusarov/8a/a40/54a
* @version 2.2.5
*/
(function(){var t;t="ontouchstart"in window,function(e,n,o){var a;a=function(){function a(t,a){this.options=e.extend(!0,{},this.Defaults,a),this.$element=e(t),this.$clone=null,this.$win=e(o),this.$doc=e(n),this.currentLayout=this.options.layout,this.loaded=!1,this.focusOnHover=this.options.focusOnHover,this.focusTimer=!1,this.cloneTimer=!1,this.isStuck=!1,this.initialize()}return a.prototype.Defaults={layout:"rd-navbar-static",deviceLayout:"rd-navbar-fixed",focusOnHover:!0,focusOnHoverTimeout:800,linkedElements:["html"],domAppend:!0,stickUp:!0,stickUpClone:!0,stickUpOffset:"100%",anchorNav:!0,anchorNavSpeed:400,anchorNavOffset:0,anchorNavEasing:"swing",autoHeight:!0,responsive:{0:{layout:"rd-navbar-fixed",deviceLayout:"rd-navbar-fixed",focusOnHover:!1,stickUp:!1},992:{layout:"rd-navbar-static",deviceLayout:"rd-navbar-static",focusOnHover:!0,stickUp:!0}},callbacks:{onToggleSwitch:!1,onToggleClose:!1,onDomAppend:!1,onDropdownOver:!1,onDropdownOut:!1,onDropdownToggle:!1,onDropdownClose:!1,onStuck:!1,onUnstuck:!1,onAnchorChange:!1}},a.prototype.initialize=function(){var e;return(e=this).$element.addClass("rd-navbar").addClass(e.options.layout),t&&e.$element.addClass("rd-navbar--is-touch"),e.options.domAppend&&e.createNav(e),e.options.stickUpClone&&e.createClone(e),e.$element.addClass("rd-navbar-original"),e.addAdditionalClassToToggles(e,".rd-navbar-original","toggle-original","toggle-original-elements"),e.applyHandlers(e),e.offset=e.$element.offset().top,e.height=e.$element.outerHeight(),e.loaded=!0,e},a.prototype.resize=function(n,o){var a,s;return s=t?n.getOption("deviceLayout"):n.getOption("layout"),a=n.$element.add(n.$clone),s===n.currentLayout&&n.loaded||(n.switchClass(a,n.currentLayout,s),null!=n.options.linkedElements&&e.grep(n.options.linkedElements,function(t,e){return n.switchClass(t,n.currentLayout+"-linked",s+"-linked")}),n.currentLayout=s),n.focusOnHover=n.getOption("focusOnHover"),n},a.prototype.stickUp=function(t,n){var o,a,s,r,i;return a=t.getOption("stickUp"),(e("html").hasClass("ios")||t.$element.hasClass("rd-navbar-fixed"))&&(a=!1),o=t.$doc.scrollTop(),r=null!=t.$clone?t.$clone:t.$element,s=t.getOption("stickUpOffset"),i="string"==typeof s?s.indexOf("%")>0?parseFloat(s)*t.height/100:parseFloat(s):s,a?(o>=i&&!t.isStuck||o<i&&t.isStuck)&&(t.$element.add(t.$clone).find("[data-rd-navbar-toggle]").each(function(){e.proxy(t.closeToggle,this)(t,!1)}).end().find(".rd-navbar-submenu").removeClass("opened").removeClass("focus"),o>=i&&!t.isStuck&&!t.$element.hasClass("rd-navbar-fixed")?(t.options.callbacks.onStuck&&t.options.callbacks.onStuck.call(t),setTimeout(function(){"resize"===n.type?t.switchClass(r,"","rd-navbar--is-stuck"):r.addClass("rd-navbar--is-stuck"),t.isStuck=!0},navigator.platform.match(/(Mac)/i)?10:0)):("resize"===n.type?t.switchClass(r,"rd-navbar--is-stuck",""):r.removeClass("rd-navbar--is-stuck").one("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",e.proxy(t.resizeWrap,t,n)),t.isStuck=!1,t.options.callbacks.onUnstuck&&t.options.callbacks.onUnstuck.call(t))):(t.$element.find(".rd-navbar-submenu").removeClass("opened").removeClass("focus"),t.isStuck&&(t.switchClass(r,"rd-navbar--is-stuck",""),t.isStuck=!1,t.resizeWrap(n))),t},a.prototype.resizeWrap=function(t){var e,n;if(null==(n=this).$clone&&!n.isStuck)return e=n.$element.parent(),n.getOption("autoHeight")?(n.height=n.$element.outerHeight(),"resize"===t.type?(e.addClass("rd-navbar--no-transition").css("height",n.height),e[0].offsetHeight,e.removeClass("rd-navbar--no-transition")):e.css("height",n.height)):void e.css("height","auto")},a.prototype.createNav=function(t){return t.$element.find(".rd-navbar-dropdown, .rd-navbar-megamenu").each(function(){var t;return t=e(this),this.getBoundingClientRect(),t.hasClass("rd-navbar-megamenu")?t.parent().addClass("rd-navbar--has-megamenu"):t.parent().addClass("rd-navbar--has-dropdown")}).parents("li").addClass("rd-navbar-submenu"),e('<span class="rd-navbar-submenu-toggle"></span>').insertAfter(t.$element.find(".rd-navbar-nav li.rd-navbar-submenu > a")),t.options.callbacks.onDomAppend&&t.options.callbacks.onDomAppend.call(this),t},a.prototype.createClone=function(t){return t.$clone=t.$element.clone().insertAfter(t.$element).addClass("rd-navbar--is-clone"),t.addAdditionalClassToToggles(t,".rd-navbar--is-clone","toggle-cloned","toggle-cloned-elements"),t},a.prototype.closeToggle=function(t,n){var o,a,s,r,i,l,c;return a=e(n.target),i=!1,l=this.getAttribute("data-rd-navbar-toggle"),t.options.stickUpClone&&t.isStuck?(r=".toggle-cloned",s=".toggle-cloned-elements",c=!a.hasClass("toggle-cloned")):(r=".toggle-original",s=".toggle-original-elements",c=!a.hasClass("toggle-original")),n.target!==this&&!a.parents(r+"[data-rd-navbar-toggle]").length&&!a.parents(s).length&&l&&c&&((o=t.$element.find(l).add(e(this))).each(function(){if(!i)return i=!0===(n.target===this||e.contains(this,n.target))}),i||(o.add(this).removeClass("active"),t.options.callbacks.onToggleClose&&t.options.callbacks.onToLine truncated
/**
* @module UIToTop
* @author Matt Varone
* @see http://www.mattvarone.com/web-design/uitotop-jquery-plugin/
* @license MIT
*/
!function(o){o.fn.UItoTop=function(n){var e={text:"",min:500,scrollSpeed:800,containerID:"ui-to-top",containerClass:"ui-to-top fa fa-angle-up",easingType:"easeIn"},t=o.extend(e,n),i="#"+t.containerID;o("body").append('<a href="#" id="'+t.containerID+'" class="'+t.containerClass+'" >'+t.text+"</a>"),o(i).click(function(){return o("html, body").stop().animate({scrollTop:0},t.scrollSpeed,t.easingType),!1}),o(window).scroll(function(){var n=o(window).scrollTop();"undefined"==typeof document.body.style.maxHeight&&o(i).css({position:"absolute",top:o(window).scrollTop()+o(window).height()-50}),n>t.min?o(i).stop(!0,!0).addClass("active"):o(i).removeClass("active")})}}(jQuery);
/**
* @module RD Google Map
* @author Evgeniy Gusarov
* @see https://ua.linkedin.com/pub/evgeniy-gusarov/8a/a40/54a
* @version 0.1.6
*/
!function(a){var t={cntClass:"map",mapClass:"map_model",locationsClass:"map_locations",marker:{basic:"images/gmap_marker.png",active:"images/gmap_marker_active.png"},styles:[],onInit:!1},o={map:{x:-73.9924068,y:40.646197,zoom:14},locations:[]},e=function(t,o){var e=t.parent().find("."+o.locationsClass).find("li"),n=[];return 0<e.length&&e.each(function(t){var e=a(this);e.data("x")&&e.data("y")&&(n[t]={x:e.data("x"),y:e.data("y"),basic:e.data("basic")?e.data("basic"):o.marker.basic,active:e.data("active")?e.data("active"):o.marker.active},a.trim(e.html())?n[t].content='<div class="iw-content">'+e.html()+"</div>":n[t].content=!1)}),n};a.fn.googleMap=function(n){n=a.extend(!0,{},t,n),a(this).each(function(){var t=a(this),s=a.extend(!0,{},o,{map:{x:t.data("x"),y:t.data("y"),zoom:t.data("zoom")},marker:{basic:t.data("marker"),active:t.data("marker-active")},locations:e(t,n)}),i=new google.maps.Map(this,{center:new google.maps.LatLng(parseFloat(s.map.y),parseFloat(s.map.x)),styles:n.styles,zoom:s.map.zoom,scrollwheel:!1});n.onInit&&n.onInit.call(this,i);var c,l=new google.maps.InfoWindow,r=[];for(c in s.locations)r[c]=new google.maps.Marker({position:new google.maps.LatLng(parseFloat(s.locations[c].y),parseFloat(s.locations[c].x)),map:i,icon:s.locations[c].basic,index:c}),s.locations[c].content&&(google.maps.event.addListener(r[c],"click",function(){for(var t in r)r[t].setIcon(s.locations[t].basic);l.setContent(s.locations[this.index].content),l.open(i,this),a(".gm-style-iw").parent().parent().addClass("gm-wrapper"),this.setIcon(s.locations[this.index].active)}),google.maps.event.addListener(l,"closeclick",function(){for(var a in r)r[a].setIcon(s.locations[a].basic)}));google.maps.event.addDomListener(window,"resize",function(){i.setCenter(new google.maps.LatLng(parseFloat(s.map.y),parseFloat(s.map.x)))})})}}(jQuery);
/**
* @module Materianize Parallax
* @see http://materializecss.com/parallax-demo.html
* @licesne MIT
*/
!function(i){i.fn.parallax=function(){var a=i(window).width();return this.each(function(t){function n(t){var n;n=a<601?r.height()>0?r.height():r.children("img").height():r.height()>0?r.height():500;var e=r.children("img").first(),l=e.height()-n,o=r.offset().top+n,h=r.offset().top,d=i(window).scrollTop(),s=window.innerHeight,c=(d+s-h)/(n+s),g=Math.round(l*c);t&&e.css("display","block"),o>d&&h<d+s&&e.css("transform","translate3D(-50%,"+g+"px, 0)")}var r=i(this).prepend('<div class="material-parallax parallax"><img src="images/_blank.png" alt=""></div>').find(".material-parallax");r.children("img").first().attr("src",r.parents("[data-parallax-img]").data("parallax-img")),r.children("img").one("load",function(){n(!0)}).each(function(){this.complete&&i(this).trigger("load")}),i(window).scroll(function(){a=i(window).width(),n(!1)}),i(window).resize(function(){a=i(window).width(),n(!1)})})}}(jQuery);
/**
* @module Swiper
* @description Most modern mobile touch slider and framework with hardware accelerated transitions
* @author Vladimir Kharlampidi
* @see http://www.idangero.us/swiper/
* @licesne MIT
* @version 4.1.0
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Swiper=t()}(this,function(){"use strict";var e=function(e){for(var t=0;t<e.length;t+=1)this[t]=e[t];return this.length=e.length,this};function t(t,i){var s=[],a=0;if(t&&!i&&t instanceof e)return t;if(t)if("string"==typeof t){var r,n,o=t.trim();if(o.indexOf("<")>=0&&o.indexOf(">")>=0){var l="div";for(0===o.indexOf("<li")&&(l="ul"),0===o.indexOf("<tr")&&(l="tbody"),0!==o.indexOf("<td")&&0!==o.indexOf("<th")||(l="tr"),0===o.indexOf("<tbody")&&(l="table"),0===o.indexOf("<option")&&(l="select"),(n=document.createElement(l)).innerHTML=o,a=0;a<n.childNodes.length;a+=1)s.push(n.childNodes[a])}else for(r=i||"#"!==t[0]||t.match(/[ .<>:~]/)?(i||document).querySelectorAll(t.trim()):[document.getElementById(t.trim().split("#")[1])],a=0;a<r.length;a+=1)r[a]&&s.push(r[a])}else if(t.nodeType||t===window||t===document)s.push(t);else if(t.length>0&&t[0].nodeType)for(a=0;a<t.length;a+=1)s.push(t[a]);return new e(s)}function i(e){for(var t=[],i=0;i<e.length;i+=1)-1===t.indexOf(e[i])&&t.push(e[i]);return t}t.fn=e.prototype,t.Class=e,t.Dom7=e;"resize scroll".split(" ");var s={addClass:function(e){if(void 0===e)return this;for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.add(t[i]);return this},removeClass:function(e){for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.remove(t[i]);return this},hasClass:function(e){return!!this[0]&&this[0].classList.contains(e)},toggleClass:function(e){for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.toggle(t[i]);return this},attr:function(e,t){var i=arguments;if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(var s=0;s<this.length;s+=1)if(2===i.length)this[s].setAttribute(e,t);else for(var a in e)this[s][a]=e[a],this[s].setAttribute(a,e[a]);return this},removeAttr:function(e){for(var t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this},data:function(e,t){var i;if(void 0!==t){for(var s=0;s<this.length;s+=1)(i=this[s]).dom7ElementDataStorage||(i.dom7ElementDataStorage={}),i.dom7ElementDataStorage[e]=t;return this}if(i=this[0]){if(i.dom7ElementDataStorage&&e in i.dom7ElementDataStorage)return i.dom7ElementDataStorage[e];var a=i.getAttribute("data-"+e);return a||void 0}},transform:function(e){for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransform=e,i.transform=e}return this},transition:function(e){"string"!=typeof e&&(e+="ms");for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransitionDuration=e,i.transitionDuration=e}return this},on:function(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];var s,a=e[0],r=e[1],n=e[2],o=e[3];function l(e){var i=e.target;if(i){var s=e.target.dom7EventData||[];if(s.unshift(e),t(i).is(r))n.apply(i,s);else for(var a=t(i).parents(),o=0;o<a.length;o+=1)t(a[o]).is(r)&&n.apply(a[o],s)}}function d(e){var t=e&&e.target?e.target.dom7EventData||[]:[];t.unshift(e),n.apply(this,t)}"function"==typeof e[1]&&(a=(s=e)[0],n=s[1],o=s[2],r=void 0),o||(o=!1);for(var h,p=a.split(" "),c=0;c<this.length;c+=1){var u=this[c];if(r)for(h=0;h<p.length;h+=1)u.dom7LiveListeners||(u.dom7LiveListeners=[]),u.dom7LiveListeners.push({type:a,listener:n,proxyListener:l}),u.addEventListener(p[h],l,o);else for(h=0;h<p.length;h+=1)u.dom7Listeners||(u.dom7Listeners=[]),u.dom7Listeners.push({type:a,listener:n,proxyListener:d}),u.addEventListener(p[h],d,o)}return this},off:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,s=e[0],a=e[1],r=e[2],n=e[3];"function"==typeof e[1]&&(s=(i=e)[0],r=i[1],n=i[2],a=void 0),n||(n=!1);for(var o=s.split(" "),l=0;l<o.length;l+=1)for(var d=0;d<this.length;d+=1){var h=this[d];if(a){if(h.dom7LiveListeners)for(var p=0;p<h.dom7LiveListeners.length;p+=1)r?h.dom7LiveListeners[p].listener===r&&h.removeEventListener(o[l],h.dom7LiveListeners[p].proxyListener,n):h.dom7LiveListeners[p].type===o[l]&&h.removeEventListener(o[l],h.dom7LiveListeners[p].proxyListener,n)}else if(h.dom7Listeners)for(var c=0;c<h.dom7Listeners.length;c+=1)r?h.dom7Listeners[c].listener===r&&h.removeEventListener(o[l],h.dom7Listeners[c].proxyListener,n):h.dom7Listeners[c].type===o[l]&&h.removeEventListener(o[l],h.dom7Listeners[c].proxyListener,n)}return this},trigger:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];for(var i=e[0].split(" "),s=e[1],a=0;a<i.length;a+=1)for(var r=0;r<this.length;r+=1){var n=void 0;try{n=new window.CustomEvent(i[a],{detail:s,bubbles:!0,cancelable:!0})}catch(e){(n=document.createEvent("Event")).initEvent(i[a],!0,!0),n.detail=s}this[r].dom7EventData=e.filter(function(e,t){return t>0}),this[r].dispatchEvent(n),this[r].dom7EventData=[],delete this[r].dom7EventData}return this},transitionEnd:function(e){var t,i=["webkitTransitionELine truncated
/**
* @module jQuery Count To
* @author Matt Huggins
* @see https://github.com/mhuggins/jquery-countTo
* @license MIT
*/
!function(t){function e(t,e){return t.toFixed(e.decimals)}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,this.dataOptions(),i),this.init()};o.DEFAULTS={from:0,to:0,speed:1e3,refreshInterval:100,decimals:0,formatter:e,onUpdate:null,onComplete:null},o.prototype.init=function(){this.value=this.options.from,this.loops=Math.ceil(this.options.speed/this.options.refreshInterval),this.loopCount=0,this.increment=(this.options.to-this.options.from)/this.loops},o.prototype.dataOptions=function(){var t={from:this.$element.data("from"),to:this.$element.data("to"),speed:this.$element.data("speed"),refreshInterval:this.$element.data("refresh-interval"),decimals:this.$element.data("decimals")},e=Object.keys(t);for(var o in e){var i=e[o];"undefined"==typeof t[i]&&delete t[i]}return t},o.prototype.update=function(){this.value+=this.increment,this.loopCount++,this.render(),"function"==typeof this.options.onUpdate&&this.options.onUpdate.call(this.$element,this.value),this.loopCount>=this.loops&&(clearInterval(this.interval),this.value=this.options.to,"function"==typeof this.options.onComplete&&this.options.onComplete.call(this.$element,this.value))},o.prototype.render=function(){var t=this.options.formatter.call(this.$element,this.value,this.options);this.$element.text(t)},o.prototype.restart=function(){this.stop(),this.init(),this.start()},o.prototype.start=function(){this.stop(),this.render(),this.interval=setInterval(this.update.bind(this),this.options.refreshInterval)},o.prototype.stop=function(){this.interval&&clearInterval(this.interval)},o.prototype.toggle=function(){this.interval?this.stop():this.start()},t.fn.countTo=function(e){return this.each(function(){var i=t(this),n=i.data("countTo"),s=!n||"object"==typeof e,r="object"==typeof e?e:{},a="string"==typeof e?e:"start";s&&(n&&n.stop(),i.data("countTo",n=new o(this,r))),n[a].call(n)})}}(jQuery);
/**
* @module TimeCircles
* @author Wim Barelds
* @see http://www.wimbarelds.nl/
* @license MIT
* @version 1.5.3
*/
(function(f){function A(a){a=a.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(a,b,d,e){return b+b+d+d+e+e});return(a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a))?{r:parseInt(a[1],16),g:parseInt(a[2],16),b:parseInt(a[3],16)}:null}function B(){var a=document.createElement("canvas");return!(!a.getContext||!a.getContext("2d"))}function n(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}function z(a,c,b,d,e){for(var h={},l={},f={},g={},m={},k={},r=null,q=0;q<d.length;q++){var p= d[q],r=null===r?b/t[p]:t[r]/t[p],u=a/t[p],v=c/t[p];e&&(u=0<u?Math.floor(u):Math.ceil(u),v=0<v?Math.floor(v):Math.ceil(v));"Days"!==p&&(u%=r,v%=r);h[p]=u;f[p]=Math.abs(u);l[p]=v;k[p]=Math.abs(v);g[p]=Math.abs(u)/r;m[p]=Math.abs(v)/r;r=p}return{raw_time:h,raw_old_time:l,time:f,old_time:k,pct:g,old_pct:m}}function C(a){for(var c=["webkit","moz"],b=0;b<c.length&&!a.requestAnimationFrame;++b)a.requestAnimationFrame=a[c[b]+"RequestAnimationFrame"],a.cancelAnimationFrame=a[c[b]+"CancelAnimationFrame"];a.requestAnimationFrame&& a.cancelAnimationFrame||(a.requestAnimationFrame=function(c,b,h){"undefined"===typeof h&&(h={data:{last_frame:0}});var l=(new Date).getTime(),f=Math.max(0,16-(l-h.data.last_frame));b=a.setTimeout(function(){c(l+f)},f);h.data.last_frame=l+f;return b},a.cancelAnimationFrame=function(a){clearTimeout(a)})}var m=window;Object.keys||(Object.keys=function(){var a=Object.prototype.hasOwnProperty,c=!{toString:null}.propertyIsEnumerable("toString"),b="toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "), d = b.length;return function(e){if("object"!==typeof e&&("function"!==typeof e||null===e))throw new TypeError("Object.keys called on non-object");var h=[],l;for(l in e)a.call(e,l)&&h.push(l);if(c)for(l=0;l<d;l++)a.call(e,b[l])&&h.push(b[l]);return h}}());var x=!1,y=["Days","Hours","Minutes","Seconds"],D={Seconds:"Minutes",Minutes:"Hours",Hours:"Days",Days:"Years"},t={Seconds:1,Minutes:60,Hours:3600,Days:86400,Months:2678400,Years:31536E3};Array.prototype.indexOf||(Array.prototype.indexOf=function(a, c) { var b = this.length >>> 0, d = Number(c) || 0, d = 0 > d ? Math.ceil(d) : Math.floor(d); for (0 > d && (d += b); d < b; d++)if (d in this && this[d] === a)return d; return -1 }); var w = {}, g = function (a, c) { this.element = a; this.container; this.listeners = null; this.data = { paused: !1, last_frame: 0, animation_frame: null, interval_fallback: null, timer: !1, total_duration: null, prev_time: null, drawn_units: [], text_elements: {Days: null, Hours: null, Minutes: null, Seconds: null}, attributes: {canvas: null, context: null, item_size: null, line_width: null, radius: null, outer_radius:null}, state:{fading:{Days:!1,Hours:!1,Minutes:!1,Seconds:!1}}};this.config=null;this.setOptions(c);this.initialize()};g.prototype.clearListeners=function(){this.listeners={all:[],visible:[]}};g.prototype.addTime=function(a){if(this.data.attributes.ref_date instanceof Date){var c=this.data.attributes.ref_date;c.setSeconds(c.getSeconds()+a)}else isNaN(this.data.attributes.ref_date)||(this.data.attributes.ref_date+=1E3*a)};g.prototype.initialize=function(a){this.data.drawn_units=[];for(var c=0;c<Object.keys(this.config.time).length;c++){var b= Object.keys(this.config.time)[c];this.config.time[b].show&&this.data.drawn_units.push(b)}f(this.element).children("div.time_circles").remove();"undefined"===typeof a&&(a=!0);(a||null===this.listeners)&&this.clearListeners();this.container=f("<div>");this.container.addClass("time_circles");this.container.appendTo(this.element);c=this.element.offsetHeight;a=this.element.offsetWidth;0===c&&(c=f(this.element).height());0===a&&(a=f(this.element).width());0===c&&0<a?c=a/this.data.drawn_units.length:0=== a&&0<c&&(a=c*this.data.drawn_units.length);b=document.createElement("canvas");b.width=a;b.height=c;this.data.attributes.canvas=f(b);this.data.attributes.canvas.appendTo(this.container);var d=B();d||"undefined"===typeof G_vmlCanvasManager||(G_vmlCanvasManager.initElement(b),d=x=!0);d&&(this.data.attributes.context=b.getContext("2d"));this.data.attributes.item_size=Math.min(a/this.data.drawn_units.length,c);this.data.attributes.line_width=this.data.attributes.item_size*this.config.fg_width;this.data.attributes.radius= (.8*this.data.attributes.item_size-this.data.attributes.line_width)/2;this.data.attributes.outer_radius=this.data.attributes.radius+.5*Math.max(this.data.attributes.line_width,this.data.attributes.line_width*this.config.bg_width);var c=0,e;for(e in this.data.text_elements)this.config.time[e].show&&(a=f("<div>"),a.addClass("textDiv_"+e),a.css("top",Math.round(.35*this.data.attributes.item_size)),a.css("left",Math.round(c++*this.data.attributes.item_size)),a.css("width",this.data.attributes.item_size), a.appendTo(this.container),b=f("<h4>"),b.text(this.config.time[e].text),b.css("font-size",Math.round(this.config.text_size*this.data.attributes.item_size)),b.css("line-height",Math.round(this.config.text_size*this.dLine truncated
/**
* @module Lightgallery
* @author Sachin N
* @see http://sachinchoolur.github.io/lightGallery/
* @license GPLv3
* @version 1.6.2 - 2017-10-03
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(){"use strict";function b(b,d){if(this.el=b,this.$el=a(b),this.s=a.extend({},c,d),this.s.dynamic&&"undefined"!==this.s.dynamicEl&&this.s.dynamicEl.constructor===Array&&!this.s.dynamicEl.length)throw"When using dynamic mode, you must also define dynamicEl as an Array.";return this.modules={},this.lGalleryOn=!1,this.lgBusy=!1,this.hideBartimeout=!1,this.isTouch="ontouchstart"in document.documentElement,this.s.slideEndAnimatoin&&(this.s.hideControlOnEnd=!1),this.s.dynamic?this.$items=this.s.dynamicEl:"this"===this.s.selector?this.$items=this.$el:""!==this.s.selector?this.s.selectWithin?this.$items=a(this.s.selectWithin).find(this.s.selector):this.$items=this.$el.find(a(this.s.selector)):this.$items=this.$el.children(),this.$slide="",this.$outer="",this.init(),this}var c={mode:"lg-slide",cssEasing:"ease",easing:"linear",speed:600,height:"100%",width:"100%",addClass:"",startClass:"lg-start-zoom",backdropDuration:150,hideBarsDelay:6e3,useLeft:!1,closable:!0,loop:!0,escKey:!0,keyPress:!0,controls:!0,slideEndAnimatoin:!0,hideControlOnEnd:!1,mousewheel:!0,getCaptionFromTitleOrAlt:!0,appendSubHtmlTo:".lg-sub-html",subHtmlSelectorRelative:!1,preload:1,showAfterLoad:!0,selector:"",selectWithin:"",nextHtml:"",prevHtml:"",index:!1,iframeMaxWidth:"100%",download:!0,counter:!0,appendCounterTo:".lg-toolbar",swipeThreshold:50,enableSwipe:!0,enableDrag:!0,dynamic:!1,dynamicEl:[],galleryId:1};b.prototype.init=function(){var b=this;b.s.preload>b.$items.length&&(b.s.preload=b.$items.length);var c=window.location.hash;c.indexOf("lg="+this.s.galleryId)>0&&(b.index=parseInt(c.split("&slide=")[1],10),a("body").addClass("lg-from-hash"),a("body").hasClass("lg-on")||(setTimeout(function(){b.build(b.index)}),a("body").addClass("lg-on"))),b.s.dynamic?(b.$el.trigger("onBeforeOpen.lg"),b.index=b.s.index||0,a("body").hasClass("lg-on")||setTimeout(function(){b.build(b.index),a("body").addClass("lg-on")})):b.$items.on("click.lgcustom",function(c){try{c.preventDefault(),c.preventDefault()}catch(a){c.returnValue=!1}b.$el.trigger("onBeforeOpen.lg"),b.index=b.s.index||b.$items.index(this),a("body").hasClass("lg-on")||(b.build(b.index),a("body").addClass("lg-on"))})},b.prototype.build=function(b){var c=this;c.structure(),a.each(a.fn.lightGallery.modules,function(b){c.modules[b]=new a.fn.lightGallery.modules[b](c.el)}),c.slide(b,!1,!1,!1),c.s.keyPress&&c.keyPress(),c.$items.length>1?(c.arrow(),setTimeout(function(){c.enableDrag(),c.enableSwipe()},50),c.s.mousewheel&&c.mousewheel()):c.$slide.on("click.lg",function(){c.$el.trigger("onSlideClick.lg")}),c.counter(),c.closeGallery(),c.$el.trigger("onAfterOpen.lg"),c.$outer.on("mousemove.lg click.lg touchstart.lg",function(){c.$outer.removeClass("lg-hide-items"),clearTimeout(c.hideBartimeout),c.hideBartimeout=setTimeout(function(){c.$outer.addClass("lg-hide-items")},c.s.hideBarsDelay)}),c.$outer.trigger("mousemove.lg")},b.prototype.structure=function(){var b,c="",d="",e=0,f="",g=this;for(a("body").append('<div class="lg-backdrop"></div>'),a(".lg-backdrop").css("transition-duration",this.s.backdropDuration+"ms"),e=0;e<this.$items.length;e++)c+='<div class="lg-item"></div>';if(this.s.controls&&this.$items.length>1&&(d='<div class="lg-actions"><button class="lg-prev lg-icon">'+this.s.prevHtml+'</button><button class="lg-next lg-icon">'+this.s.nextHtml+"</button></div>"),".lg-sub-html"===this.s.appendSubHtmlTo&&(f='<div class="lg-sub-html"></div>'),b='<div class="lg-outer '+this.s.addClass+" "+this.s.startClass+'"><div class="lg" style="width:'+this.s.width+"; height:"+this.s.height+'"><div class="lg-inner">'+c+'</div><div class="lg-toolbar lg-group"><span class="lg-close lg-icon"></span></div>'+d+f+"</div></div>",a("body").append(b),this.$outer=a(".lg-outer"),this.$slide=this.$outer.find(".lg-item"),this.s.useLeft?(this.$outer.addClass("lg-use-left"),this.s.mode="lg-slide"):this.$outer.addClass("lg-use-css3"),g.setTop(),a(window).on("resize.lg orientationchange.lg",function(){setTimeout(function(){g.setTop()},100)}),this.$slide.eq(this.index).addClass("lg-current"),this.doCss()?this.$outer.addClass("lg-css3"):(this.$outer.addClass("lg-css"),this.s.speed=0),this.$outer.addClass(this.s.mode),this.s.enableDrag&&this.$items.length>1&&this.$outer.addClass("lg-grab"),this.s.showAfterLoad&&this.$outer.addClass("lg-show-after-load"),this.doCss()){var h=this.$outer.find(".lg-inner");h.css("transition-timing-function",this.s.cssEasing),h.css("transition-duration",this.s.speed+"ms")}setTimeout(function(){a(".lg-backdrop").addClass("in")}),setTimeout(function(){g.$outer.addClass("lg-visible")},this.s.backdropDuration),this.s.download&&this.$outer.find(".lg-toolbar").append('<a id="lg-download" target="_blank" download class="lg-download lg-icon"></a>'),this.prevScrollTop=a(window).scrollTop()},b.prototype.setTop=function(){Line truncated
this.$thumbOuter.remove(),this.core.$outer.removeClass("lg-has-thumb"))},a.fn.lightGallery.modules.Thumbnail=c}()}),function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(){"use strict";var b={videoMaxWidth:"855px",youtubePlayerParams:!1,vimeoPlayerParams:!1,dailymotionPlayerParams:!1,vkPlayerParams:!1,videojs:!1,videojsOptions:{}},c=function(c){return this.core=a(c).data("lightGallery"),this.$el=a(c),this.core.s=a.extend({},b,this.core.s),this.videoLoaded=!1,this.init(),this};c.prototype.init=function(){var b=this;b.core.$el.on("hasVideo.lg.tm",function(a,c,d,e){if(b.core.$slide.eq(c).find(".lg-video").append(b.loadVideo(d,"lg-object",!0,c,e)),e)if(b.core.s.videojs)try{videojs(b.core.$slide.eq(c).find(".lg-html5").get(0),b.core.s.videojsOptions,function(){b.videoLoaded||this.play()})}catch(a){console.error("Make sure you have included videojs")}else b.videoLoaded||b.core.$slide.eq(c).find(".lg-html5").get(0).play()}),b.core.$el.on("onAferAppendSlide.lg.tm",function(a,c){var d=b.core.$slide.eq(c).find(".lg-video-cont");d.hasClass("lg-has-iframe")||(d.css("max-width",b.core.s.videoMaxWidth),b.videoLoaded=!0)});var c=function(a){if(a.find(".lg-object").hasClass("lg-has-poster")&&a.find(".lg-object").is(":visible"))if(a.hasClass("lg-has-video")){var c=a.find(".lg-youtube").get(0),d=a.find(".lg-vimeo").get(0),e=a.find(".lg-dailymotion").get(0),f=a.find(".lg-html5").get(0);if(c)c.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}',"*");else if(d)try{$f(d).api("play")}catch(a){console.error("Make sure you have included froogaloop2 js")}else if(e)e.contentWindow.postMessage("play","*");else if(f)if(b.core.s.videojs)try{videojs(f).play()}catch(a){console.error("Make sure you have included videojs")}else f.play();a.addClass("lg-video-playing")}else{a.addClass("lg-video-playing lg-has-video");var g,h,i=function(c,d){if(a.find(".lg-video").append(b.loadVideo(c,"",!1,b.core.index,d)),d)if(b.core.s.videojs)try{videojs(b.core.$slide.eq(b.core.index).find(".lg-html5").get(0),b.core.s.videojsOptions,function(){this.play()})}catch(a){console.error("Make sure you have included videojs")}else b.core.$slide.eq(b.core.index).find(".lg-html5").get(0).play()};b.core.s.dynamic?(g=b.core.s.dynamicEl[b.core.index].src,h=b.core.s.dynamicEl[b.core.index].html,i(g,h)):(g=b.core.$items.eq(b.core.index).attr("href")||b.core.$items.eq(b.core.index).attr("data-src"),h=b.core.$items.eq(b.core.index).attr("data-html"),i(g,h));var j=a.find(".lg-object");a.find(".lg-video").append(j),a.find(".lg-video-object").hasClass("lg-html5")||(a.removeClass("lg-complete"),a.find(".lg-video-object").on("load.lg error.lg",function(){a.addClass("lg-complete")}))}};b.core.doCss()&&b.core.$items.length>1&&(b.core.s.enableSwipe||b.core.s.enableDrag)?b.core.$el.on("onSlideClick.lg.tm",function(){var a=b.core.$slide.eq(b.core.index);c(a)}):b.core.$slide.on("click.lg",function(){c(a(this))}),b.core.$el.on("onBeforeSlide.lg.tm",function(c,d,e){var f=b.core.$slide.eq(d),g=f.find(".lg-youtube").get(0),h=f.find(".lg-vimeo").get(0),i=f.find(".lg-dailymotion").get(0),j=f.find(".lg-vk").get(0),k=f.find(".lg-html5").get(0);if(g)g.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}',"*");else if(h)try{$f(h).api("pause")}catch(a){console.error("Make sure you have included froogaloop2 js")}else if(i)i.contentWindow.postMessage("pause","*");else if(k)if(b.core.s.videojs)try{videojs(k).pause()}catch(a){console.error("Make sure you have included videojs")}else k.pause();j&&a(j).attr("src",a(j).attr("src").replace("&autoplay","&noplay"));var l;l=b.core.s.dynamic?b.core.s.dynamicEl[e].src:b.core.$items.eq(e).attr("href")||b.core.$items.eq(e).attr("data-src");var m=b.core.isVideo(l,e)||{};(m.youtube||m.vimeo||m.dailymotion||m.vk)&&b.core.$outer.addClass("lg-hide-download")}),b.core.$el.on("onAfterSlide.lg.tm",function(a,c){b.core.$slide.eq(c).removeClass("lg-video-playing")})},c.prototype.loadVideo=function(b,c,d,e,f){var g="",h=1,i="",j=this.core.isVideo(b,e)||{};if(d&&(h=this.videoLoaded?0:1),j.youtube)i="?wmode=opaque&autoplay="+h+"&enablejsapi=1",this.core.s.youtubePlayerParams&&(i=i+"&"+a.param(this.core.s.youtubePlayerParams)),g='<iframe class="lg-video-object lg-youtube '+c+'" width="560" height="315" src="//www.youtube.com/embed/'+j.youtube[1]+i+'" frameborder="0" allowfullscreen></iframe>';else if(j.vimeo)i="?autoplay="+h+"&api=1",this.core.s.vimeoPlayerParams&&(i=i+"&"+a.param(this.core.s.vimeoPlayerParams)),g='<iframe class="lg-video-object lg-vimeo '+c+'" width="560" height="315" src="//player.vimeo.com/video/'+j.vimeo[1]+i+'" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>';else if(j.dailymotion)i="?wmode=opaque&autoplay="+h+"&api=postMessage",this.core.s.dailymotionPlayerParams&&(i=i+"&"+a.param(this.core.s.dailymotionPlayerParams)),g='<ifraLine truncated
/**
* @module WOW
* @author Matthieu Aussaguel
* @license MIT
* @version 1.1.3
*/
(function(){var a,b,c,d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};b=function(){function a(){}return a.prototype.extend=function(a,b){var c,d;for(c in b)d=b[c],null==a[c]&&(a[c]=d);return a},a.prototype.isMobile=function(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)},a.prototype.createEvent=function(a,b,c,d){var e;return null==b&&(b=!1),null==c&&(c=!1),null==d&&(d=null),null!=document.createEvent?(e=document.createEvent("CustomEvent"),e.initCustomEvent(a,b,c,d)):null!=document.createEventObject?(e=document.createEventObject(),e.eventType=a):e.eventName=a,e},a.prototype.emitEvent=function(a,b){return null!=a.dispatchEvent?a.dispatchEvent(b):b in(null!=a)?a[b]():"on"+b in(null!=a)?a["on"+b]():void 0},a.prototype.addEvent=function(a,b,c){return null!=a.addEventListener?a.addEventListener(b,c,!1):null!=a.attachEvent?a.attachEvent("on"+b,c):a[b]=c},a.prototype.removeEvent=function(a,b,c){return null!=a.removeEventListener?a.removeEventListener(b,c,!1):null!=a.detachEvent?a.detachEvent("on"+b,c):delete a[b]},a.prototype.innerHeight=function(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight},a}(),c=this.WeakMap||this.MozWeakMap||(c=function(){function a(){this.keys=[],this.values=[]}return a.prototype.get=function(a){var b,c,d,e,f;for(f=this.keys,b=d=0,e=f.length;e>d;b=++d)if(c=f[b],c===a)return this.values[b]},a.prototype.set=function(a,b){var c,d,e,f,g;for(g=this.keys,c=e=0,f=g.length;f>e;c=++e)if(d=g[c],d===a)return void(this.values[c]=b);return this.keys.push(a),this.values.push(b)},a}()),a=this.MutationObserver||this.WebkitMutationObserver||this.MozMutationObserver||(a=function(){function a(){"undefined"!=typeof console&&null!==console&&console.warn("MutationObserver is not supported by your browser."),"undefined"!=typeof console&&null!==console&&console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content.")}return a.notSupported=!0,a.prototype.observe=function(){},a}()),d=this.getComputedStyle||function(a,b){return this.getPropertyValue=function(b){var c;return"float"===b&&(b="styleFloat"),e.test(b)&&b.replace(e,function(a,b){return b.toUpperCase()}),(null!=(c=a.currentStyle)?c[b]:void 0)||null},this},e=/(\-([a-z]){1})/g,this.WOW=function(){function e(a){null==a&&(a={}),this.scrollCallback=f(this.scrollCallback,this),this.scrollHandler=f(this.scrollHandler,this),this.resetAnimation=f(this.resetAnimation,this),this.start=f(this.start,this),this.scrolled=!0,this.config=this.util().extend(a,this.defaults),null!=a.scrollContainer&&(this.config.scrollContainer=document.querySelector(a.scrollContainer)),this.animationNameCache=new c,this.wowEvent=this.util().createEvent(this.config.boxClass)}return e.prototype.defaults={boxClass:"wow",animateClass:"animated",offset:0,mobile:!0,live:!0,callback:null,scrollContainer:null},e.prototype.init=function(){var a;return this.element=window.document.documentElement,"interactive"===(a=document.readyState)||"complete"===a?this.start():this.util().addEvent(document,"DOMContentLoaded",this.start),this.finished=[]},e.prototype.start=function(){var b,c,d,e;if(this.stopped=!1,this.boxes=function(){var a,c,d,e;for(d=this.element.querySelectorAll("."+this.config.boxClass),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.all=function(){var a,c,d,e;for(d=this.boxes,e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.boxes.length)if(this.disabled())this.resetStyle();else for(e=this.boxes,c=0,d=e.length;d>c;c++)b=e[c],this.applyStyle(b,!0);return this.disabled()||(this.util().addEvent(this.config.scrollContainer||window,"scroll",this.scrollHandler),this.util().addEvent(window,"resize",this.scrollHandler),this.interval=setInterval(this.scrollCallback,50)),this.config.live?new a(function(a){return function(b){var c,d,e,f,g;for(g=[],c=0,d=b.length;d>c;c++)f=b[c],g.push(function(){var a,b,c,d;for(c=f.addedNodes||[],d=[],a=0,b=c.length;b>a;a++)e=c[a],d.push(this.doSync(e));return d}.call(a));return g}}(this)).observe(document.body,{childList:!0,subtree:!0}):void 0},e.prototype.stop=function(){return this.stopped=!0,this.util().removeEvent(this.config.scrollContainer||window,"scroll",this.scrollHandler),this.util().removeEvent(window,"resize",this.scrollHandler),null!=this.interval?clearInterval(this.interval):void 0},e.prototype.sync=function(b){return a.notSupported?this.doSync(this.element):void 0},e.prototype.doSync=function(a){var b,c,d,e,f;if(null==a&&(a=this.element),1===a.nodeType){for(a=a.parentNode||a,e=a.querySelectorAll("."+this.config.boxClass),f=[],c=0,d=e.length;d>c;c++)b=e[c],g.call(this.all,b)<0?(this.boxes.push(b),this.all.push(b),this.stopped||this.disabled()?this.resetStyle():this.applyStyle(b,!0),f.push(this.scrolled=!0)):f.push(void 0);return f}},e.prototype.show=function(a){return this.applyStyleLine truncated
/**
* @module jQuery page transition
* @author Roman Kravchuk (JeremyLuis)
* @license MIT
* @version 1.1.3
* @description Smooth transition between pages
*/
function pageTransition(t){t=t||{},t.target=t.target||null,t.delay=t.delay||500,t.duration=t.duration||1e3,t.classIn=t.classIn||null,t.classOut=t.classOut||null,t.classActive=t.classActive||null,t.onReady=t.onReady||null,t.onTransitionStart=t.onTransitionStart||null,t.onTransitionEnd=t.onTransitionEnd||null,t.conditions=t.conditions||function(t,n){return!/(\#|callto:|tel:|mailto:|:\/\/)/.test(n)},t.target&&(setTimeout(function(){t.onReady&&t.onReady(t),t.classIn&&t.target.classList.add(t.classIn),t.classActive&&t.target.classList.add(t.classActive),t.duration&&(t.target.style.animationDuration=t.duration+"ms"),t.target.addEventListener("animationstart",function(){setTimeout(function(){t.classIn&&t.target.classList.remove(t.classIn),t.onTransitionEnd&&t.onTransitionEnd(t)},t.duration)})},t.delay),$("a").click(function(n){var a=n.currentTarget.getAttribute("href");if(t.conditions(n,a)){var s=this.href;n.preventDefault(),t.onTransitionStart&&t.onTransitionStart(t),t.classIn&&t.target.classList.remove(t.classIn),t.classOut&&t.target.classList.add(t.classOut),setTimeout(function(){window.location=s,/firefox/i.test(navigator.userAgent)&&setTimeout(function(){t.onReady&&t.onReady(t),t.classOut&&t.target.classList.remove(t.classOut)},1e3),/safari/i.test(navigator.userAgent)&&!/chrome/i.test(navigator.userAgent)&&(t.onReady&&t.onReady(t),t.classOut&&t.target.classList.remove(t.classOut))},t.duration)}}))}
/**
* @module Slick
* @author Ken Wheeler
* @see http://kenwheeler.github.io/slick
* @version 1.6.0
*/
!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,e=this;e.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:a(c),appendDots:a(c),arrows:!0,asNavFor:null,prevArrow:'<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button">Previous</button>',nextArrow:'<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(b,c){return a('<button type="button" data-role="none" role="button" tabindex="0" />').text(c+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},e.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},a.extend(e,e.initials),e.activeBreakpoint=null,e.animType=null,e.animProp=null,e.breakpoints=[],e.breakpointSettings=[],e.cssTransitions=!1,e.focussed=!1,e.interrupted=!1,e.hidden="hidden",e.paused=!0,e.positionProp=null,e.respondTo=null,e.rowCount=1,e.shouldClick=!0,e.$slider=a(c),e.$slidesCache=null,e.transformType=null,e.transitionType=null,e.visibilityChange="visibilitychange",e.windowWidth=0,e.windowTimer=null,f=a(c).data("slick")||{},e.options=a.extend({},e.defaults,d,f),e.currentSlide=e.options.initialSlide,e.originalSettings=e.options,"undefined"!=typeof document.mozHidden?(e.hidden="mozHidden",e.visibilityChange="mozvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(e.hidden="webkitHidden",e.visibilityChange="webkitvisibilitychange"),e.autoPlay=a.proxy(e.autoPlay,e),e.autoPlayClear=a.proxy(e.autoPlayClear,e),e.autoPlayIterator=a.proxy(e.autoPlayIterator,e),e.changeSlide=a.proxy(e.changeSlide,e),e.clickHandler=a.proxy(e.clickHandler,e),e.selectHandler=a.proxy(e.selectHandler,e),e.setPosition=a.proxy(e.setPosition,e),e.swipeHandler=a.proxy(e.swipeHandler,e),e.dragHandler=a.proxy(e.dragHandler,e),e.keyHandler=a.proxy(e.keyHandler,e),e.instanceUid=b++,e.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,e.registerBreakpoints(),e.init(!0)}var b=0;return c}(),b.prototype.activateADA=function(){var a=this;a.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},b.prototype.addSlide=b.prototype.slickAdd=function(b,c,d){var e=this;if("boolean"==typeof c)d=c,c=null;else if(0>c||c>=e.slideCount)return!1;e.unload(),"number"==typeof c?0===c&&0===e.$slides.length?a(b).appendTo(e.$slideTrack):d?a(b).insertBefore(e.$slides.eq(c)):a(b).insertAfter(e.$slides.eq(c)):d===!0?a(b).prependTo(e.$slideTrack):a(b).appendTo(e.$slideTrack),e.$slides=e.$slideTrack.children(this.options.slide),e.$slideTrack.children(this.options.slide).detach(),e.$slideTrack.append(e.$slides),e.$slides.each(function(b,c){a(c).attr("data-slick-index",b)}),e.$slidesCache=e.$slides,e.reinit()},b.prototype.animateHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.animate({height:b},a.options.speed)}},b.prototype.animateSlide=function(b,c){var d={},e=this;e.animateHeight(),e.options.rtl===!0&&e.options.vertical===!1&&(b=-b),e.transformsEnabled===!1?e.options.vertical===!1?e.$slideTrack.animate({left:b},e.options.speed,e.options.easing,c):e.$slideTrack.animate({top:b},e.options.speed,e.options.easing,c):e.cssTransitions===!1?(e.options.rtl===!0&&(e.currentLeft=-e.currentLeft),a({animStart:e.currentLeft}).animate({animStart:b},{duration:e.options.speed,easing:e.options.easing,step:function(a){a=Math.ceil(a),e.options.vertical===!1?(d[e.animType]="translate("+a+"px, 0px)",e.$slideTrack.css(d)):(d[e.animType]="translate(0px,"+a+"px)",e.$slideTrack.css(d))},complete:function(){c&&c.call()}})):(e.applyTransition(),b=Math.ceil(b),e.options.vertical===!1?d[e.animType]="translate3d("+b+"px, 0px, 0px)":d[e.animType]="translate3d(0px,"+b+"px, 0px)",e.$slideTrack.css(d),c&&setTimeout(function(){e.disableTransition(),c.call()},e.options.speed))},b.prototype.getNavTarget=function(){var b=this,c=b.options.asNavFor;return c&&null!==c&&(Line truncated
d.slice(e-c+1,e+c+2).addClass("slick-active").attr("aria-hidden","false")),0===a?d.eq(d.length-1-b.options.slidesToShow).addClass("slick-center"):a===b.slideCount-1&&d.eq(b.options.slidesToShow).addClass("slick-center")),b.$slides.eq(a).addClass("slick-center")):a>=0&&a<=b.slideCount-b.options.slidesToShow?b.$slides.slice(a,a+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):d.length<=b.options.slidesToShow?d.addClass("slick-active").attr("aria-hidden","false"):(f=b.slideCount%b.options.slidesToShow,e=b.options.infinite===!0?b.options.slidesToShow+a:a,b.options.slidesToShow==b.options.slidesToScroll&&b.slideCount-a<b.options.slidesToShow?d.slice(e-(b.options.slidesToShow-f),e+f).addClass("slick-active").attr("aria-hidden","false"):d.slice(e,e+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false")),"ondemand"===b.options.lazyLoad&&b.lazyLoad()},b.prototype.setupInfinite=function(){var c,d,e,b=this;if(b.options.fade===!0&&(b.options.centerMode=!1),b.options.infinite===!0&&b.options.fade===!1&&(d=null,b.slideCount>b.options.slidesToShow)){for(e=b.options.centerMode===!0?b.options.slidesToShow+1:b.options.slidesToShow,c=b.slideCount;c>b.slideCount-e;c-=1)d=c-1,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d-b.slideCount).prependTo(b.$slideTrack).addClass("slick-cloned");for(c=0;e>c;c+=1)d=c,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d+b.slideCount).appendTo(b.$slideTrack).addClass("slick-cloned");b.$slideTrack.find(".slick-cloned").find("[id]").each(function(){a(this).attr("id","")})}},b.prototype.interrupt=function(a){var b=this;a||b.autoPlay(),b.interrupted=a},b.prototype.selectHandler=function(b){var c=this,d=a(b.target).is(".slick-slide")?a(b.target):a(b.target).parents(".slick-slide"),e=parseInt(d.attr("data-slick-index"));return e||(e=0),c.slideCount<=c.options.slidesToShow?(c.setSlideClasses(e),void c.asNavFor(e)):void c.slideHandler(e)},b.prototype.slideHandler=function(a,b,c){var d,e,f,g,j,h=null,i=this;return b=b||!1,i.animating===!0&&i.options.waitForAnimate===!0||i.options.fade===!0&&i.currentSlide===a||i.slideCount<=i.options.slidesToShow?void 0:(b===!1&&i.asNavFor(a),d=a,h=i.getLeft(d),g=i.getLeft(i.currentSlide),i.currentLeft=null===i.swipeLeft?g:i.swipeLeft,i.options.infinite===!1&&i.options.centerMode===!1&&(0>a||a>i.getDotCount()*i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):i.options.infinite===!1&&i.options.centerMode===!0&&(0>a||a>i.slideCount-i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):(i.options.autoplay&&clearInterval(i.autoPlayTimer),e=0>d?i.slideCount%i.options.slidesToScroll!==0?i.slideCount-i.slideCount%i.options.slidesToScroll:i.slideCount+d:d>=i.slideCount?i.slideCount%i.options.slidesToScroll!==0?0:d-i.slideCount:d,i.animating=!0,i.$slider.trigger("beforeChange",[i,i.currentSlide,e]),f=i.currentSlide,i.currentSlide=e,i.setSlideClasses(i.currentSlide),i.options.asNavFor&&(j=i.getNavTarget(),j=j.slick("getSlick"),j.slideCount<=j.options.slidesToShow&&j.setSlideClasses(i.currentSlide)),i.updateDots(),i.updateArrows(),i.options.fade===!0?(c!==!0?(i.fadeSlideOut(f),i.fadeSlide(e,function(){i.postSlide(e)})):i.postSlide(e),void i.animateHeight()):void(c!==!0?i.animateSlide(h,function(){i.postSlide(e)}):i.postSlide(e))))},b.prototype.startLoad=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.hide(),a.$nextArrow.hide()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.hide(),a.$slider.addClass("slick-loading")},b.prototype.swipeDirection=function(){var a,b,c,d,e=this;return a=e.touchObject.startX-e.touchObject.curX,b=e.touchObject.startY-e.touchObject.curY,c=Math.atan2(b,a),d=Math.round(180*c/Math.PI),0>d&&(d=360-Math.abs(d)),45>=d&&d>=0?e.options.rtl===!1?"left":"right":360>=d&&d>=315?e.options.rtl===!1?"left":"right":d>=135&&225>=d?e.options.rtl===!1?"right":"left":e.options.verticalSwiping===!0?d>=35&&135>=d?"down":"up":"vertical"},b.prototype.swipeEnd=function(a){var c,d,b=this;if(b.dragging=!1,b.interrupted=!1,b.shouldClick=b.touchObject.swipeLength>10?!1:!0,void 0===b.touchObject.curX)return!1;if(b.touchObject.edgeHit===!0&&b.$slider.trigger("edge",[b,b.swipeDirection()]),b.touchObject.swipeLength>=b.touchObject.minSwipe){switch(d=b.swipeDirection()){case"left":case"down":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide+b.getSlideCount()):b.currentSlide+b.getSlideCount(),b.currentDirection=0;break;case"right":case"up":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide-b.getSlideCount()):b.currentSlide-b.getSlideCount(),b.currentDirection=1}"vertical"!=d&&(b.slideHandler(c),b.touchObject={},b.$slider.trigger("swipe",[b,d]))}else b.touchObject.startX!==b.touchObject.curX&&(b.slideHandler(b.currentSlide),b.touchObject={})},b.prototype.Line truncated
/**
* c3
* @see https://github.com/masayuki0812/c3
* @license MIT
*/
!function(t){"use strict";function e(t){this.owner=t}function i(t){var e=this.internal=new n(this);e.loadConfig(t),e.beforeInit(t),e.init(),e.afterInit(t),function t(e,i,n){Object.keys(e).forEach(function(a){i[a]=e[a].bind(n),Object.keys(e[a]).length>0&&t(e[a],i[a],n)})}(s,this,this)}function n(e){var i=this;i.d3=t.d3?t.d3:"undefined"!=typeof require?require("d3"):void 0,i.api=e,i.config=i.getDefaultConfig(),i.data={},i.cache={},i.axes={}}function a(t){e.call(this,t)}function r(t,e){function i(t,e){t.attr("transform",function(t){return"translate("+Math.ceil(e(t)+S)+", 0)"})}function n(t,e){t.attr("transform",function(t){return"translate(0,"+Math.ceil(e(t))+")"})}function a(t){var e=t[0],i=t[t.length-1];return i>e?[e,i]:[i,e]}function r(t){var e,i,n=[];if(t.ticks)return t.ticks.apply(t,g);for(i=t.domain(),e=Math.ceil(i[0]);e<i[1];e++)n.push(e);return n.length>0&&n[0]>0&&n.unshift(n[0]-(n[1]-n[0])),n}function s(){var t,i=_.copy();return e.isCategory&&(t=_.domain(),i.domain([t[0],t[1]-1])),i}function o(t){var e=h?h(t):t;return void 0!==e?e:""}function c(t){if(T)return T;var e={h:11.5,w:5.5};return t.select("text").text(o).each(function(t){var i=this.getBoundingClientRect(),n=o(t),a=i.height,r=n?i.width/n.length:void 0;a&&r&&(e.h=a,e.w=r)}).text(""),T=e,e}function l(i){return e.withoutTransition?i:t.transition(i)}function u(h){h.each(function(){function h(t,i){function n(t,e){r=void 0;for(var o=1;o<e.length;o++)if(" "===e.charAt(o)&&(r=o),a=e.substr(0,o+1),(s=z.w*a.length)>i)return n(t.concat(e.substr(0,r||o)),e.slice(r?r+1:o));return t.concat(e)}var a,r,s,c=o(t),l=[];return"[object Array]"===Object.prototype.toString.call(c)?c:((!i||0>=i)&&(i=Y?95:e.isCategory?Math.ceil(C(L[1])-C(L[0]))-12:110),n(l,c+""))}function g(t,e){var i=z.h;return 0===e&&(i="left"===f||"right"===f?-((B[t.index]-1)*(z.h/2)-3):".71em"),i}var v,b,A,T=u.g=t.select(this),P=this.__chart__||_,C=this.__chart__=s(),L=m||r(C),w=T.selectAll(".tick").data(L,C),V=w.enter().insert("g",".domain").attr("class","tick").style("opacity",1e-6),G=w.exit().remove(),E=l(w).style("opacity",1),I=_.rangeExtent?_.rangeExtent():a(_.range()),O=T.selectAll(".domain").data([0]),R=(O.enter().append("path").attr("class","domain"),l(O));V.append("line"),V.append("text");var D=V.select("line"),F=E.select("line"),X=V.select("text"),k=E.select("text");e.isCategory?(S=Math.ceil((C(1)-C(0))/2),b=p?0:S,A=p?S:0):S=b=0;var M,H,z=c(T.select(".tick")),B=[],N=Math.max(x,0)+y,Y="left"===f||"right"===f;(H=(M=w.select("text")).selectAll("tspan").data(function(t,i){var n=e.tickMultiline?h(t,e.tickWidth):[].concat(o(t));return B[i]=n.length,n.map(function(t){return{index:i,splitted:t}})})).enter().append("tspan"),H.exit().remove(),H.text(function(t){return t.splitted});var j=e.tickTextRotate;switch(f){case"bottom":v=i,D.attr("y2",x),X.attr("y",N),F.attr("x1",b).attr("x2",b).attr("y2",function(t){var e=_(t)+(p?0:S);return I[0]<e&&e<I[1]?x:0}),k.attr("x",0).attr("y",function(t){return t?11.5-t/15*2.5*(t>0?1:-1):N}(j)).style("text-anchor",function(t){return t?t>0?"start":"end":"middle"}(j)).attr("transform",function(t){return t?"rotate("+t+")":""}(j)),H.attr("x",0).attr("dy",g).attr("dx",function(t){return t?8*Math.sin(Math.PI*(t/180)):0}(j)),R.attr("d","M"+I[0]+","+d+"V0H"+I[1]+"V"+d);break;case"top":v=i,D.attr("y2",-x),X.attr("y",-N),F.attr("x2",0).attr("y2",-x),k.attr("x",0).attr("y",-N),M.style("text-anchor","middle"),H.attr("x",0).attr("dy","0em"),R.attr("d","M"+I[0]+","+-d+"V0H"+I[1]+"V"+-d);break;case"left":v=n,D.attr("x2",-x),X.attr("x",-N),F.attr("x2",-x).attr("y1",A).attr("y2",A),k.attr("x",-N).attr("y",S),M.style("text-anchor","end"),H.attr("x",-N).attr("dy",g),R.attr("d","M"+-d+","+I[0]+"H0V"+I[1]+"H"+-d);break;case"right":v=n,D.attr("x2",x),X.attr("x",N),F.attr("x2",x).attr("y2",0),k.attr("x",N).attr("y",0),M.style("text-anchor","start"),H.attr("x",N).attr("dy",g),R.attr("d","M"+d+","+I[0]+"H0V"+I[1]+"H"+d)}if(C.rangeBand){var U=C,W=U.rangeBand()/2;P=C=function(t){return U(t)+W}}else P.rangeBand?P=C:G.call(v,C);V.call(v,P),E.call(v,C)})}var d,h,g,p,_=t.scale.linear(),f="bottom",x=6,y=3,m=null,S=0,v=!0;return e=e||{},d=e.withOuterTick?6:0,u.scale=function(t){return arguments.length?(_=t,u):_},u.orient=function(t){return arguments.length?(f=t in{top:1,right:1,bottom:1,left:1}?t+"":"bottom",u):f},u.tickFormat=function(t){return arguments.length?(h=t,u):h},u.tickCentered=function(t){return arguments.length?(p=t,u):p},u.tickOffset=function(){return S},u.tickInterval=function(){var t,i;return e.isCategory?t=2*S:(i=u.g.select("path.domain").node().getTotalLength()-2*d,t=i/u.g.selectAll("line").size()),t===1/0?0:t},u.ticks=function(){return arguments.length?(g=arguments,u):g},u.tickCulling=function(t){return arguments.length?(v=t,u):v},u.tickValues=function(t){if("function"==typeof t)m=function(){return t(_.domain())};else{if(!arguments.length)return m;m=t}return u},u}var s,o,c={version:"0.4.11"};c.generate=function(t){return new i(t)},c.chart={fn:i.prototype,internal:{fn:n.prototypLine truncated
/**
* d3
* @see https://github.com/masayuki0812/d3
* @license MIT
*/
!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===Qu||n[0]===no?no+n:n}function s(n){return(n+="")[0]===no?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=to.length;r>e;++e){var i=to[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){Iu.event.preventDefault()}function k(){for(var n,t=Iu.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=Iu.event;i.target=n,Iu.event=i,t[i.type].apply(e,r)}finally{Iu.event=u}}},t}function E(n){return ro(n,ao),n}function A(n){return"function"==typeof n?n:function(){return io(n,this)}}function C(n){return"function"==typeof n?n:function(){return uo(n,this)}}function z(n,t){return n=Iu.ns.qualify(n),null==t?n.local?function(){this.removeAttributeNS(n.space,n.local)}:function(){this.removeAttribute(n)}:"function"==typeof t?n.local?function(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}:function(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}:n.local?function(){this.setAttributeNS(n.space,n.local,t)}:function(){this.setAttribute(n,t)}}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+Iu.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){var e=(n=T(n).map(D)).length;return"function"==typeof t?function(){for(var r=-1,i=t.apply(this,arguments);++r<e;)n[r](this,i)}:function(){for(var r=-1;++r<e;)n[r](this,t)}}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){return null==t?function(){this.style.removeProperty(n)}:"function"==typeof t?function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}:function(){this.style.setProperty(n,t,e)}}function U(n,t){return null==t?function(){delete this[n]}:"function"==typeof t?function(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}:function(){this[n]=t}}function j(n){return"function"==typeof n?n:(n=Iu.ns.qualify(n)).local?function(){return this.ownerDocument.createElementNS(n.space,n.local)}:function(){var t=this.ownerDocument,e=this.namespaceURI;return e===lo&&t.documentElement.namespaceURI===lo?t.createElement(n):t.createElementNS(e,n)}}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return oo(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ro(n,fo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[i];t&&(this.removeEventListener(n,t,t.$),delete this[i])}var i="__on"+n,u=n.indexOf("."),o=$;u>0&&(n=n.slice(0,u));var a=so.get(n);return a&&(n=a,o=B),u?t?function(){var u=o(t,Zu(arguments));r.call(this),this.addEventListener(n,this[i]=u,u.$=e),u._=t}:r:t?b:function(){var t,e=new RegExp("^__on([^.]+)"+Iu.requotLine truncated
/**
* @module Custom Waypoints
* @author Evgeniy Gusarov
* @see https://ua.linkedin.com/pub/evgeniy-gusarov/8a/a40/54a
* @license MIT
*/
!function(t){var o=t("[data-waypoint-to]");o.length&&t(document).ready(function(){o.each(function(){var o=t(this);o.on("click",function(n){n.preventDefault(),t("body, html").stop().animate({scrollTop:t(o.attr("data-waypoint-to")).offset().top},800)})})})}(jQuery);
/**
* @module Select2
* @see https://github.com/select2/select2/blob/master/
* @license MIT
* @version 4.0.5
*/
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=function(b,c){return void 0===c&&(c="undefined"!=typeof window?require("jquery"):require("jquery")(b)),a(c),c}:a(jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return v.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o=b&&b.split("/"),p=t.map,q=p&&p["*"]||{};if(a){for(a=a.split("/"),g=a.length-1,t.nodeIdCompat&&x.test(a[g])&&(a[g]=a[g].replace(x,"")),"."===a[0].charAt(0)&&o&&(n=o.slice(0,o.length-1),a=n.concat(a)),k=0;k<a.length;k++)if("."===(m=a[k]))a.splice(k,1),k-=1;else if(".."===m){if(0===k||1===k&&".."===a[2]||".."===a[k-1])continue;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}if((o||q)&&p){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),o)for(l=o.length;l>0;l-=1)if((e=p[o.slice(0,l).join("/")])&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&q&&q[d]&&(i=q[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=w.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),o.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){r[a]=b}}function j(a){if(e(s,a)){var c=s[a];delete s[a],u[a]=!0,n.apply(b,c)}if(!e(r,a)&&!e(u,a))throw new Error("No "+a);return r[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return a?k(a):[]}function m(a){return function(){return t&&t.config&&t.config[a]||{}}}var n,o,p,q,r={},s={},t={},u={},v=Object.prototype.hasOwnProperty,w=[].slice,x=/\.js$/;p=function(a,b){var c,d=k(a),e=d[0],g=b[1];return a=d[1],e&&(e=f(e,g),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(g)):f(a,g):(a=f(a,g),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},q={require:function(a){return g(a)},exports:function(a){var b=r[a];return void 0!==b?b:r[a]={}},module:function(a){return{id:a,uri:"",exports:r[a],config:m(a)}}},n=function(a,c,d,f){var h,k,m,n,o,t,v,w=[],x=typeof d;if(f=f||a,t=l(f),"undefined"===x||"function"===x){for(c=!c.length&&d.length?["require","exports","module"]:c,o=0;o<c.length;o+=1)if(n=p(c[o],t),"require"===(k=n.f))w[o]=q.require(a);else if("exports"===k)w[o]=q.exports(a),v=!0;else if("module"===k)h=w[o]=q.module(a);else if(e(r,k)||e(s,k)||e(u,k))w[o]=j(k);else{if(!n.p)throw new Error(a+" missing "+k);n.p.load(n.n,g(f,!0),i(k),{}),w[o]=r[k]}m=d?d.apply(r[a],w):void 0,a&&(h&&h.exports!==b&&h.exports!==r[a]?r[a]=h.exports:m===b&&v||(r[a]=m))}else a&&(r[a]=d)},a=c=o=function(a,c,d,e,f){if("string"==typeof a)return q[a]?q[a](c):j(p(a,l(c)).f);if(!a.splice){if(t=a,t.deps&&o(t.deps,t.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?n(b,a,c,d):setTimeout(function(){n(b,a,c,d)},4),o},o.config=function(a){return o(a)},a._defined=r,d=function(a,b,c){if("string"!=typeof a)throw new Error("See almond README: incorrect module build, no module name");b.splice||(c=b,b=[]),e(r,a)||e(s,a)||(s[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){"function"==typeof b[d]&&("constructor"!==d&&c.push(d))}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){return Array.prototype.unshift.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};return d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice,c=b.call(arguments,1);this.listeners=this.listeners||{},null==c&&(c=[]),0===c.length&&c.push({}),c[0]._type=a,a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1))Line truncated
/**
* @module jquery.hoverdir.js
* @license MIT
* @link http://www.codrops.com
* @version 1.1.0
*/
!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):"undefined"!=typeof exports?module.exports=t(require("jquery")):t(jQuery)}(function(t){"use strict";function e(e,i){this.$el=t(e),this.options=t.extend(!0,{},this.defaults,i),this.isVisible=!1,this.$hoverElem=this.$el.find(this.options.hoverElem),this.transitionProp="all "+this.options.speed+"ms "+this.options.easing,this.support=this._supportsTransitions(),this._loadEvents()}e.prototype={defaults:{speed:300,easing:"ease",hoverDelay:0,inverse:!1,hoverElem:"div"},constructor:e,_supportsTransitions:function(){if("undefined"!=typeof Modernizr)return Modernizr.csstransitions;var t=(document.body||document.documentElement).style,e="transition";if("string"==typeof t[e])return!0;var i=["Moz","webkit","Webkit","Khtml","O","ms"];e=e.charAt(0).toUpperCase()+e.substr(1);for(var s=0;s<i.length;s++)if("string"==typeof t[i[s]+e])return!0;return!1},_loadEvents:function(){this.$el.on("mouseenter.hoverdir mouseleave.hoverdir",t.proxy(function(t){this.direction=this._getDir({x:t.pageX,y:t.pageY}),"mouseenter"===t.type?this._showHover():this._hideHover()},this))},_showHover:function(){var e=this._getStyle(this.direction);this.support&&this.$hoverElem.css("transition",""),this.$hoverElem.hide().css(e.from),clearTimeout(this.tmhover),this.tmhover=setTimeout(t.proxy(function(){this.$hoverElem.show(0,t.proxy(function(){this.support&&this.$hoverElem.css("transition",this.transitionProp),this._applyAnimation(e.to)},this))},this),this.options.hoverDelay),this.isVisible=!0},_hideHover:function(){var t=this._getStyle(this.direction);this.support&&this.$hoverElem.css("transition",this.transitionProp),clearTimeout(this.tmhover),this._applyAnimation(t.from),this.isVisible=!1},_getDir:function(t){var e=this.$el.width(),i=this.$el.height(),s=(t.x-this.$el.offset().left-e/2)*(e>i?i/e:1),o=(t.y-this.$el.offset().top-i/2)*(i>e?e/i:1);return Math.round((Math.atan2(o,s)*(180/Math.PI)+180)/90+3)%4},_getStyle:function(t){var e,i,s={transform:"translate(0, -100%)"},o={transform:"translate(0, 100%)"},r={transform:"translate(-100%, 0)"},n={transform:"translate(100%, 0)"},h={transform:"translateY(0)"},a={transform:"translateX(0)"};switch(t){case 0:case"top":e=this.options.inverse?o:s,i=h;break;case 1:case"right":e=this.options.inverse?r:n,i=a;break;case 2:case"bottom":e=this.options.inverse?s:o,i=h;break;case 3:case"left":e=this.options.inverse?n:r,i=a}return{from:e,to:i}},_applyAnimation:function(e){t.fn.applyStyle=this.support?t.fn.css:t.fn.animate,this.$hoverElem.stop().applyStyle(e,t.extend(!0,[],{duration:this.options.speed}))},show:function(t){this.$el.off("mouseenter.hoverdir mouseleave.hoverdir"),this.isVisible||(this.direction=t||"top",this._showHover())},hide:function(t){this.rebuild(),this.isVisible&&(this.direction=t||"bottom",this._hideHover())},setOptions:function(e){this.options=t.extend(!0,{},this.defaults,this.options,e)},destroy:function(){this.$el.off("mouseenter.hoverdir mouseleave.hoverdir"),this.$el.data("hoverdir",null)},rebuild:function(t){"object"==typeof t&&this.setOptions(t),this._loadEvents()}},t.fn.hoverdir=function(i,s){return this.each(function(){var o=t(this).data("hoverdir"),r="object"==typeof i&&i;o||(o=new e(this,r),t(this).data("hoverdir",o)),"string"==typeof i&&(o[i](s),"destroy"===i&&t(this).data("hoverdir",!1))})},t.fn.hoverdir.Constructor=e});
/**
* @module Vide
* @license MIT
* @link http://vodkabears.github.io/vide/
* @version 0.5.1
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):b("object"==typeof exports?require("jquery"):a.jQuery)}(this,function(a){"use strict";function b(a){var b,c,d,e,f,g,h,i={};for(f=a.replace(/\s*:\s*/g,":").replace(/\s*,\s*/g,",").split(","),h=0,g=f.length;h<g&&(c=f[h],c.search(/^(http|https|ftp):\/\//)===-1&&c.search(":")!==-1);h++)b=c.indexOf(":"),d=c.substring(0,b),e=c.substring(b+1),e||(e=void 0),"string"==typeof e&&(e="true"===e||"false"!==e&&e),"string"==typeof e&&(e=isNaN(e)?e:+e),i[d]=e;return null==d&&null==e?a:i}function c(a){a=""+a;var b,c,d,e=a.split(/\s+/),f="50%",g="50%";for(d=0,b=e.length;d<b;d++)c=e[d],"left"===c?f="0%":"right"===c?f="100%":"top"===c?g="0%":"bottom"===c?g="100%":"center"===c?0===d?f="50%":g="50%":0===d?f=c:g=c;return{x:f,y:g}}function d(b,c){var d=function(){c(this.src)};a('<img src="'+b+'.gif">').on("load",d),a('<img src="'+b+'.jpg">').on("load",d),a('<img src="'+b+'.jpeg">').on("load",d),a('<img src="'+b+'.png">').on("load",d)}function e(c,d,e){if(this.$element=a(c),"string"==typeof d&&(d=b(d)),e?"string"==typeof e&&(e=b(e)):e={},"string"==typeof d)d=d.replace(/\.\w*$/,"");else if("object"==typeof d)for(var f in d)d.hasOwnProperty(f)&&(d[f]=d[f].replace(/\.\w*$/,""));this.settings=a.extend({},g,e),this.path=d;try{this.init()}catch(i){if(i.message!==h)throw i}}var f="vide",g={volume:1,playbackRate:1,muted:!0,loop:!0,autoplay:!0,position:"50% 50%",posterType:"detect",resizing:!0,bgColor:"transparent",className:""},h="Not implemented";e.prototype.init=function(){var b,e,f=this,g=f.path,i=g,j="",k=f.$element,l=f.settings,m=c(l.position),n=l.posterType;e=f.$wrapper=a("<div>").addClass(l.className).css({position:"absolute","z-index":-1,top:0,left:0,bottom:0,right:0,overflow:"hidden","-webkit-background-size":"cover","-moz-background-size":"cover","-o-background-size":"cover","background-size":"cover","background-color":l.bgColor,"background-repeat":"no-repeat","background-position":m.x+" "+m.y}),"object"==typeof g&&(g.poster?i=g.poster:g.mp4?i=g.mp4:g.webm?i=g.webm:g.ogv&&(i=g.ogv)),"detect"===n?d(i,function(a){e.css("background-image","url("+a+")")}):"none"!==n&&e.css("background-image","url("+i+"."+n+")"),"static"===k.css("position")&&k.css("position","relative"),k.prepend(e),"object"==typeof g?(g.mp4&&(j+='<source src="'+g.mp4+'.mp4" type="video/mp4">'),g.webm&&(j+='<source src="'+g.webm+'.webm" type="video/webm">'),g.ogv&&(j+='<source src="'+g.ogv+'.ogv" type="video/ogg">'),b=f.$video=a("<video>"+j+"</video>")):b=f.$video=a('<video><source src="'+g+'.mp4" type="video/mp4"><source src="'+g+'.webm" type="video/webm"><source src="'+g+'.ogv" type="video/ogg"></video>');try{b.prop({autoplay:l.autoplay,loop:l.loop,volume:l.volume,muted:l.muted,defaultMuted:l.muted,playbackRate:l.playbackRate,defaultPlaybackRate:l.playbackRate})}catch(o){throw new Error(h)}b.css({margin:"auto",position:"absolute","z-index":-1,top:m.y,left:m.x,"-webkit-transform":"translate(-"+m.x+", -"+m.y+")","-ms-transform":"translate(-"+m.x+", -"+m.y+")","-moz-transform":"translate(-"+m.x+", -"+m.y+")",transform:"translate(-"+m.x+", -"+m.y+")",visibility:"hidden",opacity:0}).one("canplaythrough.vide",function(){f.resize()}).one("playing.vide",function(){b.css({visibility:"visible",opacity:1}),e.css("background-image","none")}),k.on("resize.vide",function(){l.resizing&&f.resize()}),e.append(b)},e.prototype.getVideoObject=function(){return this.$video[0]},e.prototype.resize=function(){if(this.$video){var a=this.$wrapper,b=this.$video,c=b[0],d=c.videoHeight,e=c.videoWidth,f=a.height(),g=a.width();g/e>f/d?b.css({width:g+2,height:"auto"}):b.css({width:"auto",height:f+2})}},e.prototype.destroy=function(){delete a[f].lookup[this.index],this.$video&&this.$video.off(f),this.$element.off(f).removeData(f),this.$wrapper.remove()},a[f]={lookup:[]},a.fn[f]=function(b,c){var d;return this.each(function(){d=a.data(this,f),d&&d.destroy(),d=new e(this,b,c),d.index=a[f].lookup.push(d)-1,a.data(this,f,d)}),this},a(document).ready(function(){var b=a(window);b.on("resize.vide",function(){for(var b,c=a[f].lookup.length,d=0;d<c;d++)b=a[f].lookup[d],b&&b.settings.resizing&&b.resize()}),b.on("unload.vide",function(){return!1}),a(document).find("[data-vide-bg]").each(function(b,c){var d=a(c),e=d.data("vide-options"),g=d.data("vide-bg");d[f](g,e)})})});
/**
* @module SmoothScroll.js
*/
!function(){function e(){z.keyboardSupport&&f("keydown",r)}function t(){if(!Y&&document.body){Y=!0;var t=document.body,o=document.documentElement,n=window.innerHeight,r=t.scrollHeight;if(A=document.compatMode.indexOf("CSS")>=0?o:t,D=t,e(),top!=self)L=!0;else if(r>n&&(t.offsetHeight<=n||o.offsetHeight<=n)){var a=document.createElement("div");a.style.cssText="position:absolute; z-index:-10000; top:0; left:0; right:0; height:"+A.scrollHeight+"px",document.body.appendChild(a);var i;M=function(){i||(i=setTimeout(function(){C||(a.style.height="0",a.style.height=A.scrollHeight+"px",i=null)},500))},setTimeout(M,10),f("resize",M);var l={attributes:!0,childList:!0,characterData:!1};if((k=new _(M)).observe(t,l),A.offsetHeight<=n){var c=document.createElement("div");c.style.clear="both",t.appendChild(c)}}z.fixedBackground||C||(t.style.backgroundAttachment="scroll",o.style.backgroundAttachment="scroll")}}function o(e,t,o){if(h(t,o),1!=z.accelerationMax){var n=Date.now()-P;if(n<z.accelerationDelta){var r=(1+50/n)/2;r>1&&(r=Math.min(r,z.accelerationMax),t*=r,o*=r)}P=Date.now()}if(K.push({x:t,y:o,lastX:t<0?.99:-.99,lastY:o<0?.99:-.99,start:Date.now()}),!q){var a=e===document.body,i=function(n){for(var r=Date.now(),l=0,c=0,u=0;u<K.length;u++){var d=K[u],s=r-d.start,f=s>=z.animationTime,m=f?1:s/z.animationTime;z.pulseAlgorithm&&(m=S(m));var w=d.x*m-d.lastX>>0,h=d.y*m-d.lastY>>0;l+=w,c+=h,d.lastX+=w,d.lastY+=h,f&&(K.splice(u,1),u--)}a?window.scrollBy(l,c):(l&&(e.scrollLeft+=l),c&&(e.scrollTop+=c)),t||o||(K=[]),K.length?I(i,e,1e3/z.frameRate+1):q=!1};I(i,e,0),q=!0}}function n(e){Y||t();var n=e.target,r=c(n);if(!r||e.defaultPrevented||e.ctrlKey)return!0;if(w(D,"embed")||w(n,"embed")&&/\.pdf/i.test(n.src)||w(D,"object"))return!0;var a=-e.wheelDeltaX||e.deltaX||0,l=-e.wheelDeltaY||e.deltaY||0;if(N&&(e.wheelDeltaX&&v(e.wheelDeltaX,120)&&(a=e.wheelDeltaX/Math.abs(e.wheelDeltaX)*-120),e.wheelDeltaY&&v(e.wheelDeltaY,120)&&(l=e.wheelDeltaY/Math.abs(e.wheelDeltaY)*-120)),a||l||(l=-e.wheelDelta||0),1===e.deltaMode&&(a*=40,l*=40),!z.touchpadSupport&&p(l))return!0;Math.abs(a)>1.2&&(a*=z.stepSize/120),Math.abs(l)>1.2&&(l*=z.stepSize/120),o(r,a,l),e.preventDefault(),i()}function r(e){var t=e.target,n=e.ctrlKey||e.altKey||e.metaKey||e.shiftKey&&e.keyCode!==O.spacebar;t.blur(),t.focus(),document.body.contains(D)||(D=document.activeElement);var r=/^(button|submit|radio|checkbox|file|color|image)$/i;if(/^(textarea|select|embed|object)$/i.test(t.nodeName)||w(t,"input")&&!r.test(t.type)||w(D,"video")||g(e)||t.isContentEditable||e.defaultPrevented||n)return!0;var a=0,l=0,u=c(D),d=u.clientHeight;switch(u==document.body&&(d=window.innerHeight),e.keyCode){case O.up:l=-z.arrowScroll;break;case O.down:l=z.arrowScroll;break;case O.spacebar:l=-(e.shiftKey?1:-1)*d*.9;break;case O.pageup:l=.9*-d;break;case O.pagedown:l=.9*d;break;case O.home:l=-u.scrollTop;break;case O.end:var s=u.scrollHeight-u.scrollTop-d;l=s>0?s+10:0;break;case O.left:a=-z.arrowScroll;break;case O.right:a=z.arrowScroll;break;default:return!0}o(u,a,l),e.preventDefault(),i()}function a(e){D=e.target}function i(){clearTimeout(T),T=setInterval(function(){j={}},1e3)}function l(e,t){for(var o=e.length;o--;)j[R(e[o])]=t;return t}function c(e){var t=[],o=document.body,n=A.scrollHeight;do{var r=j[R(e)];if(r)return l(t,r);if(t.push(e),n===e.scrollHeight){var a=d(A)&&d(o)||s(A);if(L&&u(A)||!L&&a)return l(t,V())}else if(u(e)&&s(e))return l(t,e)}while(e=e.parentElement)}function u(e){return e.clientHeight+10<e.scrollHeight}function d(e){return"hidden"!==getComputedStyle(e,"").getPropertyValue("overflow-y")}function s(e){var t=getComputedStyle(e,"").getPropertyValue("overflow-y");return"scroll"===t||"auto"===t}function f(e,t){window.addEventListener(e,t,!1)}function m(e,t){window.removeEventListener(e,t,!1)}function w(e,t){return(e.nodeName||"").toLowerCase()===t.toLowerCase()}function h(e,t){e=e>0?1:-1,t=t>0?1:-1,X.x===e&&X.y===t||(X.x=e,X.y=t,K=[],P=0)}function p(e){if(e)return B.length||(B=[e,e,e]),e=Math.abs(e),B.push(e),B.shift(),clearTimeout(E),E=setTimeout(function(){window.localStorage&&(localStorage.SS_deltaBuffer=B.join(","))},1e3),!b(120)&&!b(100)}function v(e,t){return Math.floor(e/t)==e/t}function b(e){return v(B[0],e)&&v(B[1],e)&&v(B[2],e)}function g(e){var t=e.target,o=!1;if(-1!=document.URL.indexOf("www.youtube.com/watch"))do{if(o=t.classList&&t.classList.contains("html5-video-controls"))break}while(t=t.parentNode);return o}function y(e){var t,o;return e*=z.pulseScale,e<1?t=e-(1-Math.exp(-e)):(e-=1,t=(o=Math.exp(-1))+(1-Math.exp(-e))*(1-o)),t*z.pulseNormalize}function S(e){return e>=1?1:e<=0?0:(1==z.pulseNormalize&&(z.pulseNormalize/=y(1)),y(e))}function x(e){for(var t in e)H.hasOwnProperty(t)&&(z[t]=e[t])}var D,k,M,T,E,H={frameRate:150,animationTime:400,stepSize:100,pulseAlgorithm:!0,pulseScale:4,pulseNormalize:1,accelerationDelta:20,accelerationMax:3,keyboardSupport:!0,arrowScroll:50,touchpadSupport:!1,fixedBackground:!0,excluded:""},z=H,C=!1,L=!1,X={x:0,y:0},Y=!1,A=document.documeLine truncated
/**
* @module RD Range
* @author Roman Kholiavko
* @see http://cms.devoffice.com/coding-demo/marathoner/rd-range/documentation
* @version 1.0
*/
(function(){!function(t,e,n){var o,i;return i="ontouchstart"in n,o=function(){function o(n,o){this.$element=t(n),this.options=t.extend(!0,{},this.Defaults,o),this.setClientOptions(this),this.createDOM(this),this.$pointer=t(n).find(".rd-range__pointer-1"),this.options.tooltip&&(this.$pointerTooltip=this.$pointer.find(".rd-range__pointer-tooltip"),this.$element.addClass("hasTooltip")),this.$line=t(n).find(".rd-range__line"),null!=t(n).attr("data-input")?this.$input=t(t(n).attr("data-input")):this.$input=t(this.Defaults.inputClassName),this.range&&(this.$pointer2=t(n).find(".rd-range__pointer-2"),null!=t(n).attr("data-input-2")?this.$input2=t(t(n).attr("data-input-2")):this.$input2=t(this.Defaults.inputClassName2),this.options.tooltip&&(this.$pointerTooltip2=this.$pointer2.find(".rd-range__pointer-tooltip"))),this.$doc=t(e),this.isMove=!1,this.initialization()}return o.prototype.Defaults={min:0,start:0,max:100,start2:0,step:1,minDiff:0,inputClassName:".rd-range-input-value",inputClassName2:".rd-range-input-value-2",tooltip:!1,callbacks:{onInit:!1,onChange:!1,onInputChange:!1,onMoveStart:!1,onMoveEnd:!1}},o.prototype.initialization=function(){var t;return t=this,t.setRange(t),t.applyHandlers(t),t.options.callbacks.onInit&&t.options.callbacks.onInit.call(this,t),t},o.prototype.createDOM=function(t){var e;e='<div class="rd-range__pointer rd-range__pointer-1">',t.options.tooltip&&(e+='<div class="rd-range__pointer-tooltip"></div>'),e+="</div>",t.range&&(e+='<div class="rd-range__pointer rd-range__pointer-2">',t.options.tooltip&&(e+='<div class="rd-range__pointer-tooltip"></div>'),e+="</div>"),t.$element.wrapInner('<div class="rd-range__wrap">'+e+'<div class="rd-range__line"></div> </div>')},o.prototype.setClientOptions=function(t){var e;e={min:t.$element.attr("data-min"),max:t.$element.attr("data-max"),step:t.$element.attr("data-step"),start:t.$element.data("start"),minDiff:t.$element.attr("data-min-diff"),precision:t.$element.attr("data-precision"),tooltip:t.$element.attr("data-tooltip")},t.options.start=[],(null!=e.start&&e.start.length>1||null!=t.options.start&&t.options.start.length>1)&&(t.range=!0),null!=e.min&&(t.options.min=Number(e.min)),null!=e.max&&(t.options.max=Number(e.max)),null!=e.start?t.options.start=e.start:t.options.start.push(t.options.min),t.currentValue=t.options.start[0],null!=e.step&&(t.options.step=Number(e.step)),null!=e.tooltip&&(t.options.tooltip=e.tooltip),null!=e.precision?t.options.precision=t.getNumDigitsAfterDecimalPlace(Number(e.precision)):t.options.precision=t.getNumDigitsAfterDecimalPlace(t.options.step),t.range&&(t.currentValue2=t.options.start[1],null!=e.minDiff?t.options.minDiff=Number(e.minDiff):null!=t.options.minDiff&&(t.options.minDiff=t.options.step))},o.prototype.setRange=function(t){return t.diff=t.options.max-t.options.min,t.delta=100*t.options.step/t.diff,t.currentPercentage=t.getPercentageByValue(t,t.currentValue),t.updatePointer1(t,t.currentPercentage,t.currentValue),t.range?(t.currentPercentage2=t.getPercentageByValue(t,t.currentValue2),t.updatePointer2(t,t.currentPercentage2,t.currentValue2)):void 0},o.prototype.applyHandlers=function(e){return e.$pointer.on(i?"touchstart":"mousedown",function(n){var o,r,a,u;if(!e.isMove)return e.isMove=!0,o=t(this),o.addClass("active"),a="touchmove"===n.type?n.originalEvent.targetTouches[0].pageX:n.pageX,r=e.getCoords(e.$element),u=e.getPercentage(e,a,r.left),e.options.callbacks.onMoveStart&&e.options.callbacks.onMoveStart.call(this,e),e.$doc.on(i?"touchmove":"mousemove",function(t){var n;return a="touchmove"===t.type?t.originalEvent.targetTouches[0].pageX:t.pageX,n=e.getPercentage(e,a,r.left),n!==u?(u=n,e.currentValue=e.getCurrentValue(e,u),e.range&&e.currentValue>=e.currentValue2-e.options.minDiff&&(n=e.checkPointer1Bounds(e)),e.updatePointer1(e,n,e.currentValue)):void 0}).on(i?"touchend":"mouseup",function(t){return setTimeout(function(){return e.isMove=!1},100),o.removeClass("active"),e.options.callbacks.onMoveEnd&&e.options.callbacks.onMoveEnd.call(this,e),i?e.$doc.off("touchmove"):e.$doc.off("mousemove"),e.$doc.off(t.type)}),!1}),"hidden"!==e.$input.attr("type")&&"readonly"!==e.$input.attr("readOnly")&&e.$input.on("keypress",function(t){return e.isAllowTyped(t.which)}).on("change",function(n){var o;return o=Math.abs(Number(t(this).val())),e.range&&(o>=e.currentValue2||o>e.currentValue2-e.options.minDiff)&&(e.checkPointer1Bounds(e),o=e.currentValue),o<e.options.min&&(o=e.options.min),e.currentValue=o,e.setRange(e),e.options.callbacks.onInputChange?e.options.callbacks.onInputChange.call(this,e):void 0}),e.range&&(e.$pointer2.on(i?"touchstart":"mousedown",function(n){var o,r,a,u;if(!e.isMove)return e.isMove=!0,o=t(this),o.addClass("active"),a="touchmove"===n.type?n.originalEvent.targetTouches[0].pageX:n.pageX,r=e.getCoords(e.$element),u=e.getPercentage(e,a,r.left),e.options.callbacks.onMoveStart&&e.options.callbacks.onMoveStart.call(this,e),e.$doc.on(i?"touchmove":"mousemove",function(t){var n;return a="touchmove"===t.type?Line truncated
-193
View File
@@ -1,193 +0,0 @@
{% load static %}
<!DOCTYPE html>
<html class="wide wow-animation" lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}{{ SITE_NAME }}{% endblock %}</title>
<meta name="description" content="{% block meta_description %}{{ SITE_NAME }} — {{ SITE_TAGLINE }}. {{ CONTACT_SERVICE_AREA }}.{% endblock %}">
<meta name="robots" content="{% block meta_robots %}index, follow{% endblock %}">
<link rel="canonical" href="{% block canonical_url %}{{ PUBLIC_SITE_URL }}{{ request.path }}{% endblock %}">
<meta property="og:type" content="website">
<meta property="og:site_name" content="{{ SITE_NAME }}">
<meta property="og:locale" content="en_US">
<meta property="og:title" content="{% block og_title %}{{ SITE_NAME }}{% endblock %}">
<meta property="og:description" content="{% block og_description %}{{ SITE_NAME }} — {{ SITE_TAGLINE }}. {{ CONTACT_SERVICE_AREA }}.{% endblock %}">
<meta property="og:url" content="{% block og_url %}{{ PUBLIC_SITE_URL }}{{ request.path }}{% endblock %}">
{% block og_image %}
<meta property="og:image" content="{{ PUBLIC_SITE_URL }}{% static 'images/slider-minimal-slide-1-1920x968.jpg' %}">
<meta property="og:image:alt" content="{{ SITE_NAME }}">
{% endblock %}
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{% block twitter_title %}{{ SITE_NAME }}{% endblock %}">
<meta name="twitter:description" content="{% block twitter_description %}{{ SITE_NAME }} — {{ SITE_TAGLINE }}. {{ CONTACT_SERVICE_AREA }}.{% endblock %}">
<link rel="icon" href="{% static 'brand/favicon-32.png' %}" type="image/png">
<link rel="apple-touch-icon" href="{% static 'brand/apple-touch-icon.png' %}">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Work+Sans:300,400,500,700,800%7CPoppins:300,400,700">
<link rel="stylesheet" href="{% static 'css/bootstrap.css' %}">
<link rel="stylesheet" href="{% static 'css/fonts.css' %}">
<link rel="stylesheet" href="{% static 'css/style.css' %}" id="main-styles-link">
<link rel="stylesheet" href="{% static 'css/theme-overrides.css' %}">
{% block structured_data %}{% endblock %}
{% block extra_head %}{% endblock %}
</head>
<body class="{% block body_class %}{% endblock %}">
{% if tianji_enabled %}
<div id="tianji-config"
data-tracker-url="{{ tianji_tracker_url }}"
data-website-id="{{ tianji_website_id }}"
data-page-name="{{ page_name }}"
{% if user.is_authenticated %}data-user-id="{{ user.pk }}"{% endif %}
hidden></div>
{% endif %}
{% block body %}
<div class="page">
{% block header %}
<header class="section page-header">
<div class="rd-navbar-wrap">
<nav class="rd-navbar rd-navbar-corporate" data-layout="rd-navbar-fixed" data-sm-layout="rd-navbar-fixed" data-md-layout="rd-navbar-fixed" data-md-device-layout="rd-navbar-fixed" data-lg-layout="rd-navbar-static" data-lg-device-layout="rd-navbar-static" data-lg-stick-up="true" data-lg-stick-up-offset="118px" data-xl-layout="rd-navbar-static" data-xl-device-layout="rd-navbar-static" data-xl-stick-up="true" data-xl-stick-up-offset="118px" data-xxl-layout="rd-navbar-static" data-xxl-device-layout="rd-navbar-static" data-xxl-stick-up-offset="118px" data-xxl-stick-up="true">
<div class="rd-navbar-aside-outer">
<div class="rd-navbar-aside">
<div class="rd-navbar-panel">
<button class="rd-navbar-toggle" data-rd-navbar-toggle="#rd-navbar-nav-wrap-1"><span></span></button>
<a class="rd-navbar-brand" href="{% url 'public:home' %}" data-tianji-event="nav_home">
<img src="{% static 'brand/logo.png' %}" alt="{{ SITE_NAME }}" width="151" height="44"/>
</a>
</div>
<div class="rd-navbar-collapse">
<button class="rd-navbar-collapse-toggle rd-navbar-fixed-element-1" data-rd-navbar-toggle="#rd-navbar-collapse-content-1"><span></span></button>
<div class="rd-navbar-collapse-content" id="rd-navbar-collapse-content-1">
{% if CONTACT_PHONE %}
<article class="unit align-items-center">
<div class="unit-left"><span class="icon icon-md icon-modern mdi mdi-phone"></span></div>
<div class="unit-body"><a class="link-default" href="tel:{{ CONTACT_PHONE_TEL }}">{{ CONTACT_PHONE }}</a></div>
</article>
{% endif %}
<article class="unit align-items-center">
<div class="unit-left"><span class="icon icon-md icon-modern mdi mdi-map-marker"></span></div>
<div class="unit-body"><span class="link-default">{% if CONTACT_ADDRESS %}{{ CONTACT_ADDRESS }}{% else %}{{ CONTACT_SERVICE_AREA }}{% endif %}</span></div>
</article>
<a class="button button-gray-bordered button-winona" href="{% url 'public:contact' %}" data-tianji-event="nav_get_in_touch">Get in touch</a>
</div>
</div>
</div>
</div>
<div class="rd-navbar-main-outer">
<div class="rd-navbar-main">
<div class="rd-navbar-nav-wrap" id="rd-navbar-nav-wrap-1">
<ul class="rd-navbar-nav">
<li class="rd-nav-item {% if page_name == 'home' %}active{% endif %}">
<a class="rd-nav-link" href="{% url 'public:home' %}" data-tianji-event="nav_home">Home</a>
</li>
<li class="rd-nav-item {% if page_name == 'about' %}active{% endif %}">
<a class="rd-nav-link" href="{% url 'public:about' %}" data-tianji-event="nav_about">About</a>
</li>
<li class="rd-nav-item {% if page_name == 'contact' %}active{% endif %}">
<a class="rd-nav-link" href="{% url 'public:contact' %}" data-tianji-event="nav_contact">Contact</a>
</li>
{% for item in public_nav_extra %}
<li class="rd-nav-item {% if page_name == item.section %}active{% endif %}">
<a class="rd-nav-link" href="{% url item.url_name %}">{{ item.label }}</a>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
</nav>
</div>
</header>
{% endblock %}
{% if messages %}
<ul class="flash">
{% for message in messages %}
<li class="{{ message.tags }}">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% block content %}{% endblock %}
{% block footer %}
<footer class="section footer-advanced bg-gray-700">
<div class="footer-advanced-main">
<div class="container">
<div class="row row-50">
<div class="col-lg-6">
<div class="footer-brand-row">
<img src="{% static 'brand/logo.png' %}" alt="{{ SITE_NAME }}">
<div>
<h5 class="font-weight-bold text-uppercase text-white" style="margin:0">{{ SITE_NAME }}</h5>
<span style="color:#7dd3da;font-size:12px">{{ SITE_TAGLINE }}</span>
</div>
</div>
<p class="footer-advanced-text">Replace this footer blurb with the client’s positioning.{% if CONTACT_ADDRESS %} {{ CONTACT_ADDRESS }}.{% endif %}</p>
</div>
<div class="col-lg-6">
<h5 class="font-weight-bold text-uppercase text-white">Navigate</h5>
<ul class="list-marked list-marked-sm">
<li><a href="{% url 'public:home' %}">Home</a></li>
<li><a href="{% url 'public:about' %}">About</a></li>
<li><a href="{% url 'public:contact' %}">Contact</a></li>
<li><a href="{% url 'public:terms' %}">Terms of Service</a></li>
{% for item in public_nav_extra %}
<li><a href="{% url item.url_name %}">{{ item.label }}</a></li>
{% endfor %}
{% if user.is_authenticated %}
<li><a href="{% url 'dashboard:home' %}">Client portal</a></li>
{% else %}
<li><a href="{% url 'accounts:login' %}">Client portal</a></li>
{% endif %}
</ul>
<p style="margin-top:16px">
<a class="footer-link-btn" href="{% url 'public:terms' %}" data-tianji-event="footer_cookie_preferences">Cookie Preferences</a>
</p>
</div>
</div>
</div>
</div>
<div class="footer-advanced-aside">
<div class="container">
<div class="footer-advanced-layout">
<a class="brand" href="{% url 'public:home' %}">
<img src="{% static 'brand/logo.png' %}" alt="{{ SITE_NAME }}" width="151" height="44"/>
</a>
<div class="footer-aside-copy">
<p class="rights">
<span>&copy;&nbsp;</span><span>{% now "Y" %}&nbsp;</span><span>{{ SITE_NAME }}</span><span>.&nbsp;</span>
</p>
<p class="footer-made-by">
Made by <a href="{{ CREDIT_URL }}" target="_blank" rel="noopener noreferrer">{{ CREDIT_NAME }}</a>
</p>
</div>
</div>
</div>
</div>
</footer>
{% endblock %}
</div>
{% endblock %}
{% if tianji_enabled %}
<div id="cookie-consent-banner" class="cookie-consent-banner" hidden role="dialog" aria-modal="true"
aria-labelledby="cookie-consent-title" aria-describedby="cookie-consent-description">
<div class="cookie-consent-content">
<h2 id="cookie-consent-title" class="visually-hidden">Analytics notice</h2>
<p class="cookie-consent-text" id="cookie-consent-description">
<span class="cookie-consent-text-full">We use analytics to understand how visitors use our site. This helps us improve performance and content. We never sell or share your personal data with third parties for marketing. <a class="cookie-consent-link" href="{% url 'public:terms' %}">Terms of Service</a></span>
<span class="cookie-consent-text-short">We use analytics on this site. <a class="cookie-consent-link" href="{% url 'public:terms' %}">Terms</a></span>
</p>
<div class="cookie-consent-actions">
<button type="button" id="cookie-consent-acknowledge" class="button button-primary button-winona">Acknowledge</button>
</div>
</div>
</div>
<script src="{% static 'js/tianji-consent.js' %}"></script>
{% endif %}
{% block tracking_events %}{% endblock %}
<script src="{% static 'js/core.min.js' %}"></script>
<script src="{% static 'js/script.js' %}"></script>
{% block extra_js %}{% endblock %}
</body>
</html>
+3 -1
View File
@@ -10,7 +10,9 @@
<div style="display:flex;gap:8px;flex-wrap:wrap"> <div style="display:flex;gap:8px;flex-wrap:wrap">
<a class="btn btn-ghost btn-sm" href="{% url 'contacts:import' %}">Import CSV / Excel</a> <a class="btn btn-ghost btn-sm" href="{% url 'contacts:import' %}">Import CSV / Excel</a>
<a class="btn btn-ghost btn-sm" href="{% url 'contacts:create' %}">New contact</a> <a class="btn btn-ghost btn-sm" href="{% url 'contacts:create' %}">New contact</a>
<a class="btn btn-primary btn-sm" href="{% url 'messaging:campaign_list' %}">New campaign</a> {% if 'email_sms' in enabled_features %}
<a class="btn btn-primary btn-sm" href="{% url 'email_sms:campaign_list' %}">New campaign</a>
{% endif %}
</div> </div>
</div> </div>
+16
View File
@@ -219,3 +219,19 @@ class PortalCreateMatchPromptTests(TestCase):
self.existing.refresh_from_db() self.existing.refresh_from_db()
self.assertEqual(self.existing.first_name, "Alexander") self.assertEqual(self.existing.first_name, "Alexander")
self.assertIn("alt@example.com", self.existing.notes) self.assertIn("alt@example.com", self.existing.notes)
class ContactListTests(TestCase):
def setUp(self):
User = get_user_model()
self.user = User.objects.create_user(
username="lister", password="test-pass-123"
)
self.client = Client()
self.client.login(username="lister", password="test-pass-123")
def test_list_renders_and_links_campaigns(self):
response = self.client.get(reverse("contacts:list"))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "Mailing list")
self.assertContains(response, reverse("email_sms:campaign_list"))
@@ -0,0 +1,27 @@
# Generated by Django 6.1
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("core", "0001_initial"),
]
operations = [
migrations.AlterField(
model_name="storedfile",
name="kind",
field=models.CharField(
choices=[
("campaign_image", "Campaign image"),
("social_image", "Social image"),
("social_video", "Social video"),
("invoice_pdf", "Invoice PDF"),
("product_image", "Product image"),
],
default="campaign_image",
max_length=32,
),
),
]
@@ -0,0 +1,28 @@
# Generated by Django 6.1
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("core", "0002_storedfile_product_image"),
]
operations = [
migrations.AlterField(
model_name="storedfile",
name="kind",
field=models.CharField(
choices=[
("campaign_image", "Campaign image"),
("social_image", "Social image"),
("social_video", "Social video"),
("invoice_pdf", "Invoice PDF"),
("product_image", "Product image"),
("product_stl", "Product STL"),
],
default="campaign_image",
max_length=32,
),
),
]
+2
View File
@@ -29,6 +29,8 @@ class StoredFile(UUIDPrimaryKeyModel, TimeStampedModel):
SOCIAL_IMAGE = "social_image", "Social image" SOCIAL_IMAGE = "social_image", "Social image"
SOCIAL_VIDEO = "social_video", "Social video" SOCIAL_VIDEO = "social_video", "Social video"
INVOICE_PDF = "invoice_pdf", "Invoice PDF" INVOICE_PDF = "invoice_pdf", "Invoice PDF"
PRODUCT_IMAGE = "product_image", "Product image"
PRODUCT_STL = "product_stl", "Product STL"
kind = models.CharField( kind = models.CharField(
max_length=32, choices=Kind.choices, default=Kind.CAMPAIGN_IMAGE max_length=32, choices=Kind.choices, default=Kind.CAMPAIGN_IMAGE
+1
View File
@@ -22,6 +22,7 @@ GROUP_ORDER = {
"Outreach": 20, "Outreach": 20,
"Content": 30, "Content": 30,
"Social": 40, "Social": 40,
"Retail": 45,
"Billing": 50, "Billing": 50,
} }
+39 -4
View File
@@ -10,7 +10,7 @@ from django.urls import reverse
def _read_settings_source() -> str: def _read_settings_source() -> str:
return (Path(__file__).resolve().parent.parent / "client_site/settings/base.py").read_text() return (Path(__file__).resolve().parent.parent / "print_forge/settings/base.py").read_text()
class FeatureFlagSettingsTests(SimpleTestCase): class FeatureFlagSettingsTests(SimpleTestCase):
@@ -22,16 +22,30 @@ class FeatureFlagSettingsTests(SimpleTestCase):
self.assertIn("FEATURE_PAYMENTS", src) self.assertIn("FEATURE_PAYMENTS", src)
self.assertIn("FEATURE_SOCIAL", src) self.assertIn("FEATURE_SOCIAL", src)
self.assertIn("FEATURE_SOCIAL_AI", src) self.assertIn("FEATURE_SOCIAL_AI", src)
self.assertIn("FEATURE_SHOP", src)
self.assertIn("FEATURE_POS_SYNC", src)
self.assertIn("FEATURE_EVENTS", src)
self.assertIn("FEATURE_SHIPPING", src)
self.assertIn("email_sms.apps.EmailSmsConfig", src) self.assertIn("email_sms.apps.EmailSmsConfig", src)
self.assertIn("directmail.apps.DirectmailConfig", src) self.assertIn("directmail.apps.DirectmailConfig", src)
self.assertIn("blog.apps.BlogConfig", src) self.assertIn("blog.apps.BlogConfig", src)
self.assertIn("payments.apps.PaymentsConfig", src) self.assertIn("payments.apps.PaymentsConfig", src)
self.assertIn("social_ai.apps.SocialAiConfig", src) self.assertIn("social_ai.apps.SocialAiConfig", src)
self.assertIn("shop.apps.ShopConfig", src)
self.assertIn("pos_sync.apps.PosSyncConfig", src)
self.assertIn("events.apps.EventsConfig", src)
self.assertIn("shipping.apps.ShippingConfig", src)
def test_payments_requires_email_sms_in_source(self): def test_payments_requires_email_sms_in_source(self):
src = _read_settings_source() src = _read_settings_source()
self.assertIn("FEATURE_PAYMENTS requires FEATURE_EMAIL_SMS", src) self.assertIn("FEATURE_PAYMENTS requires FEATURE_EMAIL_SMS", src)
self.assertIn("FEATURE_SOCIAL_AI requires FEATURE_SOCIAL", src) self.assertIn("FEATURE_SOCIAL_AI requires FEATURE_SOCIAL", src)
self.assertIn("FEATURE_SHOP requires FEATURE_EMAIL_SMS", src)
self.assertIn("FEATURE_SHOP requires FEATURE_PAYMENTS", src)
self.assertIn("FEATURE_POS_SYNC requires FEATURE_SHOP", src)
self.assertIn("FEATURE_EVENTS requires FEATURE_EMAIL_SMS", src)
self.assertIn("FEATURE_EVENTS requires FEATURE_PAYMENTS", src)
self.assertIn("FEATURE_SHIPPING requires FEATURE_SHOP", src)
class AlwaysOnImportIsolationTests(SimpleTestCase): class AlwaysOnImportIsolationTests(SimpleTestCase):
@@ -44,6 +58,10 @@ class AlwaysOnImportIsolationTests(SimpleTestCase):
"payments", "payments",
"social", "social",
"social_ai", "social_ai",
"shop",
"pos_sync",
"events",
"shipping",
} }
ALWAYS_ON = [ ALWAYS_ON = [
@@ -52,7 +70,7 @@ class AlwaysOnImportIsolationTests(SimpleTestCase):
"core/management/commands/dispatch_due.py", "core/management/commands/dispatch_due.py",
"core/shortener.py", "core/shortener.py",
"core/campaign_utm.py", "core/campaign_utm.py",
"client_site/urls.py", "print_forge/urls.py",
] ]
def test_no_module_level_optional_imports(self): def test_no_module_level_optional_imports(self):
@@ -78,11 +96,22 @@ class AlwaysOnImportIsolationTests(SimpleTestCase):
class InstalledOptionalAppsTests(TestCase): class InstalledOptionalAppsTests(TestCase):
"""Dev defaults install optional apps so the template is a working seed.""" """Dev defaults install optional apps so the catalog seed still tests."""
def test_dev_installs_catalog_apps(self): def test_dev_installs_catalog_apps(self):
labels = {c.label for c in apps.get_app_configs()} labels = {c.label for c in apps.get_app_configs()}
for label in ("email_sms", "directmail", "blog", "payments", "social", "social_ai"): for label in (
"email_sms",
"directmail",
"blog",
"payments",
"social",
"social_ai",
"shop",
"pos_sync",
"events",
"shipping",
):
self.assertIn(label, labels) self.assertIn(label, labels)
def test_optional_urls_resolve_when_installed(self): def test_optional_urls_resolve_when_installed(self):
@@ -92,3 +121,9 @@ class InstalledOptionalAppsTests(TestCase):
self.assertTrue(reverse("payments:invoice_list").startswith("/portal/payments/")) self.assertTrue(reverse("payments:invoice_list").startswith("/portal/payments/"))
self.assertTrue(reverse("social:composer").startswith("/portal/social/")) self.assertTrue(reverse("social:composer").startswith("/portal/social/"))
self.assertTrue(reverse("social_ai:generate").startswith("/portal/social/api/generate/")) self.assertTrue(reverse("social_ai:generate").startswith("/portal/social/api/generate/"))
self.assertTrue(reverse("shop:list").startswith("/shop/"))
self.assertTrue(reverse("shop_portal:product_list").startswith("/portal/shop/"))
self.assertTrue(reverse("pos_sync:event_list").startswith("/portal/pos/"))
self.assertTrue(reverse("events:list").startswith("/events/"))
self.assertTrue(reverse("events_portal:event_list").startswith("/portal/events/"))
self.assertTrue(reverse("shipping:shipment_list").startswith("/portal/shipping/"))
@@ -27,6 +27,28 @@
<div class="value">{{ open_invoices|default:0 }}</div> <div class="value">{{ open_invoices|default:0 }}</div>
</div> </div>
{% endif %} {% endif %}
{% if 'shop' in enabled_features %}
<div class="stat-card">
<div class="label">Open shop orders</div>
<div class="value">{{ open_shop_orders|default:0 }}</div>
</div>
<div class="stat-card">
<div class="label">Low stock</div>
<div class="value">{{ low_stock_products|default:0 }}</div>
</div>
{% endif %}
{% if 'events' in enabled_features %}
<div class="stat-card">
<div class="label">Upcoming events</div>
<div class="value">{{ upcoming_events|default:0 }}</div>
</div>
{% endif %}
{% if 'shipping' in enabled_features %}
<div class="stat-card">
<div class="label">Unshipped orders</div>
<div class="value">{{ unshipped_orders|default:0 }}</div>
</div>
{% endif %}
</div> </div>
<div class="split"> <div class="split">
View File
Whitespace-only changes.
+24
View File
@@ -0,0 +1,24 @@
from django.contrib import admin
from events.models import Event, Ticket, TicketOrder
@admin.register(Event)
class EventAdmin(admin.ModelAdmin):
list_display = ("title", "starts_at", "capacity", "price", "is_published")
list_filter = ("is_published",)
search_fields = ("title", "venue")
prepopulated_fields = {"slug": ("title",)}
@admin.register(TicketOrder)
class TicketOrderAdmin(admin.ModelAdmin):
list_display = ("number", "event", "email", "quantity", "status")
list_filter = ("status",)
search_fields = ("number", "email")
@admin.register(Ticket)
class TicketAdmin(admin.ModelAdmin):
list_display = ("code", "event", "order")
search_fields = ("code",)
+12
View File
@@ -0,0 +1,12 @@
from django.apps import AppConfig
class EventsConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "events"
verbose_name = "Event ticketing"
def ready(self):
from events import hooks
hooks.register()
+33
View File
@@ -0,0 +1,33 @@
from core.registry import (
register_dashboard_collector,
register_feature,
register_portal_nav,
register_public_nav,
)
def register() -> None:
register_feature("events")
register_public_nav(
section="events", label="Events", url_name="events:list", order=35
)
register_portal_nav(
section="events",
label="Events",
url_name="events_portal:event_list",
group="Retail",
order=30,
)
register_dashboard_collector(_dashboard)
def _dashboard(request) -> dict:
from django.utils import timezone
from events.models import Event
return {
"upcoming_events": Event.objects.filter(
is_published=True, starts_at__gte=timezone.now()
).count()
}
+74
View File
@@ -0,0 +1,74 @@
# Generated by Django 6.1 on 2026-09-06 11:17
import django.db.models.deletion
import uuid
from decimal import Decimal
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Event',
fields=[
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('title', models.CharField(max_length=200)),
('slug', models.SlugField(max_length=220, unique=True)),
('description', models.TextField(blank=True)),
('starts_at', models.DateTimeField()),
('venue', models.CharField(blank=True, max_length=200)),
('capacity', models.PositiveIntegerField(default=0)),
('price', models.DecimalField(decimal_places=2, default=Decimal('0'), max_digits=10)),
('currency', models.CharField(default='usd', max_length=8)),
('is_published', models.BooleanField(default=False)),
],
options={
'ordering': ['starts_at'],
},
),
migrations.CreateModel(
name='TicketOrder',
fields=[
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('number', models.CharField(max_length=32, unique=True)),
('email', models.EmailField(max_length=254)),
('customer_name', models.CharField(blank=True, max_length=200)),
('quantity', models.PositiveIntegerField(default=1)),
('amount', models.DecimalField(decimal_places=2, max_digits=10)),
('currency', models.CharField(default='usd', max_length=8)),
('status', models.CharField(choices=[('draft', 'Draft'), ('open', 'Open'), ('paid', 'Paid'), ('cancelled', 'Cancelled')], default='draft', max_length=16)),
('stripe_checkout_session_id', models.CharField(blank=True, max_length=255)),
('hosted_checkout_url', models.URLField(blank=True)),
('paid_at', models.DateTimeField(blank=True, null=True)),
('event', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='ticket_orders', to='events.event')),
],
options={
'ordering': ['-created_at'],
},
),
migrations.CreateModel(
name='Ticket',
fields=[
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('code', models.CharField(max_length=16, unique=True)),
('attendee_name', models.CharField(blank=True, max_length=200)),
('event', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='tickets', to='events.event')),
('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tickets', to='events.ticketorder')),
],
options={
'ordering': ['created_at'],
},
),
]
View File
Whitespace-only changes.
+111
View File
@@ -0,0 +1,111 @@
from decimal import Decimal
from django.db import models
from django.urls import reverse
from django.utils import timezone
from django.utils.text import slugify
from core.models import TimeStampedModel, UUIDPrimaryKeyModel
class Event(UUIDPrimaryKeyModel, TimeStampedModel):
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=220, unique=True)
description = models.TextField(blank=True)
starts_at = models.DateTimeField()
venue = models.CharField(max_length=200, blank=True)
capacity = models.PositiveIntegerField(default=0)
price = models.DecimalField(max_digits=10, decimal_places=2, default=Decimal("0"))
currency = models.CharField(max_length=8, default="usd")
is_published = models.BooleanField(default=False)
class Meta:
ordering = ["starts_at"]
def __str__(self) -> str:
return self.title
def get_absolute_url(self) -> str:
return reverse("events:detail", kwargs={"slug": self.slug})
def save(self, *args, **kwargs):
if not self.slug:
base = slugify(self.title)[:200] or "event"
slug = base
n = 2
while Event.objects.filter(slug=slug).exclude(pk=self.pk).exists():
slug = f"{base}-{n}"
n += 1
self.slug = slug
super().save(*args, **kwargs)
def tickets_held(self, *, exclude_order_id=None) -> int:
qs = self.ticket_orders.filter(
status__in=[
TicketOrder.Status.DRAFT,
TicketOrder.Status.OPEN,
TicketOrder.Status.PAID,
]
)
if exclude_order_id:
qs = qs.exclude(pk=exclude_order_id)
return qs.aggregate(total=models.Sum("quantity"))["total"] or 0
@property
def tickets_sold(self) -> int:
return self.tickets_held()
@property
def seats_remaining(self) -> int | None:
if not self.capacity:
return None
return max(self.capacity - self.tickets_sold, 0)
@property
def is_upcoming(self) -> bool:
return self.starts_at >= timezone.now()
class TicketOrder(UUIDPrimaryKeyModel, TimeStampedModel):
class Status(models.TextChoices):
DRAFT = "draft", "Draft"
OPEN = "open", "Open"
PAID = "paid", "Paid"
CANCELLED = "cancelled", "Cancelled"
number = models.CharField(max_length=32, unique=True)
event = models.ForeignKey(
Event, on_delete=models.PROTECT, related_name="ticket_orders"
)
email = models.EmailField()
customer_name = models.CharField(max_length=200, blank=True)
quantity = models.PositiveIntegerField(default=1)
amount = models.DecimalField(max_digits=10, decimal_places=2)
currency = models.CharField(max_length=8, default="usd")
status = models.CharField(
max_length=16, choices=Status.choices, default=Status.DRAFT
)
stripe_checkout_session_id = models.CharField(max_length=255, blank=True)
hosted_checkout_url = models.URLField(blank=True)
paid_at = models.DateTimeField(null=True, blank=True)
class Meta:
ordering = ["-created_at"]
def __str__(self) -> str:
return f"{self.number} · {self.event}"
class Ticket(UUIDPrimaryKeyModel, TimeStampedModel):
order = models.ForeignKey(
TicketOrder, on_delete=models.CASCADE, related_name="tickets"
)
event = models.ForeignKey(Event, on_delete=models.PROTECT, related_name="tickets")
code = models.CharField(max_length=16, unique=True)
attendee_name = models.CharField(max_length=200, blank=True)
class Meta:
ordering = ["created_at"]
def __str__(self) -> str:
return self.code
+13
View File
@@ -0,0 +1,13 @@
from django.urls import path
from events import views
app_name = "events_portal"
urlpatterns = [
path("", views.portal_event_list, name="event_list"),
path("new/", views.portal_event_edit, name="event_new"),
path("<uuid:pk>/", views.portal_event_detail, name="event_detail"),
path("<uuid:pk>/edit/", views.portal_event_edit, name="event_edit"),
path("webhooks/stripe/", views.stripe_webhook, name="stripe_webhook"),
]
+13
View File
@@ -0,0 +1,13 @@
from django.urls import path
from events import views
app_name = "events"
urlpatterns = [
path("", views.event_list, name="list"),
path("order/<uuid:pk>/success/", views.checkout_success, name="checkout_success"),
path("order/<uuid:pk>/cancel/", views.checkout_cancel, name="checkout_cancel"),
path("<slug:slug>/", views.event_detail, name="detail"),
path("<slug:slug>/buy/", views.buy_tickets, name="buy"),
]
+188
View File
@@ -0,0 +1,188 @@
"""Event capacity, Stripe ticket checkout, and confirmation email."""
from __future__ import annotations
import logging
import secrets
from datetime import date
from decimal import Decimal
from django.conf import settings
from django.db import transaction
from django.utils import timezone
from events.models import Event, Ticket, TicketOrder
logger = logging.getLogger(__name__)
class EventsError(RuntimeError):
pass
def _stripe():
secret = (settings.STRIPE_SECRET_KEY or "").strip()
if not secret:
raise EventsError("STRIPE_SECRET_KEY is not configured")
try:
import stripe
except ImportError as exc:
raise EventsError("stripe package is not installed") from exc
stripe.api_key = secret
return stripe
def next_ticket_order_number() -> str:
today = date.today().strftime("%Y%m%d")
prefix = f"TIX-{today}-"
existing = TicketOrder.objects.filter(number__startswith=prefix).count()
return f"{prefix}{existing + 1:03d}"
def new_ticket_code() -> str:
while True:
code = secrets.token_hex(4).upper()
if not Ticket.objects.filter(code=code).exists():
return code
def assert_capacity(
event: Event, quantity: int, *, exclude_order_id=None
) -> None:
if quantity < 1:
raise EventsError("Quantity must be at least 1.")
if not event.capacity:
return
held = event.tickets_held(exclude_order_id=exclude_order_id)
remaining = max(event.capacity - held, 0)
if quantity > remaining:
raise EventsError(f"Only {remaining} seats left for {event.title}.")
def create_ticket_order(
event: Event, *, email: str, customer_name: str = "", quantity: int = 1
) -> TicketOrder:
email = (email or "").strip()
if not email:
raise EventsError("Email is required.")
if not event.is_published:
raise EventsError("This event is not on sale.")
assert_capacity(event, quantity)
amount = event.price * quantity
return TicketOrder.objects.create(
number=next_ticket_order_number(),
event=event,
email=email,
customer_name=(customer_name or "").strip(),
quantity=quantity,
amount=amount,
currency=(event.currency or settings.STRIPE_CURRENCY or "usd").lower(),
status=TicketOrder.Status.DRAFT,
)
def create_checkout_session(
order: TicketOrder, *, success_url: str, cancel_url: str
) -> str:
stripe = _stripe()
session = stripe.checkout.Session.create(
mode="payment",
customer_email=order.email or None,
line_items=[
{
"quantity": order.quantity,
"price_data": {
"currency": (order.currency or "usd").lower(),
"unit_amount": int(
(order.event.price * Decimal("100")).quantize(Decimal("1"))
),
"product_data": {"name": order.event.title},
},
}
],
metadata={
"ticket_order_id": str(order.pk),
"ticket_order_number": order.number,
},
success_url=success_url,
cancel_url=cancel_url,
)
order.stripe_checkout_session_id = session.id
order.hosted_checkout_url = session.url or ""
order.status = TicketOrder.Status.OPEN
order.save(
update_fields=[
"stripe_checkout_session_id",
"hosted_checkout_url",
"status",
"updated_at",
]
)
return session.url or ""
def _issue_tickets(order: TicketOrder) -> list[Ticket]:
created = []
for _ in range(order.quantity):
created.append(
Ticket.objects.create(
order=order,
event=order.event,
code=new_ticket_code(),
attendee_name=order.customer_name,
)
)
return created
def mark_paid(order: TicketOrder, *, stripe_id: str = "") -> None:
if order.status == TicketOrder.Status.PAID:
return
with transaction.atomic():
locked = TicketOrder.objects.select_for_update().get(pk=order.pk)
if locked.status == TicketOrder.Status.PAID:
return
assert_capacity(
locked.event, locked.quantity, exclude_order_id=locked.pk
)
_issue_tickets(locked)
locked.status = TicketOrder.Status.PAID
locked.paid_at = timezone.now()
locked.save(update_fields=["status", "paid_at", "updated_at"])
order.refresh_from_db()
try:
send_ticket_email(order)
except Exception:
logger.exception("ticket email failed for %s", order.number)
def send_ticket_email(order: TicketOrder) -> bool:
to_email = (order.email or "").strip()
if not to_email:
raise EventsError("Order has no email address")
from django.core.mail import EmailMultiAlternatives
codes = ", ".join(t.code for t in order.tickets.all())
name = order.customer_name or "there"
when = timezone.localtime(order.event.starts_at).strftime("%b %d, %Y %-I:%M %p")
subject = f"Tickets for {order.event.title} — {settings.SITE_NAME}"
text = (
f"Hi {name},\n\n"
f"Your tickets for {order.event.title} on {when}:\n"
f"{codes}\n\nOrder {order.number}\n"
)
html = (
f"<p>Hi {name},</p>"
f"<p>Tickets for <strong>{order.event.title}</strong> on {when}:</p>"
f"<p><strong>{codes}</strong></p>"
f"<p>Order {order.number}</p>"
)
mail = EmailMultiAlternatives(
subject=subject,
body=text,
from_email=settings.DEFAULT_FROM_EMAIL,
to=[to_email],
)
mail.attach_alternative(html, "text/html")
mail.send(fail_silently=False)
return True
+17
View File
@@ -0,0 +1,17 @@
{% extends "base.html" %}
{% block title %}Tickets · {{ event.title }}{% endblock %}
{% block content %}
<section class="section section-lg">
<div class="container">
<h1>Tickets · {{ event.title }}</h1>
<p>{{ event.price }} {{ event.currency|upper }} each{% if event.seats_remaining is not None %} · {{ event.seats_remaining }} left{% endif %}</p>
<form method="post">
{% csrf_token %}
<p><label>Email <input name="email" type="email" required></label></p>
<p><label>Name <input name="customer_name"></label></p>
<p><label>Quantity <input name="quantity" type="number" min="1" value="1"></label></p>
<button class="button button-primary" type="submit">Pay with Stripe</button>
</form>
</div>
</section>
{% endblock %}
+8
View File
@@ -0,0 +1,8 @@
{% extends "base.html" %}
{% block title %}Checkout cancelled{% endblock %}
{% block content %}
<section class="section section-lg"><div class="container">
<h1>Checkout cancelled</h1>
<p>No charge for {{ order.event.title }}. <a href="{% url 'events:buy' order.event.slug %}">Try again</a>.</p>
</div></section>
{% endblock %}
+18
View File
@@ -0,0 +1,18 @@
{% extends "base.html" %}
{% block title %}{{ event.title }} · {{ SITE_NAME }}{% endblock %}
{% block content %}
<section class="section section-lg">
<div class="container">
<p><a href="{% url 'events:list' %}">← Events</a></p>
<h1>{{ event.title }}</h1>
<p class="muted">{{ event.starts_at|date:"F j, Y g:i A" }}{% if event.venue %} · {{ event.venue }}{% endif %}</p>
<div>{{ event.description|linebreaks }}</div>
<p>{{ event.price }} {{ event.currency|upper }}</p>
{% if event.seats_remaining == 0 %}
<p>Sold out.</p>
{% else %}
<p><a class="button button-primary" href="{% url 'events:buy' event.slug %}">Buy tickets</a></p>
{% endif %}
</div>
</section>
{% endblock %}
+18
View File
@@ -0,0 +1,18 @@
{% extends "base.html" %}
{% block title %}Events · {{ SITE_NAME }}{% endblock %}
{% block content %}
<section class="section section-lg">
<div class="container">
<h1 class="text-uppercase">Events</h1>
{% for event in events %}
<article style="margin:0 0 32px">
<h2><a href="{{ event.get_absolute_url }}">{{ event.title }}</a></h2>
<p class="muted">{{ event.starts_at|date:"F j, Y g:i A" }}{% if event.venue %} · {{ event.venue }}{% endif %}</p>
<p>{{ event.price }} {{ event.currency|upper }}{% if event.seats_remaining is not None %} · {{ event.seats_remaining }} seats left{% endif %}</p>
</article>
{% empty %}
<p>No upcoming events.</p>
{% endfor %}
</div>
</section>
{% endblock %}
@@ -0,0 +1,23 @@
{% extends "portal_base.html" %}
{% block title %}{{ event.title }} · Portal{% endblock %}
{% block topbar_title %}{{ event.title }}{% endblock %}
{% block portal_content %}
<p><a class="btn btn-ghost" href="{% url 'events_portal:event_edit' event.pk %}">Edit</a></p>
<p>{{ event.starts_at }} · {{ event.tickets_sold }} / {{ event.capacity|default:"∞" }} seats · {{ event.price }} {{ event.currency|upper }}</p>
<table class="table">
<thead><tr><th>Order</th><th>Email</th><th>Qty</th><th>Status</th><th>Codes</th></tr></thead>
<tbody>
{% for order in orders %}
<tr>
<td>{{ order.number }}</td>
<td>{{ order.email }}</td>
<td>{{ order.quantity }}</td>
<td>{{ order.get_status_display }}</td>
<td>{% for ticket in order.tickets.all %}{{ ticket.code }}{% if not forloop.last %}, {% endif %}{% endfor %}</td>
</tr>
{% empty %}
<tr><td colspan="5" class="empty-state">No ticket orders yet.</td></tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
@@ -0,0 +1,17 @@
{% extends "portal_base.html" %}
{% block title %}{% if event %}Edit{% else %}New{% endif %} event · Portal{% endblock %}
{% block topbar_title %}{% if event %}Edit event{% else %}New event{% endif %}{% endblock %}
{% block portal_content %}
<form method="post" class="form-grid">
{% csrf_token %}
<div class="field"><label>Title</label><input name="title" required value="{{ event.title|default:'' }}"></div>
<div class="field"><label>Slug</label><input name="slug" value="{{ event.slug|default:'' }}" placeholder="auto from title"></div>
<div class="field"><label>Starts</label><input name="starts_at" type="datetime-local" required value="{% if event %}{{ event.starts_at|date:'Y-m-d\\TH:i' }}{% endif %}"></div>
<div class="field"><label>Venue</label><input name="venue" value="{{ event.venue|default:'' }}"></div>
<div class="field"><label>Capacity</label><input name="capacity" type="number" min="0" value="{{ event.capacity|default:0 }}"></div>
<div class="field"><label>Price</label><input name="price" type="number" step="0.01" min="0" required value="{{ event.price|default:'0' }}"></div>
<div class="field"><label>Description</label><textarea name="description" style="min-height:120px">{{ event.description|default:'' }}</textarea></div>
<label><input type="checkbox" name="is_published" {% if event.is_published %}checked{% endif %}> Published</label>
<button class="btn btn-primary" type="submit">Save</button>
</form>
{% endblock %}
@@ -0,0 +1,21 @@
{% extends "portal_base.html" %}
{% block title %}Events · Portal{% endblock %}
{% block topbar_title %}Events{% endblock %}
{% block portal_content %}
<p><a class="btn btn-primary" href="{% url 'events_portal:event_new' %}">New event</a></p>
<table class="table">
<thead><tr><th>Title</th><th>When</th><th>Capacity</th><th>Status</th></tr></thead>
<tbody>
{% for event in events %}
<tr>
<td><a href="{% url 'events_portal:event_detail' event.pk %}">{{ event.title }}</a></td>
<td>{{ event.starts_at }}</td>
<td>{{ event.tickets_sold }} / {{ event.capacity|default:"∞" }}</td>
<td>{% if event.is_published %}Published{% else %}Draft{% endif %}</td>
</tr>
{% empty %}
<tr><td colspan="4" class="empty-state">No events yet.</td></tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
@@ -0,0 +1,9 @@
{% extends "base.html" %}
{% block title %}Tickets {{ order.number }}{% endblock %}
{% block content %}
<section class="section section-lg"><div class="container">
<h1>You're in</h1>
<p>Order {{ order.number }} for {{ order.event.title }} is {{ order.get_status_display|lower }}.</p>
<p>Ticket codes will be emailed to {{ order.email }}.</p>
</div></section>
{% endblock %}
+95
View File
@@ -0,0 +1,95 @@
from decimal import Decimal
from django.contrib.auth import get_user_model
from django.core import mail
from django.test import Client, TestCase
from django.urls import reverse
from django.utils import timezone
from events.models import Event, Ticket, TicketOrder
from events.services import EventsError, create_ticket_order, mark_paid
def _event(**kwargs):
defaults = dict(
title="Friday Night Prerelease",
starts_at=timezone.now() + timezone.timedelta(days=7),
venue="Main shop",
capacity=8,
price=Decimal("25.00"),
is_published=True,
)
defaults.update(kwargs)
return Event.objects.create(**defaults)
class EventPublicTests(TestCase):
def test_list_hides_drafts_and_past(self):
_event(title="Live prerelease")
_event(title="Draft night", is_published=False)
_event(
title="Last week",
starts_at=timezone.now() - timezone.timedelta(days=2),
)
response = Client().get(reverse("events:list"))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "Live prerelease")
self.assertNotContains(response, "Draft night")
self.assertNotContains(response, "Last week")
def test_buy_form_renders(self):
event = _event()
response = Client().get(reverse("events:buy", kwargs={"slug": event.slug}))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "Pay with Stripe")
class EventCapacityTests(TestCase):
def test_capacity_blocks_overbook(self):
event = _event(capacity=2)
create_ticket_order(event, email="a@example.com", quantity=2)
with self.assertRaises(EventsError):
create_ticket_order(event, email="b@example.com", quantity=1)
def test_mark_paid_issues_tickets_and_email(self):
event = _event(capacity=4)
order = create_ticket_order(
event, email="fan@example.com", customer_name="Lee", quantity=2
)
mark_paid(order)
order.refresh_from_db()
self.assertEqual(order.status, TicketOrder.Status.PAID)
self.assertEqual(Ticket.objects.filter(order=order).count(), 2)
self.assertEqual(event.tickets_sold, 2)
self.assertEqual(len(mail.outbox), 1)
self.assertIn(event.title, mail.outbox[0].subject)
class EventPortalTests(TestCase):
def setUp(self):
User = get_user_model()
self.user = User.objects.create_user("host", password="test-pass-123")
self.client = Client()
self.client.login(username="host", password="test-pass-123")
def test_list_requires_login(self):
self.assertEqual(Client().get(reverse("events_portal:event_list")).status_code, 302)
def test_create_published_event(self):
starts = (timezone.now() + timezone.timedelta(days=3)).strftime("%Y-%m-%dT%H:%M")
response = self.client.post(
reverse("events_portal:event_new"),
{
"title": "Commander night",
"starts_at": starts,
"venue": "Back room",
"capacity": "16",
"price": "10.00",
"is_published": "on",
},
)
self.assertEqual(response.status_code, 302)
event = Event.objects.get()
self.assertEqual(event.slug, "commander-night")
self.assertTrue(event.is_published)
self.assertEqual(event.capacity, 16)
+194
View File
@@ -0,0 +1,194 @@
import logging
from decimal import Decimal, InvalidOperation
from django.conf import settings
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse, HttpResponseBadRequest
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse
from django.utils import timezone
from datetime import datetime
from django.utils.text import slugify
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from events.models import Event, TicketOrder
from events.services import (
EventsError,
create_checkout_session,
create_ticket_order,
mark_paid,
)
logger = logging.getLogger(__name__)
def _site_base(request) -> str:
base = (settings.PUBLIC_SITE_URL or "").rstrip("/")
if base:
return base
return request.build_absolute_uri("/").rstrip("/")
def event_list(request):
events = Event.objects.filter(is_published=True, starts_at__gte=timezone.now())
return render(request, "events/list.html", {"events": events})
def event_detail(request, slug):
event = get_object_or_404(Event, slug=slug, is_published=True)
return render(request, "events/detail.html", {"event": event})
@require_http_methods(["GET", "POST"])
def buy_tickets(request, slug):
event = get_object_or_404(Event, slug=slug, is_published=True)
if request.method == "POST":
email = (request.POST.get("email") or "").strip()
name = (request.POST.get("customer_name") or "").strip()
try:
quantity = int(request.POST.get("quantity") or "1")
except ValueError:
quantity = 0
try:
order = create_ticket_order(
event, email=email, customer_name=name, quantity=quantity
)
base = _site_base(request)
success = base + reverse(
"events:checkout_success", kwargs={"pk": order.pk}
)
cancel = base + reverse("events:checkout_cancel", kwargs={"pk": order.pk})
url = create_checkout_session(
order,
success_url=success + "?session_id={CHECKOUT_SESSION_ID}",
cancel_url=cancel,
)
except EventsError as exc:
messages.error(request, str(exc))
except Exception as exc: # noqa: BLE001
logger.exception("ticket checkout failed")
messages.error(request, f"Could not start checkout: {exc}")
else:
return redirect(url)
return render(request, "events/buy.html", {"event": event})
def checkout_success(request, pk):
order = get_object_or_404(TicketOrder.objects.select_related("event"), pk=pk)
return render(request, "events/success.html", {"order": order})
def checkout_cancel(request, pk):
order = get_object_or_404(TicketOrder.objects.select_related("event"), pk=pk)
return render(request, "events/cancel.html", {"order": order})
@login_required
def portal_event_list(request):
events = Event.objects.all().order_by("-starts_at")
return render(request, "events/portal/list.html", {"events": events})
@login_required
@require_http_methods(["GET", "POST"])
def portal_event_edit(request, pk=None):
event = get_object_or_404(Event, pk=pk) if pk else None
if request.method == "POST":
title = (request.POST.get("title") or "").strip()
description = (request.POST.get("description") or "").strip()
venue = (request.POST.get("venue") or "").strip()
slug = (request.POST.get("slug") or "").strip()
starts_raw = (request.POST.get("starts_at") or "").strip()
errors = []
if not title:
errors.append("Title is required.")
starts_at = None
if starts_raw:
try:
starts_at = datetime.fromisoformat(starts_raw)
except ValueError:
starts_at = None
if starts_at is None:
errors.append("Start date/time is required.")
elif timezone.is_naive(starts_at):
starts_at = timezone.make_aware(starts_at, timezone.get_current_timezone())
try:
capacity = int(request.POST.get("capacity") or "0")
except ValueError:
capacity = 0
errors.append("Capacity must be a number.")
try:
price = Decimal(request.POST.get("price") or "0")
if price < 0:
raise InvalidOperation
except Exception:
price = None
errors.append("Enter a valid price.")
if errors:
for err in errors:
messages.error(request, err)
else:
if event is None:
event = Event()
event.title = title
event.description = description
event.venue = venue
event.slug = slugify(slug)[:220] if slug else ""
event.starts_at = starts_at
event.capacity = max(capacity, 0)
event.price = price
event.currency = (settings.STRIPE_CURRENCY or "usd").lower()
event.is_published = request.POST.get("is_published") == "on"
event.save()
messages.success(request, f"Saved {event.title}.")
return redirect("events_portal:event_list")
return render(request, "events/portal/edit.html", {"event": event})
@login_required
def portal_event_detail(request, pk):
event = get_object_or_404(Event, pk=pk)
orders = event.ticket_orders.select_related().prefetch_related("tickets")
return render(
request,
"events/portal/detail.html",
{"event": event, "orders": orders},
)
@csrf_exempt
@require_http_methods(["POST"])
def stripe_webhook(request):
secret = (settings.STRIPE_WEBHOOK_SECRET or "").strip()
if not secret:
logger.error("STRIPE_WEBHOOK_SECRET unset")
return HttpResponseBadRequest("webhook not configured")
try:
import stripe
except ImportError:
return HttpResponseBadRequest("stripe not installed")
sig = request.headers.get("Stripe-Signature", "")
try:
event = stripe.Webhook.construct_event(request.body, sig, secret)
except Exception:
logger.exception("events stripe webhook signature failed")
return HttpResponseBadRequest("invalid signature")
obj = event.get("data", {}).get("object", {}) or {}
if event.get("type") != "checkout.session.completed":
return HttpResponse("ok")
order_id = (obj.get("metadata") or {}).get("ticket_order_id") or ""
order = None
if order_id:
order = TicketOrder.objects.filter(pk=order_id).first()
if order is None:
session_id = obj.get("id") or ""
order = TicketOrder.objects.filter(
stripe_checkout_session_id=session_id
).first()
if order and order.status != TicketOrder.Status.PAID:
mark_paid(order, stripe_id=obj.get("id") or "")
logger.info("ticket order %s marked paid", order.number)
return HttpResponse("ok")
+1 -1
View File
@@ -7,7 +7,7 @@ import sys
def main() -> None: def main() -> None:
"""Run administrative tasks.""" """Run administrative tasks."""
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "client_site.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "print_forge.settings")
try: try:
from django.core.management import execute_from_command_line from django.core.management import execute_from_command_line
except ImportError as exc: except ImportError as exc:
View File
Whitespace-only changes.
+16
View File
@@ -0,0 +1,16 @@
from django.contrib import admin
from pos_sync.models import POSConnection, SyncEvent
@admin.register(POSConnection)
class POSConnectionAdmin(admin.ModelAdmin):
list_display = ("name", "provider", "is_active")
list_filter = ("provider", "is_active")
@admin.register(SyncEvent)
class SyncEventAdmin(admin.ModelAdmin):
list_display = ("direction", "sku", "quantity", "status", "created_at")
list_filter = ("direction", "status")
search_fields = ("sku", "external_id")
+12
View File
@@ -0,0 +1,12 @@
from django.apps import AppConfig
class PosSyncConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "pos_sync"
verbose_name = "POS API sync"
def ready(self):
from pos_sync import hooks
hooks.register()
+35
View File
@@ -0,0 +1,35 @@
from core.registry import (
register_dashboard_collector,
register_dispatcher,
register_feature,
register_portal_nav,
)
def register() -> None:
register_feature("pos_sync")
register_portal_nav(
section="pos_sync",
label="POS sync",
url_name="pos_sync:event_list",
group="Retail",
order=40,
)
register_dashboard_collector(_dashboard)
register_dispatcher(_dispatch)
def _dashboard(request) -> dict:
from pos_sync.models import SyncEvent
return {
"pos_failed_syncs": SyncEvent.objects.filter(
status=SyncEvent.Status.FAILED
).count()
}
def _dispatch() -> int:
from pos_sync.services import dispatch_pending_outbound
return dispatch_pending_outbound()
+52
View File
@@ -0,0 +1,52 @@
# Generated by Django 6.1 on 2026-09-06 11:17
import django.db.models.deletion
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='POSConnection',
fields=[
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('name', models.CharField(max_length=120)),
('provider', models.CharField(choices=[('generic', 'Generic REST'), ('square', 'Square'), ('lightspeed', 'Lightspeed'), ('binderpos', 'BinderPOS'), ('crystalcommerce', 'CrystalCommerce')], default='generic', max_length=32)),
('api_base_url', models.URLField(blank=True)),
('api_token', models.CharField(blank=True, max_length=255)),
('webhook_secret', models.CharField(blank=True, max_length=255)),
('is_active', models.BooleanField(default=True)),
],
options={
'ordering': ['name'],
},
),
migrations.CreateModel(
name='SyncEvent',
fields=[
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('direction', models.CharField(choices=[('inbound', 'POS → site'), ('outbound', 'Site → POS')], max_length=16)),
('status', models.CharField(choices=[('pending', 'Pending'), ('done', 'Done'), ('failed', 'Failed')], default='pending', max_length=16)),
('sku', models.CharField(max_length=64)),
('quantity', models.IntegerField(default=0)),
('external_id', models.CharField(blank=True, max_length=255)),
('payload', models.JSONField(blank=True, default=dict)),
('error', models.TextField(blank=True)),
('connection', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='events', to='pos_sync.posconnection')),
],
options={
'ordering': ['-created_at'],
},
),
]
Whitespace-only changes.
+61
View File
@@ -0,0 +1,61 @@
from django.db import models
from core.models import TimeStampedModel, UUIDPrimaryKeyModel
class POSConnection(UUIDPrimaryKeyModel, TimeStampedModel):
class Provider(models.TextChoices):
GENERIC = "generic", "Generic REST"
SQUARE = "square", "Square"
LIGHTSPEED = "lightspeed", "Lightspeed"
BINDERPOS = "binderpos", "BinderPOS"
CRYSTALCOMMERCE = "crystalcommerce", "CrystalCommerce"
name = models.CharField(max_length=120)
provider = models.CharField(
max_length=32, choices=Provider.choices, default=Provider.GENERIC
)
api_base_url = models.URLField(blank=True)
api_token = models.CharField(max_length=255, blank=True)
webhook_secret = models.CharField(max_length=255, blank=True)
is_active = models.BooleanField(default=True)
class Meta:
ordering = ["name"]
def __str__(self) -> str:
return self.name
class SyncEvent(UUIDPrimaryKeyModel, TimeStampedModel):
class Direction(models.TextChoices):
INBOUND = "inbound", "POS → site"
OUTBOUND = "outbound", "Site → POS"
class Status(models.TextChoices):
PENDING = "pending", "Pending"
DONE = "done", "Done"
FAILED = "failed", "Failed"
connection = models.ForeignKey(
POSConnection,
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="events",
)
direction = models.CharField(max_length=16, choices=Direction.choices)
status = models.CharField(
max_length=16, choices=Status.choices, default=Status.PENDING
)
sku = models.CharField(max_length=64)
quantity = models.IntegerField(default=0)
external_id = models.CharField(max_length=255, blank=True)
payload = models.JSONField(default=dict, blank=True)
error = models.TextField(blank=True)
class Meta:
ordering = ["-created_at"]
def __str__(self) -> str:
return f"{self.direction} {self.sku} × {self.quantity} · {self.status}"
+131
View File
@@ -0,0 +1,131 @@
"""POS inventory sync. Inbound webhooks decrement shop stock; outbound queues reserve POS."""
from __future__ import annotations
import logging
import requests
from django.conf import settings
from django.db import transaction
from pos_sync.models import POSConnection, SyncEvent
from shop.models import Product
from shop.services import ShopError, adjust_stock
logger = logging.getLogger(__name__)
class POSSyncError(RuntimeError):
pass
def active_connection() -> POSConnection | None:
return POSConnection.objects.filter(is_active=True).order_by("created_at").first()
def apply_inbound_sale(
*,
sku: str,
quantity: int,
external_id: str = "",
payload: dict | None = None,
connection: POSConnection | None = None,
) -> SyncEvent:
sku = (sku or "").strip()
if not sku:
raise POSSyncError("SKU is required.")
if quantity < 1:
raise POSSyncError("Quantity must be at least 1.")
product = Product.objects.filter(sku__iexact=sku).first()
if product is None:
raise POSSyncError(f"Unknown SKU {sku}.")
event = SyncEvent.objects.create(
connection=connection or active_connection(),
direction=SyncEvent.Direction.INBOUND,
status=SyncEvent.Status.PENDING,
sku=product.sku,
quantity=quantity,
external_id=external_id,
payload=payload or {},
)
try:
with transaction.atomic():
locked = Product.objects.select_for_update().get(pk=product.pk)
if locked.track_inventory and locked.fulfillment == Product.Fulfillment.STOCKED:
adjust_stock(locked, -quantity)
event.status = SyncEvent.Status.DONE
event.save(update_fields=["status", "updated_at"])
except ShopError as exc:
event.status = SyncEvent.Status.FAILED
event.error = str(exc)
event.save(update_fields=["status", "error", "updated_at"])
raise POSSyncError(str(exc)) from exc
return event
def enqueue_online_sale(order) -> list[SyncEvent]:
"""Queue outbound POS reserves after an online shop sale."""
events = []
connection = active_connection()
for item in order.items.all():
sku = item.sku
if not sku:
continue
events.append(
SyncEvent.objects.create(
connection=connection,
direction=SyncEvent.Direction.OUTBOUND,
status=SyncEvent.Status.PENDING,
sku=sku,
quantity=item.quantity,
external_id=order.number,
payload={"order_id": str(order.pk), "order_number": order.number},
)
)
return events
def _post_reserve(connection: POSConnection, event: SyncEvent) -> None:
base = (connection.api_base_url or settings.POS_API_BASE_URL or "").rstrip("/")
token = connection.api_token or (settings.POS_API_TOKEN or "")
if not base:
raise POSSyncError("POS API base URL is not configured.")
headers = {"Content-Type": "application/json"}
if token:
headers["Authorization"] = f"Bearer {token}"
response = requests.post(
f"{base}/inventory/reserve",
json={
"sku": event.sku,
"quantity": event.quantity,
"external_id": event.external_id,
"source": "online",
},
headers=headers,
timeout=15,
)
response.raise_for_status()
def dispatch_pending_outbound() -> int:
sent = 0
for event in SyncEvent.objects.filter(
direction=SyncEvent.Direction.OUTBOUND,
status=SyncEvent.Status.PENDING,
)[:50]:
connection = event.connection or active_connection()
try:
if connection is None:
raise POSSyncError("No active POS connection.")
_post_reserve(connection, event)
except Exception as exc: # noqa: BLE001
logger.exception("POS outbound failed for %s", event.sku)
event.status = SyncEvent.Status.FAILED
event.error = str(exc)
event.save(update_fields=["status", "error", "updated_at"])
else:
event.status = SyncEvent.Status.DONE
event.error = ""
event.save(update_fields=["status", "error", "updated_at"])
sent += 1
return sent
@@ -0,0 +1,22 @@
{% extends "portal_base.html" %}
{% block title %}POS sync · Portal{% endblock %}
{% block topbar_title %}POS sync{% endblock %}
{% block portal_content %}
<p class="muted">Inbound POS sales decrement shop stock. Online sales queue outbound reserves.</p>
<table class="table">
<thead><tr><th>When</th><th>Direction</th><th>SKU</th><th>Qty</th><th>Status</th></tr></thead>
<tbody>
{% for event in events %}
<tr>
<td>{{ event.created_at }}</td>
<td>{{ event.get_direction_display }}</td>
<td>{{ event.sku }}</td>
<td>{{ event.quantity }}</td>
<td>{{ event.get_status_display }}</td>
</tr>
{% empty %}
<tr><td colspan="5" class="empty-state">No sync events yet.</td></tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
+115
View File
@@ -0,0 +1,115 @@
from decimal import Decimal
from unittest.mock import patch
from django.contrib.auth import get_user_model
from django.test import Client, TestCase, override_settings
from django.urls import reverse
from pos_sync.models import POSConnection, SyncEvent
from pos_sync.services import apply_inbound_sale, dispatch_pending_outbound, enqueue_online_sale
from shop.models import Product
from shop.services import add_to_cart, create_order_from_cart, mark_paid
class POSInboundTests(TestCase):
def setUp(self):
self.product = Product.objects.create(
name="Booster pack",
sku="TCG-PACK",
price=Decimal("4.99"),
stock_qty=10,
is_published=True,
)
def test_inbound_sale_decrements_stock(self):
event = apply_inbound_sale(sku="tcg-pack", quantity=3, external_id="pos-1")
self.product.refresh_from_db()
self.assertEqual(self.product.stock_qty, 7)
self.assertEqual(event.status, SyncEvent.Status.DONE)
@override_settings(POS_WEBHOOK_SECRET="pos-secret")
def test_webhook_requires_secret_and_updates_stock(self):
url = reverse("pos_sync:inventory_webhook")
anon = Client().post(
url,
data='{"sku":"TCG-PACK","quantity":1}',
content_type="application/json",
)
self.assertEqual(anon.status_code, 401)
ok = Client().post(
url,
data='{"sku":"TCG-PACK","quantity":2,"external_id":"reg-9"}',
content_type="application/json",
HTTP_AUTHORIZATION="Bearer pos-secret",
)
self.assertEqual(ok.status_code, 200)
self.product.refresh_from_db()
self.assertEqual(self.product.stock_qty, 8)
class POSOutboundTests(TestCase):
def setUp(self):
self.product = Product.objects.create(
name="Figure",
sku="FIG-1",
price=Decimal("12.00"),
stock_qty=5,
is_published=True,
)
self.connection = POSConnection.objects.create(
name="Counter",
api_base_url="https://pos.example.com",
api_token="tok",
is_active=True,
)
def test_paid_order_enqueues_outbound(self):
session = self.client.session
add_to_cart(session, self.product, 1)
session.save()
order = create_order_from_cart(self.client.session, email="a@example.com")
mark_paid(order)
event = SyncEvent.objects.get(direction=SyncEvent.Direction.OUTBOUND)
self.assertEqual(event.sku, "FIG-1")
self.assertEqual(event.status, SyncEvent.Status.PENDING)
def test_dispatch_posts_reserve(self):
enqueue_online_sale(
type(
"O",
(),
{
"number": "ORD-1",
"pk": "x",
"items": type(
"M",
(),
{
"all": lambda self: [
type("I", (), {"sku": "FIG-1", "quantity": 1})()
]
},
)(),
},
)()
)
with patch("pos_sync.services.requests.post") as post:
post.return_value.raise_for_status = lambda: None
sent = dispatch_pending_outbound()
self.assertEqual(sent, 1)
post.assert_called_once()
self.assertIn("/inventory/reserve", post.call_args.args[0])
event = SyncEvent.objects.get()
self.assertEqual(event.status, SyncEvent.Status.DONE)
class POSPortalTests(TestCase):
def test_list_requires_login(self):
self.assertEqual(Client().get(reverse("pos_sync:event_list")).status_code, 302)
def test_list_ok_when_logged_in(self):
User = get_user_model()
User.objects.create_user("clerk", password="test-pass-123")
client = Client()
client.login(username="clerk", password="test-pass-123")
self.assertEqual(client.get(reverse("pos_sync:event_list")).status_code, 200)
+10
View File
@@ -0,0 +1,10 @@
from django.urls import path
from pos_sync import views
app_name = "pos_sync"
urlpatterns = [
path("", views.event_list, name="event_list"),
path("webhooks/inventory/", views.inventory_webhook, name="inventory_webhook"),
]
+70
View File
@@ -0,0 +1,70 @@
import json
import logging
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse, HttpResponseBadRequest, JsonResponse
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from pos_sync.models import POSConnection, SyncEvent
from pos_sync.services import POSSyncError, apply_inbound_sale
logger = logging.getLogger(__name__)
def _authorized(request) -> bool:
expected = (settings.POS_WEBHOOK_SECRET or "").strip()
if not expected:
conn = POSConnection.objects.filter(is_active=True).exclude(
webhook_secret=""
).first()
expected = (conn.webhook_secret if conn else "").strip()
if not expected:
return False
header = request.headers.get("Authorization", "")
token = ""
if header.startswith("Bearer "):
token = header[7:].strip()
token = token or request.GET.get("token") or ""
return token == expected
@login_required
def event_list(request):
events = SyncEvent.objects.select_related("connection")[:200]
connections = POSConnection.objects.all()
return render(
request,
"pos_sync/list.html",
{"events": events, "connections": connections},
)
@csrf_exempt
@require_http_methods(["POST"])
def inventory_webhook(request):
if not _authorized(request):
return HttpResponse("unauthorized", status=401)
try:
payload = json.loads(request.body.decode() or "{}")
except json.JSONDecodeError:
return HttpResponseBadRequest("invalid json")
sku = payload.get("sku") or payload.get("SKU") or ""
try:
quantity = int(payload.get("quantity") or payload.get("qty") or 0)
except (TypeError, ValueError):
return HttpResponseBadRequest("invalid quantity")
external_id = str(payload.get("external_id") or payload.get("id") or "")
try:
event = apply_inbound_sale(
sku=sku,
quantity=quantity,
external_id=external_id,
payload=payload,
)
except POSSyncError as exc:
logger.warning("POS inbound rejected: %s", exc)
return JsonResponse({"ok": False, "error": str(exc)}, status=400)
return JsonResponse({"ok": True, "id": str(event.pk), "status": event.status})
File renamed without changes.
@@ -1,9 +1,9 @@
"""ASGI config for client_site.""" """ASGI config for print_forge."""
import os import os
from django.core.asgi import get_asgi_application from django.core.asgi import get_asgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "client_site.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "print_forge.settings")
application = get_asgi_application() application = get_asgi_application()
File renamed without changes.
@@ -9,6 +9,28 @@ from urllib.parse import urlparse
BASE_DIR = Path(__file__).resolve().parent.parent.parent BASE_DIR = Path(__file__).resolve().parent.parent.parent
def _load_dotenv(path: Path) -> None:
"""Load repo-root `.env` for local runserver. Does not override existing env."""
if not path.is_file():
return
for raw in path.read_text().splitlines():
line = raw.strip()
if not line or line.startswith("#") or "=" not in line:
continue
key, _, value = line.partition("=")
key = key.strip()
if not key or key in os.environ:
continue
value = value.strip()
if len(value) >= 2 and value[0] == value[-1] and value[0] in {"\"", "'"}:
value = value[1:-1]
os.environ[key] = value
if "test" not in sys.argv:
_load_dotenv(BASE_DIR.parent / ".env")
def env(key: str, default: str | None = None) -> str | None: def env(key: str, default: str | None = None) -> str | None:
return os.environ.get(key, default) return os.environ.get(key, default)
@@ -54,8 +76,8 @@ def database_config() -> dict:
return { return {
"default": { "default": {
"ENGINE": "django.db.backends.postgresql", "ENGINE": "django.db.backends.postgresql",
"NAME": env("DB_NAME", "client_site"), "NAME": env("DB_NAME", "print_forge"),
"USER": env("DB_USER", "client_site"), "USER": env("DB_USER", "print_forge"),
"PASSWORD": env("DB_PASSWORD", ""), "PASSWORD": env("DB_PASSWORD", ""),
"HOST": env("DB_HOST"), "HOST": env("DB_HOST"),
"PORT": env("DB_PORT", "5432"), "PORT": env("DB_PORT", "5432"),
@@ -115,11 +137,27 @@ FEATURE_BLOG = env_bool("FEATURE_BLOG", _feature_default)
FEATURE_PAYMENTS = env_bool("FEATURE_PAYMENTS", _feature_default) FEATURE_PAYMENTS = env_bool("FEATURE_PAYMENTS", _feature_default)
FEATURE_SOCIAL = env_bool("FEATURE_SOCIAL", _feature_default) FEATURE_SOCIAL = env_bool("FEATURE_SOCIAL", _feature_default)
FEATURE_SOCIAL_AI = env_bool("FEATURE_SOCIAL_AI", _feature_default) FEATURE_SOCIAL_AI = env_bool("FEATURE_SOCIAL_AI", _feature_default)
FEATURE_SHOP = env_bool("FEATURE_SHOP", _feature_default)
FEATURE_POS_SYNC = env_bool("FEATURE_POS_SYNC", _feature_default)
FEATURE_EVENTS = env_bool("FEATURE_EVENTS", _feature_default)
FEATURE_SHIPPING = env_bool("FEATURE_SHIPPING", _feature_default)
if FEATURE_PAYMENTS and not FEATURE_EMAIL_SMS: if FEATURE_PAYMENTS and not FEATURE_EMAIL_SMS:
raise ImproperlyConfigured("FEATURE_PAYMENTS requires FEATURE_EMAIL_SMS") raise ImproperlyConfigured("FEATURE_PAYMENTS requires FEATURE_EMAIL_SMS")
if FEATURE_SOCIAL_AI and not FEATURE_SOCIAL: if FEATURE_SOCIAL_AI and not FEATURE_SOCIAL:
raise ImproperlyConfigured("FEATURE_SOCIAL_AI requires FEATURE_SOCIAL") raise ImproperlyConfigured("FEATURE_SOCIAL_AI requires FEATURE_SOCIAL")
if FEATURE_SHOP and not FEATURE_EMAIL_SMS:
raise ImproperlyConfigured("FEATURE_SHOP requires FEATURE_EMAIL_SMS")
if FEATURE_SHOP and not FEATURE_PAYMENTS:
raise ImproperlyConfigured("FEATURE_SHOP requires FEATURE_PAYMENTS")
if FEATURE_POS_SYNC and not FEATURE_SHOP:
raise ImproperlyConfigured("FEATURE_POS_SYNC requires FEATURE_SHOP")
if FEATURE_EVENTS and not FEATURE_EMAIL_SMS:
raise ImproperlyConfigured("FEATURE_EVENTS requires FEATURE_EMAIL_SMS")
if FEATURE_EVENTS and not FEATURE_PAYMENTS:
raise ImproperlyConfigured("FEATURE_EVENTS requires FEATURE_PAYMENTS")
if FEATURE_SHIPPING and not FEATURE_SHOP:
raise ImproperlyConfigured("FEATURE_SHIPPING requires FEATURE_SHOP")
CORE_APPS = [ CORE_APPS = [
"core.apps.CoreConfig", "core.apps.CoreConfig",
@@ -137,6 +175,10 @@ OPTIONAL_APPS = [
(FEATURE_PAYMENTS, "payments.apps.PaymentsConfig"), (FEATURE_PAYMENTS, "payments.apps.PaymentsConfig"),
(FEATURE_SOCIAL, "social.apps.SocialConfig"), (FEATURE_SOCIAL, "social.apps.SocialConfig"),
(FEATURE_SOCIAL_AI, "social_ai.apps.SocialAiConfig"), (FEATURE_SOCIAL_AI, "social_ai.apps.SocialAiConfig"),
(FEATURE_SHOP, "shop.apps.ShopConfig"),
(FEATURE_POS_SYNC, "pos_sync.apps.PosSyncConfig"),
(FEATURE_EVENTS, "events.apps.EventsConfig"),
(FEATURE_SHIPPING, "shipping.apps.ShippingConfig"),
] ]
DJANGO_APPS = [ DJANGO_APPS = [
"django.contrib.admin", "django.contrib.admin",
@@ -170,12 +212,12 @@ MIDDLEWARE = [
"public.middleware.UnderConstructionMiddleware", "public.middleware.UnderConstructionMiddleware",
] ]
ROOT_URLCONF = "client_site.urls" ROOT_URLCONF = "print_forge.urls"
TEMPLATES = [ TEMPLATES = [
{ {
"BACKEND": "django.template.backends.django.DjangoTemplates", "BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [BASE_DIR / "client_site" / "templates"], "DIRS": [BASE_DIR / "print_forge" / "templates"],
"APP_DIRS": True, "APP_DIRS": True,
"OPTIONS": { "OPTIONS": {
"context_processors": [ "context_processors": [
@@ -185,13 +227,14 @@ TEMPLATES = [
"django.contrib.messages.context_processors.messages", "django.contrib.messages.context_processors.messages",
"public.context_processors.site_branding", "public.context_processors.site_branding",
"public.context_processors.tianji_tracking", "public.context_processors.tianji_tracking",
"public.context_processors.shop_cart",
"core.context_processors.feature_registry", "core.context_processors.feature_registry",
], ],
}, },
}, },
] ]
WSGI_APPLICATION = "client_site.wsgi.application" WSGI_APPLICATION = "print_forge.wsgi.application"
DATABASES = database_config() DATABASES = database_config()
@@ -218,7 +261,7 @@ USE_TZ = True
STATIC_URL = "static/" STATIC_URL = "static/"
STATIC_ROOT = BASE_DIR / "staticfiles" STATIC_ROOT = BASE_DIR / "staticfiles"
STATICFILES_DIRS = [ STATICFILES_DIRS = [
BASE_DIR / "client_site" / "static", BASE_DIR / "print_forge" / "static",
] ]
# Uploaded blobs live in the DB (core.StoredFile). Default storage is # Uploaded blobs live in the DB (core.StoredFile). Default storage is
# in-memory only so nothing is written to disk accidentally. # in-memory only so nothing is written to disk accidentally.
@@ -230,6 +273,10 @@ STORAGES = {
"BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage", "BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage",
}, },
} }
# Keep product photos (15 MB) and STLs (25 MB) in RAM so Django never
# spools them to /tmp. Larger social videos still use a request temp
# file, then the bytes go into StoredFile.
FILE_UPLOAD_MAX_MEMORY_SIZE = 26 * 1024 * 1024
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
@@ -244,13 +291,13 @@ LOGOUT_REDIRECT_URL = "accounts:login"
SITE_UNDER_CONSTRUCTION = env_bool("SITE_UNDER_CONSTRUCTION", False) SITE_UNDER_CONSTRUCTION = env_bool("SITE_UNDER_CONSTRUCTION", False)
# --- Branding / public site --- # --- Branding / public site ---
SITE_NAME = env("SITE_NAME", "Your Company") SITE_NAME = env("SITE_NAME", "Print Forge")
SITE_TAGLINE = env("SITE_TAGLINE", "A tagline for the public site") SITE_TAGLINE = env("SITE_TAGLINE", "Handcrafted 3D printed toys")
PUBLIC_SITE_URL = env("PUBLIC_SITE_URL", "") PUBLIC_SITE_URL = env("PUBLIC_SITE_URL", "")
CONTACT_PHONE = env("CONTACT_PHONE", "") CONTACT_PHONE = env("CONTACT_PHONE", "630-632-0202")
CONTACT_EMAIL = env("CONTACT_EMAIL", "hello@example.com") CONTACT_EMAIL = env("CONTACT_EMAIL", "Printforgeprints@gmail.com")
CONTACT_ADDRESS = env("CONTACT_ADDRESS", "") CONTACT_ADDRESS = env("CONTACT_ADDRESS", "")
CONTACT_SERVICE_AREA = env("CONTACT_SERVICE_AREA", "") CONTACT_SERVICE_AREA = env("CONTACT_SERVICE_AREA", "Chicagoland")
CREDIT_NAME = env("CREDIT_NAME", "AI ML Operations, LLC") CREDIT_NAME = env("CREDIT_NAME", "AI ML Operations, LLC")
CREDIT_URL = env("CREDIT_URL", "https://aimloperations.com") CREDIT_URL = env("CREDIT_URL", "https://aimloperations.com")
@@ -352,6 +399,20 @@ STRIPE_PUBLISHABLE_KEY = env("STRIPE_PUBLISHABLE_KEY", "")
STRIPE_WEBHOOK_SECRET = env("STRIPE_WEBHOOK_SECRET", "") STRIPE_WEBHOOK_SECRET = env("STRIPE_WEBHOOK_SECRET", "")
STRIPE_CURRENCY = env("STRIPE_CURRENCY", "usd") STRIPE_CURRENCY = env("STRIPE_CURRENCY", "usd")
# --- Shop / POS / shipping (FEATURE_SHOP and add-ons) ---
# 0 = unlimited made-to-order print queue.
SHOP_PRINT_QUEUE_LIMIT_MINUTES = int(
env("SHOP_PRINT_QUEUE_LIMIT_MINUTES", "0") or "0"
)
POS_WEBHOOK_SECRET = env("POS_WEBHOOK_SECRET", "")
POS_API_BASE_URL = env("POS_API_BASE_URL", "")
POS_API_TOKEN = env("POS_API_TOKEN", "")
EASYPOST_API_KEY = env("EASYPOST_API_KEY", "")
SHIP_FROM_LINE1 = env("SHIP_FROM_LINE1", "")
SHIP_FROM_CITY = env("SHIP_FROM_CITY", "")
SHIP_FROM_STATE = env("SHIP_FROM_STATE", "")
SHIP_FROM_ZIP = env("SHIP_FROM_ZIP", "")
# --- Nominatim (address suggest; server-side proxy only) --- # --- Nominatim (address suggest; server-side proxy only) ---
# Self-hosted on ai-server-4080. Nominatim has no native API keys — gate with # Self-hosted on ai-server-4080. Nominatim has no native API keys — gate with
# LAN UFW + this Django proxy. Optional NOMINATIM_API_KEY is forwarded as # LAN UFW + this Django proxy. Optional NOMINATIM_API_KEY is forwarded as
@@ -361,7 +422,7 @@ NOMINATIM_TIMEOUT_SECONDS = int(env("NOMINATIM_TIMEOUT_SECONDS", "8") or "8")
NOMINATIM_COUNTRY_CODES = env("NOMINATIM_COUNTRY_CODES", "us") NOMINATIM_COUNTRY_CODES = env("NOMINATIM_COUNTRY_CODES", "us")
NOMINATIM_USER_AGENT = env( NOMINATIM_USER_AGENT = env(
"NOMINATIM_USER_AGENT", "NOMINATIM_USER_AGENT",
"client_site/1.0 (address-suggest; contact admin)", "print_forge/1.0 (address-suggest; contact admin)",
) )
NOMINATIM_API_KEY = env("NOMINATIM_API_KEY", "") NOMINATIM_API_KEY = env("NOMINATIM_API_KEY", "")
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

+6
View File
@@ -0,0 +1,6 @@
/*!
* Bootstrap v4.1.3 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ *, *::before, *::after { box-sizing: border-box; } html { font-family: sans-serif; line-height: 1.15; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -ms-overflow-style: scrollbar; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } @-ms-viewport { width: device-width; } article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } body { margin: 0; font-family: "Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size: 1rem; font-weight: 300; line-height: 1.575; color: #808081; text-align: left; background-color: #ffffff; } [tabindex="-1"]:focus { outline: 0 !important; } hr { box-sizing: content-box; height: 0; overflow: visible; } h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: 0.5rem; } p { margin-top: 0; margin-bottom: 1rem; } abbr[title], abbr[data-original-title] { text-decoration: underline; text-decoration: underline dotted; cursor: help; border-bottom: 0; } address { margin-bottom: 1rem; font-style: normal; line-height: inherit; } ol, ul, dl { margin-top: 0; margin-bottom: 1rem; } ol ol, ul ul, ol ul, ul ol { margin-bottom: 0; } dt { font-weight: inherit; } dd { margin-bottom: .5rem; margin-left: 0; } blockquote { margin: 0 0 1rem; } dfn { font-style: italic; } b, strong { font-weight: bolder; } small { font-size: 80%; } sub, sup { position: relative; font-size: 75%; line-height: 0; vertical-align: baseline; } sub { bottom: -.25em; } sup { top: -.5em; } a { color: #ff6252; text-decoration: none; background-color: transparent; -webkit-text-decoration-skip: objects; } a:hover { color: #ff1d06; text-decoration: underline; } a:not([href]):not([tabindex]) { color: inherit; text-decoration: none; } a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { color: inherit; text-decoration: none; } a:not([href]):not([tabindex]):focus { outline: 0; } pre, code, kbd, samp { font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 1em; } pre { margin-top: 0; margin-bottom: 1rem; overflow: auto; -ms-overflow-style: scrollbar; } figure { margin: 0 0 1rem; } img { vertical-align: middle; border-style: none; } svg { overflow: hidden; vertical-align: middle; } table { border-collapse: collapse; } caption { padding-top: 0.75rem; padding-bottom: 0.75rem; color: #6c757d; text-align: left; caption-side: bottom; } th { text-align: inherit; } label { display: inline-block; margin-bottom: 0.5rem; } button { border-radius: 0; } button:focus { outline: 1px dotted; outline: 5px auto -webkit-focus-ring-color; } input, button, select, optgroup, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } button, input { overflow: visible; } button, select { text-transform: none; } button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { padding: 0; border-style: none; } input[type="radio"], input[type="checkbox"] { box-sizing: border-box; padding: 0; } input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] { -webkit-appearance: listbox; } textarea { overflow: auto; resize: vertical; } fieldset { min-width: 0; padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; max-width: 100%; padding: 0; margin-bottom: .5rem; font-size: 1.5rem; line-height: inherit; color: inherit; white-space: normal; } progress { vertical-align: baseline; } [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } [type="search"] { outline-offset: -2px; -webkit-appearance: none; } [type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-file-upload-button { font: inherit; -webkit-appearance: button; } output { display: inline-block; } summary { display: list-item; cursor: pointer; } template { display: none; } [hidden] { display: none !important; } h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { margin-bottom: 0.5rem; font-family: "Playfair Display", serif; font-weight: 300; line-height: 1.1; color: #151515; } h1, .h1 { font-size: 67px; } h2, .h2 { font-size: 45px; } h3, .h3 { font-size: 26px; } h4, .h4 { font-size: 20px; } h5, .h5 { font-size: 18px; } h6, .h6 { font-size: 16px; } .lead { font-size: 20px; font-weight: 300; } .display-1 { font-size: 6rem; font-weight: 300; line-height: 1.2; } .display-2 { font-size: 5.5rem; font-weight: 300; line-height: 1.2; } .display-3 { font-size: 4.5rem; font-weight: 300; line-height: 1.2; } .display-4 { font-size: 3.5rem; font-weight: 300; line-height: 1.2; } hr { margin-Line truncated
+2
View File
@@ -0,0 +1,2 @@
/** @group Fonts */␍/** @section Font Awesome Icons 4.7.0 */␍@font-face {␍ font-family: 'FontAwesome';␍ src: url("../fonts/fontawesome-webfont.eot?v=4.7.0");␍ src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");␍ font-weight: normal;␍ font-style: normal;␍}␍␍.fa {␍ display: inline-block;␍ font-family: 'FontAwesome';␍ font-size: inherit;␍ text-rendering: auto;␍ -webkit-font-smoothing: antialiased;␍ -moz-osx-font-smoothing: grayscale;␍}␍␍[class*='fa-']:before {␍ font-weight: 400;␍ font-family: 'FontAwesome';␍}␍␍/* makes the font 33% larger relative to the icon container */␍.fa-lg {␍ font-size: 1.33333333em;␍ line-height: 0.75em;␍ vertical-align: -15%;␍}␍␍.fa-2x {␍ font-size: 2em;␍}␍␍.fa-3x {␍ font-size: 3em;␍}␍␍.fa-4x {␍ font-size: 4em;␍}␍␍.fa-5x {␍ font-size: 5em;␍}␍␍.fa-fw {␍ width: 1.28571429em;␍ text-align: center;␍}␍␍.fa-ul {␍ padding-left: 0;␍ margin-left: 2.14285714em;␍ list-style-type: none;␍}␍␍.fa-ul > li {␍ position: relative;␍}␍␍.fa-li {␍ position: absolute;␍ left: -2.14285714em;␍ width: 2.14285714em;␍ top: 0.14285714em;␍ text-align: center;␍}␍␍.fa-li.fa-lg {␍ left: -1.85714286em;␍}␍␍.fa-border {␍ padding: .2em .25em .15em;␍ border: solid 0.08em #eeeeee;␍ border-radius: .1em;␍}␍␍.fa-pull-left {␍ float: left;␍}␍␍.fa-pull-right {␍ float: right;␍}␍␍.fa.fa-pull-left {␍ margin-right: .3em;␍}␍␍.fa.fa-pull-right {␍ margin-left: .3em;␍}␍␍/* Deprecated as of 4.4.0 */␍.pull-right {␍ float: right;␍}␍␍.pull-left {␍ float: left;␍}␍␍.fa.pull-left {␍ margin-right: .3em;␍}␍␍.fa.pull-right {␍ margin-left: .3em;␍}␍␍.fa-spin {␍ -webkit-animation: fa-spin 2s infinite linear;␍ animation: fa-spin 2s infinite linear;␍}␍␍.fa-pulse {␍ -webkit-animation: fa-spin 1s infinite steps(8);␍ animation: fa-spin 1s infinite steps(8);␍}␍␍@-webkit-keyframes fa-spin {␍ 0% {␍ -webkit-transform: rotate(0deg);␍ transform: rotate(0deg);␍ }␍ 100% {␍ -webkit-transform: rotate(359deg);␍ transform: rotate(359deg);␍ }␍}␍␍@keyframes fa-spin {␍ 0% {␍ -webkit-transform: rotate(0deg);␍ transform: rotate(0deg);␍ }␍ 100% {␍ -webkit-transform: rotate(359deg);␍ transform: rotate(359deg);␍ }␍}␍␍.fa-rotate-90 {␍ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";␍ -webkit-transform: rotate(90deg);␍ -ms-transform: rotate(90deg);␍ transform: rotate(90deg);␍}␍␍.fa-rotate-180 {␍ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";␍ -webkit-transform: rotate(180deg);␍ -ms-transform: rotate(180deg);␍ transform: rotate(180deg);␍}␍␍.fa-rotate-270 {␍ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";␍ -webkit-transform: rotate(270deg);␍ -ms-transform: rotate(270deg);␍ transform: rotate(270deg);␍}␍␍.fa-flip-horizontal {␍ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";␍ -webkit-transform: scale(-1, 1);␍ -ms-transform: scale(-1, 1);␍ transform: scale(-1, 1);␍}␍␍.fa-flip-vertical {␍ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";␍ -webkit-transform: scale(1, -1);␍ -ms-transform: scale(1, -1);␍ transform: scale(1, -1);␍}␍␍:root .fa-rotate-90,␍:root .fa-rotate-180,␍:root .fa-rotate-270,␍:root .fa-flip-horizontal,␍:root .fa-flip-vertical {␍ filter: none;␍}␍␍.fa-stack {␍ position: relative;␍ display: inline-block;␍ width: 2em;␍ height: 2em;␍ line-height: 2em;␍ vertical-align: middle;␍}␍␍.fa-stack-1x,␍.fa-stack-2x {␍ position: absolute;␍ left: 0;␍ width: 100%;␍ text-align: center;␍}␍␍.fa-stack-1x {␍ line-height: inherit;␍}␍␍.fa-stack-2x {␍ font-size: 2em;␍}␍␍.fa-inverse {␍ color: #ffffff;␍}␍␍/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
readers do not read off random characters that represent icons */ .fa-glass:before { content: "\f000"; } .fa-music:before { content: "\f001"; } .fa-search:before { content: "\f002"; } .fa-envelope-o:before { content: "\f003"; } .fa-heart:before { content: "\f004"; } .fa-star:before { content: "\f005"; } .fa-star-o:before { content: "\f006"; } .fa-user:before { content: "\f007"; } .fa-film:before { content: "\f008"; } .fa-th-large:before { content: "\f009"; } .fa-th:before { content: "\f00a"; } .fa-th-list:before { content: "\f00b"; } .fa-check:before { content: "\f00c"; } .fa-remove:before, .fa-close:before, .fa-times:before { content: "\f00d"; } .fa-search-plus:before { content: "\f00e"; } .fa-search-minus:before { content: "\f010"; } .fa-power-off:before { content: "\f011"; } .fa-signal:before { content: "\f012"; } .fa-gear:before, .fa-cog:before { content: "\f013"; } .fa-trash-o:before { content: "\f014"; } .fa-home:before { content: "\f015"; } .fa-file-o:before { content: "\f016"; } .fa-clock-o:before { content: "\f017"; } .fa-road:before { content: "\f018"; } .fa-download:before { content: "\f019"; } .fa-arrow-circle-o-down:before { content: "\f01a"; } .fa-arrow-circle-o-up:before { content: "\f01b"; } .fa-inbox:before { content: "\f01c"; } .fa-play-circle-o:before { content: "\f01d"; } .fa-rotate-right:before, .fa-repeat:before { content: "\f01e"; } .fa-refresh:before { content: "\f021"; } .fa-list-alt:before { content: "\f022"; } .fa-lock:before { content: "\f023"; } .fa-flag:before { content: "\f024"; } .fa-headphones:before { content: "\f025"; } .fa-volume-off:before { content: "\f026"; } .fa-volume-down:before { content: "\f027"; } .fa-volume-up:before { content: "\f028"; } .fa-qrcode:before { content: "\f029"; } .fa-barcode:before { content: "\f02a"; } .fa-tag:before { content: "\f02b"; } .fa-tags:before { content: "\f02c"; } .fa-book:before { content: "\f02d"; } .fa-bookmark:before { content: "\f02e"; } .fa-print:before { content: "\f02f"; } .fa-camera:before { content: "\f030"; } .fa-font:before { content: "\f031"; } .fa-bold:before { content: "\f032"; } .fa-italic:before { content: "\f033"; } .fa-text-height:before { content: "\f034"; } .fa-text-width:before { content: "\f035"; } .fa-align-left:before { content: "\f036"; } .fa-align-center:before { content: "\f037"; } .fa-align-right:before { content: "\f038"; } .fa-align-justify:before { content: "\f039"; } .fa-list:before { content: "\f03a"; } .fa-dedent:before, .fa-outdent:before { content: "\f03b"; } .fa-indent:before { content: "\f03c"; } .fa-video-camera:before { content: "\f03d"; } .fa-photo:before, .fa-image:before, .fa-picture-o:before { content: "\f03e"; } .fa-pencil:before { content: "\f040"; } .fa-map-marker:before { content: "\f041"; } .fa-adjust:before { content: "\f042"; } .fa-tint:before { content: "\f043"; } .fa-edit:before, .fa-pencil-square-o:before { content: "\f044"; } .fa-share-square-o:before { content: "\f045"; } .fa-check-square-o:before { content: "\f046"; } .fa-arrows:before { content: "\f047"; } .fa-step-backward:before { content: "\f048"; } .fa-fast-backward:before { content: "\f049"; } .fa-backward:before { content: "\f04a"; } .fa-play:before { content: "\f04b"; } .fa-pause:before { content: "\f04c"; } .fa-stop:before { content: "\f04d"; } .fa-forward:before { content: "\f04e"; } .fa-fast-forward:before { content: "\f050"; } .fa-step-forward:before { content: "\f051"; } .fa-eject:before { content: "\f052"; } .fa-chevron-left:before { content: "\f053"; } .fa-chevron-right:before { content: "\f054"; } .fa-plus-circle:before { content: "\f055"; } .fa-minus-circle:before { content: "\f056"; } .fa-times-circle:before { content: "\f057"; } .fa-check-circle:before { content: "\f058"; } .fa-question-circle:before { content: "\f059"; } .fa-info-circle:before { content: "\f05a"; } .fa-crosshairs:before { content: "\f05b"; } .fa-times-circle-o:before { content: "\f05c"; } .fa-check-circle-o:before { content: "\f05d"; } .fa-ban:before { content: "\f05e"; } .fa-arrow-left:before { content: "\f060"; } .fa-arrow-right:before { content: "\f061"; } .fa-arrow-up:before { content: "\f062"; } .fa-arrow-down:before { content: "\f063"; } .fa-mail-forward:before, .fa-share:before { content: "\f064"; } .fa-expand:before { content: "\f065"; } .fa-compress:before { content: "\f066"; } .fa-plus:before { content: "\f067"; } .fa-minus:before { content: "\f068"; } .fa-asterisk:before { content: "\f069"; } .fa-exclamation-circle:before { content: "\f06a"; } .fa-gift:before { content: "\f06b"; } .fa-leaf:before { content: "\f06c"; } .fa-fire:before { content: "\f06d"; } .fa-eye:before { content: "\f06e"; } .fa-eye-slash:before { content: "\f070"; } .fa-warning:before, .fa-exclamation-triangle:before { content: "\f071"; } .fa-plane:Line truncated
@@ -726,3 +726,162 @@ body.portal {
.utm-qr-actions { min-width: 160px; } .utm-qr-actions { min-width: 160px; }
.utm-qr-actions .btn { margin: 0 8px 8px 0; } .utm-qr-actions .btn { margin: 0 8px 8px 0; }
#preview-body a { color: var(--monica-primary); } #preview-body a { color: var(--monica-primary); }
.product-edit-layout {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(240px, 320px);
gap: 24px;
align-items: start;
}
@media (max-width: 900px) {
.product-edit-layout { grid-template-columns: 1fr; }
}
.product-preview-col {
position: sticky;
top: 16px;
}
.product-card-preview {
background: #fff;
border: 1px solid #dddddd;
text-align: center;
overflow: hidden;
}
.product-card-preview-body {
padding: 20px 15px;
background: #f5f5f5;
}
.product-card-preview-figure {
min-height: 160px;
display: flex;
align-items: center;
justify-content: center;
}
.product-card-preview-figure img {
max-width: 100%;
max-height: 200px;
height: auto;
display: block;
}
.product-card-preview-title {
margin: 12px 0 6px;
font-size: 18px;
font-weight: 500;
}
.product-card-preview-price {
font-weight: 600;
color: var(--monica-ink);
}
.product-card-preview-desc {
margin: 10px 0 0;
font-size: 13px;
color: var(--monica-muted);
min-height: 1.2em;
}
.product-card-preview .product-color-dots {
display: flex;
flex-wrap: wrap;
gap: 6px;
justify-content: center;
margin-top: 10px;
}
.product-card-preview .product-color-dot {
width: 16px;
height: 16px;
border-radius: 50%;
border: 2px solid #fff;
box-shadow: 0 0 0 1px #d1d5db;
display: inline-block;
}
.product-card-preview-panel {
padding: 12px 16px;
display: flex;
align-items: center;
justify-content: space-between;
border-top: 1px solid #dddddd;
font-size: 13px;
font-weight: 600;
}
.color-rows { display: grid; gap: 12px; margin-bottom: 10px; }
.color-row {
display: grid;
gap: 8px;
padding: 10px;
border: 1px solid var(--monica-border);
background: #fff;
}
.color-row-main {
display: grid;
grid-template-columns: 1fr 48px 72px auto;
gap: 8px;
align-items: center;
}
.color-row input[type="color"] {
width: 48px;
height: 38px;
padding: 2px;
cursor: pointer;
}
.color-row-photos {
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
}
.photo-thumbs,
.color-row-photos {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 8px;
}
.photo-thumb {
width: 72px;
font-size: 11px;
color: var(--monica-muted);
display: grid;
gap: 4px;
justify-items: center;
}
.photo-thumb img {
width: 72px;
height: 72px;
object-fit: contain;
background: #f3f4f6;
border: 1px solid var(--monica-border);
display: block;
}
.field .inline { display: flex; align-items: center; gap: 8px; margin-top: 8px; font-size: 13px; }
.product-thumb {
width: 40px;
height: 40px;
object-fit: contain;
display: block;
background: #f3f4f6;
}
.product-thumb-empty { display: inline-block; }
.stl-viewer {
position: relative;
width: 100%;
min-height: 220px;
height: 260px;
background: #f5f5f5;
border: 1px solid var(--monica-border);
overflow: hidden;
}
.stl-viewer canvas {
display: block;
width: 100%;
height: 100%;
touch-action: none;
}
.stl-viewer-status {
position: absolute;
inset: 0;
margin: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 13px;
color: var(--monica-muted);
pointer-events: none;
}
File renamed without changes.
+1
View File
@@ -0,0 +1 @@
@charset "UTF-8"; /*! * Bootstrap v4.1.3 (https://getbootstrap.com/) * Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2018 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ *, *::before, *::after { box-sizing: border-box; } html { font-family: sans-serif; line-height: 1.15; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -ms-overflow-style: scrollbar; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } @-ms-viewport { width: device-width; } article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } body { margin: 0; font-family: "Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size: 1rem; font-weight: 300; line-height: 1.575; color: #808081; text-align: left; background-color: #ffffff; } [tabindex="-1"]:focus { outline: 0 !important; } hr { box-sizing: content-box; height: 0; overflow: visible; } h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: 0.5rem; } p { margin-top: 0; margin-bottom: 1rem; } abbr[title], abbr[data-original-title] { text-decoration: underline; text-decoration: underline dotted; cursor: help; border-bottom: 0; } address { margin-bottom: 1rem; font-style: normal; line-height: inherit; } ol, ul, dl { margin-top: 0; margin-bottom: 1rem; } ol ol, ul ul, ol ul, ul ol { margin-bottom: 0; } dt { font-weight: inherit; } dd { margin-bottom: .5rem; margin-left: 0; } blockquote { margin: 0 0 1rem; } dfn { font-style: italic; } b, strong { font-weight: bolder; } small { font-size: 80%; } sub, sup { position: relative; font-size: 75%; line-height: 0; vertical-align: baseline; } sub { bottom: -.25em; } sup { top: -.5em; } a { color: #ff6252; text-decoration: none; background-color: transparent; -webkit-text-decoration-skip: objects; } a:hover { color: #ff1d06; text-decoration: underline; } a:not([href]):not([tabindex]) { color: inherit; text-decoration: none; } a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { color: inherit; text-decoration: none; } a:not([href]):not([tabindex]):focus { outline: 0; } pre, code, kbd, samp { font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 1em; } pre { margin-top: 0; margin-bottom: 1rem; overflow: auto; -ms-overflow-style: scrollbar; } figure { margin: 0 0 1rem; } img { vertical-align: middle; border-style: none; } svg { overflow: hidden; vertical-align: middle; } table { border-collapse: collapse; } caption { padding-top: 0.75rem; padding-bottom: 0.75rem; color: #6c757d; text-align: left; caption-side: bottom; } th { text-align: inherit; } label { display: inline-block; margin-bottom: 0.5rem; } button { border-radius: 0; } button:focus { outline: 1px dotted; outline: 5px auto -webkit-focus-ring-color; } input, button, select, optgroup, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } button, input { overflow: visible; } button, select { text-transform: none; } button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { padding: 0; border-style: none; } input[type="radio"], input[type="checkbox"] { box-sizing: border-box; padding: 0; } input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] { -webkit-appearance: listbox; } textarea { overflow: auto; resize: vertical; } fieldset { min-width: 0; padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; max-width: 100%; padding: 0; margin-bottom: .5rem; font-size: 1.5rem; line-height: inherit; color: inherit; white-space: normal; } progress { vertical-align: baseline; } [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } [type="search"] { outline-offset: -2px; -webkit-appearance: none; } [type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-file-upload-button { font: inherit; -webkit-appearance: button; } output { display: inline-block; } summary { display: list-item; cursor: pointer; } template { display: none; } [hidden] { display: none !important; } h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { margin-bottom: 0.5rem; font-family: "Playfair Display", serif; font-weight: 300; line-height: 1.1; color: #151515; } h1, .h1 { font-size: 67px; } h2, .h2 { font-size: 45px; } h3, .h3 { font-size: 26px; } h4, .h4 { font-size: 20px; } h5, .h5 { font-size: 18px; } h6, .h6 { font-size: 16px; } .lead { font-size: 20px; font-weight: 300; } .display-1 { font-size: 6rem; font-weight: 300; line-height: 1.2; } .dispLine truncated
@@ -0,0 +1,352 @@
/* Print Forge public brand overrides on the Ecoprint theme */
:root {
--pf-primary: #ff6252;
--pf-primary-dark: #e24f41;
--pf-ink: #151515;
--pf-muted: #6b7280;
}
/* Theme CSS starts `.page` at opacity:0 until a `.preloader` runs.
Keep this so a missed preloader never blanks the site. */
.page {
opacity: 1;
}
.rd-navbar-brand .brand img,
.rd-navbar-brand .brand-logo-dark,
.rd-navbar-brand .brand-logo-light,
.footer-classic-brand .brand img {
height: 39px;
width: auto;
max-width: 180px;
}
.flash {
list-style: none;
margin: 0;
padding: 12px 0 0;
}
.flash li {
max-width: 1200px;
margin: 0 auto 8px;
padding: 12px 16px;
background: #fde8e8;
border-left: 3px solid var(--pf-primary);
color: #7f1d1d;
font-size: 14px;
}
.flash li.success {
background: #ecfdf5;
border-left-color: #059669;
color: #065f46;
}
.flash li.error,
.flash li.danger {
background: #fee2e2;
border-left-color: #b91c1c;
color: #991b1b;
}
.form-wrap .errorlist,
.errorlist {
list-style: none;
margin: 6px 0 0;
padding: 0;
color: #b91c1c;
font-size: 13px;
}
.cookie-consent-banner {
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 11000;
padding: 1rem 1.25rem;
background: rgba(21, 21, 21, 0.96);
border-top: 2px solid var(--pf-primary);
box-shadow: 0 -8px 24px rgba(0, 0, 0, 0.28);
}
.cookie-consent-content {
max-width: 1200px;
margin: 0 auto;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 1rem;
}
.cookie-consent-text {
flex: 1 1 420px;
color: #d7dee3;
font-size: 0.9375rem;
line-height: 1.45;
margin: 0;
}
.cookie-consent-text-short {
display: none;
}
.cookie-consent-actions {
display: flex;
gap: 0.75rem;
flex-shrink: 0;
}
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
.footer-link-btn {
background: none;
border: none;
padding: 0;
color: var(--pf-primary);
font: inherit;
font-size: 13px;
cursor: pointer;
text-decoration: none;
}
.footer-link-btn:hover {
text-decoration: underline;
color: var(--pf-primary-dark);
}
.cookie-consent-link {
color: #ffd3ce;
text-decoration: underline;
text-underline-offset: 2px;
}
.cookie-consent-link:hover {
color: #fff;
}
.legal-prose {
max-width: 42rem;
}
.legal-prose .legal-lead {
font-size: 1.05rem;
color: var(--pf-ink);
margin-bottom: 1.75rem;
}
.legal-prose h2 {
font-size: 1.35rem;
margin-top: 2rem;
margin-bottom: 0.75rem;
text-transform: none;
letter-spacing: 0;
}
.legal-prose p {
margin-bottom: 1rem;
color: #4b5563;
line-height: 1.65;
}
.legal-prose .legal-updated {
margin-top: 2.5rem;
font-size: 0.875rem;
color: var(--pf-muted);
}
.footer-made-by {
margin: 10px 0 0;
font-size: 13px;
color: #6b7280;
}
.footer-made-by a {
color: var(--pf-primary);
text-decoration: underline;
}
.form-label-outside {
display: block;
margin-bottom: 6px;
font-weight: 500;
}
.product-figure {
min-height: 180px;
display: flex;
align-items: center;
justify-content: center;
}
.product-figure img,
.slick-product-figure img {
max-width: 100%;
height: auto;
object-fit: contain;
}
.product-color-dots {
display: flex;
flex-wrap: wrap;
gap: 6px;
justify-content: center;
margin-top: 10px;
}
.product-color-dot {
width: 16px;
height: 16px;
border-radius: 50%;
border: 2px solid #fff;
box-shadow: 0 0 0 1px #d1d5db;
display: inline-block;
}
.product-color-picker {
margin: 8px 0 20px;
}
.product-color-label {
margin: 0 0 10px;
font-weight: 500;
color: #151515;
}
.product-color-swatches {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.product-color-swatch {
cursor: pointer;
display: inline-flex;
}
.product-color-swatch input {
position: absolute;
opacity: 0;
pointer-events: none;
}
.product-color-swatch span {
width: 28px;
height: 28px;
border-radius: 50%;
border: 2px solid #fff;
box-shadow: 0 0 0 1px #d1d5db;
display: block;
}
.product-color-swatch input:checked + span,
.product-color-swatch input:focus-visible + span {
box-shadow: 0 0 0 2px var(--pf-primary);
}
.product-gallery-layout {
display: grid;
grid-template-columns: 72px minmax(0, 1fr);
gap: 12px;
align-items: start;
}
.product-gallery-thumbs {
display: flex;
flex-direction: column;
gap: 8px;
}
.product-gallery-thumbs button {
width: 72px;
height: 72px;
padding: 4px;
border: 2px solid #dddddd;
background: #fff;
cursor: pointer;
overflow: hidden;
}
.product-gallery-thumbs button.active,
.product-gallery-thumbs button[aria-selected="true"] {
border-color: var(--pf-primary);
}
.product-gallery-thumbs img {
width: 100%;
height: 100%;
object-fit: contain;
display: block;
}
.product-gallery-thumb-3d {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
font-size: 12px;
font-weight: 700;
letter-spacing: 0.08em;
color: #151515;
background: #f5f5f5;
}
.product-gallery-stage {
min-width: 0;
}
.product-media-hint {
margin: 8px 0 0;
font-size: 13px;
color: #6b7280;
text-align: center;
}
.stl-viewer {
position: relative;
width: 100%;
min-height: 360px;
height: 420px;
background: #f5f5f5;
border: 1px solid #dddddd;
overflow: hidden;
}
.stl-viewer canvas {
display: block;
width: 100%;
height: 100%;
touch-action: none;
}
.stl-viewer-status {
position: absolute;
inset: 0;
margin: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
color: #6b7280;
pointer-events: none;
}
.stl-viewer.is-error .stl-viewer-status {
color: #991b1b;
}
@media (max-width: 767px) {
.product-gallery-layout {
grid-template-columns: 1fr;
}
.product-gallery-stage {
order: -1;
}
.product-gallery-thumbs {
flex-direction: row;
overflow-x: auto;
}
}
@media (max-width: 640px) {
.cookie-consent-banner {
padding: 0.625rem 0.75rem;
padding-bottom: max(0.625rem, env(safe-area-inset-bottom));
}
.cookie-consent-content {
flex-direction: column;
align-items: stretch;
gap: 0.625rem;
}
.cookie-consent-text-short {
display: inline;
}
.cookie-consent-text-full {
display: none;
}
.cookie-consent-text {
flex: none;
font-size: 0.8125rem;
line-height: 1.35;
}
.cookie-consent-actions {
width: 100%;
}
}
Loaded 100 of 336 files, more files were not shown because too many files have changed in this diff. Show more