diff --git a/projects/rocprofiler-systems/.github/workflows/formatting.yml b/projects/rocprofiler-systems/.github/workflows/formatting.yml index a89ab88144..ae6f100656 100644 --- a/projects/rocprofiler-systems/.github/workflows/formatting.yml +++ b/projects/rocprofiler-systems/.github/workflows/formatting.yml @@ -5,14 +5,8 @@ run-name: formatting on: push: branches: [ main, develop ] - paths-ignore: - - '*.md' - - 'source/docs/**' pull_request: branches: [ main, develop ] - paths-ignore: - - '*.md' - - 'source/docs/**' concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/projects/rocprofiler-systems/.github/workflows/opensuse.yml b/projects/rocprofiler-systems/.github/workflows/opensuse.yml index 9b6ab3bed5..a5df226ce8 100644 --- a/projects/rocprofiler-systems/.github/workflows/opensuse.yml +++ b/projects/rocprofiler-systems/.github/workflows/opensuse.yml @@ -7,11 +7,13 @@ on: paths-ignore: - '*.md' - 'source/docs/**' + - 'source/python/gui/**' pull_request: branches: [ main, develop ] paths-ignore: - '*.md' - 'source/docs/**' + - 'source/python/gui/**' concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/projects/rocprofiler-systems/.github/workflows/python.yml b/projects/rocprofiler-systems/.github/workflows/python.yml new file mode 100644 index 0000000000..25e3acf18a --- /dev/null +++ b/projects/rocprofiler-systems/.github/workflows/python.yml @@ -0,0 +1,45 @@ +name: Python +run-name: Python + +on: + push: + branches: [ main, develop ] + paths: + - 'source/python/gui/*.py' + - 'source/python/gui/**/*.py' + pull_request: + branches: [ main, develop ] + paths: + - 'source/python/gui/*.py' + - 'source/python/gui/**/*.py' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + linting: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.7", "3.8", "3.9", "3.10"] + + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + working-directory: ${{ github.workspace }}/source/python/gui + run: | + python -m pip install --upgrade pip + pip install flake8 + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Lint with flake8 + working-directory: ${{ github.workspace }}/source/python/gui + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # flake8 options are defined in setup.cfg + flake8 . --count --statistics diff --git a/projects/rocprofiler-systems/.github/workflows/redhat.yml b/projects/rocprofiler-systems/.github/workflows/redhat.yml index 7696817e1e..ea16b51d8f 100644 --- a/projects/rocprofiler-systems/.github/workflows/redhat.yml +++ b/projects/rocprofiler-systems/.github/workflows/redhat.yml @@ -6,11 +6,13 @@ on: paths-ignore: - '*.md' - 'source/docs/**' + - 'source/python/gui/**' pull_request: branches: [ main, develop ] paths-ignore: - '*.md' - 'source/docs/**' + - 'source/python/gui/**' concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/projects/rocprofiler-systems/.github/workflows/ubuntu-bionic.yml b/projects/rocprofiler-systems/.github/workflows/ubuntu-bionic.yml index d2c8d30975..c7d60dbe21 100644 --- a/projects/rocprofiler-systems/.github/workflows/ubuntu-bionic.yml +++ b/projects/rocprofiler-systems/.github/workflows/ubuntu-bionic.yml @@ -7,11 +7,13 @@ on: paths-ignore: - '*.md' - 'source/docs/**' + - 'source/python/gui/**' pull_request: branches: [ main, develop ] paths-ignore: - '*.md' - 'source/docs/**' + - 'source/python/gui/**' concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/projects/rocprofiler-systems/.github/workflows/ubuntu-focal.yml b/projects/rocprofiler-systems/.github/workflows/ubuntu-focal.yml index 6656b7f213..5d002c6d31 100644 --- a/projects/rocprofiler-systems/.github/workflows/ubuntu-focal.yml +++ b/projects/rocprofiler-systems/.github/workflows/ubuntu-focal.yml @@ -7,11 +7,13 @@ on: paths-ignore: - '*.md' - 'source/docs/**' + - 'source/python/gui/**' pull_request: branches: [ main, develop ] paths-ignore: - '*.md' - 'source/docs/**' + - 'source/python/gui/**' concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/projects/rocprofiler-systems/.github/workflows/ubuntu-jammy.yml b/projects/rocprofiler-systems/.github/workflows/ubuntu-jammy.yml index e15b2ee5e1..8220d13b18 100644 --- a/projects/rocprofiler-systems/.github/workflows/ubuntu-jammy.yml +++ b/projects/rocprofiler-systems/.github/workflows/ubuntu-jammy.yml @@ -7,11 +7,13 @@ on: paths-ignore: - '*.md' - 'source/docs/**' + - 'source/python/gui/**' pull_request: branches: [ main, develop ] paths-ignore: - '*.md' - 'source/docs/**' + - 'source/python/gui/**' concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/projects/rocprofiler-systems/.gitignore b/projects/rocprofiler-systems/.gitignore index d6a299e234..5f701c32d8 100644 --- a/projects/rocprofiler-systems/.gitignore +++ b/projects/rocprofiler-systems/.gitignore @@ -34,6 +34,9 @@ *.out *.app +# Python cache files +*.pyc + /build* /.vscode /.cache diff --git a/projects/rocprofiler-systems/source/python/gui/.gitignore b/projects/rocprofiler-systems/source/python/gui/.gitignore new file mode 100644 index 0000000000..a881f49db9 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/.gitignore @@ -0,0 +1,4 @@ +# build files +/build* +/*.egg-info +/source/VERSION diff --git a/projects/rocprofiler-systems/source/python/gui/MANIFEST.in b/projects/rocprofiler-systems/source/python/gui/MANIFEST.in new file mode 100644 index 0000000000..ccf3c35694 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/MANIFEST.in @@ -0,0 +1,21 @@ + +# direct include + +include README.md +include requirements.txt + +# recursive includes + +recursive-include source * + +# global exclude + +global-exclude *.pyc +global-exclude *.git* +global-exclude *__pycache__* + +# recursive excludes + +recursive-exclude omnitrace_causal_viewer.egg-info * +recursive-exclude build * +recursive-exclude dist * diff --git a/projects/rocprofiler-systems/source/python/gui/README.md b/projects/rocprofiler-systems/source/python/gui/README.md new file mode 100644 index 0000000000..0851fb1274 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/README.md @@ -0,0 +1,29 @@ +# Omnitrace Causal Viewer + +## Installation + +```console +python -m pip install . +``` + +## Execution + +### From installation + +#### Console Script + +```console +omnitrace-causal-plot +``` + +#### Module + +```console +python -m omnitrace_causal_viewer +``` + +### From source tree + +```console +python -m source +``` diff --git a/projects/rocprofiler-systems/source/python/gui/pyproject.toml b/projects/rocprofiler-systems/source/python/gui/pyproject.toml new file mode 100644 index 0000000000..0472c69858 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/pyproject.toml @@ -0,0 +1,12 @@ +[build-system] +requires = [ + "setuptools >= 40.0.4", + "setuptools_scm >= 2.0.0", + "wheel >= 0.29.0", +] +build-backend = 'setuptools.build_meta' + +[tool.black] +line-length = 90 +target-version = ['py38'] +include = '\.py$' diff --git a/projects/rocprofiler-systems/source/python/gui/requirements.txt b/projects/rocprofiler-systems/source/python/gui/requirements.txt new file mode 100644 index 0000000000..5d22e0e1c2 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/requirements.txt @@ -0,0 +1,12 @@ +numpy +matplotlib +pandas +dash +dash_daq +dash_svg +dash_bootstrap_components +pyparsing +tabulate +jsondiff +plotly +pyyaml diff --git a/projects/rocprofiler-systems/source/python/gui/settings.json b/projects/rocprofiler-systems/source/python/gui/settings.json new file mode 100644 index 0000000000..4d50aab44f --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/settings.json @@ -0,0 +1,3 @@ +{ + "cli": false +} diff --git a/projects/rocprofiler-systems/source/python/gui/setup.cfg b/projects/rocprofiler-systems/source/python/gui/setup.cfg new file mode 100644 index 0000000000..cb48b6a70f --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/setup.cfg @@ -0,0 +1,33 @@ +[metadata] +name = omnitrace-causal-viewer +url = https://github.com/AMDResearch/omnitrace +download_url = https://github.com/AMDResearch/omnitrace.git +maintainer = AMD Research +license = MIT +description = GUI for viewing Omnitrace causal profiles +keywords = + gui + causal profiling + performance + profiling + sampling +classifiers = + Development Status :: 4 - Beta + Intended Audience :: Developers + Intended Audience :: Science/Research + Natural Language :: English + License :: OSI Approved :: MIT License + Operating System :: POSIX :: Linux + Programming Language :: C++ + Programming Language :: Python :: 3 + +[options] +packages = omnitrace_causal_viewer +zip_safe = true +include_package_data = true + +[flake8] +ignore = + E501, + W503, +max-line-length = 90 diff --git a/projects/rocprofiler-systems/source/python/gui/setup.py b/projects/rocprofiler-systems/source/python/gui/setup.py new file mode 100644 index 0000000000..e35d58260a --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/setup.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 + +import os + +from setuptools import setup + + +def get_project_version(): + # open "VERSION" + _cwd = os.path.dirname(__file__) + with open(os.path.join(_cwd, "source", "VERSION"), "r") as f: + data = f.read().replace("\n", "") + # make sure is string + if isinstance(data, list) or isinstance(data, tuple): + return data[0] + else: + return data + + +def get_long_description(): + long_descript = "" + try: + long_descript = open("README.md").read() + except Exception: + long_descript = "" + return long_descript + + +def parse_requirements(fname="requirements.txt"): + _req = [] + requirements = [] + # read in the initial set of requirements + with open(fname, "r") as fp: + _req = list(filter(bool, (line.strip() for line in fp))) + # look for entries which read other files + for itr in _req: + if itr.startswith("-r "): + # read another file + for fitr in itr.split(" "): + if os.path.exists(fitr): + requirements.extend(parse_requirements(fitr)) + else: + # append package + requirements.append(itr) + # return the requirements + return requirements + + +setup( + name="omnitrace-causal-viewer", + version=get_project_version(), + description="GUI for viewing causal profilers", + long_description=get_long_description(), + long_description_content_type="text/markdown", + author="AMD Research", + packages=["omnitrace_causal_viewer"], + package_dir={"omnitrace_causal_viewer": "source"}, + package_data={ + "omnitrace_causal_viewer": [ + "source/assets/*", + "source/workloads/*", + "source/VERSION", + ] + }, + install_requires=parse_requirements(), + python_requires=">=3.6", + entry_points={ + "console_scripts": ["omnitrace-causal-plot=omnitrace_causal_viewer.__main__:main"] + }, +) diff --git a/projects/rocprofiler-systems/source/python/gui/source/VERSION b/projects/rocprofiler-systems/source/python/gui/source/VERSION new file mode 100644 index 0000000000..6c6aa7cb09 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/VERSION @@ -0,0 +1 @@ +0.1.0 \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/__init__.py b/projects/rocprofiler-systems/source/python/gui/source/__init__.py new file mode 100644 index 0000000000..a98414b8ac --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/__init__.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# MIT License +# +# Copyright (c) 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from __future__ import absolute_import + +__author__ = "AMD Research" +__copyright__ = "Copyright 2023, Advanced Micro Devices, Inc." +__license__ = "MIT" +__maintainer__ = "AMD Research" +__status__ = "Development" + + +def _get_version(): + import os + from pathlib import Path + + this_dir = Path(__file__).resolve().parent + ver_path = os.path.join(f"{this_dir}", "VERSION") + if os.path.exists(ver_path): + with open(ver_path, "r") as f: + return f.read().strip("\n") + return "???" + + +__version__ = _get_version() diff --git a/projects/rocprofiler-systems/source/python/gui/source/__main__.py b/projects/rocprofiler-systems/source/python/gui/source/__main__.py new file mode 100644 index 0000000000..fa17d6e514 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/__main__.py @@ -0,0 +1,295 @@ +#!/usr/bin/env python3 +# MIT License +# +# Copyright (c) 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from __future__ import absolute_import + +__author__ = "AMD Research" +__copyright__ = "Copyright 2023, Advanced Micro Devices, Inc." +__license__ = "MIT" +__maintainer__ = "AMD Research" +__status__ = "Development" + +import argparse +import os.path +import dash +import dash_bootstrap_components as dbc +import json + +from pathlib import Path + +from . import gui +from .parser import parse_files, find_causal_files, set_num_stddev +from . import __version__ + + +def causal(args): + app = dash.Dash(__name__, external_stylesheets=[dbc.themes.CYBORG]) + + workload_path = args.path[:] + input_files = [] + + input_files = find_causal_files(workload_path, args.verbose, args.recursive) + + # unique + input_files = list(set(input_files)) + + set_num_stddev(args.stddev) + num_speedups = len(args.speedups) + + if num_speedups > 0 and args.min_points > num_speedups: + args.min_points = num_speedups + + results_df, samples_df, file_names = parse_files( + input_files, + args.experiments, + args.progress_points, + args.speedups, + args.min_points, + args.validate, + args.verbose, + args.cli, + ) + + if not args.cli: + max_points = 9 + sortOptions = ["Alphabetical", "Max Speedup", "Min Speedup", "Impact"] + input_filters = [ + { + "Name": "Sort by", + "values": list(map(str, sortOptions)), + "default": "Impact", + "type": "Name", + "multi": False, + }, + { + "Name": "Select Workload", + "values": file_names, + "default": file_names, + "type": "Name", + "multi": True, + }, + {"Name": "points", "filter": [], "values": max_points, "type": "int"}, + ] + + gui.build_causal_layout( + app, + input_filters, + args.path, + results_df, + samples_df, + args.verbose, + args.light, + ) + app.run_server( + debug=True if args.verbose >= 3 else False, + host=args.ip_address, + port=args.ip_port, + ) + + +def main(): + settings = {} + + this_dir = Path(__file__).resolve().parent + if os.path.basename(this_dir) == "source": + settings_path = os.path.join(f"{this_dir.parent}", "settings.json") + else: + settings_path = os.path.join(f"{this_dir}", "settings.json") + + for itr in [ + settings_path, + os.path.join(os.environ.get("HOME"), ".omnitrace-causal-plot.json"), + ]: + if os.path.exists(itr): + with open(itr, "r") as f: + settings = json.load(f) + break + + default_settings = {} + default_settings["path"] = "" + default_settings["cli"] = False + default_settings["light"] = False + default_settings["ip_address"] = "0.0.0.0" + default_settings["ip_port"] = 8051 + default_settings["experiments"] = ".*" + default_settings["progress_points"] = ".*" + default_settings["min_points"] = 5 + default_settings["recursive"] = False + default_settings["verbose"] = 0 + default_settings["stddev"] = 1.0 + + for key, value in default_settings.items(): + if key not in settings: + settings[key] = value + + my_parser = argparse.ArgumentParser( + description="AMD's OmniTrace Causal Profiling GUI", + prog="tool", + allow_abbrev=False, + formatter_class=lambda prog: argparse.RawTextHelpFormatter( + prog, max_help_position=40 + ), + usage=""" + omnitrace-causal-plot [ARGS...] + + ------------------------------------------------------------------------------- + Examples: + \tomnitrace-causal-plot --path workloads/toy -n 0 + ------------------------------------------------------------------------------- + """, + ) + + my_parser.add_argument( + "--version", + action="version", + version="OmniTrace Causal Viewer v{}\n".format(f"{__version__}".strip("\n")), + ) + + my_parser.add_argument( + "-c", + "--cli", + action="store_true", + required=False, + default=settings["cli"], + help="Do not launch the GUI, print the causal analysis out to the console only", + ) + + my_parser.add_argument( + "-l", + "--light", + action="store_true", + required=False, + default=settings["light"], + help="light Mode", + ) + + my_parser.add_argument( + "-w", + "--workload", + "--path", + metavar="FOLDER", + type=str, + dest="path", + default=settings["path"], + required=False, + nargs="+", + help="Specify path to causal profiles", + ) + + my_parser.add_argument( + "-r", + "--recursive", + action="store_true", + default=settings["recursive"], + help="Recursively search for causal profiles in workload directory", + ) + + my_parser.add_argument( + "-V", + "--verbose", + help="Increase output verbosity, if 3 or greater, CLI output will show in terminal in GUI mode", + default=settings["verbose"], + type=int, + ) + + my_parser.add_argument( + "--ip", + "--ip-address", + metavar="IP_ADDR", + type=str, + dest="ip_address", + default=settings["ip_address"], + help="Specify the IP address for the web app.\n(DEFAULT: {})".format( + settings["ip_address"] + ), + ) + + my_parser.add_argument( + "--port", + "--ip-port", + metavar="PORT", + type=int, + dest="ip_port", + default=settings["ip_port"], + help="Specify the port number for the IP address for the web app.\n(DEFAULT: {})".format( + settings["ip_address"] + ), + ) + + my_parser.add_argument( + "-e", + "--experiments", + type=str, + help="Regex for experiments", + default=settings["experiments"], + ) + + my_parser.add_argument( + "-p", + "--progress-points", + type=str, + help="Regex for progress points", + default=settings["progress_points"], + ) + + my_parser.add_argument( + "-n", + "--min-points", + type=int, + help="Minimum number of data points", + default=settings["min_points"], + ) + + my_parser.add_argument( + "-s", + "--speedups", + type=int, + help="List of speedup values to report", + nargs="*", + default=[], + ) + + my_parser.add_argument( + "-d", + "--stddev", + type=float, + help="Number of standard deviations to report", + default=settings["stddev"], + ) + + my_parser.add_argument( + "-v", + "--validate", + type=str, + nargs="*", + help="Validate speedup: {experiment regex} {progress-point regex} {virtual-speedup} {expected-speedup} {tolerance}", + default=[], + ) + + args = my_parser.parse_args() + + causal(args) + + +if __name__ == "__main__": + main() diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/default.css b/projects/rocprofiler-systems/source/python/gui/source/assets/default.css new file mode 100644 index 0000000000..7296bcaf63 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/default.css @@ -0,0 +1,568 @@ +/* +===================================================================== +* Ceevee v1.0 Default Stylesheet +* url: styleshout.com +* 03-17-2014 +===================================================================== + +TOC: +a. Webfonts and Icon fonts +b. Reset +c. Default Styles + 1. Basic + 2. Typography + 3. Links + 4. Images + 5. Buttons + 6. Forms +d. Grid +e. Others + 1. Clearing + 2. Misc + +===================================================================== */ + +/* ------------------------------------------------------------------ */ +/* a. Webfonts and Icon fonts + ------------------------------------------------------------------ */ + +@import url("fonts.css"); +@import url("fontello/css/fontello.css"); +@import url("font-awesome/css/font-awesome.min.css"); + +/* ------------------------------------------------------------------ +/* b. Reset + Adapted from: + Normalize.css - https://github.com/necolas/normalize.css/ + HTML5 Doctor Reset - html5doctor.com/html-5-reset-stylesheet/ +/* ------------------------------------------------------------------ */ + +html, body, div, span, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +abbr, address, cite, code, +del, dfn, em, img, ins, kbd, q, samp, +small, strong, sub, sup, var, +b, i, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, figcaption, figure, +footer, header, hgroup, menu, nav, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} + +article,aside,details,figcaption,figure, +footer,header,hgroup,menu,nav,section { + display: block; +} + +audio, +canvas, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden] { display: none; } + +code, kbd, pre, samp { + font-family: monospace, serif; + font-size: 1em; +} + +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +blockquote, q { quotes: “ “ } + +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +ins { + background-color: #ff9; + color: #000; + text-decoration: none; +} + +mark { + background-color: #A7F4F6; + color: #555; +} + +del { text-decoration: line-through; } + +abbr[title], dfn[title] { + border-bottom: 1px dotted; + cursor: help; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + + +/* ------------------------------------------------------------------ */ +/* c. Default and Basic Styles + Adapted from: + Skeleton CSS Framework - http://www.getskeleton.com/ + Typeplate Typographic Starter Kit - http://typeplate.com/ + Typeplate License File - https://github.com/typeplate/starter-kit/blob/master/license.txt +/* ------------------------------------------------------------------ */ + +/* 1. Basic ------------------------------------------------------- */ + +*, +*:before, +*:after { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +html { + font-size: 62.5%; + -webkit-font-smoothing: antialiased; +} + +body { + background: #fff; + font-family: 'opensans-regular', sans-serif; + font-weight: normal; + font-size: 15px; + line-height: 30px; + color: #838C95; + + -webkit-font-smoothing: antialiased; /* Fix for webkit rendering */ + -webkit-text-size-adjust: 100%; +} + +/* 2. Typography + Vertical rhythm with leading derived from 6 +--------------------------------------------------------------------- */ + +h1, h2, h3, h4, h5, h6 { + color: #313131; + font-family: 'opensans-bold', sans-serif; + font-weight: normal; +} +h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; } +h1 { font-size: 38px; line-height: 42px; margin-bottom: 12px; letter-spacing: -1px; } +h2 { font-size: 28px; line-height: 36px; margin-bottom: 6px; } +h3 { font-size: 22px; line-height: 30px; margin-bottom: 12px; } +h4 { font-size: 20px; line-height: 30px; margin-bottom: 6px; } +h5 { font-size: 18px; line-height: 30px; } +h6 { font-size: 14px; line-height: 30px; } +.subheader { } + +p { margin: 0 0 30px 0; } +p img { margin: 0; } +p.lead { + font: 19px/36px 'opensans-light', sans-serif; + margin-bottom: 18px; +} + +/* for 'em' and 'strong' tags, font-size and line-height should be same with +the body tag due to rendering problems in some browsers */ +em { font: 15px/30px 'opensans-italic', sans-serif; } +strong, b { font: 15px/30px 'opensans-bold', sans-serif; } +small { font-size: 11px; line-height: inherit; } + +/* Blockquotes */ +blockquote { + margin: 30px 0px; + padding-left: 40px; + position: relative; +} +blockquote:before { + content: "\201C"; + opacity: 0.45; + font-size: 80px; + line-height: 0px; + margin: 0; + font-family: arial, sans-serif; + + position: absolute; + top: 30px; + left: 0; +} +blockquote p { + font-family: 'librebaskerville-italic', serif; + padding: 0; + font-size: 18px; + line-height: 36px; +} +blockquote cite { + display: block; + font-size: 12px; + font-style: normal; + line-height: 18px; +} +blockquote cite:before { content: "\2014 \0020"; } +blockquote cite a, +blockquote cite a:visited { color: #8B9798; border: none } + +/* --------------------------------------------------------------------- +/* Pull Quotes Markup +/* + +/* +/* --------------------------------------------------------------------- */ +.pull-quote { + position: relative; + padding: 18px 30px 18px 0px; +} +.pull-quote:before, +.pull-quote:after { + height: 1em; + opacity: 0.45; + position: absolute; + font-size: 80px; + font-family: Arial, Sans-Serif; +} +.pull-quote:before { + content: "\201C"; + top: 33px; + left: 0; +} +.pull-quote:after { + content: '\201D'; + bottom: -33px; + right: 0; +} +.pull-quote blockquote { + margin: 0; +} +.pull-quote blockquote:before { + content: none; +} + +/* Abbreviations */ +abbr { + font-family: 'opensans-bold', sans-serif; + font-variant: small-caps; + text-transform: lowercase; + letter-spacing: .5px; + color: gray; +} +abbr:hover { cursor: help; } + +/* drop cap */ +.drop-cap:first-letter { + float: left; + margin: 0; + padding: 14px 6px 0 0; + font-size: 84px; + font-family: /* Copperplate */ 'opensans-bold', sans-serif; + line-height: 60px; + text-indent: 0; + background: transparent; + color: inherit; +} + +hr { border: solid #E3E3E3; border-width: 1px 0 0; clear: both; margin: 11px 0 30px; height: 0; } + + +/* 3. Links ------------------------------------------------------- */ + +a, a:visited { + text-decoration: none; + outline: 0; + color: #11ABB0; + + -webkit-transition: color .3s ease-in-out; + -moz-transition: color .3s ease-in-out; + -o-transition: color .3s ease-in-out; + transition: color .3s ease-in-out; +} +a:hover, a:focus { color: #313131; } +p a, p a:visited { line-height: inherit; } + + +/* 4. List --------------------------------------------------------- */ + +ul, ol { margin-bottom: 24px; margin-top: 12px; } +ul { list-style: none outside; } +ol { list-style: decimal; } +ol, ul.square, ul.circle, ul.disc { margin-left: 30px; } +ul.square { list-style: square outside; } +ul.circle { list-style: circle outside; } +ul.disc { list-style: disc outside; } +ul ul, ul ol, +ol ol, ol ul { margin: 6px 0 6px 30px; } +ul ul li, ul ol li, +ol ol li, ol ul li { margin-bottom: 6px; } +li { line-height: 18px; margin-bottom: 12px; } +ul.large li { } +li p { } + +/* --------------------------------------------------------------------- +/* Stats Tab Markup + + + + Extend this object into your markup. +/* +/* --------------------------------------------------------------------- */ +.stats-tabs { + padding: 0; + margin: 24px 0; +} +.stats-tabs li { + display: inline-block; + margin: 0 10px 18px 0; + padding: 0 10px 0 0; + border-right: 1px solid #ccc; +} +.stats-tabs li:last-child { + margin: 0; + padding: 0; + border: none; +} +.stats-tabs li a { + display: inline-block; + font-size: 22px; + font-family: 'opensans-bold', sans-serif; + border: none; + color: #313131; +} +.stats-tabs li a:hover { + color:#11ABB0; +} +.stats-tabs li a b { + display: block; + margin: 6px 0 0 0; + font-size: 13px; + font-family: 'opensans-regular', sans-serif; + color: #8B9798; +} + +/* definition list */ +dl { margin: 12px 0; } +dt { margin: 0; color:#11ABB0; } +dd { margin: 0 0 0 20px; } + +/* Lining Definition Style Markup */ +.lining dt, +.lining dd { + display: inline; + margin: 0; +} +.lining dt + dt:before, +.lining dd + dt:before { + content: "\A"; + white-space: pre; +} +.lining dd + dd:before { + content: ", "; +} +.lining dd:before { + content: ": "; + margin-left: -0.2em; +} + +/* Dictionary Definition Style Markup */ +.dictionary-style dt { + display: inline; + counter-reset: definitions; +} +.dictionary-style dt + dt:before { + content: ", "; + margin-left: -0.2em; +} +.dictionary-style dd { + display: block; + counter-increment: definitions; +} +.dictionary-style dd:before { + content: counter(definitions, decimal) ". "; +} + +/* Pagination */ +.pagination { + margin: 36px auto; + text-align: center; +} +.pagination ul li { + display: inline-block; + margin: 0; + padding: 0; +} +.pagination .page-numbers { + font: 15px/18px 'opensans-bold', sans-serif; + display: inline-block; + padding: 6px 10px; + margin-right: 3px; + margin-bottom: 6px; + color: #6E757C; + background-color: #E6E8EB; + + -webkit-transition: all 200ms ease-in-out; + -moz-transition: all 200ms ease-in-out; + -o-transition: all 200ms ease-in-out; + -ms-transition: all 200ms ease-in-out; + transition: all 200ms ease-in-out; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -khtml-border-radius: 3px; + border-radius: 3px; +} +.pagination .page-numbers:hover { + background: #838A91; + color: #fff; +} +.pagination .current, +.pagination .current:hover { + background-color: #11ABB0; + color: #fff; +} +.pagination .inactive, +.pagination .inactive:hover { + background-color: #E6E8EB; + color: #A9ADB2; +} +.pagination .prev, .pagination .next {} + +/* 5. Images --------------------------------------------------------- */ + +img { + max-width: 100%; + height: auto; +} +img.pull-right { margin: 12px 0px 0px 18px; } +img.pull-left { margin: 12px 18px 0px 0px; } + + + +/* 7. Forms --------------------------------------------------------- */ + +form { margin-bottom: 24px; } +fieldset { margin-bottom: 24px; } + +input[type="text"], +input[type="password"], +input[type="email"], +textarea, +select { + display: block; + padding: 18px 15px; + margin: 0 0 24px 0; + border: 0; + outline: none; + vertical-align: middle; + min-width: 225px; + max-width: 100%; + font-size: 15px; + line-height: 24px; + color: #647373; + background: #D3D9D9; + +} + +/* select { padding: 0; + width: 220px; + } */ + +input[type="text"]:focus, +input[type="password"]:focus, +input[type="email"]:focus, +textarea:focus { + color: #B3B7BC; + background-color: #3d4145; +} + +textarea { min-height: 220px; } + +label, +legend { + font: 16px/24px 'opensans-bold', sans-serif; + margin: 12px 0; + color: #3d4145; + display: block; +} +label span, +legend span { + color: #8B9798; + font: 14px/24px 'opensans-regular', sans-serif; +} + +input[type="checkbox"], +input[type="radio"] { + font-size: 15px; + color: #737373; +} + +input[type="checkbox"] { display: inline; } + +/* ------------------------------------------------------------------ */ +/* d. Grid +--------------------------------------------------------------------- + gutter = 40px. +/* ------------------------------------------------------------------ */ + +/* default +--------------------------------------------------------------- */ + + +/* ------------------------------------------------------------------ */ +/* e. Others +/* ------------------------------------------------------------------ */ + +/* 1. Clearing + (http://nicolasgallagher.com/micro-clearfix-hack/ +--------------------------------------------------------------------- */ + +.cf:before, +.cf:after { + content: " "; + display: table; +} +.cf:after { + clear: both; +} + +/* 2. Misc -------------------------------------------------------- */ + +.remove-bottom { margin-bottom: 0 !important; } +.half-bottom { margin-bottom: 12px !important; } +.add-bottom { margin-bottom: 24px !important; } +.no-border { border: none; } + +.text-center { text-align: center !important; } +.text-left { text-align: left !important; } +.text-right { text-align: right !important; } +.pull-left { float: left !important; } +.pull-right { float: right !important; } +.align-center { + margin-left: auto !important; + margin-right: auto !important; + text-align: center !important; +} + + + + diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/css/font-awesome.css b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/css/font-awesome.css new file mode 100644 index 0000000000..048cff9739 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/css/font-awesome.css @@ -0,0 +1,1338 @@ +/*! + * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.0.3'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.3333333333333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.2857142857142858em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.142857142857143em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.142857142857143em; + width: 2.142857142857143em; + top: 0.14285714285714285em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.8571428571428572em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: spin 2s infinite linear; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-o-keyframes spin { + 0% { + -o-transform: rotate(0deg); + } + 100% { + -o-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-asc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-desc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-reply-all:before { + content: "\f122"; +} +.fa-mail-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/css/font-awesome.min.css b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/css/font-awesome.min.css new file mode 100644 index 0000000000..449d6ac551 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.0.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857142858em;text-align:center}.fa-ul{padding-left:0;margin-left:2.142857142857143em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;top:.14285714285714285em;text-align:center}.fa-li.fa-lg{left:-1.8571428571428572em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-asc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-desc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-reply-all:before{content:"\f122"}.fa-mail-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"} \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/FontAwesome.otf b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/FontAwesome.otf new file mode 100644 index 0000000000..8b0f54e47e Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/FontAwesome.otf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/fontawesome-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000..7c79c6a6bc Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/fontawesome-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/fontawesome-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000000..45fdf33830 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/fontawesome-webfont.svg @@ -0,0 +1,414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/fontawesome-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000..e89738de5e Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/fontawesome-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/fontawesome-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000000..8c1748aab7 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/fonts/fontawesome-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/bordered-pulled.less b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/bordered-pulled.less new file mode 100644 index 0000000000..0c90eb5672 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/bordered-pulled.less @@ -0,0 +1,16 @@ +// Bordered & Pulled +// ------------------------- + +.@{fa-css-prefix}-border { + padding: .2em .25em .15em; + border: solid .08em @fa-border-color; + border-radius: .1em; +} + +.pull-right { float: right; } +.pull-left { float: left; } + +.@{fa-css-prefix} { + &.pull-left { margin-right: .3em; } + &.pull-right { margin-left: .3em; } +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/core.less b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/core.less new file mode 100644 index 0000000000..6d223bc2f0 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/core.less @@ -0,0 +1,12 @@ +// Base Class Definition +// ------------------------- + +.@{fa-css-prefix} { + display: inline-block; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/fixed-width.less b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/fixed-width.less new file mode 100644 index 0000000000..110289f2f4 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/fixed-width.less @@ -0,0 +1,6 @@ +// Fixed Width Icons +// ------------------------- +.@{fa-css-prefix}-fw { + width: (18em / 14); + text-align: center; +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/font-awesome.less b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/font-awesome.less new file mode 100644 index 0000000000..96d2f22254 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/font-awesome.less @@ -0,0 +1,17 @@ +/*! + * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ + +@import "variables"; +@import "mixins"; +@import "path"; +@import "core"; +@import "larger"; +@import "fixed-width"; +@import "list"; +@import "bordered-pulled"; +@import "spinning"; +@import "rotated-flipped"; +@import "stacked"; +@import "icons"; diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/icons.less b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/icons.less new file mode 100644 index 0000000000..bf0f856fcb --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/icons.less @@ -0,0 +1,412 @@ +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ + +.@{fa-css-prefix}-glass:before { content: @fa-var-glass; } +.@{fa-css-prefix}-music:before { content: @fa-var-music; } +.@{fa-css-prefix}-search:before { content: @fa-var-search; } +.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; } +.@{fa-css-prefix}-heart:before { content: @fa-var-heart; } +.@{fa-css-prefix}-star:before { content: @fa-var-star; } +.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; } +.@{fa-css-prefix}-user:before { content: @fa-var-user; } +.@{fa-css-prefix}-film:before { content: @fa-var-film; } +.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; } +.@{fa-css-prefix}-th:before { content: @fa-var-th; } +.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; } +.@{fa-css-prefix}-check:before { content: @fa-var-check; } +.@{fa-css-prefix}-times:before { content: @fa-var-times; } +.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; } +.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; } +.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; } +.@{fa-css-prefix}-signal:before { content: @fa-var-signal; } +.@{fa-css-prefix}-gear:before, +.@{fa-css-prefix}-cog:before { content: @fa-var-cog; } +.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; } +.@{fa-css-prefix}-home:before { content: @fa-var-home; } +.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; } +.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; } +.@{fa-css-prefix}-road:before { content: @fa-var-road; } +.@{fa-css-prefix}-download:before { content: @fa-var-download; } +.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; } +.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; } +.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; } +.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; } +.@{fa-css-prefix}-rotate-right:before, +.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; } +.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; } +.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; } +.@{fa-css-prefix}-lock:before { content: @fa-var-lock; } +.@{fa-css-prefix}-flag:before { content: @fa-var-flag; } +.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; } +.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; } +.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; } +.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; } +.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; } +.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; } +.@{fa-css-prefix}-tag:before { content: @fa-var-tag; } +.@{fa-css-prefix}-tags:before { content: @fa-var-tags; } +.@{fa-css-prefix}-book:before { content: @fa-var-book; } +.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; } +.@{fa-css-prefix}-print:before { content: @fa-var-print; } +.@{fa-css-prefix}-camera:before { content: @fa-var-camera; } +.@{fa-css-prefix}-font:before { content: @fa-var-font; } +.@{fa-css-prefix}-bold:before { content: @fa-var-bold; } +.@{fa-css-prefix}-italic:before { content: @fa-var-italic; } +.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; } +.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; } +.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; } +.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; } +.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; } +.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; } +.@{fa-css-prefix}-list:before { content: @fa-var-list; } +.@{fa-css-prefix}-dedent:before, +.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; } +.@{fa-css-prefix}-indent:before { content: @fa-var-indent; } +.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; } +.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; } +.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; } +.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; } +.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; } +.@{fa-css-prefix}-tint:before { content: @fa-var-tint; } +.@{fa-css-prefix}-edit:before, +.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; } +.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; } +.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; } +.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; } +.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; } +.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; } +.@{fa-css-prefix}-backward:before { content: @fa-var-backward; } +.@{fa-css-prefix}-play:before { content: @fa-var-play; } +.@{fa-css-prefix}-pause:before { content: @fa-var-pause; } +.@{fa-css-prefix}-stop:before { content: @fa-var-stop; } +.@{fa-css-prefix}-forward:before { content: @fa-var-forward; } +.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; } +.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; } +.@{fa-css-prefix}-eject:before { content: @fa-var-eject; } +.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; } +.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; } +.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; } +.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; } +.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; } +.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; } +.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; } +.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; } +.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; } +.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; } +.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; } +.@{fa-css-prefix}-ban:before { content: @fa-var-ban; } +.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; } +.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; } +.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; } +.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; } +.@{fa-css-prefix}-mail-forward:before, +.@{fa-css-prefix}-share:before { content: @fa-var-share; } +.@{fa-css-prefix}-expand:before { content: @fa-var-expand; } +.@{fa-css-prefix}-compress:before { content: @fa-var-compress; } +.@{fa-css-prefix}-plus:before { content: @fa-var-plus; } +.@{fa-css-prefix}-minus:before { content: @fa-var-minus; } +.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; } +.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; } +.@{fa-css-prefix}-gift:before { content: @fa-var-gift; } +.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; } +.@{fa-css-prefix}-fire:before { content: @fa-var-fire; } +.@{fa-css-prefix}-eye:before { content: @fa-var-eye; } +.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; } +.@{fa-css-prefix}-warning:before, +.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; } +.@{fa-css-prefix}-plane:before { content: @fa-var-plane; } +.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; } +.@{fa-css-prefix}-random:before { content: @fa-var-random; } +.@{fa-css-prefix}-comment:before { content: @fa-var-comment; } +.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; } +.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; } +.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; } +.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; } +.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; } +.@{fa-css-prefix}-folder:before { content: @fa-var-folder; } +.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; } +.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; } +.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; } +.@{fa-css-prefix}-bar-chart-o:before { content: @fa-var-bar-chart-o; } +.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; } +.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; } +.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; } +.@{fa-css-prefix}-key:before { content: @fa-var-key; } +.@{fa-css-prefix}-gears:before, +.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; } +.@{fa-css-prefix}-comments:before { content: @fa-var-comments; } +.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; } +.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; } +.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; } +.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; } +.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; } +.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; } +.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; } +.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; } +.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; } +.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; } +.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; } +.@{fa-css-prefix}-upload:before { content: @fa-var-upload; } +.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; } +.@{fa-css-prefix}-phone:before { content: @fa-var-phone; } +.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; } +.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; } +.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; } +.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; } +.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; } +.@{fa-css-prefix}-github:before { content: @fa-var-github; } +.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; } +.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; } +.@{fa-css-prefix}-rss:before { content: @fa-var-rss; } +.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; } +.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; } +.@{fa-css-prefix}-bell:before { content: @fa-var-bell; } +.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; } +.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; } +.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; } +.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; } +.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; } +.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; } +.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; } +.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; } +.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; } +.@{fa-css-prefix}-globe:before { content: @fa-var-globe; } +.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; } +.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; } +.@{fa-css-prefix}-filter:before { content: @fa-var-filter; } +.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; } +.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; } +.@{fa-css-prefix}-group:before, +.@{fa-css-prefix}-users:before { content: @fa-var-users; } +.@{fa-css-prefix}-chain:before, +.@{fa-css-prefix}-link:before { content: @fa-var-link; } +.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; } +.@{fa-css-prefix}-flask:before { content: @fa-var-flask; } +.@{fa-css-prefix}-cut:before, +.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; } +.@{fa-css-prefix}-copy:before, +.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; } +.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; } +.@{fa-css-prefix}-save:before, +.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; } +.@{fa-css-prefix}-square:before { content: @fa-var-square; } +.@{fa-css-prefix}-bars:before { content: @fa-var-bars; } +.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; } +.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; } +.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; } +.@{fa-css-prefix}-underline:before { content: @fa-var-underline; } +.@{fa-css-prefix}-table:before { content: @fa-var-table; } +.@{fa-css-prefix}-magic:before { content: @fa-var-magic; } +.@{fa-css-prefix}-truck:before { content: @fa-var-truck; } +.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; } +.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; } +.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; } +.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; } +.@{fa-css-prefix}-money:before { content: @fa-var-money; } +.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; } +.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; } +.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; } +.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; } +.@{fa-css-prefix}-columns:before { content: @fa-var-columns; } +.@{fa-css-prefix}-unsorted:before, +.@{fa-css-prefix}-sort:before { content: @fa-var-sort; } +.@{fa-css-prefix}-sort-down:before, +.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; } +.@{fa-css-prefix}-sort-up:before, +.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; } +.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; } +.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; } +.@{fa-css-prefix}-rotate-left:before, +.@{fa-css-prefix}-undo:before { content: @fa-var-undo; } +.@{fa-css-prefix}-legal:before, +.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; } +.@{fa-css-prefix}-dashboard:before, +.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; } +.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; } +.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; } +.@{fa-css-prefix}-flash:before, +.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; } +.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; } +.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; } +.@{fa-css-prefix}-paste:before, +.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; } +.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; } +.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; } +.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; } +.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; } +.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; } +.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; } +.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; } +.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; } +.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; } +.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; } +.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; } +.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; } +.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; } +.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; } +.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; } +.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; } +.@{fa-css-prefix}-beer:before { content: @fa-var-beer; } +.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; } +.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; } +.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; } +.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; } +.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; } +.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; } +.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; } +.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; } +.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; } +.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; } +.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; } +.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; } +.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; } +.@{fa-css-prefix}-mobile-phone:before, +.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; } +.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; } +.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; } +.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; } +.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; } +.@{fa-css-prefix}-circle:before { content: @fa-var-circle; } +.@{fa-css-prefix}-mail-reply:before, +.@{fa-css-prefix}-reply:before { content: @fa-var-reply; } +.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; } +.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; } +.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; } +.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; } +.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; } +.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; } +.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; } +.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; } +.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; } +.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; } +.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; } +.@{fa-css-prefix}-code:before { content: @fa-var-code; } +.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; } +.@{fa-css-prefix}-mail-reply-all:before { content: @fa-var-mail-reply-all; } +.@{fa-css-prefix}-star-half-empty:before, +.@{fa-css-prefix}-star-half-full:before, +.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; } +.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; } +.@{fa-css-prefix}-crop:before { content: @fa-var-crop; } +.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; } +.@{fa-css-prefix}-unlink:before, +.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; } +.@{fa-css-prefix}-question:before { content: @fa-var-question; } +.@{fa-css-prefix}-info:before { content: @fa-var-info; } +.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; } +.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; } +.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; } +.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; } +.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; } +.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; } +.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; } +.@{fa-css-prefix}-shield:before { content: @fa-var-shield; } +.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; } +.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; } +.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; } +.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; } +.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; } +.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; } +.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; } +.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; } +.@{fa-css-prefix}-html5:before { content: @fa-var-html5; } +.@{fa-css-prefix}-css3:before { content: @fa-var-css3; } +.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; } +.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; } +.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; } +.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; } +.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; } +.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; } +.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; } +.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; } +.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; } +.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; } +.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; } +.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; } +.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; } +.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; } +.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; } +.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; } +.@{fa-css-prefix}-compass:before { content: @fa-var-compass; } +.@{fa-css-prefix}-toggle-down:before, +.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; } +.@{fa-css-prefix}-toggle-up:before, +.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; } +.@{fa-css-prefix}-toggle-right:before, +.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; } +.@{fa-css-prefix}-euro:before, +.@{fa-css-prefix}-eur:before { content: @fa-var-eur; } +.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; } +.@{fa-css-prefix}-dollar:before, +.@{fa-css-prefix}-usd:before { content: @fa-var-usd; } +.@{fa-css-prefix}-rupee:before, +.@{fa-css-prefix}-inr:before { content: @fa-var-inr; } +.@{fa-css-prefix}-cny:before, +.@{fa-css-prefix}-rmb:before, +.@{fa-css-prefix}-yen:before, +.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; } +.@{fa-css-prefix}-ruble:before, +.@{fa-css-prefix}-rouble:before, +.@{fa-css-prefix}-rub:before { content: @fa-var-rub; } +.@{fa-css-prefix}-won:before, +.@{fa-css-prefix}-krw:before { content: @fa-var-krw; } +.@{fa-css-prefix}-bitcoin:before, +.@{fa-css-prefix}-btc:before { content: @fa-var-btc; } +.@{fa-css-prefix}-file:before { content: @fa-var-file; } +.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; } +.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; } +.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; } +.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; } +.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; } +.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; } +.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; } +.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; } +.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; } +.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; } +.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; } +.@{fa-css-prefix}-xing:before { content: @fa-var-xing; } +.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; } +.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; } +.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; } +.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; } +.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; } +.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; } +.@{fa-css-prefix}-adn:before { content: @fa-var-adn; } +.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; } +.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; } +.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; } +.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; } +.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; } +.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; } +.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; } +.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; } +.@{fa-css-prefix}-apple:before { content: @fa-var-apple; } +.@{fa-css-prefix}-windows:before { content: @fa-var-windows; } +.@{fa-css-prefix}-android:before { content: @fa-var-android; } +.@{fa-css-prefix}-linux:before { content: @fa-var-linux; } +.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; } +.@{fa-css-prefix}-skype:before { content: @fa-var-skype; } +.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; } +.@{fa-css-prefix}-trello:before { content: @fa-var-trello; } +.@{fa-css-prefix}-female:before { content: @fa-var-female; } +.@{fa-css-prefix}-male:before { content: @fa-var-male; } +.@{fa-css-prefix}-gittip:before { content: @fa-var-gittip; } +.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; } +.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; } +.@{fa-css-prefix}-archive:before { content: @fa-var-archive; } +.@{fa-css-prefix}-bug:before { content: @fa-var-bug; } +.@{fa-css-prefix}-vk:before { content: @fa-var-vk; } +.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; } +.@{fa-css-prefix}-renren:before { content: @fa-var-renren; } +.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; } +.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; } +.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; } +.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; } +.@{fa-css-prefix}-toggle-left:before, +.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; } +.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; } +.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; } +.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; } +.@{fa-css-prefix}-turkish-lira:before, +.@{fa-css-prefix}-try:before { content: @fa-var-try; } +.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; } diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/larger.less b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/larger.less new file mode 100644 index 0000000000..c9d646770e --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/larger.less @@ -0,0 +1,13 @@ +// Icon Sizes +// ------------------------- + +/* makes the font 33% larger relative to the icon container */ +.@{fa-css-prefix}-lg { + font-size: (4em / 3); + line-height: (3em / 4); + vertical-align: -15%; +} +.@{fa-css-prefix}-2x { font-size: 2em; } +.@{fa-css-prefix}-3x { font-size: 3em; } +.@{fa-css-prefix}-4x { font-size: 4em; } +.@{fa-css-prefix}-5x { font-size: 5em; } diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/list.less b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/list.less new file mode 100644 index 0000000000..eed9340515 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/list.less @@ -0,0 +1,19 @@ +// List Icons +// ------------------------- + +.@{fa-css-prefix}-ul { + padding-left: 0; + margin-left: @fa-li-width; + list-style-type: none; + > li { position: relative; } +} +.@{fa-css-prefix}-li { + position: absolute; + left: -@fa-li-width; + width: @fa-li-width; + top: (2em / 14); + text-align: center; + &.@{fa-css-prefix}-lg { + left: -@fa-li-width + (4em / 14); + } +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/mixins.less b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/mixins.less new file mode 100644 index 0000000000..19e5a6457b --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/mixins.less @@ -0,0 +1,20 @@ +// Mixins +// -------------------------- + +.fa-icon-rotate(@degrees, @rotation) { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); + -webkit-transform: rotate(@degrees); + -moz-transform: rotate(@degrees); + -ms-transform: rotate(@degrees); + -o-transform: rotate(@degrees); + transform: rotate(@degrees); +} + +.fa-icon-flip(@horiz, @vert, @rotation) { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); + -webkit-transform: scale(@horiz, @vert); + -moz-transform: scale(@horiz, @vert); + -ms-transform: scale(@horiz, @vert); + -o-transform: scale(@horiz, @vert); + transform: scale(@horiz, @vert); +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/path.less b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/path.less new file mode 100644 index 0000000000..c5a691246d --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/path.less @@ -0,0 +1,14 @@ +/* FONT PATH + * -------------------------- */ + +@font-face { + font-family: 'FontAwesome'; + src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); + src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), + url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), + url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), + url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); +// src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts + font-weight: normal; + font-style: normal; +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/rotated-flipped.less b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/rotated-flipped.less new file mode 100644 index 0000000000..8fff3a6c41 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/rotated-flipped.less @@ -0,0 +1,9 @@ +// Rotated & Flipped Icons +// ------------------------- + +.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } +.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } +.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } + +.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } +.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/spinning.less b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/spinning.less new file mode 100644 index 0000000000..60828fe5c0 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/spinning.less @@ -0,0 +1,30 @@ +// Spinning Icons +// -------------------------- + +.@{fa-css-prefix}-spin { + -webkit-animation: spin 2s infinite linear; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} + +@-moz-keyframes spin { + 0% { -moz-transform: rotate(0deg); } + 100% { -moz-transform: rotate(359deg); } +} +@-webkit-keyframes spin { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(359deg); } +} +@-o-keyframes spin { + 0% { -o-transform: rotate(0deg); } + 100% { -o-transform: rotate(359deg); } +} +@-ms-keyframes spin { + 0% { -ms-transform: rotate(0deg); } + 100% { -ms-transform: rotate(359deg); } +} +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(359deg); } +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/stacked.less b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/stacked.less new file mode 100644 index 0000000000..fc53fb0e7a --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/stacked.less @@ -0,0 +1,20 @@ +// Stacked Icons +// ------------------------- + +.@{fa-css-prefix}-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.@{fa-css-prefix}-stack-1x { line-height: inherit; } +.@{fa-css-prefix}-stack-2x { font-size: 2em; } +.@{fa-css-prefix}-inverse { color: @fa-inverse; } diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/variables.less b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/variables.less new file mode 100644 index 0000000000..f40a555f09 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/less/variables.less @@ -0,0 +1,381 @@ +// Variables +// -------------------------- + +@fa-font-path: "../fonts"; +//@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.0.3/fonts"; // for referencing Bootstrap CDN font files directly +@fa-css-prefix: fa; +@fa-version: "4.0.3"; +@fa-border-color: #eee; +@fa-inverse: #fff; +@fa-li-width: (30em / 14); + +@fa-var-glass: "\f000"; +@fa-var-music: "\f001"; +@fa-var-search: "\f002"; +@fa-var-envelope-o: "\f003"; +@fa-var-heart: "\f004"; +@fa-var-star: "\f005"; +@fa-var-star-o: "\f006"; +@fa-var-user: "\f007"; +@fa-var-film: "\f008"; +@fa-var-th-large: "\f009"; +@fa-var-th: "\f00a"; +@fa-var-th-list: "\f00b"; +@fa-var-check: "\f00c"; +@fa-var-times: "\f00d"; +@fa-var-search-plus: "\f00e"; +@fa-var-search-minus: "\f010"; +@fa-var-power-off: "\f011"; +@fa-var-signal: "\f012"; +@fa-var-cog: "\f013"; +@fa-var-trash-o: "\f014"; +@fa-var-home: "\f015"; +@fa-var-file-o: "\f016"; +@fa-var-clock-o: "\f017"; +@fa-var-road: "\f018"; +@fa-var-download: "\f019"; +@fa-var-arrow-circle-o-down: "\f01a"; +@fa-var-arrow-circle-o-up: "\f01b"; +@fa-var-inbox: "\f01c"; +@fa-var-play-circle-o: "\f01d"; +@fa-var-repeat: "\f01e"; +@fa-var-refresh: "\f021"; +@fa-var-list-alt: "\f022"; +@fa-var-lock: "\f023"; +@fa-var-flag: "\f024"; +@fa-var-headphones: "\f025"; +@fa-var-volume-off: "\f026"; +@fa-var-volume-down: "\f027"; +@fa-var-volume-up: "\f028"; +@fa-var-qrcode: "\f029"; +@fa-var-barcode: "\f02a"; +@fa-var-tag: "\f02b"; +@fa-var-tags: "\f02c"; +@fa-var-book: "\f02d"; +@fa-var-bookmark: "\f02e"; +@fa-var-print: "\f02f"; +@fa-var-camera: "\f030"; +@fa-var-font: "\f031"; +@fa-var-bold: "\f032"; +@fa-var-italic: "\f033"; +@fa-var-text-height: "\f034"; +@fa-var-text-width: "\f035"; +@fa-var-align-left: "\f036"; +@fa-var-align-center: "\f037"; +@fa-var-align-right: "\f038"; +@fa-var-align-justify: "\f039"; +@fa-var-list: "\f03a"; +@fa-var-outdent: "\f03b"; +@fa-var-indent: "\f03c"; +@fa-var-video-camera: "\f03d"; +@fa-var-picture-o: "\f03e"; +@fa-var-pencil: "\f040"; +@fa-var-map-marker: "\f041"; +@fa-var-adjust: "\f042"; +@fa-var-tint: "\f043"; +@fa-var-pencil-square-o: "\f044"; +@fa-var-share-square-o: "\f045"; +@fa-var-check-square-o: "\f046"; +@fa-var-arrows: "\f047"; +@fa-var-step-backward: "\f048"; +@fa-var-fast-backward: "\f049"; +@fa-var-backward: "\f04a"; +@fa-var-play: "\f04b"; +@fa-var-pause: "\f04c"; +@fa-var-stop: "\f04d"; +@fa-var-forward: "\f04e"; +@fa-var-fast-forward: "\f050"; +@fa-var-step-forward: "\f051"; +@fa-var-eject: "\f052"; +@fa-var-chevron-left: "\f053"; +@fa-var-chevron-right: "\f054"; +@fa-var-plus-circle: "\f055"; +@fa-var-minus-circle: "\f056"; +@fa-var-times-circle: "\f057"; +@fa-var-check-circle: "\f058"; +@fa-var-question-circle: "\f059"; +@fa-var-info-circle: "\f05a"; +@fa-var-crosshairs: "\f05b"; +@fa-var-times-circle-o: "\f05c"; +@fa-var-check-circle-o: "\f05d"; +@fa-var-ban: "\f05e"; +@fa-var-arrow-left: "\f060"; +@fa-var-arrow-right: "\f061"; +@fa-var-arrow-up: "\f062"; +@fa-var-arrow-down: "\f063"; +@fa-var-share: "\f064"; +@fa-var-expand: "\f065"; +@fa-var-compress: "\f066"; +@fa-var-plus: "\f067"; +@fa-var-minus: "\f068"; +@fa-var-asterisk: "\f069"; +@fa-var-exclamation-circle: "\f06a"; +@fa-var-gift: "\f06b"; +@fa-var-leaf: "\f06c"; +@fa-var-fire: "\f06d"; +@fa-var-eye: "\f06e"; +@fa-var-eye-slash: "\f070"; +@fa-var-exclamation-triangle: "\f071"; +@fa-var-plane: "\f072"; +@fa-var-calendar: "\f073"; +@fa-var-random: "\f074"; +@fa-var-comment: "\f075"; +@fa-var-magnet: "\f076"; +@fa-var-chevron-up: "\f077"; +@fa-var-chevron-down: "\f078"; +@fa-var-retweet: "\f079"; +@fa-var-shopping-cart: "\f07a"; +@fa-var-folder: "\f07b"; +@fa-var-folder-open: "\f07c"; +@fa-var-arrows-v: "\f07d"; +@fa-var-arrows-h: "\f07e"; +@fa-var-bar-chart-o: "\f080"; +@fa-var-twitter-square: "\f081"; +@fa-var-facebook-square: "\f082"; +@fa-var-camera-retro: "\f083"; +@fa-var-key: "\f084"; +@fa-var-cogs: "\f085"; +@fa-var-comments: "\f086"; +@fa-var-thumbs-o-up: "\f087"; +@fa-var-thumbs-o-down: "\f088"; +@fa-var-star-half: "\f089"; +@fa-var-heart-o: "\f08a"; +@fa-var-sign-out: "\f08b"; +@fa-var-linkedin-square: "\f08c"; +@fa-var-thumb-tack: "\f08d"; +@fa-var-external-link: "\f08e"; +@fa-var-sign-in: "\f090"; +@fa-var-trophy: "\f091"; +@fa-var-github-square: "\f092"; +@fa-var-upload: "\f093"; +@fa-var-lemon-o: "\f094"; +@fa-var-phone: "\f095"; +@fa-var-square-o: "\f096"; +@fa-var-bookmark-o: "\f097"; +@fa-var-phone-square: "\f098"; +@fa-var-twitter: "\f099"; +@fa-var-facebook: "\f09a"; +@fa-var-github: "\f09b"; +@fa-var-unlock: "\f09c"; +@fa-var-credit-card: "\f09d"; +@fa-var-rss: "\f09e"; +@fa-var-hdd-o: "\f0a0"; +@fa-var-bullhorn: "\f0a1"; +@fa-var-bell: "\f0f3"; +@fa-var-certificate: "\f0a3"; +@fa-var-hand-o-right: "\f0a4"; +@fa-var-hand-o-left: "\f0a5"; +@fa-var-hand-o-up: "\f0a6"; +@fa-var-hand-o-down: "\f0a7"; +@fa-var-arrow-circle-left: "\f0a8"; +@fa-var-arrow-circle-right: "\f0a9"; +@fa-var-arrow-circle-up: "\f0aa"; +@fa-var-arrow-circle-down: "\f0ab"; +@fa-var-globe: "\f0ac"; +@fa-var-wrench: "\f0ad"; +@fa-var-tasks: "\f0ae"; +@fa-var-filter: "\f0b0"; +@fa-var-briefcase: "\f0b1"; +@fa-var-arrows-alt: "\f0b2"; +@fa-var-users: "\f0c0"; +@fa-var-link: "\f0c1"; +@fa-var-cloud: "\f0c2"; +@fa-var-flask: "\f0c3"; +@fa-var-scissors: "\f0c4"; +@fa-var-files-o: "\f0c5"; +@fa-var-paperclip: "\f0c6"; +@fa-var-floppy-o: "\f0c7"; +@fa-var-square: "\f0c8"; +@fa-var-bars: "\f0c9"; +@fa-var-list-ul: "\f0ca"; +@fa-var-list-ol: "\f0cb"; +@fa-var-strikethrough: "\f0cc"; +@fa-var-underline: "\f0cd"; +@fa-var-table: "\f0ce"; +@fa-var-magic: "\f0d0"; +@fa-var-truck: "\f0d1"; +@fa-var-pinterest: "\f0d2"; +@fa-var-pinterest-square: "\f0d3"; +@fa-var-google-plus-square: "\f0d4"; +@fa-var-google-plus: "\f0d5"; +@fa-var-money: "\f0d6"; +@fa-var-caret-down: "\f0d7"; +@fa-var-caret-up: "\f0d8"; +@fa-var-caret-left: "\f0d9"; +@fa-var-caret-right: "\f0da"; +@fa-var-columns: "\f0db"; +@fa-var-sort: "\f0dc"; +@fa-var-sort-asc: "\f0dd"; +@fa-var-sort-desc: "\f0de"; +@fa-var-envelope: "\f0e0"; +@fa-var-linkedin: "\f0e1"; +@fa-var-undo: "\f0e2"; +@fa-var-gavel: "\f0e3"; +@fa-var-tachometer: "\f0e4"; +@fa-var-comment-o: "\f0e5"; +@fa-var-comments-o: "\f0e6"; +@fa-var-bolt: "\f0e7"; +@fa-var-sitemap: "\f0e8"; +@fa-var-umbrella: "\f0e9"; +@fa-var-clipboard: "\f0ea"; +@fa-var-lightbulb-o: "\f0eb"; +@fa-var-exchange: "\f0ec"; +@fa-var-cloud-download: "\f0ed"; +@fa-var-cloud-upload: "\f0ee"; +@fa-var-user-md: "\f0f0"; +@fa-var-stethoscope: "\f0f1"; +@fa-var-suitcase: "\f0f2"; +@fa-var-bell-o: "\f0a2"; +@fa-var-coffee: "\f0f4"; +@fa-var-cutlery: "\f0f5"; +@fa-var-file-text-o: "\f0f6"; +@fa-var-building-o: "\f0f7"; +@fa-var-hospital-o: "\f0f8"; +@fa-var-ambulance: "\f0f9"; +@fa-var-medkit: "\f0fa"; +@fa-var-fighter-jet: "\f0fb"; +@fa-var-beer: "\f0fc"; +@fa-var-h-square: "\f0fd"; +@fa-var-plus-square: "\f0fe"; +@fa-var-angle-double-left: "\f100"; +@fa-var-angle-double-right: "\f101"; +@fa-var-angle-double-up: "\f102"; +@fa-var-angle-double-down: "\f103"; +@fa-var-angle-left: "\f104"; +@fa-var-angle-right: "\f105"; +@fa-var-angle-up: "\f106"; +@fa-var-angle-down: "\f107"; +@fa-var-desktop: "\f108"; +@fa-var-laptop: "\f109"; +@fa-var-tablet: "\f10a"; +@fa-var-mobile: "\f10b"; +@fa-var-circle-o: "\f10c"; +@fa-var-quote-left: "\f10d"; +@fa-var-quote-right: "\f10e"; +@fa-var-spinner: "\f110"; +@fa-var-circle: "\f111"; +@fa-var-reply: "\f112"; +@fa-var-github-alt: "\f113"; +@fa-var-folder-o: "\f114"; +@fa-var-folder-open-o: "\f115"; +@fa-var-smile-o: "\f118"; +@fa-var-frown-o: "\f119"; +@fa-var-meh-o: "\f11a"; +@fa-var-gamepad: "\f11b"; +@fa-var-keyboard-o: "\f11c"; +@fa-var-flag-o: "\f11d"; +@fa-var-flag-checkered: "\f11e"; +@fa-var-terminal: "\f120"; +@fa-var-code: "\f121"; +@fa-var-reply-all: "\f122"; +@fa-var-mail-reply-all: "\f122"; +@fa-var-star-half-o: "\f123"; +@fa-var-location-arrow: "\f124"; +@fa-var-crop: "\f125"; +@fa-var-code-fork: "\f126"; +@fa-var-chain-broken: "\f127"; +@fa-var-question: "\f128"; +@fa-var-info: "\f129"; +@fa-var-exclamation: "\f12a"; +@fa-var-superscript: "\f12b"; +@fa-var-subscript: "\f12c"; +@fa-var-eraser: "\f12d"; +@fa-var-puzzle-piece: "\f12e"; +@fa-var-microphone: "\f130"; +@fa-var-microphone-slash: "\f131"; +@fa-var-shield: "\f132"; +@fa-var-calendar-o: "\f133"; +@fa-var-fire-extinguisher: "\f134"; +@fa-var-rocket: "\f135"; +@fa-var-maxcdn: "\f136"; +@fa-var-chevron-circle-left: "\f137"; +@fa-var-chevron-circle-right: "\f138"; +@fa-var-chevron-circle-up: "\f139"; +@fa-var-chevron-circle-down: "\f13a"; +@fa-var-html5: "\f13b"; +@fa-var-css3: "\f13c"; +@fa-var-anchor: "\f13d"; +@fa-var-unlock-alt: "\f13e"; +@fa-var-bullseye: "\f140"; +@fa-var-ellipsis-h: "\f141"; +@fa-var-ellipsis-v: "\f142"; +@fa-var-rss-square: "\f143"; +@fa-var-play-circle: "\f144"; +@fa-var-ticket: "\f145"; +@fa-var-minus-square: "\f146"; +@fa-var-minus-square-o: "\f147"; +@fa-var-level-up: "\f148"; +@fa-var-level-down: "\f149"; +@fa-var-check-square: "\f14a"; +@fa-var-pencil-square: "\f14b"; +@fa-var-external-link-square: "\f14c"; +@fa-var-share-square: "\f14d"; +@fa-var-compass: "\f14e"; +@fa-var-caret-square-o-down: "\f150"; +@fa-var-caret-square-o-up: "\f151"; +@fa-var-caret-square-o-right: "\f152"; +@fa-var-eur: "\f153"; +@fa-var-gbp: "\f154"; +@fa-var-usd: "\f155"; +@fa-var-inr: "\f156"; +@fa-var-jpy: "\f157"; +@fa-var-rub: "\f158"; +@fa-var-krw: "\f159"; +@fa-var-btc: "\f15a"; +@fa-var-file: "\f15b"; +@fa-var-file-text: "\f15c"; +@fa-var-sort-alpha-asc: "\f15d"; +@fa-var-sort-alpha-desc: "\f15e"; +@fa-var-sort-amount-asc: "\f160"; +@fa-var-sort-amount-desc: "\f161"; +@fa-var-sort-numeric-asc: "\f162"; +@fa-var-sort-numeric-desc: "\f163"; +@fa-var-thumbs-up: "\f164"; +@fa-var-thumbs-down: "\f165"; +@fa-var-youtube-square: "\f166"; +@fa-var-youtube: "\f167"; +@fa-var-xing: "\f168"; +@fa-var-xing-square: "\f169"; +@fa-var-youtube-play: "\f16a"; +@fa-var-dropbox: "\f16b"; +@fa-var-stack-overflow: "\f16c"; +@fa-var-instagram: "\f16d"; +@fa-var-flickr: "\f16e"; +@fa-var-adn: "\f170"; +@fa-var-bitbucket: "\f171"; +@fa-var-bitbucket-square: "\f172"; +@fa-var-tumblr: "\f173"; +@fa-var-tumblr-square: "\f174"; +@fa-var-long-arrow-down: "\f175"; +@fa-var-long-arrow-up: "\f176"; +@fa-var-long-arrow-left: "\f177"; +@fa-var-long-arrow-right: "\f178"; +@fa-var-apple: "\f179"; +@fa-var-windows: "\f17a"; +@fa-var-android: "\f17b"; +@fa-var-linux: "\f17c"; +@fa-var-dribbble: "\f17d"; +@fa-var-skype: "\f17e"; +@fa-var-foursquare: "\f180"; +@fa-var-trello: "\f181"; +@fa-var-female: "\f182"; +@fa-var-male: "\f183"; +@fa-var-gittip: "\f184"; +@fa-var-sun-o: "\f185"; +@fa-var-moon-o: "\f186"; +@fa-var-archive: "\f187"; +@fa-var-bug: "\f188"; +@fa-var-vk: "\f189"; +@fa-var-weibo: "\f18a"; +@fa-var-renren: "\f18b"; +@fa-var-pagelines: "\f18c"; +@fa-var-stack-exchange: "\f18d"; +@fa-var-arrow-circle-o-right: "\f18e"; +@fa-var-arrow-circle-o-left: "\f190"; +@fa-var-caret-square-o-left: "\f191"; +@fa-var-dot-circle-o: "\f192"; +@fa-var-wheelchair: "\f193"; +@fa-var-vimeo-square: "\f194"; +@fa-var-try: "\f195"; +@fa-var-plus-square-o: "\f196"; + diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_bordered-pulled.scss b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_bordered-pulled.scss new file mode 100644 index 0000000000..9d3fdf3a0b --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_bordered-pulled.scss @@ -0,0 +1,16 @@ +// Bordered & Pulled +// ------------------------- + +.#{$fa-css-prefix}-border { + padding: .2em .25em .15em; + border: solid .08em $fa-border-color; + border-radius: .1em; +} + +.pull-right { float: right; } +.pull-left { float: left; } + +.#{$fa-css-prefix} { + &.pull-left { margin-right: .3em; } + &.pull-right { margin-left: .3em; } +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_core.scss b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_core.scss new file mode 100644 index 0000000000..861ccd9dcb --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_core.scss @@ -0,0 +1,12 @@ +// Base Class Definition +// ------------------------- + +.#{$fa-css-prefix} { + display: inline-block; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_fixed-width.scss b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_fixed-width.scss new file mode 100644 index 0000000000..b221c98133 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_fixed-width.scss @@ -0,0 +1,6 @@ +// Fixed Width Icons +// ------------------------- +.#{$fa-css-prefix}-fw { + width: (18em / 14); + text-align: center; +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_icons.scss b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_icons.scss new file mode 100644 index 0000000000..7490cf3611 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_icons.scss @@ -0,0 +1,412 @@ +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ + +.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; } +.#{$fa-css-prefix}-music:before { content: $fa-var-music; } +.#{$fa-css-prefix}-search:before { content: $fa-var-search; } +.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; } +.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; } +.#{$fa-css-prefix}-star:before { content: $fa-var-star; } +.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; } +.#{$fa-css-prefix}-user:before { content: $fa-var-user; } +.#{$fa-css-prefix}-film:before { content: $fa-var-film; } +.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; } +.#{$fa-css-prefix}-th:before { content: $fa-var-th; } +.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; } +.#{$fa-css-prefix}-check:before { content: $fa-var-check; } +.#{$fa-css-prefix}-times:before { content: $fa-var-times; } +.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; } +.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; } +.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; } +.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; } +.#{$fa-css-prefix}-gear:before, +.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; } +.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; } +.#{$fa-css-prefix}-home:before { content: $fa-var-home; } +.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; } +.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; } +.#{$fa-css-prefix}-road:before { content: $fa-var-road; } +.#{$fa-css-prefix}-download:before { content: $fa-var-download; } +.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; } +.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; } +.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; } +.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; } +.#{$fa-css-prefix}-rotate-right:before, +.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; } +.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; } +.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; } +.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; } +.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; } +.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; } +.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; } +.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; } +.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; } +.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; } +.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; } +.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; } +.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; } +.#{$fa-css-prefix}-book:before { content: $fa-var-book; } +.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; } +.#{$fa-css-prefix}-print:before { content: $fa-var-print; } +.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; } +.#{$fa-css-prefix}-font:before { content: $fa-var-font; } +.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; } +.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; } +.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; } +.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; } +.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; } +.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; } +.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; } +.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; } +.#{$fa-css-prefix}-list:before { content: $fa-var-list; } +.#{$fa-css-prefix}-dedent:before, +.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; } +.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; } +.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; } +.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; } +.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; } +.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; } +.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; } +.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; } +.#{$fa-css-prefix}-edit:before, +.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; } +.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; } +.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; } +.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; } +.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; } +.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; } +.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; } +.#{$fa-css-prefix}-play:before { content: $fa-var-play; } +.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; } +.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; } +.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; } +.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; } +.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; } +.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; } +.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; } +.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; } +.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; } +.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; } +.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; } +.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; } +.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; } +.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; } +.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; } +.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; } +.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; } +.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; } +.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; } +.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; } +.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; } +.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; } +.#{$fa-css-prefix}-mail-forward:before, +.#{$fa-css-prefix}-share:before { content: $fa-var-share; } +.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; } +.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; } +.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; } +.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; } +.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; } +.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; } +.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; } +.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; } +.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; } +.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; } +.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; } +.#{$fa-css-prefix}-warning:before, +.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; } +.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; } +.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; } +.#{$fa-css-prefix}-random:before { content: $fa-var-random; } +.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; } +.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; } +.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; } +.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; } +.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; } +.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; } +.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; } +.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; } +.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; } +.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; } +.#{$fa-css-prefix}-bar-chart-o:before { content: $fa-var-bar-chart-o; } +.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; } +.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; } +.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; } +.#{$fa-css-prefix}-key:before { content: $fa-var-key; } +.#{$fa-css-prefix}-gears:before, +.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; } +.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; } +.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; } +.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; } +.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; } +.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; } +.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; } +.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; } +.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; } +.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; } +.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; } +.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; } +.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; } +.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; } +.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; } +.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; } +.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; } +.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; } +.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; } +.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; } +.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; } +.#{$fa-css-prefix}-github:before { content: $fa-var-github; } +.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; } +.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; } +.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; } +.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; } +.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; } +.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; } +.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; } +.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; } +.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; } +.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; } +.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; } +.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; } +.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; } +.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; } +.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; } +.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; } +.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; } +.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; } +.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; } +.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; } +.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; } +.#{$fa-css-prefix}-group:before, +.#{$fa-css-prefix}-users:before { content: $fa-var-users; } +.#{$fa-css-prefix}-chain:before, +.#{$fa-css-prefix}-link:before { content: $fa-var-link; } +.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; } +.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; } +.#{$fa-css-prefix}-cut:before, +.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; } +.#{$fa-css-prefix}-copy:before, +.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; } +.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; } +.#{$fa-css-prefix}-save:before, +.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; } +.#{$fa-css-prefix}-square:before { content: $fa-var-square; } +.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; } +.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; } +.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; } +.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; } +.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; } +.#{$fa-css-prefix}-table:before { content: $fa-var-table; } +.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; } +.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; } +.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; } +.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; } +.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; } +.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; } +.#{$fa-css-prefix}-money:before { content: $fa-var-money; } +.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; } +.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; } +.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; } +.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; } +.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; } +.#{$fa-css-prefix}-unsorted:before, +.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; } +.#{$fa-css-prefix}-sort-down:before, +.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; } +.#{$fa-css-prefix}-sort-up:before, +.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; } +.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; } +.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; } +.#{$fa-css-prefix}-rotate-left:before, +.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; } +.#{$fa-css-prefix}-legal:before, +.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; } +.#{$fa-css-prefix}-dashboard:before, +.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; } +.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; } +.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; } +.#{$fa-css-prefix}-flash:before, +.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; } +.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; } +.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; } +.#{$fa-css-prefix}-paste:before, +.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; } +.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; } +.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; } +.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; } +.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; } +.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; } +.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; } +.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; } +.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; } +.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; } +.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; } +.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; } +.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; } +.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; } +.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; } +.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; } +.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; } +.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; } +.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; } +.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; } +.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; } +.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; } +.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; } +.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; } +.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; } +.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; } +.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; } +.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; } +.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; } +.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; } +.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; } +.#{$fa-css-prefix}-mobile-phone:before, +.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; } +.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; } +.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; } +.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; } +.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; } +.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; } +.#{$fa-css-prefix}-mail-reply:before, +.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; } +.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; } +.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; } +.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; } +.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; } +.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; } +.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; } +.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; } +.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; } +.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; } +.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; } +.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; } +.#{$fa-css-prefix}-code:before { content: $fa-var-code; } +.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; } +.#{$fa-css-prefix}-mail-reply-all:before { content: $fa-var-mail-reply-all; } +.#{$fa-css-prefix}-star-half-empty:before, +.#{$fa-css-prefix}-star-half-full:before, +.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; } +.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; } +.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; } +.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; } +.#{$fa-css-prefix}-unlink:before, +.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; } +.#{$fa-css-prefix}-question:before { content: $fa-var-question; } +.#{$fa-css-prefix}-info:before { content: $fa-var-info; } +.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; } +.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; } +.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; } +.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; } +.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; } +.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; } +.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; } +.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; } +.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; } +.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; } +.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; } +.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; } +.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; } +.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; } +.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; } +.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; } +.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; } +.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; } +.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; } +.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; } +.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; } +.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; } +.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; } +.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; } +.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; } +.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; } +.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; } +.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; } +.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; } +.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; } +.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; } +.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; } +.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; } +.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; } +.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; } +.#{$fa-css-prefix}-toggle-down:before, +.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; } +.#{$fa-css-prefix}-toggle-up:before, +.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; } +.#{$fa-css-prefix}-toggle-right:before, +.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; } +.#{$fa-css-prefix}-euro:before, +.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; } +.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; } +.#{$fa-css-prefix}-dollar:before, +.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; } +.#{$fa-css-prefix}-rupee:before, +.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; } +.#{$fa-css-prefix}-cny:before, +.#{$fa-css-prefix}-rmb:before, +.#{$fa-css-prefix}-yen:before, +.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; } +.#{$fa-css-prefix}-ruble:before, +.#{$fa-css-prefix}-rouble:before, +.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; } +.#{$fa-css-prefix}-won:before, +.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; } +.#{$fa-css-prefix}-bitcoin:before, +.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; } +.#{$fa-css-prefix}-file:before { content: $fa-var-file; } +.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; } +.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; } +.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; } +.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; } +.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; } +.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; } +.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; } +.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; } +.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; } +.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; } +.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; } +.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; } +.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; } +.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; } +.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; } +.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; } +.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; } +.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; } +.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; } +.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; } +.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; } +.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; } +.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; } +.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; } +.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; } +.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; } +.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; } +.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; } +.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; } +.#{$fa-css-prefix}-android:before { content: $fa-var-android; } +.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; } +.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; } +.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; } +.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; } +.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; } +.#{$fa-css-prefix}-female:before { content: $fa-var-female; } +.#{$fa-css-prefix}-male:before { content: $fa-var-male; } +.#{$fa-css-prefix}-gittip:before { content: $fa-var-gittip; } +.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; } +.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; } +.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; } +.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; } +.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; } +.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; } +.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; } +.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; } +.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; } +.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; } +.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; } +.#{$fa-css-prefix}-toggle-left:before, +.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; } +.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; } +.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; } +.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; } +.#{$fa-css-prefix}-turkish-lira:before, +.#{$fa-css-prefix}-try:before { content: $fa-var-try; } +.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; } diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_larger.scss b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_larger.scss new file mode 100644 index 0000000000..41e9a8184a --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_larger.scss @@ -0,0 +1,13 @@ +// Icon Sizes +// ------------------------- + +/* makes the font 33% larger relative to the icon container */ +.#{$fa-css-prefix}-lg { + font-size: (4em / 3); + line-height: (3em / 4); + vertical-align: -15%; +} +.#{$fa-css-prefix}-2x { font-size: 2em; } +.#{$fa-css-prefix}-3x { font-size: 3em; } +.#{$fa-css-prefix}-4x { font-size: 4em; } +.#{$fa-css-prefix}-5x { font-size: 5em; } diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_list.scss b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_list.scss new file mode 100644 index 0000000000..7d1e4d54d6 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_list.scss @@ -0,0 +1,19 @@ +// List Icons +// ------------------------- + +.#{$fa-css-prefix}-ul { + padding-left: 0; + margin-left: $fa-li-width; + list-style-type: none; + > li { position: relative; } +} +.#{$fa-css-prefix}-li { + position: absolute; + left: -$fa-li-width; + width: $fa-li-width; + top: (2em / 14); + text-align: center; + &.#{$fa-css-prefix}-lg { + left: -$fa-li-width + (4em / 14); + } +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_mixins.scss b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_mixins.scss new file mode 100644 index 0000000000..9f555963f8 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_mixins.scss @@ -0,0 +1,20 @@ +// Mixins +// -------------------------- + +@mixin fa-icon-rotate($degrees, $rotation) { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); + -webkit-transform: rotate($degrees); + -moz-transform: rotate($degrees); + -ms-transform: rotate($degrees); + -o-transform: rotate($degrees); + transform: rotate($degrees); +} + +@mixin fa-icon-flip($horiz, $vert, $rotation) { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); + -webkit-transform: scale($horiz, $vert); + -moz-transform: scale($horiz, $vert); + -ms-transform: scale($horiz, $vert); + -o-transform: scale($horiz, $vert); + transform: scale($horiz, $vert); +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_path.scss b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_path.scss new file mode 100644 index 0000000000..fd21c3515e --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_path.scss @@ -0,0 +1,14 @@ +/* FONT PATH + * -------------------------- */ + +@font-face { + font-family: 'FontAwesome'; + src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); + src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), + url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), + url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), + url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); + //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts + font-weight: normal; + font-style: normal; +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_rotated-flipped.scss b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_rotated-flipped.scss new file mode 100644 index 0000000000..343fa5507b --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_rotated-flipped.scss @@ -0,0 +1,9 @@ +// Rotated & Flipped Icons +// ------------------------- + +.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } +.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } +.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } + +.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } +.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_spinning.scss b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_spinning.scss new file mode 100644 index 0000000000..ba1e4f1623 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_spinning.scss @@ -0,0 +1,30 @@ +// Spinning Icons +// -------------------------- + +.#{$fa-css-prefix}-spin { + -webkit-animation: spin 2s infinite linear; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} + +@-moz-keyframes spin { + 0% { -moz-transform: rotate(0deg); } + 100% { -moz-transform: rotate(359deg); } +} +@-webkit-keyframes spin { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(359deg); } +} +@-o-keyframes spin { + 0% { -o-transform: rotate(0deg); } + 100% { -o-transform: rotate(359deg); } +} +@-ms-keyframes spin { + 0% { -ms-transform: rotate(0deg); } + 100% { -ms-transform: rotate(359deg); } +} +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(359deg); } +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_stacked.scss b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_stacked.scss new file mode 100644 index 0000000000..aef7403660 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_stacked.scss @@ -0,0 +1,20 @@ +// Stacked Icons +// ------------------------- + +.#{$fa-css-prefix}-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.#{$fa-css-prefix}-stack-1x { line-height: inherit; } +.#{$fa-css-prefix}-stack-2x { font-size: 2em; } +.#{$fa-css-prefix}-inverse { color: $fa-inverse; } diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_variables.scss b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_variables.scss new file mode 100644 index 0000000000..2d6e076a70 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/_variables.scss @@ -0,0 +1,381 @@ +// Variables +// -------------------------- + +$fa-font-path: "../fonts" !default; +//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.0.3/fonts" !default; // for referencing Bootstrap CDN font files directly +$fa-css-prefix: fa !default; +$fa-version: "4.0.3" !default; +$fa-border-color: #eee !default; +$fa-inverse: #fff !default; +$fa-li-width: (30em / 14) !default; + +$fa-var-glass: "\f000"; +$fa-var-music: "\f001"; +$fa-var-search: "\f002"; +$fa-var-envelope-o: "\f003"; +$fa-var-heart: "\f004"; +$fa-var-star: "\f005"; +$fa-var-star-o: "\f006"; +$fa-var-user: "\f007"; +$fa-var-film: "\f008"; +$fa-var-th-large: "\f009"; +$fa-var-th: "\f00a"; +$fa-var-th-list: "\f00b"; +$fa-var-check: "\f00c"; +$fa-var-times: "\f00d"; +$fa-var-search-plus: "\f00e"; +$fa-var-search-minus: "\f010"; +$fa-var-power-off: "\f011"; +$fa-var-signal: "\f012"; +$fa-var-cog: "\f013"; +$fa-var-trash-o: "\f014"; +$fa-var-home: "\f015"; +$fa-var-file-o: "\f016"; +$fa-var-clock-o: "\f017"; +$fa-var-road: "\f018"; +$fa-var-download: "\f019"; +$fa-var-arrow-circle-o-down: "\f01a"; +$fa-var-arrow-circle-o-up: "\f01b"; +$fa-var-inbox: "\f01c"; +$fa-var-play-circle-o: "\f01d"; +$fa-var-repeat: "\f01e"; +$fa-var-refresh: "\f021"; +$fa-var-list-alt: "\f022"; +$fa-var-lock: "\f023"; +$fa-var-flag: "\f024"; +$fa-var-headphones: "\f025"; +$fa-var-volume-off: "\f026"; +$fa-var-volume-down: "\f027"; +$fa-var-volume-up: "\f028"; +$fa-var-qrcode: "\f029"; +$fa-var-barcode: "\f02a"; +$fa-var-tag: "\f02b"; +$fa-var-tags: "\f02c"; +$fa-var-book: "\f02d"; +$fa-var-bookmark: "\f02e"; +$fa-var-print: "\f02f"; +$fa-var-camera: "\f030"; +$fa-var-font: "\f031"; +$fa-var-bold: "\f032"; +$fa-var-italic: "\f033"; +$fa-var-text-height: "\f034"; +$fa-var-text-width: "\f035"; +$fa-var-align-left: "\f036"; +$fa-var-align-center: "\f037"; +$fa-var-align-right: "\f038"; +$fa-var-align-justify: "\f039"; +$fa-var-list: "\f03a"; +$fa-var-outdent: "\f03b"; +$fa-var-indent: "\f03c"; +$fa-var-video-camera: "\f03d"; +$fa-var-picture-o: "\f03e"; +$fa-var-pencil: "\f040"; +$fa-var-map-marker: "\f041"; +$fa-var-adjust: "\f042"; +$fa-var-tint: "\f043"; +$fa-var-pencil-square-o: "\f044"; +$fa-var-share-square-o: "\f045"; +$fa-var-check-square-o: "\f046"; +$fa-var-arrows: "\f047"; +$fa-var-step-backward: "\f048"; +$fa-var-fast-backward: "\f049"; +$fa-var-backward: "\f04a"; +$fa-var-play: "\f04b"; +$fa-var-pause: "\f04c"; +$fa-var-stop: "\f04d"; +$fa-var-forward: "\f04e"; +$fa-var-fast-forward: "\f050"; +$fa-var-step-forward: "\f051"; +$fa-var-eject: "\f052"; +$fa-var-chevron-left: "\f053"; +$fa-var-chevron-right: "\f054"; +$fa-var-plus-circle: "\f055"; +$fa-var-minus-circle: "\f056"; +$fa-var-times-circle: "\f057"; +$fa-var-check-circle: "\f058"; +$fa-var-question-circle: "\f059"; +$fa-var-info-circle: "\f05a"; +$fa-var-crosshairs: "\f05b"; +$fa-var-times-circle-o: "\f05c"; +$fa-var-check-circle-o: "\f05d"; +$fa-var-ban: "\f05e"; +$fa-var-arrow-left: "\f060"; +$fa-var-arrow-right: "\f061"; +$fa-var-arrow-up: "\f062"; +$fa-var-arrow-down: "\f063"; +$fa-var-share: "\f064"; +$fa-var-expand: "\f065"; +$fa-var-compress: "\f066"; +$fa-var-plus: "\f067"; +$fa-var-minus: "\f068"; +$fa-var-asterisk: "\f069"; +$fa-var-exclamation-circle: "\f06a"; +$fa-var-gift: "\f06b"; +$fa-var-leaf: "\f06c"; +$fa-var-fire: "\f06d"; +$fa-var-eye: "\f06e"; +$fa-var-eye-slash: "\f070"; +$fa-var-exclamation-triangle: "\f071"; +$fa-var-plane: "\f072"; +$fa-var-calendar: "\f073"; +$fa-var-random: "\f074"; +$fa-var-comment: "\f075"; +$fa-var-magnet: "\f076"; +$fa-var-chevron-up: "\f077"; +$fa-var-chevron-down: "\f078"; +$fa-var-retweet: "\f079"; +$fa-var-shopping-cart: "\f07a"; +$fa-var-folder: "\f07b"; +$fa-var-folder-open: "\f07c"; +$fa-var-arrows-v: "\f07d"; +$fa-var-arrows-h: "\f07e"; +$fa-var-bar-chart-o: "\f080"; +$fa-var-twitter-square: "\f081"; +$fa-var-facebook-square: "\f082"; +$fa-var-camera-retro: "\f083"; +$fa-var-key: "\f084"; +$fa-var-cogs: "\f085"; +$fa-var-comments: "\f086"; +$fa-var-thumbs-o-up: "\f087"; +$fa-var-thumbs-o-down: "\f088"; +$fa-var-star-half: "\f089"; +$fa-var-heart-o: "\f08a"; +$fa-var-sign-out: "\f08b"; +$fa-var-linkedin-square: "\f08c"; +$fa-var-thumb-tack: "\f08d"; +$fa-var-external-link: "\f08e"; +$fa-var-sign-in: "\f090"; +$fa-var-trophy: "\f091"; +$fa-var-github-square: "\f092"; +$fa-var-upload: "\f093"; +$fa-var-lemon-o: "\f094"; +$fa-var-phone: "\f095"; +$fa-var-square-o: "\f096"; +$fa-var-bookmark-o: "\f097"; +$fa-var-phone-square: "\f098"; +$fa-var-twitter: "\f099"; +$fa-var-facebook: "\f09a"; +$fa-var-github: "\f09b"; +$fa-var-unlock: "\f09c"; +$fa-var-credit-card: "\f09d"; +$fa-var-rss: "\f09e"; +$fa-var-hdd-o: "\f0a0"; +$fa-var-bullhorn: "\f0a1"; +$fa-var-bell: "\f0f3"; +$fa-var-certificate: "\f0a3"; +$fa-var-hand-o-right: "\f0a4"; +$fa-var-hand-o-left: "\f0a5"; +$fa-var-hand-o-up: "\f0a6"; +$fa-var-hand-o-down: "\f0a7"; +$fa-var-arrow-circle-left: "\f0a8"; +$fa-var-arrow-circle-right: "\f0a9"; +$fa-var-arrow-circle-up: "\f0aa"; +$fa-var-arrow-circle-down: "\f0ab"; +$fa-var-globe: "\f0ac"; +$fa-var-wrench: "\f0ad"; +$fa-var-tasks: "\f0ae"; +$fa-var-filter: "\f0b0"; +$fa-var-briefcase: "\f0b1"; +$fa-var-arrows-alt: "\f0b2"; +$fa-var-users: "\f0c0"; +$fa-var-link: "\f0c1"; +$fa-var-cloud: "\f0c2"; +$fa-var-flask: "\f0c3"; +$fa-var-scissors: "\f0c4"; +$fa-var-files-o: "\f0c5"; +$fa-var-paperclip: "\f0c6"; +$fa-var-floppy-o: "\f0c7"; +$fa-var-square: "\f0c8"; +$fa-var-bars: "\f0c9"; +$fa-var-list-ul: "\f0ca"; +$fa-var-list-ol: "\f0cb"; +$fa-var-strikethrough: "\f0cc"; +$fa-var-underline: "\f0cd"; +$fa-var-table: "\f0ce"; +$fa-var-magic: "\f0d0"; +$fa-var-truck: "\f0d1"; +$fa-var-pinterest: "\f0d2"; +$fa-var-pinterest-square: "\f0d3"; +$fa-var-google-plus-square: "\f0d4"; +$fa-var-google-plus: "\f0d5"; +$fa-var-money: "\f0d6"; +$fa-var-caret-down: "\f0d7"; +$fa-var-caret-up: "\f0d8"; +$fa-var-caret-left: "\f0d9"; +$fa-var-caret-right: "\f0da"; +$fa-var-columns: "\f0db"; +$fa-var-sort: "\f0dc"; +$fa-var-sort-asc: "\f0dd"; +$fa-var-sort-desc: "\f0de"; +$fa-var-envelope: "\f0e0"; +$fa-var-linkedin: "\f0e1"; +$fa-var-undo: "\f0e2"; +$fa-var-gavel: "\f0e3"; +$fa-var-tachometer: "\f0e4"; +$fa-var-comment-o: "\f0e5"; +$fa-var-comments-o: "\f0e6"; +$fa-var-bolt: "\f0e7"; +$fa-var-sitemap: "\f0e8"; +$fa-var-umbrella: "\f0e9"; +$fa-var-clipboard: "\f0ea"; +$fa-var-lightbulb-o: "\f0eb"; +$fa-var-exchange: "\f0ec"; +$fa-var-cloud-download: "\f0ed"; +$fa-var-cloud-upload: "\f0ee"; +$fa-var-user-md: "\f0f0"; +$fa-var-stethoscope: "\f0f1"; +$fa-var-suitcase: "\f0f2"; +$fa-var-bell-o: "\f0a2"; +$fa-var-coffee: "\f0f4"; +$fa-var-cutlery: "\f0f5"; +$fa-var-file-text-o: "\f0f6"; +$fa-var-building-o: "\f0f7"; +$fa-var-hospital-o: "\f0f8"; +$fa-var-ambulance: "\f0f9"; +$fa-var-medkit: "\f0fa"; +$fa-var-fighter-jet: "\f0fb"; +$fa-var-beer: "\f0fc"; +$fa-var-h-square: "\f0fd"; +$fa-var-plus-square: "\f0fe"; +$fa-var-angle-double-left: "\f100"; +$fa-var-angle-double-right: "\f101"; +$fa-var-angle-double-up: "\f102"; +$fa-var-angle-double-down: "\f103"; +$fa-var-angle-left: "\f104"; +$fa-var-angle-right: "\f105"; +$fa-var-angle-up: "\f106"; +$fa-var-angle-down: "\f107"; +$fa-var-desktop: "\f108"; +$fa-var-laptop: "\f109"; +$fa-var-tablet: "\f10a"; +$fa-var-mobile: "\f10b"; +$fa-var-circle-o: "\f10c"; +$fa-var-quote-left: "\f10d"; +$fa-var-quote-right: "\f10e"; +$fa-var-spinner: "\f110"; +$fa-var-circle: "\f111"; +$fa-var-reply: "\f112"; +$fa-var-github-alt: "\f113"; +$fa-var-folder-o: "\f114"; +$fa-var-folder-open-o: "\f115"; +$fa-var-smile-o: "\f118"; +$fa-var-frown-o: "\f119"; +$fa-var-meh-o: "\f11a"; +$fa-var-gamepad: "\f11b"; +$fa-var-keyboard-o: "\f11c"; +$fa-var-flag-o: "\f11d"; +$fa-var-flag-checkered: "\f11e"; +$fa-var-terminal: "\f120"; +$fa-var-code: "\f121"; +$fa-var-reply-all: "\f122"; +$fa-var-mail-reply-all: "\f122"; +$fa-var-star-half-o: "\f123"; +$fa-var-location-arrow: "\f124"; +$fa-var-crop: "\f125"; +$fa-var-code-fork: "\f126"; +$fa-var-chain-broken: "\f127"; +$fa-var-question: "\f128"; +$fa-var-info: "\f129"; +$fa-var-exclamation: "\f12a"; +$fa-var-superscript: "\f12b"; +$fa-var-subscript: "\f12c"; +$fa-var-eraser: "\f12d"; +$fa-var-puzzle-piece: "\f12e"; +$fa-var-microphone: "\f130"; +$fa-var-microphone-slash: "\f131"; +$fa-var-shield: "\f132"; +$fa-var-calendar-o: "\f133"; +$fa-var-fire-extinguisher: "\f134"; +$fa-var-rocket: "\f135"; +$fa-var-maxcdn: "\f136"; +$fa-var-chevron-circle-left: "\f137"; +$fa-var-chevron-circle-right: "\f138"; +$fa-var-chevron-circle-up: "\f139"; +$fa-var-chevron-circle-down: "\f13a"; +$fa-var-html5: "\f13b"; +$fa-var-css3: "\f13c"; +$fa-var-anchor: "\f13d"; +$fa-var-unlock-alt: "\f13e"; +$fa-var-bullseye: "\f140"; +$fa-var-ellipsis-h: "\f141"; +$fa-var-ellipsis-v: "\f142"; +$fa-var-rss-square: "\f143"; +$fa-var-play-circle: "\f144"; +$fa-var-ticket: "\f145"; +$fa-var-minus-square: "\f146"; +$fa-var-minus-square-o: "\f147"; +$fa-var-level-up: "\f148"; +$fa-var-level-down: "\f149"; +$fa-var-check-square: "\f14a"; +$fa-var-pencil-square: "\f14b"; +$fa-var-external-link-square: "\f14c"; +$fa-var-share-square: "\f14d"; +$fa-var-compass: "\f14e"; +$fa-var-caret-square-o-down: "\f150"; +$fa-var-caret-square-o-up: "\f151"; +$fa-var-caret-square-o-right: "\f152"; +$fa-var-eur: "\f153"; +$fa-var-gbp: "\f154"; +$fa-var-usd: "\f155"; +$fa-var-inr: "\f156"; +$fa-var-jpy: "\f157"; +$fa-var-rub: "\f158"; +$fa-var-krw: "\f159"; +$fa-var-btc: "\f15a"; +$fa-var-file: "\f15b"; +$fa-var-file-text: "\f15c"; +$fa-var-sort-alpha-asc: "\f15d"; +$fa-var-sort-alpha-desc: "\f15e"; +$fa-var-sort-amount-asc: "\f160"; +$fa-var-sort-amount-desc: "\f161"; +$fa-var-sort-numeric-asc: "\f162"; +$fa-var-sort-numeric-desc: "\f163"; +$fa-var-thumbs-up: "\f164"; +$fa-var-thumbs-down: "\f165"; +$fa-var-youtube-square: "\f166"; +$fa-var-youtube: "\f167"; +$fa-var-xing: "\f168"; +$fa-var-xing-square: "\f169"; +$fa-var-youtube-play: "\f16a"; +$fa-var-dropbox: "\f16b"; +$fa-var-stack-overflow: "\f16c"; +$fa-var-instagram: "\f16d"; +$fa-var-flickr: "\f16e"; +$fa-var-adn: "\f170"; +$fa-var-bitbucket: "\f171"; +$fa-var-bitbucket-square: "\f172"; +$fa-var-tumblr: "\f173"; +$fa-var-tumblr-square: "\f174"; +$fa-var-long-arrow-down: "\f175"; +$fa-var-long-arrow-up: "\f176"; +$fa-var-long-arrow-left: "\f177"; +$fa-var-long-arrow-right: "\f178"; +$fa-var-apple: "\f179"; +$fa-var-windows: "\f17a"; +$fa-var-android: "\f17b"; +$fa-var-linux: "\f17c"; +$fa-var-dribbble: "\f17d"; +$fa-var-skype: "\f17e"; +$fa-var-foursquare: "\f180"; +$fa-var-trello: "\f181"; +$fa-var-female: "\f182"; +$fa-var-male: "\f183"; +$fa-var-gittip: "\f184"; +$fa-var-sun-o: "\f185"; +$fa-var-moon-o: "\f186"; +$fa-var-archive: "\f187"; +$fa-var-bug: "\f188"; +$fa-var-vk: "\f189"; +$fa-var-weibo: "\f18a"; +$fa-var-renren: "\f18b"; +$fa-var-pagelines: "\f18c"; +$fa-var-stack-exchange: "\f18d"; +$fa-var-arrow-circle-o-right: "\f18e"; +$fa-var-arrow-circle-o-left: "\f190"; +$fa-var-caret-square-o-left: "\f191"; +$fa-var-dot-circle-o: "\f192"; +$fa-var-wheelchair: "\f193"; +$fa-var-vimeo-square: "\f194"; +$fa-var-try: "\f195"; +$fa-var-plus-square-o: "\f196"; + diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/font-awesome.scss b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/font-awesome.scss new file mode 100644 index 0000000000..96d2f22254 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/font-awesome/scss/font-awesome.scss @@ -0,0 +1,17 @@ +/*! + * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ + +@import "variables"; +@import "mixins"; +@import "path"; +@import "core"; +@import "larger"; +@import "fixed-width"; +@import "list"; +@import "bordered-pulled"; +@import "spinning"; +@import "rotated-flipped"; +@import "stacked"; +@import "icons"; diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/animation.css b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/animation.css new file mode 100644 index 0000000000..ac5a9562fb --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/animation.css @@ -0,0 +1,85 @@ +/* + Animation example, for spinners +*/ +.animate-spin { + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + -webkit-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; + display: inline-block; +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-o-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello-codes.css b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello-codes.css new file mode 100644 index 0000000000..037e7a9fae --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello-codes.css @@ -0,0 +1,17 @@ + +.icon-mail-1:before { content: '\e807'; } /* '' */ +.icon-up-circle:before { content: '\e80c'; } /* '' */ +.icon-down-circle-1:before { content: '\e80d'; } /* '' */ +.icon-left-circle-1:before { content: '\e80e'; } /* '' */ +.icon-right-circle-1:before { content: '\e80f'; } /* '' */ +.icon-up-circle-1:before { content: '\e810'; } /* '' */ +.icon-mail-2:before { content: '\e805'; } /* '' */ +.icon-mail:before { content: '\e806'; } /* '' */ +.icon-plus:before { content: '\e808'; } /* '' */ +.icon-left-open:before { content: '\e801'; } /* '' */ +.icon-right-open:before { content: '\e802'; } /* '' */ +.icon-up-open:before { content: '\e803'; } /* '' */ +.icon-down-circle:before { content: '\e809'; } /* '' */ +.icon-left-circle:before { content: '\e80a'; } /* '' */ +.icon-right-circle:before { content: '\e80b'; } /* '' */ +.icon-down-open:before { content: '\e800'; } /* '' */ \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello-embedded.css b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello-embedded.css new file mode 100644 index 0000000000..b72812a4f4 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello-embedded.css @@ -0,0 +1,70 @@ +@font-face { + font-family: 'fontello'; + src: url('../font/fontello.eot?74200426'); + src: url('../font/fontello.eot?74200426#iefix') format('embedded-opentype'), + url('../font/fontello.svg?74200426#fontello') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'fontello'; + src: url('data:application/octet-stream;base64,d09GRgABAAAAAA2AAA4AAAAAF0QAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWPilJPWNtYXAAAAGIAAAAPQAAAVLoGencY3Z0IAAAAcgAAAAUAAAAHAbX/wRmcGdtAAAB3AAABPkAAAmRigp4O2dhc3AAAAbYAAAACAAAAAgAAAAQZ2x5ZgAABuAAAAOQAAAF/Ad9QUNoZWFkAAAKcAAAADQAAAA2AZAy5GhoZWEAAAqkAAAAHQAAACQHlgNkaG10eAAACsQAAAAfAAAARD2GAABsb2NhAAAK5AAAACQAAAAkCjQLtm1heHAAAAsIAAAAIAAAACAA2wnBbmFtZQAACygAAAF3AAACzcydGhxwb3N0AAAMoAAAAIUAAADr+JuT5nByZXAAAA0oAAAAVgAAAFaSoZr/eJxjYGSexziBgZWBg6mKaQ8DA0MPhGZ8wGDIyMTAwMTAysyAFQSkuaYwOLxgeCHAHPQ/iyGKOYhhOlCYESQHAPYBC+R4nGNgYGBmgGAZBkYGEPAB8hjBfBYGAyDNAYRMIIkXzC8E/v8HsxhesIJYEowSDFBdYMDIxjDiAQDhZgjDAAAAeJxjYEADRgxGzEH/M0EYABHKA994nJ1V2XbTVhSVPGRwEjpkoKAO19w4UOvKhCkYMGkqxXYhHRwIrQQdpAx05J3HPutrjkK7Vh/5tO59PSS0dK22LJbPvkdbZ9g650YcIyp9Gohr1KGSlwOprD2WSvdJXNd1L4+VDAZxXbYST0mbqJ0kSmrd7FAu8VjrKlknWCfj5SBWT1WeZ6AM4hQeZUlEG0QbqZcmSeKJ4yeJFmcQHyVJICWjEKfSyFBCNRrEUtWhTOnQq9cTcdNAykajHnVYVPdDxSfHNafUrANGKlc5whXr1Ua+G6cDL3uQxDrBs62HMR54rH6UKpCKkenIP3ZKTpSGgVRx1KFW4ugwk1/3kUwqzUCmjGJFpe6BuN39dNsWMT10Or4uSpVGqrq5ziia7dHxqIMoD9nG6aTc0Nn28OUZU1SrXXGz7UBmDVxKyWx0n0QAHSZS4+kBTjWcAqkZ9UfF2efPARLJXJSqPFUyh3oDmTM7e3Ex7W4nq7JwpJ8HMm92duOdh0OnV4d/0foXTOHMR4/iYn4+QvpQan4iTiSlRljM8qeGH3FXIEK5MYgLF8rgU4Q5dEXa2WZd47Ux9obP+UqpYT0J2uij+H4K/U4kKxxnUaP1SJzNY9d1rdxnUEu1uxc7Mq9DlSLu7wsLrjPnhGGeFgtVX5753gU0/waIZ/xA3jSFS/uWKUq0b5uiTLtoigrtElSlXTbFFO2KKaZpz5pihvYdU8zSnjMy4//L3OeR+xze8ZCb9l3kpn0PuWnfR27aD5CbViE3bR25aS8gN61GbtpVozp2BBoGaRdSFUHQNLL6YdxWm/VA1ow0fGlg8i5iyPrqREedtbXKH8V/deILB3Jpoqe7Iheb4i6v2xY+PN3uq4+aRt2w1fjGkfIwHkZ6HJrQWfnN4b/tTd0umu4yqjLoARVMCsAAZe1AAtM62wmk9Zqn+PIHYFyGeM5KQ7VUnzuGpu/leV/3sTnxvsftxi63XHd5CVnWDXJj9vDfUmSq6x/lLa1UJ0esKyePVWsYQyq8KLq+kpR7tLUbvyipsvJelNbK55OQmz2DG0Jbtu5hsCNMacolHl5TpSg91FKOskMsbynKPOCUiwtahsS4DnUPamvE6aF6GBsLIYahtL0QcEgpXRXftMp38R6ra9jo+MUV4el6chIRn+Iq+1HwVNdG/egO2rxm3TKDKVWqp/uMT7Gv2/ZRWWmkjrMXt1QH1zTrGjkV00/ka+B0bzho3QM9VHw0QSNVNcfoxihjNJY15d8EdDFWfsNo1WL7PdxPnaRVrLlLmOybE/fgtLv9Kvu1nFtG1v3XBr1t5IqfIzG/LQr8Owdit2QN1DuTgRgLyFnQGMYWJncYroNtxG32Pyan/9+GhUVyVzsau3nqw9WTUSV32fK4y012WdejNkfVThr7CI0tDzfm2OFyLLbEYEG2/sH/Me4Bd2lRAuDQyGWYiNp0oZ7q4eoeq7FtOFcSAXbNseN0AHoALkHfHLvW8wmA9dwj5y7AfXIIdsgh+JQcgs/IuQXwOTkEX5BDMCCHYJecOwAPyCF4SA7BHjkEj8jZBPiSHIKvyCGIySFIyLkN8JgcgifkEHxNDsE3Rq5OZP6WB9kA+s6im0CpnRoc2jhkRq5N2Ps8WPaBRWQfWkTqkZHrE+pTHiz1e4tI/cEiUn80cmNC/YkHS/3ZIlJ/sYjUZ8aXmSMprw6e844O/gSX6q1eAAAAAAEAAf//AA94nKWU32tbZRjHn+/7nh85yVnTk/QQEeKahZpBZLrFQwTBhZoSQUKtE6EXdlV64YobY4p34oWjjsFsYak34roIKgiTloGu/voTBptXXphsDEuKXoi/KCV94/O+sdPGyx44nDfPed7n832+53lDIL5kR3xEDjnXbeBwMSh7yKDQwCxmG8pviKGGauKkXhJxfm9eXJDPk8v5jjD5yHhw0dDpJvEqZpbNU13l4H/2aIYjeU/ogXcBsyaDS4s+rbmsfNqrydKMiNNdj/Mb+MPU/byvDSdVkyyT/6ZY5pVLcTpAD1fyB/xE3Iu5luQAMK6Los4rmtJNTKQDERQ95FhEDuWxIBfYogrR/RnyXXVebKnzXwHdi5A4pv5E7G38pN6PflMWur9rXu8e6/vB8HxK0qOVR5JDTIy5ji0F/AGigEYSxT3eYclkMUSmjLEgU4hyIY4jQHV1FdXuA0rJjvL/Ulm8ODenPjuHK5d/uXRJ3Tt6Wb1CJEyfi+IaV/HoUOWg59gWyOHq46RBdX6PKWZhYiTF/WFM19fN4Xt1XL6lqvim+w7O3D59Wl2/rZ7FF+bbrMhFmaUEFSuHWR2sumMLqTVLmibL0hUtsHxOSQT6ckeKCHNBPshFuaAUyEW11lZrmGzjZlut4rk2JtWa0ds7JTtyij1KUbbyYCoYZpucvjuIP21KVsO0ljoyhNEjGH4Kow8B5YJbcGVnYUP9urGwsIHhjQXld2rNZg0vXdiN8NvvNnVM27IfVvl/rCd12c29rCUd6+yX5WYGWDs/buomBlgd3ey+WLZmlQf6ulbThfeyappvOFd4DkYpxvNcqjwWBwmM25YQkqSgV5lziidCYpKxLEdCTniel/SSwUg65aSZzmOZ4tvOlPNRPuSp2FZLakvw8LwBsTPXbn18FjM31LZAHK/Bd3r0bat1965hr8gledCwn6hEHh+7OIRMsAapDxJPo5zWeaJOQtAJnnpBNZA+dLZFMcTsZNE+RMNGgnQzUSnK49a62oaDc7CE2lrXqJcRwxnELaXUxR6JD9qtT872Pf6Qe8/t8hMQFIcU/Icj5TjDWAaJae4Zsk7swQl2AoN8HPuHny4XwnxYwq0bcO578LXmyyz/fk91LfiYx9DOzB0tYJefNfyjlSPcuznSgubNBxDz/6Jf0Ohn9jiffpxGDXqs4JbCUpRix1+/j1650/qUfV83gT77S2P730pwc/54nGNgZGBgAGLjDOXd8fw2Xxm4mV8ARRjOu0w+BKGjmxgY/mcyv2AOAnI5GJhAogA2igsbeJxjYGRgYA76n8UQxfyCAQiAJCMDKhAEAGaDBAIAAAB4nGN+wcDADMRMHRAMYjOXQekFUPwCDS9AxQDDpQy4AAAAAAAAGAAyAEoAYgCaANYBAAEuAWQBmgHQAgQCQgKCAsIC/gABAAAAEQATAAQAAAAAAAIADgAbAG4AAABJCZEAAAAAeJx1kMtqwkAUhv/x0otCW1rotrMqSmm8YDeCIFh0026kuC0xxiQSMzIZBV+j79CH6Uv0WfqbjKUoTZjMd745c+ZkAFzjGwL588SRs8AZo5wLOEXPcpH+2XKJ/GK5jCreLJ/Qv1uu4AGB5Spu8MEKonTOaIFPywJX4tJyARfiznKR/tFyidyzXMateLV8Qu9ZrmAiUstV3IuvgVptdRSERtYGddlutjpyupWKKkrcWLprEyqdyr6cq8T4cawcTy33PPaDdezqfbifJ75OI5XIltPcq5Gf+No1/mxXPd0EbWPmcq7VUg5thlxptfA944TGrLqNxt/zMIDCCltoRLyqEAYSNdo65zaaaKFDmjJDMjPPipDARUzjYs0dYbaSMu5zzBkltD4zYrIDj9/lkR+TAu6PWUUfrR7GE9LujCjzkn057O4wa0RKskw3s7Pf3lNseFqb1nDXrkuddSUxPKgheR+7tQWNR+9kt2Jou2jw/ef/fgDdX4RLAHicbYzBDoIwEER3sIJtKcqH7KH+kcGqJBUalPj7ajcxPTiXeZvsG6pIYuh/eiJU2EBhixoNdtAwsGjh0GGPA3p9nl8TzylMOobLM5NZxutNsFlT7vp+GiMf1beEvUpxfdisD+MyxGDzgHArE3Loz4iQK97Zu0Jg35UKe/uT2BO9AZhLOeMAAABLuADIUlixAQGOWbkIAAgAYyCwASNEsAMjcLIEKAlFUkSyCgIHKrEGAUSxJAGIUViwQIhYsQYDRLEmAYhRWLgEAIhYsQYBRFlZWVm4Af+FsASNsQUARAAA') format('woff'), + url('data:application/octet-stream;base64,AAEAAAAOAIAAAwBgT1MvMj4pST0AAADsAAAAVmNtYXDoGencAAABRAAAAVJjdnQgBtf/BAAADTwAAAAcZnBnbYoKeDsAAA1YAAAJkWdhc3AAAAAQAAANNAAAAAhnbHlmB31BQwAAApgAAAX8aGVhZAGQMuQAAAiUAAAANmhoZWEHlgNkAAAIzAAAACRobXR4PYYAAAAACPAAAABEbG9jYQo0C7YAAAk0AAAAJG1heHAA2wnBAAAJWAAAACBuYW1lzJ0aHAAACXgAAALNcG9zdPibk+YAAAxIAAAA63ByZXCSoZr/AAAW7AAAAFYAAQOeAZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6ADoEANS/2oAWgNSAJcAAAABAAAAAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEwAAwABAAAAHAAEADAAAAAIAAgAAgAAAADoA+gQ//8AAAAA6ADoBf//AAAYARgAAAEAAAAAAAAAAAAAAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAPoAqIABgAGswUBASgrETcJARcBJ5QBYAFglP4MlAIOlP6hAV+U/gyUAAABAAD/agKIA1IABwAGswYCASgrETcBFwkBBwGUAWCU/qEBX5T+oAFelQFflP6g/qCUAWAAAQAA/2oCiANSAAYABrMGAwEoKxUJATcBFwEBYP6glAFglP4MAgFgAWCU/qGV/gwAAQAAAAAD6AKiAAYABrMEAgEoKzUBNwEHCQEBYJQB9JT+oP6grgFglP4MlAFf/qEABAAAAAADdgKVAAQABwAKAA0AJkAjDQwLCgkIBwQDAAoAAQFCAAEAAAFNAAEBAFEAAAEARRMRAhErCQEhARcBIQE3JREhEQUCRAEC/OsBA4f+hAL4/oS6AQH8igEDATL+9QEIfwHl/pY18v4EAfzzAAQAAP/jA+gC2QAEAAcADAAPAC9ALA8ODQwLCAcGBQMCAQwAAQFCAAEAAAFNAAEBAFECAQABAEUAAAoJAAQABAMPKxUBFzcBJREXJzUhFQE/AREBRLCwAUT8GP7+A+j+DPb+HQFWZGT+qnIBnpPsjY3+4zGT/mIAAAIAAAAAA48CrQAEAAkAIkAfCQYFBAEABgEAAUIAAAEBAE0AAAABUQABAAFFFBICESsBJTUhFQElESERAdP+PwN9/kQBvPyDAW7SbW3+s9L+SwG2AAEAAP+fA48DHQALACtAKAAEAwEETQYFAgMCAQABAwBZAAQEAVEAAQQBRQAAAAsACxERERERBxQrARUhESMRITUhETMRA4/+sd/+sQFP3wHO3/6wAVDfAU/+sQAAAgAA/2kD6ANRAAwAEgAdQBoSERAPDg0GAAEBQgABAQpDAAAACwBEFRMCESsBFA4BIC4BED4BIB4BATcnBycHA+iG5v7w5oaG5gEQ5ob+DOhHoaFHAV2I5oaG5gEQ5oaG5v6+6UehoUcAAAAAAgAA/2kD6ANRAAwAEgAdQBoSERAPDg0GAAEBQgABAQpDAAAACwBEFRMCESsBFA4BIC4BED4BIB4BATcnNycHA+iG5v7w5oaG5gEQ5ob+O0ehoUfpAV2I5oaG5gEQ5oaG5v6QR6GhR+gAAAAAAgAA/2kD6ANRAAwAEgAdQBoSERAPDg0GAAEBQgABAQpDAAAACwBEFRMCESsBFA4BIC4BED4BIB4BATcnBxcHA+iG5v7w5oaG5gEQ5ob93enpR6GhAV2I5oaG5gEQ5oaG5v6Q6OhHoaEAAAAAAgAA/2kD6ANRAAwAEgAdQBoSERAPDg0GAAEBQgABAQpDAAAACwBEFRMCESsBFA4BIC4BED4BIB4BBTcnBxc3A+iG5v7w5oaG5gEQ5ob+rUfo6EehAV2I5oaG5gEQ5oaG5v5H6elHoQACAAD/ngOPAyAACAAPADNAMAoBAAIBQgUEAgIDAAMCAGgAAABpAAEDAwFPAAEBA1EAAwEDRQkJCQ8JDxEUExIGEysBFAAEABIABAAFFzcjNSMVA4/++v6Q/vgCAQQBdAEC/WTf3qVwAV64/voCAQoBbAEMBv8Avd7e4eEAAgAA/58DkAMfAAgADwA4QDUJAQMBCgECAwsBAAIDQgABAAMCAQNZAAIAAAJNAAICAFMEAQACAEcBAA8ODQwFBAAIAQgFDysFIgAQAAQAEgADBxc1MzUjAdG5/voBBgFyAQQC/vi53t7h4WEBCAFuAQoE/v7+iv8AApvf3qZwAAACAAD/nQOPAyEACAAPADhANQsBAgAKAQMCCQEBAwNCBAEAAAIDAAJZAAMBAQNNAAMDAVMAAQMBRwEADw4NDAUEAAgBCAUPKwEyABAABAASABM3JxUjFTMB0bgBBv76/pD++AIBBLve3uHhAx3++v6O/vwEAQwBagEO/V7g3qZwAAIAAP+dA48DHQAIAA8AMUAuCgECAAFCAAACAGoFBAICAwJqAAMBAQNNAAMDAVQAAQMBSAkJCQ8JDxEUExIGEysTNAAgABAABAAlJwczFTM1EgEEAXMBBv76/pD++AKf4N6ncAFeuQEG/vr+jv78BAEMt97e4eEAAAEAAAABAAAzaCO7Xw889QALA+gAAAAAz0STwgAAAADPRFuCAAD/aQPoA1IAAAAIAAIAAAAAAAAAAQAAA1L/agBaA+gAAAAAA+gAAQAAAAAAAAAAAAAAAAAAABED6AAAA+gAAAKIAAACiAAAA+gAAAN2AAAD6AAAA6AAAAOgAAAD6AAAA+gAAAPoAAAD6AAAA6AAAAOgAAADoAAAA6AAAAAAAAAAGAAyAEoAYgCaANYBAAEuAWQBmgHQAgQCQgKCAsIC/gABAAAAEQATAAQAAAAAAAIADgAbAG4AAABJCZEAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEACAA1AAEAAAAAAAIABwA9AAEAAAAAAAMACABEAAEAAAAAAAQACABMAAEAAAAAAAUACwBUAAEAAAAAAAYACABfAAEAAAAAAAoAKwBnAAEAAAAAAAsAEwCSAAMAAQQJAAAAagClAAMAAQQJAAEAEAEPAAMAAQQJAAIADgEfAAMAAQQJAAMAEAEtAAMAAQQJAAQAEAE9AAMAAQQJAAUAFgFNAAMAAQQJAAYAEAFjAAMAAQQJAAoAVgFzAAMAAQQJAAsAJgHJQ29weXJpZ2h0IChDKSAyMDE0IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21mb250ZWxsb1JlZ3VsYXJmb250ZWxsb2ZvbnRlbGxvVmVyc2lvbiAxLjBmb250ZWxsb0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABDACkAIAAyADAAMQA0ACAAYgB5ACAAbwByAGkAZwBpAG4AYQBsACAAYQB1AHQAaABvAHIAcwAgAEAAIABmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQBmAG8AbgB0AGUAbABsAG8AUgBlAGcAdQBsAGEAcgBmAG8AbgB0AGUAbABsAG8AZgBvAG4AdABlAGwAbABvAFYAZQByAHMAaQBvAG4AIAAxAC4AMABmAG8AbgB0AGUAbABsAG8ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREJZG93bi1vcGVuCWxlZnQtb3BlbgpyaWdodC1vcGVuB3VwLW9wZW4GbWFpbC0yBG1haWwGbWFpbC0xBHBsdXMLZG93bi1jaXJjbGULbGVmdC1jaXJjbGUMcmlnaHQtY2lyY2xlCXVwLWNpcmNsZQ1kb3duLWNpcmNsZS0xDWxlZnQtY2lyY2xlLTEOcmlnaHQtY2lyY2xlLTELdXAtY2lyY2xlLTEAAAAAAQAB//8ADwAAAAAAAAAAAAAAAAAAAAAAMgAyA1L/aQNS/2mwACywIGBmLbABLCBkILDAULAEJlqwBEVbWCEjIRuKWCCwUFBYIbBAWRsgsDhQWCGwOFlZILAKRWFksChQWCGwCkUgsDBQWCGwMFkbILDAUFggZiCKimEgsApQWGAbILAgUFghsApgGyCwNlBYIbA2YBtgWVlZG7AAK1lZI7AAUFhlWVktsAIsIEUgsAQlYWQgsAVDUFiwBSNCsAYjQhshIVmwAWAtsAMsIyEjISBksQViQiCwBiNCsgoAAiohILAGQyCKIIqwACuxMAUlilFYYFAbYVJZWCNZISCwQFNYsAArGyGwQFkjsABQWGVZLbAELLAHQyuyAAIAQ2BCLbAFLLAHI0IjILAAI0JhsIBisAFgsAQqLbAGLCAgRSCwAkVjsAFFYmBEsAFgLbAHLCAgRSCwACsjsQIEJWAgRYojYSBkILAgUFghsAAbsDBQWLAgG7BAWVkjsABQWGVZsAMlI2FERLABYC2wCCyxBQVFsAFhRC2wCSywAWAgILAJQ0qwAFBYILAJI0JZsApDSrAAUlggsAojQlktsAosILgEAGIguAQAY4ojYbALQ2AgimAgsAsjQiMtsAssS1RYsQcBRFkksA1lI3gtsAwsS1FYS1NYsQcBRFkbIVkksBNlI3gtsA0ssQAMQ1VYsQwMQ7ABYUKwCitZsABDsAIlQrEJAiVCsQoCJUKwARYjILADJVBYsQEAQ2CwBCVCioogiiNhsAkqISOwAWEgiiNhsAkqIRuxAQBDYLACJUKwAiVhsAkqIVmwCUNHsApDR2CwgGIgsAJFY7ABRWJgsQAAEyNEsAFDsAA+sgEBAUNgQi2wDiyxAAVFVFgAsAwjQiBgsAFhtQ0NAQALAEJCimCxDQUrsG0rGyJZLbAPLLEADistsBAssQEOKy2wESyxAg4rLbASLLEDDistsBMssQQOKy2wFCyxBQ4rLbAVLLEGDistsBYssQcOKy2wFyyxCA4rLbAYLLEJDistsBkssAgrsQAFRVRYALAMI0IgYLABYbUNDQEACwBCQopgsQ0FK7BtKxsiWS2wGiyxABkrLbAbLLEBGSstsBwssQIZKy2wHSyxAxkrLbAeLLEEGSstsB8ssQUZKy2wICyxBhkrLbAhLLEHGSstsCIssQgZKy2wIyyxCRkrLbAkLCA8sAFgLbAlLCBgsA1gIEMjsAFgQ7ACJWGwAWCwJCohLbAmLLAlK7AlKi2wJywgIEcgILACRWOwAUViYCNhOCMgilVYIEcgILACRWOwAUViYCNhOBshWS2wKCyxAAVFVFgAsAEWsCcqsAEVMBsiWS2wKSywCCuxAAVFVFgAsAEWsCcqsAEVMBsiWS2wKiwgNbABYC2wKywAsANFY7ABRWKwACuwAkVjsAFFYrAAK7AAFrQAAAAAAEQ+IzixKgEVKi2wLCwgPCBHILACRWOwAUViYLAAQ2E4LbAtLC4XPC2wLiwgPCBHILACRWOwAUViYLAAQ2GwAUNjOC2wLyyxAgAWJSAuIEewACNCsAIlSYqKRyNHI2EgWGIbIVmwASNCsi4BARUUKi2wMCywABawBCWwBCVHI0cjYbAGRStlii4jICA8ijgtsDEssAAWsAQlsAQlIC5HI0cjYSCwBCNCsAZFKyCwYFBYILBAUVizAiADIBuzAiYDGllCQiMgsAhDIIojRyNHI2EjRmCwBEOwgGJgILAAKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwgGJhIyAgsAQmI0ZhOBsjsAhDRrACJbAIQ0cjRyNhYCCwBEOwgGJgIyCwACsjsARDYLAAK7AFJWGwBSWwgGKwBCZhILAEJWBkI7ADJWBkUFghGyMhWSMgILAEJiNGYThZLbAyLLAAFiAgILAFJiAuRyNHI2EjPDgtsDMssAAWILAII0IgICBGI0ewACsjYTgtsDQssAAWsAMlsAIlRyNHI2GwAFRYLiA8IyEbsAIlsAIlRyNHI2EgsAUlsAQlRyNHI2GwBiWwBSVJsAIlYbABRWMjIFhiGyFZY7ABRWJgIy4jICA8ijgjIVktsDUssAAWILAIQyAuRyNHI2EgYLAgYGawgGIjICA8ijgtsDYsIyAuRrACJUZSWCA8WS6xJgEUKy2wNywjIC5GsAIlRlBYIDxZLrEmARQrLbA4LCMgLkawAiVGUlggPFkjIC5GsAIlRlBYIDxZLrEmARQrLbA5LLAwKyMgLkawAiVGUlggPFkusSYBFCstsDossDEriiAgPLAEI0KKOCMgLkawAiVGUlggPFkusSYBFCuwBEMusCYrLbA7LLAAFrAEJbAEJiAuRyNHI2GwBkUrIyA8IC4jOLEmARQrLbA8LLEIBCVCsAAWsAQlsAQlIC5HI0cjYSCwBCNCsAZFKyCwYFBYILBAUVizAiADIBuzAiYDGllCQiMgR7AEQ7CAYmAgsAArIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbCAYmGwAiVGYTgjIDwjOBshICBGI0ewACsjYTghWbEmARQrLbA9LLAwKy6xJgEUKy2wPiywMSshIyAgPLAEI0IjOLEmARQrsARDLrAmKy2wPyywABUgR7AAI0KyAAEBFRQTLrAsKi2wQCywABUgR7AAI0KyAAEBFRQTLrAsKi2wQSyxAAEUE7AtKi2wQiywLyotsEMssAAWRSMgLiBGiiNhOLEmARQrLbBELLAII0KwQystsEUssgAAPCstsEYssgABPCstsEcssgEAPCstsEgssgEBPCstsEkssgAAPSstsEossgABPSstsEsssgEAPSstsEwssgEBPSstsE0ssgAAOSstsE4ssgABOSstsE8ssgEAOSstsFAssgEBOSstsFEssgAAOystsFIssgABOystsFMssgEAOystsFQssgEBOystsFUssgAAPistsFYssgABPistsFcssgEAPistsFgssgEBPistsFkssgAAOistsFossgABOistsFsssgEAOistsFwssgEBOistsF0ssDIrLrEmARQrLbBeLLAyK7A2Ky2wXyywMiuwNystsGAssAAWsDIrsDgrLbBhLLAzKy6xJgEUKy2wYiywMyuwNistsGMssDMrsDcrLbBkLLAzK7A4Ky2wZSywNCsusSYBFCstsGYssDQrsDYrLbBnLLA0K7A3Ky2waCywNCuwOCstsGkssDUrLrEmARQrLbBqLLA1K7A2Ky2wayywNSuwNystsGwssDUrsDgrLbBtLCuwCGWwAyRQeLABFTAtAAAAS7gAyFJYsQEBjlm5CAAIAGMgsAEjRLADI3CyBCgJRVJEsgoCByqxBgFEsSQBiFFYsECIWLEGA0SxJgGIUVi4BACIWLEGAURZWVlZuAH/hbAEjbEFAEQAAA==') format('truetype'); +} +/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ +/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: 'fontello'; + src: url('../font/fontello.svg?74200426#fontello') format('svg'); + } +} +*/ + + [class^="icon-"]:before, [class*=" icon-"]:before { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + speak: none; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} +.icon-mail-1:before { content: '\e807'; } /* '' */ +.icon-up-circle:before { content: '\e80c'; } /* '' */ +.icon-down-circle-1:before { content: '\e80d'; } /* '' */ +.icon-left-circle-1:before { content: '\e80e'; } /* '' */ +.icon-right-circle-1:before { content: '\e80f'; } /* '' */ +.icon-up-circle-1:before { content: '\e810'; } /* '' */ +.icon-mail-2:before { content: '\e805'; } /* '' */ +.icon-mail:before { content: '\e806'; } /* '' */ +.icon-plus:before { content: '\e808'; } /* '' */ +.icon-left-open:before { content: '\e801'; } /* '' */ +.icon-right-open:before { content: '\e802'; } /* '' */ +.icon-up-open:before { content: '\e803'; } /* '' */ +.icon-down-circle:before { content: '\e809'; } /* '' */ +.icon-left-circle:before { content: '\e80a'; } /* '' */ +.icon-right-circle:before { content: '\e80b'; } /* '' */ +.icon-down-open:before { content: '\e800'; } /* '' */ \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello-ie7-codes.css b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello-ie7-codes.css new file mode 100644 index 0000000000..71928eadfa --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello-ie7-codes.css @@ -0,0 +1,17 @@ + +.icon-mail-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-up-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-down-circle-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-left-circle-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-right-circle-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-up-circle-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-mail-2 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-left-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-right-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-up-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-down-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-left-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-right-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-down-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello-ie7.css b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello-ie7.css new file mode 100644 index 0000000000..b59bb24464 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello-ie7.css @@ -0,0 +1,28 @@ +[class^="icon-"], [class*=" icon-"] { + font-family: 'fontello'; + font-style: normal; + font-weight: normal; + + /* fix buttons height */ + line-height: 1em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ +} + +.icon-mail-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-up-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-down-circle-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-left-circle-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-right-circle-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-up-circle-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-mail-2 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-left-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-right-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-up-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-down-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-left-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-right-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-down-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello.css b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello.css new file mode 100644 index 0000000000..9477514c1e --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/css/fontello.css @@ -0,0 +1,68 @@ +@font-face { + font-family: 'fontello'; + src: url('../font/fontello.eot?13439518'); + src: url('../font/fontello.eot?13439518#iefix') format('embedded-opentype'), + url('../font/fontello.woff?13439518') format('woff'), + url('../font/fontello.ttf?13439518') format('truetype'), + url('../font/fontello.svg?13439518#fontello') format('svg'); + font-weight: normal; + font-style: normal; +} +/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ +/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: 'fontello'; + src: url('../font/fontello.svg?13439518#fontello') format('svg'); + } +} +*/ + + [class^="icon-"]:before, [class*=" icon-"]:before { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + speak: none; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} + +.icon-mail-1:before { content: '\e807'; } /* '' */ +.icon-up-circle:before { content: '\e80c'; } /* '' */ +.icon-down-circle-1:before { content: '\e80d'; } /* '' */ +.icon-left-circle-1:before { content: '\e80e'; } /* '' */ +.icon-right-circle-1:before { content: '\e80f'; } /* '' */ +.icon-up-circle-1:before { content: '\e810'; } /* '' */ +.icon-mail-2:before { content: '\e805'; } /* '' */ +.icon-mail:before { content: '\e806'; } /* '' */ +.icon-plus:before { content: '\e808'; } /* '' */ +.icon-left-open:before { content: '\e801'; } /* '' */ +.icon-right-open:before { content: '\e802'; } /* '' */ +.icon-up-open:before { content: '\e803'; } /* '' */ +.icon-down-circle:before { content: '\e809'; } /* '' */ +.icon-left-circle:before { content: '\e80a'; } /* '' */ +.icon-right-circle:before { content: '\e80b'; } /* '' */ +.icon-down-open:before { content: '\e800'; } /* '' */ \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/font/fontello.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/font/fontello.eot new file mode 100644 index 0000000000..26c486d77f Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/font/fontello.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/font/fontello.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/font/fontello.svg new file mode 100644 index 0000000000..81f14ea2ae --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/font/fontello.svg @@ -0,0 +1,27 @@ + + + +Copyright (C) 2014 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/font/fontello.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/font/fontello.ttf new file mode 100644 index 0000000000..aa588a4c83 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/font/fontello.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/font/fontello.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/font/fontello.woff new file mode 100644 index 0000000000..73c14843fd Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fontello/font/fontello.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts.css b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts.css new file mode 100644 index 0000000000..874c4f0fda --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts.css @@ -0,0 +1,157 @@ +/* Generated by Font Squirrel (http://www.fontsquirrel.com) */ + +/* + * Open Sans +================================================================================ */ +@font-face { + font-family: 'opensans-regular'; + src: url('fonts/opensans/OpenSans-Regular-webfont.eot'); + src: url('fonts/opensans/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/opensans/OpenSans-Regular-webfont.woff') format('woff'), + url('fonts/opensans/OpenSans-Regular-webfont.ttf') format('truetype'), + url('fonts/opensans/OpenSans-Regular-webfont.svg#open_sansregular') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'opensans-italic'; + src: url('fonts/opensans/OpenSans-Italic-webfont.eot'); + src: url('fonts/opensans/OpenSans-Italic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/opensans/OpenSans-Italic-webfont.woff') format('woff'), + url('fonts/opensans/OpenSans-Italic-webfont.ttf') format('truetype'), + url('fonts/opensans/OpenSans-Italic-webfont.svg#open_sansitalic') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'opensans-light'; + src: url('fonts/opensans/OpenSans-Light-webfont.eot'); + src: url('fonts/opensans/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/opensans/OpenSans-Light-webfont.woff') format('woff'), + url('fonts/opensans/OpenSans-Light-webfont.ttf') format('truetype'), + url('fonts/opensans/OpenSans-Light-webfont.svg#open_sanslight') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'opensans-light-italic'; + src: url('fonts/opensans/OpenSans-LightItalic-webfont.eot'); + src: url('fonts/opensans/OpenSans-LightItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/opensans/OpenSans-LightItalic-webfont.woff') format('woff'), + url('fonts/opensans/OpenSans-LightItalic-webfont.ttf') format('truetype'), + url('fonts/opensans/OpenSans-LightItalic-webfont.svg#open_sanslight_italic') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'opensans-semibold'; + src: url('fonts/opensans/OpenSans-Semibold-webfont.eot'); + src: url('fonts/opensans/OpenSans-Semibold-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/opensans/OpenSans-Semibold-webfont.woff') format('woff'), + url('fonts/opensans/OpenSans-Semibold-webfont.ttf') format('truetype'), + url('fonts/opensans/OpenSans-Semibold-webfont.svg#open_sanssemibold') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'opensans-semibold-italic'; + src: url('fonts/opensans/OpenSans-SemiboldItalic-webfont.eot'); + src: url('fonts/opensans/OpenSans-SemiboldItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/opensans/OpenSans-SemiboldItalic-webfont.woff') format('woff'), + url('fonts/opensans/OpenSans-SemiboldItalic-webfont.ttf') format('truetype'), + url('fonts/opensans/OpenSans-SemiboldItalic-webfont.svg#open_sanssemibold_italic') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'opensans-bold'; + src: url('fonts/opensans/OpenSans-Bold-webfont.eot'); + src: url('fonts/opensans/OpenSans-Bold-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/opensans/OpenSans-Bold-webfont.woff') format('woff'), + url('fonts/opensans/OpenSans-Bold-webfont.ttf') format('truetype'), + url('fonts/opensans/OpenSans-Bold-webfont.svg#open_sansbold') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'opensans-bold-italic'; + src: url('fonts/opensans/OpenSans-BoldItalic-webfont.eot'); + src: url('fonts/opensans/OpenSans-BoldItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/opensans/OpenSans-BoldItalic-webfont.woff') format('woff'), + url('fonts/opensans/OpenSans-BoldItalic-webfont.ttf') format('truetype'), + url('fonts/opensans/OpenSans-BoldItalic-webfont.svg#open_sansbold_italic') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'opensans-extrabold'; + src: url('fonts/opensans/OpenSans-ExtraBold-webfont.eot'); + src: url('fonts/opensans/OpenSans-ExtraBold-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/opensans/OpenSans-ExtraBold-webfont.woff') format('woff'), + url('fonts/opensans/OpenSans-ExtraBold-webfont.ttf') format('truetype'), + url('fonts/opensans/OpenSans-ExtraBold-webfont.svg#open_sansextrabold') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'opensans-extrabold-italic'; + src: url('fonts/opensans/OpenSans-ExtraBoldItalic-webfont.eot'); + src: url('fonts/opensans/OpenSans-ExtraBoldItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/opensans/OpenSans-ExtraBoldItalic-webfont.woff') format('woff'), + url('fonts/opensans/OpenSans-ExtraBoldItalic-webfont.ttf') format('truetype'), + url('fonts/opensans/OpenSans-ExtraBoldItalic-webfont.svg#open_sansextrabold_italic') format('svg'); + font-weight: normal; + font-style: normal; +} + +/* + * Libre Baskerville +================================================================================ */ +@font-face { + font-family: 'librebaskerville-bold'; + src: url('fonts/librebaskerville/librebaskerville-bold-webfont.eot'); + src: url('fonts/librebaskerville/librebaskerville-bold-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/librebaskerville/librebaskerville-bold-webfont.woff') format('woff'), + url('fonts/librebaskerville/librebaskerville-bold-webfont.ttf') format('truetype'), + url('fonts/librebaskerville/librebaskerville-bold-webfont.svg#libre_baskervillebold') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'librebaskerville-italic'; + src: url('fonts/librebaskerville/librebaskerville-italic-webfont.eot'); + src: url('fonts/librebaskerville/librebaskerville-italic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/librebaskerville/librebaskerville-italic-webfont.woff') format('woff'), + url('fonts/librebaskerville/librebaskerville-italic-webfont.ttf') format('truetype'), + url('fonts/librebaskerville/librebaskerville-italic-webfont.svg#libre_baskervilleitalic') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'librebaskerville-regular'; + src: url('fonts/librebaskerville/librebaskerville-regular-webfont.eot'); + src: url('fonts/librebaskerville/librebaskerville-regular-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/librebaskerville/librebaskerville-regular-webfont.woff') format('woff'), + url('fonts/librebaskerville/librebaskerville-regular-webfont.ttf') format('truetype'), + url('fonts/librebaskerville/librebaskerville-regular-webfont.svg#libre_baskervilleregular') format('svg'); + font-weight: normal; + font-style: normal; +} + + +/* + * FIXED for Font-Face Chrome Rendering +================================================================================ */ +@media screen and (-webkit-min-device-pixel-ratio:0) { + + @font-face { + font-family: 'opensans-semibold'; + src: url('fonts/opensans/OpenSans-Semibold-webfont.svg#open_sanssemibold') format('svg'); + } + + @font-face { + font-family: 'opensans-bold'; + src: url('fonts/opensans/OpenSans-Bold-webfont.svg#open_sansbold') format('svg'); + } + +} \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-bold-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-bold-webfont.eot new file mode 100644 index 0000000000..9416754bac Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-bold-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-bold-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-bold-webfont.svg new file mode 100644 index 0000000000..760857c6cc --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-bold-webfont.svg @@ -0,0 +1,2003 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-bold-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-bold-webfont.ttf new file mode 100644 index 0000000000..630f4f1454 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-bold-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-bold-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-bold-webfont.woff new file mode 100644 index 0000000000..695930d064 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-bold-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-italic-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-italic-webfont.eot new file mode 100644 index 0000000000..d16a0c2098 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-italic-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-italic-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-italic-webfont.svg new file mode 100644 index 0000000000..2e419caf39 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-italic-webfont.svg @@ -0,0 +1,4548 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-italic-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-italic-webfont.ttf new file mode 100644 index 0000000000..7895ef6d7c Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-italic-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-italic-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-italic-webfont.woff new file mode 100644 index 0000000000..37eb3e28bf Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-italic-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-regular-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-regular-webfont.eot new file mode 100644 index 0000000000..d40cd34c86 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-regular-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-regular-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-regular-webfont.svg new file mode 100644 index 0000000000..9e79ca40b5 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-regular-webfont.svg @@ -0,0 +1,1862 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-regular-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-regular-webfont.ttf new file mode 100644 index 0000000000..f0c55ca65e Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-regular-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-regular-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-regular-webfont.woff new file mode 100644 index 0000000000..b8b98514c5 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/librebaskerville/librebaskerville-regular-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Bold-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Bold-webfont.eot new file mode 100644 index 0000000000..5d20d91633 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Bold-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Bold-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Bold-webfont.svg new file mode 100644 index 0000000000..3ed7be4bc5 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Bold-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Bold-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Bold-webfont.ttf new file mode 100644 index 0000000000..2109c958e3 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Bold-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Bold-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Bold-webfont.woff new file mode 100644 index 0000000000..1205787b0e Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Bold-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-BoldItalic-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-BoldItalic-webfont.eot new file mode 100644 index 0000000000..1f639a15ff Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-BoldItalic-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-BoldItalic-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-BoldItalic-webfont.svg new file mode 100644 index 0000000000..6a2607b9da --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-BoldItalic-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-BoldItalic-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-BoldItalic-webfont.ttf new file mode 100644 index 0000000000..242d6b25c3 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-BoldItalic-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-BoldItalic-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-BoldItalic-webfont.woff new file mode 100644 index 0000000000..ed760c0628 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-BoldItalic-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBold-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBold-webfont.eot new file mode 100644 index 0000000000..1e29ad5954 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBold-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBold-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBold-webfont.svg new file mode 100644 index 0000000000..27800505a5 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBold-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBold-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBold-webfont.ttf new file mode 100644 index 0000000000..6b9118ee35 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBold-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBold-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBold-webfont.woff new file mode 100644 index 0000000000..a7b99d2552 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBold-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.eot new file mode 100644 index 0000000000..77184af422 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.svg new file mode 100644 index 0000000000..8f080c1e5e --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.ttf new file mode 100644 index 0000000000..26a07e9392 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.woff new file mode 100644 index 0000000000..45395d1bbe Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Italic-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Italic-webfont.eot new file mode 100644 index 0000000000..0c8a0ae06e Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Italic-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Italic-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Italic-webfont.svg new file mode 100644 index 0000000000..e1075dcc24 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Italic-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Italic-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Italic-webfont.ttf new file mode 100644 index 0000000000..12d25d9a73 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Italic-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Italic-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Italic-webfont.woff new file mode 100644 index 0000000000..ff652e6435 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Italic-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Light-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Light-webfont.eot new file mode 100644 index 0000000000..14868406aa Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Light-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Light-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Light-webfont.svg new file mode 100644 index 0000000000..11a472ca8a --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Light-webfont.svg @@ -0,0 +1,1831 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Light-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Light-webfont.ttf new file mode 100644 index 0000000000..63af664cde Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Light-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Light-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Light-webfont.woff new file mode 100644 index 0000000000..e786074813 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Light-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-LightItalic-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-LightItalic-webfont.eot new file mode 100644 index 0000000000..8f445929ff Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-LightItalic-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-LightItalic-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-LightItalic-webfont.svg new file mode 100644 index 0000000000..431d7e3546 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-LightItalic-webfont.svg @@ -0,0 +1,1835 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-LightItalic-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-LightItalic-webfont.ttf new file mode 100644 index 0000000000..01dda2858a Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-LightItalic-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-LightItalic-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-LightItalic-webfont.woff new file mode 100644 index 0000000000..43e8b9e6cc Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-LightItalic-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Regular-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Regular-webfont.eot new file mode 100644 index 0000000000..6bbc3cf58c Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Regular-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Regular-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Regular-webfont.svg new file mode 100644 index 0000000000..25a3952340 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Regular-webfont.svg @@ -0,0 +1,1831 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Regular-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Regular-webfont.ttf new file mode 100644 index 0000000000..c537f8382a Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Regular-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Regular-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Regular-webfont.woff new file mode 100644 index 0000000000..e231183dce Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Regular-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Semibold-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Semibold-webfont.eot new file mode 100644 index 0000000000..d8375dd0ab Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Semibold-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Semibold-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Semibold-webfont.svg new file mode 100644 index 0000000000..eec4db8bd7 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Semibold-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Semibold-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Semibold-webfont.ttf new file mode 100644 index 0000000000..b3290843a7 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Semibold-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Semibold-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Semibold-webfont.woff new file mode 100644 index 0000000000..28d6adee03 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-Semibold-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.eot b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.eot new file mode 100644 index 0000000000..0ab1db22e6 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.eot differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.svg b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.svg new file mode 100644 index 0000000000..7166ec1b90 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.ttf b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.ttf new file mode 100644 index 0000000000..d2d6318f66 Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.ttf differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.woff b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.woff new file mode 100644 index 0000000000..d4dfca402e Binary files /dev/null and b/projects/rocprofiler-systems/source/python/gui/source/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.woff differ diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/layout.css b/projects/rocprofiler-systems/source/python/gui/source/assets/layout.css new file mode 100644 index 0000000000..0efc66c534 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/layout.css @@ -0,0 +1,1594 @@ +/* +===================================================================== +* Ceevee v1.0 Layout Stylesheet +* url: styleshout.com +* 03-18-2014 +===================================================================== + + TOC: + a. General Styles + b. Header Styles + c. About Section + d. Resume Section + e. Portfolio Section + f. Call To Action Section + g. Testimonials Section + h. Contact Section + i. Footer + +===================================================================== */ + +/* ------------------------------------------------------------------ */ +/* a. General Styles +/* ------------------------------------------------------------------ */ + +body { background: #0f0f0f; } + +.float-container { + /* border: 3px solid #fff; */ + padding: 20px; +} +.float-child { + width: 50%; + float: left; + padding: 20px; + /* border: 2px solid red; */ +} +.float-child h3 { + color: #fff; +} + +html { + scroll-behavior: smooth; +} + +/* ------------------------------------------------------------------ */ +/* b. Header Styles +/* ------------------------------------------------------------------ */ + +header { + position: relative; + height: 122px; + min-height: 50px; + width: 100%; + background: #161415 url(../images/header-background.jpg) no-repeat top center; + background-size: cover !important; + -webkit-background-size: cover !important; + text-align: center; + overflow: hidden; +} + +/* vertically center banner section */ +header:before { + content: ''; + display: inline-block; + vertical-align: middle; + height: 100%; +} +header .banner { + display: inline-block; + vertical-align: middle; + margin: 0 auto; + width: 85%; + padding-bottom: 30px; + text-align: center; +} + +header .banner-text { width: 100%; } +header .banner-text h1 { + font: 90px/1.1em 'opensans-bold', sans-serif; + color: #fff; + letter-spacing: -2px; + margin: 0 auto 18px auto; + text-shadow: 0px 1px 3px rgba(0, 0, 0, .8); +} +header .banner-text h3 { + font: 18px/1.9em 'librebaskerville-regular', serif; + color: #A8A8A8; + margin: 0 auto; + width: 70%; + text-shadow: 0px 1px 2px rgba(0, 0, 0, .5); +} +header .banner-text h3 span, +header .banner-text h3 a { + color: #fff; +} +header .banner-text hr { + width: 60%; + margin: 18px auto 24px auto; + border-color: #2F2D2E; + border-color: rgba(150, 150, 150, .1); +} + +/* header social links */ +header .social { + margin: 24px 0; + padding: 0; + font-size: 30px; + text-shadow: 0px 1px 2px rgba(0, 0, 0, .8); +} +header .social li { + display: inline-block; + margin: 0 15px; + padding: 0; +} +header .social li a { color: #fff; } +header .social li a:hover { color: #11ABB0; } + + +/* scrolldown link */ +header .scrolldown a { + position: absolute; + bottom: 30px; + left: 50%; + margin-left: -29px; + color: #fff; + display: block; + height: 42px; + width: 42px; + font-size: 42px; + line-height: 42px; + color: #fff; + border-radius: 100%; + + -webkit-transition: all .3s ease-in-out; + -moz-transition: all .3s ease-in-out; + -o-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; +} +header .scrolldown a:hover { color: #11ABB0; } + +/* nav atempt... +--------------------------------------------------------------------- */ +/* primary navigation +--------------------------------------------------------------------- */ +#nav-wrap ul, #nav-wrap li { + margin: 0; + padding: 0; + border: none; + outline: none; +} + +/* nav-wrap */ +#nav-wrap { + font: 10px 'opensans-bold', sans-serif; + width: 100%; + /* max-height: 10vh; */ + letter-spacing: 1.5px; + margin: 0 auto; + z-index: 100; + position: fixed; + left: 0; + top: 0; + background-color: rgb(22,20,21,0.5); +} +.opaque { background-color: #333; } + +/* hide toggle button */ +#nav-wrap > a.mobile-btn { display: none; } + +ul#nav { + /* min-height: 60px; */ + width: auto; + + /* center align the menu */ + text-align: center; +} +ul#nav li { + position: relative; + list-style: none; + height: 50%; + display: -webkit-box; + max-width: 37vw; + /* float: left; */ + } + div#nav-center { + display: inline-block; + /* float: left; */ + width:85% +} + +/* Filtering */ +.filter { + /* vertical-align: top; */ + /* position: relative; */ + /* list-style: none; */ + /* height: 48px; */ + display: contents; + /* width: auto; */ + + /* float:left; */ +} +#nav .filter a { + display: inline-block; + text-transform: uppercase; + padding: 8px; + /* line-height: 32px; */ + + vertical-align: top; + text-decoration: none; + text-align: left; + color: #fff; + width: auto; + -webkit-transition: color .2s ease-in-out; + -moz-transition: color .2s ease-in-out; + -o-transition: color .2s ease-in-out; + -ms-transition: color .2s ease-in-out; + transition: color .2s ease-in-out; +} + +.dash-dropdown { + position: relative; + list-style: none; + display: inline-block; + height: 34px; + /* width: 150px; */ + max-width: 23vw; + min-width: 5vw; + /* max-height: 3vw; */ + vertical-align: middle; + letter-spacing: normal; + /* font-size: 14px; */ + text-align: left; + overflow: hidden; +} + +.dash-dropdown[id="Select Workload-filt"] { + position: relative; + list-style: none; + display: inline-block; + /* height: 34px; */ + /* width: 150px; */ + /* max-width: 20vw; */ + /* max-width: 30vw; */ + /* min-width: 110px; */ + /* max-height: 3vw; */ + vertical-align: middle; + letter-spacing: normal; + /* font-size: 14px; */ + text-align: left; + overflow: hidden; +} + +.dash-dropdown:hover { + position: relative; + list-style: none; + display: inline-block; + /* height: 34px; */ + /* width: 150px; */ + /* max-width: 23vw; */ + /*min-width: 110px; + max-height: 3vw; + vertical-align: middle; */ + letter-spacing: normal; + /* font-size: 14px; */ + text-align: left; + overflow: visible; + z-index: 10; +} +div#min-points{ + display: inline-flex; + +} +.regex{ + display: inline-block; +} +.workload{ + display: inline-block; +} +.upload{ + display: inline-block; +} +/* .dash-dropdown span{ + text-overflow: ellipsis; + max-width: 32vw; +} */ +/* .dash-dropdown span:hover{ + text-overflow: ellipsis; + max-width: 32vw; + display: contents; +} */ + +div input[type="text"]{ + vertical-align: top; + width: 100%; + min-width: 0; + /* width:auto; */ + /* padding: 1vw 1vw; */ + font-size:10px; + height: 34px; + /* line-height: 60px; */ + border-width: 1px; + border-style: dashed; + border-radius: 5px; + text-align: center; + +} + + +div#upload-drag a { + line-height: 32px; + border-width: 1px; + width: 100%; + /* line-height: 4vh; */ + display: inline-block; + border-style: dashed; + border-radius: 5px; + text-align: center; + font-size: 10px; +} +/* li.upload div#upload-drag { + line-height: 4vh; + border-width: 1px; + width: 100%; + height: 18vh; + border-style: dashed; + border-radius: 5px; + text-align: center; + float: right; +} */ + +/* div.daq-slider--light { + position: relative; + list-style: none; + width: 5vw; + display: inline-block; + vertical-align: bottom; +} */ + +.rc-slider{ + padding: 15px 0; +} + +div.daq-slider--light div[class="sc-gPEVay cmYtpx rc-slider-handle"] { + padding: 0px, 0px; + border-radius: 10px; + top: 20px; +} + +div.daq-slider--light svg[class = "sc-jAaTju cEBNup rc-slider-handle"]{ + height: 10px; +} + +div.nav-right { + float: right; + width: 10%;; +} + + +#nav .nav-left { + float: left; + width: 5%; + display: block; +} + +ul#nav li a:active { background-color: transparent !important; } +ul#nav li.current a { color: #F06000; } + +/* Causal Graphs +.dash-graph{ + width:90%; + margin: auto; +}*/ +.graph{ + width:95%; + height: 100%; + margin: auto; +} +/* Report Button */ +li.refresh{ + float: right; +} +button.refresh { + color: #fff; + background-color: #F06000; + font: 100% 'opensans-bold', sans-serif; + border: none; + cursor: pointer; + /* height: auto; */ + /* display: inline-block; */ + border-radius: 3px; + right:0; + /* padding: 8px 9px; */ + margin: 8px 0px; + vertical-align: top; + /* float: right; */ +} + + + +button.report:hover { + background-color: #0D0D0D; +} +.dropdown-menu { + font-size: 16px; +} + +.dropdown button { + display: inline-block; + /* font: 16px 'opensans-bold', sans-serif; */ + margin: 8px 0px; +} +.dropdown a.dropdown-item { + font: 16px 'opensans-bold', sans-serif; + padding-left: 20px; /* Add a little extra indent for the contents of a subheading */ +} +.dropdown-header { + font: 16px 'opensans-bold', sans-serif; +} +/* ------------------------------------------------------------------ */ +/* Roofline Section +/* ------------------------------------------------------------------ */ +#roofline { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#roofline a, #roofline a:visited { color: #fff; } +#roofline a:hover, #roofline a:focus { color: #11ABB0; } + +#roofline .float-container { + /* border: 3px solid #fff; */ + padding: 20px; +} +#roofline .float-child { + width: 50%; + float: left; + padding: 20px; + /* border: 2px solid red; */ +} +#roofline .float-child h3 { + color: #fff; +} + +/* ------------------------------------------------------------------ */ +/* Memchart Section +/* ------------------------------------------------------------------ */ +#memchart { + display: block; + margin: 0 auto; + width: 85%; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; + text-align: center; +} + +/* Mem Chart styling */ + #memchart-svg Svg{ + max-width: 100%; + max-height: 543px; +} + .instr-buff rect{ + width: 200px; + height: 400px; + fill:#000000; + stroke:#ff8000; +} + .fabric rect{ + width: 152.5px; + height: 152.5px; + fill: #000000; + stroke:#ff8000; +} + .cache rect{ + width: 170px; + height: 80px; + fill:#ffffff; + stroke: #ff8000; +} + .cache rect#a3{ height: 102px; } + .cache rect#b3{ height: 147px; } + .fabric-connections rect{ + width: 90px; + height: 60px; + fill:#000000; + stroke: #ff8000; +} + .inner-inst-buff rect{ + width: 160px; + height: 50px; + fill:none; + stroke: #ff8000; +} + .misc-rec rect{ + width: 180px; + height: 510px; + fill:#000000; + stroke: #ff8000; +} + .misc-rec rect#a6{ width: 420px; height: 207.5px; transform: rotate(-90deg); transform-origin: 536.25px 242px; } + .misc-rec rect#b6{ width: 170px; height: 285px; fill:#ffffff; stroke-width: 2px; stroke-dasharray: 6px 6px; } + .val-1 rect{ + width: 90px; + height: 20px; + fill:#b3b3b3; + stroke: #000000; +} + .val-2 rect{ + width: 47px; + height: 20px; + fill:#ffffff; + stroke: #000000; +} + .val-3 rect{ + width: 97px; + height: 20px; + fill:#ffffff; + stroke: #000000; +} + .val-4 rect{ + width: 150px; + height: 20px; + fill:#b3b3b3; + stroke: #000000; +} + .val-5 rect{ + width: 61.75px; + height: 19.05px; + fill:#ffffff; + stroke: #000000; +} + .lines-arrows path{ + stroke-miterlimit: 10px; +} + .lines-arrows path#p1{transform: rotate(90deg); transform-origin: 297.5px 232px;} + .lines-arrows path#p2{transform: rotate(90deg); transform-origin: 255px 62px;} + .lines-arrows path#p3{transform: rotate(90deg); transform-origin: 255px 112px;} + .lines-arrows path#p4{transform: rotate(90deg); transform-origin: 255px 162px;} + .lines-arrows path#p5{transform: rotate(90deg); transform-origin: 255px 212px;} + .lines-arrows path#p6{transform: rotate(90deg); transform-origin: 255px 262px;} + .lines-arrows path#p7{transform: rotate(90deg); transform-origin: 255px 312px;} + .lines-arrows path#p8{transform: rotate(90deg); transform-origin: 255px 362px;} + .lines-arrows path#p9{transform: rotate(90deg); transform-origin: 255px 412px;} + .labels text{ + font-family: Helvetica; +} + .data text{ + font-family: Helvetica; + text-anchor: middle; +} + +#memchart a, #memchart a:visited { color: #fff; } +#memchart a:hover, #memchart a:focus { color: #11ABB0; } + +/* ------------------------------------------------------------------ */ +/* Top Stat Section +/* ------------------------------------------------------------------ */ +#top_stat { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#top_stat a, #top_stat a:visited { color: #fff; } +#top_stat a:hover, #top_stat a:focus { color: #11ABB0; } + +/* ------------------------------------------------------------------ */ +/* System Info Section +/* ------------------------------------------------------------------ */ +#system_info { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#system_info a, #system_info a:visited { color: #fff; } +#system_info a:hover, #system_info a:focus { color: #11ABB0; } + +/* ------------------------------------------------------------------ */ +/* System Speed-of-Light Section +/* ------------------------------------------------------------------ */ +#system_speed-of-light { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#system_speed-of-light a, #system_speed-of-light a:visited { color: #fff; } +#system_speed-of-light a:hover, #system_speed-of-light a:focus { color: #11ABB0; } + +/* ------------------------------------------------------------------ */ +/* Command Processor Section +/* ------------------------------------------------------------------ */ +#command_processor_cpccpf { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#command_processor_cpccp a, #command_processor_cpccp a:visited { color: #fff; } +#command_processor_cpccp a:hover, #command_processor_cpccp a:focus { color: #11ABB0; } + +/* ------------------------------------------------------------------ */ +/* SPI Section +/* ------------------------------------------------------------------ */ +#shader_processor_input_spi { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#shader_processor_input_spi a, #shader_processor_input_spi a:visited { color: #fff; } +#shader_processor_input_spi a:hover, #shader_processor_input_spi a:focus { color: #11ABB0; } + + +/* ------------------------------------------------------------------ */ +/* Wavefront Section +/* ------------------------------------------------------------------ */ +#wavefront { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#wavefront a, #wavefront a:visited { color: #fff; } +#wavefront a:hover, #wavefront a:focus { color: #11ABB0; } + +/* ------------------------------------------------------------------ */ +/* Intr Mix Section +/* ------------------------------------------------------------------ */ +#compute_units_-_instruction_mix { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#compute_units_-_instruction_mix a, #compute_units_-_instruction_mix a:visited { color: #fff; } +#compute_units_-_instruction_mix a:hover, #compute_units_-_instruction_mix a:focus { color: #11ABB0; } + +/* ------------------------------------------------------------------ */ +/* Compute Pipeline Section +/* ------------------------------------------------------------------ */ +#compute_units_-_compute_pipeline { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#compute_units_-_compute_pipeline a, #compute_units_-_compute_pipeline a:visited { color: #fff; } +#compute_units_-_compute_pipeline a:hover, #compute_units_-_compute_pipeline a:focus { color: #11ABB0; } + +/* ------------------------------------------------------------------ */ +/* LDS Section +/* ------------------------------------------------------------------ */ +#local_data_share_lds { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#local_data_share_lds a, #local_data_share_lds a:visited { color: #fff; } +#local_data_share_lds a:hover, #local_data_share_lds a:focus { color: #11ABB0; } + +/* ------------------------------------------------------------------ */ +/* Instruction Cache Section +/* ------------------------------------------------------------------ */ +#instruction_cache { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#instruction_cache a, #instruction_cache a:visited { color: #fff; } +#instruction_cache a:hover, #instruction_cache a:focus { color: #11ABB0; } + +/* ------------------------------------------------------------------ */ +/* Scalar L1D Cache Section +/* ------------------------------------------------------------------ */ +#scalar_l1_data_cache { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#scalar_l1_data_cache a, #scalar_l1_data_cache a:visited { color: #fff; } +#scalar_l1_data_cache a:hover, #scalar_l1_data_cache a:focus { color: #11ABB0; } + +/* ------------------------------------------------------------------ */ +/* TA/TD Section +/* ------------------------------------------------------------------ */ +#texture_addresser_and_texture_data_tatd { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#texture_addresser_and_texture_data_tatd a, #texture_addresser_and_texture_data_tatd a:visited { color: #fff; } +#texture_addresser_and_texture_data_tatd a:hover, #texture_addresser_and_texture_data_tatd a:focus { color: #11ABB0; } + +/* ------------------------------------------------------------------ */ +/* Vector L1D Section +/* ------------------------------------------------------------------ */ +#vector_l1_data_cache { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#vector_l1_data_cache a, #vector_l1_data_cache a:visited { color: #fff; } +#vector_l1_data_cache a:hover, #vector_l1_data_cache a:focus { color: #11ABB0; } + +/* ------------------------------------------------------------------ */ +/* L2 Cache Section +/* ------------------------------------------------------------------ */ +#l2_cache { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#l2_cache a, #l2_cache a:visited { color: #fff; } +#l2_cache a:hover, #l2_cache a:focus { color: #11ABB0; } + + +/* ------------------------------------------------------------------ */ +/* L2 Cache per Channel Section +/* ------------------------------------------------------------------ */ +#l2_cache_per_channel { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#l2_cache_per_channel a, #l2_cache_per_channel a:visited { color: #fff; } +#l2_cache_per_channel a:hover, #l2_cache_per_channel a:focus { color: #11ABB0; } + +#l2_cache_per_channel .float-container { + /* border: 3px solid #fff; */ + padding: 20px; +} +#l2_cache_per_channel .float-child { + width: 100%; + float: left; + padding: 20px; + /* border: 2px solid red; */ +} +#l2_cache_per_channel .float-child h3 { + color: #fff; +} + +/* ------------------------------------------------------------------ */ +/* c. About Section +/* ------------------------------------------------------------------ */ + +#about { + background: #2B2B2B; + padding-top: 96px; + padding-bottom: 66px; + overflow: hidden; +} + +#about a, #about a:visited { color: #fff; } +#about a:hover, #about a:focus { color: #11ABB0; } + +#about h2 { + font: 22px/30px 'opensans-bold', sans-serif; + color: #fff; + margin-bottom: 12px; +} +#about p { + line-height: 30px; + color: #7A7A7A; +} +#about .profile-pic { + position: relative; + width: 120px; + height: 120px; + border-radius: 100%; +} +#about .contact-details { width: 41.66667%; } +#about .download { + width: 58.33333%; + padding-top: 6px; +} +#about .main-col { padding-right: 5%; } +#about .download .button { + margin-top: 6px; + background: #444; +} +#about .download .button:hover { + background: #fff; + color: #2B2B2B; +} +#about .download .button i { + margin-right: 15px; + font-size: 20px; +} + + +/* ------------------------------------------------------------------ */ +/* d. Resume Section +/* ------------------------------------------------------------------ */ + +#resume { + background: #fff; + padding-top: 90px; + padding-bottom: 72px; + overflow: hidden; +} + +#resume a, #resume a:visited { color: #11ABB0; } +#resume a:hover, #resume a:focus { color: #313131; } + +#resume h1 { + font: 18px/24px 'opensans-bold', sans-serif; + text-transform: uppercase; + letter-spacing: 1px; +} +#resume h1 span { + border-bottom: 3px solid #11ABB0; + padding-bottom: 6px; +} +#resume h3 { + font: 25px/30px 'opensans-bold', sans-serif; +} + +#resume .header-col { padding-top: 9px; } +#resume .main-col { padding-right: 10%; } + +.education, .work { + margin-bottom: 48px; + padding-bottom: 24px; + border-bottom: 1px solid #E8E8E8; +} +#resume .info { + font: 16px/24px 'librebaskerville-italic', serif; + color: #6E7881; + margin-bottom: 18px; + margin-top: 9px; +} +#resume .info span { + margin-right: 5px; + margin-left: 5px; +} +#resume .date { + font: 15px/24px 'opensans-regular', sans-serif; + margin-top: 6px; +} + +/*----------------------------------------------*/ +/* Skill Bars +/*----------------------------------------------*/ + +.bars { + width: 95%; + float: left; + padding: 0; + text-align: left; +} +.bars .skills { + margin-top: 36px; + list-style: none; +} +.bars li { + position: relative; + margin-bottom: 60px; + background: #ccc; + height: 42px; + border-radius: 3px; +} +.bars li em { + font: 15px 'opensans-bold', sans-serif; + color: #313131; + text-transform: uppercase; + letter-spacing: 2px; + font-weight: normal; + position: relative; + top: -36px; +} +.bar-expand { + position: absolute; + left: 0; + top: 0; + + margin: 0; + padding-right: 24px; + background: #313131; + display: inline-block; + height: 42px; + line-height: 42px; + border-radius: 3px 0 0 3px; +} +/* +.git { + -moz-animation: git 2s ease; + -webkit-animation: git 2s ease; +} +.illustrator { + -moz-animation: illustrator 2s ease; + -webkit-animation: illustrator 2s ease; +} +.reactjs { + -moz-animation: reactjs 2s ease; + -webkit-animation: reactjs 2s ease; +} +.css { + -moz-animation: css 2s ease; + -webkit-animation: css 2s ease; +} +.html5 { + -moz-animation: html5 2s ease; + -webkit-animation: html5 2s ease; +} +.vuejs { + -moz-animation: vuejs 2s ease; + -webkit-animation: vuejs 2s ease; +} +.mongodb { + -moz-animation: mongodb 2s ease; + -webkit-animation: mongodb 2s ease; +} + +@-moz-keyframes git { + 0% { width: 0px; } + 100% { width: 60%; } +} +@-moz-keyframes illustrator { + 0% { width: 0px; } + 100% { width: 55%; } +} +@-moz-keyframes reactjs { + 0% { width: 0px; } + 100% { width: 50%; } +} +@-moz-keyframes css { + 0% { width: 0px; } + 100% { width: 90%; } +} +@-moz-keyframes html5 { + 0% { width: 0px; } + 100% { width: 80%; } +} +@-moz-keyframes vuejs { + 0% { width: 0px; } + 100% { width: 50%; } +} +@-moz-keyframes mongodb { + 0% { width: 0px; } + 100% { width: 80%; } +} + +@-webkit-keyframes photoshop { + 0% { width: 0px; } + 100% { width: 60%; } +} +@-webkit-keyframes illustrator { + 0% { width: 0px; } + 100% { width: 55%; } +} +@-webkit-keyframes reactjs { + 0% { width: 0px; } + 100% { width: 50%; } +} +@-webkit-keyframes css { + 0% { width: 0px; } + 100% { width: 90%; } +} +@-webkit-keyframes html5 { + 0% { width: 0px; } + 100% { width: 80%; } +} +@-webkit-keyframes vuejs { + 0% { width: 0px; } + 100% { width: 50%; } +} +@-webkit-keyframes mongodb { + 0% { width: 0px; } + 100% { width: 80%; } +} */ + +/* ------------------------------------------------------------------ */ +/* e. Portfolio Section +/* ------------------------------------------------------------------ */ + +#portfolio { + background: #ebeeee; + padding-top: 90px; + padding-bottom: 60px; +} +#portfolio h1 { + font: 15px/24px 'opensans-semibold', sans-serif; + text-transform: uppercase; + letter-spacing: 1px; + text-align: center; + margin-bottom: 48px; + color: #95A3A3; +} + +/* Portfolio Content */ +#portfolio-wrapper .columns { margin-bottom: 36px; } +.portfolio-item .item-wrap { + background: #fff; + overflow: hidden; + position: relative; + + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +.portfolio-item .item-wrap a { + display: block; + cursor: pointer; +} + +/* overlay */ +.portfolio-item .item-wrap .overlay { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + + opacity: 0; + -moz-opacity: 0; + filter:alpha(opacity=0); + + -webkit-transition: opacity 0.3s ease-in-out; + -moz-transition: opacity 0.3s ease-in-out; + -o-transition: opacity 0.3s ease-in-out; + transition: opacity 0.3s ease-in-out; + + background: url(../images/overlay-bg.png) repeat; +} +.portfolio-item .item-wrap .link-icon { + display: block; + color: #fff; + height: 30px; + width: 30px; + font-size: 18px; + line-height: 30px; + text-align: center; + + opacity: 0; + -moz-opacity: 0; + filter:alpha(opacity=0); + + -webkit-transition: opacity 0.3s ease-in-out; + -moz-transition: opacity 0.3s ease-in-out; + -o-transition: opacity 0.3s ease-in-out; + transition: opacity 0.3s ease-in-out; + + position: absolute; + top: 50%; + left: 50%; + margin-left: -15px; + margin-top: -15px; +} +.portfolio-item .item-wrap img { + vertical-align: bottom; +} +.portfolio-item .portfolio-item-meta { padding: 18px } +.portfolio-item .portfolio-item-meta h5 { + font: 14px/21px 'opensans-bold', sans-serif; + color: #fff; +} +.portfolio-item .portfolio-item-meta p { + font: 12px/18px 'opensans-light', sans-serif; + color: #c6c7c7; + margin-bottom: 0; +} + +/* on hover */ +.portfolio-item:hover .overlay { + opacity: 1; + -moz-opacity: 1; + filter:alpha(opacity=100); +} +.portfolio-item:hover .link-icon { + opacity: 1; + -moz-opacity: 1; + filter:alpha(opacity=100); +} + +/* popup modal */ +.popup-modal { + max-width: 550px; + background: #fff; + position: relative; + margin: 0 auto; +} +.popup-modal .description-box { padding: 12px 36px 18px 36px; } +.popup-modal .description-box h4 { + font: 15px/24px 'opensans-bold', sans-serif; + margin-bottom: 12px; + color: #111; +} +.popup-modal .description-box p { + font: 14px/24px 'opensans-regular', sans-serif; + color: #A1A1A1; + margin-bottom: 12px; +} +.popup-modal .description-box .categories { + font: 11px/21px 'opensans-light', sans-serif; + color: #A1A1A1; + text-transform: uppercase; + letter-spacing: 2px; + display: block; + text-align: left; +} +.popup-modal .description-box .categories i { + margin-right: 8px; +} +.popup-modal .link-box { + padding: 18px 36px; + background: #111; + text-align: left; +} +.popup-modal .link-box a { + color: #fff; + font: 11px/21px 'opensans-bold', sans-serif; + text-transform: uppercase; + letter-spacing: 3px; + cursor: pointer; +} +.popup-modal a:hover { color: #00CCCC; } +.popup-modal a.popup-modal-dismiss { margin-left: 24px; } + + +/* fadein/fadeout effect for modal popup +/* ------------------------------------------------------------------ */ + +/* content at start */ +.mfp-fade.mfp-wrap .mfp-content .popup-modal { + opacity: 0; + -webkit-transition: all 200ms ease-in-out; + -moz-transition: all 200ms ease-in-out; + -o-transition: all 200ms ease-in-out; + -ms-transition: all 200ms ease-in-out; + transition: all 200ms ease-in-out; +} +/* content fadein */ +.mfp-fade.mfp-wrap.mfp-ready .mfp-content .popup-modal { + opacity: 1; +} +/* content fadeout */ +.mfp-fade.mfp-wrap.mfp-removing .mfp-content .popup-modal { + opacity: 0; +} + +/* ------------------------------------------------------------------ */ +/* f. Call To Action Section +/* ------------------------------------------------------------------ */ + +#call-to-action { + background: #212121; + padding-top: 66px; + padding-bottom: 48px; +} +#call-to-action h1 { + font: 18px/24px 'opensans-bold', sans-serif; + text-transform: uppercase; + letter-spacing: 3px; + color: #fff; +} +#call-to-action h1 span { display: none; } +#call-to-action .header-col h1:before { + font-family: 'FontAwesome'; + content: "\f0ac"; + padding-right: 10px; + font-size: 72px; + line-height: 72px; + text-align: left; + float: left; + color: #fff; +} +#call-to-action .action { + margin-top: 12px; +} +#call-to-action h2 { + font: 28px/36px 'opensans-bold', sans-serif; + color: #EBEEEE; + margin-bottom: 6px; +} +#call-to-action h2 a { + color: inherit; +} +#call-to-action p { + color: #636363; + font-size: 17px; +} +/*# +call-to-action .button { + color:#fff; + background: #0D0D0D; +} +*/ +#call-to-action .button:hover, +#call-to-action .button:active { + background: #FFFFFF; + color: #0D0D0D; +} +#call-to-action p span { + font-family: 'opensans-semibold', sans-serif; + color: #D8D8D8; +} + +/* ------------------------------------------------------------------ +/* g. Testimonials +/* ------------------------------------------------------------------ */ + +#testimonials { + background: #1F1F1F url(../images/testimonials-bg.jpg) no-repeat center center; + background-size: cover !important; + -webkit-background-size: cover !important; + background-attachment: fixed; + + position: relative; + min-height: 200px; + width: 100%; + overflow: hidden; +} +#testimonials .text-container { + padding-top: 96px; + padding-bottom: 66px; +} +#testimonials h1 { + font: 18px/24px 'opensans-bold', sans-serif; + text-transform: uppercase; + letter-spacing: 3px; + color: #fff; +} +#testimonials h1 span { display: none; } +#testimonials .header-col { padding-top: 9px; } +#testimonials .header-col h1:before { + font-family: 'FontAwesome'; + content: "\f10d"; + padding-right: 10px; + font-size: 72px; + line-height: 72px; + text-align: left; + float: left; + color: #fff; +} + +/* Blockquotes */ +#testimonials blockquote { + margin: 0 0px 30px 0px; + padding-left: 0; + position: relative; + text-shadow: 0px 1px 3px rgba(0, 0, 0, 1); +} +#testimonials blockquote:before { content: none; } +#testimonials blockquote p { + font-family: 'librebaskerville-italic', serif; + padding: 0; + font-size: 24px; + line-height: 48px; + color: #fff +} +#testimonials blockquote cite { + display: block; + font-size: 12px; + font-style: normal; + line-height: 18px; + color: #fff; +} +#testimonials blockquote cite:before { content: "\2014 \0020"; } +#testimonials blockquote cite a, +#testimonials blockquote cite a:visited { color: #8B9798; border: none } + +/* Flex Slider +/* ------------------------------------------------------------------ */ + +/* Reset */ +.flexslider a:active, +.flexslider a:focus { outline: none; } +.slides, +.flex-control-nav, +.flex-direction-nav { margin: 0; padding: 0; list-style: none; } +.slides li { margin: 0; padding: 0;} + +/* Necessary Styles */ +.flexslider { + position: relative; + zoom: 1; + margin: 0; + padding: 0; +} +.flexslider .slides { zoom: 1; } +.flexslider .slides > li { position: relative; } + +/* Hide the slides before the JS is loaded. Avoids image jumping */ +.flexslider .slides > li { display: none; -webkit-backface-visibility: hidden; } +/* Suggested container for slide animation setups. Can replace this with your own */ +.flex-container { zoom: 1; position: relative; } + +/* Clearfix for .slides */ +.slides:before, +.slides:after { + content: " "; + display: table; +} +.slides:after { + clear: both; +} + +/* No JavaScript Fallback */ +/* If you are not using another script, such as Modernizr, make sure you + * include js that eliminates this class on page load */ +.no-js .slides > li:first-child { display: block; } + +/* Slider Styles */ +.slides { zoom: 1; } +.slides > li { + /*margin-right: 5px; */ + overflow: hidden; +} + +/* Control Nav */ +.flex-control-nav { + width: 100%; + position: absolute; + bottom: -20px; + text-align: left; +} +.flex-control-nav li { + margin: 0 6px; + display: inline-block; + zoom: 1; + *display: inline; +} +.flex-control-paging li a { + width: 12px; + height: 12px; + display: block; + background: #ddd; + background: rgba(255, 255, 255, .3); + cursor: pointer; + text-indent: -9999px; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + -o-border-radius: 20px; + border-radius: 20px; + box-shadow: inset 0 0 3px rgba(255, 255, 255, .3); +} +.flex-control-paging li a:hover { + background: #CCC; + background: rgba(255, 255, 255, .7); +} +.flex-control-paging li a.flex-active { + background: #fff; + background: rgba(255, 255, 255, .9); + cursor: default; +} + +/* ------------------------------------------------------------------ */ +/* h. Contact Section +/* ------------------------------------------------------------------ */ + +#contact { + background: #191919; + padding-top: 96px; + padding-bottom: 102px; + color: #636363; +} +#contact .section-head { margin-bottom: 42px; } + +#contact a, #contact a:visited { color: #11ABB0; } +#contact a:hover, #contact a:focus { color: #fff; } + +#contact h1 { + font: 18px/24px 'opensans-bold', sans-serif; + text-transform: uppercase; + letter-spacing: 3px; + color: #EBEEEE; + margin-bottom: 6px; +} +#contact h1 span { display: none; } +#contact h1:before { + font-family: 'FontAwesome'; + content: "\f0e0"; + padding-right: 10px; + font-size: 72px; + line-height: 72px; + text-align: left; + float: left; + color: #ebeeee; +} + +#contact h4 { + font: 16px/24px 'opensans-bold', sans-serif; + color: #EBEEEE; + margin-bottom: 6px; +} +#contact p.lead { + font: 18px/36px 'opensans-light', sans-serif; + padding-right: 3%; +} +#contact .header-col { padding-top: 6px; } + + +/* contact form */ +#contact form { margin-bottom: 30px; } +#contact label { + font: 15px/24px 'opensans-bold', sans-serif; + margin: 12px 0; + color: #EBEEEE; + display: inline-block; + float: left; + width: 26%; +} +#contact input, +#contact textarea, +#contact select { + padding: 18px 20px; + color: #eee; + background: #373233; + margin-bottom: 42px; + border: 0; + outline: none; + font-size: 15px; + line-height: 24px; + width: 65%; +} +#contact input:focus, +#contact textarea:focus, +#contact select:focus { + color: #fff; + background-color: #11ABB0; +} +#contact button.submit { + text-transform: uppercase; + letter-spacing: 3px; + color:#fff; + background: #0D0D0D; + border: none; + cursor: pointer; + height: auto; + display: inline-block; + border-radius: 3px; + margin-left: 26%; +} +#contact button.submit:hover { + color: #0D0D0D; + background: #fff; +} +#contact span.required { + color: #11ABB0; + font-size: 13px; +} +#message-warning, #message-success { + display: none; + background: #0F0F0F; + padding: 24px 24px; + margin-bottom: 36px; + width: 65%; + margin-left: 26%; +} +#message-warning { color: #D72828; } +#message-success { color: #11ABB0; } + +#message-warning i, +#message-success i { + margin-right: 10px; +} +#image-loader { + display: none; + position: relative; + left: 18px; + top: 17px; +} + + +/* Twitter Feed */ +#twitter { + margin-top: 12px; + padding: 0; +} +#twitter li { + margin: 6px 0px 12px 0; + line-height: 30px; +} +#twitter li span { + display: block; +} +#twitter li b a { + font: 13px/36px 'opensans-regular', Sans-serif; + color: #474747 !important; + border: none; +} + + +/* ------------------------------------------------------------------ */ +/* i. Footer +/* ------------------------------------------------------------------ */ + +footer { + padding-top: 48px; + margin-bottom: 48px; + color: #303030; + font-size: 14px; + text-align: center; + position: relative; +} + +footer a, footer a:visited { color: #525252; } +footer a:hover, footer a:focus { color: #fff; } + +/* copyright */ +footer .copyright { + margin: 0; + padding: 0; + } +footer .copyright li { + display: inline-block; + margin: 0; + padding: 0; + line-height: 24px; +} +.ie footer .copyright li { + display: inline; +} +footer .copyright li:before { + content: "\2022"; + padding-left: 10px; + padding-right: 10px; + color: #095153; +} +footer .copyright li:first-child:before { + display: none; +} + +/* social links */ +footer .social-links { + margin: 18px 0 30px 0; + padding: 0; + font-size: 30px; +} +footer .social-links li { + display: inline-block; + margin: 0; + padding: 0; + margin-left: 42px; + color: #F06000; +} + +footer .social-links li:first-child { margin-left: 0; } + +/* Go To Top Button */ +#go-top { + position: absolute; + top: -24px; + left: 50%; + margin-left: -30px; +} +#go-top a { + text-decoration: none; + border: 0 none; + display: block; + width: 60px; + height: 60px; + background-color: #525252; + + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + + color: #fff; + font-size: 21px; + line-height: 60px; + border-radius: 100%; +} +#go-top a:hover { background-color: #0F9095; } diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/magnific-popup.css b/projects/rocprofiler-systems/source/python/gui/source/assets/magnific-popup.css new file mode 100644 index 0000000000..bd962d8502 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/magnific-popup.css @@ -0,0 +1,372 @@ +/* Magnific Popup CSS */ +.mfp-bg { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1042; + overflow: hidden; + position: fixed; + background: #000; + opacity: 0.8; + filter: alpha(opacity=80); } + +.mfp-wrap { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1043; + position: fixed; + outline: none !important; + -webkit-backface-visibility: hidden; } + +.mfp-container { + text-align: center; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + padding: 0 8px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } + +.mfp-container:before { + content: ''; + display: inline-block; + height: 100%; + vertical-align: middle; } + +.mfp-align-top .mfp-container:before { + display: none; } + +.mfp-content { + position: relative; + display: inline-block; + vertical-align: middle; + margin: 0 auto; + text-align: left; + z-index: 1045; } + +.mfp-inline-holder .mfp-content, .mfp-ajax-holder .mfp-content { + width: 100%; + cursor: auto; } + +.mfp-ajax-cur { + cursor: progress; } + +.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close { + cursor: -moz-zoom-out; + cursor: -webkit-zoom-out; + cursor: zoom-out; } + +.mfp-zoom { + cursor: pointer; + cursor: -webkit-zoom-in; + cursor: -moz-zoom-in; + cursor: zoom-in; } + +.mfp-auto-cursor .mfp-content { + cursor: auto; } + +.mfp-close, .mfp-arrow, .mfp-preloader, .mfp-counter { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; } + +.mfp-loading.mfp-figure { + display: none; } + +.mfp-hide { + display: none !important; } + +.mfp-preloader { + color: #cccccc; + position: absolute; + top: 50%; + width: auto; + text-align: center; + margin-top: -0.8em; + left: 8px; + right: 8px; + z-index: 1044; } + .mfp-preloader a { + color: #cccccc; } + .mfp-preloader a:hover { + color: white; } + +.mfp-s-ready .mfp-preloader { + display: none; } + +.mfp-s-error .mfp-content { + display: none; } + +button.mfp-close, button.mfp-arrow { + overflow: visible; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + display: block; + outline: none; + padding: 0; + z-index: 1046; + -webkit-box-shadow: none; + box-shadow: none; } +button::-moz-focus-inner { + padding: 0; + border: 0; } + +.mfp-close { + width: 44px; + height: 44px; + line-height: 44px; + position: absolute; + right: 0; + top: 0; + text-decoration: none; + text-align: center; + opacity: 0.65; + filter: alpha(opacity=65); + padding: 0 0 18px 10px; + color: white; + font-style: normal; + font-size: 28px; + font-family: Arial, Baskerville, monospace; } + .mfp-close:hover, .mfp-close:focus { + opacity: 1; + filter: alpha(opacity=100); } + .mfp-close:active { + top: 1px; } + +.mfp-close-btn-in .mfp-close { + color: #333333; } + +.mfp-image-holder .mfp-close, .mfp-iframe-holder .mfp-close { + color: white; + right: -6px; + text-align: right; + padding-right: 6px; + width: 100%; } + +.mfp-counter { + position: absolute; + top: 0; + right: 0; + color: #cccccc; + font-size: 12px; + line-height: 18px; } + +.mfp-arrow { + position: absolute; + opacity: 0.65; + filter: alpha(opacity=65); + margin: 0; + top: 50%; + margin-top: -55px; + padding: 0; + width: 90px; + height: 110px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + .mfp-arrow:active { + margin-top: -54px; } + .mfp-arrow:hover, .mfp-arrow:focus { + opacity: 1; + filter: alpha(opacity=100); } + .mfp-arrow:before, .mfp-arrow:after, .mfp-arrow .mfp-b, .mfp-arrow .mfp-a { + content: ''; + display: block; + width: 0; + height: 0; + position: absolute; + left: 0; + top: 0; + margin-top: 35px; + margin-left: 35px; + border: medium inset transparent; } + .mfp-arrow:after, .mfp-arrow .mfp-a { + border-top-width: 13px; + border-bottom-width: 13px; + top: 8px; } + .mfp-arrow:before, .mfp-arrow .mfp-b { + border-top-width: 21px; + border-bottom-width: 21px; + opacity: 0.7; } + +.mfp-arrow-left { + left: 0; } + .mfp-arrow-left:after, .mfp-arrow-left .mfp-a { + border-right: 17px solid white; + margin-left: 31px; } + .mfp-arrow-left:before, .mfp-arrow-left .mfp-b { + margin-left: 25px; + border-right: 27px solid #3f3f3f; } + +.mfp-arrow-right { + right: 0; } + .mfp-arrow-right:after, .mfp-arrow-right .mfp-a { + border-left: 17px solid white; + margin-left: 39px; } + .mfp-arrow-right:before, .mfp-arrow-right .mfp-b { + border-left: 27px solid #3f3f3f; } + +.mfp-iframe-holder { + padding-top: 40px; + padding-bottom: 40px; } + .mfp-iframe-holder .mfp-content { + line-height: 0; + width: 100%; + max-width: 900px; } + .mfp-iframe-holder .mfp-close { + top: -40px; } + +.mfp-iframe-scaler { + width: 100%; + height: 0; + overflow: hidden; + padding-top: 56.25%; } + .mfp-iframe-scaler iframe { + position: absolute; + display: block; + top: 0; + left: 0; + width: 100%; + height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: black; } + +/* Main image in popup */ +img.mfp-img { + width: auto; + max-width: 100%; + height: auto; + display: block; + line-height: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 40px 0 40px; + margin: 0 auto; } + +/* The shadow behind the image */ +.mfp-figure { + line-height: 0; } + .mfp-figure:after { + content: ''; + position: absolute; + left: 0; + top: 40px; + bottom: 40px; + display: block; + right: 0; + width: auto; + height: auto; + z-index: -1; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #444444; } + .mfp-figure small { + color: #bdbdbd; + display: block; + font-size: 12px; + line-height: 14px; } + .mfp-figure figure { + margin: 0; } + +.mfp-bottom-bar { + margin-top: -36px; + position: absolute; + top: 100%; + left: 0; + width: 100%; + cursor: auto; } + +.mfp-title { + text-align: left; + line-height: 18px; + color: #f3f3f3; + word-wrap: break-word; + padding-right: 36px; } + +.mfp-image-holder .mfp-content { + max-width: 100%; } + +.mfp-gallery .mfp-image-holder .mfp-figure { + cursor: pointer; } + +@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) { + /** + * Remove all paddings around the image on small screen + */ + .mfp-img-mobile .mfp-image-holder { + padding-left: 0; + padding-right: 0; } + .mfp-img-mobile img.mfp-img { + padding: 0; } + .mfp-img-mobile .mfp-figure:after { + top: 0; + bottom: 0; } + .mfp-img-mobile .mfp-figure small { + display: inline; + margin-left: 5px; } + .mfp-img-mobile .mfp-bottom-bar { + background: rgba(0, 0, 0, 0.6); + bottom: 0; + margin: 0; + top: auto; + padding: 3px 5px; + position: fixed; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } + .mfp-img-mobile .mfp-bottom-bar:empty { + padding: 0; } + .mfp-img-mobile .mfp-counter { + right: 5px; + top: 3px; } + .mfp-img-mobile .mfp-close { + top: 0; + right: 0; + width: 35px; + height: 35px; + line-height: 35px; + background: rgba(0, 0, 0, 0.6); + position: fixed; + text-align: center; + padding: 0; } } + +@media all and (max-width: 900px) { + .mfp-arrow { + -webkit-transform: scale(0.75); + transform: scale(0.75); } + .mfp-arrow-left { + -webkit-transform-origin: 0; + transform-origin: 0; } + .mfp-arrow-right { + -webkit-transform-origin: 100%; + transform-origin: 100%; } + .mfp-container { + padding-left: 6px; + padding-right: 6px; } } + +.mfp-ie7 .mfp-img { + padding: 0; } +.mfp-ie7 .mfp-bottom-bar { + width: 600px; + left: 50%; + margin-left: -300px; + margin-top: 5px; + padding-bottom: 5px; } +.mfp-ie7 .mfp-container { + padding: 0; } +.mfp-ie7 .mfp-content { + padding-top: 44px; } +.mfp-ie7 .mfp-close { + top: 0; + right: 0; + padding-top: 0; } + + + + diff --git a/projects/rocprofiler-systems/source/python/gui/source/assets/media-queries.css b/projects/rocprofiler-systems/source/python/gui/source/assets/media-queries.css new file mode 100644 index 0000000000..01a689ebbb --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/assets/media-queries.css @@ -0,0 +1,382 @@ +/* ================================================================== + +* Ceevee Media Queries +* url: styleshout.com +* 03-18-2014 + +/* ================================================================== */ + + +/* screenwidth less than 1024px +--------------------------------------------------------------------- */ +@media only screen and (max-width: 1024px) { + + /* header styles + ------------------------------------------------------------------ */ + header .banner-text h1 { + font: 80px/1.1em 'opensans-bold', sans-serif; + letter-spacing: -1px; + margin: 0 auto 12px auto; + } + +} + +/* screenwidth less than 900px +--------------------------------------------------------------------- */ +@media only screen and (max-width: 900px) { + + /* header styles + ------------------------------------------------------------------ */ + header .banner { padding-bottom: 12px; } + header .banner-text h1 { + font: 78px/1.1em 'opensans-bold', sans-serif; + letter-spacing: -1px; + } + header .banner-text h3 { + font: 17px/1.9em 'librebaskerville-regular', serif; + width: 80%; + } + header .banner-text hr { + width: 65%; + margin: 12px auto; + } + /* nav-wrap */ + #nav-wrap { + font: 11px 'opensans-bold', sans-serif; + letter-spacing: 1.5px; + } + + + /* About Section + ------------------------------------------------------------------- */ + #about .profile-pic { + width: 114px; + height: 114px; + margin-left: 12px; + } + #about .contact-details { width: 50%; } + #about .download { width: 50%; } + + /* Resume Section + ------------------------------------------------------------------- */ + #resume h1 { font: 16px/24px 'opensans-bold', sans-serif; } + #resume .main-col { padding-right: 5%; } + + /* Testimonials Section + ------------------------------------------------------------------- */ + #testimonials .header-col h1:before { + font-size: 66px; + line-height: 66px; + } + #testimonials blockquote p { + font-size: 22px; + line-height: 46px; + } + + /* Call to Action Section + ------------------------------------------------------------------- */ + #call-to-action .header-col h1:before { + font-size: 66px; + line-height: 66px; + } + + /* Contact Section + ------------------------------------------------------------------- */ + #contact .section-head { margin-bottom: 30px; } + #contact .header-col h1:before { + font-size: 66px; + line-height: 66px; + } + #contact .section-head p.lead { font: 17px/33px opensans-light, sans-serif; } + + +} + +/* mobile wide/smaller tablets +---------------------------------------------------------------------- */ + +@media only screen and (max-width: 767px) { + + /* mobile navigation + -------------------------------------------------------------------- */ + #nav-wrap { + font: 12px 'opensans-bold', sans-serif; + background: transparent !important; + letter-spacing: 1.5px; + width: auto; + position: fixed; + top: 0; + right: 0; + } + #nav-wrap > a { + width: 48px; + height: 48px; + text-align: left; + background-color: #CC5200; + position: relative; + border: none; + float: right; + + font: 0/0 a; + text-shadow: none; + color: transparent; + + position: relative; + top: 0px; + right: 30px; + } + + #nav-wrap > a:before, + #nav-wrap > a:after { + position: absolute; + border: 2px solid #fff; + top: 35%; + left: 25%; + right: 25%; + content: ''; + } + #nav-wrap > a:after { top: 60%; } + + /* toggle buttons */ + #nav-wrap:not( :target ) > a:first-of-type, + #nav-wrap:target > a:last-of-type { + display: block; + } + + /* hide menu panel */ + #nav-wrap ul#nav { + height: auto; + display: none; + clear: both; + width: auto; + float: right; + + position: relative; + top: 12px; + right: 0; + } + + /* display menu panels */ + #nav-wrap:target > ul#nav { + display: block; + padding: 30px 20px 48px 20px; + background: #1f2024; + margin: 0 30px; + clear: both; + } + + ul#nav li { + display: block; + height: auto; + margin: 0 auto; + padding: 0 4%; + text-align: left; + border-bottom: 1px solid #2D2E34; + border-bottom-style: dotted; + } + + ul#nav li a { + display: block; + margin: 0; + padding: 0; + margin: 12px 0; + line-height: 16px; /* reset line-height from 48px */ + border: none; + } + + + /* Header Styles + -------------------------------------------------------------------- */ + header .banner { + padding-bottom: 12px; + padding-top: 6px; + } + header .banner-text h1 { font: 68px/1.1em 'opensans-bold', sans-serif; } + header .banner-text h3 { + font: 16px/1.9em 'librebaskerville-regular', serif; + width: 85%; + } + header .banner-text hr { + width: 80%; + margin: 18px auto; + } + + /* header social links */ + header .social { + margin: 18px 0 24px 0; + font-size: 24px; + line-height: 36px; + } + header .social li { margin: 0 10px; } + + /* scrolldown link */ + header .scrolldown { display: none; } + + + /* About Section + -------------------------------------------------------------------- */ + #about .profile-pic { display: none; } + #about .download .button { + width: 100%; + text-align: center; + padding: 15px 20px; + } + #about .main-col { padding-right: 30px; } + + + /* Resume Section + --------------------------------------------------------------------- */ + #resume .header-col { + padding-top: 0; + margin-bottom: 48px; + text-align: center; + } + #resume h1 { letter-spacing: 3px; } + #resume .main-col { padding-right: 30px; } + #resume h3, #resume .info { text-align: center; } + + .bars { width: 100%; } + + + /* Call To Action Section + /* ----------------------------------------------------------------- */ + #call-to-action { text-align: center; } + #call-to-action h1 { + font: 16px/24px 'opensans-bold', sans-serif; + text-align: center; + margin-bottom: 30px; + text-shadow: 0px 1px 3px rgba(0, 0, 0, 1); + } + #call-to-action h1 span { display: block; } + #call-to-action .header-col h1:before { content: none; } + #call-to-action p { font-size: 15px; } + + + /* Portfolio Section + /* ----------------------------------------------------------------- */ + #portfolio-wrapper .columns { margin-bottom: 40px; } + .popup-modal { max-width: 85%; } + + + /* Testimonials Section + ----------------------------------------------------------------------- */ + #testimonials .text-container { text-align: center; } + #testimonials h1 { + font: 16px/24px 'opensans-bold', sans-serif; + text-align: center; + margin-bottom: 30px; + text-shadow: 0px 1px 3px rgba(0, 0, 0, 1); + } + #testimonials h1 span { display: block; } + #testimonials .header-col h1:before { content: none; } + #testimonials blockquote { padding-bottom: 24px; } + #testimonials blockquote p { + font-size: 20px; + line-height: 42px; + } + + /* Control Nav */ + .flex-control-nav { + text-align: center; + margin-left: -30px; + } + + + /* contact Section + ----------------------------------------------------------------------- */ + #contact { padding-bottom: 66px; } + #contact .section-head { margin-bottom: 12px; } + #contact .section-head h1 { + font: 16px/24px 'opensans-bold', sans-serif; + text-align: center; + margin-bottom: 30px; + text-shadow: 0px 1px 3px rgba(0, 0, 0, 1); + } + #contact h1 span { display: block; } + #contact .header-col { padding-top: 0; } + #contact .header-col h1:before { content: none; } + #contact .section-head p.lead { text-align: center;} + + /* form */ + #contact label { + float: none; + width: 100%; + } + #contact input, + #contact textarea, + #contact select { + margin-bottom: 6px; + width: 100%; + } + #contact button.submit { margin: 30px 0 24px 0; } + #message-warning, #message-success { + width: 100%; + margin-left: 0; + } + + + /* footer + ------------------------------------------------------------------------ */ + + /* copyright */ + footer .copyright li:before { content: none; } + footer .copyright li { margin-right: 12px; } + + /* social links */ + footer .social-links { font-size: 22px; } + footer .social-links li { margin-left: 18px; } + + /* Go To Top Button */ + #go-top { margin-left: -22px; } + #go-top a { + width: 54px; + height: 54px; + font-size: 18px; + line-height: 54px; + } + + +} + +/* mobile narrow + -------------------------------------------------------------------------- */ + +@media only screen and (max-width: 480px) { + + /* mobile navigation + -------------------------------------------------------------------- */ + #nav-wrap ul#nav { width: auto; float: none; } + + /* header styles + -------------------------------------------------------------------- */ + header .banner { padding-top: 24px; } + header .banner-text h1 { + font: 40px/1.1em 'opensans-bold', sans-serif; + margin: 0 auto 24px auto; + } + header .banner-text h3 { + font: 14px/1.9em 'librebaskerville-regular', sans-serif; + width: 90%; + } + + /* header social links */ + header .social { font-size: 20px;} + header .social li { margin: 0 6px; } + + /* footer + ------------------------------------------------------------------------ */ + + /* social links */ + footer .social-links { font-size: 20px; } + footer .social-links li { margin-left: 14px; } + +} + + + + + + + + + diff --git a/projects/rocprofiler-systems/source/python/gui/source/gui.py b/projects/rocprofiler-systems/source/python/gui/source/gui.py new file mode 100644 index 0000000000..2bcf4df709 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/gui.py @@ -0,0 +1,468 @@ +#!/usr/bin/env python3 +# MIT License +# +# Copyright (c) 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from __future__ import absolute_import + +__author__ = "AMD Research" +__copyright__ = "Copyright 2023, Advanced Micro Devices, Inc." +__license__ = "MIT" +__maintainer__ = "AMD Research" +__status__ = "Development" + +import glob +import re +import base64 +import os +import pandas as pd +import dash_bootstrap_components as dbc +import plotly.express as px + +from dash import html +from dash.dependencies import Input, Output, State +from dash import dcc, ctx + +from .header import get_header +from .parser import parse_files +from .parser import parse_uploaded_file +from .parser import find_causal_files +import plotly.graph_objects as go + + +file_timestamp = 0 +global_data = pd.DataFrame() +global_samples = pd.DataFrame() +global_input_filters = None +workload_path = "" +verbose = 0 +text_color = "white" + +pd.set_option( + "mode.chained_assignment", None +) # ignore SettingWithCopyWarning pandas warning + + +def print_speedup_info(data): + for idx in set(list(data.idx)): + sub_data = data[data["idx"] == idx] + print("") + for sub_idx, row in sub_data.iterrows(): + print( + f"""[{row["point"]}][{row["progress points"]}][{row["line speedup"]}] speedup: {row["program speedup"]:6.1f} +/- {row["speedup err"]:6.2f}%""" + ) + print( + f"""[{row["point"]}][{row["progress points"]}][sum] impact: {row["impact sum"]:6.1f}""" + ) + print( + f"""[{row["point"]}][{row["progress points"]}][avg] impact: {row["impact avg"]:6.1f} +/- {row["impact err"]:6.2f}""" + ) + + +def build_line_graph(): + layout1 = html.Div( + id="graph_all", + className="graph", + children=[html.H4("All Causal Profiles", style={"color": text_color})], + ) + + layout2 = html.Div( + id="graph_select", + className="graph", + children=[html.H4("Call Stack Sample Histogram", style={"color": text_color})], + ) + + return layout1, layout2 + + +def update_line_graph( + sort_filter, experiment_list, progpt_list, data, num_points, samples, workloads +): + if "Alphabetical" in sort_filter: + data = data.sort_values(by=["point", "idx"]) + + elif "Impact" in sort_filter: + data = data.sort_values(by=["impact sum", "idx"], ascending=False) + + elif "Max Speedup" in sort_filter: + data = data.sort_values(by=["max speedup", "idx"]) + + elif "Min Speedup" in sort_filter: + data = data.sort_values(by=["min speedup", "idx"]) + + if num_points > 0: + data = data[data["point count"] > num_points] + + mask = data[data.point.isin(experiment_list)] + mask = mask[mask["progress points"].isin(progpt_list)] + mask = mask[mask["workload"].isin(workloads)] + + progress_points = list(mask["progress points"].unique()) + colors = [x / float(len(progress_points)) for x in range(len(progress_points))] + colors_df = pd.DataFrame() + for color, prog in zip(colors, progress_points): + colors_df = pd.concat( + [colors_df, pd.DataFrame({"progress points": [prog], "color": [color * 100]})] + ) + + causalLayout = [html.H4("Selected Causal Profiles", style={"color": text_color})] + + # all the workload should start off with the same Y range so make comparisons easier + y_ranges = [0, 0] + for speedup, speedup_err in zip(mask["program speedup"], mask["speedup err"]): + y_ranges = [ + min([y_ranges[0], speedup - speedup_err]), + max([y_ranges[1], speedup + speedup_err]), + ] + # add some extra room + y_ranges = [ + (round((y_ranges[0] - 5) / 10) * 10) - 1, + (round((y_ranges[1] + 5) / 10) * 10) + 1, + ] + # enforce an absolute lower bound and an abosulte upper bound + # bottom of y_range will not be greater than -1 and not less than -125 + # top of y_range will not be less than 1 and not greater than 125 + y_ranges = [ + max([min([-1, y_ranges[0]]), -125]), + min([max([1, y_ranges[1]]), 125]), + ] + + for point in list(mask.point.unique()): + subplots = go.Figure() + sub_data = mask[mask["point"] == point] + x_label = ( + "Line Speedup" + if re.match(".*:([0-9]+)$", point) is not None + else "Function Speedup" + ) + for prog in list(sub_data["progress points"].unique()): + sub_data_prog = sub_data[sub_data["progress points"] == prog] + subplots.add_trace( + go.Scatter( + x=sub_data_prog["line speedup"], + y=sub_data_prog["program speedup"], + error_y=dict( + type="data", array=sub_data_prog["speedup err"].tolist() + ), + line_shape="spline", + name=prog, + mode="lines+markers", + ), + ).update_xaxes(dtick=5).update_yaxes(range=y_ranges, dtick=10).update_layout( + xaxis={"title": x_label}, + yaxis={"title": "Program Speedup"}, + height=600, + ) + causalLayout.append(html.H4(point, style={"color": text_color})) + causalLayout.append(dcc.Graph(figure=subplots)) + + # compute the location with the most samples + _max_sample = samples.groupby(["location"]).sum()["count"].max() + # don't display samples < 1% of the peak + samples = samples[samples["count"] >= 0.01 * _max_sample] + + fig3 = px.bar(samples, x="location", y="count", height=1200) + + samplesLayout = [ + html.H4("Call Stack Sample Histogram", style={"color": text_color}), + dcc.Graph(figure=fig3), + ] + + return mask, causalLayout, samplesLayout + + +def reset_input_filters(workloads, max_points, verbosity): + sortOptions = ["Alphabetical", "Max Speedup", "Min Speedup", "Impact"] + if type(workloads) == str: + workloads = [workloads] + + input_filters = [ + { + "Name": "Sort by", + "values": list(map(str, sortOptions)), + "default": "Impact", + "type": "Name", + "multi": False, + }, + { + "Name": "Select Workload", + "values": workloads, + "default": workloads, + "type": "Name", + "multi": True, + }, + {"Name": "points", "filter": [], "values": max_points, "type": "int"}, + ] + return input_filters + + +def build_causal_layout( + app, input_filters, path_to_dir, data, samples, verbosity=0, light_mode=True +): + """ + Build gui layout + """ + global verbose + global global_data + global global_samples + global global_input_filters + global workload_path + global text_color + + global_input_filters = input_filters + global_data = data + text_color = "black" if light_mode else "white" + workload_path = path_to_dir + verbose = verbosity + global_samples = samples + + dropDownMenuItems = [ + dbc.DropdownMenuItem("Overview", header=True), + dbc.DropdownMenuItem("All Causal Profiles"), + dbc.DropdownMenuItem("Selected Causal Profiles"), + ] + + app.layout = html.Div( + style={"backgroundColor": "rgb(255, 255, 255)"} + if light_mode + else {"backgroundColor": "rgb(50, 50, 50)"} + ) + + line_graph1, line_graph2 = build_line_graph() + + if verbosity == 3: + print(global_input_filters) + app.layout.children = html.Div( + children=[ + get_header(dropDownMenuItems, global_input_filters), + html.Div(id="container", children=[]), + line_graph1, + line_graph2, + ] + ) + + @app.callback( + Output("container", "children"), + Output("nav-wrap", "children"), + Output("graph_all", "children"), + Output("graph_select", "children"), + [Input("nav-wrap", "children")], + [Input("refresh", "n_clicks")], + [Input("Sort by-filt", "value")], + [Input("Select Workload-filt", "value")], + [Input("experiment_regex", "value")], + [Input("progpt_regex", "value")], + [Input("points-filt", "value")], + [Input("file-path", "value")], + [Input("upload-drag", "contents")], + [State("upload-drag", "filename")], + [State("container", "children")], + ) + def generate_from_filter( + header, + refresh, + sort_filter, + workload_filter, + experiment_regex, + progpt_regex, + num_points, + _workload_path, + contentsList, + filename, + divChildren, + ): + global file_timestamp + global global_data + global global_input_filters + global workload_path + + # change to if debug + if verbose >= 3: + print("Sort by is ", sort_filter) + print("experiment_regex is ", experiment_regex) + print("progress_point_regex is ", progpt_regex) + print("points is: ", num_points) + print("workload_path is: ", workload_path) + print("selected workloads are:", workload_filter) + + divChildren = [] + files = [] + fig1 = None + fig2 = None + global new_data + global experiment_list + global progpt_list + global global_samples + screen_data = pd.DataFrame() + + if _workload_path is not None and os.path.exists(_workload_path): + files = [] + if os.path.isfile(_workload_path): + files.append(_workload_path) + workload_path = [_workload_path] + elif os.path.isdir(_workload_path): + _files = glob.glob(os.path.join(_workload_path, "*.json")) + # subfiles = glob.glob(os.path.join(workload_path, "*/*.coz")) + + subfiles = glob.glob(os.path.join(_workload_path, "*/*.json")) + # metadata = glob.glob(os.path.join(_workload_path, "*/metadata*.json")) + files = _files + subfiles + workload_path = files + global_data, global_samples, global_filenames = parse_files( + workload_path, verbose=verbose + ) + experiment_list = sorted(list(global_data.point.unique())) + progpt_list = sorted(list(global_data["progress points"].unique())) + + max_points = global_data.point.value_counts().max().max() + + # reset input_filters + workloads = [os.path.basename(file) for file in files] + global_input_filters = reset_input_filters(workloads, max_points, verbose) + + screen_data, fig1, fig2 = update_line_graph( + sort_filter, + experiment_list, + progpt_list, + global_data, + num_points, + global_samples, + workloads, + ) + + header = get_header(dropDownMenuItems, global_input_filters) + + elif contentsList is not None: + if ".coz" in filename or ".json" in filename: + new_data_file = base64.decodebytes( + contentsList.encode("utf-8").split(b";base64,")[1] + ).decode("utf-8") + + new_data, global_samples = parse_uploaded_file(filename, new_data_file) + global_data = new_data + + max_points = new_data.point.value_counts().max().max() + + experiment_list = sorted(list(global_data.point.unique())) + progpt_list = sorted(list(global_data["progress points"].unique())) + + # reset input_filters + global_input_filters = reset_input_filters( + [filename], max_points, verbose + ) + + screen_data, fig1, fig2 = update_line_graph( + sort_filter, + experiment_list, + progpt_list, + new_data, + num_points, + global_samples, + workload_filter, + ) + header = get_header(dropDownMenuItems, global_input_filters) + + # runs when function or experiment regex is changed, takes numPoints into account as well + elif experiment_regex is not None or progpt_regex is not None: + if not global_data.empty: + if experiment_regex is not None: + p = re.compile(experiment_regex, flags=0) + + experiment_list = [ + s for s in list(global_data["point"].unique()) if p.match(s) + ] + if progpt_regex is not None: + p = re.compile(progpt_regex, flags=0) + + progpt_list = [ + s + for s in list(global_data["progress points"].unique()) + if p.match(s) + ] + + screen_data, fig1, fig2 = update_line_graph( + sort_filter, + experiment_list, + progpt_list, + global_data, + num_points, + global_samples, + workload_filter, + ) + elif "refresh" == ctx.triggered_id: + if verbose >= 3: + print("refreshing Data with ", workload_path) + + files = find_causal_files(workload_path, verbose, False) + + if verbose >= 3: + print("files found", files) + + global_data, global_samples, global_filenames = parse_files( + files=files, verbose=verbose + ) + + if not global_data.empty: + max_points = global_data.point.value_counts().max().max() + + # reset input_filters + global_input_filters = reset_input_filters( + global_filenames, max_points, verbose + ) + header = get_header(dropDownMenuItems, global_input_filters) + if verbose >= 3: + print(global_data.keys()) + + experiment_list = sorted(list(global_data.point.unique())) + progpt_list = sorted(list(global_data["progress points"].unique())) + + screen_data, fig1, fig2 = update_line_graph( + sort_filter, + experiment_list, + progpt_list, + global_data, + num_points, + global_samples, + global_filenames, + ) + else: + experiment_list = [] + progpt_list = [] + if not global_data.empty: + if verbose == 3: + print(global_data) + experiment_list = sorted(list(global_data.point.unique())) + progpt_list = sorted(list(global_data["progress points"].unique())) + screen_data, fig1, fig2 = update_line_graph( + sort_filter, + experiment_list, + progpt_list, + global_data, + num_points, + global_samples, + workload_filter, + ) + if not screen_data.empty: + if verbose == 2: + print_speedup_info(screen_data) + elif verbose >= 3: + print(screen_data) + + return (divChildren, header, fig1, fig2) diff --git a/projects/rocprofiler-systems/source/python/gui/source/header.py b/projects/rocprofiler-systems/source/python/gui/source/header.py new file mode 100644 index 0000000000..1c51fda53e --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/header.py @@ -0,0 +1,206 @@ +#!/usr/bin/env python3 +# MIT License +# +# Copyright (c) 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import os + +import dash_daq as daq +import dash_bootstrap_components as dbc + +from dash import html, dcc + + +def file_path(): + return html.Div( + className="workload", + children=[ + dcc.Input( + id="file-path", + placeholder="Insert Workload directory", + type="text", + debounce=True, + ) + ], + ) + + +def function_filter(_id, _placeholder): + return html.Div( + className="regex", + children=[ + dcc.Input( + id=_id, + placeholder=_placeholder, + type="text", + debounce=True, + ) + ], + ) + + +def upload_file(): + return html.Div( + className="upload", + children=[ + # drag and drop + dcc.Upload( + id="upload-drag", + children=[html.A("Drag and Drop or Select a File")], + ) + ], + ) + + +def minPoints(name, values): + return html.Div( + className="filter", + id="min-points", + children=[ + # html.Div( + # children=[ + html.A(children=["Min Points:"]), + daq.Slider( + min=0, + max=values, + step=1, + value=1, + id="points-filt", + handleLabel={"showCurrentValue": True, "label": " "}, + size=120, + ), + # ], + # ), + ], + ) + + +def span(name): + total_length = 30 + base = os.path.basename(name) + dir_len = total_length - len(base) + if len(name) > total_length: + return { + "label": html.Span(name[0:dir_len] + "..." + base, title=name), + "value": name, + } + else: + return {"label": html.Span(name, title=name), "value": name} + + +def sortBy(name, values, default, multi_): + values = list(map(span, values)) + return html.Div( + className="filter", + children=[ + html.A(children=[name + ":"]), + dcc.Dropdown( + values, + id=name + "-filt", + multi=multi_, + value=default, + clearable=False, + ), + ], + ) + + +def refresh(): + return html.Div( + className="nav-right", + children=[ + html.Button( + className="refresh", + children=["Refresh Data"], + id="refresh", + ) + ], + ) + + +def get_header(dropDownMenuItems, input_filters): + children_ = [ + html.Nav( + id="nav-wrap", + children=[ + html.Ul( + id="nav", + children=[ + html.Div( + className="nav-left", + children=[ + dbc.DropdownMenu( + dropDownMenuItems, label="Menu", menu_variant="dark" + ) + ], + ) + ], + ) + ], + ) + ] + filter_children = [] + for filter in input_filters: + header_nav = children_[0].children[0].children + + if filter["type"] == "int": + filter_children.append(minPoints(filter["Name"], filter["values"])) + elif filter["type"] == "Name": + filter_children.append( + sortBy( + filter["Name"], + filter["values"], + filter["default"], + filter["multi"], + # {}, + ) + ) + else: + print("type not supported") + # sys.exit(1) + + header_nav = children_[0].children[0].children + filter_children.append(function_filter("experiment_regex", "Experiment regex")) + filter_children.append(function_filter("progpt_regex", "Progress Point regex")) + filter_children.append(file_path()) + filter_children.append(upload_file()) + # filter_children.append(refresh()) + ul = html.Div( + id="nav-center", + className="nav-center", + children=filter_children + # [ + # html.Li(className="filter", children=filter_children), + # refresh(), + # html.Li( + # className="regex", + # children=[ + # function_filter("experiment_regex", "Funtion/line regex"), + # function_filter("progpt_regex", "Experiment regex"), + # file_path(), + # upload_file(), + # ], + # ), + # ], + ) + header_nav.append(ul) + header_nav.append(refresh()) + return html.Header(id="home", children=children_) diff --git a/projects/rocprofiler-systems/source/python/gui/source/parser.py b/projects/rocprofiler-systems/source/python/gui/source/parser.py new file mode 100644 index 0000000000..0886d785d9 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/parser.py @@ -0,0 +1,873 @@ +#!/usr/bin/env python3 +# MIT License +# +# Copyright (c) 2023 Advanced Micro Devices, Inc. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from __future__ import absolute_import + +__author__ = "AMD Research" +__copyright__ = "Copyright 2023, Advanced Micro Devices, Inc." +__license__ = "MIT" +__maintainer__ = "AMD Research" +__status__ = "Development" + +import sys +import json +import jsondiff +import re +import pandas as pd +import numpy as np +import math +from collections import OrderedDict +import os +import glob + +num_stddev = 1.0 + + +def set_num_stddev(_value): + global num_stddev + + num_stddev = _value + + +def mean(_data): + return sum(_data) / float(len(_data)) if len(_data) > 0 else 0.0 + + +def stddev(_data): + if len(_data) == 0: + return 0.0 + _mean = mean(_data) + _variance = sum([((x - _mean) ** 2) for x in _data]) / float(len(_data)) + return float(num_stddev) * math.sqrt(_variance) + + +class validation(object): + def __init__(self, _exp_re, _pp_re, _virt, _expected, _tolerance): + self.experiment_filter = re.compile(_exp_re) + self.progress_pt_filter = re.compile(_pp_re) + self.virtual_speedup = int(_virt) + self.program_speedup = float(_expected) + self.tolerance = float(_tolerance) + + def validate( + self, + _exp_name, + _pp_name, + _virt_speedup, + _prog_speedup, + _prog_speedup_stddev, + _base_speedup_stddev, + ): + if ( + not re.search(self.experiment_filter, _exp_name) + or not re.search(self.progress_pt_filter, _pp_name) + or _virt_speedup != self.virtual_speedup + ): + return None + _tolerance = self.tolerance + if _base_speedup_stddev > 2.0 * self.tolerance: + sys.stderr.write( + f" [{_exp_name}][{_pp_name}][{_virt_speedup}] base speedup has stddev > 2 * tolerance (+/- {_base_speedup_stddev:.3f}). Relaxing validation...\n" + ) + _tolerance += math.sqrt(_base_speedup_stddev) + elif _prog_speedup_stddev > 2.0 * self.tolerance: + sys.stderr.write( + f" [{_exp_name}][{_pp_name}][{_virt_speedup}] program speedup has stddev > 2 * tolerance (+/- {_prog_speedup_stddev:.3f}). Relaxing validation...\n" + ) + _tolerance += math.sqrt(_prog_speedup_stddev) + return _prog_speedup >= (self.program_speedup - _tolerance) and _prog_speedup <= ( + self.program_speedup + _tolerance + ) + + +class throughput_point(object): + def __init__(self, _speedup): + self.speedup = _speedup + self.delta = [] + self.duration = [] + + def __iadd__(self, _data): + self.delta += [float(_data[0])] + self.duration += [float(_data[1])] + + def __len__(self): + return len(self.duration) + + def __eq__(self, rhs): + return self.speedup == rhs.speedup + + def __neq__(self, rhs): + return not self == rhs + + def __lt__(self, rhs): + return self.speedup < rhs.speedup + + def get_data(self): + return [x / y for x, y in zip(self.duration, self.delta)] + + def mean(self): + return sum(self.duration) / sum(self.delta) + + +class latency_point(object): + def __init__(self, _speedup): + self.speedup = _speedup + self.arrivals = [] + self.departures = [] + self.duration = [] + + def __iadd__(self, _data): + self.arrivals += [float(_data[0])] + self.departures += [float(_data[1])] + self.duration += [float(_data[2])] + + def __len__(self): + return len(self.duration) + + def __eq__(self, rhs): + return self.speedup == rhs.speedup + + def __neq__(self, rhs): + return not self == rhs + + def __lt__(self, rhs): + return self.speedup < rhs.speedup + + def get_data(self): + return [y / x for x, y in zip(self.arrivals, self.duration)] + + def get_difference(self): + _duration = sum(self.duration) + return [x / _duration for x in self.duration] + + def mean(self): + rate = sum(self.arrivals) / sum(self.duration) + return sum(self.get_difference()) / rate + + +class line_speedup(object): + def __init__(self, _name="", _prog="", _exp_data=None, _exp_base=None): + self.name = _name + self.prog = _prog + self.data = _exp_data + self.base = _exp_base + + def virtual_speedup(self): + if self.data is None or self.base is None: + return 0.0 + return self.data.speedup + + def compute_speedup(self): + if self.data is None or self.base is None: + return 0.0 + return ((self.base.mean() - self.data.mean()) / self.base.mean()) * 100 + + def compute_speedup_stddev(self): + if self.data is None or self.base is None: + return 0.0 + _data = [] + _base = self.base.mean() + for ditr in self.data.get_data(): + _data += [((_base - ditr) / _base) * 100] + return stddev(_data) + + def get_name(self): + return ":".join( + [ + os.path.basename(x) if os.path.isfile(x) else x + for x in self.name.split(":") + ] + ) + + def __str__(self): + if self.data is None or self.base is None: + return f"{self.name}" + _line_speedup = self.compute_speedup() + _line_stddev = self.compute_speedup_stddev() # 3 stddev == 99.87% + _name = self.get_name() + return f"[{_name}][{self.prog}][{self.data.speedup:3}] speedup: {_line_speedup:6.1f} +/- {_line_stddev:6.2f} %" + + def __eq__(self, rhs): + return ( + self.name == rhs.name + and self.prog == rhs.prog + and self.data == rhs.data + and self.base == rhs.base + ) + + def __neq__(self, rhs): + return not self == rhs + + def __lt__(self, rhs): + if self.name != rhs.name: + return self.name < rhs.name + elif self.prog != rhs.prog: + return self.prog < rhs.prog + elif self.data != rhs.data: + return self.data < rhs.data + elif self.base != rhs.base: + return self.base < rhs.base + return False + + +class experiment_progress(object): + def __init__(self, _data): + self.data = _data + + def get_impact(self): + speedup_c = [x.compute_speedup() for x in self.data] + speedup_v = [x.virtual_speedup() for x in self.data] + impact = [] + for i in range(len(self.data) - 1): + x = speedup_v[i + 1] - speedup_v[i] + y = [speedup_c[i], speedup_c[i + 1]] + y_min = min(y) + y_max = max(y) + a_low = x * y_min + a_upp = 0.5 * x * (y_max - y_min) + impact += [a_low + a_upp] + # impact = [x.compute_speedup() for x in self.data] + return [sum(impact), mean(impact), stddev(impact)] + + def __len__(self): + return len(self.data) + + def __str__(self): + _impact_v = self.get_impact() + _name = self.data[0].get_name() + _prog = self.data[0].prog + _impact = [ + f"[{_name}][{_prog}][sum] impact: {_impact_v[0]:6.1f}", + f"[{_name}][{_prog}][avg] impact: {_impact_v[1]:6.1f} +/- {_impact_v[2]:6.2f}", + ] + return "\n".join([f"{x}" for x in self.data] + _impact) + + def __lt__(self, rhs): + self.data.sort() + return self.get_impact()[0] < rhs.get_impact()[0] + + +def process_samples(data, _data): + if not _data: + return data + for record in _data["omnitrace"]["causal"]["records"]: + for samp in record["samples"]: + _info = samp["info"] + _count = samp["count"] + _func = _info["dfunc"] + if _func not in data: + data[_func] = 0 + data[_func] += _count + for dwarf_entry in _info["dwarf_info"]: + _name = "{}:{}".format(dwarf_entry["file"], dwarf_entry["line"]) + if _name not in data: + data[_name] = 0 + data[_name] += _count + return data + + +def process_data(data, _data, experiments, progress_points): + def find_or_insert(_data, _value, _type): + if _value not in _data: + if _type == "throughput": + _data[_value] = throughput_point(_value) + elif _type == "latency": + _data[_value] = latency_point(_value) + else: + raise RuntimeError(f"unknown data type: {_type}") + return _data[_value] + + if not _data: + return data + + _selection_filter = re.compile(experiments) + _progresspt_filter = re.compile(progress_points) + + for record in _data["omnitrace"]["causal"]["records"]: + for exp in record["experiments"]: + _speedup = exp["virtual_speedup"] + _duration = exp["duration"] + _file = exp["selection"]["info"]["file"] + _line = exp["selection"]["info"]["line"] + _func = exp["selection"]["info"]["dfunc"] + _sym_addr = exp["selection"]["symbol_address"] + _selected = ":".join([_file, f"{_line}"]) if _sym_addr == 0 else _func + if not re.search(_selection_filter, _selected): + continue + if _selected not in data: + data[_selected] = {} + for pts in exp["progress_points"]: + _name = pts["name"] + if not re.search(_progresspt_filter, _name): + continue + if _name not in data[_selected]: + data[_selected][_name] = {} + if "delta" in pts: + _delt = pts["delta"] + if _delt > 0: + itr = find_or_insert( + data[_selected][_name], _speedup, "throughput" + ) + itr += [_delt, _duration] + elif "arrival" in pts and pts["arrival"] > 0: + itr = find_or_insert(data[_selected][_name], _speedup, "latency") + itr += [pts["arrival"], pts["departure"], _duration] + else: + _delt = pts["laps"] + if _delt > 0: + itr = find_or_insert(data[_selected][_name], _speedup) + itr += [_delt, _duration] + return data + + +def compute_speedups(runs, speedups=[], num_points=0, validate=[], debug=False): + out = pd.DataFrame() + data = {} + for workload in runs: + _data = runs[workload] + for selected, pitr in _data.items(): + if selected not in data: + data[selected] = {} + for progpt, ditr in pitr.items(): + data[selected][progpt] = OrderedDict(sorted(ditr.items())) + + ret = [] + for selected, pitr in _data.items(): + for progpt, ditr in pitr.items(): + if 0 not in ditr.keys(): + print(f"missing baseline data for {progpt} in {selected}...") + continue + for speedup, itr in ditr.items(): + if len(speedups) > 0 and speedup not in speedups: + continue + if speedup != itr.speedup: + raise ValueError(f"in {selected}: {speedup} != {itr.speedup}") + _val = line_speedup(selected, progpt, itr, ditr[0]) + ret.append(_val) + ret.sort() + _last_name = None + _last_prog = None + result = [] + for itr in ret: + if itr.name != _last_name or itr.prog != _last_prog: + result.append([]) + result[-1].append(itr) + _last_name = itr.name + _last_prog = itr.prog + _data = [] + for itr in result: + experiment_prog = experiment_progress(itr) + _data.append(experiment_prog) + if len(itr) != 0: + impact = experiment_prog.get_impact() + for itrx in itr: + speedup = itrx.compute_speedup() + line_stddev = itrx.compute_speedup_stddev() + if speedup <= 200 and speedup >= -100: + out = pd.concat( + [ + out, + pd.DataFrame( + { + "idx": [(itrx.prog, itrx.name)], + "progress points": [itrx.prog], + "point": [itrx.name], + "line speedup": [itrx.virtual_speedup()], + "program speedup": [speedup], + "speedup err": line_stddev, + "impact sum": impact[0], + "impact avg": impact[1], + "impact err": float(impact[2]), + "workload": workload, + } + ), + ], + ignore_index=True, + ) + _data.sort() + + if debug: + for itr in _data: + if len(itr) < num_points: + continue + print("") + print(f"{itr}") + sys.stdout.flush() + validations = get_validations(validate) + expected_validations = len(validations) + correct_validations = 0 + if expected_validations > 0: + print(f"\nPerforming {expected_validations} validations...\n") + for eitr in _data: + _experiment = eitr.data[0].get_name() + _progresspt = eitr.data[0].prog + _base_speedup_stddev = eitr.data[0].compute_speedup_stddev() + for ditr in eitr.data: + _virt_speedup = ditr.virtual_speedup() + _prog_speedup = ditr.compute_speedup() + _prog_speedup_stddev = ditr.compute_speedup_stddev() + for vitr in validations: + _v = vitr.validate( + _experiment, + _progresspt, + _virt_speedup, + _prog_speedup, + _prog_speedup_stddev, + _base_speedup_stddev, + ) + if _v is None: + continue + if _v is True: + correct_validations += 1 + else: + sys.stderr.write( + f" [{_experiment}][{_progresspt}][{_virt_speedup}] failed validation: {_prog_speedup:8.3f} != {vitr.program_speedup} +/- {vitr.tolerance}\n" + ) + if expected_validations != correct_validations: + sys.stderr.flush() + sys.stderr.write( + f"\nCausal profiling predictions not validated. Expected {expected_validations}, found {correct_validations}\n" + ) + sys.stderr.flush() + sys.exit(-1) + elif expected_validations > 0: + print(f"Causal profiling predictions validated: {expected_validations}") + + return out + + +def get_validations(validate): + data = [] + _len = len(validate) + if _len == 0: + return data + elif _len % 5 != 0: + raise ValueError( + "validation requires format: {0}experiment regex{1} {0}progress-point regex{1} {0}virtual-speedup{1} {0}expected-speedup{1} {0}tolerance{1} (i.e. 5 args per validation. There are {2} extra/missing arguments".format( + "{", "}", _len % 5 + ) + ) + v = validate + for i in range(int(_len / 5)): + off = 5 * i + data.append( + validation(v[off + 0], v[off + 1], v[off + 2], v[off + 3], v[off + 4]) + ) + return data + + +def compute_sorts(_data): + Max_speedup_order = _data.sort_values( + by="program speedup", ascending=False + ).point.unique() + Min_speedup_order = _data.sort_values( + by="program speedup", ascending=True + ).point.unique() + point_counts = _data.point.value_counts() + # speedups = pd.DataFrame(_data["Line Speedup"].unique(), columns=["Line Speedup"]) + + _data["max speedup"] = np.nan + _data["min speedup"] = np.nan + _data["point count"] = np.nan + + for index in _data.index: + _data.at[index, "max speedup"] = np.where( + Max_speedup_order == _data.at[index, "point"] + )[0][0] + _data.at[index, "min speedup"] = np.where( + Min_speedup_order == _data.at[index, "point"] + )[0][0] + _data.at[index, "point count"] = point_counts[_data.at[index, "point"]] + return _data + + +def is_valid_data_point(data): + return not math.isnan(data) and not math.isinf(data) + + +def get_value(splice): + if "type" in splice: + # Something might happen here later + print("type found in coz file, finish adding code") + sys.exit(1) + if "difference" in splice or "speedup" in splice: + return float(splice[1]) + else: + return splice[1] + + +def add_throughput(df, experiment, value): + ix = (experiment["selected"], value["name"], experiment["speedup"]) + df_points = list(df.index) + if ix not in df_points: + new_row = pd.DataFrame( + data={ + # "selected" : [experiment["selected"]], + # "speedup" : [float(experiment["speedup"])], + "delta": [float(value["delta"])], + "duration": [float(experiment["duration"])], + "type": ["throughput"], + }, + index=[ix], + ) + df = pd.concat([new_row, df]) + else: + df["delta"][ix] = df["delta"][ix] + float(value["delta"]) + df["duration"][ix] = df["duration"][ix] + float(experiment["duration"]) + return df + + +def add_latency(df, experiment, value): + ix = (experiment["selected"], experiment["speedup"]) + df_points = list(df.index) + if ix not in df_points: + df = pd.concat( + [ + df, + pd.Dataframe( + data={ + "selected": [experiment["selected"]], + "point": [value["name"]], + "speedup": [float(experiment["speedup"])], + "arrivals": [float(value["arrivals"])], + "departures": [float(value["departures"])], + "duration": [0], + "type": ["latency"], + } + ), + ] + ) + + if value.duration == 0: + df["difference"] = value.difference + else: + duration = df["duration"][ix] + float(experiment["duration"]) + df["difference"][ix] = df["difference"][ix] * df["duration"][ix] / duration + df["difference"][ix] = ( + df["difference"] + + (float(value["difference"]) * float(experiment["duration"])) / duration + ) + + df["duration"] = df["duration"] + float(experiment["duration"]) + + return df + + +def parse_files( + files, + experiments=".*", + progress_points=".*", + speedups=[], + num_points=0, + validate=[], + verbose=0, + cli=False, +): + result_df = pd.DataFrame() + sample_df = pd.DataFrame() + + def name_wo_ext(x): + return x.replace(".json", "").replace(".coz", "") + + json_files = [x for x in filter(lambda y: y.endswith(".json"), files)] + coz_files = [x for x in filter(lambda y: y.endswith(".coz"), files)] + read_files = [] + file_names = [] + + # prefer JSON files first + files = json_files + coz_files + for file in files: + if verbose >= 3: + print(f"Potentially reading causal profile: '{file}'...") + + _base_name = name_wo_ext(file) + # do not read in a COZ file if the JSON already read + if _base_name in read_files: + continue + + if verbose >= 3 or (verbose >= 1 and not cli): + print(f"Reading causal profile: '{file}'...") + + if file.endswith(".json"): + with open(file, "r") as j: + _data = json.load(j) + dict_data = {} + # make sure the JSON is an omnitrace causal JSON + if "omnitrace" not in _data or "causal" not in _data["omnitrace"]: + continue + dict_data[file] = process_data({}, _data, experiments, progress_points) + samps = process_samples({}, _data) + sample_df = pd.concat( + [ + sample_df, + pd.DataFrame( + [ + {"location": loc, "count": count} + for loc, count in sorted(samps.items()) + ] + ), + ] + ) + result_df = pd.concat( + [ + result_df, + compute_sorts( + compute_speedups( + dict_data, + speedups, + num_points, + validate, + verbose >= 3 or cli, + ) + ), + ] + ) + read_files.append(_base_name) + file_names.append(file) + + elif file.endswith(".coz"): + try: + f = open(file, "r") + except IOError as e: + sys.stderr.write(f"{e}\n") + continue + + lines = f.readlines() + # Parse lines + experiment = None + samps = {} + data = pd.DataFrame() + + for line in lines: + if line != "\n": + data_type = "" + value = {} + sections = line.split("\t") + if len(sections) == 0: + continue + value["type"] = sections[0] + for section in sections: + splice = section.split("\n")[0].split("=") + if len(splice) > 1: + val = get_value(splice) + value[splice[0]] = val + else: + data_type = splice[0] + if data_type == "experiment": + experiment = value + elif data_type == "throughput-point" or data_type == "progress-point": + experiment["speedup"] = 100 * experiment["speedup"] + data = add_throughput(data, experiment, value) + elif data_type == "latency-point": + data = add_latency(data, experiment, value) + elif data_type == "samples": + if value["location"] not in samps: + samps[value["location"]] = 0 + samps[value["location"]] += int(value["count"]) + elif data_type not in ["startup", "shutdown", "runtime"]: + print("Invalid profile") + + result_df = pd.concat( + [ + result_df, + get_speedup_data(data.sort_index()), + ] + ) + sample_df = pd.concat( + [ + sample_df, + pd.DataFrame( + [ + {"location": loc, "count": count} + for loc, count in sorted(samps.items()) + ] + ), + ] + ) + read_files.append(_base_name) + file_names.append(file) + + return result_df, sample_df, file_names + + +def parse_uploaded_file(file_name, file, experiments=".*", progress_points=".*"): + data = pd.DataFrame() + if "{" in file: + dict_data = {} + _data = json.loads(file) + + dict_data = { + file_name: process_data(dict_data, _data, experiments, progress_points) + } + samps = process_samples({}, _data) + sample_data = pd.DataFrame( + [{"location": loc, "count": count} for loc, count in sorted(samps.items())] + ) + data = compute_sorts(compute_speedups(dict_data)) + return data, sample_data + + else: + # coz + for line in file.split("\n"): + if len(line) > 0: + data_type = "" + value = {} + sections = line.split("\t") + value["type"] = sections[0] + for section in sections: + splice = section.split("\n")[0].split("=") + if len(splice) > 1: + value[splice[0]] = get_value(splice) + else: + data_type = splice[0] + if data_type == "experiment": + experiment = value + elif data_type == "throughput-point" or data_type == "progress-point": + experiment["speedup"] = 100 * experiment["speedup"] + data = add_throughput(data, experiment, value) + elif data_type == "latency-point": + data = add_latency(data, experiment, value) + elif data_type not in ["startup", "shutdown", "samples", "runtime"]: + print("Invalid profile") + # sys.exit(1) + data = get_speedup_data(data.sort_index()) + return data + + +def get_data_point(data): + val = "" + if math.isclose(data.delta, 0, rel_tol=1e-09, abs_tol=0.0): + return np.nan + if data["type"] == "throughput": + val = data.duration / data.delta + + return val + elif data["type"] == "latency": + arrivalRate = data.arrivals / data.duration + val = data.difference / arrivalRate + else: + print("invalid datapoint") + val = np.inf + if math.isinf(val): + return np.nan + else: + return val + + +def get_speedup_data(data): + baseline_data_point = get_data_point(data.iloc[0]) + speedup_df = pd.DataFrame() + curr_selected = "" + for index, row in data.iterrows(): + if curr_selected != index[0]: + curr_selected = index[0] + baseline_data_point = get_data_point(row) + + maximize = True + + if row["type"] == "latency": + maximize = False + + if not math.isnan(baseline_data_point): + # for speedup in row: + data_point = get_data_point(row) + if not math.isnan(data_point): + progress_speedup = ( + baseline_data_point - data_point + ) / baseline_data_point + # speedup = row["speedup"] + speedup = row.name[2] + + name = row.name[0] + + if not maximize: + # We are trying to *minimize* this progress point, so negate the speedup. + progress_speedup = -progress_speedup + + if progress_speedup >= -1 and progress_speedup <= 2: + speedup_df = pd.concat( + [ + pd.DataFrame.from_dict( + data={ + "point": [name], + "speedup": [speedup], + "progress_speedup": [100 * progress_speedup], + } + ), + speedup_df, + ] + ) + speedup_df = speedup_df.sort_values(by=["speedup"]) + return speedup_df + + +def find_causal_files(workload_path, verbose, recursive): + input_files = [] + + def find_causal_files_helper(inp, _files): + _input_files_tmp = [] + for itr in _files: + if os.path.isfile(itr) and itr.endswith(".json"): + with open(itr, "r") as f: + inp_data = json.load(f) + if ( + "omnitrace" not in inp_data.keys() + or "causal" not in inp_data["omnitrace"].keys() + ): + if verbose >= 2: + print(f"{itr} is not a causal profile") + continue + _input_files_tmp += [itr] + elif os.path.isfile(itr) and itr.endswith(".coz"): + _input_files_tmp += [itr] + return _input_files_tmp + + for inp in workload_path: + if verbose == 3: + print("find_causal_files inp:", inp) + if os.path.exists(inp): + if os.path.isdir(inp): + _files = glob.glob(os.path.join(inp, "**"), recursive=recursive) + _input_files_tmp = find_causal_files_helper(inp, _files) + if len(_input_files_tmp) == 0: + raise ValueError(f"No causal profiles found in {inp}") + else: + input_files += _input_files_tmp + elif os.path.isfile(inp): + input_files += [inp] + else: + _files = glob.glob(inp, recursive=recursive) + _input_files_tmp = find_causal_files_helper(inp, _files) + if len(_input_files_tmp) == 0: + raise ValueError(f"No causal profiles found in {inp}") + else: + input_files += _input_files_tmp + return input_files + + +def metadata_diff(json1, json2): + res = jsondiff.diff(json1, json2) + if res: + print("Diff found") + else: + print("Same") diff --git a/projects/rocprofiler-systems/source/python/gui/source/workloads/producer_consumer/profile.coz b/projects/rocprofiler-systems/source/python/gui/source/workloads/producer_consumer/profile.coz new file mode 100644 index 0000000000..afa9b851c3 --- /dev/null +++ b/projects/rocprofiler-systems/source/python/gui/source/workloads/producer_consumer/profile.coz @@ -0,0 +1,24 @@ +startup time=1668112322692628451 +experiment selected=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:61 speedup=0.45 duration=458583304 selected-samples=50 +throughput-point name=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:63 delta=188627 +experiment selected=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:53 speedup=0.20 duration=451826807 selected-samples=110 +throughput-point name=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:63 delta=195079 +experiment selected=/usr/include/c++/9/bits/stl_deque.h:375 speedup=0.05 duration=490437380 selected-samples=24 +throughput-point name=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:63 delta=213386 +experiment selected=/usr/include/c++/9/bits/stl_deque.h:375 speedup=0.00 duration=500060800 selected-samples=28 +throughput-point name=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:63 delta=212555 +experiment selected=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:36 speedup=0.45 duration=418026736 selected-samples=82 +throughput-point name=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:63 delta=167074 +runtime time=2581062440 +samples location=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:36 count=484 +samples location=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:38 count=82 +samples location=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:42 count=270 +samples location=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:43 count=158 +samples location=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:53 count=527 +samples location=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:61 count=233 +samples location=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:62 count=162 +samples location=/home/jose/coz/benchmarks/producer_consumer/producer_consumer.cpp:63 count=258 +samples location=/usr/include/c++/9/bits/deque.tcc:166 count=1 +samples location=/usr/include/c++/9/bits/deque.tcc:171 count=1 +samples location=/usr/include/c++/9/bits/stl_deque.h:375 count=146 +samples location=/usr/include/c++/9/bits/stl_deque.h:1609 count=1