From c470ac40c0d7ae4432bae211efcfd5e0d698c1fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stig-=C3=98rjan=20Smelror?= Date: Sat, 31 May 2025 00:00:21 +0200 Subject: [PATCH] feat: Implement robust theme system and document architecture - Implement flexible theme switching via site.conf (site_theme, site_theme_css_file). - Ensure correct copying of theme static assets, with theme assets overriding root assets. - Resolve CSS linking issues by checking file existence after static copy and using correct paths for Pandoc. - Refactor path construction to prevent duplication when using absolute/relative output paths. - Create comprehensive how-it-works.md detailing system architecture, theme creation, and overall workflow. - Clarify design philosophy: qsgen3 remains design-agnostic, only linking main theme CSS automatically. --- README.md | 91 +- bin/qsgen3 | 1110 +++++++++++++++++ content/posts/hello-world.md | 30 + .../qsgen3/output/static/blog_index.tpl | 131 ++ .../qsgen3/output/static/blog_list.tpl | 17 + .../projects/qsgen3/output/static/blogs.tpl | 125 ++ .../qsgen3/output/static/css/jquery-3.5.1.js | 2 + .../output/static/css/minimaltemplate-v1.css | 663 ++++++++++ .../qsgen3/output/static/css/webflow.js | 29 + .../qsgen3/output/static/css/webfont.js | 33 + .../projects/qsgen3/output/static/pages.tpl | 127 ++ .../qsgen3/output/static/testimonies.tpl | 29 + how-it-works.md | 1029 +++++++++++++++ layouts/css/default.css | 110 ++ layouts/index.html | 47 + layouts/page.html | 32 + layouts/post.html | 39 + layouts/rss.xml | 24 + output/css/theme.css | 110 ++ output/index.html | 34 + output/posts/hello-world.html | 53 + output/rss.xml | 21 + output/static/blog_index.tpl | 131 ++ output/static/blog_list.tpl | 17 + output/static/blogs.tpl | 125 ++ output/static/css/jquery-3.5.1.js | 2 + output/static/css/minimaltemplate-v1.css | 663 ++++++++++ output/static/css/webflow.js | 29 + output/static/css/webfont.js | 33 + output/static/pages.tpl | 127 ++ output/static/testimonies.tpl | 29 + site.conf | 19 + site.conf.example | 48 +- static/css/style.css | 31 + 34 files changed, 5058 insertions(+), 82 deletions(-) create mode 100755 bin/qsgen3 create mode 100644 content/posts/hello-world.md create mode 100644 home/stig/projects/qsgen3/output/static/blog_index.tpl create mode 100644 home/stig/projects/qsgen3/output/static/blog_list.tpl create mode 100644 home/stig/projects/qsgen3/output/static/blogs.tpl create mode 100644 home/stig/projects/qsgen3/output/static/css/jquery-3.5.1.js create mode 100644 home/stig/projects/qsgen3/output/static/css/minimaltemplate-v1.css create mode 100644 home/stig/projects/qsgen3/output/static/css/webflow.js create mode 100644 home/stig/projects/qsgen3/output/static/css/webfont.js create mode 100644 home/stig/projects/qsgen3/output/static/pages.tpl create mode 100644 home/stig/projects/qsgen3/output/static/testimonies.tpl create mode 100644 how-it-works.md create mode 100644 layouts/css/default.css create mode 100644 layouts/index.html create mode 100644 layouts/page.html create mode 100644 layouts/post.html create mode 100644 layouts/rss.xml create mode 100644 output/css/theme.css create mode 100644 output/index.html create mode 100644 output/posts/hello-world.html create mode 100644 output/rss.xml create mode 100644 output/static/blog_index.tpl create mode 100644 output/static/blog_list.tpl create mode 100644 output/static/blogs.tpl create mode 100644 output/static/css/jquery-3.5.1.js create mode 100644 output/static/css/minimaltemplate-v1.css create mode 100644 output/static/css/webflow.js create mode 100644 output/static/css/webfont.js create mode 100644 output/static/pages.tpl create mode 100644 output/static/testimonies.tpl create mode 100644 site.conf create mode 100644 static/css/style.css diff --git a/README.md b/README.md index cddb738..4ccef7d 100644 --- a/README.md +++ b/README.md @@ -1,70 +1,45 @@ - +# qsgen3 - A Minimal Markdown Static Site Generator -# Quick Site Generator 2 +This is a refactored version of qsgen, focusing on simplicity, Markdown with YAML frontmatter, and a Zsh-based build process. -[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) +## Project Goals -Quick Site Generator 2 is a powerful static website generator written in Zsh, inspired by [Nikola](https://github.com/getnikola/nikola). It's designed to be fast, flexible, and easy to use, with support for both custom QSTags and standard Markdown syntax. +- Remove QSTags and switch to Markdown + YAML frontmatter. +- Simplify codebase by removing multilingual and theme support. +- Refactor templating with uniform variables (e.g., `{{ content }}`, `{{ title }}`). +- Ensure future-proofing by avoiding complex dependencies (like AWK for long string manipulation) for core tasks. +- Provide a solid initial setup that works out of the box with a sample post, index, and layout. +- Include a converter script in `scripts/convert-qstags-to-md.sh` for legacy content. -## Features +## Structure -- 🚀 Blazing fast static site generation -- 📝 Supports both QSTags and Markdown content -- 🌍 Multi-language support (en_US, en_UK, es_ES, fr_FR, nb_NO) -- 🎨 Themeable with custom templates (see [THEME-HOWTO.md](THEME-HOWTO.md)) -- 📱 Responsive design ready -- 🔍 SEO friendly -- 🔄 Automatic rebuild on file changes +- `bin/qsgen3`: The main Zsh build script. +- `site.conf`: Site configuration (INI format). +- `content/`: Source Markdown files. + - `content/posts/`: Blog posts. + - `content/pages/`: Static pages. +- `layouts/`: HTML templates. + - `layouts/base.html`: Base template for all pages. + - `layouts/post.html`: Template for individual blog posts. + - `layouts/page.html`: Template for static pages. +- `static/`: Static assets (CSS, images, etc.) copied as-is to the output. +- `output/`: The generated website. +- `scripts/`: Utility scripts (e.g., content converter). -## Quick Start +## Usage -1. **Installation** +1. Configure your site in `site.conf`. +2. Add Markdown content to the `content/` directory. +3. Customize templates in `layouts/`. +4. Run the build script: ```bash - git clone https://github.com/kekePower/qsgen2.git - cd qsgen2 - chmod +x qsgen2 + ./bin/qsgen3 ``` +5. Your static site will be generated in the `output/` directory. -2. **Create a new site** - ```bash - ./qsgen2 new my-site - cd my-site - ``` +## Dependencies -3. **Build and serve** - ```bash - ./qsgen2 build - ./qsgen2 serve - ``` +- Zsh +- A Markdown processor (e.g., Pandoc, CommonMark, or a Zsh-native solution if feasible for basic needs). +- Standard Unix utilities (grep, sed, find, etc.). -For detailed documentation, see the [HOWTO.md](HOWTO.md) guide. - -## Recent Changes - -- Added Norwegian (nb_NO) language support -- Improved internationalization (i18n) system -- Cleaned up temporary and backup files -- Updated documentation -- Added comprehensive HOWTO guide - -## Requirements - -- Zsh 5.8 or later -- Pandoc (for Markdown support) -- Basic Unix tools (sed, grep, etc.) - -## License - -This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. - -## Contributing - -Contributions are welcome! Please read our [contributing guidelines](CONTRIBUTING.md) before submitting pull requests. - -## Support - -For support, please [open an issue](https://github.com/kekePower/qsgen2/issues) on GitHub. - ---- - -*Created with ❤️ by kekePower* diff --git a/bin/qsgen3 b/bin/qsgen3 new file mode 100755 index 0000000..837a790 --- /dev/null +++ b/bin/qsgen3 @@ -0,0 +1,1110 @@ +#!/usr/bin/env zsh + +# qsgen3 - A Minimal Markdown Static Site Generator +# Version: 0.1.0 +QSGEN_NAME="qsgen3" +VERSION="0.2.0" +# Author: Your Name/AI Assistant + +# Strict mode +set -euo pipefail + +# Locale and umask for robustness and security +LC_ALL=C +LANG=C +umask 0022 + +# --- Configuration --- +# Associative array to hold configuration values +typeset -A QSG_CONFIG + + +# --- Script Paths --- +# Get the directory where the script is located - SCRIPT_DIR might still be useful for finding layouts if not overridden by config +SCRIPT_DIR="$(cd "$(dirname "${(%):-%x}")" && pwd)" +# Project root is the current working directory +PROJECT_ROOT="$PWD" +# Default config file name; full path will be resolved in main after option parsing +CONFIG_FILE_NAME="site.conf" +# Full path to the configuration file, to be determined in main +CONFIG_FILE="" + +# --- Usage Information --- +_usage() { + cat < Specify a custom configuration file. + (Default: site.conf in the project root) + -V, --version Show version information and exit. + -h, --help Show this help message and exit. +EOF + exit 0 +} + +# --- Logging --- +_log() { + local level=$1 + shift + local message=$* + # ANSI color codes + local color_normal="\033[0m" + local color_red="\033[0;31m" + local color_green="\033[0;32m" + local color_yellow="\033[0;33m" + local color_blue="\033[0;34m" + local color_cyan="\033[0;36m" + + # QSG_DEBUG can be set to true (e.g. export QSG_DEBUG=true) to enable debug logs + # By default, it's off unless explicitly set. + : ${QSG_DEBUG:=false} + + # Prepare format string and arguments for printf + # The message itself is %s to prevent it from being interpreted as a format string. + local format_string="%s[%s]%s %s\n" + local color_code="" + local log_prefix="" + local output_stream=1 # stdout by default + + case $level in + DEBUG) + if [[ "$QSG_DEBUG" != "true" ]]; then return 0; fi + color_code="$color_cyan" + log_prefix="DEBUG" + ;; + INFO) + color_code="$color_blue" + log_prefix="INFO" + ;; + SUCCESS) + color_code="$color_green" + log_prefix="SUCCESS" + ;; + WARNING) + color_code="$color_yellow" + log_prefix="WARNING" + output_stream=2 # stderr + ;; + ERROR) + color_code="$color_red" + log_prefix="ERROR" + output_stream=2 # stderr + ;; + *) + color_code="$color_red" + log_prefix="LOG_ERROR" + message="Unknown log level: $level. Original Message: $message" + output_stream=2 # stderr + ;; + esac + + if [[ $output_stream -eq 1 ]]; then + printf "$format_string" "$color_code" "$log_prefix" "$color_normal" "$message" + else + printf "$format_string" "$color_code" "$log_prefix" "$color_normal" "$message" >&2 + fi +} + +# --- YAML Helper Functions --- +_yaml_escape_val() { + # Escape backslashes and double quotes for YAML string values + printf '%s' "$1" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g' +} + +# --- Configuration Loading --- +_load_config() { + if [[ ! -f "$CONFIG_FILE" ]]; then + _log ERROR "Configuration file not found: $CONFIG_FILE" + exit 1 + fi + + _log INFO "Attempting to load configuration from: $CONFIG_FILE" + local current_section="" + local line_num=0 + + # Check if config file is readable + if [[ ! -r "$CONFIG_FILE" ]]; then + _log ERROR "Configuration file is not readable: $CONFIG_FILE" + exit 1 + else + _log DEBUG "Configuration file is readable: $CONFIG_FILE" + fi + + _log DEBUG "Attempting to enter config parsing loop. Disabling set -e temporarily." + set +e # Temporarily disable exit on error + # Read file line by line + while IFS= read -r line; do + ((line_num++)) + # _log DEBUG "Read raw line $line_num: '$line'" # Raw line logging can be noisy, comment for now + + # Remove leading/trailing whitespace + line=$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') + # _log DEBUG "Trimmed line $line_num: '$line'" + + # Skip empty lines and comments (lines starting with # or ;) + if [[ -z "$line" ]] || [[ "$line" == \#* ]] || [[ "$line" == \;* ]]; then + # _log DEBUG "Skipping line $line_num (empty or comment)" + continue + fi + + # Check for section headers like [section_name] + if [[ "$line" == \[[a-zA-Z0-9_]+]\] ]]; then + current_section=$(echo "$line" | sed 's/\[//;s/\]//') + # _log DEBUG "Switched to section: $current_section" + QSG_CONFIG[${current_section}_exists]=true # Mark section as existing + continue + fi + + # Process key-value pairs within a section + if [[ -n "$current_section" ]] && [[ "$line" == *=* ]]; then + local key=$(echo "$line" | cut -d'=' -f1 | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') + # Extract key and value + key="${line%%=*}" + local raw_value="${line#*=}" + + # Strip trailing comments (anything after #). Ensure this is done BEFORE quote stripping. + local value_no_comment="${raw_value%%#*}" + + # Remove potential quotes from value_no_comment + local value_no_quotes="${value_no_comment#\"}" # Remove leading quote + value_no_quotes="${value_no_quotes%\"}" # Remove trailing quote + + # Trim leading/trailing whitespace from value_no_quotes + # Using standard parameter expansion for trimming whitespace + local temp_value="${value_no_quotes##[[:space:]]}" # Remove leading whitespace + value="${temp_value%%[[:space:]]}" # Remove trailing whitespace + local full_key="${current_section}_${key}" + QSG_CONFIG[$full_key]="$value" + # _log DEBUG "Loaded config: $full_key = $value" + elif [[ -z "$current_section" ]] && [[ "$line" == *=* ]]; then + # Handle global key-value pairs (not inside a section) + key="${line%%=*}" # Extract key + local raw_value="${line#*=}" # Extract raw value + + # 1. Strip trailing comments + local value_no_comment="${raw_value%%#*}" + + # 2. Trim leading/trailing whitespace from the comment-stripped value + local temp_trimmed_value="${value_no_comment##[[:space:]]}" # Remove leading whitespace + local value_trimmed="${temp_trimmed_value%%[[:space:]]}" # Remove trailing whitespace + + # 3. Remove potential quotes from the trimmed, comment-stripped value + if [[ "${value_trimmed:0:1}" == "\"" && "${value_trimmed: -1}" == "\"" ]]; then + # It's double-quoted + value="${value_trimmed:1:-1}" + elif [[ "${value_trimmed:0:1}" == "'" && "${value_trimmed: -1}" == "'" ]]; then + # It's single-quoted + value="${value_trimmed:1:-1}" + else + # Not quoted or improperly quoted, use as is + value="$value_trimmed" + fi + + # For specific path keys, ensure they are absolute + case "$key" in + paths_content_dir|paths_output_dir|paths_layouts_dir|paths_static_dir) + if [[ "$value" != /* && -n "$value" ]]; then # If not absolute and not empty + value="$PROJECT_ROOT/$value" + fi + ;; + esac + QSG_CONFIG[$key]="$value" + # _log DEBUG "Loaded global config: $key = $value" + else + if [[ -n "$line" ]]; then # Only log if line is not empty (already handled above) + _log WARNING "Ignoring malformed line $line_num in $CONFIG_FILE: $line" + fi + fi + done < "$CONFIG_FILE" + local read_status=$? + set -e # Re-enable exit on error + _log DEBUG "Exited config parsing loop." + _log DEBUG "Exited config parsing loop. Read status: $read_status. Re-enabled set -e." + + if [[ $read_status -ne 0 && $read_status -ne 1 ]]; then # read returns 1 on EOF, which is fine + _log WARNING "Potential issue reading configuration file. Read command exited with status: $read_status" + fi + + # Validate required configuration + local required_config_keys=( + "paths_content_dir" + "paths_output_dir" + "paths_layouts_dir" + "paths_static_dir" + "site_name" + "site_url" + "site_theme" + ) + local missing_configs=false + + for key in "${required_config_keys[@]}"; do + if [[ -z "${QSG_CONFIG[$key]:-}" ]]; then + _log ERROR "Required configuration '$key' is missing from $CONFIG_FILE." + missing_configs=true + else + # Resolve path-related keys to absolute paths if not already absolute + if [[ "$key" == paths_* ]] && [[ "${QSG_CONFIG[$key]}" != /* ]]; then + QSG_CONFIG[$key]="$PROJECT_ROOT/${QSG_CONFIG[$key]}" + fi + _log DEBUG "Validated config: $key = ${QSG_CONFIG[$key]}" + fi + done + + # Default build options if not set + : ${QSG_CONFIG[build_options_process_drafts]:=false} + : ${QSG_CONFIG[build_options_generate_rss]:=true} + # : ${QSG_CONFIG[build_options_generate_sitemap]:=true} # Example if sitemap is added + + _log DEBUG "build_options_process_drafts set to: ${QSG_CONFIG[build_options_process_drafts]}" + _log DEBUG "build_options_generate_rss set to: ${QSG_CONFIG[build_options_generate_rss]}" + # _log DEBUG "build_options_generate_sitemap set to: ${QSG_CONFIG[build_options_generate_sitemap]}" + + if [[ "$missing_configs" == true ]]; then + _log ERROR "One or more required configurations are missing. Please check $CONFIG_FILE." + exit 1 + fi + + _log INFO "Configuration loaded successfully." + return 0 +} + +# --- Dependency Checking --- +_check_dependencies() { + _log INFO "Checking dependencies..." + if ! command -v pandoc &> /dev/null; then + _log ERROR "Pandoc is not installed. Please install pandoc to continue." + _log ERROR "See: https://pandoc.org/installing.html" + exit 1 + fi + _log INFO "All critical dependencies found." +} + +# --- Core Functions --- +_clean_output_dir() { + _log INFO "Cleaning output directory: ${QSG_CONFIG[paths_output_dir]}" + # rm -rf "${QSG_CONFIG[paths_output_dir]}"/* # Be careful with this! + # For now, just ensure it exists + mkdir -p "${QSG_CONFIG[paths_output_dir]}" +} + +_copy_static_files() { + local root_static_source_dir_rel="${QSG_CONFIG[paths_static_dir]:-}" # Relative path like "static" + local root_static_source_dir_abs="" + if [[ -n "$root_static_source_dir_rel" ]]; then + root_static_source_dir_abs="$PROJECT_ROOT/$root_static_source_dir_rel" + fi + + local theme_static_source_dir_abs="${QSG_CONFIG[theme_static_source_dir]:-}" # Absolute path, set in main + + # Target directory for all static files in the output. + local output_dir_from_config_csf="${QSG_CONFIG[paths_output_dir]:-output}" # Default to "output" if not set in _copy_static_files + local base_output_dir_abs_csf="" + if [[ "$output_dir_from_config_csf" == /* ]]; then + base_output_dir_abs_csf="$output_dir_from_config_csf" + else + base_output_dir_abs_csf="$PROJECT_ROOT/$output_dir_from_config_csf" + fi + local overall_target_static_dir_abs="$base_output_dir_abs_csf/static" + + _log INFO "Preparing to copy static files to $overall_target_static_dir_abs" + if ! mkdir -p "$overall_target_static_dir_abs"; then + _log ERROR "Failed to create target static directory: $overall_target_static_dir_abs" + return 1 + fi + + local rsync_common_opts=(-a --delete --exclude '.gitkeep' --exclude '.DS_Store') + local cp_common_opts=(-R -p) # -p to preserve mode, ownership, timestamps + local copy_cmd="" + local cmd_opts=() + + if command -v rsync &> /dev/null; then + copy_cmd="rsync" + cmd_opts=("${rsync_common_opts[@]}") + else + copy_cmd="cp" + # For cp, source needs trailing /., target needs to exist or be a dir name + cmd_opts=("${cp_common_opts[@]}") + _log WARNING "rsync not found. Falling back to 'cp'. Some features like --delete might not be available." + fi + + local root_copy_ok=true + local theme_copy_ok=true + local any_files_copied=false + + # 1. Copy from root static directory (if it exists) + if [[ -n "$root_static_source_dir_abs" && -d "$root_static_source_dir_abs" ]]; then + _log DEBUG "Copying from root static directory: $root_static_source_dir_abs using $copy_cmd" + local source_path_for_cmd="$root_static_source_dir_abs/" + local target_path_for_cmd="$overall_target_static_dir_abs/" + if [[ "$copy_cmd" == "cp" ]]; then source_path_for_cmd="$root_static_source_dir_abs/."; fi + + if "$copy_cmd" "${cmd_opts[@]}" "$source_path_for_cmd" "$target_path_for_cmd"; then + _log DEBUG "Successfully copied files from $root_static_source_dir_abs" + any_files_copied=true + else + _log ERROR "Failed to copy files from $root_static_source_dir_abs to $overall_target_static_dir_abs using $copy_cmd" + root_copy_ok=false + fi + else + _log DEBUG "Root static directory '$root_static_source_dir_abs' not found or not specified. Skipping." + fi + + # 2. Copy from theme static directory (if it exists), overwriting root static files + if [[ -n "$theme_static_source_dir_abs" && -d "$theme_static_source_dir_abs" ]]; then + _log DEBUG "Copying from theme static directory (will overwrite): $theme_static_source_dir_abs using $copy_cmd" + local source_path_for_cmd="$theme_static_source_dir_abs/" + local target_path_for_cmd="$overall_target_static_dir_abs/" + if [[ "$copy_cmd" == "cp" ]]; then source_path_for_cmd="$theme_static_source_dir_abs/."; fi + + if "$copy_cmd" "${cmd_opts[@]}" "$source_path_for_cmd" "$target_path_for_cmd"; then + _log DEBUG "Successfully copied files from $theme_static_source_dir_abs" + any_files_copied=true + else + _log ERROR "Failed to copy files from $theme_static_source_dir_abs to $overall_target_static_dir_abs using $copy_cmd" + theme_copy_ok=false + fi + else + _log DEBUG "Theme static source directory '$theme_static_source_dir_abs' not found or not specified. Skipping." + fi + + if ! $root_copy_ok || ! $theme_copy_ok; then + _log ERROR "One or more static file copy operations failed." + return 1 + fi + + if ! $any_files_copied; then + _log INFO "No static files found to copy (neither root nor theme static directories were specified, existed, or contained files)." + else + _log INFO "Static files copied successfully to $overall_target_static_dir_abs" + fi + + return 0 +} + +_generate_index_page() { + _log DEBUG "Entered _generate_index_page" + + local temp_yaml_file + temp_yaml_file=$(mktemp -t qsgen3_index_yaml.XXXXXX) + if [[ $? -ne 0 || -z "$temp_yaml_file" || ! -f "$temp_yaml_file" ]]; then + _log ERROR "Failed to create temporary file for index YAML. Exiting." + return 1 + fi + trap "_log DEBUG \"Cleaning up temporary index YAML file: ${temp_yaml_file}\"; rm -f \"${temp_yaml_file}\"; trap - EXIT INT TERM HUP" EXIT INT TERM HUP + _log DEBUG "Created temporary YAML file for index: $temp_yaml_file" + _log INFO "Generating index page..." + local content_posts_dir="${QSG_CONFIG[paths_content_dir]}/posts" + local output_index_file="${QSG_CONFIG[paths_output_dir]}/index.html" + local layout_index_file="${QSG_CONFIG[paths_layouts_dir]}/index.html" + + if [[ ! -d "$content_posts_dir" ]]; then + _log WARNING "Posts directory not found: $content_posts_dir. Skipping index page generation." + return 0 + fi + + if [[ ! -f "$layout_index_file" ]]; then + _log ERROR "Index layout file not found: $layout_index_file. Cannot generate index page." + return 1 + fi + + local post_details=() + + # Collect post details + # This is a simplified approach. Robust YAML parsing is complex in pure shell. + # We'll extract title, date, and construct a URL. + # We assume date format is YYYY-MM-DD for sorting. + # A 'summary' field in frontmatter would also be good. + + local md_file + for md_file in $(find "$content_posts_dir" -name '*.md' -type f); do + _log DEBUG "Processing metadata for $md_file" + + # Extract frontmatter (lines between --- and ---) + # Use sed to print lines between the first '---' and the next '---' + # Then grep for title, date, summary, draft + local frontmatter=$(sed -n '/^---$/,/^---$/{/^---$/d;p;}' "$md_file") + + if [[ -z "$frontmatter" ]]; then + _log WARNING "No YAML frontmatter found or frontmatter is empty in $md_file. Skipping." + continue + fi + + # Extract title, date, summary, and draft from frontmatter + # Basic extraction: assumes 'key: value' format, strips quotes + local title=$(echo "$frontmatter" | grep -m1 -iE '^title:' | sed -E 's/^title:[[:space:]]*//i; s/^["\x27](.*)["\x27]$/\1/') + local date=$(echo "$frontmatter" | grep -m1 -iE '^date:' | sed -E 's/^date:[[:space:]]*//i; s/^["\x27](.*)["\x27]$/\1/') + local summary=$(echo "$frontmatter" | grep -m1 -iE '^summary:' | sed -E 's/^summary:[[:space:]]*//i; s/^["\x27](.*)["\x27]$/\1/') + local draft=$(echo "$frontmatter" | grep -m1 -iE '^draft:' | sed -E 's/^draft:[[:space:]]*//i' | tr '[:upper:]' '[:lower:]') + + _log DEBUG "Extracted Title: [$title], Date: [$date], Summary: [$summary], Draft: [$draft] for $md_file" + + if [[ "$draft" == "true" && "${QSG_CONFIG[build_options_process_drafts]}" != "true" ]]; then + _log DEBUG "Skipping draft post for index: $md_file (draft: $draft)" + continue + fi + + if [[ -z "$title" ]]; then + _log WARNING "Post '$md_file' is missing a title in frontmatter. Skipping for index." + continue + fi + + # Construct URL relative to site root + local relative_path="${md_file#${QSG_CONFIG[paths_content_dir]}/}" # e.g., posts/hello-world.md + local post_url="${QSG_CONFIG[site_url]}/${relative_path%.md}.html" + + # Use date for sorting, default to a very old date if not found + local sort_key="${date:-0000-00-00}" + post_details+=("${sort_key}|${title}|${post_url}|${date:-N/A}|${summary:-}") + done + + # Sort posts by date (descending) + # IFS=$'\n' sorted_posts=($(printf "%s\n" "${post_details[@]}" | sort -t'|' -k1,1r -k2,2)) + # Using a loop for sorting to avoid IFS issues and handle empty array better + local sorted_posts=() + if [[ ${#post_details[@]} -gt 0 ]]; then + OIFS="$IFS" + IFS=$'\n' + sorted_posts=($(printf "%s\n" "${post_details[@]}" | sort -t'|' -k1,1r)) + IFS="$OIFS" + fi + + # Generate comprehensive YAML string including site-wide metadata and posts + local site_title_for_yaml="${QSG_CONFIG[site_title]:-${QSG_CONFIG[site_name]}}" + + # Helper for YAML string escaping (handles backslashes and double quotes) + local yaml_lines=() + yaml_lines+=( "$(printf 'current_year: "%s"' "$(date +%Y)")" ) + yaml_lines+=( "$(printf 'site_name: "%s"' "$(_yaml_escape_val "${QSG_CONFIG[site_name]}")")" ) + yaml_lines+=( "$(printf 'site_tagline: "%s"' "$(_yaml_escape_val "${QSG_CONFIG[site_tagline]}")")" ) + yaml_lines+=( "$(printf 'site_url: "%s"' "$(_yaml_escape_val "${QSG_CONFIG[site_url]}")")" ) + yaml_lines+=( "$(printf 'title: "%s"' "$(_yaml_escape_val "$site_title_for_yaml")")" ) + yaml_lines+=( "$(printf 'posts:')" ) + + if [[ ${#sorted_posts[@]} -eq 0 ]]; then + _log DEBUG "No posts found to add to index YAML." + yaml_lines+=( "$(printf ' [] # Explicitly empty list')" ) + else + for detail_line in "${sorted_posts[@]}"; do + # Original detail_line format: "${sort_key}|${title}|${post_url}|${date:-N/A}|${summary:-}" + # Using Zsh specific split for robustness with special characters in fields + local parts_array=( ${(s[|])detail_line} ) + + local post_title_val="${parts_array[2]}" + local post_url_val="${parts_array[3]}" + local post_date_val="${parts_array[4]}" + local post_summary_val="${parts_array[5]}" + + yaml_lines+=( "$(printf ' - title: "%s"' "$(_yaml_escape_val "$post_title_val")")" ) + yaml_lines+=( "$(printf ' url: "%s"' "$(_yaml_escape_val "$post_url_val")")" ) + yaml_lines+=( "$(printf ' date: "%s"' "$(_yaml_escape_val "$post_date_val")")" ) + yaml_lines+=( "$(printf ' summary: "%s"' "$(_yaml_escape_val "$post_summary_val")")" ) + done + fi + + local temp_yaml_content + temp_yaml_content="$(IFS=$'\n'; echo "${yaml_lines[*]}")" + temp_yaml_content+=$'\n' # Ensure a final trailing newline for the whole block + _log DEBUG "Generated comprehensive YAML for index (first 300 chars):\n${temp_yaml_content:0:300}..." + + # Write YAML to temporary file + _log DEBUG "Full comprehensive YAML for index before writing to file (raw, first 1000 chars to avoid excessive logging):\n${temp_yaml_content:0:1000}" + + if ! printf '%s' "$temp_yaml_content" > "$temp_yaml_file"; then + _log ERROR "Failed to write comprehensive YAML to temporary file: $temp_yaml_file" + return 1 # Trap will clean up temp_yaml_file + fi + _log DEBUG "Successfully wrote comprehensive YAML to $temp_yaml_file" + + + # Theme CSS handling for index page + local source_theme_css_file="${QSG_CONFIG[paths_layouts_dir]}/css/${QSG_CONFIG[site_theme]}.css" + local target_theme_css_dir="${QSG_CONFIG[paths_output_dir]}/css" + local target_theme_css_file="$target_theme_css_dir/theme.css" + local pandoc_css_path_for_index="/css/theme.css" + + _log DEBUG "In _generate_index_page: PROJECT_ROOT='$PROJECT_ROOT'" + local pandoc_cmd_index=( + pandoc + "--metadata-file" "$temp_yaml_file" + ) + + # Add CSS if specified (pandoc_css_path_arg is derived in main) + if [[ -n "${QSG_CONFIG[pandoc_css_path_arg]:-}" ]]; then + pandoc_cmd_index+=("--css" "${QSG_CONFIG[pandoc_css_path_arg]}") + _log DEBUG "Using CSS for index: ${QSG_CONFIG[pandoc_css_path_arg]}" + else + _log DEBUG "No CSS specified for index page." + fi + + # Add remaining Pandoc options for index page + pandoc_cmd_index+=( + "--template=${layout_index_file}" + "--output=${output_index_file}" + "--standalone" + ) + + _log INFO "Generating $output_index_file using template $layout_index_file with YAML from $temp_yaml_file" + + _log DEBUG "Pandoc command for index page will be constructed as follows:" + _log DEBUG "Base command: pandoc" + _log DEBUG "CSS arg if theme applies: --css ${pandoc_css_path_for_index}" + _log DEBUG "Metadata file arg: --metadata-file ${temp_yaml_file}" + _log DEBUG "Template arg: --template=${layout_index_file}" + _log DEBUG "Output arg: --output=${output_index_file}" + _log DEBUG "Other args: --standalone" + _log DEBUG "Final pandoc_cmd_index array: ${(q+)pandoc_cmd_index}" + + local pandoc_run_stderr_file + pandoc_run_stderr_file=$(mktemp -t pandoc_stderr_index.XXXXXX) + if [[ -z "$pandoc_run_stderr_file" || ! -e "$pandoc_run_stderr_file" ]]; then # -e to check existence, could be pipe not file + _log CRITICAL "Failed to create temporary file for Pandoc stderr (index). mktemp failed." + # Attempt to clean up the main temp YAML file before exiting, if it was created. + if [[ -n "$temp_yaml_file" && -f "$temp_yaml_file" ]]; then + _log DEBUG "Cleaning up temporary index YAML file ($temp_yaml_file) due to mktemp failure for stderr file." + rm -f "$temp_yaml_file" + fi + return 1 + fi + # This temp stderr file is short-lived, trap for it isn't strictly necessary if cleaned up reliably. + + local pandoc_exit_code=0 + # Execute Pandoc, redirecting its stderr to the temp file + _log DEBUG "Executing Pandoc command for index page with set -x..." + set -x # Enable command tracing + if "${pandoc_cmd_index[@]}" 2> "$pandoc_run_stderr_file"; then + pandoc_exec_status=0 + else + pandoc_exec_status=$? + fi + set +x # Disable command tracing + _log DEBUG "Pandoc execution finished. Original exit status from Pandoc: $pandoc_exec_status" + pandoc_exit_code=$pandoc_exec_status # Use the captured status + + local stderr_content="" + if [[ -s "$pandoc_run_stderr_file" ]]; then + stderr_content=$(<"$pandoc_run_stderr_file") + fi + rm -f "$pandoc_run_stderr_file" + + if [[ $pandoc_exit_code -ne 0 ]]; then + _log ERROR "Pandoc command failed for '$output_index_file' with exit code: $pandoc_exit_code." + if [[ -n "$stderr_content" ]]; then + _log ERROR "Pandoc stderr:\n$stderr_content" + fi + _log ERROR "YAML content passed to Pandoc was in: $temp_yaml_file" + _log ERROR "YAML content dump (first 500 chars):\n$(head -c 500 "$temp_yaml_file" 2>/dev/null || echo 'Failed to read YAML dump')" + return $pandoc_exit_code # Return Pandoc's non-zero exit code + elif [[ -n "$stderr_content" ]]; then + # Pandoc exited 0 but wrote to stderr. Check for known fatal error patterns. + if echo "$stderr_content" | grep -q -iE 'YAML parse exception|template error|could not find|error reading file'; then + _log ERROR "Pandoc reported a critical error for '$output_index_file' (exit code 0). Treating as failure." + _log ERROR "Pandoc stderr:\n$stderr_content" + _log ERROR "YAML content passed to Pandoc was in: $temp_yaml_file" + _log ERROR "YAML content dump (first 500 chars):\n$(head -c 500 "$temp_yaml_file" 2>/dev/null || echo 'Failed to read YAML dump')" + return 1 # Force a failure status + else + _log WARNING "Pandoc succeeded for '$output_index_file' (exit code 0) but produced stderr (non-critical):\n$stderr_content" + # Continue, as it might be a non-fatal warning from Pandoc. + fi + else + _log DEBUG "Successfully generated $output_index_file" + fi + + return 0 # If we reached here, it's success or a warning we decided to ignore. +} + +_process_markdown_files() { + _log DEBUG "Entered _process_markdown_files" + _log INFO "Processing Markdown files..." + + local content_dir="${QSG_CONFIG[paths_content_dir]}" + local output_dir="${QSG_CONFIG[paths_output_dir]}" + local layouts_dir="${QSG_CONFIG[paths_layouts_dir]}" + local default_post_template="$layouts_dir/post.html" + local default_page_template="$layouts_dir/page.html" + + if [[ ! -f "$default_post_template" ]]; then + _log WARNING "Default post template not found: $default_post_template. Posts may not render correctly." + fi + if [[ ! -f "$default_page_template" ]]; then + _log WARNING "Default page template not found: $default_page_template. Pages may not render correctly." + fi + + # Find all markdown files and process them + while IFS= read -r source_file; do + if [[ -z "$source_file" ]]; then continue; fi + _log DEBUG "Processing Markdown file: $source_file" + + local relative_path="${source_file#$content_dir/}" + if [[ "$content_dir" == "$source_file" ]]; then + relative_path=$(basename "$source_file") + elif [[ "$content_dir" == "/" && "$source_file" == /* ]]; then + relative_path="${source_file#/}" + elif [[ "$content_dir" == "." && "$source_file" == ./* ]]; then + relative_path="${source_file#./}" + fi + + local output_file_html_part="${relative_path%.md}.html" + local output_file_abs="$output_dir/$output_file_html_part" + + mkdir -p "$(dirname "$output_file_abs")" + + local frontmatter=$(sed -n '/^---$/,/^---$/{/^---$/d;p;}' "$source_file") + local title=$(echo "$frontmatter" | grep -m1 -iE '^title:' | sed -E 's/^title:[[:space:]]*//i; s/^["\x27](.*)["\x27]$/\1/') + local date=$(echo "$frontmatter" | grep -m1 -iE '^date:' | sed -E 's/^date:[[:space:]]*//i; s/^["\x27](.*)["\x27]$/\1/') + local draft=$(echo "$frontmatter" | grep -m1 -iE '^draft:' | sed -E 's/^draft:[[:space:]]*//i' | tr '[:upper:]' '[:lower:]') + local custom_layout_fm=$(echo "$frontmatter" | grep -m1 -iE '^layout:' | sed -E 's/^layout:[[:space:]]*//i; s/^["\x27](.*)["\x27]$/\1/') + + if [[ "$draft" == "true" && "${QSG_CONFIG[build_options_process_drafts]}" != "true" ]]; then + _log DEBUG "Skipping draft file: $source_file" + continue + fi + + if [[ -z "$title" ]]; then + _log WARNING "Markdown file '$source_file' is missing a title. Using filename as fallback." + local fn_no_ext=$(basename "$source_file") + title="${fn_no_ext%.md}" + fi + + local template_to_use="" + if [[ -n "$custom_layout_fm" ]]; then + if [[ "$custom_layout_fm" != *.html && "$custom_layout_fm" != *.xml ]]; then custom_layout_fm+=".html"; fi + template_to_use="$layouts_dir/$custom_layout_fm" + if [[ ! -f "$template_to_use" ]]; then + _log WARNING "Custom layout '$custom_layout_fm' from '$source_file' not found at '$template_to_use'. Falling back." + template_to_use="" + fi + fi + + if [[ -z "$template_to_use" ]]; then + if [[ "$relative_path" == posts/* && -f "$default_post_template" ]]; then + template_to_use="$default_post_template" + elif [[ -f "$default_page_template" ]]; then + template_to_use="$default_page_template" + elif [[ -f "$default_post_template" ]]; then + _log DEBUG "Default page template missing, falling back to default post template for $source_file" + template_to_use="$default_post_template" + else + _log ERROR "No suitable default template found (post.html or page.html) for '$source_file'. Skipping." + continue + fi + fi + + if [[ ! -f "$template_to_use" ]]; then + _log ERROR "Template '$template_to_use' for '$source_file' is not a valid file. Skipping." + continue + fi + + local pandoc_cmd=( + pandoc "$source_file" + --to html5 + --output "$output_file_abs" + --standalone + --template "$template_to_use" + ) + + pandoc_cmd+=(--metadata "title=$title") + if [[ -n "$date" ]]; then + pandoc_cmd+=(--metadata "date=$date") + fi + for key val in "${(@kv)QSG_CONFIG}"; do + if [[ "$key" == site_* || "$key" == author_* ]]; then + pandoc_cmd+=(--metadata "$key=$val") + fi + done + pandoc_cmd+=(--metadata "current_year=$(date +%Y)") + + # Add CSS if specified (pandoc_css_path_arg is derived in main) + if [[ -n "${QSG_CONFIG[pandoc_css_path_arg]:-}" ]]; then + pandoc_cmd+=("--css" "${QSG_CONFIG[pandoc_css_path_arg]}") + _log DEBUG "Using CSS for post $source_file: ${QSG_CONFIG[pandoc_css_path_arg]}" + else + _log DEBUG "No CSS specified for post $source_file." + fi + + _log INFO "Generating $output_file_abs from $source_file using template $template_to_use" + if ! "${pandoc_cmd[@]}"; then + _log ERROR "Pandoc failed for $source_file. Command was: ${pandoc_cmd[*]}" + else + _log DEBUG "Successfully generated $output_file_abs" + fi + done < <(find "$content_dir" -type f -name '*.md' -print0 | xargs -0 -r realpath) + + _log INFO "Finished processing Markdown files." + return 0 +} + +_generate_rss_feed() { + _log DEBUG "Entered _generate_rss_feed" + + local temp_rss_yaml_file + temp_rss_yaml_file=$(mktemp -t qsgen3_rss_yaml.XXXXXX) + if [[ $? -ne 0 || -z "$temp_rss_yaml_file" || ! -f "$temp_rss_yaml_file" ]]; then + _log ERROR "Failed to create temporary file for RSS YAML. Exiting." + return 1 + fi + trap "_log DEBUG \"Cleaning up temporary RSS YAML file: ${temp_rss_yaml_file}\"; rm -f \"${temp_rss_yaml_file}\"; trap - EXIT INT TERM HUP" EXIT INT TERM HUP + _log DEBUG "Created temporary YAML file for RSS: $temp_rss_yaml_file" + if [[ "${QSG_CONFIG[build_options_generate_rss]}" != "true" ]]; then + _log INFO "RSS feed generation is disabled in configuration. Skipping." + return 0 + fi + + _log INFO "Generating RSS feed..." + local content_posts_dir="${QSG_CONFIG[paths_content_dir]}/posts" + local output_rss_file="${QSG_CONFIG[paths_output_dir]}/rss.xml" + local layout_rss_file="${QSG_CONFIG[paths_layouts_dir]}/rss.xml" + + if [[ ! -d "$content_posts_dir" ]]; then + _log WARNING "Posts directory for RSS ('$content_posts_dir') not found. Cannot generate RSS feed." + return 0 + fi + + if [[ ! -f "$layout_rss_file" ]]; then + _log ERROR "RSS layout file not found: $layout_rss_file. Cannot generate RSS feed." + return 1 + fi + + local post_details=() + local md_file + # Use find with xargs and realpath for robust path handling, then loop + while IFS= read -r md_file; do + if [[ -z "$md_file" ]]; then continue; fi + _log DEBUG "Processing $md_file for RSS feed." + + local frontmatter=$(sed -n '/^---$/,/^---$/{/^---$/d;p;}' "$md_file") + if [[ -z "$frontmatter" ]]; then + _log DEBUG "No YAML frontmatter found in $md_file for RSS. Skipping." + continue + fi + + local title=$(echo "$frontmatter" | grep -m1 -iE '^title:' | sed -E 's/^title:[[:space:]]*//i; s/^["\x27](.*)["\x27]$/\1/') + local date_iso=$(echo "$frontmatter" | grep -m1 -iE '^date:' | sed -E 's/^date:[[:space:]]*//i; s/^["\x27](.*)["\x27]$/\1/') + local summary=$(echo "$frontmatter" | grep -m1 -iE '^summary:' | sed -E 's/^summary:[[:space:]]*//i; s/^["\x27](.*)["\x27]$/\1/') + local draft=$(echo "$frontmatter" | grep -m1 -iE '^draft:' | sed -E 's/^draft:[[:space:]]*//i' | tr '[:upper:]' '[:lower:]') + + if [[ "$draft" == "true" && "${QSG_CONFIG[build_options_process_drafts]}" != "true" ]]; then + _log DEBUG "Skipping draft post for RSS: $md_file" + continue + fi + if [[ -z "$title" ]]; then + _log WARNING "Post '$md_file' is missing a title. Skipping for RSS." + continue + fi + if [[ -z "$date_iso" ]]; then + _log WARNING "Post '$md_file' is missing a date. Skipping for RSS." + continue + fi + + local relative_path_from_content_root="${md_file#${QSG_CONFIG[paths_content_dir]}/}" + local post_url="${QSG_CONFIG[site_url]}/${relative_path_from_content_root%.md}.html" + + local rfc822_date + # Attempt to convert date to RFC-822 format for RSS + # GNU date syntax for -d and -R + if rfc822_date=$(date -d "$date_iso" +'%a, %d %b %Y %H:%M:%S %z' 2>/dev/null); then + _log DEBUG "Converted date '$date_iso' to RFC-822 '$rfc822_date' for $md_file" + else + _log WARNING "Could not convert date '$date_iso' to RFC-822 for $md_file. Using original." + rfc822_date="$date_iso" # Fallback to original if conversion fails + fi + + local sort_key="${date_iso:-0000-00-00}" # Use ISO date for sorting + post_details+=("${sort_key}|${title}|${post_url}|${rfc822_date}|${summary:-No summary available.}") + done < <(find "$content_posts_dir" -type f -name '*.md' -print0 | xargs -0 -r realpath) + + local sorted_posts=() + if [[ ${#post_details[@]} -gt 0 ]]; then + OIFS="$IFS"; IFS=$'\n' + # Sort by ISO date (first field), descending + sorted_posts=($(printf "%s\n" "${post_details[@]}" | sort -t'|' -k1,1r)) + IFS="$OIFS" + fi + + local yaml_lines=() + local site_title_for_feed="${QSG_CONFIG[site_title]:-${QSG_CONFIG[site_name]}}" + local feed_url="${QSG_CONFIG[site_url]}/rss.xml" + local current_rfc822_date=$(date -R) + + yaml_lines+=( "$(printf 'site_name: "%s"' "$(_yaml_escape_val "${QSG_CONFIG[site_name]}")")" ) + yaml_lines+=( "$(printf 'site_tagline: "%s"' "$(_yaml_escape_val "${QSG_CONFIG[site_tagline]}")")" ) + yaml_lines+=( "$(printf 'site_url: "%s"' "$(_yaml_escape_val "${QSG_CONFIG[site_url]}")")" ) + yaml_lines+=( "$(printf 'feed_url: "%s"' "$(_yaml_escape_val "$feed_url")")" ) + yaml_lines+=( "$(printf 'feed_title: "%s"' "$(_yaml_escape_val "$site_title_for_feed Feed")")" ) # For in RSS + yaml_lines+=( "$(printf 'current_rfc822_date: "%s"' "$(_yaml_escape_val "$current_rfc822_date")")" ) # For <pubDate> of the feed itself + yaml_lines+=( "$(printf 'current_year: "%s"' "$(date +%Y)")" ) + yaml_lines+=( "$(printf 'pagetitle: "%s"' "$(_yaml_escape_val "$site_title_for_feed Feed")")" ) # For Pandoc's HTML writer + + yaml_lines+=( "$(printf 'posts:')" ) + if [[ ${#sorted_posts[@]} -eq 0 ]]; then + _log INFO "No posts found to include in RSS feed after filtering." + yaml_lines+=( "$(printf ' [] # Explicitly empty list')" ) + else + for detail_line in "${sorted_posts[@]}"; do + local parts=( ${(s[|])detail_line} ) # Zsh specific split + local p_title="${parts[2]:-}" + local p_url="${parts[3]:-}" + local p_date_rfc822="${parts[4]:-}" + local p_summary="${parts[5]:-}" + + yaml_lines+=( "$(printf ' - post_title: "%s"' "$(_yaml_escape_val "$p_title")")" ) + yaml_lines+=( "$(printf ' post_url: "%s"' "$(_yaml_escape_val "$p_url")")" ) + yaml_lines+=( "$(printf ' post_date_rfc822: "%s"' "$(_yaml_escape_val "$p_date_rfc822")")" ) + yaml_lines+=( "$(printf ' post_summary: "%s"' "$(_yaml_escape_val "$p_summary")")" ) + # Add other fields like guid if needed, e.g., using post_url as guid + yaml_lines+=( "$(printf ' post_guid: "%s"' "$(_yaml_escape_val "$p_url")")" ) + done + fi + + local temp_yaml_content + temp_yaml_content="$(IFS=$'\n'; echo "${yaml_lines[*]}")" + temp_yaml_content+=$'\n' # Ensure a final trailing newline + + _log DEBUG "Generated comprehensive YAML for RSS (first 300 chars):\n${temp_yaml_content:0:300}..." + + if ! printf '%s' "$temp_yaml_content" > "$temp_rss_yaml_file"; then + _log ERROR "Failed to write comprehensive RSS YAML to temporary file: $temp_rss_yaml_file" + return 1 + fi + _log DEBUG "Successfully wrote comprehensive RSS YAML to $temp_rss_yaml_file" + + local pandoc_cmd_rss=( + pandoc + "--metadata-file" "$temp_rss_yaml_file" + "--template=${layout_rss_file}" + "--output=${output_rss_file}" + "--to" "html5" # Use HTML5 writer for custom XML template processing + "--standalone" + ) + _log INFO "Generating $output_rss_file using template $layout_rss_file with YAML from $temp_rss_yaml_file" + + local pandoc_run_rss_stderr_file + pandoc_run_rss_stderr_file=$(mktemp -t pandoc_stderr_rss.XXXXXX) + if [[ -z "$pandoc_run_rss_stderr_file" || ! -e "$pandoc_run_rss_stderr_file" ]]; then + _log CRITICAL "Failed to create temporary file for Pandoc stderr (RSS). mktemp failed." + if [[ -n "$temp_rss_yaml_file" && -f "$temp_rss_yaml_file" ]]; then + _log DEBUG "Cleaning up temporary RSS YAML file ($temp_rss_yaml_file) due to mktemp failure for stderr file." + rm -f "$temp_rss_yaml_file" + fi + return 1 + fi + + local pandoc_exit_code_rss=0 + # Provide a dummy input to Pandoc since content is from metadata, redirect stderr + local pandoc_exec_status_rss + if echo "<!-- RSS feed generated by qsgen3 -->" | "${pandoc_cmd_rss[@]}" 2> "$pandoc_run_rss_stderr_file"; then + pandoc_exec_status_rss=0 + else + pandoc_exec_status_rss=$? + fi + pandoc_exit_code_rss=$pandoc_exec_status_rss + + local stderr_content_rss="" + if [[ -s "$pandoc_run_rss_stderr_file" ]]; then + stderr_content_rss=$(<"$pandoc_run_rss_stderr_file") + fi + rm -f "$pandoc_run_rss_stderr_file" + + if [[ $pandoc_exit_code_rss -ne 0 ]]; then + _log ERROR "Pandoc command failed for '$output_rss_file' with exit code: $pandoc_exit_code_rss." + if [[ -n "$stderr_content_rss" ]]; then + _log ERROR "Pandoc stderr:\n$stderr_content_rss" + fi + _log ERROR "YAML content passed to Pandoc for RSS was in: $temp_rss_yaml_file" + _log ERROR "RSS YAML content dump (first 500 chars):\n$(head -c 500 "$temp_rss_yaml_file" 2>/dev/null || echo 'Failed to read RSS YAML dump')" + return $pandoc_exit_code_rss # Return Pandoc's non-zero exit code + elif [[ -n "$stderr_content_rss" ]]; then + if echo "$stderr_content_rss" | grep -q -iE 'YAML parse exception|template error|could not find|error reading file'; then + _log ERROR "Pandoc reported a critical error for '$output_rss_file' (exit code 0). Treating as failure." + _log ERROR "Pandoc stderr:\n$stderr_content_rss" + _log ERROR "YAML content passed to Pandoc for RSS was in: $temp_rss_yaml_file" + _log ERROR "RSS YAML content dump (first 500 chars):\n$(head -c 500 "$temp_rss_yaml_file" 2>/dev/null || echo 'Failed to read RSS YAML dump')" + return 1 # Force a failure status + else + _log WARNING "Pandoc succeeded for '$output_rss_file' (exit code 0) but produced stderr (non-critical):\n$stderr_content_rss" + fi + else + _log DEBUG "Successfully generated $output_rss_file" + fi + + return 0 # If we reached here, it's success or a warning we decided to ignore. +} + +main() { + local custom_config_file_arg="" + + # Option parsing + while [[ $# -gt 0 ]]; do + case "$1" in + -h|--help) + _usage + ;; + -V|--version) + echo "$QSGEN_NAME Version: $VERSION" + exit 0 + ;; + -c|--config) + if [[ -n "$2" ]]; then + custom_config_file_arg="$2" + shift 2 + else + _log ERROR "Option --config requires an argument." + _usage # Will exit + fi + ;; + --) + shift + break + ;; + -*) + _log ERROR "Unknown option: $1" + _usage # Will exit + ;; + *) + break + ;; + esac + done + + # Resolve CONFIG_FILE path + # PROJECT_ROOT is already set globally to $PWD + if [[ -n "$custom_config_file_arg" ]]; then + if [[ "$custom_config_file_arg" == /* ]]; then # Absolute path + CONFIG_FILE="$custom_config_file_arg" + else # Relative path, resolve against PROJECT_ROOT + CONFIG_FILE="$PROJECT_ROOT/$custom_config_file_arg" + fi + else + # Use default CONFIG_FILE_NAME in PROJECT_ROOT + CONFIG_FILE="$PROJECT_ROOT/$CONFIG_FILE_NAME" + fi + + _log INFO "Using Project Root: $PROJECT_ROOT" + _log INFO "Effective Configuration File: $CONFIG_FILE" + + _check_dependencies + # set -x # Enable command tracing (use external zsh -x if needed) + _load_config + + # --- Theme Configuration --- + _log DEBUG "Processing theme configuration..." + local theme_name="${QSG_CONFIG[site_theme]:-}" + QSG_CONFIG[theme_static_source_dir]="" # Initialize. Source for theme's static files. + # QSG_CONFIG[paths_layouts_dir] is loaded from site.conf. It will be overridden if theme provides layouts. + # QSG_CONFIG[paths_static_dir] is loaded from site.conf (e.g. "static"). This is the root static dir. + + if [[ -n "$theme_name" ]]; then + _log INFO "Site theme specified: '$theme_name'" + local theme_base_path="$PROJECT_ROOT/themes/$theme_name" + + if [[ ! -d "$theme_base_path" ]]; then + _log WARNING "Theme directory '$theme_base_path' not found for theme '$theme_name'. Theme will not be applied." + else + _log DEBUG "Theme directory found: '$theme_base_path'" + + # 1. Theme Layouts: Override paths_layouts_dir if theme provides layouts + local theme_layouts_path="$theme_base_path/layouts" + if [[ -d "$theme_layouts_path" ]]; then + _log INFO "Using layouts from theme '$theme_name': $theme_layouts_path" + QSG_CONFIG[paths_layouts_dir]="$theme_layouts_path" # This now points to theme layouts + else + _log DEBUG "No 'layouts' directory in theme '$theme_name'. Using layouts from '${QSG_CONFIG[paths_layouts_dir]}'." + fi + + # 2. Theme Static Files Source: Set theme_static_source_dir + local theme_static_standard_path="$theme_base_path/static" + if [[ -d "$theme_static_standard_path" ]]; then + _log INFO "Theme '$theme_name' provides static files from standard path: $theme_static_standard_path" + QSG_CONFIG[theme_static_source_dir]="$theme_static_standard_path" + elif [[ -d "$theme_base_path" ]]; then + # If themes/theme_name/static doesn't exist, + # check if themes/theme_name itself can serve as a base for static assets (e.g. themes/theme_name/css) + _log INFO "Theme '$theme_name' provides static files from theme base path: $theme_base_path" + QSG_CONFIG[theme_static_source_dir]="$theme_base_path" + else + _log DEBUG "No 'static' directory found at '$theme_static_standard_path' and theme base path '$theme_base_path' is not a valid fallback." + # QSG_CONFIG[theme_static_source_dir] remains as initialized (empty) + fi + fi + else + _log DEBUG "No site_theme specified. Using default project paths for layouts and static files." + fi + + + # For debugging: print loaded config + # for key val in "${(@kv)QSG_CONFIG}"; do + # _log DEBUG "Config: $key = $val" + # done + + _clean_output_dir + if [[ $? -ne 0 ]]; then _log ERROR "Cleaning output directory failed."; exit 1; fi + + _copy_static_files + if [[ $? -ne 0 ]]; then _log ERROR "Copying static files failed."; exit 1; fi + + # --- Determine Final CSS path for Pandoc --- (Moved here to check after files are copied) + QSG_CONFIG[pandoc_css_path_arg]="" + local site_css_file_spec="${QSG_CONFIG[site_theme_css_file]:-}" + + if [[ -n "$site_css_file_spec" ]]; then + # site_css_file_spec is the name/path of the CSS file as specified in site.conf, + # e.g., "minimaltemplate-v1.css" or "css/custom.css". + # This path is relative to what _copy_static_files copies into output/static/. + local css_path_in_output_static="$site_css_file_spec" + local output_dir_from_config_main="${QSG_CONFIG[paths_output_dir]:-output}" # Default to "output" if not set in main + local base_output_dir_abs_main="" + if [[ "$output_dir_from_config_main" == /* ]]; then + base_output_dir_abs_main="$output_dir_from_config_main" + else + base_output_dir_abs_main="$PROJECT_ROOT/$output_dir_from_config_main" + fi + local expected_css_file_abs_path="$base_output_dir_abs_main/static/$css_path_in_output_static" + + if [[ -f "$expected_css_file_abs_path" ]]; then + QSG_CONFIG[pandoc_css_path_arg]="/static/$css_path_in_output_static" + _log DEBUG "Pandoc CSS path set to: ${QSG_CONFIG[pandoc_css_path_arg]} (file exists: $expected_css_file_abs_path)" + else + _log WARNING "Specified 'site_theme_css_file' ('$site_css_file_spec') not found at '$expected_css_file_abs_path' after copying static files. CSS may not be applied via this setting." + fi + fi + + # Fallback to old site_theme_css_path if pandoc_css_path_arg is still empty + if [[ -z "${QSG_CONFIG[pandoc_css_path_arg]}" ]]; then + local old_direct_css_path="${QSG_CONFIG[site_theme_css_path]:-}" + if [[ -n "$old_direct_css_path" ]]; then + if [[ "$old_direct_css_path" == static/* || "$old_direct_css_path" == /static/* ]]; then + QSG_CONFIG[pandoc_css_path_arg]="$(echo "$old_direct_css_path" | sed 's|^/*static|/static|')" + else + QSG_CONFIG[pandoc_css_path_arg]="/$old_direct_css_path" + fi + _log DEBUG "Using fallback 'site_theme_css_path' for Pandoc CSS argument: '${QSG_CONFIG[pandoc_css_path_arg]}'" + _log WARNING "Consider migrating to 'site_theme_css_file' in site.conf for clearer CSS management." + elif [[ -n "$site_css_file_spec" ]]; then + # This case: site_theme_css_file was specified, but the file was not found, and no old_direct_css_path fallback. + _log DEBUG "Specified 'site_theme_css_file' ('$site_css_file_spec') was not found, and no fallback 'site_theme_css_path' provided. No --css flag for Pandoc." + else + # This case: neither site_theme_css_file nor old_direct_css_path were specified. + _log DEBUG "No CSS file specified via 'site_theme_css_file' or 'site_theme_css_path'. No --css flag for Pandoc." + fi + fi + + _process_markdown_files + if [[ $? -ne 0 ]]; then _log ERROR "Processing Markdown files failed."; exit 1; fi + + _generate_index_page + if [[ $? -ne 0 ]]; then _log ERROR "Index page generation failed."; exit 1; fi + + _generate_rss_feed + if [[ $? -ne 0 ]]; then _log ERROR "RSS feed generation failed."; exit 1; fi + + _log INFO "Final state of output directory (${QSG_CONFIG[paths_output_dir]}): +$(ls -R "${QSG_CONFIG[paths_output_dir]}" 2>&1)" + _log SUCCESS "Site generation complete! Output: ${QSG_CONFIG[paths_output_dir]}" + # set +x # Disable command tracing +} + +# Run main function +main "$@" diff --git a/content/posts/hello-world.md b/content/posts/hello-world.md new file mode 100644 index 0000000..efbd9cd --- /dev/null +++ b/content/posts/hello-world.md @@ -0,0 +1,30 @@ +--- +title: "Hello, World!" +date: "2024-05-30" +author: "qsgen3" +draft: false +summary: "My first post using the qsgen3 static site generator." +--- + +Welcome to qsgen3! + +This is your first post. You can edit it or delete it and start writing your own content. + +## Markdown Features + +Qsgen3 supports standard Markdown features, including: + +- Headings +- **Bold** and *italic* text +- Lists: + - Unordered + - Ordered +- [Links](https://example.com) +- `Inline code` + +```bash +# Code blocks +echo "Hello from a code block!" +``` + +Enjoy creating your site! diff --git a/home/stig/projects/qsgen3/output/static/blog_index.tpl b/home/stig/projects/qsgen3/output/static/blog_index.tpl new file mode 100644 index 0000000..aeac9d0 --- /dev/null +++ b/home/stig/projects/qsgen3/output/static/blog_index.tpl @@ -0,0 +1,131 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>#sitename - Blog + + + + + + + + + + + + + + + +
+
+

Blog

+
+
+
#tagline
+
+
+
+
+ +

 

+ + + + + +BODY + + + + + +
+
+ +
+
+

Ponte en contacto conmigo

+
+
+
+
+ +
+ +
+

Lo que hago

+

+Elegir a El Vikingo TI significa
+optar por la tranquilidad, la profesionalidad
+y una calidad de transmisión inigualable. +

+
+ +
+
+ +
+

La manera tradicional

+

Correo Electronico
+Envíeme un mensaje +

+
+ +
+
+ +
+

Redes Sociales

+ + + + + + +
+
+
+
+ +
+ + + +
+ + + + diff --git a/home/stig/projects/qsgen3/output/static/blog_list.tpl b/home/stig/projects/qsgen3/output/static/blog_list.tpl new file mode 100644 index 0000000..034f85c --- /dev/null +++ b/home/stig/projects/qsgen3/output/static/blog_list.tpl @@ -0,0 +1,17 @@ + + + + +
+

BLOGTITLE

+
+ INGRESS +
+
+ BLOGDATE +
+
+
+ + + diff --git a/home/stig/projects/qsgen3/output/static/blogs.tpl b/home/stig/projects/qsgen3/output/static/blogs.tpl new file mode 100644 index 0000000..bdaed33 --- /dev/null +++ b/home/stig/projects/qsgen3/output/static/blogs.tpl @@ -0,0 +1,125 @@ + + + +#sitename - BLOGTITLE + + + + + + + + + + + +
+
+

BLOGTITLE

+
+
+
+CALADAY - CALNDAY - CALMONTH - CALYEAR +
+
+
+ + + +
+
+ +
+
+INGRESS +
+
+BODY +
+
+ +
+
+ + + +
+
+
+

Ponte en contacto conmigo

+
+
+
+
+ +
+ +
+

Lo que hago

+

+Elegir a El Vikingo TI significa
+optar por la tranquilidad, la profesionalidad
+y una calidad de transmisión inigualable. +

+
+ +
+
+ +
+

La manera tradicional

+

Correo Electronico
+Envíeme un mensaje +

+
+ +
+
+ +
+

Redes Sociales

+ + + + + + +
+
+
+
+ +
+ + + +
+ + + + diff --git a/home/stig/projects/qsgen3/output/static/css/jquery-3.5.1.js b/home/stig/projects/qsgen3/output/static/css/jquery-3.5.1.js new file mode 100644 index 0000000..b061403 --- /dev/null +++ b/home/stig/projects/qsgen3/output/static/css/jquery-3.5.1.js @@ -0,0 +1,2 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!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(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),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("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0img{display:inline-block !important;visibility:visible !important;opacity:1 !important;vertical-align:middle !important}h1,h2,h3,h4,h5,h6{font-weight:bold;margin-bottom:10px}h1{font-size:38px;line-height:44px;margin-top:20px}h2{font-size:32px;line-height:36px;margin-top:20px}h3{font-size:24px;line-height:30px;margin-top:20px}h4{font-size:18px;line-height:24px;margin-top:10px}h5{font-size:14px;line-height:20px;margin-top:10px}h6{font-size:12px;line-height:18px;margin-top:10px}p{margin-top:0;margin-bottom:10px}blockquote{margin:0 0 10px 0;padding:10px 20px;border-left:5px solid #E2E2E2;font-size:18px;line-height:22px}figure{margin:0;margin-bottom:10px}figcaption{margin-top:5px;text-align:center}ul,ol{margin-top:0;margin-bottom:10px;padding-left:40px}.w-list-unstyled{padding-left:0;list-style:none}.w-embed:before,.w-embed:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-embed:after{clear:both}.w-video{width:100%;position:relative;padding:0}.w-video iframe,.w-video object,.w-video embed{position:absolute;top:0;left:0;width:100%;height:100%}fieldset{padding:0;margin:0;border:0}button,html input[type="button"],input[type="reset"]{border:0;cursor:pointer;-webkit-appearance:button}.w-form{margin:0 0 15px}.w-form-done{display:none;padding:20px;text-align:center;background-color:#dddddd}.w-form-fail{display:none;margin-top:10px;padding:10px;background-color:#ffdede}label{display:block;margin-bottom:5px;font-weight:bold}.w-input,.w-select{display:block;width:100%;height:38px;padding:8px 12px;margin-bottom:10px;font-size:14px;line-height:1.42857143;color:#333333;vertical-align:middle;background-color:#ffffff;border:1px solid #cccccc}.w-input:-moz-placeholder,.w-select:-moz-placeholder{color:#999}.w-input::-moz-placeholder,.w-select::-moz-placeholder{color:#999;opacity:1}.w-input:-ms-input-placeholder,.w-select:-ms-input-placeholder{color:#999}.w-input::-webkit-input-placeholder,.w-select::-webkit-input-placeholder{color:#999}.w-input:focus,.w-select:focus{border-color:#3898EC;outline:0}.w-input[disabled],.w-select[disabled],.w-input[readonly],.w-select[readonly],fieldset[disabled] .w-input,fieldset[disabled] .w-select{cursor:not-allowed;background-color:#eeeeee}textarea.w-input,textarea.w-select{height:auto}.w-select{background-color:#f3f3f3}.w-select[multiple]{height:auto}.w-form-label{display:inline-block;cursor:pointer;font-weight:normal;margin-bottom:0}.w-radio{display:block;margin-bottom:5px;padding-left:20px}.w-radio:before,.w-radio:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-radio:after{clear:both}.w-radio-input{margin:4px 0 0;margin-top:1px \9;line-height:normal;float:left;margin-left:-20px}.w-radio-input{margin-top:3px}.w-file-upload{display:block;margin-bottom:10px}.w-file-upload-input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-100}.w-file-upload-default,.w-file-upload-uploading,.w-file-upload-success{display:inline-block;color:#333333}.w-file-upload-error{display:block;margin-top:10px}.w-file-upload-default.w-hidden,.w-file-upload-uploading.w-hidden,.w-file-upload-error.w-hidden,.w-file-upload-success.w-hidden{display:none}.w-file-upload-uploading-btn{display:flex;font-size:14px;font-weight:normal;cursor:pointer;margin:0;padding:8px 12px;border:1px solid #cccccc;background-color:#fafafa}.w-file-upload-file{display:flex;flex-grow:1;justify-content:space-between;margin:0;padding:8px 9px 8px 11px;border:1px solid #cccccc;background-color:#fafafa}.w-file-upload-file-name{font-size:14px;font-weight:normal;display:block}.w-file-remove-link{margin-top:3px;margin-left:10px;width:auto;height:auto;padding:3px;display:block;cursor:pointer}.w-icon-file-upload-remove{margin:auto;font-size:10px}.w-file-upload-error-msg{display:inline-block;color:#ea384c;padding:2px 0}.w-file-upload-info{display:inline-block;line-height:38px;padding:0 12px}.w-file-upload-label{display:inline-block;font-size:14px;font-weight:normal;cursor:pointer;margin:0;padding:8px 12px;border:1px solid #cccccc;background-color:#fafafa}.w-icon-file-upload-icon,.w-icon-file-upload-uploading{display:inline-block;margin-right:8px;width:20px}.w-icon-file-upload-uploading{height:20px}.w-container{margin-left:auto;margin-right:auto;max-width:940px}.w-container:before,.w-container:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-container:after{clear:both}.w-container .w-row{margin-left:-10px;margin-right:-10px}.w-row:before,.w-row:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-row:after{clear:both}.w-row .w-row{margin-left:0;margin-right:0}.w-col{position:relative;float:left;width:100%;min-height:1px;padding-left:10px;padding-right:10px}.w-col .w-col{padding-left:0;padding-right:0}.w-col-1{width:8.33333333%}.w-col-2{width:16.66666667%}.w-col-3{width:25%}.w-col-4{width:33.33333333%}.w-col-5{width:41.66666667%}.w-col-6{width:50%}.w-col-7{width:58.33333333%}.w-col-8{width:66.66666667%}.w-col-9{width:75%}.w-col-10{width:83.33333333%}.w-col-11{width:91.66666667%}.w-col-12{width:100%}.w-hidden-main{display:none !important}@media screen and (max-width:991px){.w-container{max-width:728px}.w-hidden-main{display:inherit !important}.w-hidden-medium{display:none !important}.w-col-medium-1{width:8.33333333%}.w-col-medium-2{width:16.66666667%}.w-col-medium-3{width:25%}.w-col-medium-4{width:33.33333333%}.w-col-medium-5{width:41.66666667%}.w-col-medium-6{width:50%}.w-col-medium-7{width:58.33333333%}.w-col-medium-8{width:66.66666667%}.w-col-medium-9{width:75%}.w-col-medium-10{width:83.33333333%}.w-col-medium-11{width:91.66666667%}.w-col-medium-12{width:100%}.w-col-stack{width:100%;left:auto;right:auto}}@media screen and (max-width:767px){.w-hidden-main{display:inherit !important}.w-hidden-medium{display:inherit !important}.w-hidden-small{display:none !important}.w-row,.w-container .w-row{margin-left:0;margin-right:0}.w-col{width:100%;left:auto;right:auto}.w-col-small-1{width:8.33333333%}.w-col-small-2{width:16.66666667%}.w-col-small-3{width:25%}.w-col-small-4{width:33.33333333%}.w-col-small-5{width:41.66666667%}.w-col-small-6{width:50%}.w-col-small-7{width:58.33333333%}.w-col-small-8{width:66.66666667%}.w-col-small-9{width:75%}.w-col-small-10{width:83.33333333%}.w-col-small-11{width:91.66666667%}.w-col-small-12{width:100%}}@media screen and (max-width:479px){.w-container{max-width:none}.w-hidden-main{display:inherit !important}.w-hidden-medium{display:inherit !important}.w-hidden-small{display:inherit !important}.w-hidden-tiny{display:none !important}.w-col{width:100%}.w-col-tiny-1{width:8.33333333%}.w-col-tiny-2{width:16.66666667%}.w-col-tiny-3{width:25%}.w-col-tiny-4{width:33.33333333%}.w-col-tiny-5{width:41.66666667%}.w-col-tiny-6{width:50%}.w-col-tiny-7{width:58.33333333%}.w-col-tiny-8{width:66.66666667%}.w-col-tiny-9{width:75%}.w-col-tiny-10{width:83.33333333%}.w-col-tiny-11{width:91.66666667%}.w-col-tiny-12{width:100%}}.w-widget{position:relative}.w-widget-map{width:100%;height:400px}.w-widget-map label{width:auto;display:inline}.w-widget-map img{max-width:inherit}.w-widget-map .gm-style-iw{text-align:center}.w-widget-map .gm-style-iw>button{display:none !important}.w-widget-twitter{overflow:hidden}.w-widget-twitter-count-shim{display:inline-block;vertical-align:top;position:relative;width:28px;height:20px;text-align:center;background:white;border:#758696 solid 1px;border-radius:3px}.w-widget-twitter-count-shim *{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-widget-twitter-count-shim .w-widget-twitter-count-inner{position:relative;font-size:15px;line-height:12px;text-align:center;color:#999;font-family:serif}.w-widget-twitter-count-shim .w-widget-twitter-count-clear{position:relative;display:block}.w-widget-twitter-count-shim.w--large{width:36px;height:28px}.w-widget-twitter-count-shim.w--large .w-widget-twitter-count-inner{font-size:18px;line-height:18px}.w-widget-twitter-count-shim:not(.w--vertical){margin-left:5px;margin-right:8px}.w-widget-twitter-count-shim:not(.w--vertical).w--large{margin-left:6px}.w-widget-twitter-count-shim:not(.w--vertical):before,.w-widget-twitter-count-shim:not(.w--vertical):after{top:50%;left:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.w-widget-twitter-count-shim:not(.w--vertical):before{border-color:rgba(117,134,150,0);border-right-color:#5d6c7b;border-width:4px;margin-left:-9px;margin-top:-4px}.w-widget-twitter-count-shim:not(.w--vertical).w--large:before{border-width:5px;margin-left:-10px;margin-top:-5px}.w-widget-twitter-count-shim:not(.w--vertical):after{border-color:rgba(255,255,255,0);border-right-color:white;border-width:4px;margin-left:-8px;margin-top:-4px}.w-widget-twitter-count-shim:not(.w--vertical).w--large:after{border-width:5px;margin-left:-9px;margin-top:-5px}.w-widget-twitter-count-shim.w--vertical{width:61px;height:33px;margin-bottom:8px}.w-widget-twitter-count-shim.w--vertical:before,.w-widget-twitter-count-shim.w--vertical:after{top:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.w-widget-twitter-count-shim.w--vertical:before{border-color:rgba(117,134,150,0);border-top-color:#5d6c7b;border-width:5px;margin-left:-5px}.w-widget-twitter-count-shim.w--vertical:after{border-color:rgba(255,255,255,0);border-top-color:white;border-width:4px;margin-left:-4px}.w-widget-twitter-count-shim.w--vertical .w-widget-twitter-count-inner{font-size:18px;line-height:22px}.w-widget-twitter-count-shim.w--vertical.w--large{width:76px}.w-widget-gplus{overflow:hidden}.w-background-video{position:relative;overflow:hidden;height:500px;color:white}.w-background-video>video{background-size:cover;background-position:50% 50%;position:absolute;margin:auto;width:100%;height:100%;right:-100%;bottom:-100%;top:-100%;left:-100%;object-fit:cover;z-index:-100}.w-background-video>video::-webkit-media-controls-start-playback-button{display:none !important;-webkit-appearance:none}.w-slider{position:relative;height:300px;text-align:center;background:#dddddd;clear:both;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0)}.w-slider-mask{position:relative;display:block;overflow:hidden;z-index:1;left:0;right:0;height:100%;white-space:nowrap}.w-slide{position:relative;display:inline-block;vertical-align:top;width:100%;height:100%;white-space:normal;text-align:left}.w-slider-nav{position:absolute;z-index:2;top:auto;right:0;bottom:0;left:0;margin:auto;padding-top:10px;height:40px;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0)}.w-slider-nav.w-round>div{border-radius:100%}.w-slider-nav.w-num>div{width:auto;height:auto;padding:.2em .5em;font-size:inherit;line-height:inherit}.w-slider-nav.w-shadow>div{box-shadow:0 0 3px rgba(51,51,51,0.4)}.w-slider-nav-invert{color:#fff}.w-slider-nav-invert>div{background-color:rgba(34,34,34,0.4)}.w-slider-nav-invert>div.w-active{background-color:#222}.w-slider-dot{position:relative;display:inline-block;width:1em;height:1em;background-color:rgba(255,255,255,0.4);cursor:pointer;margin:0 3px .5em;transition:background-color 100ms,color 100ms}.w-slider-dot.w-active{background-color:#fff}.w-slider-dot:focus{outline:none;box-shadow:0 0 0 2px #fff}.w-slider-dot:focus.w-active{box-shadow:none}.w-slider-arrow-left,.w-slider-arrow-right{position:absolute;width:80px;top:0;right:0;bottom:0;left:0;margin:auto;cursor:pointer;overflow:hidden;color:white;font-size:40px;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-slider-arrow-left [class^="w-icon-"],.w-slider-arrow-right [class^="w-icon-"],.w-slider-arrow-left [class*=" w-icon-"],.w-slider-arrow-right [class*=" w-icon-"]{position:absolute}.w-slider-arrow-left:focus,.w-slider-arrow-right:focus{outline:0}.w-slider-arrow-left{z-index:3;right:auto}.w-slider-arrow-right{z-index:4;left:auto}.w-icon-slider-left,.w-icon-slider-right{top:0;right:0;bottom:0;left:0;margin:auto;width:1em;height:1em}.w-slider-aria-label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.w-dropdown{display:inline-block;position:relative;text-align:left;margin-left:auto;margin-right:auto;z-index:900}.w-dropdown-btn,.w-dropdown-toggle,.w-dropdown-link{position:relative;vertical-align:top;text-decoration:none;color:#222222;padding:20px;text-align:left;margin-left:auto;margin-right:auto;white-space:nowrap}.w-dropdown-toggle{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;cursor:pointer;padding-right:40px}.w-dropdown-toggle:focus{outline:0}.w-icon-dropdown-toggle{position:absolute;top:0;right:0;bottom:0;margin:auto;margin-right:20px;width:1em;height:1em}.w-dropdown-list{position:absolute;background:#dddddd;display:none;min-width:100%}.w-dropdown-list.w--open{display:block}.w-dropdown-link{padding:10px 20px;display:block;color:#222222}.w-dropdown-link.w--current{color:#0082f3}.w-dropdown-link:focus{outline:0}@media screen and (max-width:767px){.w-nav-brand{padding-left:10px}}.w-lightbox-backdrop{color:#000;cursor:auto;font-family:serif;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;list-style:disc;text-align:start;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;position:fixed;top:0;right:0;bottom:0;left:0;color:#fff;font-family:"Helvetica Neue",Helvetica,Ubuntu,"Segoe UI",Verdana,sans-serif;font-size:17px;line-height:1.2;font-weight:300;text-align:center;background:rgba(0,0,0,0.9);z-index:2000;outline:0;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-tap-highlight-color:transparent;-webkit-transform:translate(0, 0)}.w-lightbox-backdrop,.w-lightbox-container{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.w-lightbox-content{position:relative;height:100vh;overflow:hidden}.w-lightbox-view{position:absolute;width:100vw;height:100vh;opacity:0}.w-lightbox-view:before{content:"";height:100vh}.w-lightbox-group,.w-lightbox-group .w-lightbox-view,.w-lightbox-group .w-lightbox-view:before{height:86vh}.w-lightbox-frame,.w-lightbox-view:before{display:inline-block;vertical-align:middle}.w-lightbox-figure{position:relative;margin:0}.w-lightbox-group .w-lightbox-figure{cursor:pointer}.w-lightbox-img{width:auto;height:auto;max-width:none}.w-lightbox-image{display:block;float:none;max-width:100vw;max-height:100vh}.w-lightbox-group .w-lightbox-image{max-height:86vh}.w-lightbox-caption{position:absolute;right:0;bottom:0;left:0;padding:.5em 1em;background:rgba(0,0,0,0.4);text-align:left;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.w-lightbox-embed{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.w-lightbox-control{position:absolute;top:0;width:4em;background-size:24px;background-repeat:no-repeat;background-position:center;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.w-lightbox-left{display:none;bottom:0;left:0;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0yMCAwIDI0IDQwIiB3aWR0aD0iMjQiIGhlaWdodD0iNDAiPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1KSI+PHBhdGggZD0ibTAgMGg1djIzaDIzdjVoLTI4eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDN2MjNoMjN2M2gtMjZ6IiBmaWxsPSIjZmZmIi8+PC9nPjwvc3ZnPg==")}.w-lightbox-right{display:none;right:0;bottom:0;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMjQgNDAiIHdpZHRoPSIyNCIgaGVpZ2h0PSI0MCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMC0waDI4djI4aC01di0yM2gtMjN6IiBvcGFjaXR5PSIuNCIvPjxwYXRoIGQ9Im0xIDFoMjZ2MjZoLTN2LTIzaC0yM3oiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+")}.w-lightbox-close{right:0;height:2.6em;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMTggMTciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNyI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMCAwaDd2LTdoNXY3aDd2NWgtN3Y3aC01di03aC03eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDd2LTdoM3Y3aDd2M2gtN3Y3aC0zdi03aC03eiIgZmlsbD0iI2ZmZiIvPjwvZz48L3N2Zz4=");background-size:18px}.w-lightbox-strip{position:absolute;bottom:0;left:0;right:0;padding:0 1vh;line-height:0;white-space:nowrap;overflow-x:auto;overflow-y:hidden}.w-lightbox-item{display:inline-block;width:10vh;padding:2vh 1vh;box-sizing:content-box;cursor:pointer;-webkit-transform:translate3d(0, 0, 0)}.w-lightbox-active{opacity:.3}.w-lightbox-thumbnail{position:relative;height:10vh;background:#222;overflow:hidden}.w-lightbox-thumbnail-image{position:absolute;top:0;left:0}.w-lightbox-thumbnail .w-lightbox-tall{top:50%;width:100%;-webkit-transform:translate(0, -50%);-ms-transform:translate(0, -50%);transform:translate(0, -50%)}.w-lightbox-thumbnail .w-lightbox-wide{left:50%;height:100%;-webkit-transform:translate(-50%, 0);-ms-transform:translate(-50%, 0);transform:translate(-50%, 0)}.w-lightbox-spinner{position:absolute;top:50%;left:50%;box-sizing:border-box;width:40px;height:40px;margin-top:-20px;margin-left:-20px;border:5px solid rgba(0,0,0,0.4);border-radius:50%;-webkit-animation:spin .8s infinite linear;animation:spin .8s infinite linear}.w-lightbox-spinner:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border:3px solid transparent;border-bottom-color:#fff;border-radius:50%}.w-lightbox-hide{display:none}.w-lightbox-noscroll{overflow:hidden}@media (min-width:768px){.w-lightbox-content{height:96vh;margin-top:2vh}.w-lightbox-view,.w-lightbox-view:before{height:96vh}.w-lightbox-group,.w-lightbox-group .w-lightbox-view,.w-lightbox-group .w-lightbox-view:before{height:84vh}.w-lightbox-image{max-width:96vw;max-height:96vh}.w-lightbox-group .w-lightbox-image{max-width:82.3vw;max-height:84vh}.w-lightbox-left,.w-lightbox-right{display:block;opacity:.5}.w-lightbox-close{opacity:.8}.w-lightbox-control:hover{opacity:1}}.w-lightbox-inactive,.w-lightbox-inactive:hover{opacity:0}.w-richtext:before,.w-richtext:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-richtext:after{clear:both}.w-richtext[contenteditable="true"]:before,.w-richtext[contenteditable="true"]:after{white-space:initial}.w-richtext ol,.w-richtext ul{overflow:hidden}.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-video div:after,.w-richtext .w-richtext-figure-selected[data-rt-type="video"] div:after{outline:2px solid #2895f7}.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-image div,.w-richtext .w-richtext-figure-selected[data-rt-type="image"] div{outline:2px solid #2895f7}.w-richtext figure.w-richtext-figure-type-video>div:after,.w-richtext figure[data-rt-type="video"]>div:after{content:'';position:absolute;display:none;left:0;top:0;right:0;bottom:0}.w-richtext figure{position:relative;max-width:60%}.w-richtext figure>div:before{cursor:default !important}.w-richtext figure img{width:100%}.w-richtext figure figcaption.w-richtext-figcaption-placeholder{opacity:.6}.w-richtext figure div{font-size:0;color:transparent}.w-richtext figure.w-richtext-figure-type-image,.w-richtext figure[data-rt-type="image"]{display:table}.w-richtext figure.w-richtext-figure-type-image>div,.w-richtext figure[data-rt-type="image"]>div{display:inline-block}.w-richtext figure.w-richtext-figure-type-image>figcaption,.w-richtext figure[data-rt-type="image"]>figcaption{display:table-caption;caption-side:bottom}.w-richtext figure.w-richtext-figure-type-video,.w-richtext figure[data-rt-type="video"]{width:60%;height:0}.w-richtext figure.w-richtext-figure-type-video iframe,.w-richtext figure[data-rt-type="video"] iframe{position:absolute;top:0;left:0;width:100%;height:100%}.w-richtext figure.w-richtext-figure-type-video>div,.w-richtext figure[data-rt-type="video"]>div{width:100%}.w-richtext figure.w-richtext-align-center{margin-right:auto;margin-left:auto;clear:both}.w-richtext figure.w-richtext-align-center.w-richtext-figure-type-image>div,.w-richtext figure.w-richtext-align-center[data-rt-type="image"]>div{max-width:100%}.w-richtext figure.w-richtext-align-normal{clear:both}.w-richtext figure.w-richtext-align-fullwidth{width:100%;max-width:100%;text-align:center;clear:both;display:block;margin-right:auto;margin-left:auto}.w-richtext figure.w-richtext-align-fullwidth>div{display:inline-block;padding-bottom:inherit}.w-richtext figure.w-richtext-align-fullwidth>figcaption{display:block}.w-richtext figure.w-richtext-align-floatleft{float:left;margin-right:15px;clear:none}.w-richtext figure.w-richtext-align-floatright{float:right;margin-left:15px;clear:none}.w-nav{position:relative;background:#dddddd;z-index:1000}.w-nav:before,.w-nav:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-nav:after{clear:both}.w-nav-brand{position:relative;float:left;text-decoration:none;color:#333333}.w-nav-link{position:relative;display:inline-block;vertical-align:top;text-decoration:none;color:#222222;padding:20px;text-align:left;margin-left:auto;margin-right:auto}.w-nav-link.w--current{color:#0082f3}.w-nav-menu{position:relative;float:right}[data-nav-menu-open]{display:block !important;position:absolute;top:100%;left:0;right:0;background:#C8C8C8;text-align:center;overflow:visible;min-width:200px}.w--nav-link-open{display:block;position:relative}.w-nav-overlay{position:absolute;overflow:hidden;display:none;top:100%;left:0;right:0;width:100%}.w-nav-overlay [data-nav-menu-open]{top:0}.w-nav[data-animation="over-left"] .w-nav-overlay{width:auto}.w-nav[data-animation="over-left"] .w-nav-overlay,.w-nav[data-animation="over-left"] [data-nav-menu-open]{right:auto;z-index:1;top:0}.w-nav[data-animation="over-right"] .w-nav-overlay{width:auto}.w-nav[data-animation="over-right"] .w-nav-overlay,.w-nav[data-animation="over-right"] [data-nav-menu-open]{left:auto;z-index:1;top:0}.w-nav-button{position:relative;float:right;padding:18px;font-size:24px;display:none;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-nav-button:focus{outline:0}.w-nav-button.w--open{background-color:#C8C8C8;color:white}.w-nav[data-collapse="all"] .w-nav-menu{display:none}.w-nav[data-collapse="all"] .w-nav-button{display:block}.w--nav-dropdown-open{display:block}.w--nav-dropdown-toggle-open{display:block}.w--nav-dropdown-list-open{position:static}@media screen and (max-width:991px){.w-nav[data-collapse="medium"] .w-nav-menu{display:none}.w-nav[data-collapse="medium"] .w-nav-button{display:block}}@media screen and (max-width:767px){.w-nav[data-collapse="small"] .w-nav-menu{display:none}.w-nav[data-collapse="small"] .w-nav-button{display:block}.w-nav-brand{padding-left:10px}}@media screen and (max-width:479px){.w-nav[data-collapse="tiny"] .w-nav-menu{display:none}.w-nav[data-collapse="tiny"] .w-nav-button{display:block}}.w-tabs{position:relative}.w-tabs:before,.w-tabs:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-tabs:after{clear:both}.w-tab-menu{position:relative}.w-tab-link{position:relative;display:inline-block;vertical-align:top;text-decoration:none;padding:9px 30px;text-align:left;cursor:pointer;color:#222222;background-color:#dddddd}.w-tab-link.w--current{background-color:#C8C8C8}.w-tab-link:focus{outline:0}.w-tab-content{position:relative;display:block;overflow:hidden}.w-tab-pane{position:relative;display:none}.w--tab-active{display:block}@media screen and (max-width:479px){.w-tab-link{display:block}}.w-ix-emptyfix:after{content:""}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.w-dyn-empty{padding:10px;background-color:#dddddd}.w-dyn-hide{display:none !important}.w-dyn-bind-empty{display:none !important}.w-condition-invisible{display:none !important} + +/* ========================================================================== + Start of custom Webflow CSS + ========================================================================== */ +body { + font-family: Vollkorn, serif; + color: #333; + font-size: 14px; + line-height: 20px; +} + +h1 { + margin-top: 10px; + margin-bottom: 10px; + font-size: 32px; + line-height: 38px; + font-weight: 700; +} + +h2 { + margin: 10px 0px; + font-family: Montserrat, sans-serif; + font-size: 23px; + line-height: 36px; + font-weight: 400; + text-align: center; + text-transform: uppercase; +} + +.section.ingress h2 { + margin: 10px 0px; + font-family: Montserrat, sans-serif; + font-size: 20px; + line-height: 36px; + font-weight: 400; + text-align: left; + text-transform: none !important; +} + +h3 { + margin: 0px 0px 20px; + font-family: Montserrat, sans-serif; + font-size: 16px; + line-height: 20px; + font-weight: 400; + text-transform: uppercase; +} + +h4 { + margin: 10px 0px; + font-size: 18px; + line-height: 24px; + font-weight: 700; +} + +h5 { + margin: 10px 0px; + font-size: 14px; + line-height: 20px; + font-weight: 700; +} + +h6 { + margin: 10px 0px; + font-size: 12px; + line-height: 18px; + font-weight: 700; +} + +p { + margin-top: 0px; + margin-bottom: 5px; + font-family: Vollkorn, serif; + font-size: 15px; + line-height: 22px; +} + +.testimonials { + display: flex; + flex-wrap: wrap; + margin: 20px 0; +} + +.testimony { + background-color: rgba(245, 245, 245, 0.7); + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2); + margin: 20px 0; + flex-basis: 250px; /* Fixed width for the testimony text */ +} + +.testimonials .testimony { + margin-right: 5px; /* Add 5px bottom margin to each testimony */ +} + +.testimony .text { + flex: 1; /* Stretch the testimony text to fill the remaining space */ + white-space: nowrap; /* Prevent text from wrapping to multiple lines */ + max-width: 250px; /* Set a maximum width of 250px for the testimony text */ + word-break: break-word; +} + +.testimony .photo { + width: 40px !important; + height; auto; +} + +.testimony .photo, +.testimony .name, +.testimony .title { + display: inline-block; /* Align the Photo, Name, and Title inline */ +} + +.button { + display: inline-block; + padding: 15px 33px; + border-style: solid; + border-width: 1px 1px 2px; + border-color: #47474f; + background-color: transparent; + -webkit-transition: background-color 300ms ease; + transition: background-color 300ms ease; + font-family: Vollkorn, serif; + color: #47474f; + font-size: 19px; + font-style: italic; + text-align: center; + text-decoration: none; +} + +.button:hover { + background-color: #fff; +} + +.button.form { + margin-top: 23px; + margin-bottom: 24px; + padding-right: 54px; + padding-left: 54px; + border-width: 1px 1px 2px; + border-color: #7ec4bd; + color: #7ec4bd; +} + +.section.ingress { + font-size: 20px; + text-align: left; +} + +.button.form:hover { + background-color: rgba(126, 196, 189, 0.34); +} + +.header { + padding: 98px 10px; + /* background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(100, 209, 198, 0.55)), to(rgba(100, 209, 198, 0.55))), url("/images/el-vikingo-ti-bg.png"); + background-image: linear-gradient(180deg, rgba(100, 209, 198, 0.55), rgba(100, 209, 198, 0.55)), url("/images/el-vikingo-ti-bg.png"); */ + background-image: url("/images/new-vikingo-bg.png"); + background-position: 0% 0%, 50% 70%; + background-size: auto, cover; + color: #fff; + text-align: center; +} + +.header.project-page { + padding-top: 77px; + padding-bottom: 77px; + /* background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(100, 209, 198, 0.55)), to(rgba(100, 209, 198, 0.55))), url("/images/el-vikingo-ti-bg.png"); + background-image: linear-gradient(180deg, rgba(100, 209, 198, 0.55), rgba(100, 209, 198, 0.55)), url("/images/el-vikingo-ti-bg.png"); */ + background-image: url("/images/new-vikingo-bg.png"); +} + +.navbar { + padding-top: 18px; + padding-bottom: 18px; + background-color: #fff; +} + +.nav-link { + margin-top: 23px; + margin-left: 34px; + padding: 0px; + border-bottom: 2px solid transparent; + -webkit-transition: border-color 300ms ease; + transition: border-color 300ms ease; + font-family: Montserrat, sans-serif; + color: #404040; + font-size: 12px; + font-weight: 400; + text-transform: uppercase; +} + +.nav-link:hover { + border-bottom-color: #7ec4bd; +} + +.logo-title { + margin-top: 13px; + float: left; + font-family: Oswald, sans-serif; + font-size: 22px; + font-weight: 400; + text-transform: uppercase; +} + +.logo-img { + margin-right: 18px; + float: left; +} + +.main-heading { + margin-top: 7px; + font-family: Montserrat, sans-serif; + font-size: 44px; + line-height: 55px; + font-weight: 400; + text-transform: uppercase; +} + +.divider { + display: block; + width: 80px; + height: 2px; + margin: 28px auto; + background-color: #fff; +} + +.divider.grey { + margin-bottom: 43px; + background-color: rgba(0, 0, 0, 0.09); +} + +.main-subtitle { + font-family: Vollkorn, serif; + color: hsla(0, 0%, 100%, 0.81); + font-size: 18px; + font-style: italic; +} + +.about-section { + padding-bottom: 61px; + background-color: #fefec9; + text-align: left; +} + +.about-text { + margin-bottom: 40px; + color: #47474f; + font-size: 18px; + line-height: 25px; +} + +.x-icon { + margin-top: -26px; + margin-bottom: 34px; +} + +.section { + padding-top: 69px; + padding-bottom: 69px; + text-align: left; +} + +.newsection { + padding-top: 10px; + padding-bottom: 10px; + text-align: left; +} + +.section.grey { + background-color: #f5f5f5; +} + +/* New: #00b7e4 + * Old: #7ec4bd + * New: rgba(6, 181, 229, 255) + * Old: rgba(126, 196, 189, 0.87) + */ + +.section.contact { + /* background-color: #7ec4bd; */ + background-color: #000506; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fefec9), to(#00b7e4)), url("/images/el-vikingo-ti-bg.png"); + background-image: linear-gradient(180deg, rgba(#fefec9, #00b7e4)), url("/images/el-vikingo-ti-bg.png"); + background-size: auto, cover; + font-family: Vollkorn, serif; +} + +.blogsection.contact { + /* background-color: #7ec4bd; */ + background-color: #000506; + background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#00b7e4)), url("/images/el-vikingo-ti- +bg.png"); + background-image: linear-gradient(180deg, rgba(#ffffff, #00b7e4)), url("/images/el-vikingo-ti-bg.png"); + background-size: auto, cover; + font-family: Vollkorn, serif; +} + +.newsection.footer { + background-color: #000506; + text-align: center; +} + +.grey-icon-wrapper { + margin-bottom: 38px; + padding-top: 50px; + padding-bottom: 50px; + background-color: #f5f5f5; +} + +.project-wrapper { + position: relative; + bottom: 0px; + display: block; + -webkit-transition: bottom 300ms ease; + transition: bottom 300ms ease; + color: #333; + text-decoration: none; +} + +.project-wrapper:hover { + bottom: 8px; +} + +.team-image { + margin-bottom: 21px; + border-radius: 100%; +} + +.role { + margin-bottom: 16px; + font-family: Vollkorn, serif; + font-size: 17px; + font-style: italic; +} + +.social-link { + width: 29px; + height: 29px; + margin: 3px; + padding-top: 5px; + padding-left: 1px; + border-radius: 100%; + background-color: #f5f5f5; + box-shadow: inset 0 0 0 1px transparent; + -webkit-transition: box-shadow 300ms ease; + transition: box-shadow 300ms ease; +} + +.social-link:hover { + box-shadow: inset 0 0 0 2px #7ec4bd; +} + +.team-title { + margin-bottom: 7px; +} + +.testimonial-slider { + height: auto; + background-color: transparent; +} + +.quote-icon { + margin-bottom: 37px; +} + +.arrow { + width: 40px; + -webkit-transition: color 300ms ease; + transition: color 300ms ease; + color: #e3e3e3; + font-size: 30px; +} + +.arrow:hover { + color: #333; +} + +.testimonial-slide { + width: 50%; + padding: 30px 34px 29px; + text-align: center; +} + +.testimonial-slide.left-border { + border-left: 2px solid rgba(0, 0, 0, 0.04); +} + +.mask { + display: block; + width: 95%; + margin-right: auto; + margin-left: auto; +} + +.team-row { + margin-bottom: 20px; +} + +.testimonial { + margin-bottom: 22px; + font-size: 26px; + line-height: 33px; +} + +.from { + margin-bottom: 0px; + font-family: Montserrat, sans-serif; + color: #ababab; + font-size: 14px; + font-weight: 400; + text-transform: uppercase; +} + +.icon-wrapper { + height: 95px; + margin-bottom: 10px; + padding-top: 13px; +} + +.icon-wrapper._2 { + padding-top: 20px; +} + +.footer-logo { + /* margin-bottom: 15px; */ + opacity: 1.0; +} + +.contact-text { + color: #212121; + font-size: 17px; +} + +.link { + color: #1c1c1c; +} + +.social-wrapper { + display: block; + margin-bottom: 11px; + margin-left: 33%; + -webkit-transition: opacity 300ms ease; + transition: opacity 300ms ease; + text-align: left; + text-decoration: none; +} + +.social-wrapper:hover { + opacity: 0.43; +} + +.footer-text { + /* color: hsla(0, 0%, 100%, 0.4); */ + color: white; +} + +.social-link-text { + display: inline-block; +} + +.social-icon { + margin-top: -6px; + margin-right: 9px; +} + +.field { + height: 57px; + margin-bottom: 0px; + padding-top: 17px; + padding-bottom: 17px; + border: 0px solid #000; + background-color: hsla(0, 0%, 100%, 0.2); + box-shadow: inset 3px 0 0 0 transparent; + color: #7ec4bd; + font-size: 18px; + font-style: italic; +} + +.field:focus { + box-shadow: inset 3px 0 0 0 #7ec4bd; +} + +.field.large { + height: 127px; +} + +.field.darker { + background-color: hsla(0, 0%, 100%, 0.18); + -webkit-transition: box-shadow 300ms ease; + transition: box-shadow 300ms ease; +} + +.form-wrapper { + padding-right: 20%; + padding-left: 20%; +} + +.success-message { + padding-top: 82px; + padding-bottom: 82px; + border-style: solid; + border-width: 1px 1px 2px; + border-color: #7ec4bd; + background-color: transparent; + color: #7ec4bd; +} + +.project-info { + margin-bottom: 20px; + padding-top: 20px; + padding-bottom: 20px; + background-color: #fff; +} + +.project-title { + margin-bottom: 4px; +} + +.grow-row { + margin-bottom: 42px; +} + +.screenshot { + margin-bottom: 43px; +} + +.face { + margin-bottom: 10px; + border-radius: 100%; +} + +@media screen and (max-width: 991px) { + .nav-link { + margin: 0px auto; + padding-top: 20px; + padding-bottom: 20px; + } + .nav-link:hover { + border-bottom-color: transparent; + } + .main-heading { + font-size: 38px; + line-height: 44px; + } + .project-wrapper:hover { + -webkit-transform: translate(0px, 0px); + -ms-transform: translate(0px, 0px); + transform: translate(0px, 0px); + } + .social-wrapper { + margin-left: 30%; + } + .menu-button { + margin-top: 7px; + padding: 10px; + font-size: 32px; + } + .menu-button.w--open { + background-color: transparent; + color: #7ec4bd; + } + .nav-menu { + background-color: #f5f5f5; + } +} + +@media screen and (max-width: 767px) { + .header { + padding-top: 45px; + padding-bottom: 45px; + } + .navbar { + padding-top: 10px; + padding-bottom: 10px; + } + .nav-link { + padding-top: 15px; + padding-bottom: 15px; + padding-left: 10px; + } + .logo-title { + margin-top: 6px; + } + .logo-img { + width: 50px; + } + .about-section { + padding-right: 20px; + padding-bottom: 30px; + padding-left: 20px; + } + .x-icon { + margin-bottom: 21px; + } + .section { + padding-top: 30px; + padding-bottom: 30px; + } + .grey-icon-wrapper { + display: inline-block; + margin-bottom: 16px; + padding: 34px 56px; + } + .grey-icon-wrapper.push-top { + margin-top: 30px; + } + .testimonial-slide { + width: 100%; + } + .testimonial-slide.left-border { + border-left-width: 0px; + } + .icon-wrapper { + height: 85px; + } + .icon-wrapper._2 { + margin-top: 37px; + } + .social-wrapper { + margin-left: 0%; + text-align: center; + } + .form-wrapper { + padding-right: 10%; + padding-left: 10%; + } + .menu-button { + margin-top: 0px; + } + .member { + padding-bottom: 47px; + } + .grow-row { + margin-bottom: 0px; + } + .screenshot { + width: 90%; + } +} + +@media screen and (max-width: 479px) { + .main-heading { + font-size: 34px; + line-height: 38px; + } + .grey-icon-wrapper { + display: block; + } + .form-wrapper { + padding-right: 5%; + padding-left: 5%; + } +} diff --git a/home/stig/projects/qsgen3/output/static/css/webflow.js b/home/stig/projects/qsgen3/output/static/css/webflow.js new file mode 100644 index 0000000..013b3b1 --- /dev/null +++ b/home/stig/projects/qsgen3/output/static/css/webflow.js @@ -0,0 +1,29 @@ +/*! + * Webflow: Front-end site library + * @license MIT + * Inline scripts may access the api using an async handler: + * var Webflow = Webflow || []; + * Webflow.push(readyFunction); + */!function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=4)}([function(t,e,n){"use strict";var i={},r={},a=[],o=window.Webflow||[],s=window.jQuery,u=s(window),c=s(document),l=s.isFunction,f=i._=n(6),d=i.tram=n(1)&&s.tram,h=!1,p=!1;function v(t){i.env()&&(l(t.design)&&u.on("__wf_design",t.design),l(t.preview)&&u.on("__wf_preview",t.preview)),l(t.destroy)&&u.on("__wf_destroy",t.destroy),t.ready&&l(t.ready)&&function(t){if(h)return void t.ready();if(f.contains(a,t.ready))return;a.push(t.ready)}(t)}function m(t){l(t.design)&&u.off("__wf_design",t.design),l(t.preview)&&u.off("__wf_preview",t.preview),l(t.destroy)&&u.off("__wf_destroy",t.destroy),t.ready&&l(t.ready)&&function(t){a=f.filter(a,function(e){return e!==t.ready})}(t)}d.config.hideBackface=!1,d.config.keepInherited=!0,i.define=function(t,e,n){r[t]&&m(r[t]);var i=r[t]=e(s,f,n)||{};return v(i),i},i.require=function(t){return r[t]},i.push=function(t){h?l(t)&&t():o.push(t)},i.env=function(t){var e=window.__wf_design,n=void 0!==e;return t?"design"===t?n&&e:"preview"===t?n&&!e:"slug"===t?n&&window.__wf_slug:"editor"===t?window.WebflowEditor:"test"===t?window.__wf_test:"frame"===t?window!==window.top:void 0:n};var g,w=navigator.userAgent.toLowerCase(),b=i.env.touch="ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch,y=i.env.chrome=/chrome/.test(w)&&/Google/.test(navigator.vendor)&&parseInt(w.match(/chrome\/(\d+)\./)[1],10),x=i.env.ios=/(ipod|iphone|ipad)/.test(w);i.env.safari=/safari/.test(w)&&!y&&!x,b&&c.on("touchstart mousedown",function(t){g=t.target}),i.validClick=b?function(t){return t===g||s.contains(t,g)}:function(){return!0};var k,_="resize.webflow orientationchange.webflow load.webflow";function E(t,e){var n=[],i={};return i.up=f.throttle(function(t){f.each(n,function(e){e(t)})}),t&&e&&t.on(e,i.up),i.on=function(t){"function"==typeof t&&(f.contains(n,t)||n.push(t))},i.off=function(t){n=arguments.length?f.filter(n,function(e){return e!==t}):[]},i}function O(t){l(t)&&t()}function T(){k&&(k.reject(),u.off("load",k.resolve)),k=new s.Deferred,u.on("load",k.resolve)}i.resize=E(u,_),i.scroll=E(u,"scroll.webflow resize.webflow orientationchange.webflow load.webflow"),i.redraw=E(),i.location=function(t){window.location=t},i.env()&&(i.location=function(){}),i.ready=function(){h=!0,p?(p=!1,f.each(r,v)):f.each(a,O),f.each(o,O),i.resize.up()},i.load=function(t){k.then(t)},i.destroy=function(t){t=t||{},p=!0,u.triggerHandler("__wf_destroy"),null!=t.domready&&(h=t.domready),f.each(r,m),i.resize.off(),i.scroll.off(),i.redraw.off(),a=[],o=[],"pending"===k.state()&&T()},s(i.ready),T(),t.exports=window.Webflow=i},function(t,e,n){"use strict";var i=n(2)(n(7));window.tram=function(t){function e(t,e){return(new j.Bare).init(t,e)}function n(t){return t.replace(/[A-Z]/g,function(t){return"-"+t.toLowerCase()})}function r(t){var e=parseInt(t.slice(1),16);return[e>>16&255,e>>8&255,255&e]}function a(t,e,n){return"#"+(1<<24|t<<16|e<<8|n).toString(16).slice(1)}function o(){}function s(t,e,n){c("Units do not match ["+t+"]: "+e+", "+n)}function u(t,e,n){if(void 0!==e&&(n=e),void 0===t)return n;var i=n;return Q.test(t)||!J.test(t)?i=parseInt(t,10):J.test(t)&&(i=1e3*parseFloat(t)),0>i&&(i=0),i==i?i:n}function c(t){B.debug&&window&&window.console.warn(t)}var l=function(t,e,n){function r(t){return"object"==(0,i.default)(t)}function a(t){return"function"==typeof t}function o(){}return function i(s,u){function c(){var t=new l;return a(t.init)&&t.init.apply(t,arguments),t}function l(){}u===n&&(u=s,s=Object),c.Bare=l;var f,d=o[t]=s[t],h=l[t]=c[t]=new o;return h.constructor=c,c.mixin=function(e){return l[t]=c[t]=i(c,e)[t],c},c.open=function(t){if(f={},a(t)?f=t.call(c,h,d,c,s):r(t)&&(f=t),r(f))for(var n in f)e.call(f,n)&&(h[n]=f[n]);return a(h.init)||(h.init=s),c},c.open(u)}}("prototype",{}.hasOwnProperty),f={ease:["ease",function(t,e,n,i){var r=(t/=i)*t,a=r*t;return e+n*(-2.75*a*r+11*r*r+-15.5*a+8*r+.25*t)}],"ease-in":["ease-in",function(t,e,n,i){var r=(t/=i)*t,a=r*t;return e+n*(-1*a*r+3*r*r+-3*a+2*r)}],"ease-out":["ease-out",function(t,e,n,i){var r=(t/=i)*t,a=r*t;return e+n*(.3*a*r+-1.6*r*r+2.2*a+-1.8*r+1.9*t)}],"ease-in-out":["ease-in-out",function(t,e,n,i){var r=(t/=i)*t,a=r*t;return e+n*(2*a*r+-5*r*r+2*a+2*r)}],linear:["linear",function(t,e,n,i){return n*t/i+e}],"ease-in-quad":["cubic-bezier(0.550, 0.085, 0.680, 0.530)",function(t,e,n,i){return n*(t/=i)*t+e}],"ease-out-quad":["cubic-bezier(0.250, 0.460, 0.450, 0.940)",function(t,e,n,i){return-n*(t/=i)*(t-2)+e}],"ease-in-out-quad":["cubic-bezier(0.455, 0.030, 0.515, 0.955)",function(t,e,n,i){return(t/=i/2)<1?n/2*t*t+e:-n/2*(--t*(t-2)-1)+e}],"ease-in-cubic":["cubic-bezier(0.550, 0.055, 0.675, 0.190)",function(t,e,n,i){return n*(t/=i)*t*t+e}],"ease-out-cubic":["cubic-bezier(0.215, 0.610, 0.355, 1)",function(t,e,n,i){return n*((t=t/i-1)*t*t+1)+e}],"ease-in-out-cubic":["cubic-bezier(0.645, 0.045, 0.355, 1)",function(t,e,n,i){return(t/=i/2)<1?n/2*t*t*t+e:n/2*((t-=2)*t*t+2)+e}],"ease-in-quart":["cubic-bezier(0.895, 0.030, 0.685, 0.220)",function(t,e,n,i){return n*(t/=i)*t*t*t+e}],"ease-out-quart":["cubic-bezier(0.165, 0.840, 0.440, 1)",function(t,e,n,i){return-n*((t=t/i-1)*t*t*t-1)+e}],"ease-in-out-quart":["cubic-bezier(0.770, 0, 0.175, 1)",function(t,e,n,i){return(t/=i/2)<1?n/2*t*t*t*t+e:-n/2*((t-=2)*t*t*t-2)+e}],"ease-in-quint":["cubic-bezier(0.755, 0.050, 0.855, 0.060)",function(t,e,n,i){return n*(t/=i)*t*t*t*t+e}],"ease-out-quint":["cubic-bezier(0.230, 1, 0.320, 1)",function(t,e,n,i){return n*((t=t/i-1)*t*t*t*t+1)+e}],"ease-in-out-quint":["cubic-bezier(0.860, 0, 0.070, 1)",function(t,e,n,i){return(t/=i/2)<1?n/2*t*t*t*t*t+e:n/2*((t-=2)*t*t*t*t+2)+e}],"ease-in-sine":["cubic-bezier(0.470, 0, 0.745, 0.715)",function(t,e,n,i){return-n*Math.cos(t/i*(Math.PI/2))+n+e}],"ease-out-sine":["cubic-bezier(0.390, 0.575, 0.565, 1)",function(t,e,n,i){return n*Math.sin(t/i*(Math.PI/2))+e}],"ease-in-out-sine":["cubic-bezier(0.445, 0.050, 0.550, 0.950)",function(t,e,n,i){return-n/2*(Math.cos(Math.PI*t/i)-1)+e}],"ease-in-expo":["cubic-bezier(0.950, 0.050, 0.795, 0.035)",function(t,e,n,i){return 0===t?e:n*Math.pow(2,10*(t/i-1))+e}],"ease-out-expo":["cubic-bezier(0.190, 1, 0.220, 1)",function(t,e,n,i){return t===i?e+n:n*(1-Math.pow(2,-10*t/i))+e}],"ease-in-out-expo":["cubic-bezier(1, 0, 0, 1)",function(t,e,n,i){return 0===t?e:t===i?e+n:(t/=i/2)<1?n/2*Math.pow(2,10*(t-1))+e:n/2*(2-Math.pow(2,-10*--t))+e}],"ease-in-circ":["cubic-bezier(0.600, 0.040, 0.980, 0.335)",function(t,e,n,i){return-n*(Math.sqrt(1-(t/=i)*t)-1)+e}],"ease-out-circ":["cubic-bezier(0.075, 0.820, 0.165, 1)",function(t,e,n,i){return n*Math.sqrt(1-(t=t/i-1)*t)+e}],"ease-in-out-circ":["cubic-bezier(0.785, 0.135, 0.150, 0.860)",function(t,e,n,i){return(t/=i/2)<1?-n/2*(Math.sqrt(1-t*t)-1)+e:n/2*(Math.sqrt(1-(t-=2)*t)+1)+e}],"ease-in-back":["cubic-bezier(0.600, -0.280, 0.735, 0.045)",function(t,e,n,i,r){return void 0===r&&(r=1.70158),n*(t/=i)*t*((r+1)*t-r)+e}],"ease-out-back":["cubic-bezier(0.175, 0.885, 0.320, 1.275)",function(t,e,n,i,r){return void 0===r&&(r=1.70158),n*((t=t/i-1)*t*((r+1)*t+r)+1)+e}],"ease-in-out-back":["cubic-bezier(0.680, -0.550, 0.265, 1.550)",function(t,e,n,i,r){return void 0===r&&(r=1.70158),(t/=i/2)<1?n/2*t*t*((1+(r*=1.525))*t-r)+e:n/2*((t-=2)*t*((1+(r*=1.525))*t+r)+2)+e}]},d={"ease-in-back":"cubic-bezier(0.600, 0, 0.735, 0.045)","ease-out-back":"cubic-bezier(0.175, 0.885, 0.320, 1)","ease-in-out-back":"cubic-bezier(0.680, 0, 0.265, 1)"},h=document,p=window,v="bkwld-tram",m=/[\-\.0-9]/g,g=/[A-Z]/,w="number",b=/^(rgb|#)/,y=/(em|cm|mm|in|pt|pc|px)$/,x=/(em|cm|mm|in|pt|pc|px|%)$/,k=/(deg|rad|turn)$/,_="unitless",E=/(all|none) 0s ease 0s/,O=/^(width|height)$/,T=" ",A=h.createElement("a"),R=["Webkit","Moz","O","ms"],C=["-webkit-","-moz-","-o-","-ms-"],S=function(t){if(t in A.style)return{dom:t,css:t};var e,n,i="",r=t.split("-");for(e=0;ec&&(c=t.span),t.stop(),t.animate(e)},function(t){"wait"in t&&(c=u(t.wait,0))}),d.call(this),c>0&&(this.timer=new H({duration:c,context:this}),this.active=!0,e&&(this.timer.complete=o));var p=this,v=!1,m={};z(function(){h.call(p,t,function(t){t.active&&(v=!0,m[t.name]=t.nextStyle)}),v&&p.$el.css(m)})}}}function o(){if(this.timer&&this.timer.destroy(),this.active=!1,this.queue.length){var t=this.queue.shift();a.call(this,t.options,!0,t.args)}}function s(t){var e;this.timer&&this.timer.destroy(),this.queue=[],this.active=!1,"string"==typeof t?(e={})[t]=1:e="object"==(0,i.default)(t)&&null!=t?t:this.props,h.call(this,e,p),d.call(this)}function l(){s.call(this),this.el.style.display="none"}function f(){this.el.offsetHeight}function d(){var t,e,n=[];for(t in this.upstream&&n.push(this.upstream),this.props)(e=this.props[t]).active&&n.push(e.string);n=n.join(","),this.style!==n&&(this.style=n,this.el.style[D.transition.dom]=n)}function h(t,e,i){var a,o,s,u,c=e!==p,l={};for(a in t)s=t[a],a in K?(l.transform||(l.transform={}),l.transform[a]=s):(g.test(a)&&(a=n(a)),a in Y?l[a]=s:(u||(u={}),u[a]=s));for(a in l){if(s=l[a],!(o=this.props[a])){if(!c)continue;o=r.call(this,a)}e.call(this,o,s)}i&&u&&i.call(this,u)}function p(t){t.stop()}function m(t,e){t.set(e)}function w(t){this.$el.css(t)}function b(t,n){e[t]=function(){return this.children?function(t,e){var n,i=this.children.length;for(n=0;i>n;n++)t.apply(this.children[n],e);return this}.call(this,n,arguments):(this.el&&n.apply(this,arguments),this)}}e.init=function(e){if(this.$el=t(e),this.el=this.$el[0],this.props={},this.queue=[],this.style="",this.active=!1,B.keepInherited&&!B.fallback){var n=G(this.el,"transition");n&&!E.test(n)&&(this.upstream=n)}D.backface&&B.hideBackface&&X(this.el,D.backface.css,"hidden")},b("add",r),b("start",a),b("wait",function(t){t=u(t,0),this.active?this.queue.push({options:t}):(this.timer=new H({duration:t,context:this,complete:o}),this.active=!0)}),b("then",function(t){return this.active?(this.queue.push({options:t,args:arguments}),void(this.timer.complete=o)):c("No active transition timer. Use start() or wait() before then().")}),b("next",o),b("stop",s),b("set",function(t){s.call(this,t),h.call(this,t,m,w)}),b("show",function(t){"string"!=typeof t&&(t="block"),this.el.style.display=t}),b("hide",l),b("redraw",f),b("destroy",function(){s.call(this),t.removeData(this.el,v),this.$el=this.el=null})}),j=l(L,function(e){function n(e,n){var i=t.data(e,v)||t.data(e,v,new L.Bare);return i.el||i.init(e),n?i.start(n):i}e.init=function(e,i){var r=t(e);if(!r.length)return this;if(1===r.length)return n(r[0],i);var a=[];return r.each(function(t,e){a.push(n(e,i))}),this.children=a,this}}),W=l(function(t){function e(){var t=this.get();this.update("auto");var e=this.get();return this.update(t),e}function n(t){var e=/rgba?\((\d+),\s*(\d+),\s*(\d+)/.exec(t);return(e?a(e[1],e[2],e[3]):t).replace(/#(\w)(\w)(\w)$/,"#$1$1$2$2$3$3")}var r=500,o="ease",s=0;t.init=function(t,e,n,i){this.$el=t,this.el=t[0];var a=e[0];n[2]&&(a=n[2]),Z[a]&&(a=Z[a]),this.name=a,this.type=n[1],this.duration=u(e[1],this.duration,r),this.ease=function(t,e,n){return void 0!==e&&(n=e),t in f?t:n}(e[2],this.ease,o),this.delay=u(e[3],this.delay,s),this.span=this.duration+this.delay,this.active=!1,this.nextStyle=null,this.auto=O.test(this.name),this.unit=i.unit||this.unit||B.defaultUnit,this.angle=i.angle||this.angle||B.defaultAngle,B.fallback||i.fallback?this.animate=this.fallback:(this.animate=this.transition,this.string=this.name+T+this.duration+"ms"+("ease"!=this.ease?T+f[this.ease][0]:"")+(this.delay?T+this.delay+"ms":""))},t.set=function(t){t=this.convert(t,this.type),this.update(t),this.redraw()},t.transition=function(t){this.active=!0,t=this.convert(t,this.type),this.auto&&("auto"==this.el.style[this.name]&&(this.update(this.get()),this.redraw()),"auto"==t&&(t=e.call(this))),this.nextStyle=t},t.fallback=function(t){var n=this.el.style[this.name]||this.convert(this.get(),this.type);t=this.convert(t,this.type),this.auto&&("auto"==n&&(n=this.convert(this.get(),this.type)),"auto"==t&&(t=e.call(this))),this.tween=new q({from:n,to:t,duration:this.duration,delay:this.delay,ease:this.ease,update:this.update,context:this})},t.get=function(){return G(this.el,this.name)},t.update=function(t){X(this.el,this.name,t)},t.stop=function(){(this.active||this.nextStyle)&&(this.active=!1,this.nextStyle=null,X(this.el,this.name,this.get()));var t=this.tween;t&&t.context&&t.destroy()},t.convert=function(t,e){if("auto"==t&&this.auto)return t;var r,a="number"==typeof t,o="string"==typeof t;switch(e){case w:if(a)return t;if(o&&""===t.replace(m,""))return+t;r="number(unitless)";break;case b:if(o){if(""===t&&this.original)return this.original;if(e.test(t))return"#"==t.charAt(0)&&7==t.length?t:n(t)}r="hex or rgb string";break;case y:if(a)return t+this.unit;if(o&&e.test(t))return t;r="number(px) or string(unit)";break;case x:if(a)return t+this.unit;if(o&&e.test(t))return t;r="number(px) or string(unit or %)";break;case k:if(a)return t+this.angle;if(o&&e.test(t))return t;r="number(deg) or string(angle)";break;case _:if(a)return t;if(o&&x.test(t))return t;r="number(unitless) or string(unit or %)"}return function(t,e){c("Type warning: Expected: ["+t+"] Got: ["+(0,i.default)(e)+"] "+e)}(r,t),t},t.redraw=function(){this.el.offsetHeight}}),F=l(W,function(t,e){t.init=function(){e.init.apply(this,arguments),this.original||(this.original=this.convert(this.get(),b))}}),N=l(W,function(t,e){t.init=function(){e.init.apply(this,arguments),this.animate=this.fallback},t.get=function(){return this.$el[this.name]()},t.update=function(t){this.$el[this.name](t)}}),$=l(W,function(t,e){function n(t,e){var n,i,r,a,o;for(n in t)r=(a=K[n])[0],i=a[1]||n,o=this.convert(t[n],r),e.call(this,i,o,r)}t.init=function(){e.init.apply(this,arguments),this.current||(this.current={},K.perspective&&B.perspective&&(this.current.perspective=B.perspective,X(this.el,this.name,this.style(this.current)),this.redraw()))},t.set=function(t){n.call(this,t,function(t,e){this.current[t]=e}),X(this.el,this.name,this.style(this.current)),this.redraw()},t.transition=function(t){var e=this.values(t);this.tween=new U({current:this.current,values:e,duration:this.duration,delay:this.delay,ease:this.ease});var n,i={};for(n in this.current)i[n]=n in e?e[n]:this.current[n];this.active=!0,this.nextStyle=this.style(i)},t.fallback=function(t){var e=this.values(t);this.tween=new U({current:this.current,values:e,duration:this.duration,delay:this.delay,ease:this.ease,update:this.update,context:this})},t.update=function(){X(this.el,this.name,this.style(this.current))},t.style=function(t){var e,n="";for(e in t)n+=e+"("+t[e]+") ";return n},t.values=function(t){var e,i={};return n.call(this,t,function(t,n,r){i[t]=n,void 0===this.current[t]&&(e=0,~t.indexOf("scale")&&(e=1),this.current[t]=this.convert(e,r))}),i}}),q=l(function(e){function n(){var t,e,i,r=u.length;if(r)for(z(n),e=P(),t=r;t--;)(i=u[t])&&i.render(e)}var i={ease:f.ease[1],from:0,to:1};e.init=function(t){this.duration=t.duration||0,this.delay=t.delay||0;var e=t.ease||i.ease;f[e]&&(e=f[e][1]),"function"!=typeof e&&(e=i.ease),this.ease=e,this.update=t.update||o,this.complete=t.complete||o,this.context=t.context||this,this.name=t.name;var n=t.from,r=t.to;void 0===n&&(n=i.from),void 0===r&&(r=i.to),this.unit=t.unit||"","number"==typeof n&&"number"==typeof r?(this.begin=n,this.change=r-n):this.format(r,n),this.value=this.begin+this.unit,this.start=P(),!1!==t.autoplay&&this.play()},e.play=function(){var t;this.active||(this.start||(this.start=P()),this.active=!0,t=this,1===u.push(t)&&z(n))},e.stop=function(){var e,n,i;this.active&&(this.active=!1,e=this,(i=t.inArray(e,u))>=0&&(n=u.slice(i+1),u.length=i,n.length&&(u=u.concat(n))))},e.render=function(t){var e,n=t-this.start;if(this.delay){if(n<=this.delay)return;n-=this.delay}if(n').attr("href","https://webflow.com?utm_campaign=brandjs"),i=t("").attr("src","https://d3e54v103j8qbb.cloudfront.net/img/webflow-badge-icon.f67cd735e3.svg").attr("alt","").css({marginRight:"8px",width:"16px"}),o=t("").attr("src","https://d1otoma47x30pg.cloudfront.net/img/webflow-badge-text.6faa6a38cd.svg").attr("alt","Made in Webflow"),n.append(i,o),n[0]),d(),setTimeout(d,500),t(r).off(l,f).on(l,f))},n})},function(t,e,n){"use strict";var i=window.$,r=n(1)&&i.tram; +/*! + * Webflow._ (aka) Underscore.js 1.6.0 (custom build) + * _.each + * _.map + * _.find + * _.filter + * _.any + * _.contains + * _.delay + * _.defer + * _.throttle (webflow) + * _.debounce + * _.keys + * _.has + * _.now + * + * http://underscorejs.org + * (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Underscore may be freely distributed under the MIT license. + * @license MIT + */ +t.exports=function(){var t={VERSION:"1.6.0-Webflow"},e={},n=Array.prototype,i=Object.prototype,a=Function.prototype,o=(n.push,n.slice),s=(n.concat,i.toString,i.hasOwnProperty),u=n.forEach,c=n.map,l=(n.reduce,n.reduceRight,n.filter),f=(n.every,n.some),d=n.indexOf,h=(n.lastIndexOf,Array.isArray,Object.keys),p=(a.bind,t.each=t.forEach=function(n,i,r){if(null==n)return n;if(u&&n.forEach===u)n.forEach(i,r);else if(n.length===+n.length){for(var a=0,o=n.length;a/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var m=/(.)^/,g={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},w=/\\|'|\r|\n|\u2028|\u2029/g,b=function(t){return"\\"+g[t]};return t.template=function(e,n,i){!n&&i&&(n=i),n=t.defaults({},n,t.templateSettings);var r=RegExp([(n.escape||m).source,(n.interpolate||m).source,(n.evaluate||m).source].join("|")+"|$","g"),a=0,o="__p+='";e.replace(r,function(t,n,i,r,s){return o+=e.slice(a,s).replace(w,b),a=s+t.length,n?o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":i?o+="'+\n((__t=("+i+"))==null?'':__t)+\n'":r&&(o+="';\n"+r+"\n__p+='"),t}),o+="';\n",n.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{var s=new Function(n.variable||"obj","_",o)}catch(t){throw t.source=o,t}var u=function(e){return s.call(this,e,t)},c=n.variable||"obj";return u.source="function("+c+"){\n"+o+"}",u},t}()},function(t,e){function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(e){return"function"==typeof Symbol&&"symbol"===n(Symbol.iterator)?t.exports=i=function(t){return n(t)}:t.exports=i=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":n(t)},i(e)}t.exports=i},function(t,e,n){"use strict";var i=n(0);i.define("edit",t.exports=function(t,e,n){if(n=n||{},(i.env("test")||i.env("frame"))&&!n.fixture&&!function(){try{return window.top.__Cypress__}catch(t){return!1}}())return{exit:1};var r,a=t(window),o=t(document.documentElement),s=document.location,u="hashchange",c=n.load||function(){r=!0,window.WebflowEditor=!0,a.off(u,f),function(t){var e=window.document.createElement("iframe");e.src="https://webflow.com/site/third-party-cookie-check.html",e.style.display="none",e.sandbox="allow-scripts allow-same-origin";var n=function n(i){"WF_third_party_cookies_unsupported"===i.data?(g(e,n),t(!1)):"WF_third_party_cookies_supported"===i.data&&(g(e,n),t(!0))};e.onerror=function(){g(e,n),t(!1)},window.addEventListener("message",n,!1),window.document.body.appendChild(e)}(function(e){t.ajax({url:m("https://editor-api.webflow.com/api/editor/view"),data:{siteId:o.attr("data-wf-site")},xhrFields:{withCredentials:!0},dataType:"json",crossDomain:!0,success:d(e)})})},l=!1;try{l=localStorage&&localStorage.getItem&&localStorage.getItem("WebflowEditor")}catch(t){}function f(){r||/\?edit/.test(s.hash)&&c()}function d(t){return function(e){e?(e.thirdPartyCookiesSupported=t,h(v(e.bugReporterScriptPath),function(){h(v(e.scriptPath),function(){window.WebflowEditor(e)})})):console.error("Could not load editor data")}}function h(e,n){t.ajax({type:"GET",url:e,dataType:"script",cache:!0}).then(n,p)}function p(t,e,n){throw console.error("Could not load editor script: "+e),n}function v(t){return t.indexOf("//")>=0?t:m("https://editor-api.webflow.com"+t)}function m(t){return t.replace(/([^:])\/\//g,"$1/")}function g(t,e){window.removeEventListener("message",e,!1),t.remove()}return l?c():s.search?(/[?&](edit)(?:[=&?]|$)/.test(s.search)||/\?edit$/.test(s.href))&&c():a.on(u,f).triggerHandler(u),{}})},function(t,e,n){"use strict";var i=n(0);i.define("links",t.exports=function(t,e){var n,r,a,o={},s=t(window),u=i.env(),c=window.location,l=document.createElement("a"),f="w--current",d=/index\.(html|php)$/,h=/\/$/;function p(e){var i=n&&e.getAttribute("href-disabled")||e.getAttribute("href");if(l.href=i,!(i.indexOf(":")>=0)){var o=t(e);if(l.hash.length>1&&l.host+l.pathname===c.host+c.pathname){if(!/^#[a-zA-Z0-9\-\_]+$/.test(l.hash))return;var s=t(l.hash);s.length&&r.push({link:o,sec:s,active:!1})}else if("#"!==i&&""!==i){var u=l.href===c.href||i===a||d.test(i)&&h.test(a);m(o,f,u)}}}function v(){var t=s.scrollTop(),n=s.height();e.each(r,function(e){var i=e.link,r=e.sec,a=r.offset().top,o=r.outerHeight(),s=.5*n,u=r.is(":visible")&&a+o-s>=t&&a+s<=t+n;e.active!==u&&(e.active=u,m(i,f,u))})}function m(t,e,n){var i=t.hasClass(e);n&&i||(n||i)&&(n?t.addClass(e):t.removeClass(e))}return o.ready=o.design=o.preview=function(){n=u&&i.env("design"),a=i.env("slug")||c.pathname||"",i.scroll.off(v),r=[];for(var t=document.links,e=0;e .header, "+l+" > .w-nav:not([data-no-scroll])"),d="fixed"===f.css("position")?f.outerHeight():0;a.setTimeout(function(){!function(e,n){var i=t(a).scrollTop(),r=e.offset().top-n;if("mid"===e.data("scroll")){var o=t(a).height()-n,s=e.outerHeight();s0)&&(u=e)}),Date.now||(Date.now=function(){return(new Date).getTime()});var c=Date.now(),l=a.requestAnimationFrame||a.mozRequestAnimationFrame||a.webkitRequestAnimationFrame||function(t){a.setTimeout(t,15)},f=(472.143*Math.log(Math.abs(i-r)+125)-2e3)*u;!function t(){var e=Date.now()-c;a.scroll(0,function(t,e,n,i){if(n>i)return e;return t+(e-t)*(r=n/i,r<.5?4*r*r*r:(r-1)*(2*r-2)*(2*r-2)+1);var r}(i,r,e,f)),e<=f&&l(t)}()}(r,d)},n?0:300)}(c,n)}}return{ready:function(){var t=n.CLICK_EMPTY,i=n.CLICK_SCROLL;e=o.href.split("#")[0],r.on(i,l,f),r.on(t,c,function(t){t.preventDefault()})}}})},function(t,e,n){"use strict";n(0).define("touch",t.exports=function(t){var e={},n=window.getSelection;function i(e){var i,r,a=!1,o=!1,s=Math.min(Math.round(.04*window.innerWidth),40);function u(t){var e=t.touches;e&&e.length>1||(a=!0,e?(o=!0,i=e[0].clientX):i=t.clientX,r=i)}function c(e){if(a){if(o&&"mousemove"===e.type)return e.preventDefault(),void e.stopPropagation();var i=e.touches,u=i?i[0].clientX:e.clientX,c=u-r;r=u,Math.abs(c)>s&&n&&""===String(n())&&(!function(e,n,i){var r=t.Event(e,{originalEvent:n});t(n.target).trigger(r,i)}("swipe",e,{direction:c>0?"right":"left"}),f())}}function l(t){if(a)return a=!1,o&&"mouseup"===t.type?(t.preventDefault(),t.stopPropagation(),void(o=!1)):void 0}function f(){a=!1}e.addEventListener("touchstart",u,!1),e.addEventListener("touchmove",c,!1),e.addEventListener("touchend",l,!1),e.addEventListener("touchcancel",f,!1),e.addEventListener("mousedown",u,!1),e.addEventListener("mousemove",c,!1),e.addEventListener("mouseup",l,!1),e.addEventListener("mouseout",f,!1),this.destroy=function(){e.removeEventListener("touchstart",u,!1),e.removeEventListener("touchmove",c,!1),e.removeEventListener("touchend",l,!1),e.removeEventListener("touchcancel",f,!1),e.removeEventListener("mousedown",u,!1),e.removeEventListener("mousemove",c,!1),e.removeEventListener("mouseup",l,!1),e.removeEventListener("mouseout",f,!1),e=null}}return t.event.special.tap={bindType:"click",delegateType:"click"},e.init=function(e){return(e="string"==typeof e?t(e).get(0):e)?new i(e):null},e.instance=e.init(document),e})},function(t,e,n){"use strict";var i=n(2)(n(13)),r=n(0);r.define("forms",t.exports=function(t,e){var n,a,o,s,u,c={},l=t(document),f=window.location,d=window.XDomainRequest&&!window.atob,h=".w-form",p=/e(-)?mail/i,v=/^\S+@\S+$/,m=window.alert,g=r.env(),w=/list-manage[1-9]?.com/i,b=e.debounce(function(){m("Oops! This page has improperly configured forms. Please contact your website administrator to fix this issue.")},100);function y(e,n){var i=t(n),r=t.data(n,h);r||(r=t.data(n,h,{form:i})),x(r);var o=i.closest("div.w-form");r.done=o.find("> .w-form-done"),r.fail=o.find("> .w-form-fail"),r.fileUploads=o.find(".w-file-upload"),r.fileUploads.each(function(e){!function(e,n){if(!n.fileUploads||!n.fileUploads[e])return;var i,r=t(n.fileUploads[e]),a=r.find("> .w-file-upload-default"),o=r.find("> .w-file-upload-uploading"),s=r.find("> .w-file-upload-success"),c=r.find("> .w-file-upload-error"),l=a.find(".w-file-upload-input"),f=a.find(".w-file-upload-label"),d=f.children(),h=c.find(".w-file-upload-error-msg"),p=s.find(".w-file-upload-file"),v=s.find(".w-file-remove-link"),m=p.find(".w-file-upload-file-name"),w=h.attr("data-w-size-error"),b=h.attr("data-w-type-error"),y=h.attr("data-w-generic-error");if(g)l.on("click",function(t){t.preventDefault()}),f.on("click",function(t){t.preventDefault()}),d.on("click",function(t){t.preventDefault()});else{v.on("click",function(){l.removeAttr("data-value"),l.val(""),m.html(""),a.toggle(!0),s.toggle(!1)}),l.on("change",function(r){(i=r.target&&r.target.files&&r.target.files[0])&&(a.toggle(!1),c.toggle(!1),o.toggle(!0),m.text(i.name),A()||k(n),n.fileUploads[e].uploading=!0,function(e,n){var i={name:e.name,size:e.size};t.ajax({type:"POST",url:u,data:i,dataType:"json",crossDomain:!0}).done(function(t){n(null,t)}).fail(function(t){n(t)})}(i,O))});var _=f.outerHeight();l.height(_),l.width(1)}function E(t){var i=t.responseJSON&&t.responseJSON.msg,r=y;"string"==typeof i&&0===i.indexOf("InvalidFileTypeError")?r=b:"string"==typeof i&&0===i.indexOf("MaxFileSizeError")&&(r=w),h.text(r),l.removeAttr("data-value"),l.val(""),o.toggle(!1),a.toggle(!0),c.toggle(!0),n.fileUploads[e].uploading=!1,A()||x(n)}function O(e,n){if(e)return E(e);var r=n.fileName,a=n.postData,o=n.fileId,s=n.s3Url;l.attr("data-value",o),function(e,n,i,r,a){var o=new FormData;for(var s in n)o.append(s,n[s]);o.append("file",i,r),t.ajax({type:"POST",url:e,data:o,processData:!1,contentType:!1}).done(function(){a(null)}).fail(function(t){a(t)})}(s,a,i,r,T)}function T(t){if(t)return E(t);o.toggle(!1),s.css("display","inline-block"),n.fileUploads[e].uploading=!1,A()||x(n)}function A(){var t=n.fileUploads&&n.fileUploads.toArray()||[];return t.some(function(t){return t.uploading})}}(e,r)});var s=r.action=i.attr("action");r.handler=null,r.redirect=i.attr("data-redirect"),w.test(s)?r.handler=O:s||(a?r.handler=E:b())}function x(t){var e=t.btn=t.form.find(':input[type="submit"]');t.wait=t.btn.attr("data-wait")||null,t.success=!1,e.prop("disabled",!1),t.label&&e.val(t.label)}function k(t){var e=t.btn,n=t.wait;e.prop("disabled",!0),n&&(t.label=e.val(),e.val(n))}function _(e,n){var i=null;return n=n||{},e.find(':input:not([type="submit"]):not([type="file"])').each(function(r,a){var o=t(a),s=o.attr("type"),u=o.attr("data-name")||o.attr("name")||"Field "+(r+1),c=o.val();if("checkbox"===s)c=o.is(":checked");else if("radio"===s){if(null===n[u]||"string"==typeof n[u])return;c=e.find('input[name="'+o.attr("name")+'"]:checked').val()||null}"string"==typeof c&&(c=t.trim(c)),n[u]=c,i=i||function(t,e,n,i){var r=null;"password"===e?r="Passwords cannot be submitted.":t.attr("required")?i?p.test(t.attr("type"))&&(v.test(i)||(r="Please enter a valid email address for: "+n)):r="Please fill out the required field: "+n:"g-recaptcha-response"!==n||i||(r="Please confirm you’re not a robot.");return r}(o,s,u,c)}),i}function E(e){x(e);var n=e.form,i={name:n.attr("data-name")||n.attr("name")||"Untitled Form",source:f.href,test:r.env(),fields:{},fileUploads:{},dolphin:/pass[\s-_]?(word|code)|secret|login|credentials/i.test(n.html())};A(e);var o=_(n,i.fields);if(o)return m(o);i.fileUploads=function(e){var n={};return e.find(':input[type="file"]').each(function(e,i){var r=t(i),a=r.attr("data-name")||r.attr("name")||"File "+(e+1),o=r.attr("data-value");"string"==typeof o&&(o=t.trim(o)),n[a]=o}),n}(n),k(e),a?t.ajax({url:s,type:"POST",data:i,dataType:"json",crossDomain:!0}).done(function(t){t&&200===t.code&&(e.success=!0),T(e)}).fail(function(){T(e)}):T(e)}function O(n){x(n);var i=n.form,r={};if(!/^https/.test(f.href)||/^https/.test(n.action)){A(n);var a,o=_(i,r);if(o)return m(o);k(n),e.each(r,function(t,e){p.test(e)&&(r.EMAIL=t),/^((full[ _-]?)?name)$/i.test(e)&&(a=t),/^(first[ _-]?name)$/i.test(e)&&(r.FNAME=t),/^(last[ _-]?name)$/i.test(e)&&(r.LNAME=t)}),a&&!r.FNAME&&(a=a.split(" "),r.FNAME=a[0],r.LNAME=r.LNAME||a[1]);var s=n.action.replace("/post?","/post-json?")+"&c=?",u=s.indexOf("u=")+2;u=s.substring(u,s.indexOf("&",u));var c=s.indexOf("id=")+3;c=s.substring(c,s.indexOf("&",c)),r["b_"+u+"_"+c]="",t.ajax({url:s,data:r,dataType:"jsonp"}).done(function(t){n.success="success"===t.result||/already/.test(t.msg),n.success||console.info("MailChimp error: "+t.msg),T(n)}).fail(function(){T(n)})}else i.attr("method","post")}function T(t){var e=t.form,n=t.redirect,i=t.success;i&&n?r.location(n):(t.done.toggle(i),t.fail.toggle(!i),e.toggle(!i),x(t))}function A(t){t.evt&&t.evt.preventDefault(),t.evt=null}return c.ready=c.design=c.preview=function(){!function(){a=t("html").attr("data-wf-site"),s="https://webflow.com/api/v1/form/"+a,d&&s.indexOf("https://webflow.com")>=0&&(s=s.replace("https://webflow.com","http://formdata.webflow.com"));if(u="".concat(s,"/signFile"),!(n=t(h+" form")).length)return;n.each(y)}(),g||o||function(){o=!0,l.on("submit",h+" form",function(e){var n=t.data(this,h);n.handler&&(n.evt=e,n.handler(n))});var e=[["checkbox",".w-checkbox-input"],["radio",".w-radio-input"]];l.on("change",h+' form input[type="checkbox"]:not(.w-checkbox-input)',function(e){t(e.target).siblings(".w-checkbox-input").toggleClass("w--redirected-checked")}),l.on("change",h+' form input[type="radio"]',function(e){t('input[name="'.concat(e.target.name,'"]:not(').concat(".w-checkbox-input",")")).map(function(e,n){return t(n).siblings(".w-radio-input").removeClass("w--redirected-checked")});var n=t(e.target);n.hasClass("w-radio-input")||n.siblings(".w-radio-input").addClass("w--redirected-checked")}),e.forEach(function(e){var n=(0,i.default)(e,2),r=n[0],a=n[1];l.on("focus",h+' form input[type="'.concat(r,'"]:not(')+a+")",function(e){t(e.target).siblings(a).addClass("w--redirected-focus")}),l.on("blur",h+' form input[type="'.concat(r,'"]:not(')+a+")",function(e){t(e.target).siblings(a).removeClass("w--redirected-focus")})})}()},c})},function(t,e,n){var i=n(14),r=n(15),a=n(16);t.exports=function(t,e){return i(t)||r(t,e)||a()}},function(t,e){t.exports=function(t){if(Array.isArray(t))return t}},function(t,e){t.exports=function(t,e){var n=[],i=!0,r=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(i=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);i=!0);}catch(t){r=!0,a=t}finally{try{i||null==s.return||s.return()}finally{if(r)throw a}}return n}},function(t,e){t.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}},function(t,e,n){"use strict";var i=n(0),r=n(3),a={ARROW_LEFT:37,ARROW_UP:38,ARROW_RIGHT:39,ARROW_DOWN:40,ESCAPE:27,SPACE:32,ENTER:13,HOME:36,END:35};i.define("navbar",t.exports=function(t,e){var n,o,s,u,c={},l=t.tram,f=t(window),d=t(document),h=e.debounce,p=i.env(),v='
',m=".w-nav",g="w--open",w="w--nav-dropdown-open",b="w--nav-dropdown-toggle-open",y="w--nav-dropdown-list-open",x="w--nav-link-open",k=r.triggers,_=t();function E(){i.resize.off(O)}function O(){o.each(P)}function T(n,i){var r=t(i),o=t.data(i,m);o||(o=t.data(i,m,{open:!1,el:r,config:{},selectedIdx:-1})),o.menu=r.find(".w-nav-menu"),o.links=o.menu.find(".w-nav-link"),o.dropdowns=o.menu.find(".w-dropdown"),o.dropdownToggle=o.menu.find(".w-dropdown-toggle"),o.dropdownList=o.menu.find(".w-dropdown-list"),o.button=r.find(".w-nav-button"),o.container=r.find(".w-container"),o.overlayContainerId="w-nav-overlay-"+n,o.outside=function(e){e.outside&&d.off("click"+m,e.outside);return function(n){var i=t(n.target);u&&i.closest(".w-editor-bem-EditorOverlay").length||z(e,i)}}(o);var c=r.find(".w-nav-brand");c&&"/"===c.attr("href")&&null==c.attr("aria-label")&&c.attr("aria-label","home"),o.button.attr("style","-webkit-user-select: text;"),null==o.button.attr("aria-label")&&o.button.attr("aria-label","menu"),o.button.attr("role","button"),o.button.attr("tabindex","0"),o.button.attr("aria-controls",o.overlayContainerId),o.button.attr("aria-haspopup","menu"),o.button.attr("aria-expanded","false"),o.el.off(m),o.button.off(m),o.menu.off(m),C(o),s?(R(o),o.el.on("setting"+m,function(t){return function(n,i){i=i||{};var r=f.width();C(t),!0===i.open&&F(t,!0),!1===i.open&&$(t,!0),t.open&&e.defer(function(){r!==f.width()&&D(t)})}}(o))):(!function(e){if(e.overlay)return;e.overlay=t(v).appendTo(e.el),e.overlay.attr("id",e.overlayContainerId),e.parent=e.menu.parent(),$(e,!0)}(o),o.button.on("click"+m,I(o)),o.menu.on("click"+m,"a",M(o)),o.button.on("keydown"+m,function(t){return function(e){switch(e.keyCode){case a.SPACE:case a.ENTER:return I(t)(),e.preventDefault(),e.stopPropagation();case a.ESCAPE:return $(t),e.preventDefault(),e.stopPropagation();case a.ARROW_RIGHT:case a.ARROW_DOWN:case a.HOME:case a.END:return t.open?(e.keyCode===a.END?t.selectedIdx=t.links.length-1:t.selectedIdx=0,S(t),e.preventDefault(),e.stopPropagation()):(e.preventDefault(),e.stopPropagation())}}}(o)),o.el.on("keydown"+m,function(t){return function(e){if(t.open)switch(t.selectedIdx=t.links.index(document.activeElement),e.keyCode){case a.HOME:case a.END:return e.keyCode===a.END?t.selectedIdx=t.links.length-1:t.selectedIdx=0,S(t),e.preventDefault(),e.stopPropagation();case a.ESCAPE:return $(t),t.button.focus(),e.preventDefault(),e.stopPropagation();case a.ARROW_LEFT:case a.ARROW_UP:return t.selectedIdx=Math.max(-1,t.selectedIdx-1),S(t),e.preventDefault(),e.stopPropagation();case a.ARROW_RIGHT:case a.ARROW_DOWN:return t.selectedIdx=Math.min(t.links.length-1,t.selectedIdx+1),S(t),e.preventDefault(),e.stopPropagation()}}}(o))),P(n,i)}function A(e,n){var i=t.data(n,m);i&&(R(i),t.removeData(n,m))}function R(t){t.overlay&&($(t,!0),t.overlay.remove(),t.overlay=null)}function C(t){var n={},i=t.config||{},r=n.animation=t.el.attr("data-animation")||"default";n.animOver=/^over/.test(r),n.animDirect=/left$/.test(r)?-1:1,i.animation!==r&&t.open&&e.defer(D,t),n.easing=t.el.attr("data-easing")||"ease",n.easing2=t.el.attr("data-easing2")||"ease";var a=t.el.attr("data-duration");n.duration=null!=a?Number(a):400,n.docHeight=t.el.attr("data-doc-height"),t.config=n}function S(t){if(t.links[t.selectedIdx]){var e=t.links[t.selectedIdx];e.focus(),M(e)}}function D(t){t.open&&($(t,!0),F(t,!0))}function I(t){return h(function(){t.open?$(t):F(t)})}function M(e){return function(n){var r=t(this).attr("href");i.validClick(n.currentTarget)?r&&0===r.indexOf("#")&&e.open&&$(e):n.preventDefault()}}c.ready=c.design=c.preview=function(){if(s=p&&i.env("design"),u=i.env("editor"),n=t(document.body),!(o=d.find(m)).length)return;o.each(T),E(),i.resize.on(O)},c.destroy=function(){_=t(),E(),o&&o.length&&o.each(A)};var z=h(function(t,e){if(t.open){var n=e.closest(".w-nav-menu");t.menu.is(n)||$(t)}});function P(e,n){var i=t.data(n,m),r=i.collapsed="none"!==i.button.css("display");if(!i.open||r||s||$(i,!0),i.container.length){var a=function(e){var n=e.container.css(L);"none"===n&&(n="");return function(e,i){(i=t(i)).css(L,""),"none"===i.css(L)&&i.css(L,n)}}(i);i.links.each(a),i.dropdowns.each(a)}i.open&&N(i)}var L="max-width";function j(t,e){e.setAttribute("data-nav-menu-open","")}function W(t,e){e.removeAttribute("data-nav-menu-open")}function F(t,e){if(!t.open){t.open=!0,t.menu.each(j),t.links.addClass(x),t.dropdowns.addClass(w),t.dropdownToggle.addClass(b),t.dropdownList.addClass(y),t.button.addClass(g);var n=t.config;"none"!==n.animation&&l.support.transform||(e=!0);var r=N(t),a=t.menu.outerHeight(!0),o=t.menu.outerWidth(!0),u=t.el.height(),c=t.el[0];if(P(0,c),k.intro(0,c),i.redraw.up(),s||d.on("click"+m,t.outside),e)p();else{var f="transform "+n.duration+"ms "+n.easing;if(t.overlay&&(_=t.menu.prev(),t.overlay.show().append(t.menu)),n.animOver)return l(t.menu).add(f).set({x:n.animDirect*o,height:r}).start({x:0}).then(p),void(t.overlay&&t.overlay.width(o));var h=u+a;l(t.menu).add(f).set({y:-h}).start({y:0}).then(p)}}function p(){t.button.attr("aria-expanded","true")}}function N(t){var e=t.config,i=e.docHeight?d.height():n.height();return e.animOver?t.menu.height(i):"fixed"!==t.el.css("position")&&(i-=t.el.outerHeight(!0)),t.overlay&&t.overlay.height(i),i}function $(t,e){if(t.open){t.open=!1,t.button.removeClass(g);var n=t.config;if(("none"===n.animation||!l.support.transform||n.duration<=0)&&(e=!0),k.outro(0,t.el[0]),d.off("click"+m,t.outside),e)return l(t.menu).stop(),void u();var i="transform "+n.duration+"ms "+n.easing2,r=t.menu.outerHeight(!0),a=t.menu.outerWidth(!0),o=t.el.height();if(n.animOver)l(t.menu).add(i).start({x:a*n.animDirect}).then(u);else{var s=o+r;l(t.menu).add(i).start({y:-s}).then(u)}}function u(){t.menu.height(""),l(t.menu).set({x:0,y:0}),t.menu.each(W),t.links.removeClass(x),t.dropdowns.removeClass(w),t.dropdownToggle.removeClass(b),t.dropdownList.removeClass(y),t.overlay&&t.overlay.children().length&&(_.length?t.menu.insertAfter(_):t.menu.prependTo(t.parent),t.overlay.attr("style","").hide()),t.el.triggerHandler("w-close"),t.button.attr("aria-expanded","false")}}return c})},function(t,e,n){"use strict";var i=window.jQuery,r={},a=[],o={reset:function(t,e){e.__wf_intro=null},intro:function(t,e){e.__wf_intro||(e.__wf_intro=!0,i(e).triggerHandler(r.types.INTRO))},outro:function(t,e){e.__wf_intro&&(e.__wf_intro=null,i(e).triggerHandler(r.types.OUTRO))}};r.triggers={},r.types={INTRO:"w-ix-intro.w-ix",OUTRO:"w-ix-outro.w-ix"},r.init=function(){for(var t=a.length,e=0;e',m='
',g=r.triggers;function w(){(n=d.find(p)).length&&(n.each(x),c=null,u||(b(),i.resize.on(y),i.redraw.on(l.redraw)))}function b(){i.resize.off(y),i.redraw.off(l.redraw)}function y(){n.filter(":visible").each(M)}function x(e,n){var i=t(n),r=t.data(n,p);r||(r=t.data(n,p,{index:0,depth:1,hasFocus:{keyboard:!1,mouse:!1},el:i,config:{}})),r.mask=i.children(".w-slider-mask"),r.left=i.children(".w-slider-arrow-left"),r.right=i.children(".w-slider-arrow-right"),r.nav=i.children(".w-slider-nav"),r.slides=r.mask.children(".w-slide"),r.slides.each(g.reset),c&&(r.maskWidth=0),void 0===i.attr("role")&&i.attr("role","region"),void 0===i.attr("aria-label")&&i.attr("aria-label","carousel");var a=r.mask.attr("id");if(a||(a="w-slider-mask-"+e,r.mask.attr("id",a)),r.ariaLiveLabel=t(m).appendTo(r.mask),r.left.attr("role","button"),r.left.attr("tabindex","0"),r.left.attr("aria-controls",a),void 0===r.left.attr("aria-label")&&r.left.attr("aria-label","previous slide"),r.right.attr("role","button"),r.right.attr("tabindex","0"),r.right.attr("aria-controls",a),void 0===r.right.attr("aria-label")&&r.right.attr("aria-label","next slide"),!f.support.transform)return r.left.hide(),r.right.hide(),r.nav.hide(),void(u=!0);r.el.off(p),r.left.off(p),r.right.off(p),r.nav.off(p),k(r),s?(r.el.on("setting"+p,S(r)),C(r),r.hasTimer=!1):(r.el.on("swipe"+p,S(r)),r.left.on("click"+p,T(r)),r.right.on("click"+p,A(r)),r.left.on("keydown"+p,O(r,T)),r.right.on("keydown"+p,O(r,A)),r.nav.on("keydown"+p,"> div",S(r)),r.config.autoplay&&!r.hasTimer&&(r.hasTimer=!0,r.timerCount=1,R(r)),r.el.on("mouseenter"+p,E(r,!0,"mouse")),r.el.on("focusin"+p,E(r,!0,"keyboard")),r.el.on("mouseleave"+p,E(r,!1,"mouse")),r.el.on("focusout"+p,E(r,!1,"keyboard"))),r.nav.on("click"+p,"> div",S(r)),h||r.mask.contents().filter(function(){return 3===this.nodeType}).remove();var o=i.filter(":hidden");o.show();var l=i.parents(":hidden");l.show(),M(e,n),o.css("display",""),l.css("display","")}function k(t){var e={crossOver:0};e.animation=t.el.attr("data-animation")||"slide","outin"===e.animation&&(e.animation="cross",e.crossOver=.5),e.easing=t.el.attr("data-easing")||"ease";var n=t.el.attr("data-duration");if(e.duration=null!=n?parseInt(n,10):500,_(t.el.attr("data-infinite"))&&(e.infinite=!0),_(t.el.attr("data-disable-swipe"))&&(e.disableSwipe=!0),_(t.el.attr("data-hide-arrows"))?e.hideArrows=!0:t.config.hideArrows&&(t.left.show(),t.right.show()),_(t.el.attr("data-autoplay"))){e.autoplay=!0,e.delay=parseInt(t.el.attr("data-delay"),10)||2e3,e.timerMax=parseInt(t.el.attr("data-autoplay-limit"),10);var i="mousedown"+p+" touchstart"+p;s||t.el.off(i).one(i,function(){C(t)})}var r=t.right.width();e.edge=r?r+40:100,t.config=e}function _(t){return"1"===t||"true"===t}function E(e,n,i){return function(r){if(n)e.hasFocus[i]=n;else{if(t.contains(e.el.get(0),r.relatedTarget))return;if(e.hasFocus[i]=n,e.hasFocus.mouse&&"keyboard"===i||e.hasFocus.keyboard&&"mouse"===i)return}n?(e.ariaLiveLabel.attr("aria-live","polite"),e.hasTimer&&C(e)):(e.ariaLiveLabel.attr("aria-live","off"),e.hasTimer&&R(e))}}function O(t,e){return function(n){switch(n.keyCode){case a.SPACE:case a.ENTER:return e(t)(),n.preventDefault(),n.stopPropagation()}}}function T(t){return function(){I(t,{index:t.index-1,vector:-1})}}function A(t){return function(){I(t,{index:t.index+1,vector:1})}}function R(t){C(t);var e=t.config,n=e.timerMax;n&&t.timerCount++>n||(t.timerId=window.setTimeout(function(){null==t.timerId||s||(A(t)(),R(t))},e.delay))}function C(t){window.clearTimeout(t.timerId),t.timerId=null}function S(n){return function(r,o){o=o||{};var u=n.config;if(s&&"setting"===r.type){if("prev"===o.select)return T(n)();if("next"===o.select)return A(n)();if(k(n),z(n),null==o.select)return;!function(n,i){var r=null;i===n.slides.length&&(w(),z(n)),e.each(n.anchors,function(e,n){t(e.els).each(function(e,a){t(a).index()===i&&(r=n)})}),null!=r&&I(n,{index:r,immediate:!0})}(n,o.select)}else{if("swipe"===r.type){if(u.disableSwipe)return;if(i.env("editor"))return;return"left"===o.direction?A(n)():"right"===o.direction?T(n)():void 0}if(n.nav.has(r.target).length){var c=t(r.target).index();if("click"===r.type&&I(n,{index:c}),"keydown"===r.type)switch(r.keyCode){case a.ENTER:case a.SPACE:I(n,{index:c}),r.preventDefault();break;case a.ARROW_LEFT:case a.ARROW_UP:D(n.nav,Math.max(c-1,0)),r.preventDefault();break;case a.ARROW_RIGHT:case a.ARROW_DOWN:D(n.nav,Math.min(c+1,n.pages)),r.preventDefault();break;case a.HOME:D(n.nav,0),r.preventDefault();break;case a.END:D(n.nav,n.pages),r.preventDefault();break;default:return}}}}}function D(t,e){var n=t.children().eq(e).focus();t.children().not(n)}function I(e,n){n=n||{};var i=e.config,r=e.anchors;e.previous=e.index;var a=n.index,u={};a<0?(a=r.length-1,i.infinite&&(u.x=-e.endX,u.from=0,u.to=r[0].width)):a>=r.length&&(a=0,i.infinite&&(u.x=r[r.length-1].width,u.from=-r[r.length-1].x,u.to=u.from-u.x)),e.index=a;var l=e.nav.children().eq(a).addClass("w-active").attr("aria-selected","true").attr("tabindex","0");e.nav.children().not(l).removeClass("w-active").attr("aria-selected","false").attr("tabindex","-1"),i.hideArrows&&(e.index===r.length-1?e.right.hide():e.right.show(),0===e.index?e.left.hide():e.left.show());var d=e.offsetX||0,h=e.offsetX=-r[e.index].x,p={x:h,opacity:1,visibility:""},v=t(r[e.index].els),m=t(r[e.previous]&&r[e.previous].els),w=e.slides.not(v),b=i.animation,y=i.easing,x=Math.round(i.duration),k=n.vector||(e.index>e.previous?1:-1),_="opacity "+x+"ms "+y,E="transform "+x+"ms "+y;if(v.find(o).removeAttr("tabindex"),v.removeAttr("aria-hidden"),v.find("*").removeAttr("aria-hidden"),w.find(o).attr("tabindex","-1"),w.attr("aria-hidden","true"),w.find("*").attr("aria-hidden","true"),s||(v.each(g.intro),w.each(g.outro)),n.immediate&&!c)return f(v).set(p),void A();if(e.index!==e.previous){if(e.ariaLiveLabel.text("Slide ".concat(a+1," of ").concat(r.length,".")),"cross"===b){var O=Math.round(x-x*i.crossOver),T=Math.round(x-O);return _="opacity "+O+"ms "+y,f(m).set({visibility:""}).add(_).start({opacity:0}),void f(v).set({visibility:"",x:h,opacity:0,zIndex:e.depth++}).add(_).wait(T).then({opacity:1}).then(A)}if("fade"===b)return f(m).set({visibility:""}).stop(),void f(v).set({visibility:"",x:h,opacity:0,zIndex:e.depth++}).add(_).start({opacity:1}).then(A);if("over"===b)return p={x:e.endX},f(m).set({visibility:""}).stop(),void f(v).set({visibility:"",zIndex:e.depth++,x:h+r[e.index].width*k}).add(E).start({x:h}).then(A);i.infinite&&u.x?(f(e.slides.not(m)).set({visibility:"",x:u.x}).add(E).start({x:h}),f(m).set({visibility:"",x:u.from}).add(E).start({x:u.to}),e.shifted=m):(i.infinite&&e.shifted&&(f(e.shifted).set({visibility:"",x:d}),e.shifted=null),f(e.slides).set({visibility:""}).add(E).start({x:h}))}function A(){v=t(r[e.index].els),w=e.slides.not(v),"slide"!==b&&(p.visibility="hidden"),f(w).set(p)}}function M(e,n){var i=t.data(n,p);if(i)return function(t){var e=t.mask.width();if(t.maskWidth!==e)return t.maskWidth=e,!0;return!1}(i)?z(i):void(s&&function(e){var n=0;if(e.slides.each(function(e,i){n+=t(i).outerWidth(!0)}),e.slidesWidth!==n)return e.slidesWidth=n,!0;return!1}(i)&&z(i))}function z(e){var n=1,i=0,r=0,a=0,o=e.maskWidth,u=o-e.config.edge;u<0&&(u=0),e.anchors=[{els:[],x:0,width:0}],e.slides.each(function(s,c){r-i>u&&(n++,i+=o,e.anchors[n-1]={els:[],x:r,width:0}),a=t(c).outerWidth(!0),r+=a,e.anchors[n-1].width+=a,e.anchors[n-1].els.push(c);var l=s+1+" of "+e.slides.length;t(c).attr("aria-label",l),t(c).attr("role","group")}),e.endX=r,s&&(e.pages=null),e.nav.length&&e.pages!==n&&(e.pages=n,function(e){var n,i=[],r=e.el.attr("data-nav-spacing");r&&(r=parseFloat(r)+"px");for(var a=0,o=e.pages;a=n&&(c=n-1),I(e,{immediate:!0,index:c})}return l.ready=function(){s=i.env("design"),w()},l.design=function(){s=!0,w()},l.preview=function(){s=!1,w()},l.redraw=function(){c=!0,w()},l.destroy=b,l})}]); \ No newline at end of file diff --git a/home/stig/projects/qsgen3/output/static/css/webfont.js b/home/stig/projects/qsgen3/output/static/css/webfont.js new file mode 100644 index 0000000..3e95a6c --- /dev/null +++ b/home/stig/projects/qsgen3/output/static/css/webfont.js @@ -0,0 +1,33 @@ +/* + * Copyright 2016 Small Batch, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* Web Font Loader v1.6.26 - (c) Adobe Systems, Google. License: Apache 2.0 */(function(){function aa(a,b,c){return a.call.apply(a.bind,arguments)}function ba(a,b,c){if(!a)throw Error();if(2=b.f?e():a.fonts.load(fa(b.a),b.h).then(function(a){1<=a.length?d():setTimeout(k,25)},function(){e()})}k()}),e=new Promise(function(a,d){setTimeout(d,b.f)});Promise.race([e,d]).then(function(){b.g(b.a)},function(){b.j(b.a)})};function R(a,b,c,d,e,f,g){this.v=a;this.B=b;this.c=c;this.a=d;this.s=g||"BESbswy";this.f={};this.w=e||3E3;this.u=f||null;this.o=this.j=this.h=this.g=null;this.g=new N(this.c,this.s);this.h=new N(this.c,this.s);this.j=new N(this.c,this.s);this.o=new N(this.c,this.s);a=new H(this.a.c+",serif",K(this.a));a=P(a);this.g.a.style.cssText=a;a=new H(this.a.c+",sans-serif",K(this.a));a=P(a);this.h.a.style.cssText=a;a=new H("serif",K(this.a));a=P(a);this.j.a.style.cssText=a;a=new H("sans-serif",K(this.a));a= +P(a);this.o.a.style.cssText=a;O(this.g);O(this.h);O(this.j);O(this.o)}var S={D:"serif",C:"sans-serif"},T=null;function U(){if(null===T){var a=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);T=!!a&&(536>parseInt(a[1],10)||536===parseInt(a[1],10)&&11>=parseInt(a[2],10))}return T}R.prototype.start=function(){this.f.serif=this.j.a.offsetWidth;this.f["sans-serif"]=this.o.a.offsetWidth;this.A=q();la(this)}; +function ma(a,b,c){for(var d in S)if(S.hasOwnProperty(d)&&b===a.f[S[d]]&&c===a.f[S[d]])return!0;return!1}function la(a){var b=a.g.a.offsetWidth,c=a.h.a.offsetWidth,d;(d=b===a.f.serif&&c===a.f["sans-serif"])||(d=U()&&ma(a,b,c));d?q()-a.A>=a.w?U()&&ma(a,b,c)&&(null===a.u||a.u.hasOwnProperty(a.a.c))?V(a,a.v):V(a,a.B):na(a):V(a,a.v)}function na(a){setTimeout(p(function(){la(this)},a),50)}function V(a,b){setTimeout(p(function(){v(this.g.a);v(this.h.a);v(this.j.a);v(this.o.a);b(this.a)},a),0)};function W(a,b,c){this.c=a;this.a=b;this.f=0;this.o=this.j=!1;this.s=c}var X=null;W.prototype.g=function(a){var b=this.a;b.g&&w(b.f,[b.a.c("wf",a.c,K(a).toString(),"active")],[b.a.c("wf",a.c,K(a).toString(),"loading"),b.a.c("wf",a.c,K(a).toString(),"inactive")]);L(b,"fontactive",a);this.o=!0;oa(this)}; +W.prototype.h=function(a){var b=this.a;if(b.g){var c=y(b.f,b.a.c("wf",a.c,K(a).toString(),"active")),d=[],e=[b.a.c("wf",a.c,K(a).toString(),"loading")];c||d.push(b.a.c("wf",a.c,K(a).toString(),"inactive"));w(b.f,d,e)}L(b,"fontinactive",a);oa(this)};function oa(a){0==--a.f&&a.j&&(a.o?(a=a.a,a.g&&w(a.f,[a.a.c("wf","active")],[a.a.c("wf","loading"),a.a.c("wf","inactive")]),L(a,"active")):M(a.a))};function pa(a){this.j=a;this.a=new ja;this.h=0;this.f=this.g=!0}pa.prototype.load=function(a){this.c=new ca(this.j,a.context||this.j);this.g=!1!==a.events;this.f=!1!==a.classes;qa(this,new ha(this.c,a),a)}; +function ra(a,b,c,d,e){var f=0==--a.h;(a.f||a.g)&&setTimeout(function(){var a=e||null,k=d||null||{};if(0===c.length&&f)M(b.a);else{b.f+=c.length;f&&(b.j=f);var h,m=[];for(h=0;h + + + +#sitename - #pagetitle + + + + + + + + + + + + + + + +
+
+

#pagetitle

+
+
+
#tagline
+
+
+
+
+ + + + + +BODY + + + + + +
+
+
+

Ponte en contacto conmigo

+
+
+
+
+ +
+ +
+

Lo que hago

+

+Elegir a El Vikingo TI significa
+optar por la tranquilidad, la profesionalidad
+y una calidad de transmisión inigualable. +

+
+ +
+
+ +
+

La manera tradicional

+

Correo Electronico
+Envíeme un mensaje +

+
+ +
+
+ +
+

Redes Sociales

+ + + + + + +
+
+
+
+ +
+ + +
+ + + + + diff --git a/home/stig/projects/qsgen3/output/static/testimonies.tpl b/home/stig/projects/qsgen3/output/static/testimonies.tpl new file mode 100644 index 0000000..491dc33 --- /dev/null +++ b/home/stig/projects/qsgen3/output/static/testimonies.tpl @@ -0,0 +1,29 @@ +
+
+

How we make brands thrive

+
+
+
+
+ +
+

SET a target

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.

+
+
+
+ +
+

design a solution

+

Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat.

+
+
+
+ +
+

track the progress

+

Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

+
+
+
+
diff --git a/how-it-works.md b/how-it-works.md new file mode 100644 index 0000000..e20442a --- /dev/null +++ b/how-it-works.md @@ -0,0 +1,1029 @@ +# How qsgen3 Works + +## Table of Contents + +1. [Philosophy and Design Principles](#philosophy-and-design-principles) +2. [Project Structure](#project-structure) +3. [Configuration System](#configuration-system) +4. [Theme System](#theme-system) +5. [Creating New Themes](#creating-new-themes) +6. [Content Processing Pipeline](#content-processing-pipeline) +7. [Static File Handling](#static-file-handling) +8. [Template System](#template-system) +9. [Output Generation](#output-generation) +10. [Command Line Interface](#command-line-interface) +11. [Dependencies and Requirements](#dependencies-and-requirements) +12. [Detailed Workflow](#detailed-workflow) +13. [Troubleshooting and Debugging](#troubleshooting-and-debugging) + +## Philosophy and Design Principles + +### Core Philosophy +qsgen3 is designed to be **100% design-agnostic**. It does not impose any specific CSS frameworks, JavaScript libraries, or HTML structures on users. The generator's role is strictly to: + +1. Process Markdown content into HTML +2. Combine content with user-chosen templates and styling +3. Generate a complete static site structure + +### Key Principles + +- **Minimal Dependencies**: Only requires Pandoc for content processing +- **In-Memory Operations**: All content manipulation occurs in memory to improve performance and reduce storage wear +- **Flexible Theme System**: Supports easy switching between themes via configuration +- **Template Agnostic**: Works with any Pandoc-compatible HTML templates +- **No Forced Assets**: Only automatically links the main theme CSS; all other asset inclusion is explicit + +## Project Structure + +A typical qsgen3 project follows this structure: + +``` +project-root/ +├── bin/ +│ └── qsgen3 # Main generator script +├── site.conf # Main configuration file +├── content/ # Markdown content +│ ├── posts/ # Blog posts +│ │ └── hello-world.md +│ └── pages/ # Static pages +├── layouts/ # Pandoc HTML templates +│ ├── index.html # Homepage template +│ ├── post.html # Blog post template +│ └── rss.xml # RSS feed template +├── static/ # Static assets (CSS, images, etc.) +│ ├── css/ +│ └── images/ +├── themes/ # Theme directory +│ └── theme-name/ # Individual theme +│ ├── layouts/ # Theme-specific templates (optional) +│ ├── static/ # Theme static assets (optional) +│ └── css/ # Alternative theme asset location +└── output/ # Generated site (created by qsgen3) + ├── index.html + ├── rss.xml + ├── posts/ + └── static/ +``` + +## Configuration System + +### Primary Configuration: `site.conf` + +The `site.conf` file uses a simple key-value format: + +```bash +# Site Metadata +site_name="My Awesome Site" +site_tagline="A brief description of my site" +site_url="http://localhost:8000" + +# Theme Configuration +site_theme="minimal" +site_theme_css_file="css/style.css" + +# Directory Paths +paths_content_dir="content" +paths_output_dir="output" +paths_layouts_dir="layouts" +paths_static_dir="static" + +# Build Options +build_options_generate_rss=true +build_options_generate_sitemap=true +build_options_process_drafts=false +``` + +### Configuration Loading Process + +1. **File Location**: Defaults to `$PROJECT_ROOT/site.conf` +2. **Override**: Can be specified with `-c ` or `--config ` +3. **Parsing**: Simple line-by-line parsing of `key="value"` pairs +4. **Storage**: Values stored in `QSG_CONFIG` associative array +5. **Validation**: Basic validation for required keys and file existence + +### Key Configuration Variables + +- **`site_theme`**: Name of the active theme (directory name in `themes/`) +- **`site_theme_css_file`**: Path to main CSS file relative to theme's static assets +- **`site_url`**: Base URL for the site (used in RSS and absolute links) +- **`paths_*`**: Directory paths (can be relative or absolute) +- **`build_options_*`**: Boolean flags for optional features + +## Theme System + +### Theme Architecture + +Themes in qsgen3 provide two main components: + +1. **Templates**: Pandoc HTML templates for different page types +2. **Static Assets**: CSS, JavaScript, images, and other resources + +### Theme Directory Structure + +``` +themes/theme-name/ +├── layouts/ # Optional: Override default templates +│ ├── index.html # Homepage template +│ ├── post.html # Post template +│ └── rss.xml # RSS template +├── static/ # Preferred: Standard static assets location +│ ├── css/ +│ ├── js/ +│ └── images/ +└── css/ # Alternative: Direct CSS location + └── style.css +``` + +### Theme Resolution Logic + +1. **Theme Selection**: Based on `site_theme` in `site.conf` +2. **Layout Override**: If `themes/theme-name/layouts/` exists, it overrides `paths_layouts_dir` +3. **Static Asset Source**: + - First checks for `themes/theme-name/static/` + - Falls back to `themes/theme-name/` (for themes with assets at root level) +4. **CSS File Location**: Determined by `site_theme_css_file` relative to theme's static source + +### Theme Switching + +Switching themes is accomplished by: + +1. Changing `site_theme` in `site.conf` +2. Updating `site_theme_css_file` to match the new theme's CSS structure +3. Running qsgen3 to regenerate the site + +## Creating New Themes + +### Theme Development Overview + +Creating a new theme for qsgen3 involves designing templates and static assets that work together to provide a cohesive visual and functional experience. Themes can range from minimal CSS-only styling to complex designs with custom layouts and interactive elements. + +### Step-by-Step Theme Creation + +#### 1. Create Theme Directory Structure + +Start by creating a new directory in the `themes/` folder: + +```bash +mkdir -p themes/my-theme +cd themes/my-theme +``` + +Choose one of these organizational approaches: + +**Option A: Standard Structure (Recommended)** +``` +themes/my-theme/ +├── layouts/ # Custom templates (optional) +│ ├── index.html # Homepage template +│ ├── post.html # Blog post template +│ └── rss.xml # RSS feed template +└── static/ # Static assets + ├── css/ + │ └── style.css # Main stylesheet + ├── js/ # JavaScript files (optional) + │ └── theme.js + └── images/ # Theme images (optional) + └── logo.png +``` + +**Option B: CSS-Only Structure** +``` +themes/my-theme/ +└── css/ + └── style.css # Main stylesheet only +``` + +#### 2. Create the Main Stylesheet + +Create your theme's primary CSS file. This is the only asset that qsgen3 will automatically link: + +```css +/* themes/my-theme/static/css/style.css */ + +/* Reset and base styles */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + line-height: 1.6; + color: #333; + background-color: #fff; +} + +/* Header styles */ +header { + background: #2c3e50; + color: white; + padding: 1rem 0; + margin-bottom: 2rem; +} + +header h1 { + max-width: 800px; + margin: 0 auto; + padding: 0 1rem; +} + +/* Main content */ +main { + max-width: 800px; + margin: 0 auto; + padding: 0 1rem; +} + +/* Post styles */ +article { + margin-bottom: 3rem; + padding-bottom: 2rem; + border-bottom: 1px solid #eee; +} + +article h1, article h2 { + color: #2c3e50; + margin-bottom: 0.5rem; +} + +article .meta { + color: #666; + font-size: 0.9rem; + margin-bottom: 1rem; +} + +/* Navigation and links */ +nav ul { + list-style: none; + display: flex; + gap: 1rem; +} + +nav a { + color: #3498db; + text-decoration: none; +} + +nav a:hover { + text-decoration: underline; +} + +/* Responsive design */ +@media (max-width: 768px) { + main { + padding: 0 0.5rem; + } + + nav ul { + flex-direction: column; + gap: 0.5rem; + } +} +``` + +#### 3. Create Custom Templates (Optional) + +If you want to override the default templates, create custom Pandoc templates: + +**Homepage Template (`layouts/index.html`)** +```html + + + + + + $site_name$ + $if(css)$$endif$ + + +
+

$site_name$

+ $if(site_tagline)$

$site_tagline$

$endif$ +
+ +
+
+

Recent Posts

+ $if(posts)$ +
    + $for(posts)$ +
  • +

    $it.post_title$

    +
    + $if(it.post_date)$$endif$ + $if(it.post_author)$ by $it.post_author$$endif$ +
    + $if(it.post_description)$

    $it.post_description$

    $endif$ +
  • + $endfor$ +
+ $else$ +

No posts available.

+ $endif$ +
+
+ +
+

© 2024 $site_name$. Generated with qsgen3.

+
+ + +``` + +**Post Template (`layouts/post.html`)** +```html + + + + + + $title$ - $site_name$ + $if(css)$$endif$ + $if(description)$$endif$ + + +
+

$site_name$

+ $if(site_tagline)$

$site_tagline$

$endif$ +
+ +
+
+
+

$title$

+
+ $if(date)$$endif$ + $if(author)$ by $author$$endif$ +
+
+ +
+ $body$ +
+
+ + +
+ +
+

© 2024 $site_name$. Generated with qsgen3.

+
+ + +``` + +#### 4. Add JavaScript (Optional) + +If your theme requires JavaScript functionality, add it to the static assets: + +```javascript +// themes/my-theme/static/js/theme.js + +document.addEventListener('DOMContentLoaded', function() { + // Add smooth scrolling + document.querySelectorAll('a[href^="#"]').forEach(anchor => { + anchor.addEventListener('click', function (e) { + e.preventDefault(); + const target = document.querySelector(this.getAttribute('href')); + if (target) { + target.scrollIntoView({ + behavior: 'smooth' + }); + } + }); + }); + + // Add copy code button functionality + document.querySelectorAll('pre code').forEach(block => { + const button = document.createElement('button'); + button.textContent = 'Copy'; + button.className = 'copy-button'; + button.addEventListener('click', () => { + navigator.clipboard.writeText(block.textContent); + button.textContent = 'Copied!'; + setTimeout(() => button.textContent = 'Copy', 2000); + }); + block.parentNode.appendChild(button); + }); +}); +``` + +**Important**: Remember that qsgen3 will not automatically include JavaScript files. You must add ` +``` + +#### 5. Configure Theme Usage + +Update your `site.conf` to use the new theme: + +```bash +# Theme Configuration +site_theme="my-theme" +site_theme_css_file="css/style.css" # Path relative to theme's static source +``` + +For CSS-only themes using the alternative structure: +```bash +site_theme="my-theme" +site_theme_css_file="style.css" # Direct path if CSS is at theme root +``` + +#### 6. Test Your Theme + +Generate your site to test the theme: + +```bash +./bin/qsgen3 +``` + +Check the output: +- Verify CSS is applied correctly +- Test responsive design on different screen sizes +- Validate HTML structure +- Check that all assets are copied correctly + +### Theme Development Best Practices + +#### CSS Guidelines + +1. **Use Relative Units**: Prefer `rem`, `em`, and percentages over fixed pixels +2. **Mobile-First Design**: Start with mobile styles, then add desktop enhancements +3. **Semantic Selectors**: Use class names that describe content, not appearance +4. **CSS Custom Properties**: Use CSS variables for consistent theming + +```css +:root { + --primary-color: #2c3e50; + --secondary-color: #3498db; + --text-color: #333; + --background-color: #fff; + --border-color: #eee; + --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; +} + +body { + color: var(--text-color); + background-color: var(--background-color); + font-family: var(--font-family); +} +``` + +#### Template Guidelines + +1. **Conditional Content**: Use Pandoc's conditional syntax for optional elements +2. **Semantic HTML**: Use appropriate HTML5 semantic elements +3. **Accessibility**: Include proper ARIA labels and alt text +4. **Meta Tags**: Include essential meta tags for SEO and social sharing + +```html + +$if(description)$$endif$ +$if(author)$$endif$ + + +
+
+
+

$title$

+
+
+ $body$ +
+
+
+``` + +#### Asset Organization + +1. **Logical Structure**: Group related assets in appropriate directories +2. **Naming Conventions**: Use consistent, descriptive file names +3. **Optimization**: Optimize images and minimize CSS/JS when possible +4. **Dependencies**: Document any external dependencies clearly + +### Advanced Theme Features + +#### Dark Mode Support + +Add CSS custom properties and media queries for dark mode: + +```css +:root { + --bg-color: #fff; + --text-color: #333; + --border-color: #eee; +} + +@media (prefers-color-scheme: dark) { + :root { + --bg-color: #1a1a1a; + --text-color: #e0e0e0; + --border-color: #333; + } +} + +body { + background-color: var(--bg-color); + color: var(--text-color); + transition: background-color 0.3s ease, color 0.3s ease; +} +``` + +#### Print Styles + +Include print-specific styles: + +```css +@media print { + header, footer, nav { + display: none; + } + + body { + font-size: 12pt; + line-height: 1.4; + } + + a[href]:after { + content: " (" attr(href) ")"; + } +} +``` + +#### Custom Fonts + +If using custom fonts, include them properly: + +```css +/* Load fonts */ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap'); + +/* Or use local fonts */ +@font-face { + font-family: 'CustomFont'; + src: url('/static/fonts/custom-font.woff2') format('woff2'), + url('/static/fonts/custom-font.woff') format('woff'); + font-display: swap; +} +``` + +### Theme Distribution + +#### Documentation + +Create a `README.md` for your theme: + +```markdown +# My Theme + +A clean, minimal theme for qsgen3. + +## Features +- Responsive design +- Dark mode support +- Clean typography +- Fast loading + +## Installation +1. Copy theme to `themes/my-theme/` +2. Update `site.conf`: + ``` + site_theme="my-theme" + site_theme_css_file="css/style.css" + ``` +3. Run `./bin/qsgen3` + +## Customization +- Edit CSS custom properties in `style.css` +- Modify templates in `layouts/` directory +- Add custom JavaScript in `static/js/` + +## Browser Support +- Modern browsers (Chrome 90+, Firefox 88+, Safari 14+) +- Graceful degradation for older browsers +``` + +#### Version Control + +If sharing your theme: +1. Use semantic versioning +2. Tag releases appropriately +3. Include a changelog +4. Provide example configurations + +### Troubleshooting Theme Development + +#### Common Issues + +1. **CSS Not Loading**: Check `site_theme_css_file` path matches actual file location +2. **Templates Not Found**: Ensure template files are in `layouts/` directory +3. **Assets Missing**: Verify static files are in correct directory structure +4. **JavaScript Errors**: Remember to include ` + + + + + + + + + + + +
+
+

Blog

+
+
+
#tagline
+
+
+
+
+ +

 

+ + + + + +BODY + + + + + +
+
+
+
+
+

Ponte en contacto conmigo

+
+
+
+
+ +
+ +
+

Lo que hago

+

+Elegir a El Vikingo TI significa
+optar por la tranquilidad, la profesionalidad
+y una calidad de transmisión inigualable. +

+
+ +
+
+ +
+

La manera tradicional

+

Correo Electronico
+Envíeme un mensaje +

+
+ +
+
+ +
+

Redes Sociales

+ + + + + + +
+
+
+
+ +
+ + +
+ + + + + diff --git a/output/static/blog_list.tpl b/output/static/blog_list.tpl new file mode 100644 index 0000000..034f85c --- /dev/null +++ b/output/static/blog_list.tpl @@ -0,0 +1,17 @@ + + + + +
+

BLOGTITLE

+
+ INGRESS +
+
+ BLOGDATE +
+
+
+ + + diff --git a/output/static/blogs.tpl b/output/static/blogs.tpl new file mode 100644 index 0000000..bdaed33 --- /dev/null +++ b/output/static/blogs.tpl @@ -0,0 +1,125 @@ + + + +#sitename - BLOGTITLE + + + + + + + + + + + +
+
+

BLOGTITLE

+
+
+
+CALADAY - CALNDAY - CALMONTH - CALYEAR +
+
+
+ + + +
+
+ +
+
+INGRESS +
+
+BODY +
+
+ +
+
+ + + +
+
+
+

Ponte en contacto conmigo

+
+
+
+
+ +
+ +
+

Lo que hago

+

+Elegir a El Vikingo TI significa
+optar por la tranquilidad, la profesionalidad
+y una calidad de transmisión inigualable. +

+
+ +
+
+ +
+

La manera tradicional

+

Correo Electronico
+Envíeme un mensaje +

+
+ +
+
+ +
+

Redes Sociales

+ + + + + + +
+
+
+
+ +
+ + + +
+ + + + diff --git a/output/static/css/jquery-3.5.1.js b/output/static/css/jquery-3.5.1.js new file mode 100644 index 0000000..b061403 --- /dev/null +++ b/output/static/css/jquery-3.5.1.js @@ -0,0 +1,2 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!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(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),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("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0img{display:inline-block !important;visibility:visible !important;opacity:1 !important;vertical-align:middle !important}h1,h2,h3,h4,h5,h6{font-weight:bold;margin-bottom:10px}h1{font-size:38px;line-height:44px;margin-top:20px}h2{font-size:32px;line-height:36px;margin-top:20px}h3{font-size:24px;line-height:30px;margin-top:20px}h4{font-size:18px;line-height:24px;margin-top:10px}h5{font-size:14px;line-height:20px;margin-top:10px}h6{font-size:12px;line-height:18px;margin-top:10px}p{margin-top:0;margin-bottom:10px}blockquote{margin:0 0 10px 0;padding:10px 20px;border-left:5px solid #E2E2E2;font-size:18px;line-height:22px}figure{margin:0;margin-bottom:10px}figcaption{margin-top:5px;text-align:center}ul,ol{margin-top:0;margin-bottom:10px;padding-left:40px}.w-list-unstyled{padding-left:0;list-style:none}.w-embed:before,.w-embed:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-embed:after{clear:both}.w-video{width:100%;position:relative;padding:0}.w-video iframe,.w-video object,.w-video embed{position:absolute;top:0;left:0;width:100%;height:100%}fieldset{padding:0;margin:0;border:0}button,html input[type="button"],input[type="reset"]{border:0;cursor:pointer;-webkit-appearance:button}.w-form{margin:0 0 15px}.w-form-done{display:none;padding:20px;text-align:center;background-color:#dddddd}.w-form-fail{display:none;margin-top:10px;padding:10px;background-color:#ffdede}label{display:block;margin-bottom:5px;font-weight:bold}.w-input,.w-select{display:block;width:100%;height:38px;padding:8px 12px;margin-bottom:10px;font-size:14px;line-height:1.42857143;color:#333333;vertical-align:middle;background-color:#ffffff;border:1px solid #cccccc}.w-input:-moz-placeholder,.w-select:-moz-placeholder{color:#999}.w-input::-moz-placeholder,.w-select::-moz-placeholder{color:#999;opacity:1}.w-input:-ms-input-placeholder,.w-select:-ms-input-placeholder{color:#999}.w-input::-webkit-input-placeholder,.w-select::-webkit-input-placeholder{color:#999}.w-input:focus,.w-select:focus{border-color:#3898EC;outline:0}.w-input[disabled],.w-select[disabled],.w-input[readonly],.w-select[readonly],fieldset[disabled] .w-input,fieldset[disabled] .w-select{cursor:not-allowed;background-color:#eeeeee}textarea.w-input,textarea.w-select{height:auto}.w-select{background-color:#f3f3f3}.w-select[multiple]{height:auto}.w-form-label{display:inline-block;cursor:pointer;font-weight:normal;margin-bottom:0}.w-radio{display:block;margin-bottom:5px;padding-left:20px}.w-radio:before,.w-radio:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-radio:after{clear:both}.w-radio-input{margin:4px 0 0;margin-top:1px \9;line-height:normal;float:left;margin-left:-20px}.w-radio-input{margin-top:3px}.w-file-upload{display:block;margin-bottom:10px}.w-file-upload-input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-100}.w-file-upload-default,.w-file-upload-uploading,.w-file-upload-success{display:inline-block;color:#333333}.w-file-upload-error{display:block;margin-top:10px}.w-file-upload-default.w-hidden,.w-file-upload-uploading.w-hidden,.w-file-upload-error.w-hidden,.w-file-upload-success.w-hidden{display:none}.w-file-upload-uploading-btn{display:flex;font-size:14px;font-weight:normal;cursor:pointer;margin:0;padding:8px 12px;border:1px solid #cccccc;background-color:#fafafa}.w-file-upload-file{display:flex;flex-grow:1;justify-content:space-between;margin:0;padding:8px 9px 8px 11px;border:1px solid #cccccc;background-color:#fafafa}.w-file-upload-file-name{font-size:14px;font-weight:normal;display:block}.w-file-remove-link{margin-top:3px;margin-left:10px;width:auto;height:auto;padding:3px;display:block;cursor:pointer}.w-icon-file-upload-remove{margin:auto;font-size:10px}.w-file-upload-error-msg{display:inline-block;color:#ea384c;padding:2px 0}.w-file-upload-info{display:inline-block;line-height:38px;padding:0 12px}.w-file-upload-label{display:inline-block;font-size:14px;font-weight:normal;cursor:pointer;margin:0;padding:8px 12px;border:1px solid #cccccc;background-color:#fafafa}.w-icon-file-upload-icon,.w-icon-file-upload-uploading{display:inline-block;margin-right:8px;width:20px}.w-icon-file-upload-uploading{height:20px}.w-container{margin-left:auto;margin-right:auto;max-width:940px}.w-container:before,.w-container:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-container:after{clear:both}.w-container .w-row{margin-left:-10px;margin-right:-10px}.w-row:before,.w-row:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-row:after{clear:both}.w-row .w-row{margin-left:0;margin-right:0}.w-col{position:relative;float:left;width:100%;min-height:1px;padding-left:10px;padding-right:10px}.w-col .w-col{padding-left:0;padding-right:0}.w-col-1{width:8.33333333%}.w-col-2{width:16.66666667%}.w-col-3{width:25%}.w-col-4{width:33.33333333%}.w-col-5{width:41.66666667%}.w-col-6{width:50%}.w-col-7{width:58.33333333%}.w-col-8{width:66.66666667%}.w-col-9{width:75%}.w-col-10{width:83.33333333%}.w-col-11{width:91.66666667%}.w-col-12{width:100%}.w-hidden-main{display:none !important}@media screen and (max-width:991px){.w-container{max-width:728px}.w-hidden-main{display:inherit !important}.w-hidden-medium{display:none !important}.w-col-medium-1{width:8.33333333%}.w-col-medium-2{width:16.66666667%}.w-col-medium-3{width:25%}.w-col-medium-4{width:33.33333333%}.w-col-medium-5{width:41.66666667%}.w-col-medium-6{width:50%}.w-col-medium-7{width:58.33333333%}.w-col-medium-8{width:66.66666667%}.w-col-medium-9{width:75%}.w-col-medium-10{width:83.33333333%}.w-col-medium-11{width:91.66666667%}.w-col-medium-12{width:100%}.w-col-stack{width:100%;left:auto;right:auto}}@media screen and (max-width:767px){.w-hidden-main{display:inherit !important}.w-hidden-medium{display:inherit !important}.w-hidden-small{display:none !important}.w-row,.w-container .w-row{margin-left:0;margin-right:0}.w-col{width:100%;left:auto;right:auto}.w-col-small-1{width:8.33333333%}.w-col-small-2{width:16.66666667%}.w-col-small-3{width:25%}.w-col-small-4{width:33.33333333%}.w-col-small-5{width:41.66666667%}.w-col-small-6{width:50%}.w-col-small-7{width:58.33333333%}.w-col-small-8{width:66.66666667%}.w-col-small-9{width:75%}.w-col-small-10{width:83.33333333%}.w-col-small-11{width:91.66666667%}.w-col-small-12{width:100%}}@media screen and (max-width:479px){.w-container{max-width:none}.w-hidden-main{display:inherit !important}.w-hidden-medium{display:inherit !important}.w-hidden-small{display:inherit !important}.w-hidden-tiny{display:none !important}.w-col{width:100%}.w-col-tiny-1{width:8.33333333%}.w-col-tiny-2{width:16.66666667%}.w-col-tiny-3{width:25%}.w-col-tiny-4{width:33.33333333%}.w-col-tiny-5{width:41.66666667%}.w-col-tiny-6{width:50%}.w-col-tiny-7{width:58.33333333%}.w-col-tiny-8{width:66.66666667%}.w-col-tiny-9{width:75%}.w-col-tiny-10{width:83.33333333%}.w-col-tiny-11{width:91.66666667%}.w-col-tiny-12{width:100%}}.w-widget{position:relative}.w-widget-map{width:100%;height:400px}.w-widget-map label{width:auto;display:inline}.w-widget-map img{max-width:inherit}.w-widget-map .gm-style-iw{text-align:center}.w-widget-map .gm-style-iw>button{display:none !important}.w-widget-twitter{overflow:hidden}.w-widget-twitter-count-shim{display:inline-block;vertical-align:top;position:relative;width:28px;height:20px;text-align:center;background:white;border:#758696 solid 1px;border-radius:3px}.w-widget-twitter-count-shim *{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-widget-twitter-count-shim .w-widget-twitter-count-inner{position:relative;font-size:15px;line-height:12px;text-align:center;color:#999;font-family:serif}.w-widget-twitter-count-shim .w-widget-twitter-count-clear{position:relative;display:block}.w-widget-twitter-count-shim.w--large{width:36px;height:28px}.w-widget-twitter-count-shim.w--large .w-widget-twitter-count-inner{font-size:18px;line-height:18px}.w-widget-twitter-count-shim:not(.w--vertical){margin-left:5px;margin-right:8px}.w-widget-twitter-count-shim:not(.w--vertical).w--large{margin-left:6px}.w-widget-twitter-count-shim:not(.w--vertical):before,.w-widget-twitter-count-shim:not(.w--vertical):after{top:50%;left:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.w-widget-twitter-count-shim:not(.w--vertical):before{border-color:rgba(117,134,150,0);border-right-color:#5d6c7b;border-width:4px;margin-left:-9px;margin-top:-4px}.w-widget-twitter-count-shim:not(.w--vertical).w--large:before{border-width:5px;margin-left:-10px;margin-top:-5px}.w-widget-twitter-count-shim:not(.w--vertical):after{border-color:rgba(255,255,255,0);border-right-color:white;border-width:4px;margin-left:-8px;margin-top:-4px}.w-widget-twitter-count-shim:not(.w--vertical).w--large:after{border-width:5px;margin-left:-9px;margin-top:-5px}.w-widget-twitter-count-shim.w--vertical{width:61px;height:33px;margin-bottom:8px}.w-widget-twitter-count-shim.w--vertical:before,.w-widget-twitter-count-shim.w--vertical:after{top:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.w-widget-twitter-count-shim.w--vertical:before{border-color:rgba(117,134,150,0);border-top-color:#5d6c7b;border-width:5px;margin-left:-5px}.w-widget-twitter-count-shim.w--vertical:after{border-color:rgba(255,255,255,0);border-top-color:white;border-width:4px;margin-left:-4px}.w-widget-twitter-count-shim.w--vertical .w-widget-twitter-count-inner{font-size:18px;line-height:22px}.w-widget-twitter-count-shim.w--vertical.w--large{width:76px}.w-widget-gplus{overflow:hidden}.w-background-video{position:relative;overflow:hidden;height:500px;color:white}.w-background-video>video{background-size:cover;background-position:50% 50%;position:absolute;margin:auto;width:100%;height:100%;right:-100%;bottom:-100%;top:-100%;left:-100%;object-fit:cover;z-index:-100}.w-background-video>video::-webkit-media-controls-start-playback-button{display:none !important;-webkit-appearance:none}.w-slider{position:relative;height:300px;text-align:center;background:#dddddd;clear:both;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0)}.w-slider-mask{position:relative;display:block;overflow:hidden;z-index:1;left:0;right:0;height:100%;white-space:nowrap}.w-slide{position:relative;display:inline-block;vertical-align:top;width:100%;height:100%;white-space:normal;text-align:left}.w-slider-nav{position:absolute;z-index:2;top:auto;right:0;bottom:0;left:0;margin:auto;padding-top:10px;height:40px;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0)}.w-slider-nav.w-round>div{border-radius:100%}.w-slider-nav.w-num>div{width:auto;height:auto;padding:.2em .5em;font-size:inherit;line-height:inherit}.w-slider-nav.w-shadow>div{box-shadow:0 0 3px rgba(51,51,51,0.4)}.w-slider-nav-invert{color:#fff}.w-slider-nav-invert>div{background-color:rgba(34,34,34,0.4)}.w-slider-nav-invert>div.w-active{background-color:#222}.w-slider-dot{position:relative;display:inline-block;width:1em;height:1em;background-color:rgba(255,255,255,0.4);cursor:pointer;margin:0 3px .5em;transition:background-color 100ms,color 100ms}.w-slider-dot.w-active{background-color:#fff}.w-slider-dot:focus{outline:none;box-shadow:0 0 0 2px #fff}.w-slider-dot:focus.w-active{box-shadow:none}.w-slider-arrow-left,.w-slider-arrow-right{position:absolute;width:80px;top:0;right:0;bottom:0;left:0;margin:auto;cursor:pointer;overflow:hidden;color:white;font-size:40px;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-slider-arrow-left [class^="w-icon-"],.w-slider-arrow-right [class^="w-icon-"],.w-slider-arrow-left [class*=" w-icon-"],.w-slider-arrow-right [class*=" w-icon-"]{position:absolute}.w-slider-arrow-left:focus,.w-slider-arrow-right:focus{outline:0}.w-slider-arrow-left{z-index:3;right:auto}.w-slider-arrow-right{z-index:4;left:auto}.w-icon-slider-left,.w-icon-slider-right{top:0;right:0;bottom:0;left:0;margin:auto;width:1em;height:1em}.w-slider-aria-label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.w-dropdown{display:inline-block;position:relative;text-align:left;margin-left:auto;margin-right:auto;z-index:900}.w-dropdown-btn,.w-dropdown-toggle,.w-dropdown-link{position:relative;vertical-align:top;text-decoration:none;color:#222222;padding:20px;text-align:left;margin-left:auto;margin-right:auto;white-space:nowrap}.w-dropdown-toggle{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;cursor:pointer;padding-right:40px}.w-dropdown-toggle:focus{outline:0}.w-icon-dropdown-toggle{position:absolute;top:0;right:0;bottom:0;margin:auto;margin-right:20px;width:1em;height:1em}.w-dropdown-list{position:absolute;background:#dddddd;display:none;min-width:100%}.w-dropdown-list.w--open{display:block}.w-dropdown-link{padding:10px 20px;display:block;color:#222222}.w-dropdown-link.w--current{color:#0082f3}.w-dropdown-link:focus{outline:0}@media screen and (max-width:767px){.w-nav-brand{padding-left:10px}}.w-lightbox-backdrop{color:#000;cursor:auto;font-family:serif;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;list-style:disc;text-align:start;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;position:fixed;top:0;right:0;bottom:0;left:0;color:#fff;font-family:"Helvetica Neue",Helvetica,Ubuntu,"Segoe UI",Verdana,sans-serif;font-size:17px;line-height:1.2;font-weight:300;text-align:center;background:rgba(0,0,0,0.9);z-index:2000;outline:0;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-tap-highlight-color:transparent;-webkit-transform:translate(0, 0)}.w-lightbox-backdrop,.w-lightbox-container{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.w-lightbox-content{position:relative;height:100vh;overflow:hidden}.w-lightbox-view{position:absolute;width:100vw;height:100vh;opacity:0}.w-lightbox-view:before{content:"";height:100vh}.w-lightbox-group,.w-lightbox-group .w-lightbox-view,.w-lightbox-group .w-lightbox-view:before{height:86vh}.w-lightbox-frame,.w-lightbox-view:before{display:inline-block;vertical-align:middle}.w-lightbox-figure{position:relative;margin:0}.w-lightbox-group .w-lightbox-figure{cursor:pointer}.w-lightbox-img{width:auto;height:auto;max-width:none}.w-lightbox-image{display:block;float:none;max-width:100vw;max-height:100vh}.w-lightbox-group .w-lightbox-image{max-height:86vh}.w-lightbox-caption{position:absolute;right:0;bottom:0;left:0;padding:.5em 1em;background:rgba(0,0,0,0.4);text-align:left;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.w-lightbox-embed{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.w-lightbox-control{position:absolute;top:0;width:4em;background-size:24px;background-repeat:no-repeat;background-position:center;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.w-lightbox-left{display:none;bottom:0;left:0;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0yMCAwIDI0IDQwIiB3aWR0aD0iMjQiIGhlaWdodD0iNDAiPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1KSI+PHBhdGggZD0ibTAgMGg1djIzaDIzdjVoLTI4eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDN2MjNoMjN2M2gtMjZ6IiBmaWxsPSIjZmZmIi8+PC9nPjwvc3ZnPg==")}.w-lightbox-right{display:none;right:0;bottom:0;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMjQgNDAiIHdpZHRoPSIyNCIgaGVpZ2h0PSI0MCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMC0waDI4djI4aC01di0yM2gtMjN6IiBvcGFjaXR5PSIuNCIvPjxwYXRoIGQ9Im0xIDFoMjZ2MjZoLTN2LTIzaC0yM3oiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+")}.w-lightbox-close{right:0;height:2.6em;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMTggMTciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNyI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMCAwaDd2LTdoNXY3aDd2NWgtN3Y3aC01di03aC03eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDd2LTdoM3Y3aDd2M2gtN3Y3aC0zdi03aC03eiIgZmlsbD0iI2ZmZiIvPjwvZz48L3N2Zz4=");background-size:18px}.w-lightbox-strip{position:absolute;bottom:0;left:0;right:0;padding:0 1vh;line-height:0;white-space:nowrap;overflow-x:auto;overflow-y:hidden}.w-lightbox-item{display:inline-block;width:10vh;padding:2vh 1vh;box-sizing:content-box;cursor:pointer;-webkit-transform:translate3d(0, 0, 0)}.w-lightbox-active{opacity:.3}.w-lightbox-thumbnail{position:relative;height:10vh;background:#222;overflow:hidden}.w-lightbox-thumbnail-image{position:absolute;top:0;left:0}.w-lightbox-thumbnail .w-lightbox-tall{top:50%;width:100%;-webkit-transform:translate(0, -50%);-ms-transform:translate(0, -50%);transform:translate(0, -50%)}.w-lightbox-thumbnail .w-lightbox-wide{left:50%;height:100%;-webkit-transform:translate(-50%, 0);-ms-transform:translate(-50%, 0);transform:translate(-50%, 0)}.w-lightbox-spinner{position:absolute;top:50%;left:50%;box-sizing:border-box;width:40px;height:40px;margin-top:-20px;margin-left:-20px;border:5px solid rgba(0,0,0,0.4);border-radius:50%;-webkit-animation:spin .8s infinite linear;animation:spin .8s infinite linear}.w-lightbox-spinner:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border:3px solid transparent;border-bottom-color:#fff;border-radius:50%}.w-lightbox-hide{display:none}.w-lightbox-noscroll{overflow:hidden}@media (min-width:768px){.w-lightbox-content{height:96vh;margin-top:2vh}.w-lightbox-view,.w-lightbox-view:before{height:96vh}.w-lightbox-group,.w-lightbox-group .w-lightbox-view,.w-lightbox-group .w-lightbox-view:before{height:84vh}.w-lightbox-image{max-width:96vw;max-height:96vh}.w-lightbox-group .w-lightbox-image{max-width:82.3vw;max-height:84vh}.w-lightbox-left,.w-lightbox-right{display:block;opacity:.5}.w-lightbox-close{opacity:.8}.w-lightbox-control:hover{opacity:1}}.w-lightbox-inactive,.w-lightbox-inactive:hover{opacity:0}.w-richtext:before,.w-richtext:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-richtext:after{clear:both}.w-richtext[contenteditable="true"]:before,.w-richtext[contenteditable="true"]:after{white-space:initial}.w-richtext ol,.w-richtext ul{overflow:hidden}.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-video div:after,.w-richtext .w-richtext-figure-selected[data-rt-type="video"] div:after{outline:2px solid #2895f7}.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-image div,.w-richtext .w-richtext-figure-selected[data-rt-type="image"] div{outline:2px solid #2895f7}.w-richtext figure.w-richtext-figure-type-video>div:after,.w-richtext figure[data-rt-type="video"]>div:after{content:'';position:absolute;display:none;left:0;top:0;right:0;bottom:0}.w-richtext figure{position:relative;max-width:60%}.w-richtext figure>div:before{cursor:default !important}.w-richtext figure img{width:100%}.w-richtext figure figcaption.w-richtext-figcaption-placeholder{opacity:.6}.w-richtext figure div{font-size:0;color:transparent}.w-richtext figure.w-richtext-figure-type-image,.w-richtext figure[data-rt-type="image"]{display:table}.w-richtext figure.w-richtext-figure-type-image>div,.w-richtext figure[data-rt-type="image"]>div{display:inline-block}.w-richtext figure.w-richtext-figure-type-image>figcaption,.w-richtext figure[data-rt-type="image"]>figcaption{display:table-caption;caption-side:bottom}.w-richtext figure.w-richtext-figure-type-video,.w-richtext figure[data-rt-type="video"]{width:60%;height:0}.w-richtext figure.w-richtext-figure-type-video iframe,.w-richtext figure[data-rt-type="video"] iframe{position:absolute;top:0;left:0;width:100%;height:100%}.w-richtext figure.w-richtext-figure-type-video>div,.w-richtext figure[data-rt-type="video"]>div{width:100%}.w-richtext figure.w-richtext-align-center{margin-right:auto;margin-left:auto;clear:both}.w-richtext figure.w-richtext-align-center.w-richtext-figure-type-image>div,.w-richtext figure.w-richtext-align-center[data-rt-type="image"]>div{max-width:100%}.w-richtext figure.w-richtext-align-normal{clear:both}.w-richtext figure.w-richtext-align-fullwidth{width:100%;max-width:100%;text-align:center;clear:both;display:block;margin-right:auto;margin-left:auto}.w-richtext figure.w-richtext-align-fullwidth>div{display:inline-block;padding-bottom:inherit}.w-richtext figure.w-richtext-align-fullwidth>figcaption{display:block}.w-richtext figure.w-richtext-align-floatleft{float:left;margin-right:15px;clear:none}.w-richtext figure.w-richtext-align-floatright{float:right;margin-left:15px;clear:none}.w-nav{position:relative;background:#dddddd;z-index:1000}.w-nav:before,.w-nav:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-nav:after{clear:both}.w-nav-brand{position:relative;float:left;text-decoration:none;color:#333333}.w-nav-link{position:relative;display:inline-block;vertical-align:top;text-decoration:none;color:#222222;padding:20px;text-align:left;margin-left:auto;margin-right:auto}.w-nav-link.w--current{color:#0082f3}.w-nav-menu{position:relative;float:right}[data-nav-menu-open]{display:block !important;position:absolute;top:100%;left:0;right:0;background:#C8C8C8;text-align:center;overflow:visible;min-width:200px}.w--nav-link-open{display:block;position:relative}.w-nav-overlay{position:absolute;overflow:hidden;display:none;top:100%;left:0;right:0;width:100%}.w-nav-overlay [data-nav-menu-open]{top:0}.w-nav[data-animation="over-left"] .w-nav-overlay{width:auto}.w-nav[data-animation="over-left"] .w-nav-overlay,.w-nav[data-animation="over-left"] [data-nav-menu-open]{right:auto;z-index:1;top:0}.w-nav[data-animation="over-right"] .w-nav-overlay{width:auto}.w-nav[data-animation="over-right"] .w-nav-overlay,.w-nav[data-animation="over-right"] [data-nav-menu-open]{left:auto;z-index:1;top:0}.w-nav-button{position:relative;float:right;padding:18px;font-size:24px;display:none;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-nav-button:focus{outline:0}.w-nav-button.w--open{background-color:#C8C8C8;color:white}.w-nav[data-collapse="all"] .w-nav-menu{display:none}.w-nav[data-collapse="all"] .w-nav-button{display:block}.w--nav-dropdown-open{display:block}.w--nav-dropdown-toggle-open{display:block}.w--nav-dropdown-list-open{position:static}@media screen and (max-width:991px){.w-nav[data-collapse="medium"] .w-nav-menu{display:none}.w-nav[data-collapse="medium"] .w-nav-button{display:block}}@media screen and (max-width:767px){.w-nav[data-collapse="small"] .w-nav-menu{display:none}.w-nav[data-collapse="small"] .w-nav-button{display:block}.w-nav-brand{padding-left:10px}}@media screen and (max-width:479px){.w-nav[data-collapse="tiny"] .w-nav-menu{display:none}.w-nav[data-collapse="tiny"] .w-nav-button{display:block}}.w-tabs{position:relative}.w-tabs:before,.w-tabs:after{content:" ";display:table;grid-column-start:1;grid-row-start:1;grid-column-end:2;grid-row-end:2}.w-tabs:after{clear:both}.w-tab-menu{position:relative}.w-tab-link{position:relative;display:inline-block;vertical-align:top;text-decoration:none;padding:9px 30px;text-align:left;cursor:pointer;color:#222222;background-color:#dddddd}.w-tab-link.w--current{background-color:#C8C8C8}.w-tab-link:focus{outline:0}.w-tab-content{position:relative;display:block;overflow:hidden}.w-tab-pane{position:relative;display:none}.w--tab-active{display:block}@media screen and (max-width:479px){.w-tab-link{display:block}}.w-ix-emptyfix:after{content:""}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.w-dyn-empty{padding:10px;background-color:#dddddd}.w-dyn-hide{display:none !important}.w-dyn-bind-empty{display:none !important}.w-condition-invisible{display:none !important} + +/* ========================================================================== + Start of custom Webflow CSS + ========================================================================== */ +body { + font-family: Vollkorn, serif; + color: #333; + font-size: 14px; + line-height: 20px; +} + +h1 { + margin-top: 10px; + margin-bottom: 10px; + font-size: 32px; + line-height: 38px; + font-weight: 700; +} + +h2 { + margin: 10px 0px; + font-family: Montserrat, sans-serif; + font-size: 23px; + line-height: 36px; + font-weight: 400; + text-align: center; + text-transform: uppercase; +} + +.section.ingress h2 { + margin: 10px 0px; + font-family: Montserrat, sans-serif; + font-size: 20px; + line-height: 36px; + font-weight: 400; + text-align: left; + text-transform: none !important; +} + +h3 { + margin: 0px 0px 20px; + font-family: Montserrat, sans-serif; + font-size: 16px; + line-height: 20px; + font-weight: 400; + text-transform: uppercase; +} + +h4 { + margin: 10px 0px; + font-size: 18px; + line-height: 24px; + font-weight: 700; +} + +h5 { + margin: 10px 0px; + font-size: 14px; + line-height: 20px; + font-weight: 700; +} + +h6 { + margin: 10px 0px; + font-size: 12px; + line-height: 18px; + font-weight: 700; +} + +p { + margin-top: 0px; + margin-bottom: 5px; + font-family: Vollkorn, serif; + font-size: 15px; + line-height: 22px; +} + +.testimonials { + display: flex; + flex-wrap: wrap; + margin: 20px 0; +} + +.testimony { + background-color: rgba(245, 245, 245, 0.7); + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2); + margin: 20px 0; + flex-basis: 250px; /* Fixed width for the testimony text */ +} + +.testimonials .testimony { + margin-right: 5px; /* Add 5px bottom margin to each testimony */ +} + +.testimony .text { + flex: 1; /* Stretch the testimony text to fill the remaining space */ + white-space: nowrap; /* Prevent text from wrapping to multiple lines */ + max-width: 250px; /* Set a maximum width of 250px for the testimony text */ + word-break: break-word; +} + +.testimony .photo { + width: 40px !important; + height; auto; +} + +.testimony .photo, +.testimony .name, +.testimony .title { + display: inline-block; /* Align the Photo, Name, and Title inline */ +} + +.button { + display: inline-block; + padding: 15px 33px; + border-style: solid; + border-width: 1px 1px 2px; + border-color: #47474f; + background-color: transparent; + -webkit-transition: background-color 300ms ease; + transition: background-color 300ms ease; + font-family: Vollkorn, serif; + color: #47474f; + font-size: 19px; + font-style: italic; + text-align: center; + text-decoration: none; +} + +.button:hover { + background-color: #fff; +} + +.button.form { + margin-top: 23px; + margin-bottom: 24px; + padding-right: 54px; + padding-left: 54px; + border-width: 1px 1px 2px; + border-color: #7ec4bd; + color: #7ec4bd; +} + +.section.ingress { + font-size: 20px; + text-align: left; +} + +.button.form:hover { + background-color: rgba(126, 196, 189, 0.34); +} + +.header { + padding: 98px 10px; + /* background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(100, 209, 198, 0.55)), to(rgba(100, 209, 198, 0.55))), url("/images/el-vikingo-ti-bg.png"); + background-image: linear-gradient(180deg, rgba(100, 209, 198, 0.55), rgba(100, 209, 198, 0.55)), url("/images/el-vikingo-ti-bg.png"); */ + background-image: url("/images/new-vikingo-bg.png"); + background-position: 0% 0%, 50% 70%; + background-size: auto, cover; + color: #fff; + text-align: center; +} + +.header.project-page { + padding-top: 77px; + padding-bottom: 77px; + /* background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(100, 209, 198, 0.55)), to(rgba(100, 209, 198, 0.55))), url("/images/el-vikingo-ti-bg.png"); + background-image: linear-gradient(180deg, rgba(100, 209, 198, 0.55), rgba(100, 209, 198, 0.55)), url("/images/el-vikingo-ti-bg.png"); */ + background-image: url("/images/new-vikingo-bg.png"); +} + +.navbar { + padding-top: 18px; + padding-bottom: 18px; + background-color: #fff; +} + +.nav-link { + margin-top: 23px; + margin-left: 34px; + padding: 0px; + border-bottom: 2px solid transparent; + -webkit-transition: border-color 300ms ease; + transition: border-color 300ms ease; + font-family: Montserrat, sans-serif; + color: #404040; + font-size: 12px; + font-weight: 400; + text-transform: uppercase; +} + +.nav-link:hover { + border-bottom-color: #7ec4bd; +} + +.logo-title { + margin-top: 13px; + float: left; + font-family: Oswald, sans-serif; + font-size: 22px; + font-weight: 400; + text-transform: uppercase; +} + +.logo-img { + margin-right: 18px; + float: left; +} + +.main-heading { + margin-top: 7px; + font-family: Montserrat, sans-serif; + font-size: 44px; + line-height: 55px; + font-weight: 400; + text-transform: uppercase; +} + +.divider { + display: block; + width: 80px; + height: 2px; + margin: 28px auto; + background-color: #fff; +} + +.divider.grey { + margin-bottom: 43px; + background-color: rgba(0, 0, 0, 0.09); +} + +.main-subtitle { + font-family: Vollkorn, serif; + color: hsla(0, 0%, 100%, 0.81); + font-size: 18px; + font-style: italic; +} + +.about-section { + padding-bottom: 61px; + background-color: #fefec9; + text-align: left; +} + +.about-text { + margin-bottom: 40px; + color: #47474f; + font-size: 18px; + line-height: 25px; +} + +.x-icon { + margin-top: -26px; + margin-bottom: 34px; +} + +.section { + padding-top: 69px; + padding-bottom: 69px; + text-align: left; +} + +.newsection { + padding-top: 10px; + padding-bottom: 10px; + text-align: left; +} + +.section.grey { + background-color: #f5f5f5; +} + +/* New: #00b7e4 + * Old: #7ec4bd + * New: rgba(6, 181, 229, 255) + * Old: rgba(126, 196, 189, 0.87) + */ + +.section.contact { + /* background-color: #7ec4bd; */ + background-color: #000506; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fefec9), to(#00b7e4)), url("/images/el-vikingo-ti-bg.png"); + background-image: linear-gradient(180deg, rgba(#fefec9, #00b7e4)), url("/images/el-vikingo-ti-bg.png"); + background-size: auto, cover; + font-family: Vollkorn, serif; +} + +.blogsection.contact { + /* background-color: #7ec4bd; */ + background-color: #000506; + background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#00b7e4)), url("/images/el-vikingo-ti- +bg.png"); + background-image: linear-gradient(180deg, rgba(#ffffff, #00b7e4)), url("/images/el-vikingo-ti-bg.png"); + background-size: auto, cover; + font-family: Vollkorn, serif; +} + +.newsection.footer { + background-color: #000506; + text-align: center; +} + +.grey-icon-wrapper { + margin-bottom: 38px; + padding-top: 50px; + padding-bottom: 50px; + background-color: #f5f5f5; +} + +.project-wrapper { + position: relative; + bottom: 0px; + display: block; + -webkit-transition: bottom 300ms ease; + transition: bottom 300ms ease; + color: #333; + text-decoration: none; +} + +.project-wrapper:hover { + bottom: 8px; +} + +.team-image { + margin-bottom: 21px; + border-radius: 100%; +} + +.role { + margin-bottom: 16px; + font-family: Vollkorn, serif; + font-size: 17px; + font-style: italic; +} + +.social-link { + width: 29px; + height: 29px; + margin: 3px; + padding-top: 5px; + padding-left: 1px; + border-radius: 100%; + background-color: #f5f5f5; + box-shadow: inset 0 0 0 1px transparent; + -webkit-transition: box-shadow 300ms ease; + transition: box-shadow 300ms ease; +} + +.social-link:hover { + box-shadow: inset 0 0 0 2px #7ec4bd; +} + +.team-title { + margin-bottom: 7px; +} + +.testimonial-slider { + height: auto; + background-color: transparent; +} + +.quote-icon { + margin-bottom: 37px; +} + +.arrow { + width: 40px; + -webkit-transition: color 300ms ease; + transition: color 300ms ease; + color: #e3e3e3; + font-size: 30px; +} + +.arrow:hover { + color: #333; +} + +.testimonial-slide { + width: 50%; + padding: 30px 34px 29px; + text-align: center; +} + +.testimonial-slide.left-border { + border-left: 2px solid rgba(0, 0, 0, 0.04); +} + +.mask { + display: block; + width: 95%; + margin-right: auto; + margin-left: auto; +} + +.team-row { + margin-bottom: 20px; +} + +.testimonial { + margin-bottom: 22px; + font-size: 26px; + line-height: 33px; +} + +.from { + margin-bottom: 0px; + font-family: Montserrat, sans-serif; + color: #ababab; + font-size: 14px; + font-weight: 400; + text-transform: uppercase; +} + +.icon-wrapper { + height: 95px; + margin-bottom: 10px; + padding-top: 13px; +} + +.icon-wrapper._2 { + padding-top: 20px; +} + +.footer-logo { + /* margin-bottom: 15px; */ + opacity: 1.0; +} + +.contact-text { + color: #212121; + font-size: 17px; +} + +.link { + color: #1c1c1c; +} + +.social-wrapper { + display: block; + margin-bottom: 11px; + margin-left: 33%; + -webkit-transition: opacity 300ms ease; + transition: opacity 300ms ease; + text-align: left; + text-decoration: none; +} + +.social-wrapper:hover { + opacity: 0.43; +} + +.footer-text { + /* color: hsla(0, 0%, 100%, 0.4); */ + color: white; +} + +.social-link-text { + display: inline-block; +} + +.social-icon { + margin-top: -6px; + margin-right: 9px; +} + +.field { + height: 57px; + margin-bottom: 0px; + padding-top: 17px; + padding-bottom: 17px; + border: 0px solid #000; + background-color: hsla(0, 0%, 100%, 0.2); + box-shadow: inset 3px 0 0 0 transparent; + color: #7ec4bd; + font-size: 18px; + font-style: italic; +} + +.field:focus { + box-shadow: inset 3px 0 0 0 #7ec4bd; +} + +.field.large { + height: 127px; +} + +.field.darker { + background-color: hsla(0, 0%, 100%, 0.18); + -webkit-transition: box-shadow 300ms ease; + transition: box-shadow 300ms ease; +} + +.form-wrapper { + padding-right: 20%; + padding-left: 20%; +} + +.success-message { + padding-top: 82px; + padding-bottom: 82px; + border-style: solid; + border-width: 1px 1px 2px; + border-color: #7ec4bd; + background-color: transparent; + color: #7ec4bd; +} + +.project-info { + margin-bottom: 20px; + padding-top: 20px; + padding-bottom: 20px; + background-color: #fff; +} + +.project-title { + margin-bottom: 4px; +} + +.grow-row { + margin-bottom: 42px; +} + +.screenshot { + margin-bottom: 43px; +} + +.face { + margin-bottom: 10px; + border-radius: 100%; +} + +@media screen and (max-width: 991px) { + .nav-link { + margin: 0px auto; + padding-top: 20px; + padding-bottom: 20px; + } + .nav-link:hover { + border-bottom-color: transparent; + } + .main-heading { + font-size: 38px; + line-height: 44px; + } + .project-wrapper:hover { + -webkit-transform: translate(0px, 0px); + -ms-transform: translate(0px, 0px); + transform: translate(0px, 0px); + } + .social-wrapper { + margin-left: 30%; + } + .menu-button { + margin-top: 7px; + padding: 10px; + font-size: 32px; + } + .menu-button.w--open { + background-color: transparent; + color: #7ec4bd; + } + .nav-menu { + background-color: #f5f5f5; + } +} + +@media screen and (max-width: 767px) { + .header { + padding-top: 45px; + padding-bottom: 45px; + } + .navbar { + padding-top: 10px; + padding-bottom: 10px; + } + .nav-link { + padding-top: 15px; + padding-bottom: 15px; + padding-left: 10px; + } + .logo-title { + margin-top: 6px; + } + .logo-img { + width: 50px; + } + .about-section { + padding-right: 20px; + padding-bottom: 30px; + padding-left: 20px; + } + .x-icon { + margin-bottom: 21px; + } + .section { + padding-top: 30px; + padding-bottom: 30px; + } + .grey-icon-wrapper { + display: inline-block; + margin-bottom: 16px; + padding: 34px 56px; + } + .grey-icon-wrapper.push-top { + margin-top: 30px; + } + .testimonial-slide { + width: 100%; + } + .testimonial-slide.left-border { + border-left-width: 0px; + } + .icon-wrapper { + height: 85px; + } + .icon-wrapper._2 { + margin-top: 37px; + } + .social-wrapper { + margin-left: 0%; + text-align: center; + } + .form-wrapper { + padding-right: 10%; + padding-left: 10%; + } + .menu-button { + margin-top: 0px; + } + .member { + padding-bottom: 47px; + } + .grow-row { + margin-bottom: 0px; + } + .screenshot { + width: 90%; + } +} + +@media screen and (max-width: 479px) { + .main-heading { + font-size: 34px; + line-height: 38px; + } + .grey-icon-wrapper { + display: block; + } + .form-wrapper { + padding-right: 5%; + padding-left: 5%; + } +} diff --git a/output/static/css/webflow.js b/output/static/css/webflow.js new file mode 100644 index 0000000..013b3b1 --- /dev/null +++ b/output/static/css/webflow.js @@ -0,0 +1,29 @@ +/*! + * Webflow: Front-end site library + * @license MIT + * Inline scripts may access the api using an async handler: + * var Webflow = Webflow || []; + * Webflow.push(readyFunction); + */!function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=4)}([function(t,e,n){"use strict";var i={},r={},a=[],o=window.Webflow||[],s=window.jQuery,u=s(window),c=s(document),l=s.isFunction,f=i._=n(6),d=i.tram=n(1)&&s.tram,h=!1,p=!1;function v(t){i.env()&&(l(t.design)&&u.on("__wf_design",t.design),l(t.preview)&&u.on("__wf_preview",t.preview)),l(t.destroy)&&u.on("__wf_destroy",t.destroy),t.ready&&l(t.ready)&&function(t){if(h)return void t.ready();if(f.contains(a,t.ready))return;a.push(t.ready)}(t)}function m(t){l(t.design)&&u.off("__wf_design",t.design),l(t.preview)&&u.off("__wf_preview",t.preview),l(t.destroy)&&u.off("__wf_destroy",t.destroy),t.ready&&l(t.ready)&&function(t){a=f.filter(a,function(e){return e!==t.ready})}(t)}d.config.hideBackface=!1,d.config.keepInherited=!0,i.define=function(t,e,n){r[t]&&m(r[t]);var i=r[t]=e(s,f,n)||{};return v(i),i},i.require=function(t){return r[t]},i.push=function(t){h?l(t)&&t():o.push(t)},i.env=function(t){var e=window.__wf_design,n=void 0!==e;return t?"design"===t?n&&e:"preview"===t?n&&!e:"slug"===t?n&&window.__wf_slug:"editor"===t?window.WebflowEditor:"test"===t?window.__wf_test:"frame"===t?window!==window.top:void 0:n};var g,w=navigator.userAgent.toLowerCase(),b=i.env.touch="ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch,y=i.env.chrome=/chrome/.test(w)&&/Google/.test(navigator.vendor)&&parseInt(w.match(/chrome\/(\d+)\./)[1],10),x=i.env.ios=/(ipod|iphone|ipad)/.test(w);i.env.safari=/safari/.test(w)&&!y&&!x,b&&c.on("touchstart mousedown",function(t){g=t.target}),i.validClick=b?function(t){return t===g||s.contains(t,g)}:function(){return!0};var k,_="resize.webflow orientationchange.webflow load.webflow";function E(t,e){var n=[],i={};return i.up=f.throttle(function(t){f.each(n,function(e){e(t)})}),t&&e&&t.on(e,i.up),i.on=function(t){"function"==typeof t&&(f.contains(n,t)||n.push(t))},i.off=function(t){n=arguments.length?f.filter(n,function(e){return e!==t}):[]},i}function O(t){l(t)&&t()}function T(){k&&(k.reject(),u.off("load",k.resolve)),k=new s.Deferred,u.on("load",k.resolve)}i.resize=E(u,_),i.scroll=E(u,"scroll.webflow resize.webflow orientationchange.webflow load.webflow"),i.redraw=E(),i.location=function(t){window.location=t},i.env()&&(i.location=function(){}),i.ready=function(){h=!0,p?(p=!1,f.each(r,v)):f.each(a,O),f.each(o,O),i.resize.up()},i.load=function(t){k.then(t)},i.destroy=function(t){t=t||{},p=!0,u.triggerHandler("__wf_destroy"),null!=t.domready&&(h=t.domready),f.each(r,m),i.resize.off(),i.scroll.off(),i.redraw.off(),a=[],o=[],"pending"===k.state()&&T()},s(i.ready),T(),t.exports=window.Webflow=i},function(t,e,n){"use strict";var i=n(2)(n(7));window.tram=function(t){function e(t,e){return(new j.Bare).init(t,e)}function n(t){return t.replace(/[A-Z]/g,function(t){return"-"+t.toLowerCase()})}function r(t){var e=parseInt(t.slice(1),16);return[e>>16&255,e>>8&255,255&e]}function a(t,e,n){return"#"+(1<<24|t<<16|e<<8|n).toString(16).slice(1)}function o(){}function s(t,e,n){c("Units do not match ["+t+"]: "+e+", "+n)}function u(t,e,n){if(void 0!==e&&(n=e),void 0===t)return n;var i=n;return Q.test(t)||!J.test(t)?i=parseInt(t,10):J.test(t)&&(i=1e3*parseFloat(t)),0>i&&(i=0),i==i?i:n}function c(t){B.debug&&window&&window.console.warn(t)}var l=function(t,e,n){function r(t){return"object"==(0,i.default)(t)}function a(t){return"function"==typeof t}function o(){}return function i(s,u){function c(){var t=new l;return a(t.init)&&t.init.apply(t,arguments),t}function l(){}u===n&&(u=s,s=Object),c.Bare=l;var f,d=o[t]=s[t],h=l[t]=c[t]=new o;return h.constructor=c,c.mixin=function(e){return l[t]=c[t]=i(c,e)[t],c},c.open=function(t){if(f={},a(t)?f=t.call(c,h,d,c,s):r(t)&&(f=t),r(f))for(var n in f)e.call(f,n)&&(h[n]=f[n]);return a(h.init)||(h.init=s),c},c.open(u)}}("prototype",{}.hasOwnProperty),f={ease:["ease",function(t,e,n,i){var r=(t/=i)*t,a=r*t;return e+n*(-2.75*a*r+11*r*r+-15.5*a+8*r+.25*t)}],"ease-in":["ease-in",function(t,e,n,i){var r=(t/=i)*t,a=r*t;return e+n*(-1*a*r+3*r*r+-3*a+2*r)}],"ease-out":["ease-out",function(t,e,n,i){var r=(t/=i)*t,a=r*t;return e+n*(.3*a*r+-1.6*r*r+2.2*a+-1.8*r+1.9*t)}],"ease-in-out":["ease-in-out",function(t,e,n,i){var r=(t/=i)*t,a=r*t;return e+n*(2*a*r+-5*r*r+2*a+2*r)}],linear:["linear",function(t,e,n,i){return n*t/i+e}],"ease-in-quad":["cubic-bezier(0.550, 0.085, 0.680, 0.530)",function(t,e,n,i){return n*(t/=i)*t+e}],"ease-out-quad":["cubic-bezier(0.250, 0.460, 0.450, 0.940)",function(t,e,n,i){return-n*(t/=i)*(t-2)+e}],"ease-in-out-quad":["cubic-bezier(0.455, 0.030, 0.515, 0.955)",function(t,e,n,i){return(t/=i/2)<1?n/2*t*t+e:-n/2*(--t*(t-2)-1)+e}],"ease-in-cubic":["cubic-bezier(0.550, 0.055, 0.675, 0.190)",function(t,e,n,i){return n*(t/=i)*t*t+e}],"ease-out-cubic":["cubic-bezier(0.215, 0.610, 0.355, 1)",function(t,e,n,i){return n*((t=t/i-1)*t*t+1)+e}],"ease-in-out-cubic":["cubic-bezier(0.645, 0.045, 0.355, 1)",function(t,e,n,i){return(t/=i/2)<1?n/2*t*t*t+e:n/2*((t-=2)*t*t+2)+e}],"ease-in-quart":["cubic-bezier(0.895, 0.030, 0.685, 0.220)",function(t,e,n,i){return n*(t/=i)*t*t*t+e}],"ease-out-quart":["cubic-bezier(0.165, 0.840, 0.440, 1)",function(t,e,n,i){return-n*((t=t/i-1)*t*t*t-1)+e}],"ease-in-out-quart":["cubic-bezier(0.770, 0, 0.175, 1)",function(t,e,n,i){return(t/=i/2)<1?n/2*t*t*t*t+e:-n/2*((t-=2)*t*t*t-2)+e}],"ease-in-quint":["cubic-bezier(0.755, 0.050, 0.855, 0.060)",function(t,e,n,i){return n*(t/=i)*t*t*t*t+e}],"ease-out-quint":["cubic-bezier(0.230, 1, 0.320, 1)",function(t,e,n,i){return n*((t=t/i-1)*t*t*t*t+1)+e}],"ease-in-out-quint":["cubic-bezier(0.860, 0, 0.070, 1)",function(t,e,n,i){return(t/=i/2)<1?n/2*t*t*t*t*t+e:n/2*((t-=2)*t*t*t*t+2)+e}],"ease-in-sine":["cubic-bezier(0.470, 0, 0.745, 0.715)",function(t,e,n,i){return-n*Math.cos(t/i*(Math.PI/2))+n+e}],"ease-out-sine":["cubic-bezier(0.390, 0.575, 0.565, 1)",function(t,e,n,i){return n*Math.sin(t/i*(Math.PI/2))+e}],"ease-in-out-sine":["cubic-bezier(0.445, 0.050, 0.550, 0.950)",function(t,e,n,i){return-n/2*(Math.cos(Math.PI*t/i)-1)+e}],"ease-in-expo":["cubic-bezier(0.950, 0.050, 0.795, 0.035)",function(t,e,n,i){return 0===t?e:n*Math.pow(2,10*(t/i-1))+e}],"ease-out-expo":["cubic-bezier(0.190, 1, 0.220, 1)",function(t,e,n,i){return t===i?e+n:n*(1-Math.pow(2,-10*t/i))+e}],"ease-in-out-expo":["cubic-bezier(1, 0, 0, 1)",function(t,e,n,i){return 0===t?e:t===i?e+n:(t/=i/2)<1?n/2*Math.pow(2,10*(t-1))+e:n/2*(2-Math.pow(2,-10*--t))+e}],"ease-in-circ":["cubic-bezier(0.600, 0.040, 0.980, 0.335)",function(t,e,n,i){return-n*(Math.sqrt(1-(t/=i)*t)-1)+e}],"ease-out-circ":["cubic-bezier(0.075, 0.820, 0.165, 1)",function(t,e,n,i){return n*Math.sqrt(1-(t=t/i-1)*t)+e}],"ease-in-out-circ":["cubic-bezier(0.785, 0.135, 0.150, 0.860)",function(t,e,n,i){return(t/=i/2)<1?-n/2*(Math.sqrt(1-t*t)-1)+e:n/2*(Math.sqrt(1-(t-=2)*t)+1)+e}],"ease-in-back":["cubic-bezier(0.600, -0.280, 0.735, 0.045)",function(t,e,n,i,r){return void 0===r&&(r=1.70158),n*(t/=i)*t*((r+1)*t-r)+e}],"ease-out-back":["cubic-bezier(0.175, 0.885, 0.320, 1.275)",function(t,e,n,i,r){return void 0===r&&(r=1.70158),n*((t=t/i-1)*t*((r+1)*t+r)+1)+e}],"ease-in-out-back":["cubic-bezier(0.680, -0.550, 0.265, 1.550)",function(t,e,n,i,r){return void 0===r&&(r=1.70158),(t/=i/2)<1?n/2*t*t*((1+(r*=1.525))*t-r)+e:n/2*((t-=2)*t*((1+(r*=1.525))*t+r)+2)+e}]},d={"ease-in-back":"cubic-bezier(0.600, 0, 0.735, 0.045)","ease-out-back":"cubic-bezier(0.175, 0.885, 0.320, 1)","ease-in-out-back":"cubic-bezier(0.680, 0, 0.265, 1)"},h=document,p=window,v="bkwld-tram",m=/[\-\.0-9]/g,g=/[A-Z]/,w="number",b=/^(rgb|#)/,y=/(em|cm|mm|in|pt|pc|px)$/,x=/(em|cm|mm|in|pt|pc|px|%)$/,k=/(deg|rad|turn)$/,_="unitless",E=/(all|none) 0s ease 0s/,O=/^(width|height)$/,T=" ",A=h.createElement("a"),R=["Webkit","Moz","O","ms"],C=["-webkit-","-moz-","-o-","-ms-"],S=function(t){if(t in A.style)return{dom:t,css:t};var e,n,i="",r=t.split("-");for(e=0;ec&&(c=t.span),t.stop(),t.animate(e)},function(t){"wait"in t&&(c=u(t.wait,0))}),d.call(this),c>0&&(this.timer=new H({duration:c,context:this}),this.active=!0,e&&(this.timer.complete=o));var p=this,v=!1,m={};z(function(){h.call(p,t,function(t){t.active&&(v=!0,m[t.name]=t.nextStyle)}),v&&p.$el.css(m)})}}}function o(){if(this.timer&&this.timer.destroy(),this.active=!1,this.queue.length){var t=this.queue.shift();a.call(this,t.options,!0,t.args)}}function s(t){var e;this.timer&&this.timer.destroy(),this.queue=[],this.active=!1,"string"==typeof t?(e={})[t]=1:e="object"==(0,i.default)(t)&&null!=t?t:this.props,h.call(this,e,p),d.call(this)}function l(){s.call(this),this.el.style.display="none"}function f(){this.el.offsetHeight}function d(){var t,e,n=[];for(t in this.upstream&&n.push(this.upstream),this.props)(e=this.props[t]).active&&n.push(e.string);n=n.join(","),this.style!==n&&(this.style=n,this.el.style[D.transition.dom]=n)}function h(t,e,i){var a,o,s,u,c=e!==p,l={};for(a in t)s=t[a],a in K?(l.transform||(l.transform={}),l.transform[a]=s):(g.test(a)&&(a=n(a)),a in Y?l[a]=s:(u||(u={}),u[a]=s));for(a in l){if(s=l[a],!(o=this.props[a])){if(!c)continue;o=r.call(this,a)}e.call(this,o,s)}i&&u&&i.call(this,u)}function p(t){t.stop()}function m(t,e){t.set(e)}function w(t){this.$el.css(t)}function b(t,n){e[t]=function(){return this.children?function(t,e){var n,i=this.children.length;for(n=0;i>n;n++)t.apply(this.children[n],e);return this}.call(this,n,arguments):(this.el&&n.apply(this,arguments),this)}}e.init=function(e){if(this.$el=t(e),this.el=this.$el[0],this.props={},this.queue=[],this.style="",this.active=!1,B.keepInherited&&!B.fallback){var n=G(this.el,"transition");n&&!E.test(n)&&(this.upstream=n)}D.backface&&B.hideBackface&&X(this.el,D.backface.css,"hidden")},b("add",r),b("start",a),b("wait",function(t){t=u(t,0),this.active?this.queue.push({options:t}):(this.timer=new H({duration:t,context:this,complete:o}),this.active=!0)}),b("then",function(t){return this.active?(this.queue.push({options:t,args:arguments}),void(this.timer.complete=o)):c("No active transition timer. Use start() or wait() before then().")}),b("next",o),b("stop",s),b("set",function(t){s.call(this,t),h.call(this,t,m,w)}),b("show",function(t){"string"!=typeof t&&(t="block"),this.el.style.display=t}),b("hide",l),b("redraw",f),b("destroy",function(){s.call(this),t.removeData(this.el,v),this.$el=this.el=null})}),j=l(L,function(e){function n(e,n){var i=t.data(e,v)||t.data(e,v,new L.Bare);return i.el||i.init(e),n?i.start(n):i}e.init=function(e,i){var r=t(e);if(!r.length)return this;if(1===r.length)return n(r[0],i);var a=[];return r.each(function(t,e){a.push(n(e,i))}),this.children=a,this}}),W=l(function(t){function e(){var t=this.get();this.update("auto");var e=this.get();return this.update(t),e}function n(t){var e=/rgba?\((\d+),\s*(\d+),\s*(\d+)/.exec(t);return(e?a(e[1],e[2],e[3]):t).replace(/#(\w)(\w)(\w)$/,"#$1$1$2$2$3$3")}var r=500,o="ease",s=0;t.init=function(t,e,n,i){this.$el=t,this.el=t[0];var a=e[0];n[2]&&(a=n[2]),Z[a]&&(a=Z[a]),this.name=a,this.type=n[1],this.duration=u(e[1],this.duration,r),this.ease=function(t,e,n){return void 0!==e&&(n=e),t in f?t:n}(e[2],this.ease,o),this.delay=u(e[3],this.delay,s),this.span=this.duration+this.delay,this.active=!1,this.nextStyle=null,this.auto=O.test(this.name),this.unit=i.unit||this.unit||B.defaultUnit,this.angle=i.angle||this.angle||B.defaultAngle,B.fallback||i.fallback?this.animate=this.fallback:(this.animate=this.transition,this.string=this.name+T+this.duration+"ms"+("ease"!=this.ease?T+f[this.ease][0]:"")+(this.delay?T+this.delay+"ms":""))},t.set=function(t){t=this.convert(t,this.type),this.update(t),this.redraw()},t.transition=function(t){this.active=!0,t=this.convert(t,this.type),this.auto&&("auto"==this.el.style[this.name]&&(this.update(this.get()),this.redraw()),"auto"==t&&(t=e.call(this))),this.nextStyle=t},t.fallback=function(t){var n=this.el.style[this.name]||this.convert(this.get(),this.type);t=this.convert(t,this.type),this.auto&&("auto"==n&&(n=this.convert(this.get(),this.type)),"auto"==t&&(t=e.call(this))),this.tween=new q({from:n,to:t,duration:this.duration,delay:this.delay,ease:this.ease,update:this.update,context:this})},t.get=function(){return G(this.el,this.name)},t.update=function(t){X(this.el,this.name,t)},t.stop=function(){(this.active||this.nextStyle)&&(this.active=!1,this.nextStyle=null,X(this.el,this.name,this.get()));var t=this.tween;t&&t.context&&t.destroy()},t.convert=function(t,e){if("auto"==t&&this.auto)return t;var r,a="number"==typeof t,o="string"==typeof t;switch(e){case w:if(a)return t;if(o&&""===t.replace(m,""))return+t;r="number(unitless)";break;case b:if(o){if(""===t&&this.original)return this.original;if(e.test(t))return"#"==t.charAt(0)&&7==t.length?t:n(t)}r="hex or rgb string";break;case y:if(a)return t+this.unit;if(o&&e.test(t))return t;r="number(px) or string(unit)";break;case x:if(a)return t+this.unit;if(o&&e.test(t))return t;r="number(px) or string(unit or %)";break;case k:if(a)return t+this.angle;if(o&&e.test(t))return t;r="number(deg) or string(angle)";break;case _:if(a)return t;if(o&&x.test(t))return t;r="number(unitless) or string(unit or %)"}return function(t,e){c("Type warning: Expected: ["+t+"] Got: ["+(0,i.default)(e)+"] "+e)}(r,t),t},t.redraw=function(){this.el.offsetHeight}}),F=l(W,function(t,e){t.init=function(){e.init.apply(this,arguments),this.original||(this.original=this.convert(this.get(),b))}}),N=l(W,function(t,e){t.init=function(){e.init.apply(this,arguments),this.animate=this.fallback},t.get=function(){return this.$el[this.name]()},t.update=function(t){this.$el[this.name](t)}}),$=l(W,function(t,e){function n(t,e){var n,i,r,a,o;for(n in t)r=(a=K[n])[0],i=a[1]||n,o=this.convert(t[n],r),e.call(this,i,o,r)}t.init=function(){e.init.apply(this,arguments),this.current||(this.current={},K.perspective&&B.perspective&&(this.current.perspective=B.perspective,X(this.el,this.name,this.style(this.current)),this.redraw()))},t.set=function(t){n.call(this,t,function(t,e){this.current[t]=e}),X(this.el,this.name,this.style(this.current)),this.redraw()},t.transition=function(t){var e=this.values(t);this.tween=new U({current:this.current,values:e,duration:this.duration,delay:this.delay,ease:this.ease});var n,i={};for(n in this.current)i[n]=n in e?e[n]:this.current[n];this.active=!0,this.nextStyle=this.style(i)},t.fallback=function(t){var e=this.values(t);this.tween=new U({current:this.current,values:e,duration:this.duration,delay:this.delay,ease:this.ease,update:this.update,context:this})},t.update=function(){X(this.el,this.name,this.style(this.current))},t.style=function(t){var e,n="";for(e in t)n+=e+"("+t[e]+") ";return n},t.values=function(t){var e,i={};return n.call(this,t,function(t,n,r){i[t]=n,void 0===this.current[t]&&(e=0,~t.indexOf("scale")&&(e=1),this.current[t]=this.convert(e,r))}),i}}),q=l(function(e){function n(){var t,e,i,r=u.length;if(r)for(z(n),e=P(),t=r;t--;)(i=u[t])&&i.render(e)}var i={ease:f.ease[1],from:0,to:1};e.init=function(t){this.duration=t.duration||0,this.delay=t.delay||0;var e=t.ease||i.ease;f[e]&&(e=f[e][1]),"function"!=typeof e&&(e=i.ease),this.ease=e,this.update=t.update||o,this.complete=t.complete||o,this.context=t.context||this,this.name=t.name;var n=t.from,r=t.to;void 0===n&&(n=i.from),void 0===r&&(r=i.to),this.unit=t.unit||"","number"==typeof n&&"number"==typeof r?(this.begin=n,this.change=r-n):this.format(r,n),this.value=this.begin+this.unit,this.start=P(),!1!==t.autoplay&&this.play()},e.play=function(){var t;this.active||(this.start||(this.start=P()),this.active=!0,t=this,1===u.push(t)&&z(n))},e.stop=function(){var e,n,i;this.active&&(this.active=!1,e=this,(i=t.inArray(e,u))>=0&&(n=u.slice(i+1),u.length=i,n.length&&(u=u.concat(n))))},e.render=function(t){var e,n=t-this.start;if(this.delay){if(n<=this.delay)return;n-=this.delay}if(n').attr("href","https://webflow.com?utm_campaign=brandjs"),i=t("").attr("src","https://d3e54v103j8qbb.cloudfront.net/img/webflow-badge-icon.f67cd735e3.svg").attr("alt","").css({marginRight:"8px",width:"16px"}),o=t("").attr("src","https://d1otoma47x30pg.cloudfront.net/img/webflow-badge-text.6faa6a38cd.svg").attr("alt","Made in Webflow"),n.append(i,o),n[0]),d(),setTimeout(d,500),t(r).off(l,f).on(l,f))},n})},function(t,e,n){"use strict";var i=window.$,r=n(1)&&i.tram; +/*! + * Webflow._ (aka) Underscore.js 1.6.0 (custom build) + * _.each + * _.map + * _.find + * _.filter + * _.any + * _.contains + * _.delay + * _.defer + * _.throttle (webflow) + * _.debounce + * _.keys + * _.has + * _.now + * + * http://underscorejs.org + * (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Underscore may be freely distributed under the MIT license. + * @license MIT + */ +t.exports=function(){var t={VERSION:"1.6.0-Webflow"},e={},n=Array.prototype,i=Object.prototype,a=Function.prototype,o=(n.push,n.slice),s=(n.concat,i.toString,i.hasOwnProperty),u=n.forEach,c=n.map,l=(n.reduce,n.reduceRight,n.filter),f=(n.every,n.some),d=n.indexOf,h=(n.lastIndexOf,Array.isArray,Object.keys),p=(a.bind,t.each=t.forEach=function(n,i,r){if(null==n)return n;if(u&&n.forEach===u)n.forEach(i,r);else if(n.length===+n.length){for(var a=0,o=n.length;a/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var m=/(.)^/,g={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},w=/\\|'|\r|\n|\u2028|\u2029/g,b=function(t){return"\\"+g[t]};return t.template=function(e,n,i){!n&&i&&(n=i),n=t.defaults({},n,t.templateSettings);var r=RegExp([(n.escape||m).source,(n.interpolate||m).source,(n.evaluate||m).source].join("|")+"|$","g"),a=0,o="__p+='";e.replace(r,function(t,n,i,r,s){return o+=e.slice(a,s).replace(w,b),a=s+t.length,n?o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":i?o+="'+\n((__t=("+i+"))==null?'':__t)+\n'":r&&(o+="';\n"+r+"\n__p+='"),t}),o+="';\n",n.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{var s=new Function(n.variable||"obj","_",o)}catch(t){throw t.source=o,t}var u=function(e){return s.call(this,e,t)},c=n.variable||"obj";return u.source="function("+c+"){\n"+o+"}",u},t}()},function(t,e){function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(e){return"function"==typeof Symbol&&"symbol"===n(Symbol.iterator)?t.exports=i=function(t){return n(t)}:t.exports=i=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":n(t)},i(e)}t.exports=i},function(t,e,n){"use strict";var i=n(0);i.define("edit",t.exports=function(t,e,n){if(n=n||{},(i.env("test")||i.env("frame"))&&!n.fixture&&!function(){try{return window.top.__Cypress__}catch(t){return!1}}())return{exit:1};var r,a=t(window),o=t(document.documentElement),s=document.location,u="hashchange",c=n.load||function(){r=!0,window.WebflowEditor=!0,a.off(u,f),function(t){var e=window.document.createElement("iframe");e.src="https://webflow.com/site/third-party-cookie-check.html",e.style.display="none",e.sandbox="allow-scripts allow-same-origin";var n=function n(i){"WF_third_party_cookies_unsupported"===i.data?(g(e,n),t(!1)):"WF_third_party_cookies_supported"===i.data&&(g(e,n),t(!0))};e.onerror=function(){g(e,n),t(!1)},window.addEventListener("message",n,!1),window.document.body.appendChild(e)}(function(e){t.ajax({url:m("https://editor-api.webflow.com/api/editor/view"),data:{siteId:o.attr("data-wf-site")},xhrFields:{withCredentials:!0},dataType:"json",crossDomain:!0,success:d(e)})})},l=!1;try{l=localStorage&&localStorage.getItem&&localStorage.getItem("WebflowEditor")}catch(t){}function f(){r||/\?edit/.test(s.hash)&&c()}function d(t){return function(e){e?(e.thirdPartyCookiesSupported=t,h(v(e.bugReporterScriptPath),function(){h(v(e.scriptPath),function(){window.WebflowEditor(e)})})):console.error("Could not load editor data")}}function h(e,n){t.ajax({type:"GET",url:e,dataType:"script",cache:!0}).then(n,p)}function p(t,e,n){throw console.error("Could not load editor script: "+e),n}function v(t){return t.indexOf("//")>=0?t:m("https://editor-api.webflow.com"+t)}function m(t){return t.replace(/([^:])\/\//g,"$1/")}function g(t,e){window.removeEventListener("message",e,!1),t.remove()}return l?c():s.search?(/[?&](edit)(?:[=&?]|$)/.test(s.search)||/\?edit$/.test(s.href))&&c():a.on(u,f).triggerHandler(u),{}})},function(t,e,n){"use strict";var i=n(0);i.define("links",t.exports=function(t,e){var n,r,a,o={},s=t(window),u=i.env(),c=window.location,l=document.createElement("a"),f="w--current",d=/index\.(html|php)$/,h=/\/$/;function p(e){var i=n&&e.getAttribute("href-disabled")||e.getAttribute("href");if(l.href=i,!(i.indexOf(":")>=0)){var o=t(e);if(l.hash.length>1&&l.host+l.pathname===c.host+c.pathname){if(!/^#[a-zA-Z0-9\-\_]+$/.test(l.hash))return;var s=t(l.hash);s.length&&r.push({link:o,sec:s,active:!1})}else if("#"!==i&&""!==i){var u=l.href===c.href||i===a||d.test(i)&&h.test(a);m(o,f,u)}}}function v(){var t=s.scrollTop(),n=s.height();e.each(r,function(e){var i=e.link,r=e.sec,a=r.offset().top,o=r.outerHeight(),s=.5*n,u=r.is(":visible")&&a+o-s>=t&&a+s<=t+n;e.active!==u&&(e.active=u,m(i,f,u))})}function m(t,e,n){var i=t.hasClass(e);n&&i||(n||i)&&(n?t.addClass(e):t.removeClass(e))}return o.ready=o.design=o.preview=function(){n=u&&i.env("design"),a=i.env("slug")||c.pathname||"",i.scroll.off(v),r=[];for(var t=document.links,e=0;e .header, "+l+" > .w-nav:not([data-no-scroll])"),d="fixed"===f.css("position")?f.outerHeight():0;a.setTimeout(function(){!function(e,n){var i=t(a).scrollTop(),r=e.offset().top-n;if("mid"===e.data("scroll")){var o=t(a).height()-n,s=e.outerHeight();s0)&&(u=e)}),Date.now||(Date.now=function(){return(new Date).getTime()});var c=Date.now(),l=a.requestAnimationFrame||a.mozRequestAnimationFrame||a.webkitRequestAnimationFrame||function(t){a.setTimeout(t,15)},f=(472.143*Math.log(Math.abs(i-r)+125)-2e3)*u;!function t(){var e=Date.now()-c;a.scroll(0,function(t,e,n,i){if(n>i)return e;return t+(e-t)*(r=n/i,r<.5?4*r*r*r:(r-1)*(2*r-2)*(2*r-2)+1);var r}(i,r,e,f)),e<=f&&l(t)}()}(r,d)},n?0:300)}(c,n)}}return{ready:function(){var t=n.CLICK_EMPTY,i=n.CLICK_SCROLL;e=o.href.split("#")[0],r.on(i,l,f),r.on(t,c,function(t){t.preventDefault()})}}})},function(t,e,n){"use strict";n(0).define("touch",t.exports=function(t){var e={},n=window.getSelection;function i(e){var i,r,a=!1,o=!1,s=Math.min(Math.round(.04*window.innerWidth),40);function u(t){var e=t.touches;e&&e.length>1||(a=!0,e?(o=!0,i=e[0].clientX):i=t.clientX,r=i)}function c(e){if(a){if(o&&"mousemove"===e.type)return e.preventDefault(),void e.stopPropagation();var i=e.touches,u=i?i[0].clientX:e.clientX,c=u-r;r=u,Math.abs(c)>s&&n&&""===String(n())&&(!function(e,n,i){var r=t.Event(e,{originalEvent:n});t(n.target).trigger(r,i)}("swipe",e,{direction:c>0?"right":"left"}),f())}}function l(t){if(a)return a=!1,o&&"mouseup"===t.type?(t.preventDefault(),t.stopPropagation(),void(o=!1)):void 0}function f(){a=!1}e.addEventListener("touchstart",u,!1),e.addEventListener("touchmove",c,!1),e.addEventListener("touchend",l,!1),e.addEventListener("touchcancel",f,!1),e.addEventListener("mousedown",u,!1),e.addEventListener("mousemove",c,!1),e.addEventListener("mouseup",l,!1),e.addEventListener("mouseout",f,!1),this.destroy=function(){e.removeEventListener("touchstart",u,!1),e.removeEventListener("touchmove",c,!1),e.removeEventListener("touchend",l,!1),e.removeEventListener("touchcancel",f,!1),e.removeEventListener("mousedown",u,!1),e.removeEventListener("mousemove",c,!1),e.removeEventListener("mouseup",l,!1),e.removeEventListener("mouseout",f,!1),e=null}}return t.event.special.tap={bindType:"click",delegateType:"click"},e.init=function(e){return(e="string"==typeof e?t(e).get(0):e)?new i(e):null},e.instance=e.init(document),e})},function(t,e,n){"use strict";var i=n(2)(n(13)),r=n(0);r.define("forms",t.exports=function(t,e){var n,a,o,s,u,c={},l=t(document),f=window.location,d=window.XDomainRequest&&!window.atob,h=".w-form",p=/e(-)?mail/i,v=/^\S+@\S+$/,m=window.alert,g=r.env(),w=/list-manage[1-9]?.com/i,b=e.debounce(function(){m("Oops! This page has improperly configured forms. Please contact your website administrator to fix this issue.")},100);function y(e,n){var i=t(n),r=t.data(n,h);r||(r=t.data(n,h,{form:i})),x(r);var o=i.closest("div.w-form");r.done=o.find("> .w-form-done"),r.fail=o.find("> .w-form-fail"),r.fileUploads=o.find(".w-file-upload"),r.fileUploads.each(function(e){!function(e,n){if(!n.fileUploads||!n.fileUploads[e])return;var i,r=t(n.fileUploads[e]),a=r.find("> .w-file-upload-default"),o=r.find("> .w-file-upload-uploading"),s=r.find("> .w-file-upload-success"),c=r.find("> .w-file-upload-error"),l=a.find(".w-file-upload-input"),f=a.find(".w-file-upload-label"),d=f.children(),h=c.find(".w-file-upload-error-msg"),p=s.find(".w-file-upload-file"),v=s.find(".w-file-remove-link"),m=p.find(".w-file-upload-file-name"),w=h.attr("data-w-size-error"),b=h.attr("data-w-type-error"),y=h.attr("data-w-generic-error");if(g)l.on("click",function(t){t.preventDefault()}),f.on("click",function(t){t.preventDefault()}),d.on("click",function(t){t.preventDefault()});else{v.on("click",function(){l.removeAttr("data-value"),l.val(""),m.html(""),a.toggle(!0),s.toggle(!1)}),l.on("change",function(r){(i=r.target&&r.target.files&&r.target.files[0])&&(a.toggle(!1),c.toggle(!1),o.toggle(!0),m.text(i.name),A()||k(n),n.fileUploads[e].uploading=!0,function(e,n){var i={name:e.name,size:e.size};t.ajax({type:"POST",url:u,data:i,dataType:"json",crossDomain:!0}).done(function(t){n(null,t)}).fail(function(t){n(t)})}(i,O))});var _=f.outerHeight();l.height(_),l.width(1)}function E(t){var i=t.responseJSON&&t.responseJSON.msg,r=y;"string"==typeof i&&0===i.indexOf("InvalidFileTypeError")?r=b:"string"==typeof i&&0===i.indexOf("MaxFileSizeError")&&(r=w),h.text(r),l.removeAttr("data-value"),l.val(""),o.toggle(!1),a.toggle(!0),c.toggle(!0),n.fileUploads[e].uploading=!1,A()||x(n)}function O(e,n){if(e)return E(e);var r=n.fileName,a=n.postData,o=n.fileId,s=n.s3Url;l.attr("data-value",o),function(e,n,i,r,a){var o=new FormData;for(var s in n)o.append(s,n[s]);o.append("file",i,r),t.ajax({type:"POST",url:e,data:o,processData:!1,contentType:!1}).done(function(){a(null)}).fail(function(t){a(t)})}(s,a,i,r,T)}function T(t){if(t)return E(t);o.toggle(!1),s.css("display","inline-block"),n.fileUploads[e].uploading=!1,A()||x(n)}function A(){var t=n.fileUploads&&n.fileUploads.toArray()||[];return t.some(function(t){return t.uploading})}}(e,r)});var s=r.action=i.attr("action");r.handler=null,r.redirect=i.attr("data-redirect"),w.test(s)?r.handler=O:s||(a?r.handler=E:b())}function x(t){var e=t.btn=t.form.find(':input[type="submit"]');t.wait=t.btn.attr("data-wait")||null,t.success=!1,e.prop("disabled",!1),t.label&&e.val(t.label)}function k(t){var e=t.btn,n=t.wait;e.prop("disabled",!0),n&&(t.label=e.val(),e.val(n))}function _(e,n){var i=null;return n=n||{},e.find(':input:not([type="submit"]):not([type="file"])').each(function(r,a){var o=t(a),s=o.attr("type"),u=o.attr("data-name")||o.attr("name")||"Field "+(r+1),c=o.val();if("checkbox"===s)c=o.is(":checked");else if("radio"===s){if(null===n[u]||"string"==typeof n[u])return;c=e.find('input[name="'+o.attr("name")+'"]:checked').val()||null}"string"==typeof c&&(c=t.trim(c)),n[u]=c,i=i||function(t,e,n,i){var r=null;"password"===e?r="Passwords cannot be submitted.":t.attr("required")?i?p.test(t.attr("type"))&&(v.test(i)||(r="Please enter a valid email address for: "+n)):r="Please fill out the required field: "+n:"g-recaptcha-response"!==n||i||(r="Please confirm you’re not a robot.");return r}(o,s,u,c)}),i}function E(e){x(e);var n=e.form,i={name:n.attr("data-name")||n.attr("name")||"Untitled Form",source:f.href,test:r.env(),fields:{},fileUploads:{},dolphin:/pass[\s-_]?(word|code)|secret|login|credentials/i.test(n.html())};A(e);var o=_(n,i.fields);if(o)return m(o);i.fileUploads=function(e){var n={};return e.find(':input[type="file"]').each(function(e,i){var r=t(i),a=r.attr("data-name")||r.attr("name")||"File "+(e+1),o=r.attr("data-value");"string"==typeof o&&(o=t.trim(o)),n[a]=o}),n}(n),k(e),a?t.ajax({url:s,type:"POST",data:i,dataType:"json",crossDomain:!0}).done(function(t){t&&200===t.code&&(e.success=!0),T(e)}).fail(function(){T(e)}):T(e)}function O(n){x(n);var i=n.form,r={};if(!/^https/.test(f.href)||/^https/.test(n.action)){A(n);var a,o=_(i,r);if(o)return m(o);k(n),e.each(r,function(t,e){p.test(e)&&(r.EMAIL=t),/^((full[ _-]?)?name)$/i.test(e)&&(a=t),/^(first[ _-]?name)$/i.test(e)&&(r.FNAME=t),/^(last[ _-]?name)$/i.test(e)&&(r.LNAME=t)}),a&&!r.FNAME&&(a=a.split(" "),r.FNAME=a[0],r.LNAME=r.LNAME||a[1]);var s=n.action.replace("/post?","/post-json?")+"&c=?",u=s.indexOf("u=")+2;u=s.substring(u,s.indexOf("&",u));var c=s.indexOf("id=")+3;c=s.substring(c,s.indexOf("&",c)),r["b_"+u+"_"+c]="",t.ajax({url:s,data:r,dataType:"jsonp"}).done(function(t){n.success="success"===t.result||/already/.test(t.msg),n.success||console.info("MailChimp error: "+t.msg),T(n)}).fail(function(){T(n)})}else i.attr("method","post")}function T(t){var e=t.form,n=t.redirect,i=t.success;i&&n?r.location(n):(t.done.toggle(i),t.fail.toggle(!i),e.toggle(!i),x(t))}function A(t){t.evt&&t.evt.preventDefault(),t.evt=null}return c.ready=c.design=c.preview=function(){!function(){a=t("html").attr("data-wf-site"),s="https://webflow.com/api/v1/form/"+a,d&&s.indexOf("https://webflow.com")>=0&&(s=s.replace("https://webflow.com","http://formdata.webflow.com"));if(u="".concat(s,"/signFile"),!(n=t(h+" form")).length)return;n.each(y)}(),g||o||function(){o=!0,l.on("submit",h+" form",function(e){var n=t.data(this,h);n.handler&&(n.evt=e,n.handler(n))});var e=[["checkbox",".w-checkbox-input"],["radio",".w-radio-input"]];l.on("change",h+' form input[type="checkbox"]:not(.w-checkbox-input)',function(e){t(e.target).siblings(".w-checkbox-input").toggleClass("w--redirected-checked")}),l.on("change",h+' form input[type="radio"]',function(e){t('input[name="'.concat(e.target.name,'"]:not(').concat(".w-checkbox-input",")")).map(function(e,n){return t(n).siblings(".w-radio-input").removeClass("w--redirected-checked")});var n=t(e.target);n.hasClass("w-radio-input")||n.siblings(".w-radio-input").addClass("w--redirected-checked")}),e.forEach(function(e){var n=(0,i.default)(e,2),r=n[0],a=n[1];l.on("focus",h+' form input[type="'.concat(r,'"]:not(')+a+")",function(e){t(e.target).siblings(a).addClass("w--redirected-focus")}),l.on("blur",h+' form input[type="'.concat(r,'"]:not(')+a+")",function(e){t(e.target).siblings(a).removeClass("w--redirected-focus")})})}()},c})},function(t,e,n){var i=n(14),r=n(15),a=n(16);t.exports=function(t,e){return i(t)||r(t,e)||a()}},function(t,e){t.exports=function(t){if(Array.isArray(t))return t}},function(t,e){t.exports=function(t,e){var n=[],i=!0,r=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(i=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);i=!0);}catch(t){r=!0,a=t}finally{try{i||null==s.return||s.return()}finally{if(r)throw a}}return n}},function(t,e){t.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}},function(t,e,n){"use strict";var i=n(0),r=n(3),a={ARROW_LEFT:37,ARROW_UP:38,ARROW_RIGHT:39,ARROW_DOWN:40,ESCAPE:27,SPACE:32,ENTER:13,HOME:36,END:35};i.define("navbar",t.exports=function(t,e){var n,o,s,u,c={},l=t.tram,f=t(window),d=t(document),h=e.debounce,p=i.env(),v='
',m=".w-nav",g="w--open",w="w--nav-dropdown-open",b="w--nav-dropdown-toggle-open",y="w--nav-dropdown-list-open",x="w--nav-link-open",k=r.triggers,_=t();function E(){i.resize.off(O)}function O(){o.each(P)}function T(n,i){var r=t(i),o=t.data(i,m);o||(o=t.data(i,m,{open:!1,el:r,config:{},selectedIdx:-1})),o.menu=r.find(".w-nav-menu"),o.links=o.menu.find(".w-nav-link"),o.dropdowns=o.menu.find(".w-dropdown"),o.dropdownToggle=o.menu.find(".w-dropdown-toggle"),o.dropdownList=o.menu.find(".w-dropdown-list"),o.button=r.find(".w-nav-button"),o.container=r.find(".w-container"),o.overlayContainerId="w-nav-overlay-"+n,o.outside=function(e){e.outside&&d.off("click"+m,e.outside);return function(n){var i=t(n.target);u&&i.closest(".w-editor-bem-EditorOverlay").length||z(e,i)}}(o);var c=r.find(".w-nav-brand");c&&"/"===c.attr("href")&&null==c.attr("aria-label")&&c.attr("aria-label","home"),o.button.attr("style","-webkit-user-select: text;"),null==o.button.attr("aria-label")&&o.button.attr("aria-label","menu"),o.button.attr("role","button"),o.button.attr("tabindex","0"),o.button.attr("aria-controls",o.overlayContainerId),o.button.attr("aria-haspopup","menu"),o.button.attr("aria-expanded","false"),o.el.off(m),o.button.off(m),o.menu.off(m),C(o),s?(R(o),o.el.on("setting"+m,function(t){return function(n,i){i=i||{};var r=f.width();C(t),!0===i.open&&F(t,!0),!1===i.open&&$(t,!0),t.open&&e.defer(function(){r!==f.width()&&D(t)})}}(o))):(!function(e){if(e.overlay)return;e.overlay=t(v).appendTo(e.el),e.overlay.attr("id",e.overlayContainerId),e.parent=e.menu.parent(),$(e,!0)}(o),o.button.on("click"+m,I(o)),o.menu.on("click"+m,"a",M(o)),o.button.on("keydown"+m,function(t){return function(e){switch(e.keyCode){case a.SPACE:case a.ENTER:return I(t)(),e.preventDefault(),e.stopPropagation();case a.ESCAPE:return $(t),e.preventDefault(),e.stopPropagation();case a.ARROW_RIGHT:case a.ARROW_DOWN:case a.HOME:case a.END:return t.open?(e.keyCode===a.END?t.selectedIdx=t.links.length-1:t.selectedIdx=0,S(t),e.preventDefault(),e.stopPropagation()):(e.preventDefault(),e.stopPropagation())}}}(o)),o.el.on("keydown"+m,function(t){return function(e){if(t.open)switch(t.selectedIdx=t.links.index(document.activeElement),e.keyCode){case a.HOME:case a.END:return e.keyCode===a.END?t.selectedIdx=t.links.length-1:t.selectedIdx=0,S(t),e.preventDefault(),e.stopPropagation();case a.ESCAPE:return $(t),t.button.focus(),e.preventDefault(),e.stopPropagation();case a.ARROW_LEFT:case a.ARROW_UP:return t.selectedIdx=Math.max(-1,t.selectedIdx-1),S(t),e.preventDefault(),e.stopPropagation();case a.ARROW_RIGHT:case a.ARROW_DOWN:return t.selectedIdx=Math.min(t.links.length-1,t.selectedIdx+1),S(t),e.preventDefault(),e.stopPropagation()}}}(o))),P(n,i)}function A(e,n){var i=t.data(n,m);i&&(R(i),t.removeData(n,m))}function R(t){t.overlay&&($(t,!0),t.overlay.remove(),t.overlay=null)}function C(t){var n={},i=t.config||{},r=n.animation=t.el.attr("data-animation")||"default";n.animOver=/^over/.test(r),n.animDirect=/left$/.test(r)?-1:1,i.animation!==r&&t.open&&e.defer(D,t),n.easing=t.el.attr("data-easing")||"ease",n.easing2=t.el.attr("data-easing2")||"ease";var a=t.el.attr("data-duration");n.duration=null!=a?Number(a):400,n.docHeight=t.el.attr("data-doc-height"),t.config=n}function S(t){if(t.links[t.selectedIdx]){var e=t.links[t.selectedIdx];e.focus(),M(e)}}function D(t){t.open&&($(t,!0),F(t,!0))}function I(t){return h(function(){t.open?$(t):F(t)})}function M(e){return function(n){var r=t(this).attr("href");i.validClick(n.currentTarget)?r&&0===r.indexOf("#")&&e.open&&$(e):n.preventDefault()}}c.ready=c.design=c.preview=function(){if(s=p&&i.env("design"),u=i.env("editor"),n=t(document.body),!(o=d.find(m)).length)return;o.each(T),E(),i.resize.on(O)},c.destroy=function(){_=t(),E(),o&&o.length&&o.each(A)};var z=h(function(t,e){if(t.open){var n=e.closest(".w-nav-menu");t.menu.is(n)||$(t)}});function P(e,n){var i=t.data(n,m),r=i.collapsed="none"!==i.button.css("display");if(!i.open||r||s||$(i,!0),i.container.length){var a=function(e){var n=e.container.css(L);"none"===n&&(n="");return function(e,i){(i=t(i)).css(L,""),"none"===i.css(L)&&i.css(L,n)}}(i);i.links.each(a),i.dropdowns.each(a)}i.open&&N(i)}var L="max-width";function j(t,e){e.setAttribute("data-nav-menu-open","")}function W(t,e){e.removeAttribute("data-nav-menu-open")}function F(t,e){if(!t.open){t.open=!0,t.menu.each(j),t.links.addClass(x),t.dropdowns.addClass(w),t.dropdownToggle.addClass(b),t.dropdownList.addClass(y),t.button.addClass(g);var n=t.config;"none"!==n.animation&&l.support.transform||(e=!0);var r=N(t),a=t.menu.outerHeight(!0),o=t.menu.outerWidth(!0),u=t.el.height(),c=t.el[0];if(P(0,c),k.intro(0,c),i.redraw.up(),s||d.on("click"+m,t.outside),e)p();else{var f="transform "+n.duration+"ms "+n.easing;if(t.overlay&&(_=t.menu.prev(),t.overlay.show().append(t.menu)),n.animOver)return l(t.menu).add(f).set({x:n.animDirect*o,height:r}).start({x:0}).then(p),void(t.overlay&&t.overlay.width(o));var h=u+a;l(t.menu).add(f).set({y:-h}).start({y:0}).then(p)}}function p(){t.button.attr("aria-expanded","true")}}function N(t){var e=t.config,i=e.docHeight?d.height():n.height();return e.animOver?t.menu.height(i):"fixed"!==t.el.css("position")&&(i-=t.el.outerHeight(!0)),t.overlay&&t.overlay.height(i),i}function $(t,e){if(t.open){t.open=!1,t.button.removeClass(g);var n=t.config;if(("none"===n.animation||!l.support.transform||n.duration<=0)&&(e=!0),k.outro(0,t.el[0]),d.off("click"+m,t.outside),e)return l(t.menu).stop(),void u();var i="transform "+n.duration+"ms "+n.easing2,r=t.menu.outerHeight(!0),a=t.menu.outerWidth(!0),o=t.el.height();if(n.animOver)l(t.menu).add(i).start({x:a*n.animDirect}).then(u);else{var s=o+r;l(t.menu).add(i).start({y:-s}).then(u)}}function u(){t.menu.height(""),l(t.menu).set({x:0,y:0}),t.menu.each(W),t.links.removeClass(x),t.dropdowns.removeClass(w),t.dropdownToggle.removeClass(b),t.dropdownList.removeClass(y),t.overlay&&t.overlay.children().length&&(_.length?t.menu.insertAfter(_):t.menu.prependTo(t.parent),t.overlay.attr("style","").hide()),t.el.triggerHandler("w-close"),t.button.attr("aria-expanded","false")}}return c})},function(t,e,n){"use strict";var i=window.jQuery,r={},a=[],o={reset:function(t,e){e.__wf_intro=null},intro:function(t,e){e.__wf_intro||(e.__wf_intro=!0,i(e).triggerHandler(r.types.INTRO))},outro:function(t,e){e.__wf_intro&&(e.__wf_intro=null,i(e).triggerHandler(r.types.OUTRO))}};r.triggers={},r.types={INTRO:"w-ix-intro.w-ix",OUTRO:"w-ix-outro.w-ix"},r.init=function(){for(var t=a.length,e=0;e',m='
',g=r.triggers;function w(){(n=d.find(p)).length&&(n.each(x),c=null,u||(b(),i.resize.on(y),i.redraw.on(l.redraw)))}function b(){i.resize.off(y),i.redraw.off(l.redraw)}function y(){n.filter(":visible").each(M)}function x(e,n){var i=t(n),r=t.data(n,p);r||(r=t.data(n,p,{index:0,depth:1,hasFocus:{keyboard:!1,mouse:!1},el:i,config:{}})),r.mask=i.children(".w-slider-mask"),r.left=i.children(".w-slider-arrow-left"),r.right=i.children(".w-slider-arrow-right"),r.nav=i.children(".w-slider-nav"),r.slides=r.mask.children(".w-slide"),r.slides.each(g.reset),c&&(r.maskWidth=0),void 0===i.attr("role")&&i.attr("role","region"),void 0===i.attr("aria-label")&&i.attr("aria-label","carousel");var a=r.mask.attr("id");if(a||(a="w-slider-mask-"+e,r.mask.attr("id",a)),r.ariaLiveLabel=t(m).appendTo(r.mask),r.left.attr("role","button"),r.left.attr("tabindex","0"),r.left.attr("aria-controls",a),void 0===r.left.attr("aria-label")&&r.left.attr("aria-label","previous slide"),r.right.attr("role","button"),r.right.attr("tabindex","0"),r.right.attr("aria-controls",a),void 0===r.right.attr("aria-label")&&r.right.attr("aria-label","next slide"),!f.support.transform)return r.left.hide(),r.right.hide(),r.nav.hide(),void(u=!0);r.el.off(p),r.left.off(p),r.right.off(p),r.nav.off(p),k(r),s?(r.el.on("setting"+p,S(r)),C(r),r.hasTimer=!1):(r.el.on("swipe"+p,S(r)),r.left.on("click"+p,T(r)),r.right.on("click"+p,A(r)),r.left.on("keydown"+p,O(r,T)),r.right.on("keydown"+p,O(r,A)),r.nav.on("keydown"+p,"> div",S(r)),r.config.autoplay&&!r.hasTimer&&(r.hasTimer=!0,r.timerCount=1,R(r)),r.el.on("mouseenter"+p,E(r,!0,"mouse")),r.el.on("focusin"+p,E(r,!0,"keyboard")),r.el.on("mouseleave"+p,E(r,!1,"mouse")),r.el.on("focusout"+p,E(r,!1,"keyboard"))),r.nav.on("click"+p,"> div",S(r)),h||r.mask.contents().filter(function(){return 3===this.nodeType}).remove();var o=i.filter(":hidden");o.show();var l=i.parents(":hidden");l.show(),M(e,n),o.css("display",""),l.css("display","")}function k(t){var e={crossOver:0};e.animation=t.el.attr("data-animation")||"slide","outin"===e.animation&&(e.animation="cross",e.crossOver=.5),e.easing=t.el.attr("data-easing")||"ease";var n=t.el.attr("data-duration");if(e.duration=null!=n?parseInt(n,10):500,_(t.el.attr("data-infinite"))&&(e.infinite=!0),_(t.el.attr("data-disable-swipe"))&&(e.disableSwipe=!0),_(t.el.attr("data-hide-arrows"))?e.hideArrows=!0:t.config.hideArrows&&(t.left.show(),t.right.show()),_(t.el.attr("data-autoplay"))){e.autoplay=!0,e.delay=parseInt(t.el.attr("data-delay"),10)||2e3,e.timerMax=parseInt(t.el.attr("data-autoplay-limit"),10);var i="mousedown"+p+" touchstart"+p;s||t.el.off(i).one(i,function(){C(t)})}var r=t.right.width();e.edge=r?r+40:100,t.config=e}function _(t){return"1"===t||"true"===t}function E(e,n,i){return function(r){if(n)e.hasFocus[i]=n;else{if(t.contains(e.el.get(0),r.relatedTarget))return;if(e.hasFocus[i]=n,e.hasFocus.mouse&&"keyboard"===i||e.hasFocus.keyboard&&"mouse"===i)return}n?(e.ariaLiveLabel.attr("aria-live","polite"),e.hasTimer&&C(e)):(e.ariaLiveLabel.attr("aria-live","off"),e.hasTimer&&R(e))}}function O(t,e){return function(n){switch(n.keyCode){case a.SPACE:case a.ENTER:return e(t)(),n.preventDefault(),n.stopPropagation()}}}function T(t){return function(){I(t,{index:t.index-1,vector:-1})}}function A(t){return function(){I(t,{index:t.index+1,vector:1})}}function R(t){C(t);var e=t.config,n=e.timerMax;n&&t.timerCount++>n||(t.timerId=window.setTimeout(function(){null==t.timerId||s||(A(t)(),R(t))},e.delay))}function C(t){window.clearTimeout(t.timerId),t.timerId=null}function S(n){return function(r,o){o=o||{};var u=n.config;if(s&&"setting"===r.type){if("prev"===o.select)return T(n)();if("next"===o.select)return A(n)();if(k(n),z(n),null==o.select)return;!function(n,i){var r=null;i===n.slides.length&&(w(),z(n)),e.each(n.anchors,function(e,n){t(e.els).each(function(e,a){t(a).index()===i&&(r=n)})}),null!=r&&I(n,{index:r,immediate:!0})}(n,o.select)}else{if("swipe"===r.type){if(u.disableSwipe)return;if(i.env("editor"))return;return"left"===o.direction?A(n)():"right"===o.direction?T(n)():void 0}if(n.nav.has(r.target).length){var c=t(r.target).index();if("click"===r.type&&I(n,{index:c}),"keydown"===r.type)switch(r.keyCode){case a.ENTER:case a.SPACE:I(n,{index:c}),r.preventDefault();break;case a.ARROW_LEFT:case a.ARROW_UP:D(n.nav,Math.max(c-1,0)),r.preventDefault();break;case a.ARROW_RIGHT:case a.ARROW_DOWN:D(n.nav,Math.min(c+1,n.pages)),r.preventDefault();break;case a.HOME:D(n.nav,0),r.preventDefault();break;case a.END:D(n.nav,n.pages),r.preventDefault();break;default:return}}}}}function D(t,e){var n=t.children().eq(e).focus();t.children().not(n)}function I(e,n){n=n||{};var i=e.config,r=e.anchors;e.previous=e.index;var a=n.index,u={};a<0?(a=r.length-1,i.infinite&&(u.x=-e.endX,u.from=0,u.to=r[0].width)):a>=r.length&&(a=0,i.infinite&&(u.x=r[r.length-1].width,u.from=-r[r.length-1].x,u.to=u.from-u.x)),e.index=a;var l=e.nav.children().eq(a).addClass("w-active").attr("aria-selected","true").attr("tabindex","0");e.nav.children().not(l).removeClass("w-active").attr("aria-selected","false").attr("tabindex","-1"),i.hideArrows&&(e.index===r.length-1?e.right.hide():e.right.show(),0===e.index?e.left.hide():e.left.show());var d=e.offsetX||0,h=e.offsetX=-r[e.index].x,p={x:h,opacity:1,visibility:""},v=t(r[e.index].els),m=t(r[e.previous]&&r[e.previous].els),w=e.slides.not(v),b=i.animation,y=i.easing,x=Math.round(i.duration),k=n.vector||(e.index>e.previous?1:-1),_="opacity "+x+"ms "+y,E="transform "+x+"ms "+y;if(v.find(o).removeAttr("tabindex"),v.removeAttr("aria-hidden"),v.find("*").removeAttr("aria-hidden"),w.find(o).attr("tabindex","-1"),w.attr("aria-hidden","true"),w.find("*").attr("aria-hidden","true"),s||(v.each(g.intro),w.each(g.outro)),n.immediate&&!c)return f(v).set(p),void A();if(e.index!==e.previous){if(e.ariaLiveLabel.text("Slide ".concat(a+1," of ").concat(r.length,".")),"cross"===b){var O=Math.round(x-x*i.crossOver),T=Math.round(x-O);return _="opacity "+O+"ms "+y,f(m).set({visibility:""}).add(_).start({opacity:0}),void f(v).set({visibility:"",x:h,opacity:0,zIndex:e.depth++}).add(_).wait(T).then({opacity:1}).then(A)}if("fade"===b)return f(m).set({visibility:""}).stop(),void f(v).set({visibility:"",x:h,opacity:0,zIndex:e.depth++}).add(_).start({opacity:1}).then(A);if("over"===b)return p={x:e.endX},f(m).set({visibility:""}).stop(),void f(v).set({visibility:"",zIndex:e.depth++,x:h+r[e.index].width*k}).add(E).start({x:h}).then(A);i.infinite&&u.x?(f(e.slides.not(m)).set({visibility:"",x:u.x}).add(E).start({x:h}),f(m).set({visibility:"",x:u.from}).add(E).start({x:u.to}),e.shifted=m):(i.infinite&&e.shifted&&(f(e.shifted).set({visibility:"",x:d}),e.shifted=null),f(e.slides).set({visibility:""}).add(E).start({x:h}))}function A(){v=t(r[e.index].els),w=e.slides.not(v),"slide"!==b&&(p.visibility="hidden"),f(w).set(p)}}function M(e,n){var i=t.data(n,p);if(i)return function(t){var e=t.mask.width();if(t.maskWidth!==e)return t.maskWidth=e,!0;return!1}(i)?z(i):void(s&&function(e){var n=0;if(e.slides.each(function(e,i){n+=t(i).outerWidth(!0)}),e.slidesWidth!==n)return e.slidesWidth=n,!0;return!1}(i)&&z(i))}function z(e){var n=1,i=0,r=0,a=0,o=e.maskWidth,u=o-e.config.edge;u<0&&(u=0),e.anchors=[{els:[],x:0,width:0}],e.slides.each(function(s,c){r-i>u&&(n++,i+=o,e.anchors[n-1]={els:[],x:r,width:0}),a=t(c).outerWidth(!0),r+=a,e.anchors[n-1].width+=a,e.anchors[n-1].els.push(c);var l=s+1+" of "+e.slides.length;t(c).attr("aria-label",l),t(c).attr("role","group")}),e.endX=r,s&&(e.pages=null),e.nav.length&&e.pages!==n&&(e.pages=n,function(e){var n,i=[],r=e.el.attr("data-nav-spacing");r&&(r=parseFloat(r)+"px");for(var a=0,o=e.pages;a=n&&(c=n-1),I(e,{immediate:!0,index:c})}return l.ready=function(){s=i.env("design"),w()},l.design=function(){s=!0,w()},l.preview=function(){s=!1,w()},l.redraw=function(){c=!0,w()},l.destroy=b,l})}]); \ No newline at end of file diff --git a/output/static/css/webfont.js b/output/static/css/webfont.js new file mode 100644 index 0000000..3e95a6c --- /dev/null +++ b/output/static/css/webfont.js @@ -0,0 +1,33 @@ +/* + * Copyright 2016 Small Batch, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* Web Font Loader v1.6.26 - (c) Adobe Systems, Google. License: Apache 2.0 */(function(){function aa(a,b,c){return a.call.apply(a.bind,arguments)}function ba(a,b,c){if(!a)throw Error();if(2=b.f?e():a.fonts.load(fa(b.a),b.h).then(function(a){1<=a.length?d():setTimeout(k,25)},function(){e()})}k()}),e=new Promise(function(a,d){setTimeout(d,b.f)});Promise.race([e,d]).then(function(){b.g(b.a)},function(){b.j(b.a)})};function R(a,b,c,d,e,f,g){this.v=a;this.B=b;this.c=c;this.a=d;this.s=g||"BESbswy";this.f={};this.w=e||3E3;this.u=f||null;this.o=this.j=this.h=this.g=null;this.g=new N(this.c,this.s);this.h=new N(this.c,this.s);this.j=new N(this.c,this.s);this.o=new N(this.c,this.s);a=new H(this.a.c+",serif",K(this.a));a=P(a);this.g.a.style.cssText=a;a=new H(this.a.c+",sans-serif",K(this.a));a=P(a);this.h.a.style.cssText=a;a=new H("serif",K(this.a));a=P(a);this.j.a.style.cssText=a;a=new H("sans-serif",K(this.a));a= +P(a);this.o.a.style.cssText=a;O(this.g);O(this.h);O(this.j);O(this.o)}var S={D:"serif",C:"sans-serif"},T=null;function U(){if(null===T){var a=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);T=!!a&&(536>parseInt(a[1],10)||536===parseInt(a[1],10)&&11>=parseInt(a[2],10))}return T}R.prototype.start=function(){this.f.serif=this.j.a.offsetWidth;this.f["sans-serif"]=this.o.a.offsetWidth;this.A=q();la(this)}; +function ma(a,b,c){for(var d in S)if(S.hasOwnProperty(d)&&b===a.f[S[d]]&&c===a.f[S[d]])return!0;return!1}function la(a){var b=a.g.a.offsetWidth,c=a.h.a.offsetWidth,d;(d=b===a.f.serif&&c===a.f["sans-serif"])||(d=U()&&ma(a,b,c));d?q()-a.A>=a.w?U()&&ma(a,b,c)&&(null===a.u||a.u.hasOwnProperty(a.a.c))?V(a,a.v):V(a,a.B):na(a):V(a,a.v)}function na(a){setTimeout(p(function(){la(this)},a),50)}function V(a,b){setTimeout(p(function(){v(this.g.a);v(this.h.a);v(this.j.a);v(this.o.a);b(this.a)},a),0)};function W(a,b,c){this.c=a;this.a=b;this.f=0;this.o=this.j=!1;this.s=c}var X=null;W.prototype.g=function(a){var b=this.a;b.g&&w(b.f,[b.a.c("wf",a.c,K(a).toString(),"active")],[b.a.c("wf",a.c,K(a).toString(),"loading"),b.a.c("wf",a.c,K(a).toString(),"inactive")]);L(b,"fontactive",a);this.o=!0;oa(this)}; +W.prototype.h=function(a){var b=this.a;if(b.g){var c=y(b.f,b.a.c("wf",a.c,K(a).toString(),"active")),d=[],e=[b.a.c("wf",a.c,K(a).toString(),"loading")];c||d.push(b.a.c("wf",a.c,K(a).toString(),"inactive"));w(b.f,d,e)}L(b,"fontinactive",a);oa(this)};function oa(a){0==--a.f&&a.j&&(a.o?(a=a.a,a.g&&w(a.f,[a.a.c("wf","active")],[a.a.c("wf","loading"),a.a.c("wf","inactive")]),L(a,"active")):M(a.a))};function pa(a){this.j=a;this.a=new ja;this.h=0;this.f=this.g=!0}pa.prototype.load=function(a){this.c=new ca(this.j,a.context||this.j);this.g=!1!==a.events;this.f=!1!==a.classes;qa(this,new ha(this.c,a),a)}; +function ra(a,b,c,d,e){var f=0==--a.h;(a.f||a.g)&&setTimeout(function(){var a=e||null,k=d||null||{};if(0===c.length&&f)M(b.a);else{b.f+=c.length;f&&(b.j=f);var h,m=[];for(h=0;h + + + +#sitename - #pagetitle + + + + + + + + + + + + + + + +
+
+

#pagetitle

+
+
+
#tagline
+
+
+
+
+ + + + + +BODY + + + + + +
+
+
+

Ponte en contacto conmigo

+
+
+
+
+ +
+ +
+

Lo que hago

+

+Elegir a El Vikingo TI significa
+optar por la tranquilidad, la profesionalidad
+y una calidad de transmisión inigualable. +

+
+ +
+
+ +
+

La manera tradicional

+

Correo Electronico
+Envíeme un mensaje +

+
+ +
+
+ +
+

Redes Sociales

+ + + + + + +
+
+
+
+ +
+ + +
+ + + + + diff --git a/output/static/testimonies.tpl b/output/static/testimonies.tpl new file mode 100644 index 0000000..491dc33 --- /dev/null +++ b/output/static/testimonies.tpl @@ -0,0 +1,29 @@ +
+
+

How we make brands thrive

+
+
+
+
+ +
+

SET a target

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.

+
+
+
+ +
+

design a solution

+

Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat.

+
+
+
+ +
+

track the progress

+

Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

+
+
+
+
diff --git a/site.conf b/site.conf new file mode 100644 index 0000000..eff513c --- /dev/null +++ b/site.conf @@ -0,0 +1,19 @@ +# Site Configuration for qsgen3 + +# --- Site Metadata --- +site_name="My Awesome Site" +site_tagline="A brief description of my site" +site_url="http://localhost:8000" +site_theme="minimal" +site_theme_css_file="css/minimaltemplate-v1.css" + +# --- Paths --- +paths_content_dir="content" +paths_output_dir="output" +paths_layouts_dir="layouts" +paths_static_dir="static" + +# --- Build Options --- +build_options_generate_rss=true +build_options_generate_sitemap=true +build_options_process_drafts=false diff --git a/site.conf.example b/site.conf.example index af6cdd8..320afbc 100644 --- a/site.conf.example +++ b/site.conf.example @@ -1,26 +1,26 @@ -; Place this file in your project directory +# Example Site Configuration for qsgen3 +# Copy this file to 'site.conf' in your project root and customize it. -[site] -; This is the name of your site -name = "The Site Name" -; This is the tagline -tagline = "The Site Tagline" -; This is the URL of your site -url = "https://www.example.com" -; This is where your HTML files go -root = /path/to/www/dir -; The theme of your site -theme = theme_name -; sitemap or not: true or false -sitemap = true -; Do you want the blog to appear on the front page -; true = yes and false = no -blog = true +# --- Site Metadata --- +site_name="My Example Site" +site_tagline="An example site generated by qsgen3" +site_url="http://localhost:8000" # Or your actual production URL +site_theme="default" # Specifies the theme to use (e.g., default, dark) -[project] -; This is where you work before you generate the output -root = /path/to/working/project -; Languages: en_US, en_UK, es_ES, nb_NO, fr_FR -lang = en_US -; Use QStags (native) or Markdown (markdown) -generator = native +# --- Paths (relative to project root) --- +paths_content_dir="content" +paths_output_dir="output" +paths_layouts_dir="layouts" +paths_static_dir="static" + +# --- Build Options --- +# Generate an RSS feed (true/false) +build_options_generate_rss=true + +# Generate a sitemap.xml (true/false) +# Note: sitemap generation is not fully implemented in qsgen3 yet, +# but the configuration option is reserved. +build_options_generate_sitemap=true + +# Process draft posts/pages (true/false) +build_options_process_drafts=false diff --git a/static/css/style.css b/static/css/style.css new file mode 100644 index 0000000..6742b30 --- /dev/null +++ b/static/css/style.css @@ -0,0 +1,31 @@ +/* Basic styling - feel free to replace */ +body { + font-family: sans-serif; + line-height: 1.6; + margin: 20px; + background-color: #f4f4f4; + color: #333; +} + +header h1 a { + color: #333; + text-decoration: none; +} + +header p { + font-style: italic; + color: #666; +} + +main { + background-color: #fff; + padding: 20px; + border-radius: 5px; +} + +footer { + text-align: center; + margin-top: 20px; + font-size: 0.9em; + color: #777; +}