From e490a33be753ebe29ee68e389d961b27cf0e3159 Mon Sep 17 00:00:00 2001 From: Sam Bull Date: Mon, 6 Jan 2025 19:51:11 +0000 Subject: [PATCH] Migrate project to a new home --- .github/dependabot.yml | 11 - .github/workflows/auto-merge.yml | 22 - .github/workflows/ci.yml | 23 - .gitignore | 6 - .mypy.ini | 25 - LICENSE | 21 - README.md | 84 +- adapter.py | 321 - agent.py | 103 - bluetooth_devices.py | 269 - bt-hid-hub-bt-devices.png | Bin 55417 -> 0 bytes bt-hid-hub-devices.png | Bin 39974 -> 0 bytes bthidhubarchitecture.png | Bin 90051 -> 0 bytes bthidhuboverall.png | Bin 182588 -> 0 bytes compatibility_device.py | 212 - filters/README.md | 199 - filters/__init__.py | 0 hid_devices.py | 431 - install/install_windows.bat | 1 - install/on_rpi/config_replacer.py | 13 - install/on_rpi/input.conf | 48 - install/on_rpi/main.conf | 110 - install/on_rpi/on_pi_setup.sh | 61 - install/on_rpi/remapper.service | 14 - install/setup.sh | 9 - install/ssh | 0 install/userconf | 1 - install/wpa_supplicant.conf | 8 - password.py | 13 - remapper.py | 30 - requirements.txt | 12 - sdp_record_template.xml | 120 - stubs/dasbus/__init__.pyi | 0 stubs/dasbus/connection.pyi | 47 - stubs/dasbus/server/__init__.pyi | 0 stubs/dasbus/server/interface.pyi | 5 - stubs/dasbus/typing.pyi | 28 - stubs/evdev/__init__.pyi | 42 - stubs/evdev/ecodes.pyi | 122 - web.py | 244 - web/.gitignore | 23 - web/css/main.css | 52 - web/css/materialize.css | 9067 -------------------- web/css/materialize.min.css | 13 - web/index.html | 219 - web/js/agent.js | 87 - web/js/jquery-3.5.1.min.js | 2 - web/js/main.js | 391 - web/js/materialize.js | 12374 ---------------------------- web/js/materialize.min.js | 6 - web/js/websocket-manager.js | 114 - 51 files changed, 3 insertions(+), 25000 deletions(-) delete mode 100644 .github/dependabot.yml delete mode 100644 .github/workflows/auto-merge.yml delete mode 100644 .github/workflows/ci.yml delete mode 100644 .gitignore delete mode 100644 .mypy.ini delete mode 100644 LICENSE delete mode 100644 adapter.py delete mode 100644 agent.py delete mode 100644 bluetooth_devices.py delete mode 100644 bt-hid-hub-bt-devices.png delete mode 100644 bt-hid-hub-devices.png delete mode 100644 bthidhubarchitecture.png delete mode 100644 bthidhuboverall.png delete mode 100644 compatibility_device.py delete mode 100644 filters/README.md delete mode 100644 filters/__init__.py delete mode 100644 hid_devices.py delete mode 100644 install/install_windows.bat delete mode 100644 install/on_rpi/config_replacer.py delete mode 100644 install/on_rpi/input.conf delete mode 100644 install/on_rpi/main.conf delete mode 100644 install/on_rpi/on_pi_setup.sh delete mode 100644 install/on_rpi/remapper.service delete mode 100644 install/setup.sh delete mode 100644 install/ssh delete mode 100644 install/userconf delete mode 100644 install/wpa_supplicant.conf delete mode 100644 password.py delete mode 100644 remapper.py delete mode 100644 requirements.txt delete mode 100644 sdp_record_template.xml delete mode 100644 stubs/dasbus/__init__.pyi delete mode 100644 stubs/dasbus/connection.pyi delete mode 100644 stubs/dasbus/server/__init__.pyi delete mode 100644 stubs/dasbus/server/interface.pyi delete mode 100644 stubs/dasbus/typing.pyi delete mode 100644 stubs/evdev/__init__.pyi delete mode 100644 stubs/evdev/ecodes.pyi delete mode 100644 web.py delete mode 100644 web/.gitignore delete mode 100644 web/css/main.css delete mode 100644 web/css/materialize.css delete mode 100644 web/css/materialize.min.css delete mode 100644 web/index.html delete mode 100644 web/js/agent.js delete mode 100644 web/js/jquery-3.5.1.min.js delete mode 100644 web/js/main.js delete mode 100644 web/js/materialize.js delete mode 100644 web/js/materialize.min.js delete mode 100644 web/js/websocket-manager.js diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 4c58ef4..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,11 +0,0 @@ -version: 2 -updates: - - package-ecosystem: pip - directory: "/" - schedule: - interval: monthly - - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: monthly diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml deleted file mode 100644 index 8e5b142..0000000 --- a/.github/workflows/auto-merge.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Dependabot auto-merge -on: pull_request_target - -permissions: - pull-requests: write - contents: write - -jobs: - dependabot: - runs-on: ubuntu-latest - if: ${{ github.actor == 'dependabot[bot]' }} - steps: - - name: Dependabot metadata - id: metadata - uses: dependabot/fetch-metadata@v2.2.0 - with: - github-token: "${{ secrets.GITHUB_TOKEN }}" - - name: Enable auto-merge for Dependabot PRs - run: gh pr merge --auto --squash "$PR_URL" - env: - PR_URL: ${{github.event.pull_request.html_url}} - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index af0a960..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: CI - -on: [pull_request, push] - -jobs: - mypy: - name: Mypy - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: 3.9 - - name: Install libgirepository - run: sudo apt install -y libgirepository1.0-dev - - name: Install dependencies - uses: py-actions/py-dependency-install@v4 - with: - path: requirements.txt - - name: Run mypy - run: mypy diff --git a/.gitignore b/.gitignore deleted file mode 100644 index c1c7d16..0000000 --- a/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -filters/*.py -*.so -__pycache__/ -build/ -install/on_rpi/bluez/ -devices_config.json diff --git a/.mypy.ini b/.mypy.ini deleted file mode 100644 index c598ff0..0000000 --- a/.mypy.ini +++ /dev/null @@ -1,25 +0,0 @@ -[mypy] -files = adapter.py, agent.py, bluetooth_devices.py, compatibility_device.py, hid_devices.py, filters/ -check_untyped_defs = True -follow_imports_for_stubs = True -disallow_any_decorated = True -disallow_any_explicit = True -disallow_any_expr = True -disallow_any_generics = True -disallow_any_unimported = True -disallow_incomplete_defs = True -disallow_subclassing_any = True -disallow_untyped_calls = True -disallow_untyped_decorators = True -disallow_untyped_defs = True -implicit_reexport = False -mypy_path = stubs/ -no_implicit_optional = True -show_error_codes = True -strict_equality = True -warn_incomplete_stub = True -warn_no_return = True -warn_redundant_casts = True -warn_return_any = True -warn_unreachable = True -warn_unused_ignores = True diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 45ca9d1..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 ruundii - -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. diff --git a/README.md b/README.md index 0a37808..2c42171 100644 --- a/README.md +++ b/README.md @@ -1,83 +1,5 @@ -# Bluetooth HID hub +This project can now be found at https://github.com/Dreamsorcerer/bthidhub -BT HID Hub Diagram -BT HID Hub Architecture Diagram - -This hub uses a modified version of the Bluez linux bluetooth protocol stack (https://github.com/ruundii/bluez). -The modified version extends bluetooth input profile to be able to **simultaneously** support host and device -connections (vs default input device connections only). With this you can e.g. retransmit Bluetooth input devices to other machines. - -The **Bluetooth HID hub** presents itself to a host computer as a Bluetooth multifunctional device. -The hub receives events from multiple input devices (wired and BT) and then transmits them to the host, -essentially acting as a proxy. This has been tested on a **Raspberry Pi Zero W**. - -## Install Instructions - -The install script is for the bullseye release. If a newer version of Raspberry Pi OS is available you can -either find an older release or test and fix the install script (and then send us a PR with the fixes). - -1. Flash Raspberry Pi OS (32-bit) Lite (https://www.raspberrypi.org/downloads/raspberry-pi-os/) to an SD card. -2. If you didn't configure user, network and SSH via the Pi Imager, then mount the SD card as a drive. - - * Copy wpa_supplicant.conf, ssh and userconf files from the install/ directory to the root of the boot partition. - * Update Wifi network/password in wpa_supplicant.conf. - * Optionally, update username/password in userconf (A password hash can be produced with: `echo 'mypassword' | openssl passwd -6 -stdin`). -3. Plug SD card into the RPi and start it. -4. Get the IP address of the newly booted RPi. - -Windows: - - 5. Install putty: https://www.putty.org/ - 6. Edit install_windows.bat and update the IP address and password. - 7. Run install_windows.bat, follow prompts until complete. - -Linux/Mac: - - 5. Run: ``ssh pi@[rpi-ip-address] 'bash -s' < setup.sh`` - Password, if not change above, is 'raspberry'. - -That last step could take an hour to complete. -When the RPi reboots, the LED will switch off once the service is ready to use. - -Finally, go to http://[rpi-ip-address]:8080 for the web configuration interface. - -## Usage - -From the Bluetooth devices tab you can pair each device you want to use. Any laptop/phone -should appear as a 'Paired Host'. - -Bluetooth devices screen - -Back on the HID devices tab, you should see all the currently connected devices (wired and BT). -Click the capture checkbox for each device you want to start proxying events from. -Note that the BT will restart each time a new device is enabled. - -HID devices screen - - -Added an ability to switch hosts with a keyboard (Fn+Cmd+Tab on Apple A1314 keyboard). Now can use the hub as an input for several computers, easily switching which one is currently active. - -## Upgrading - -To upgrade to the latest release without reinstalling from scratch, you'll need to SSH into the RPi -(as done in the install instructions). Then run: - -``` -cd $HOME/bthidhub/ -git pull -sudo pip3 install -r requirements.txt --upgrade -mypyc -sudo systemctl restart remapper -``` - -The `mypyc` command may take upto 20 mins, but will help optimise the performance. - -Additionally, you should check if there were any changes in the install/ directory -(https://github.com/ruundii/bthidhub/commits/master/install). -You may need to manually make changes to the system to match the changes in the installation. - -## Misc - -Inspired by [RaspiKey](https://github.com/samartzidis/RaspiKey), but wanted the solution to stay wireless, as this is why I bought Apple wireless keyboard in the first place. By doing this it allowed to turn my wired mouse to wireless as well and have one keyboard+mouse for two machines. Also, Python implementation should allow people to easily customize their mappings. -If you want to do this, check out [hid-tools](https://gitlab.freedesktop.org/libevdev/hid-tools) to monitor raw hid reports from your device. +Due to @ruundii being unavailable for several years and because I don't have admin access +to this repository, I've decided to migrate the project to a new home to ease maintenance. diff --git a/adapter.py b/adapter.py deleted file mode 100644 index dde0ae4..0000000 --- a/adapter.py +++ /dev/null @@ -1,321 +0,0 @@ -# Copyright (c) 2020 ruundii. All rights reserved. - -import asyncio -from collections.abc import Container -from datetime import datetime, timedelta -from typing import Awaitable, Callable, Optional, TypedDict, cast - -from dasbus.connection import InterfaceProxy, SystemMessageBus -import dasbus.typing as dt - -from agent import Action, Agent -from bluetooth_devices import BluetoothDeviceRegistry, INPUT_DEVICE_INTERFACE, INPUT_HOST_INTERFACE -from hid_devices import HIDDeviceRegistry - - -class _Device(TypedDict): - path: str - address: str - alias: str - paired: bool - trusted: bool - connected: bool - host: bool - - -class _GetDevices(TypedDict): - devices: list[_Device] - scanning: bool - - -DBUS_PATH_PROFILE = '/ruundii/btkb_profile' -DBUS_PATH_AGENT = '/ruundii/btkb_agent' -ROOT_OBJECT = '/org/bluez' -ADAPTER_OBJECT = '/org/bluez/hci0' -ADAPTER_INTERFACE = 'org.bluez.Adapter1' -DEVICE_INTERFACE = 'org.bluez.Device1' -OBJECT_MANAGER_INTERFACE = 'org.freedesktop.DBus.ObjectManager' -DEVICE_NAME = 'Bluetooth HID Hub - RPi' -UUID = '00001124-0000-1000-8000-00805f9b34fb' - - -class BluetoothAdapter: - adapter: Optional[InterfaceProxy] = None - - def __init__(self, bus: SystemMessageBus, loop: asyncio.AbstractEventLoop, - bluetooth_devices: BluetoothDeviceRegistry, hid_devices: HIDDeviceRegistry): - self.bus = bus - self.loop = loop - self.bluetooth_devices = bluetooth_devices - self.hid_devices = hid_devices - self.agent_published = False - self.agent: Optional[Agent] = None - self.om_proxy_initialised = False - self.initialising_adapter = False - self.scan_start_time: Optional[datetime] = None - self.discoverable_start_time: Optional[datetime] = None - self.on_agent_action_handler: Optional[Callable[[Action], Awaitable[None]]] = None - self.on_interface_changed_handler: Optional[Callable[[], Awaitable[None]]] = None - asyncio.run_coroutine_threadsafe(self.init(), loop=self.loop) - - async def init(self) -> None: - await self.wait_bt_service_run() - if not self.om_proxy_initialised: - om = self.bus.get_proxy(service_name="org.bluez", object_path="/", interface_name=OBJECT_MANAGER_INTERFACE) - om.InterfacesAdded.connect(self.interfaces_added) - om.InterfacesRemoved.connect(self.interfaces_removed) - self.om_proxy_initialised = True - self.wait_till_adapter_present_then_init_sync() - - def bt_service_running(self) -> bool: - try: - om = self.bus.get_proxy(service_name= "org.bluez", object_path="/", interface_name=OBJECT_MANAGER_INTERFACE) - om.GetManagedObjects() - return True - except: - return False - - async def wait_bt_service_run(self) -> None: - while not self.bt_service_running(): - print("No BT service. Waiting...") - await asyncio.sleep(2) - - def adapter_exists(self) -> bool: - try: - adapter = self.bus.get_proxy(service_name="org.bluez", object_path=ADAPTER_OBJECT, interface_name=ADAPTER_INTERFACE) - return adapter.Version == "Hacked" - except: - return False - - def wait_till_adapter_present_then_init_sync(self) -> None: - if self.initialising_adapter: - return # already initing - self.initialising_adapter = True - asyncio.run_coroutine_threadsafe(self.wait_till_adapter_present_then_init(), loop=self.loop) - - async def wait_till_adapter_present_then_init(self) -> None: - while not self.adapter_exists(): - print("No BT adapter. Waiting...") - await asyncio.sleep(2) - - self.register_agent() - self.adapter = self.bus.get_proxy(service_name="org.bluez", object_path=ADAPTER_OBJECT, - interface_name="org.bluez.Adapter1") - - while not self.powered: - print("Bluetooth adapter is turned off. Trying to turn on") - try: - self.powered = True - if (self.powered): - print("Successfully turned on") - else: - print("Failed to turn on. Please turn on Bluetooth in the system") - except Exception: - print("Failed to turn on. Please turn on Bluetooth in the system") - await asyncio.sleep(2) - - self.alias = DEVICE_NAME - await self.bluetooth_devices.remove_devices() - self.bluetooth_devices.add_devices() - self.initialising_adapter = False - - - def interfaces_added(self, obj_name: str, interfaces: Container[str]) -> None: - self.on_interface_changed() - if not self.adapter_exists(): - return - if (obj_name==ADAPTER_OBJECT or obj_name==ROOT_OBJECT): - print("Bluetooth adapter added. Starting") - self.wait_till_adapter_present_then_init_sync() - - elif INPUT_HOST_INTERFACE in interfaces: - self.bluetooth_devices.add_device(obj_name, True) - - elif INPUT_DEVICE_INTERFACE in interfaces: - self.bluetooth_devices.add_device(obj_name, False) - - def interfaces_removed(self, obj_name: str, interfaces: Container[str]) -> None: - if (obj_name==ADAPTER_OBJECT or obj_name==ROOT_OBJECT): - self.adapter = None - asyncio.run_coroutine_threadsafe(self.bluetooth_devices.remove_devices(), loop=self.loop) - print("Bluetooth adapter removed. Stopping") - asyncio.run_coroutine_threadsafe(self.init(), loop=self.loop) - elif INPUT_HOST_INTERFACE in interfaces or INPUT_DEVICE_INTERFACE in interfaces: - asyncio.run_coroutine_threadsafe(self.bluetooth_devices.remove_device(obj_name), loop=self.loop) - self.on_interface_changed() - - def register_agent(self) -> None: - if not self.agent_published: - self.agent = Agent() - self.agent.set_on_agent_action_handler(self.on_agent_action) - self.bus.publish_object(DBUS_PATH_AGENT, self.agent) - self.agent_published = True - agent_manager = self.bus.get_proxy(service_name="org.bluez", object_path="/org/bluez", - interface_name="org.bluez.AgentManager1") - agent_manager.RegisterAgent(DBUS_PATH_AGENT, "KeyboardDisplay") - agent_manager.RequestDefaultAgent(DBUS_PATH_AGENT) - print("Agent registered") - - def start_scan(self) -> None: - if self.adapter is not None: - #self.adapter.SetDiscoveryFilter({"UUIDs":dt.get_variant(dt.List[dt.Str], [UUID])}) - self.scan_start_time = datetime.now() - self.adapter.StartDiscovery() - asyncio.run_coroutine_threadsafe(self.__shutdown_scanning(), loop=self.loop) - - def stop_scan(self) -> None: - if self.adapter is not None: - self.adapter.StopDiscovery() - #self.adapter.SetDiscoveryFilter({}) - - async def __shutdown_scanning(self) -> None: - while self.adapter is not None \ - and self.adapter.Discovering \ - and self.scan_start_time is not None \ - and (self.scan_start_time+timedelta(seconds=60))>datetime.now(): - await asyncio.sleep(1) - if self.adapter is not None and self.adapter.Discovering: - self.stop_scan() - - def start_discoverable(self) -> None: - if self.adapter is not None: - self.discoverable_start_time = datetime.now() - self.discoverable = True - self.discoverable_timeout = 0 - asyncio.run_coroutine_threadsafe(self.__shutdown_discoverable(), loop=self.loop) - - def stop_discoverable(self) -> None: - if self.adapter is not None: - self.discoverable = False - - async def __shutdown_discoverable(self) -> None: - while self.adapter is not None \ - and self.discoverable \ - and self.discoverable_start_time is not None \ - and (self.discoverable_start_time+timedelta(seconds=120))>datetime.now(): - await asyncio.sleep(1) - if self.adapter is not None and self.discoverable: - self.discoverable = False - - def agent_request_confirmation_response(self, device: str, passkey: str, confirmed: bool) -> None: - if self.agent_published and self.agent is not None: - self.agent.request_confirmation_response(device, passkey, confirmed) - - def get_devices(self) -> _GetDevices: - if self.adapter is None: - return {"devices": [], "scanning": False } - om = self.bus.get_proxy(service_name="org.bluez", object_path="/", interface_name=OBJECT_MANAGER_INTERFACE) - objs = om.GetManagedObjects() - devices: list[_Device] = [] - for path in objs: - obj = objs[path] - if DEVICE_INTERFACE in obj: - dev = obj[DEVICE_INTERFACE] - devices.append({ - "path" : path, - "address" : cast(str, dt.unwrap_variant(dev["Address"])), - "alias": cast(str, dt.unwrap_variant(dev["Alias"])), - "paired": cast(bool, dt.unwrap_variant(dev["Paired"])), - "trusted": cast(bool, dt.unwrap_variant(dev["Trusted"])), - "connected": cast(bool, dt.unwrap_variant(dev["Connected"])), - "host" : INPUT_HOST_INTERFACE in obj - }) - return {"devices": devices, "scanning": self.adapter.Discovering} - - def device_action(self, action: str, device_path: str) -> None: - if self.adapter is None: - return - dp = self.bus.get_proxy(service_name="org.bluez", object_path=device_path, interface_name=DEVICE_INTERFACE) - try: - if action == 'pair': - try: - dp.CancelPairing() - except: - pass - dp.Pair() - elif action == 'connect': - dp.Connect() - elif action == 'disconnect': - dp.Disconnect() - except Exception as exc: - print(exc) - self.on_interface_changed() - - def remove_device(self, device_path: str) -> None: - if self.adapter is None: - return - try: - self.adapter.RemoveDevice(device_path) - except Exception as exc: - print(exc) - - def cancel_pairing(self, device_path: str) -> None: - if self.adapter is None: - return - try: - dp = self.bus.get_proxy(service_name="org.bluez", object_path=device_path, interface_name=DEVICE_INTERFACE) - dp.CancelPairing() - except: - pass - - def set_on_agent_action_handler(self, handler: Callable[[Action], Awaitable[None]]) -> None: - self.on_agent_action_handler = handler - - def on_agent_action(self, msg: Action) -> None: - if self.on_agent_action_handler is not None: - asyncio.run_coroutine_threadsafe(self.on_agent_action_handler(msg), loop=self.loop) - - def set_on_interface_changed_handler(self, handler: Callable[[], Awaitable[None]]) -> None: - self.on_interface_changed_handler = handler - - def on_interface_changed(self) -> None: - if self.on_interface_changed_handler is not None: - asyncio.run_coroutine_threadsafe(self.on_interface_changed_handler(), loop=self.loop) - - @property - def powered(self) -> bool: - if self.adapter is None: - return False - return self.adapter.Powered - - @powered.setter - def powered(self, new_value: bool) -> None: - if self.adapter is None: - return - self.adapter.Powered = new_value - - @property - def alias(self) -> str: - if self.adapter is None: - return "" - return self.adapter.Alias - - @alias.setter - def alias(self, new_value: str) -> None: - if self.adapter is None: - return - self.adapter.Alias = new_value - - @property - def discoverable(self) -> bool: - if self.adapter is None: - return False - return self.adapter.Discoverable - - @discoverable.setter - def discoverable(self, new_value: bool) -> None: - if self.adapter is None: - return - self.adapter.Discoverable = new_value - - @property - def discoverable_timeout(self) -> int: - if self.adapter is None: - return 0 - return self.adapter.DiscoverableTimeout - - @discoverable_timeout.setter - def discoverable_timeout(self, new_value: int) -> None: - if self.adapter is None: - return - self.adapter.DiscoverableTimeout = new_value diff --git a/agent.py b/agent.py deleted file mode 100644 index d2a015a..0000000 --- a/agent.py +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright (c) 2020 ruundii. All rights reserved. - -import asyncio -from datetime import datetime, timedelta -from typing import Callable, Optional, TypedDict - -import dasbus.typing as dt -from dasbus.server.interface import dbus_interface -from dasbus.connection import SystemMessageBus - - -class Action(TypedDict, total=False): - action: str - device: dt.ObjPath - entered: dt.UInt16 - passkey: str - pincode: str - - -bus = SystemMessageBus() - -def ask(prompt: str) -> str: - return input(prompt) - -def set_trusted(device_path: str) -> None: - device = bus.get_proxy(service_name="org.bluez", object_path=device_path, interface_name="org.bluez.Device1") - device.Trusted = True - -def dev_connect(device_path: str) -> None: - device = bus.get_proxy(service_name="org.bluez", object_path=device_path, interface_name="org.bluez.Device1") - device.Connect() - - -# Decorator won't work with compiled class as it depends on introspection. -# If you update anything in this class, then uncomment the below line, and add a -# print(self.__dbus_xml__) into the init method. Then copy and paste the updated string -# to replace the hardcoded one below. -#@dbus_interface("org.bluez.Agent1") -class Agent: - def __init__(self) -> None: - self.on_agent_action_handler: Optional[Callable[[Action], None]] = None - self.request_confirmation_device: Optional[dt.ObjPath] = None - self.request_confirmation_passkey: Optional[str] = None - self.__dbus_xml__ = '' - - def Release(self) -> None: - self.on_agent_action({'action':'agent_released'}) - print("Agent Release") - - def AuthorizeService(self, device: dt.ObjPath, uuid: dt.Str) -> None: - print("AuthorizeService (%s, %s)" % (device, uuid)) - set_trusted(device) - self.on_agent_action({'action':'service_autorised', 'device':device}) - # authorize = ask("Authorize connection (yes/no): ") - # if (authorize == "yes"): - # set_trusted(device) - # return - # raise Exception("Connection rejected by user") - - def RequestPinCode(self, device: dt.ObjPath) -> dt.Str: - print("RequestPinCode (%s)" % (device)) - set_trusted(device) - return ask("Enter PIN Code: ") - - def RequestPasskey(self, device: dt.ObjPath) -> dt.UInt32: - print("RequestPasskey (%s)" % (device)) - set_trusted(device) - passkey = int(ask("Enter passkey: ")) - return dt.UInt32(passkey) - - def DisplayPinCode(self, device: dt.ObjPath, pincode: dt.Str) -> None: - print("DisplayPinCode (%s, %s)" % (device, pincode)) - self.on_agent_action({'action':'display_pin_code', 'pincode':pincode, 'device':device}) - - def RequestConfirmation(self, device: dt.ObjPath, passkey: dt.UInt32) -> None: - print("RequestConfirmation (%s, %06d)" % (device, passkey)) - self.request_confirmation_device = device - self.request_confirmation_passkey = str(passkey).zfill(6) - self.on_agent_action({'action':'confirm_passkey', 'passkey':str(passkey).zfill(6), 'device':device}) - - def request_confirmation_response(self, device: str, passkey: str, confirmed: bool) -> None: - if self.request_confirmation_device == device and passkey==self.request_confirmation_passkey and confirmed: - set_trusted(device) - else: - self.request_confirmation_device = None - self.request_confirmation_passkey = None - - def RequestAuthorization(self, device: dt.ObjPath) -> None: - print("RequestAuthorization (%s)" % (device)) - auth = ask("Authorize? (yes/no): ") - if (auth != "yes"): - raise Exception("Pairing rejected") - - def Cancel(self) -> None: - self.on_agent_action({'action':'agent_cancel'}) - print("Cancel") - - def on_agent_action(self, msg: Action) -> None: - if self.on_agent_action_handler is not None: - self.on_agent_action_handler(msg) - - def set_on_agent_action_handler(self, handler: Callable[[Action], None]) -> None: - self.on_agent_action_handler = handler diff --git a/bluetooth_devices.py b/bluetooth_devices.py deleted file mode 100644 index 2fc7a32..0000000 --- a/bluetooth_devices.py +++ /dev/null @@ -1,269 +0,0 @@ -# Copyright (c) 2020 ruundii. All rights reserved. - -import asyncio -import socket -import os -from concurrent.futures import Future -from contextlib import suppress -from subprocess import DEVNULL, PIPE -from typing import Awaitable, Callable, Optional, TYPE_CHECKING - -from dasbus.connection import SystemMessageBus - -if TYPE_CHECKING: - from hid_devices import HIDDeviceRegistry - -OBJECT_MANAGER_INTERFACE = 'org.freedesktop.DBus.ObjectManager' -DEVICE_INTERFACE = 'org.bluez.Device1' -PROPERTIES_INTERFACE = 'org.freedesktop.DBus.Properties' -INPUT_DEVICE_INTERFACE = 'org.bluez.Input1' -INPUT_HOST_INTERFACE = 'org.bluez.InputHost1' - -IGNORE_INPUT_DEVICES = True - -class BluetoothDevice: - def __init__(self, bus: SystemMessageBus, loop: asyncio.AbstractEventLoop, - device_registry: "BluetoothDeviceRegistry", object_path: str, - is_host: bool, control_socket_path: str, interrupt_socket_path: str): - self.device = bus.get_proxy(service_name="org.bluez", object_path=object_path, interface_name=DEVICE_INTERFACE) - self.props = bus.get_proxy(service_name="org.bluez", object_path=object_path, interface_name=PROPERTIES_INTERFACE) - self.props.PropertiesChanged.connect(self.device_connected_state_changed) - - self.bus = bus - self.loop = loop - self.device_registry = device_registry - self.object_path = object_path - self.is_host = is_host - self.control_socket_path: Optional[str] = control_socket_path - self.control_socket: Optional[socket.socket] = None - self.interrupt_socket_path: Optional[str] = interrupt_socket_path - self.interrupt_socket: Optional[socket.socket] = None - self.sockets_connected = False - self._tasks: set[Future[None]] = set() - - print("BT Device ",object_path," created") - asyncio.run_coroutine_threadsafe(self.reconcile_connected_state(1), loop=self.loop) - - async def reconcile_connected_state(self, delay: int) -> None: - await asyncio.sleep(delay) - try: - if self.connected and not self.sockets_connected: - await self.connect_sockets() - elif not self.connected and self.sockets_connected: - await self.disconnect_sockets() - except Exception as exc: - print("Possibly dbus error during reconcile_connected_state ",exc) - - async def connect_sockets(self) -> None: - if self.sockets_connected or self.control_socket_path is None or self.interrupt_socket_path is None: - return - print("Connecting sockets for ",self.object_path) - if not self.connected: - print("BT Device is not connected. No point connecting sockets. Skipping.") - try: - self.control_socket = socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET) - self.control_socket.connect(self.control_socket_path) - self.control_socket.setblocking(False) - - self.interrupt_socket = socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET) - self.interrupt_socket.connect(self.interrupt_socket_path) - self.interrupt_socket.setblocking(False) - self.sockets_connected = True - if(self.is_host): - self.device_registry.connected_hosts.append(self) - addr = self.object_path[-17:].replace("_",":") - asyncio.create_task(self.device_registry.switch_to_master(addr)) - else: - self.device_registry.connected_devices.append(self) - print("Connected sockets for ",self.object_path) - self._tasks.add(asyncio.run_coroutine_threadsafe(self.loop_of_fun(True), loop=self.loop)) - self._tasks.add(asyncio.run_coroutine_threadsafe(self.loop_of_fun(False), loop=self.loop)) - except Exception as err: - print("Error while connecting sockets for ",self.object_path,". Will retry in a sec", err) - try: - if self.control_socket is not None: - self.control_socket.close() - if self.interrupt_socket is not None: - self.interrupt_socket.close() - except: - pass - await asyncio.sleep(1) - asyncio.run_coroutine_threadsafe(self.connect_sockets(), loop=self.loop) - - async def disconnect_sockets(self) -> None: - for t in self._tasks: - t.cancel() - # TODO: Reenable if we manage to turn this into tasks (i.e. not use coroutine_threasfe). - #with suppress(asyncio.CancelledError): - # await t - - if self.control_socket is not None: - self.control_socket.close() - self.control_socket = None - if self.interrupt_socket is not None: - self.interrupt_socket.close() - self.interrupt_socket = None - if(self.is_host and self in self.device_registry.connected_hosts): - self.device_registry.connected_hosts.remove(self) - elif self in self.device_registry.connected_devices: - self.device_registry.connected_devices.remove(self) - self.sockets_connected = False - - print("Disconnected sockets for ",self.object_path) - - - async def loop_of_fun(self, is_ctrl: bool) -> None: - sock = self.control_socket if is_ctrl else self.interrupt_socket - while sock is not None: - try: - msg = await self.loop.sock_recv(sock,255) - except Exception: - print("Cannot read data from socket. ", self.object_path ,"Closing sockets") - if self is not None: - try: - await self.disconnect_sockets() - except: - print("Error while disconnecting sockets") - print("Arranging reconnect") - asyncio.run_coroutine_threadsafe(self.reconcile_connected_state(1), loop=self.loop) - break - if msg is None or len(msg)==0: - continue - self.device_registry.send_message(msg, not self.is_host, is_ctrl) - sock = self.control_socket if is_ctrl else self.interrupt_socket - - - @property - def name(self) -> str: - return self.device.Name - - @property - def alias(self) -> str: - return self.device.Alias - - @property - def connected(self) -> bool: - return self.device.Connected - - def __eq__(self, other: object) -> bool: - if isinstance(other, BluetoothDevice): - return self.object_path == other.object_path - return False - - def device_connected_state_changed(self, _arg1: object, _arg2: object, _arg3: object) -> None: - print("device_connected_state_changed") - asyncio.run_coroutine_threadsafe(self.reconcile_connected_state(1), loop=self.loop) - if self.device_registry.on_devices_changed_handler is not None: - asyncio.run_coroutine_threadsafe(self.device_registry.on_devices_changed_handler(), loop=self.loop) - - async def finalise(self) -> None: - self.props.PropertiesChanged.disconnect(self.device_connected_state_changed) - self.control_socket_path = None - self.interrupt_socket_path = None - # Close sockets - await self.disconnect_sockets() - print("BT Device ",self.object_path," finalised") - - - def __del__(self) -> None: - print("BT Device ",self.object_path," removed") - -class BluetoothDeviceRegistry: - def __init__(self, bus: SystemMessageBus, loop: asyncio.AbstractEventLoop): - self.bus = bus - self.loop = loop - self.all: dict[str, BluetoothDevice] = {} - self.connected_hosts: list[BluetoothDevice] = [] - self.connected_devices: list[BluetoothDevice] = [] - self.on_devices_changed_handler: Optional[Callable[[], Awaitable[None]]] = None - self.hid_devices: Optional["HIDDeviceRegistry"] = None - self.current_host_index = 0 - - def set_hid_devices(self, hid_devices: "HIDDeviceRegistry") -> None: - self.hid_devices = hid_devices - - def set_on_devices_changed_handler(self, handler: Callable[[], Awaitable[None]]) -> None: - self.on_devices_changed_handler = handler - - def add_devices(self) -> None: - print("Adding all BT devices") - om = self.bus.get_proxy(service_name= "org.bluez", object_path="/", interface_name=OBJECT_MANAGER_INTERFACE) - objs = om.GetManagedObjects() - - for obj in list(objs): - if INPUT_HOST_INTERFACE in objs[obj]: - self.add_device(obj, True) - - elif INPUT_DEVICE_INTERFACE in objs[obj]: - self.add_device(obj, False) - - def add_device(self, device_object_path: str, is_host: bool) -> None: - if(IGNORE_INPUT_DEVICES and not is_host): return - - if device_object_path in self.all: - print("Device ", device_object_path, " already exist. Cannot add. Skipping.") - return - #ensure master role for this connection, otherwise latency of sending packets to hosts may get pretty bad - asyncio.ensure_future(self.switch_to_master(device_object_path[-17:].replace("_",":"))) - p = self.bus.get_proxy(service_name="org.bluez", object_path=device_object_path, interface_name=INPUT_HOST_INTERFACE if is_host else INPUT_DEVICE_INTERFACE) - device = BluetoothDevice(self.bus, self.loop, self, device_object_path, is_host, p.SocketPathCtrl, p.SocketPathIntr) - self.all[device_object_path] = device - - async def switch_to_master(self, device_address: str) -> None: - print("switch to master called for ", device_address) - while await self.is_slave(device_address): - try: - proc = await asyncio.create_subprocess_exec("sudo", "hcitool", "sr", device_address, "MASTER", stdout=DEVNULL) - await proc.wait() - print("hcitool ", device_address, " success:", proc.returncode == 0) - except Exception as exc: - print("hcitool ",device_address," exception:",exc) - await asyncio.sleep(5) - - async def is_slave(self, device_address: str) -> bool: - proc = await asyncio.create_subprocess_exec("sudo", "hcitool", "con", stdout=PIPE, stderr=DEVNULL) - stdout, stderr = await proc.communicate() - return any("SLAVE" in l and device_address in l for l in stdout.decode().split("\n")) - - async def remove_devices(self) -> None: - print("Removing all BT devices") - while len(self.all) >0: - await self.remove_device(list(self.all)[0]) - - - async def remove_device(self, device_object_path: str) -> None: - if device_object_path not in self.all: - return # No such device - device = self.all[device_object_path] - del self.all[device_object_path] - list = self.connected_hosts if device.is_host else self.connected_devices - if device in list: - list.remove(device) - await device.finalise() - - def switch_host(self) -> None: - self.current_host_index = (self.current_host_index + 1) % len(self.connected_hosts) - - def __get_current_host_as_list(self) -> list[BluetoothDevice]: - if len(self.connected_hosts) <= self.current_host_index: - return [] - return [self.connected_hosts[self.current_host_index]] - - def send_message(self, msg: bytes, send_to_hosts: bool, is_control_channel: bool) -> None: - if IGNORE_INPUT_DEVICES and not send_to_hosts and not is_control_channel and self.hid_devices is not None: - asyncio.run_coroutine_threadsafe(self.hid_devices.send_message_to_devices(msg), loop=self.loop) - return - targets: list[BluetoothDevice] = self.__get_current_host_as_list() if send_to_hosts else self.connected_devices - for target in list(targets): - try: - socket = target.control_socket if is_control_channel else target.interrupt_socket - if socket is not None: - socket.sendall(msg) - except Exception: - print("Cannot send data to socket of ",target.object_path,". Closing") - if target is not None: - try: - asyncio.run_coroutine_threadsafe(target.disconnect_sockets(), loop=self.loop) - except: - print("Error while trying to disconnect sockets") - asyncio.run_coroutine_threadsafe(target.reconcile_connected_state(1), loop=self.loop) diff --git a/bt-hid-hub-bt-devices.png b/bt-hid-hub-bt-devices.png deleted file mode 100644 index b68b6ddcf12d74d893d1fbb7ceb43d7d3c315b71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55417 zcmd3N19N6g+ijAGojbPeOl;eBCbn(kj*W?J+qN}HW@2YzJ2`ou=dJpF!FSH7+Pil5 zRlB;Y`&zAatp+N}OCZ4Fz=D8)AV^7yDuaN4Wr2Wz7D7XQSpwsR1;0L^&dL(PAT=|1 zCtn$Gb0Ik)5Rm#fxHm(HuRM%{q?R)X2!7aqUQoRP)IboBRYWOKAyp6kvuubTXcD+# zTa#M6{q${}JfXtZsTkT+`b~oKyNXo;7m9iGi1ZigMS|D67Z*RlcgLUKx6Ure)8ZA+ zsPebIW&X*|*vQVt_mt2GwW~h=v5ClzyL|+=$|Z>%W{4GLh}TBl3qQ#8pJxxC>A>=D znjsW|^1nvq|8I@sxQ#FoKuCDzfaww}76!49MreDK3zD}CB)BLszgA{@M!E92>Snz) z^G&pCnIGirv#63KeQaKsu&Y|+ z6pw{QxFMQVWNj_^!;WwF@SJND&)I3OFH(9x>2Uvm(Dz4z zSuHQHyVbKzR&V)f3T%31;zi4Vbp14+moi%XX!MC4whC^MsN|f_ zAnK{+_6HcuW)mFQdmXZ)3yi!mW=@Vu{m8#sbGs)=&EbzVh5AU;aogb2SMW$&D-YVuR{;6}I|>va zf5}ExqU`bf!{)st(c!hrf?A8|bCTCD^pT)Cn%Wl&h2oui4{s|cQhfki6gK}I$zpx! ziO#@~&UQiEtMuL47c?ZE2sK8&R!C7*H>%=*ymsg8F-=P3^4mYiNq-DlK2j(cn35{v z@`vQl;6a$ycnj<1sHJY{o6Yr)0VCrl9qLrNj=uNoP3E|I>jA9*_|YrHad*{s8Jjw4jn9gD7hhnR`{rJvLEAgr(A zpnb3=W0VzboMZ-#Lsh4joK7MVU_N{NGI1Rqja5rBVkY^0NVH9vtVFhtZLWKON_WtJ z)hyHyYvi667~PlONLjzPt991lLm(4(F*<7O*Z1VhgNE4`(t$wadQU+*P+ad;;2}#e zSS_ork-{+^g^F}xc=^1j?6dB9jn^{&QS0r#{YR`Z|D}eSyV{_p4IH*~HbQR$YGO|! zL(~)D3tuIKeijRmgShO4)$L91Po~a32Gy`jzZ@z6Vp4mKTR3FwuXj2~ue%6TrLTQr zr5Qt}$>;{^Rlz8#nS}b6*3o4;glu5ST|bYT(j}WHY#{Q|NLc=^9=a2=H@AJ>DzBO= z3LDOkGfnkIXio*9??K>arY|M1u!Wtk7qo#ymLkQEAosAwPIQvIBo5UN%|>b8iJqn$ zPoSY{iDFi)3YW_QHo6P$7qE9Eiu(nlpHU@)799!e$;q?CFx|*fig$m5I2T`slkXbHA$D80Oz}qgn$|{R-(P#tjyF24{C4#ppdq&W7Sa%>|-hxW|hoIf%KL zPb8yfqhpf1JgZ95IJR>Ejc)cyBf8wk)vL?WDQR0FZk7Wr zc=O)-$jEz|cW*5*=ePC

rK2@0yA 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 Gj`|lxMI%K3 diff --git a/bt-hid-hub-devices.png b/bt-hid-hub-devices.png deleted file mode 100644 index cf88ca2b76fad11c59093dede3786dc3028ff4f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39974 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 z
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%0Dw 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 QcoC)xE&nz+|5=>>2P-s%djJ3c diff --git a/compatibility_device.py b/compatibility_device.py deleted file mode 100644 index 7a0606d..0000000 --- a/compatibility_device.py +++ /dev/null @@ -1,212 +0,0 @@ -import asyncio - -from evdev import InputDevice, categorize, ecodes -from hidtools.uhid import UHIDDevice - -CONSUMER_KEYS_EVENT_TO_USAGE_FLAG_MAPPING = { - ecodes.KEY_NEXTSONG : 0x01, # Usage (Scan Next Track) - ecodes.KEY_PREVIOUSSONG : 0x02, # Usage (Scan Previous Track) - ecodes.KEY_STOP : 0x04, # Usage (Stop) - ecodes.KEY_PLAYPAUSE : 0x08, # Usage (Play/Pause) - ecodes.KEY_MUTE : 0x10, # Usage (Mute) - ecodes.KEY_VOLUMEUP : 0x20, # Usage (Volume Increment) - ecodes.KEY_VOLUMEDOWN : 0x40, # Usage (Volume Decrement) -} - -MODIFIER_KEYS_EVENT_TO_USAGE_FLAG_MAPPING = { - ecodes.KEY_LEFTCTRL : 0x01, - ecodes.KEY_LEFTSHIFT : 0x02, - ecodes.KEY_LEFTALT : 0x04, - ecodes.KEY_LEFTMETA : 0x08, - ecodes.KEY_RIGHTCTRL : 0x10, - ecodes.KEY_RIGHTSHIFT : 0x20, - ecodes.KEY_RIGHTALT : 0x40, - ecodes.KEY_RIGHTMETA: 0x80, -} - -#see https://www.usb.org/sites/default/files/hut1_2.pdf -#a bit unsure about US layouts and HID usage 31, now producing 0x32 usage for key_backslash, not sure if 0x31 need to be produced for us backslash. also ecodes.KEY_102ND -NORMAL_KEYS_EVENT_TO_USAGE_FLAG_MAPPING = { - ecodes.KEY_RESERVED : 0x00, - ecodes.KEY_A: 0x04, - ecodes.KEY_B: 0x05, - ecodes.KEY_C: 0x06, - ecodes.KEY_D: 0x07, - ecodes.KEY_E: 0x08, - ecodes.KEY_F: 0x09, - ecodes.KEY_G: 0x0A, - ecodes.KEY_H: 0x0B, - ecodes.KEY_I: 0x0C, - ecodes.KEY_J: 0x0D, - ecodes.KEY_K: 0x0E, - ecodes.KEY_L: 0x0F, - ecodes.KEY_M: 0x10, - ecodes.KEY_N: 0x11, - ecodes.KEY_O: 0x12, - ecodes.KEY_P: 0x13, - ecodes.KEY_Q: 0x14, - ecodes.KEY_R: 0x15, - ecodes.KEY_S: 0x16, - ecodes.KEY_T: 0x17, - ecodes.KEY_U: 0x18, - ecodes.KEY_V: 0x19, - ecodes.KEY_W: 0x1A, - ecodes.KEY_X: 0x1B, - ecodes.KEY_Y: 0x1C, - ecodes.KEY_Z: 0x1D, - ecodes.KEY_1: 0x1E, - ecodes.KEY_2: 0x1F, - ecodes.KEY_3: 0x20, - ecodes.KEY_4: 0x21, - ecodes.KEY_5: 0x22, - ecodes.KEY_6: 0x23, - ecodes.KEY_7: 0x24, - ecodes.KEY_8: 0x25, - ecodes.KEY_9: 0x26, - ecodes.KEY_0: 0x27, - ecodes.KEY_ENTER: 0x28, - ecodes.KEY_ESC: 0x29, - ecodes.KEY_BACKSPACE: 0x2A, - ecodes.KEY_TAB: 0x2B, - ecodes.KEY_SPACE: 0x2C, - ecodes.KEY_MINUS: 0x2D, - ecodes.KEY_EQUAL: 0x2E, - ecodes.KEY_LEFTBRACE: 0x2F, - ecodes.KEY_RIGHTBRACE: 0x30, - ecodes.KEY_BACKSLASH: 0x32, - ecodes.KEY_SEMICOLON: 0x33, - ecodes.KEY_APOSTROPHE: 0x34, - ecodes.KEY_GRAVE: 0x35, - ecodes.KEY_COMMA: 0x36, - ecodes.KEY_DOT: 0x37, - ecodes.KEY_SLASH: 0x38, - ecodes.KEY_CAPSLOCK: 0x39, - ecodes.KEY_F1: 0x3A, - ecodes.KEY_F2: 0x3B, - ecodes.KEY_F3: 0x3C, - ecodes.KEY_F4: 0x3D, - ecodes.KEY_F5: 0x3E, - ecodes.KEY_F6: 0x3F, - ecodes.KEY_F7: 0x40, - ecodes.KEY_F8: 0x41, - ecodes.KEY_F9: 0x42, - ecodes.KEY_F10: 0x43, - ecodes.KEY_F11: 0x44, - ecodes.KEY_F12: 0x45, - ecodes.KEY_SYSRQ: 0x46, #print screen - ecodes.KEY_SCROLLLOCK: 0x47, - ecodes.KEY_PAUSE: 0x48, - ecodes.KEY_INSERT: 0x49, - ecodes.KEY_HOME: 0x4A, - ecodes.KEY_PAGEUP: 0x4B, - ecodes.KEY_DELETE: 0x4C, - ecodes.KEY_END: 0x4D, - ecodes.KEY_PAGEDOWN: 0x4E, - ecodes.KEY_RIGHT: 0x4F, - ecodes.KEY_LEFT: 0x50, - ecodes.KEY_DOWN: 0x51, - ecodes.KEY_UP: 0x52, - ecodes.KEY_NUMLOCK: 0x53, - ecodes.KEY_KPSLASH: 0x54, - ecodes.KEY_KPASTERISK: 0x55, - ecodes.KEY_KPMINUS: 0x56, - ecodes.KEY_KPPLUS: 0x57, - ecodes.KEY_KPENTER: 0x58, - ecodes.KEY_KP1: 0x59, - ecodes.KEY_KP2: 0x5A, - ecodes.KEY_KP3: 0x5B, - ecodes.KEY_KP4: 0x5C, - ecodes.KEY_KP5: 0x5D, - ecodes.KEY_KP6: 0x5E, - ecodes.KEY_KP7: 0x5F, - ecodes.KEY_KP8: 0x60, - ecodes.KEY_KP9: 0x61, - ecodes.KEY_KP0: 0x62, - ecodes.KEY_KPDOT: 0x63, - ecodes.KEY_102ND: 0x64, #uk pipe and backslash - ecodes.KEY_COMPOSE: 0x65, - ecodes.KEY_POWER: 0x66, - ecodes.KEY_KPEQUAL: 0x67, - ecodes.KEY_F13: 0x68, - ecodes.KEY_F14: 0x69, - ecodes.KEY_F15: 0x6a, - ecodes.KEY_F16: 0x6b, - ecodes.KEY_F17: 0x6c, - ecodes.KEY_F18: 0x6d # last usage for the HID descriptor - -} - -class CompatibilityModeDevice: - def __init__(self, loop: asyncio.AbstractEventLoop, device_path: str): - self.device_path = device_path - self.loop = loop - self.ev_device = InputDevice(device_path) - self.ev_device.grab() - self.hidraw_device = UHIDDevice() - self.hidraw_device.name = "BT HID Hub Virtual Hid Raw Keyboard" - self.hidraw_device.info = (0x06, 0x0001, 0x0001) # 0x06 - BUS_VIRTUAL, vendor id 1 product id 1 - self.hidraw_device.phys = "0" - self.hidraw_device.rdesc = bytearray.fromhex( # type: ignore[assignment] - "05010906a1018501050719e029e715002501750195088102950175088103950575010508190129059102950175039103950675081500256d05071900296d8100c0050C0901A1018502050C150025017501950709B509B609B709CD09E209E909EA810295018101C0") - self.pressed_keys: list[int] = [] - self.pressed_consumer_keys: list[int] = [] - - self.hidraw_device.create_kernel_device() - asyncio.run_coroutine_threadsafe(self.__read_events(),self.loop) - print("Compatibility Device ",self.device_path," initialised") - - async def __read_events(self) -> None: - async for ev in self.ev_device.async_read_loop(): - if ev.type == ecodes.EV_KEY and ev.value < 2: - print(categorize(ev)) - if ev.code in CONSUMER_KEYS_EVENT_TO_USAGE_FLAG_MAPPING: - if ev.value == 1: # down - if ev.code not in self.pressed_consumer_keys: - self.pressed_consumer_keys.append(ev.code) - elif ev.value == 0: # up - if ev.code in self.pressed_consumer_keys: - self.pressed_consumer_keys.remove(ev.code) - self.__send_consumer_hid_report() - else: #normal keys - if ev.code not in NORMAL_KEYS_EVENT_TO_USAGE_FLAG_MAPPING and ev.code not in MODIFIER_KEYS_EVENT_TO_USAGE_FLAG_MAPPING: continue - if ev.value == 1: # down - if ev.code not in self.pressed_keys: - self.pressed_keys.append(ev.code) - elif ev.value == 0: # up - if ev.code in self.pressed_keys: - self.pressed_keys.remove(ev.code) - self.__send_normal_hid_report() - - def __send_consumer_hid_report(self) -> None: - report = bytearray(b'\x02\x80') #first byte - report id 2, second byte - consumer key flags and one bit is constant (0x80) - for code in self.pressed_consumer_keys: - report[1] = report[1] | CONSUMER_KEYS_EVENT_TO_USAGE_FLAG_MAPPING[code] - self.hidraw_device.call_input_event(report) - - def __send_normal_hid_report(self) -> None: - report = bytearray(b'\x01\x00\x00\x00\x00\x00\x00\x00\x00') #first byte - report id 1, then 1 byte with modifier key flags, then const byte with 0, then 6 bytes with up to 6 keycodes (0 to 109) - key_index = 3 - for code in self.pressed_keys: - if code in MODIFIER_KEYS_EVENT_TO_USAGE_FLAG_MAPPING: - report[1] = report[1] | MODIFIER_KEYS_EVENT_TO_USAGE_FLAG_MAPPING[code] - else: - report[key_index] = NORMAL_KEYS_EVENT_TO_USAGE_FLAG_MAPPING[code] - key_index += 1 - if key_index > 8: break - - self.hidraw_device.call_input_event(report) - - def __eq__(self, other: object) -> bool: - if isinstance(other, CompatibilityModeDevice): - return self.device_path == other.device_path - return False - - def finalise(self) -> None: - #close device - self.hidraw_device.destroy() - self.ev_device.ungrab() - self.ev_device.close() - print("Compatibility Device ",self.device_path," finalised") - - def __del__(self) -> None: - print("Compatibility Device ",self.device_path," removed") diff --git a/filters/README.md b/filters/README.md deleted file mode 100644 index a356abc..0000000 --- a/filters/README.md +++ /dev/null @@ -1,199 +0,0 @@ -# Writing custom filters - -There are cases when a device doesn't work correctly when proxying the events through. -Here we'll take a look at how to debug and fix these issues, along with a real example for the Contour Rollermouse Red. -The Contour Rollermouse Red has a double-click button, but when proxied through bthidhub this doesn't work. - -## Debugging - -First thing is to find out why the events don't work (this is assuming that they work correctly when connected directly). -If you first connect the device directly to your machine, then run ``sudo hid-recorder``, you can see what events the device sends. - -Here's the output after using the double-click button on the Rollermouse: -``` -R: 220 05 01 09 02 a1 01 09 01 a1 01 85 01 05 09 19 01 29 08 15 00 25 01 75 01 95 08 81 02 -05 01 09 30 09 31 16 08 80 26 ff 7f 75 10 95 02 81 06 09 38 15 81 25 7f 75 08 95 01 81 06 -05 0c 0a 00 ff 81 06 06 00 ff 09 01 75 08 95 08 81 02 c0 c0 05 01 09 06 a1 01 85 02 05 07 -19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 06 00 ff 09 02 75 08 95 01 81 02 05 07 19 00 29 -7f 15 00 25 7f 75 08 95 05 81 00 c0 05 0c 09 01 a1 01 85 03 05 09 19 09 29 18 15 00 25 01 -75 01 95 10 81 02 05 0c 19 00 2a ff 03 15 00 26 ff 03 95 01 75 10 81 00 05 01 1a 81 00 2a -83 00 15 00 25 01 75 01 95 03 81 02 95 05 81 01 06 00 ff 09 02 75 08 95 0a 81 02 85 04 06 -00 ff 0a 00 ff 75 08 95 0f b1 02 c0 -N: Contour Design Contour RollerMouse Red -I: 3 0b33 1004 -# ReportID: 1 / Button: 0 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , -128 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.000000 16 01 00 00 00 00 00 00 00 01 80 00 00 00 00 00 00 -# ReportID: 1 / Button: 1 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , -128 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.003905 16 01 01 00 00 00 00 00 00 01 80 00 00 00 00 00 00 -# ReportID: 1 / Button: 0 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , -128 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.007800 16 01 00 00 00 00 00 00 00 01 80 00 00 00 00 00 00 -# ReportID: 1 / Button: 1 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , -128 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.011843 16 01 01 00 00 00 00 00 00 01 80 00 00 00 00 00 00 -# ReportID: 1 / Button: 0 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , -128 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.015822 16 01 00 00 00 00 00 00 00 01 80 00 00 00 00 00 00 -# ReportID: 1 / Button: 0 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.171955 16 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 -``` - -Then if we reconnect the device to the RPi, we can run ``sudo hid-recorder`` again and this time see what is sent by the RPi. -Here's the output from the RPi for the same double-click button: -``` -R: 553 05 01 09 06 a1 01 85 01 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 95 01 75 08 -81 03 95 05 75 01 05 08 19 01 29 05 91 02 95 01 75 03 91 03 95 06 75 08 15 00 25 6d 05 07 -19 00 29 6d 81 00 c0 05 0c 09 01 a1 01 85 02 05 0c 15 00 25 01 75 01 95 07 09 b5 09 b6 09 -b7 09 cd 09 e2 09 e9 09 ea 81 02 95 01 81 01 c0 05 01 09 02 a1 01 09 01 a1 00 85 03 05 09 -19 01 29 07 15 00 25 01 95 08 75 01 81 02 06 00 ff 09 40 95 02 75 08 15 81 25 7f 81 02 05 -01 09 38 15 81 25 7f 75 08 95 01 81 06 09 30 09 31 16 00 80 26 ff 7f 75 10 95 02 81 06 c0 -05 ff 09 02 15 00 25 ff 75 08 95 5a b1 01 c0 05 01 09 02 a1 01 09 01 a1 01 85 04 05 09 19 -01 29 08 15 00 25 01 75 01 95 08 81 02 05 01 09 30 09 31 16 08 80 26 ff 7f 75 10 95 02 81 -06 09 38 15 81 25 7f 75 08 95 01 81 06 05 0c 0a 00 ff 81 06 06 00 ff 09 01 75 08 95 08 81 -02 c0 c0 05 01 09 06 a1 01 85 05 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 06 00 ff -09 02 75 08 95 01 81 02 05 07 19 00 29 7f 15 00 25 7f 75 08 95 05 81 00 c0 05 0c 09 01 a1 -01 85 06 05 09 19 09 29 18 15 00 25 01 75 01 95 10 81 02 05 0c 19 00 2a ff 03 15 00 26 ff -03 95 01 75 10 81 00 05 01 1a 81 00 2a 83 00 15 00 25 01 75 01 95 03 81 02 95 05 81 01 06 -00 ff 09 02 75 08 95 0a 81 02 85 07 06 00 ff 0a 00 ff 75 08 95 0f b1 02 c0 05 01 09 06 a1 -01 85 0a 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 95 06 75 08 15 00 26 a4 00 05 07 -19 00 2a a4 00 81 00 c0 05 01 09 02 a1 01 85 0b 09 01 a1 00 95 10 75 01 15 00 25 01 05 09 -19 01 29 10 81 02 05 01 16 01 f8 26 ff 07 75 0c 95 02 09 30 09 31 81 06 15 81 25 7f 75 08 -95 01 09 38 81 06 95 01 05 0c 0a 38 02 81 06 c0 c0 06 43 ff 0a 02 02 a1 01 85 1a 75 08 95 -13 15 00 26 ff 00 09 02 81 00 09 02 91 00 c0 -N: Bluetooth HID Hub - RPi -I: 5 1d6b 0246 -# ReportID: 4 / Button: 0 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.000000 16 04 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 -# ReportID: 4 / Button: 1 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.000698 16 04 01 00 00 00 00 00 00 01 01 00 00 00 00 00 00 -# ReportID: 4 / Button: 0 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.001094 16 04 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 -# ReportID: 4 / Button: 1 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.001470 16 04 01 00 00 00 00 00 00 01 01 00 00 00 00 00 00 -# ReportID: 4 / Button: 0 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.001878 16 04 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 -# ReportID: 4 / Button: 0 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.044655 16 04 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 -``` - -One difference is that the ReportID has been changed from 1 to 4 on each event. -This is needed for the RPi to be able to handle multiple devices. This is not the cause. - -If we save the above output to a file, then we can repeat the event with ``hid-replay my-recording.hid``. -This allows us to change parts and test them out. - -Through trial and error we can figure out that the double-click only works when the vendor ID (middle value under ``I:``) is set to ``0b33``. -This is the ID for Contour and it suggests that there is vendor-specific code in the kernel to make this button work. Not helpful... - -## Finding a fix - -Let's look at what a normal left-click looks like from the mouse. These are the events emitted: - -``` -# ReportID: 1 / Button: 1 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.000000 16 01 01 00 00 00 00 00 00 01 01 00 00 00 00 00 00 -# ReportID: 1 / Button: 0 0 0 0 0 0 0 0 | X: 0 | Y: 0 | Wheel: 0 | 0xcff00: 0 | Vendor Usage 1: 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 -E: 000000.129961 16 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 -``` - -It looks interesting that a left-click has a ``01`` where the double-click sends a ``80`` -(it also switches to ``00`` on the up event which doesn't happen on the double-click). -Hmm, it seems like the double-click actually sends 2 clicks of a different button. -What if we change the ``80`` to ``01``, so we actually send 2 left-click events? -Running that through ``hid-replay``, it works! - -## Writing a filter - -To implement the fix we need to create a new filter function. -While ssh'd into the RPi, create the new file: ``bthidhub/filters/contour.py``: - -``` -"""Contour Rollermouse""" - -def message_filter(msg: bytes) -> bytes: - if len(msg) >= 10 and msg[9] == 0x80: - # Convert vendor specific double click (button 0x80), to normal double click (button 1). - msg = msg[:9] + (b"\x01" if msg[1] else b"\x00") + msg[10:] - return msg -``` - -The docstring on the first line can be used to customise the name in the UI. -If omitted, the name will be based on the filename. -Each module in the filters directory must define a function named ``message_filter``. -This function will be automatically imported and available as a filter. - -The above filter function changes the byte sequence for the double click button, so it -looks like regular single clicks. - -Restart the service: -``sudo systemctl restart remapper`` - -After a few seconds, refresh the web page and you should see the new filter in the dropdown -options. Select the new filter and it will immediately be applied to all events from that -device. - -If you add ``print()`` calls for debugging, you can view the logs with: -``journalctl -xeu remapper`` - -### Using clases to store state - -With the above code, it seems that the double click is only getting recognised as a single -click. Through more trial and error, comparing working/non-working events we can also -figure out that the 2 left-click events only get interpreted as a double-click if there's -a gap between the events of atleast around 25ms (the first number after ``E:`` is a -timestamp of the event). - -To emulate this, we can create a class to store a boolean state and then sleep for 25ms in -the middle of the double click events. A complete filter for this might look like: - -``` -"""Contour Rollermouse""" - -import time - -class ContourMessageFilter: - delay = False - - def filter_message(self, msg: bytes) -> bytes: - if len(msg) >= 10 and msg[9] == 0x80: - # Convert vendor specific double click (button 0x80), to normal double click (button 1). - msg = msg[:9] + (b"\x01" if msg[1] else b"\x00") + msg[10:] - if msg[1]: - # Ensure a small delay between click events otherwise it won't register as a double click. - if self.delay: - time.sleep(0.025) - self.delay = not self.delay - return msg - -message_filter = ContourMessageFilter().filter_message -``` - -Note the last line which assigns the bound method to the ``message_filter`` name, so it -can still be imported the same way as our first example. - -### Suppressing events - -If you want to block some messages from being sent entirely, instead of returning the -message, simply ``return None``. - -You will need to change the return type annotation in this case to ``-> bytes | None:``. - -### Compiling for maximum performance - -Once you have your filters working correctly, you can compile the code to ensure -maximum performance. Simply run: - -``` -cd $HOME/bthidhub/ -mypyc -``` - -This may take upto 20 mins to complete. - -## Notes - -The same techniques could be used to remap events when you just want to change -the behaviour of a device. - -[This post](http://who-t.blogspot.com/2018/12/understanding-hid-report-descriptors.html) -is super helpful in getting your head around HID descriptors. - -If you have a report descriptor and don't want to use hid-tools to decode, an online parser is: -https://eleccelerator.com/usbdescreqparser/ diff --git a/filters/__init__.py b/filters/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/hid_devices.py b/hid_devices.py deleted file mode 100644 index b1d66c7..0000000 --- a/hid_devices.py +++ /dev/null @@ -1,431 +0,0 @@ -# Copyright (c) 2020 ruundii. All rights reserved. - -from __future__ import annotations - -import array -import asyncio -import fcntl -import importlib -import os -import json -import re -import struct -import subprocess -import sys -import time -from pathlib import Path -from typing import Awaitable, Callable, Literal, Optional, TypedDict, Union, cast - -import evdev -from watchfiles import awatch - -from bluetooth_devices import BluetoothDeviceRegistry -from compatibility_device import CompatibilityModeDevice - -HIDMessageFilter = Callable[[bytes], Optional[bytes]] - - -class __Device(TypedDict, total=False): - capture: bool - filter: str - - -class _Device(__Device): - id: str - instance: str - name: str - hidraw: str - events: list[str] - compatibility_mode: bool - - -class _InputDevice(TypedDict): - name: str - path: str - phys: str - compatibility_mode: bool - - -class _HIDDevices(TypedDict): - devices: list[_Device] - filters: tuple[dict[str, str], ...] - input_devices: list[_InputDevice] - - -class _DeviceConfig(TypedDict, total=False): - capture: bool - descriptor: str - filter: str - mapped_ids: dict[Union[int, Literal["_"]], int] - - -class FilterDict(TypedDict): - name: str - func: HIDMessageFilter - - -DEVICES_CONFIG_FILE_NAME = 'devices_config.json' -DEVICES_CONFIG_COMPATIBILITY_DEVICE_KEY = 'compatibility_devices' -CAPTURE_ELEMENT: Literal['capture'] = 'capture' -FILTER_ELEMENT: Literal['filter'] = 'filter' -# TODO: https://github.com/mypyc/mypyc/issues/700 -FILTERS_PATH = Path(".") / "filters" # Path(__file__).parent -REPORT_ID_PATTERN = re.compile(r"(a10185)(..)") -SDP_TEMPLATE_PATH = Path("sdp_record_template.xml") # Path(__file__).with_name("sdp_record_template.xml") -SDP_OUTPUT_PATH = Path("/etc/bluetooth/sdp_record.xml") - -FILTERS: dict[str, FilterDict] = {"_": {"name": "No filter", "func": lambda m: m}} -for mod_path in FILTERS_PATH.glob("*.py"): - if mod_path.stem == "__init__": - continue - mod = importlib.import_module("filters." + mod_path.stem) - name = mod.__doc__ or mod_path.stem.replace("_", " ").capitalize() - FILTERS[mod_path.stem] = {"name": name, "func": mod.message_filter} - - -# https://github.com/bentiss/hid-tools/blob/59a0c4b153dbf7d443e63bf68ff830b8353f5f7a/hidtools/hidraw.py#L33-L104 - -_IOC_READ = 2 -_IOC_NRBITS = 8 -_IOC_TYPEBITS = 8 -_IOC_SIZEBITS = 14 - -_IOC_NRSHIFT = 0 -_IOC_TYPESHIFT = _IOC_NRSHIFT + _IOC_NRBITS -_IOC_SIZESHIFT = _IOC_TYPESHIFT + _IOC_TYPEBITS -_IOC_DIRSHIFT = _IOC_SIZESHIFT + _IOC_SIZEBITS - -def _IORH(nr: int, size: int) -> int: - return ( - (_IOC_READ << _IOC_DIRSHIFT) - | (ord("H") << _IOC_TYPESHIFT) - | (nr << _IOC_NRSHIFT) - | (size << _IOC_SIZESHIFT) - ) - -def _IOC_HIDIOCGRDESCSIZE(length: int) -> int: - return _IORH(0x01, length) - -def _ioctl_desc_size(fd: int) -> tuple[int]: - size = struct.calcsize("i") - abs = fcntl.ioctl(fd, _IOC_HIDIOCGRDESCSIZE(size), size * b"\x00") - return cast(tuple[int], struct.unpack("i", abs)) - -def _IOC_HIDIOCGRDESC(length: int) -> int: - return _IORH(0x02, length) - -def _HIDIOCGRDESC(fd: int) -> "array.array[int]": - """Get report descriptor.""" - size = int(*_ioctl_desc_size(fd)) - - _buffer = array.array("B", struct.pack("i", size) + bytes(4096)) - fcntl.ioctl(fd, _IOC_HIDIOCGRDESC(struct.calcsize("I4096c")), _buffer) - (size,) = cast(tuple[int], struct.unpack("i", _buffer[:4])) - return _buffer[4 : size + 4] - - - -class HIDDevice: - mapped_ids: dict[Union[int, Literal["_"]], bytes] - - def __init__(self, device: _Device, filter: HIDMessageFilter, - loop: asyncio.AbstractEventLoop, device_registry: HIDDeviceRegistry): - self.loop = loop - self.filter = filter - self.device_registry = device_registry - self.device_id = device["instance"] - self.device_class = device["id"] - self.name = device["name"] - self.hidraw = device["hidraw"] - self.events = device["events"] - self.events_devices = [] - for event in self.events: - event_device = evdev.InputDevice('/dev/input/'+event) - event_device.grab() - self.events_devices.append(event_device) - self.hidraw_file: Optional[int] = os.open('/dev/'+self.hidraw, os.O_RDWR | os.O_NONBLOCK) - loop.add_reader(self.hidraw_file, self.hidraw_event) - print("HID Device ",self.device_id," created") - desc = "".join(f"{b:02x}" for b in _HIDIOCGRDESC(self.hidraw_file)) - # Replace report IDs, so they can be remapped later. - self.internal_ids = tuple(m[1] for m in cast(list[tuple[str, str]], REPORT_ID_PATTERN.findall(desc))) - self.descriptor, found = REPORT_ID_PATTERN.subn(r"\1{}", desc) - # Or insert one if no report ID exists. - if found == 0: - self.descriptor = re.sub(r"(a101)", r"\g<1>85{}", self.descriptor, count=1) - - def set_device_filter(self, filter: HIDMessageFilter) -> None: - self.filter = filter - - def hidraw_event(self) -> None: - if self.hidraw_file is None: - return - try: - msg = os.read(self.hidraw_file, 16) - except Exception: - #reopen - self.loop.remove_reader(self.hidraw_file) - os.close(self.hidraw_file) - self.hidraw_file = None - print("HID device ",self.device_id, " exception on read. closing") - return - tm = self.filter(msg) - if tm is None or self.device_registry.bluetooth_devices is None: - return - if tm == b'\xff': - self.device_registry.bluetooth_devices.switch_host() - self.indicate_switch_with_mouse_movement() - else: - if self.internal_ids: - tm = b"\xa1" + self.mapped_ids[tm[0]] + tm[1:] - else: - tm = b"\xa1" + self.mapped_ids["_"] + tm - self.device_registry.bluetooth_devices.send_message(tm, True, False) - - def indicate_switch_with_mouse_movement(self) -> None: - """Move mouse in circular direction so user can see which host is active now""" - for i in range(3): - # Up - self.move_mouse(b'\x00\xF0\xFE') - time.sleep(0.05) - # Right - self.move_mouse(b'\x10\x00\x00') - time.sleep(0.05) - # Down - self.move_mouse(b'\x00\x00\x01') - time.sleep(0.05) - # Left - self.move_mouse(b'\xEF\x0F\x00') - time.sleep(0.05) - - def move_mouse(self, xy: bytes) -> None: - if self.device_registry.bluetooth_devices is None: - return - self.device_registry.bluetooth_devices.send_message(b'\xa1\x03\x00\x00\x00\x00' + xy, True, False) - - async def send_message(self, msg: bytes) -> None: - if self.hidraw_file is not None: - os.write(self.hidraw_file, msg[1:]) - - def __eq__(self, other: object) -> bool: - if isinstance(other, HIDDevice): - return self.device_id == other.device_id - return False - - def finalise(self) -> None: - #close file - for event_device in self.events_devices: - try: - event_device.ungrab() - except: - pass - if self.hidraw_file is not None: - try: - self.loop.remove_reader(self.hidraw_file) - os.close(self.hidraw_file) - self.hidraw_file = None - except: - pass - print("HID Device ",self.device_id," finalised") - - def __del__(self) -> None: - print("HID Device ",self.device_id," removed") - - -class HIDDeviceRegistry: - def __init__(self, loop: asyncio.AbstractEventLoop): - self.loop = loop - try: - with open(DEVICES_CONFIG_FILE_NAME) as devices_config: - self.devices_config: dict[str, _DeviceConfig] = json.load(devices_config) - except Exception: - self.devices_config = {} - self.devices: list[_Device] = [] - self.capturing_devices: dict[str, HIDDevice] = {} - self.input_devices: list[_InputDevice] = [] - self.compatibility_mode_devices: dict[str, CompatibilityModeDevice] = {} - asyncio.run_coroutine_threadsafe(self.__watch_device_changes(), loop=self.loop) - self.on_devices_changed_handler: Optional[Callable[[], Awaitable[None]]] = None - self.__scan_devices() - self.bluetooth_devices: Optional[BluetoothDeviceRegistry] = None - - def set_bluetooth_devices(self, bluetooth_devices: BluetoothDeviceRegistry) -> None: - self.bluetooth_devices = bluetooth_devices - - def set_on_devices_changed_handler(self, handler: Callable[[], Awaitable[None]]) -> None: - self.on_devices_changed_handler = handler - - async def send_message_to_devices(self, msg: bytes) -> None: - for device in self.capturing_devices.values(): - await device.send_message(msg) - - async def __watch_device_changes(self) -> None: - async for changes in awatch("/dev/input/", recursive=False): - self.__scan_devices() - if self.on_devices_changed_handler is not None: - await self.on_devices_changed_handler() - - def __scan_devices(self) -> None: - #input_devices - self.input_devices = [] - - def _filter(d: evdev.InputDevice) -> bool: - """Filter out devices without key capability and without esc button.""" - return 1 in d.capabilities().keys() and 1 in d.capabilities()[1] and d.info.bustype != 0x06 - - for dev in filter(_filter, (evdev.InputDevice(path) for path in evdev.list_devices())): - compatibility_mode = DEVICES_CONFIG_COMPATIBILITY_DEVICE_KEY in self.devices_config and dev.path in self.devices_config[DEVICES_CONFIG_COMPATIBILITY_DEVICE_KEY] - self.input_devices.append({"name": dev.name, "path": dev.path, "phys": dev.phys, "compatibility_mode": compatibility_mode}) - if compatibility_mode and dev.path not in self.compatibility_mode_devices: - self.compatibility_mode_devices[dev.path] = CompatibilityModeDevice(self.loop, dev.path) - - devs_to_remove = [] - for dev_path in self.compatibility_mode_devices: - if len([d for d in self.input_devices if d["path"]==dev_path and d["compatibility_mode"]]) == 0: - devs_to_remove.append(dev_path) - for dev_path in devs_to_remove: - # remove compatibility device - comp_device = self.compatibility_mode_devices[dev_path] - del self.compatibility_mode_devices[dev_path] - comp_device.finalise() - del comp_device - - devs: list[_Device] = [] - devs_dict = {} - devs_in_compatibility_mode = [] - for device in os.listdir('/sys/bus/hid/devices'): - try: - with open('/sys/bus/hid/devices/'+device+'/uevent', 'r') as uevent: - m = re.search('HID_NAME\s*=(.+)', uevent.read()) - if m is not None: - name: str = m.group(1) - hidraw = os.listdir('/sys/bus/hid/devices/'+device+'/hidraw')[0] - inputs = os.listdir('/sys/bus/hid/devices/'+device+'/input') - events = [] - compatibility_mode = False - for input in inputs: - input_events = [e for e in os.listdir('/sys/bus/hid/devices/' + device + '/input/'+input) if e.startswith('event')] - for event in input_events: - for input_device in self.input_devices: - if input_device["compatibility_mode"] and input_device["path"].find(event)>=0: - compatibility_mode = True - break - events.extend(input_events) - - device_id = device.split(".")[0] - devs.append({"id": device_id, "instance": device, - "name": name, "hidraw": hidraw, "events": events, - "compatibility_mode": compatibility_mode}) - devs_dict[device] = device_id - if compatibility_mode: devs_in_compatibility_mode.append(device) - except Exception as exc: - print("Error while loading HID device: ", device, ", Error: ", exc,", Skipping.") - devs_to_remove = [] - for dev_name in self.capturing_devices: - if dev_name not in devs_dict or not self.__is_configured_capturing_device(devs_dict[dev_name]) or dev_name in devs_in_compatibility_mode: - #remove capturing device - devs_to_remove.append(dev_name) - - for dev_name in devs_to_remove: - hid_device = self.capturing_devices[dev_name] - del self.capturing_devices[dev_name] - hid_device.finalise() - del hid_device - - for dev_dict in devs: - if dev_dict["instance"] not in self.capturing_devices and self.__is_configured_capturing_device(dev_dict["id"]) and dev_dict["instance"] not in devs_in_compatibility_mode: - #create capturing device - self.capturing_devices[dev_dict["instance"]] = HIDDevice(dev_dict, self.__get_configured_device_filter(dev_dict["id"]), self.loop, self) - - recreate_sdp = False - # Refresh or create config details for currently connected devices. - for hid_dev in self.capturing_devices.values(): - dev_config = self.devices_config.get(hid_dev.device_class) - if not dev_config: - dev_config = {} - self.devices_config[hid_dev.device_class] = dev_config - recreate_sdp = True - - dev_config["descriptor"] = hid_dev.descriptor - # TODO(PY311): Use to_bytes() defaults. - # Need tuple to retain order (set is unordered, but dict is ordered). - keys: tuple[Union[int, Literal["_"]], ...] = tuple(int(i, base=16) for i in hid_dev.internal_ids) if hid_dev.internal_ids else ("_",) - if dev_config.get("mapped_ids", {}).keys() != set(keys): - dev_config["mapped_ids"] = {i: 0 for i in keys} - recreate_sdp = True - - # We need to avoid editing the SDP when possible as this requires restarting - # bluez (therefore disconnecting all BT devices). - if recreate_sdp: - report_desc = "" - report_id = 1 - for dev_config in self.devices_config.values(): - for k in dev_config["mapped_ids"]: - dev_config["mapped_ids"][k] = report_id - report_id += 1 - report_desc += dev_config["descriptor"] - report_desc = report_desc.format(*(f"{i:02x}" for i in range(1, report_id))) - - sdp = SDP_TEMPLATE_PATH.read_text().format(report_desc) - SDP_OUTPUT_PATH.write_text(sdp) - self.__save_config() - # TODO: Try reconnecting devices after restart. - subprocess.Popen(("systemctl", "restart", "bluetooth"), stderr=sys.stderr) - - # Update the mapped IDs based on latest information. - for hid_dev in self.capturing_devices.values(): - config_ids = self.devices_config[hid_dev.device_class]["mapped_ids"] - hid_dev.mapped_ids = {k: v.to_bytes(1, "big") for k,v in config_ids.items()} - self.devices = devs - - - def set_device_capture(self, device_id: str, capture: bool) -> None: - if device_id not in self.devices_config: self.devices_config[device_id] = {} - self.devices_config[device_id][CAPTURE_ELEMENT] = capture - self.__save_config() - self.__scan_devices() - - def set_device_filter(self, device_id: str, filter_id: str) -> None: - if device_id not in self.devices_config: self.devices_config[device_id] = {} - self.devices_config[device_id][FILTER_ELEMENT] = filter_id - self.__save_config() - filter = self.__get_configured_device_filter(device_id) - for dev in self.capturing_devices: - if self.capturing_devices[dev].device_class == device_id: - self.capturing_devices[dev].set_device_filter(filter) - - def set_compatibility_device(self, device_path: str, compatibility_state: bool) -> None: - if DEVICES_CONFIG_COMPATIBILITY_DEVICE_KEY not in self.devices_config: - self.devices_config[DEVICES_CONFIG_COMPATIBILITY_DEVICE_KEY] = [] # type: ignore[assignment] - if compatibility_state and device_path not in self.devices_config[DEVICES_CONFIG_COMPATIBILITY_DEVICE_KEY]: - cast(list[str], self.devices_config[DEVICES_CONFIG_COMPATIBILITY_DEVICE_KEY]).append(device_path) - elif not compatibility_state and device_path in self.devices_config[DEVICES_CONFIG_COMPATIBILITY_DEVICE_KEY]: - cast(list[str], self.devices_config[DEVICES_CONFIG_COMPATIBILITY_DEVICE_KEY]).remove(device_path) - self.__save_config() - self.__scan_devices() - - def __save_config(self) -> None: - with open(DEVICES_CONFIG_FILE_NAME, 'w') as devices_config_file: - json.dump(self.devices_config, devices_config_file) - - def __is_configured_capturing_device(self, device_id: str) -> bool: - if device_id in self.devices_config: - if CAPTURE_ELEMENT in self.devices_config[device_id]: - return self.devices_config[device_id][CAPTURE_ELEMENT] - return False - - def __get_configured_device_filter(self, device_id: str) -> HIDMessageFilter: - if device_id in self.devices_config: - if FILTER_ELEMENT in self.devices_config[device_id]: - filter_id = self.devices_config[device_id][FILTER_ELEMENT] - return FILTERS[filter_id]["func"] - return FILTERS["_"]["func"] - - def get_hid_devices_with_config(self) -> _HIDDevices: - for device in self.devices: - if device["id"] in self.devices_config: - device[CAPTURE_ELEMENT] = self.devices_config[device["id"]].get(CAPTURE_ELEMENT, False) - if FILTER_ELEMENT in self.devices_config[device["id"]]: - device[FILTER_ELEMENT] = self.devices_config[device["id"]][FILTER_ELEMENT] - f = tuple({"id": k, "name": v["name"]} for k,v in FILTERS.items()) - return {"devices": self.devices, "filters": f, "input_devices": self.input_devices} diff --git a/install/install_windows.bat b/install/install_windows.bat deleted file mode 100644 index ebceadc..0000000 --- a/install/install_windows.bat +++ /dev/null @@ -1 +0,0 @@ -plink -ssh -v -pw raspberry pi@192.168.0.31 -m setup.sh diff --git a/install/on_rpi/config_replacer.py b/install/on_rpi/config_replacer.py deleted file mode 100644 index 5509e25..0000000 --- a/install/on_rpi/config_replacer.py +++ /dev/null @@ -1,13 +0,0 @@ -import sys -import os -import tempfile - -tmp = tempfile.mkstemp() - -with open('/lib/systemd/system/bluetooth.service') as fd1, open(tmp[1], 'w') as fd2: - for line in fd1: - if line.startswith("ExecStart"): - line = "ExecStart=/usr/libexec/bluetooth/bluetoothd -p time,input,hog,autopair,policy,scanparam,deviceinfo" - fd2.write(line) - -os.rename(tmp[1], '/lib/systemd/system/bluetooth.service') diff --git a/install/on_rpi/input.conf b/install/on_rpi/input.conf deleted file mode 100644 index f37c126..0000000 --- a/install/on_rpi/input.conf +++ /dev/null @@ -1,48 +0,0 @@ -# Configuration file for the input service - -# This section contains options which are not specific to any -# particular interface -[General] - -# Set idle timeout (in minutes) before the connection will -# be disconnect (defaults to 0 for no timeout) -#IdleTimeout=30 - -# Enable HID protocol handling in userspace input profile -# Defaults to false (HIDP handled in HIDP kernel module) -#UserspaceHID=true - -# Limit HID connections to bonded devices -# The HID Profile does not specify that devices must be bonded, however some -# platforms may want to make sure that input connections only come from bonded -# device connections. Several older mice have been known for not supporting -# pairing/encryption. -# Defaults to false to maximize device compatibility. -#ClassicBondedOnly=true - -# LE upgrade security -# Enables upgrades of security automatically if required. -# Defaults to true to maximize device compatibility. -#LEAutoSecurity=true - -# Support input device profile (in addition to the default input host profile) -InputDeviceProfileEnabled = true - - -# SDP Record xml file for the input device profile -InputDeviceProfileSDPRecordPath = /etc/bluetooth/sdp_record.xml - - -# Capture UHID Channels For Input Devices -# If this and UserspaceHID both set to true, then input device profile will open -# two local sockets at addresses published in SocketPathCtrl and SocketPathIntr -# on Input1 dbus interface of the device -# Default is false -#CaptureUHIDChannelsForInputDevices = true - - -# Further, if ExclusiveCaptureOfUHIDChannelsForInputDevices is set to true, -# then bluetooth communication with the connected device will be channel -# exclusively to the connection made with SocketPathCtrl/SocketPathIntr -# sockets and will not go to UHID/HIDP -#ExclusiveCaptureOfUHIDChannelsForInputDevices = true diff --git a/install/on_rpi/main.conf b/install/on_rpi/main.conf deleted file mode 100644 index 41e746c..0000000 --- a/install/on_rpi/main.conf +++ /dev/null @@ -1,110 +0,0 @@ -[General] - -# Defaults to 'BlueZ X.YZ', if Name is not set here and plugin 'hostname' is not loaded. -# The plugin 'hostname' is loaded by default and overides the Name set here so -# consider modifying /etc/machine-info with variable PRETTY_HOSTNAME= instead. -#Name = BlueZ -Name =Bluetooth HID Hub - RPi - -# Default device class. Only the major and minor device class bits are -# considered. Defaults to '0x000000'. -#Class = 0x000100 -Class = 0x0005C0 - -# How long to stay in discoverable mode before going back to non-discoverable -# The value is in seconds. Default is 180, i.e. 3 minutes. -# 0 = disable timer, i.e. stay discoverable forever -#DiscoverableTimeout = 0 - -# How long to stay in pairable mode before going back to non-discoverable -# The value is in seconds. Default is 0. -# 0 = disable timer, i.e. stay pairable forever -#PairableTimeout = 0 - -# Use vendor id source (assigner), vendor, product and version information for -# DID profile support. The values are separated by ":" and assigner, VID, PID -# and version. -# Possible vendor id source values: bluetooth, usb (defaults to usb) -#DeviceID = bluetooth:1234:5678:abcd - -# Do reverse service discovery for previously unknown devices that connect to -# us. This option is really only needed for qualification since the BITE tester -# doesn't like us doing reverse SDP for some test cases (though there could in -# theory be other useful purposes for this too). Defaults to 'true'. -#ReverseServiceDiscovery = true - -# Enable name resolving after inquiry. Set it to 'false' if you don't need -# remote devices name and want shorter discovery cycle. Defaults to 'true'. -#NameResolving = true - -# Enable runtime persistency of debug link keys. Default is false which -# makes debug link keys valid only for the duration of the connection -# that they were created for. -#DebugKeys = false - -# Restricts all controllers to the specified transport. Default value -# is "dual", i.e. both BR/EDR and LE enabled (when supported by the HW). -# Possible values: "dual", "bredr", "le" -#ControllerMode = dual - -# Enables Multi Profile Specification support. This allows to specify if -# system supports only Multiple Profiles Single Device (MPSD) configuration -# or both Multiple Profiles Single Device (MPSD) and Multiple Profiles Multiple -# Devices (MPMD) configurations. -# Possible values: "off", "single", "multiple" -#MultiProfile = off - -# Permanently enables the Fast Connectable setting for adapters that -# support it. When enabled other devices can connect faster to us, -# however the tradeoff is increased power consumptions. This feature -# will fully work only on kernel version 4.1 and newer. Defaults to -# 'false'. -#FastConnectable = false - -# Default privacy setting. -# Enables use of private address. -# Possible values: "off", "device", "network" -# "network" option not supported currently -# Defaults to "off" -# Privacy = off - -[GATT] -# GATT attribute cache. -# Possible values: -# always: Always cache attributes even for devices not paired, this is -# recommended as it is best for interoperability, with more consistent -# reconnection times and enables proper tracking of notifications for all -# devices. -# yes: Only cache attributes of paired devices. -# no: Never cache attributes -# Default: always -#Cache = always - -# Minimum required Encryption Key Size for accessing secured characteristics. -# Possible values: 0 and 7-16. 0 means don't care. -# Defaults to 0 -# MinEncKeySize = 0 - -[Policy] -# -# The ReconnectUUIDs defines the set of remote services that should try -# to be reconnected to in case of a link loss (link supervision -# timeout). The policy plugin should contain a sane set of values by -# default, but this list can be overridden here. By setting the list to -# empty the reconnection feature gets disabled. -#ReconnectUUIDs=00001112-0000-1000-8000-00805f9b34fb,0000111f-0000-1000-8000-00805f9b34fb,0000110a-0000-1000-8000-00805f9b34fb - -# ReconnectAttempts define the number of attempts to reconnect after a link -# lost. Setting the value to 0 disables reconnecting feature. -#ReconnectAttempts=7 - -# ReconnectIntervals define the set of intervals in seconds to use in between -# attempts. -# If the number of attempts defined in ReconnectAttempts is bigger than the -# set of intervals the last interval is repeated until the last attempt. -#ReconnectIntervals=1,2,4,8,16,32,64 - -# AutoEnable defines option to enable all controllers when they are found. -# This includes adapters present on start as well as adapters that are plugged -# in later on. Defaults to 'false'. -AutoEnable=true diff --git a/install/on_rpi/on_pi_setup.sh b/install/on_rpi/on_pi_setup.sh deleted file mode 100644 index af4a9e3..0000000 --- a/install/on_rpi/on_pi_setup.sh +++ /dev/null @@ -1,61 +0,0 @@ -cd $HOME/bthidhub/install/on_rpi - -sudo echo 0 | sudo tee /sys/class/leds/ACT/brightness > /dev/null - -systemctl --user stop pulseaudio.socket -systemctl --user stop pulseaudio.service -systemctl --user disable pulseaudio.socket -systemctl --user disable pulseaudio.service -systemctl --user mask pulseaudio.socket -systemctl --user mask pulseaudio.service - -sudo systemctl stop pulseaudio.socket -sudo systemctl stop pulseaudio.service -sudo systemctl disable pulseaudio.socket -sudo systemctl disable pulseaudio.service -sudo systemctl mask pulseaudio.socket -sudo systemctl mask pulseaudio.service - -systemctl --user stop obex -systemctl --user disable obex -systemctl --user mask obex - -sudo apt-get install libcairo2-dev libdbus-1-dev libgirepository1.0-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev autoconf automake libtool python3-pip -y -sudo pip3 install -r $HOME/bthidhub/requirements.txt - -cd $HOME/bthidhub/install/on_rpi -git clone https://github.com/Dreamsorcerer/bluez.git -cd $HOME/bthidhub/install/on_rpi/bluez -autoreconf -fvi - -./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --disable-a2dp --disable-avrcp --disable-network -automake -make -j4 - -sudo systemctl disable bluetooth -sudo systemctl stop bluetooth -sudo make install -sudo python3 $HOME/bthidhub/install/on_rpi/config_replacer.py -sudo cp $HOME/bthidhub/sdp_record_template.xml /etc/bluetooth/sdp_record.xml -sudo sed -i 's/{}//' /etc/bluetooth/sdp_record.xml -sudo cp $HOME/bthidhub/install/on_rpi/input.conf /etc/bluetooth/input.conf -sudo cp $HOME/bthidhub/install/on_rpi/main.conf /etc/bluetooth/main.conf - -sudo cp $HOME/bthidhub/install/on_rpi/remapper.service /lib/systemd/system/remapper.service -sudo chmod 644 /lib/systemd/system/remapper.service -sudo systemctl daemon-reload - -sudo systemctl enable bluetooth -sudo systemctl start bluetooth -sudo systemctl enable remapper.service -sudo systemctl start remapper.service - -sudo hostnamectl set-hostname bthidhub -sudo sed -Ei 's/^127\.0\.1\.1.*$/127.0.1.1\tbthidhub/' /etc/hosts - -# Compile some Python modules to reduce lag. -# We do this at the end, as the project is already usable without this step. -cd $HOME/bthidhub/ -mypyc - -sudo reboot diff --git a/install/on_rpi/remapper.service b/install/on_rpi/remapper.service deleted file mode 100644 index b990d9d..0000000 --- a/install/on_rpi/remapper.service +++ /dev/null @@ -1,14 +0,0 @@ -[Unit] -Description=Remapper -After=multi-user.target - -[Service] -Type=simple -ExecStart=/usr/bin/python3 /home/pi/bthidhub/remapper.py -ExecStartPost=/usr/bin/bash -c 'echo none > /sys/class/leds/ACT/trigger' -ExecStopPost=/usr/bin/bash -c 'echo heartbeat > /sys/class/leds/ACT/trigger' -WorkingDirectory=/home/pi/bthidhub -Restart=on-abort - -[Install] -WantedBy=multi-user.target diff --git a/install/setup.sh b/install/setup.sh deleted file mode 100644 index c7842e2..0000000 --- a/install/setup.sh +++ /dev/null @@ -1,9 +0,0 @@ -cd $HOME - -sudo apt-get update -sudo apt-get upgrade -y -sudo apt-get install git -y - -git clone https://github.com/ruundii/bthidhub -cd $HOME/bthidhub/install/on_rpi -bash ./on_pi_setup.sh diff --git a/install/ssh b/install/ssh deleted file mode 100644 index e69de29..0000000 diff --git a/install/userconf b/install/userconf deleted file mode 100644 index b20fc24..0000000 --- a/install/userconf +++ /dev/null @@ -1 +0,0 @@ -pi:$6$UIhrY5sJ9kT2VH5V$dwk63u6zscWWP6sQ8CUsi.iI/tJleNkLS6tvR/1lieV8gaNOJrAobR7m52rWYV7m0lL3nrbWzoSHCaqrZrXHE. diff --git a/install/wpa_supplicant.conf b/install/wpa_supplicant.conf deleted file mode 100644 index d702e0e..0000000 --- a/install/wpa_supplicant.conf +++ /dev/null @@ -1,8 +0,0 @@ -country=US -ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev -update_config=1 - -network={ - ssid="NETWORK-NAME" - psk="NETWORK-PASSWORD" -} \ No newline at end of file diff --git a/password.py b/password.py deleted file mode 100644 index ffeef85..0000000 --- a/password.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (c) 2020 ruundii. All rights reserved. - -import crypt, spwd, subprocess - -def is_valid_current_password(user, current_password): - password = spwd.getspnam(user).sp_pwdp - return crypt.crypt(current_password, password)==password - -def set_new_password(user, new_password): - p = subprocess.Popen([ "/usr/sbin/chpasswd" ], universal_newlines=True, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - (stdout, stderr) = p.communicate(user + ":" + new_password + "\n") - assert p.wait() == 0 - return not (stdout or stderr) \ No newline at end of file diff --git a/remapper.py b/remapper.py deleted file mode 100644 index 21c7456..0000000 --- a/remapper.py +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (c) 2020 ruundii. All rights reserved. - -import asyncio -import sys -from signal import SIGINT - -import asyncio_glib -from dasbus.connection import SystemMessageBus - -from adapter import BluetoothAdapter -from bluetooth_devices import * -from hid_devices import * -from web import Web - -if __name__ == "__main__": - sys.stdout = sys.stderr - asyncio.set_event_loop_policy(asyncio_glib.GLibEventLoopPolicy()) - loop = asyncio.get_event_loop() - loop.add_signal_handler(SIGINT, sys.exit) - bus = SystemMessageBus() - bluetooth_devices = BluetoothDeviceRegistry(bus, loop) - hid_devices = HIDDeviceRegistry(loop) - hid_devices.set_bluetooth_devices(bluetooth_devices) - bluetooth_devices.set_hid_devices(hid_devices) - adapter = BluetoothAdapter(bus, loop, bluetooth_devices, hid_devices) - web = Web(loop, adapter, bluetooth_devices, hid_devices) - loop.run_forever() - - -#print(proxy) diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 6ff050f..0000000 --- a/requirements.txt +++ /dev/null @@ -1,12 +0,0 @@ -aiohttp!=3.7.* -aiohttp-security -aiohttp-session -asyncio_glib -bitarray # TODO: remove -dasbus -evdev -hid-tools>=0.7 -mypy==1.14.1 -PyGObject -pyudev -watchfiles diff --git a/sdp_record_template.xml b/sdp_record_template.xml deleted file mode 100644 index 7e6a29e..0000000 --- a/sdp_record_template.xml +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stubs/dasbus/__init__.pyi b/stubs/dasbus/__init__.pyi deleted file mode 100644 index e69de29..0000000 diff --git a/stubs/dasbus/connection.pyi b/stubs/dasbus/connection.pyi deleted file mode 100644 index f482627..0000000 --- a/stubs/dasbus/connection.pyi +++ /dev/null @@ -1,47 +0,0 @@ -from typing import Callable, Optional - -from dasbus.typing import Variant - - -class _InterfaceThing: - def connect(self, callback: Callable[[str, list[str]], None]) -> None: ... - - -class _Signal: - @staticmethod - def connect(callback: Callable[[object, object, object], None]) -> None: ... - @staticmethod - def disconnect(callback: Callable[[object, object, object], None]) -> None: ... - - -class InterfaceProxy: - Alias: str - Connected: bool - Discoverable: bool - DiscoverableTimeout: int - Discovering: bool - InterfacesAdded: _InterfaceThing - InterfacesRemoved: _InterfaceThing - Name: str - Powered: bool - PropertiesChanged = _Signal - SocketPathCtrl: str - SocketPathIntr: str - Trusted: bool - Version: str - - def CancelPairing(self) -> None: ... - def Connect(self) -> None: ... - def Disconnect(self) -> None: ... - def GetManagedObjects(self) -> dict[str, dict[str, dict[str, Variant[object]]]]: ... - def Pair(self) -> None: ... - def RegisterAgent(self, path: str, action: str) -> None: ... - def RemoveDevice(self, path: str) -> None: ... - def RequestDefaultAgent(self, path: str) -> None: ... - def StartDiscovery(self) -> None: ... - def StopDiscovery(self) -> None: ... - - -class SystemMessageBus: - def get_proxy(self, service_name: str, object_path: str, interface_name: str) -> InterfaceProxy: ... - def publish_object(self, object_path: str, obj: object) -> None: ... diff --git a/stubs/dasbus/server/__init__.pyi b/stubs/dasbus/server/__init__.pyi deleted file mode 100644 index e69de29..0000000 diff --git a/stubs/dasbus/server/interface.pyi b/stubs/dasbus/server/interface.pyi deleted file mode 100644 index 5f3407e..0000000 --- a/stubs/dasbus/server/interface.pyi +++ /dev/null @@ -1,5 +0,0 @@ -from typing import Callable, TypeVar - -_T = TypeVar("_T", bound=type[object]) - -def dbus_interface(interface_name: str, namespace: tuple[str, ...] = ...) -> Callable[[_T], _T]: ... diff --git a/stubs/dasbus/typing.pyi b/stubs/dasbus/typing.pyi deleted file mode 100644 index 9dc1ce5..0000000 --- a/stubs/dasbus/typing.pyi +++ /dev/null @@ -1,28 +0,0 @@ -from typing import Tuple, Dict, Generic, List, NewType, IO, TypeVar - -_T = TypeVar("_T") - -Bool = bool -Double = float -Str = str -Int = int - -Byte = NewType("Byte", int) -Int16 = NewType("Int16", int) -UInt16 = NewType("UInt16", int) -Int32 = NewType("Int32", int) -UInt32 = NewType("UInt32", int) -Int64 = NewType("Int64", int) -UInt64 = NewType("UInt64", int) - -ObjPath = NewType('ObjPath', str) - - -class Variant(Generic[_T]): - def get_type_string(self) -> str: ... - def get_child_value(self, i: int) -> object: ... - def get_variant(self) -> _T: ... - def unpack(self) -> _T: ... - - -def unwrap_variant(variant: Variant[_T]) -> _T: ... diff --git a/stubs/evdev/__init__.pyi b/stubs/evdev/__init__.pyi deleted file mode 100644 index 09371d8..0000000 --- a/stubs/evdev/__init__.pyi +++ /dev/null @@ -1,42 +0,0 @@ -import asyncio -from typing import NamedTuple - -from . import ecodes - - -class DeviceInfo(NamedTuple): - bustype: int - product: int - vendor: int - version: int - - -class InputEvent: - code: int - type: int - value: int - - def timestamp(self) -> float: ... - - -class ReadIterator: - def __aiter__(self) -> ReadIterator: ... - def __anext__(self) -> asyncio.Future[InputEvent]: ... - - -class InputDevice: - info: DeviceInfo - name: str - path: str - phys: str - - def __init__(self, dev: str): ... - def async_read_loop(self) -> ReadIterator: ... - def capabilities(self, verbose: bool = ..., absinfo: bool = ...) -> dict[int, list[int]]: ... - def close(self) -> None: ... - def grab(self) -> None: ... - def ungrab(self) -> None: ... - - -def categorize(event: InputEvent) -> InputEvent: ... -def list_devices(input_device_dir: str = ...) -> list[str]: ... diff --git a/stubs/evdev/ecodes.pyi b/stubs/evdev/ecodes.pyi deleted file mode 100644 index c1f5c05..0000000 --- a/stubs/evdev/ecodes.pyi +++ /dev/null @@ -1,122 +0,0 @@ -EV_KEY: int -KEY_NEXTSONG: int -KEY_PREVIOUSSONG: int -KEY_STOP: int -KEY_PLAYPAUSE: int -KEY_MUTE: int -KEY_VOLUMEUP: int -KEY_VOLUMEDOWN: int -KEY_LEFTCTRL: int -KEY_LEFTSHIFT: int -KEY_LEFTALT: int -KEY_LEFTMETA: int -KEY_RIGHTCTRL: int -KEY_RIGHTSHIFT: int -KEY_RIGHTALT: int -KEY_RIGHTMETA: int -KEY_RESERVED: int -KEY_A: int -KEY_B: int -KEY_C: int -KEY_D: int -KEY_E: int -KEY_F: int -KEY_G: int -KEY_H: int -KEY_I: int -KEY_J: int -KEY_K: int -KEY_L: int -KEY_M: int -KEY_N: int -KEY_O: int -KEY_P: int -KEY_Q: int -KEY_R: int -KEY_S: int -KEY_T: int -KEY_U: int -KEY_V: int -KEY_W: int -KEY_X: int -KEY_Y: int -KEY_Z: int -KEY_1: int -KEY_2: int -KEY_3: int -KEY_4: int -KEY_5: int -KEY_6: int -KEY_7: int -KEY_8: int -KEY_9: int -KEY_0: int -KEY_ENTER: int -KEY_ESC: int -KEY_BACKSPACE: int -KEY_TAB: int -KEY_SPACE: int -KEY_MINUS: int -KEY_EQUAL: int -KEY_LEFTBRACE: int -KEY_RIGHTBRACE: int -KEY_BACKSLASH: int -KEY_SEMICOLON: int -KEY_APOSTROPHE: int -KEY_GRAVE: int -KEY_COMMA: int -KEY_DOT: int -KEY_SLASH: int -KEY_CAPSLOCK: int -KEY_F1: int -KEY_F2: int -KEY_F3: int -KEY_F4: int -KEY_F5: int -KEY_F6: int -KEY_F7: int -KEY_F8: int -KEY_F9: int -KEY_F10: int -KEY_F11: int -KEY_F12: int -KEY_SYSRQ: int -KEY_SCROLLLOCK: int -KEY_PAUSE: int -KEY_INSERT: int -KEY_HOME: int -KEY_PAGEUP: int -KEY_DELETE: int -KEY_END: int -KEY_PAGEDOWN: int -KEY_RIGHT: int -KEY_LEFT: int -KEY_DOWN: int -KEY_UP: int -KEY_NUMLOCK: int -KEY_KPSLASH: int -KEY_KPASTERISK: int -KEY_KPMINUS: int -KEY_KPPLUS: int -KEY_KPENTER: int -KEY_KP1: int -KEY_KP2: int -KEY_KP3: int -KEY_KP4: int -KEY_KP5: int -KEY_KP6: int -KEY_KP7: int -KEY_KP8: int -KEY_KP9: int -KEY_KP0: int -KEY_KPDOT: int -KEY_102ND: int -KEY_COMPOSE: int -KEY_POWER: int -KEY_KPEQUAL: int -KEY_F13: int -KEY_F14: int -KEY_F15: int -KEY_F16: int -KEY_F17: int -KEY_F18: int diff --git a/web.py b/web.py deleted file mode 100644 index 8349c52..0000000 --- a/web.py +++ /dev/null @@ -1,244 +0,0 @@ -# Copyright (c) 2020 ruundii. All rights reserved. - -from aiohttp import web,WSMessage -from password import * -import json -from hid_devices import * -from bluetooth_devices import * -import asyncio -import concurrent.futures -import sys -import subprocess - -from aiohttp_session import SimpleCookieStorage, session_middleware -from aiohttp_security import check_authorized, \ - is_anonymous, authorized_userid, remember, forget, \ - setup as setup_security, SessionIdentityPolicy -from aiohttp_security.abc import AbstractAuthorizationPolicy - -PI_USER = 'pi' - -class PiAuthorizationPolicy(AbstractAuthorizationPolicy): - async def authorized_userid(self, identity): - """Retrieve authorized user id. - Return the user_id of the user identified by the identity - or 'None' if no user exists related to the identity. - """ - if identity == PI_USER: - return identity - - async def permits(self, identity, permission, context=None): - """Check user permissions. - Return True if the identity is allowed the permission - in the current context, else return False. - """ - return identity == PI_USER - -class Web: - def __init__(self, loop: asyncio.AbstractEventLoop, adapter, bluetooth_devices: BluetoothDeviceRegistry, hid_devices: HIDDeviceRegistry): - self.loop = loop - self.adapter = adapter - self.adapter.set_on_agent_action_handler(self.on_agent_action) - self.adapter.set_on_interface_changed_handler(self.on_adapter_interface_changed) - self.hid_devices = hid_devices - self.hid_devices.set_on_devices_changed_handler(self.on_hid_devices_change) - self.bluetooth_devices = bluetooth_devices - self.bluetooth_devices.set_on_devices_changed_handler(self.on_bluetooth_devices_change) - middleware = session_middleware(SimpleCookieStorage()) - self.app = web.Application(middlewares=[middleware]) - self.app.router.add_route('*', '/', self.root_handler) - self.app.router.add_route('POST', '/changepassword', self.change_password_handler) - self.app.router.add_route('POST', '/restartservice', self.restart_service_handler) - self.app.router.add_route('POST', '/reboot', self.reboot_handler) - self.app.router.add_route('POST', '/login', self.handler_login) - self.app.router.add_route('GET', '/authorised', self.handler_is_authorised) - self.app.router.add_route('POST', '/setdevicecapture', self.set_device_capture) - self.app.router.add_route('POST', '/setdevicefilter', self.set_device_filter) - self.app.router.add_route('POST', '/setcompatibilitydevice', self.set_compatibility_device) - self.app.router.add_route('POST', '/startscanning', self.start_scanning) - self.app.router.add_route('POST', '/stopscanning', self.stop_scanning) - self.app.router.add_route('POST', '/startdiscoverable', self.start_discoverable) - self.app.router.add_route('POST', '/stopdiscoverable', self.stop_discoverable) - self.app.router.add_route('GET', '/hiddevices', self.get_hid_devices_handler) - self.app.router.add_route('GET', '/bluetoothdevices', self.get_bluetooth_devices) - self.app.router.add_routes([web.get('/ws', self.websocket_handler)]) - self.app.router.add_static('/',"web/")# add_routes([web.get('/', self.hello)]) - - policy = SessionIdentityPolicy() - setup_security(self.app, policy, PiAuthorizationPolicy()) - - self.runner = None - self.site = None - self.ws = set() - self.executor = concurrent.futures.ThreadPoolExecutor(max_workers=3) - #web.run_app(self.app) - asyncio.run_coroutine_threadsafe(self.start_server(), loop=self.loop) - - async def handler_login(self, request): - data = await request.post() - password = data['password'] - if(is_valid_current_password(PI_USER, password)): - redirect_response = web.HTTPFound('/') - await remember(request, redirect_response, PI_USER) - raise redirect_response - else: - raise web.HTTPUnauthorized() - - async def handler_is_authorised(self, request): - await check_authorized(request) - return web.Response() - - async def on_hid_devices_change(self): - for ws in self.ws: - try: - await asyncio.wait_for(ws.send_json({"msg": "hid_devices_updated"}), 5) - except (asyncio.TimeoutError, RuntimeError): - self.ws.discard(ws) - await ws.close() - - async def on_bluetooth_devices_change(self): - for ws in self.ws: - await ws.send_json({'msg': 'bt_devices_updated'}) - - async def start_server(self): - self.runner = web.AppRunner(self.app) - await self.runner.setup() - self.site = web.TCPSite(self.runner, None, 8080) - await self.site.start() - - async def root_handler(self, request): - raise web.HTTPFound('/index.html') - - async def change_password_handler(self, request): - await check_authorized(request) - data = await request.post() - current_password = data['current_password'] - new_password = data['new_password'] - if not is_valid_current_password(PI_USER, current_password): - raise web.HTTPUnauthorized() - if not set_new_password(PI_USER, new_password): - raise web.HTTPError - return web.Response(text="Password successfully changed") - - async def restart_service_handler(self, request): - await check_authorized(request) - sys.exit(1) - - async def reboot_handler(self, request): - await check_authorized(request) - subprocess.Popen(['reboot']) - - async def get_hid_devices_handler(self, request): - await check_authorized(request) - return web.Response(text=json.dumps(self.hid_devices.get_hid_devices_with_config())) - - async def set_device_capture(self, request): - await check_authorized(request) - data = await request.post() - device_id = data['device_id'] - capture_state = data['capture'].lower() == 'true' - self.hid_devices.set_device_capture(device_id, capture_state) - return web.Response() - - async def set_device_filter(self, request): - await check_authorized(request) - data = await request.post() - device_id = data['device_id'] - filter = data['filter'] - self.hid_devices.set_device_filter(device_id, filter) - return web.Response() - - async def set_compatibility_device(self, request): - await check_authorized(request) - data = await request.post() - device_path = data['device_path'] - compatibility_state = data['compatibility_state'].lower() == 'true' - self.hid_devices.set_compatibility_device(device_path, compatibility_state) - return web.Response() - - - async def start_scanning(self, request): - await check_authorized(request) - try: - self.adapter.start_scan() - except Exception as exc: - raise web.HTTPError(reason=str(exc)) - return web.Response() - - async def stop_scanning(self, request): - await check_authorized(request) - try: - self.adapter.stop_scan() - except Exception as exc: - raise web.HTTPError(reason=str(exc)) - return web.Response() - - - async def start_discoverable(self, request): - await check_authorized(request) - try: - self.adapter.start_discoverable() - except Exception as exc: - raise web.HTTPError(reason=str(exc)) - return web.Response() - - async def stop_discoverable(self, request): - await check_authorized(request) - try: - self.adapter.stop_discoverable() - except Exception as exc: - raise web.HTTPError(reason=str(exc)) - return web.Response() - - async def get_bluetooth_devices(self, request): - await check_authorized(request) - return web.Response(text=json.dumps(self.adapter.get_devices())) - - async def on_agent_action(self, msg): - for ws in self.ws: - asyncio.run_coroutine_threadsafe(ws.send_json({'msg': 'agent_action', 'data':msg}), loop=self.loop) - - async def on_adapter_interface_changed(self): - for ws in self.ws: - asyncio.run_coroutine_threadsafe(ws.send_json({'msg': 'bt_devices_updated'}), loop=self.loop) - - async def websocket_handler(self, request): - await check_authorized(request) - ws = web.WebSocketResponse() - await ws.prepare(request) - - self.ws.add(ws) - try: - async for msg in ws: - if msg.type == web.WSMsgType.TEXT: - data = json.loads(msg.data) - if 'msg' in data: - if data['msg'] == 'close' or data['msg'] == 'shutdown': - await ws.close() - elif data['msg'] == 'connect': - await ws.send_json({'msg':'connected'}) - print('websocket connection opened') - elif data['msg'] == 'cancel_pairing': - self.adapter.cancel_pairing(data['device']) - elif data['msg'] == 'request_confirmation_response': - self.adapter.agent_request_confirmation_response(data['device'], data['passkey'], data['confirmed']) - elif data['msg'] == 'pair_device': - print("pairing") - self.loop.run_in_executor(self.executor, self.adapter.device_action, 'pair', data['device']) - print("pairing end") - elif data['msg'] == 'connect_device': - self.loop.run_in_executor(self.executor, self.adapter.device_action, 'connect', data['device']) - elif data['msg'] == 'disconnect_device': - self.loop.run_in_executor(self.executor, self.adapter.device_action, 'disconnect', data['device']) - elif data['msg'] == 'remove_device': - self.loop.run_in_executor(self.executor, self.adapter.remove_device, data['device']) - else: - pass - #await ws.send_json({'msg':'connected'}) - elif msg.type == web.WSMsgType.ERROR: - print('ws connection closed with exception %s' % - ws.exception()) - finally: - self.ws.discard(ws) - print('websocket connection closed') - return ws diff --git a/web/.gitignore b/web/.gitignore deleted file mode 100644 index 4d29575..0000000 --- a/web/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/web/css/main.css b/web/css/main.css deleted file mode 100644 index d13ec8e..0000000 --- a/web/css/main.css +++ /dev/null @@ -1,52 +0,0 @@ -.navbar-item{ - font-size: 1.2em -} - -.tabs .tab a{ - color:#fff; - line-height: 22px; - display: inline-block; - vertical-align: middle; - height: auto; -} /*Black color to the text*/ - -.tabs .tab a:hover { - color:#fff; -} /*Text color on hover*/ - -.tabs .tab a.active { - color:#fff; -} /*Background and text color when a tab is active*/ - -.tabs .indicator { - background-color:#00796b; -} /*Color of underline*/ - -@media (max-width: 500px) { - .navbar-item{ - font-size: 1em - } - .my-brand-logo{ - font-size: 1.6rem; - } -} - -.capture-check{ - padding-left: 16pt; -} - -.select-wrapper input.select-dropdown{ - border-bottom: 0px; -} -.select-wrapper input.select-dropdown:focus{ - border-bottom: 0px; -} - -ul li { - word-break: normal; - white-space: normal; -} - -.collapsible-body{ - padding: 10px 15px 0px 15px; -} \ No newline at end of file diff --git a/web/css/materialize.css b/web/css/materialize.css deleted file mode 100644 index bc6c1fe..0000000 --- a/web/css/materialize.css +++ /dev/null @@ -1,9067 +0,0 @@ -/*! - * Materialize v1.0.0 (http://materializecss.com) - * Copyright 2014-2017 Materialize - * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) - */ -.materialize-red { - background-color: #e51c23 !important; -} - -.materialize-red-text { - color: #e51c23 !important; -} - -.materialize-red.lighten-5 { - background-color: #fdeaeb !important; -} - -.materialize-red-text.text-lighten-5 { - color: #fdeaeb !important; -} - -.materialize-red.lighten-4 { - background-color: #f8c1c3 !important; -} - -.materialize-red-text.text-lighten-4 { - color: #f8c1c3 !important; -} - -.materialize-red.lighten-3 { - background-color: #f3989b !important; -} - -.materialize-red-text.text-lighten-3 { - color: #f3989b !important; -} - -.materialize-red.lighten-2 { - background-color: #ee6e73 !important; -} - -.materialize-red-text.text-lighten-2 { - color: #ee6e73 !important; -} - -.materialize-red.lighten-1 { - background-color: #ea454b !important; -} - -.materialize-red-text.text-lighten-1 { - color: #ea454b !important; -} - -.materialize-red.darken-1 { - background-color: #d0181e !important; -} - -.materialize-red-text.text-darken-1 { - color: #d0181e !important; -} - -.materialize-red.darken-2 { - background-color: #b9151b !important; -} - -.materialize-red-text.text-darken-2 { - color: #b9151b !important; -} - -.materialize-red.darken-3 { - background-color: #a21318 !important; -} - -.materialize-red-text.text-darken-3 { - color: #a21318 !important; -} - -.materialize-red.darken-4 { - background-color: #8b1014 !important; -} - -.materialize-red-text.text-darken-4 { - color: #8b1014 !important; -} - -.red { - background-color: #F44336 !important; -} - -.red-text { - color: #F44336 !important; -} - -.red.lighten-5 { - background-color: #FFEBEE !important; -} - -.red-text.text-lighten-5 { - color: #FFEBEE !important; -} - -.red.lighten-4 { - background-color: #FFCDD2 !important; -} - -.red-text.text-lighten-4 { - color: #FFCDD2 !important; -} - -.red.lighten-3 { - background-color: #EF9A9A !important; -} - -.red-text.text-lighten-3 { - color: #EF9A9A !important; -} - -.red.lighten-2 { - background-color: #E57373 !important; -} - -.red-text.text-lighten-2 { - color: #E57373 !important; -} - -.red.lighten-1 { - background-color: #EF5350 !important; -} - -.red-text.text-lighten-1 { - color: #EF5350 !important; -} - -.red.darken-1 { - background-color: #E53935 !important; -} - -.red-text.text-darken-1 { - color: #E53935 !important; -} - -.red.darken-2 { - background-color: #D32F2F !important; -} - -.red-text.text-darken-2 { - color: #D32F2F !important; -} - -.red.darken-3 { - background-color: #C62828 !important; -} - -.red-text.text-darken-3 { - color: #C62828 !important; -} - -.red.darken-4 { - background-color: #B71C1C !important; -} - -.red-text.text-darken-4 { - color: #B71C1C !important; -} - -.red.accent-1 { - background-color: #FF8A80 !important; -} - -.red-text.text-accent-1 { - color: #FF8A80 !important; -} - -.red.accent-2 { - background-color: #FF5252 !important; -} - -.red-text.text-accent-2 { - color: #FF5252 !important; -} - -.red.accent-3 { - background-color: #FF1744 !important; -} - -.red-text.text-accent-3 { - color: #FF1744 !important; -} - -.red.accent-4 { - background-color: #D50000 !important; -} - -.red-text.text-accent-4 { - color: #D50000 !important; -} - -.pink { - background-color: #e91e63 !important; -} - -.pink-text { - color: #e91e63 !important; -} - -.pink.lighten-5 { - background-color: #fce4ec !important; -} - -.pink-text.text-lighten-5 { - color: #fce4ec !important; -} - -.pink.lighten-4 { - background-color: #f8bbd0 !important; -} - -.pink-text.text-lighten-4 { - color: #f8bbd0 !important; -} - -.pink.lighten-3 { - background-color: #f48fb1 !important; -} - -.pink-text.text-lighten-3 { - color: #f48fb1 !important; -} - -.pink.lighten-2 { - background-color: #f06292 !important; -} - -.pink-text.text-lighten-2 { - color: #f06292 !important; -} - -.pink.lighten-1 { - background-color: #ec407a !important; -} - -.pink-text.text-lighten-1 { - color: #ec407a !important; -} - -.pink.darken-1 { - background-color: #d81b60 !important; -} - -.pink-text.text-darken-1 { - color: #d81b60 !important; -} - -.pink.darken-2 { - background-color: #c2185b !important; -} - -.pink-text.text-darken-2 { - color: #c2185b !important; -} - -.pink.darken-3 { - background-color: #ad1457 !important; -} - -.pink-text.text-darken-3 { - color: #ad1457 !important; -} - -.pink.darken-4 { - background-color: #880e4f !important; -} - -.pink-text.text-darken-4 { - color: #880e4f !important; -} - -.pink.accent-1 { - background-color: #ff80ab !important; -} - -.pink-text.text-accent-1 { - color: #ff80ab !important; -} - -.pink.accent-2 { - background-color: #ff4081 !important; -} - -.pink-text.text-accent-2 { - color: #ff4081 !important; -} - -.pink.accent-3 { - background-color: #f50057 !important; -} - -.pink-text.text-accent-3 { - color: #f50057 !important; -} - -.pink.accent-4 { - background-color: #c51162 !important; -} - -.pink-text.text-accent-4 { - color: #c51162 !important; -} - -.purple { - background-color: #9c27b0 !important; -} - -.purple-text { - color: #9c27b0 !important; -} - -.purple.lighten-5 { - background-color: #f3e5f5 !important; -} - -.purple-text.text-lighten-5 { - color: #f3e5f5 !important; -} - -.purple.lighten-4 { - background-color: #e1bee7 !important; -} - -.purple-text.text-lighten-4 { - color: #e1bee7 !important; -} - -.purple.lighten-3 { - background-color: #ce93d8 !important; -} - -.purple-text.text-lighten-3 { - color: #ce93d8 !important; -} - -.purple.lighten-2 { - background-color: #ba68c8 !important; -} - -.purple-text.text-lighten-2 { - color: #ba68c8 !important; -} - -.purple.lighten-1 { - background-color: #ab47bc !important; -} - -.purple-text.text-lighten-1 { - color: #ab47bc !important; -} - -.purple.darken-1 { - background-color: #8e24aa !important; -} - -.purple-text.text-darken-1 { - color: #8e24aa !important; -} - -.purple.darken-2 { - background-color: #7b1fa2 !important; -} - -.purple-text.text-darken-2 { - color: #7b1fa2 !important; -} - -.purple.darken-3 { - background-color: #6a1b9a !important; -} - -.purple-text.text-darken-3 { - color: #6a1b9a !important; -} - -.purple.darken-4 { - background-color: #4a148c !important; -} - -.purple-text.text-darken-4 { - color: #4a148c !important; -} - -.purple.accent-1 { - background-color: #ea80fc !important; -} - -.purple-text.text-accent-1 { - color: #ea80fc !important; -} - -.purple.accent-2 { - background-color: #e040fb !important; -} - -.purple-text.text-accent-2 { - color: #e040fb !important; -} - -.purple.accent-3 { - background-color: #d500f9 !important; -} - -.purple-text.text-accent-3 { - color: #d500f9 !important; -} - -.purple.accent-4 { - background-color: #aa00ff !important; -} - -.purple-text.text-accent-4 { - color: #aa00ff !important; -} - -.deep-purple { - background-color: #673ab7 !important; -} - -.deep-purple-text { - color: #673ab7 !important; -} - -.deep-purple.lighten-5 { - background-color: #ede7f6 !important; -} - -.deep-purple-text.text-lighten-5 { - color: #ede7f6 !important; -} - -.deep-purple.lighten-4 { - background-color: #d1c4e9 !important; -} - -.deep-purple-text.text-lighten-4 { - color: #d1c4e9 !important; -} - -.deep-purple.lighten-3 { - background-color: #b39ddb !important; -} - -.deep-purple-text.text-lighten-3 { - color: #b39ddb !important; -} - -.deep-purple.lighten-2 { - background-color: #9575cd !important; -} - -.deep-purple-text.text-lighten-2 { - color: #9575cd !important; -} - -.deep-purple.lighten-1 { - background-color: #7e57c2 !important; -} - -.deep-purple-text.text-lighten-1 { - color: #7e57c2 !important; -} - -.deep-purple.darken-1 { - background-color: #5e35b1 !important; -} - -.deep-purple-text.text-darken-1 { - color: #5e35b1 !important; -} - -.deep-purple.darken-2 { - background-color: #512da8 !important; -} - -.deep-purple-text.text-darken-2 { - color: #512da8 !important; -} - -.deep-purple.darken-3 { - background-color: #4527a0 !important; -} - -.deep-purple-text.text-darken-3 { - color: #4527a0 !important; -} - -.deep-purple.darken-4 { - background-color: #311b92 !important; -} - -.deep-purple-text.text-darken-4 { - color: #311b92 !important; -} - -.deep-purple.accent-1 { - background-color: #b388ff !important; -} - -.deep-purple-text.text-accent-1 { - color: #b388ff !important; -} - -.deep-purple.accent-2 { - background-color: #7c4dff !important; -} - -.deep-purple-text.text-accent-2 { - color: #7c4dff !important; -} - -.deep-purple.accent-3 { - background-color: #651fff !important; -} - -.deep-purple-text.text-accent-3 { - color: #651fff !important; -} - -.deep-purple.accent-4 { - background-color: #6200ea !important; -} - -.deep-purple-text.text-accent-4 { - color: #6200ea !important; -} - -.indigo { - background-color: #3f51b5 !important; -} - -.indigo-text { - color: #3f51b5 !important; -} - -.indigo.lighten-5 { - background-color: #e8eaf6 !important; -} - -.indigo-text.text-lighten-5 { - color: #e8eaf6 !important; -} - -.indigo.lighten-4 { - background-color: #c5cae9 !important; -} - -.indigo-text.text-lighten-4 { - color: #c5cae9 !important; -} - -.indigo.lighten-3 { - background-color: #9fa8da !important; -} - -.indigo-text.text-lighten-3 { - color: #9fa8da !important; -} - -.indigo.lighten-2 { - background-color: #7986cb !important; -} - -.indigo-text.text-lighten-2 { - color: #7986cb !important; -} - -.indigo.lighten-1 { - background-color: #5c6bc0 !important; -} - -.indigo-text.text-lighten-1 { - color: #5c6bc0 !important; -} - -.indigo.darken-1 { - background-color: #3949ab !important; -} - -.indigo-text.text-darken-1 { - color: #3949ab !important; -} - -.indigo.darken-2 { - background-color: #303f9f !important; -} - -.indigo-text.text-darken-2 { - color: #303f9f !important; -} - -.indigo.darken-3 { - background-color: #283593 !important; -} - -.indigo-text.text-darken-3 { - color: #283593 !important; -} - -.indigo.darken-4 { - background-color: #1a237e !important; -} - -.indigo-text.text-darken-4 { - color: #1a237e !important; -} - -.indigo.accent-1 { - background-color: #8c9eff !important; -} - -.indigo-text.text-accent-1 { - color: #8c9eff !important; -} - -.indigo.accent-2 { - background-color: #536dfe !important; -} - -.indigo-text.text-accent-2 { - color: #536dfe !important; -} - -.indigo.accent-3 { - background-color: #3d5afe !important; -} - -.indigo-text.text-accent-3 { - color: #3d5afe !important; -} - -.indigo.accent-4 { - background-color: #304ffe !important; -} - -.indigo-text.text-accent-4 { - color: #304ffe !important; -} - -.blue { - background-color: #2196F3 !important; -} - -.blue-text { - color: #2196F3 !important; -} - -.blue.lighten-5 { - background-color: #E3F2FD !important; -} - -.blue-text.text-lighten-5 { - color: #E3F2FD !important; -} - -.blue.lighten-4 { - background-color: #BBDEFB !important; -} - -.blue-text.text-lighten-4 { - color: #BBDEFB !important; -} - -.blue.lighten-3 { - background-color: #90CAF9 !important; -} - -.blue-text.text-lighten-3 { - color: #90CAF9 !important; -} - -.blue.lighten-2 { - background-color: #64B5F6 !important; -} - -.blue-text.text-lighten-2 { - color: #64B5F6 !important; -} - -.blue.lighten-1 { - background-color: #42A5F5 !important; -} - -.blue-text.text-lighten-1 { - color: #42A5F5 !important; -} - -.blue.darken-1 { - background-color: #1E88E5 !important; -} - -.blue-text.text-darken-1 { - color: #1E88E5 !important; -} - -.blue.darken-2 { - background-color: #1976D2 !important; -} - -.blue-text.text-darken-2 { - color: #1976D2 !important; -} - -.blue.darken-3 { - background-color: #1565C0 !important; -} - -.blue-text.text-darken-3 { - color: #1565C0 !important; -} - -.blue.darken-4 { - background-color: #0D47A1 !important; -} - -.blue-text.text-darken-4 { - color: #0D47A1 !important; -} - -.blue.accent-1 { - background-color: #82B1FF !important; -} - -.blue-text.text-accent-1 { - color: #82B1FF !important; -} - -.blue.accent-2 { - background-color: #448AFF !important; -} - -.blue-text.text-accent-2 { - color: #448AFF !important; -} - -.blue.accent-3 { - background-color: #2979FF !important; -} - -.blue-text.text-accent-3 { - color: #2979FF !important; -} - -.blue.accent-4 { - background-color: #2962FF !important; -} - -.blue-text.text-accent-4 { - color: #2962FF !important; -} - -.light-blue { - background-color: #03a9f4 !important; -} - -.light-blue-text { - color: #03a9f4 !important; -} - -.light-blue.lighten-5 { - background-color: #e1f5fe !important; -} - -.light-blue-text.text-lighten-5 { - color: #e1f5fe !important; -} - -.light-blue.lighten-4 { - background-color: #b3e5fc !important; -} - -.light-blue-text.text-lighten-4 { - color: #b3e5fc !important; -} - -.light-blue.lighten-3 { - background-color: #81d4fa !important; -} - -.light-blue-text.text-lighten-3 { - color: #81d4fa !important; -} - -.light-blue.lighten-2 { - background-color: #4fc3f7 !important; -} - -.light-blue-text.text-lighten-2 { - color: #4fc3f7 !important; -} - -.light-blue.lighten-1 { - background-color: #29b6f6 !important; -} - -.light-blue-text.text-lighten-1 { - color: #29b6f6 !important; -} - -.light-blue.darken-1 { - background-color: #039be5 !important; -} - -.light-blue-text.text-darken-1 { - color: #039be5 !important; -} - -.light-blue.darken-2 { - background-color: #0288d1 !important; -} - -.light-blue-text.text-darken-2 { - color: #0288d1 !important; -} - -.light-blue.darken-3 { - background-color: #0277bd !important; -} - -.light-blue-text.text-darken-3 { - color: #0277bd !important; -} - -.light-blue.darken-4 { - background-color: #01579b !important; -} - -.light-blue-text.text-darken-4 { - color: #01579b !important; -} - -.light-blue.accent-1 { - background-color: #80d8ff !important; -} - -.light-blue-text.text-accent-1 { - color: #80d8ff !important; -} - -.light-blue.accent-2 { - background-color: #40c4ff !important; -} - -.light-blue-text.text-accent-2 { - color: #40c4ff !important; -} - -.light-blue.accent-3 { - background-color: #00b0ff !important; -} - -.light-blue-text.text-accent-3 { - color: #00b0ff !important; -} - -.light-blue.accent-4 { - background-color: #0091ea !important; -} - -.light-blue-text.text-accent-4 { - color: #0091ea !important; -} - -.cyan { - background-color: #00bcd4 !important; -} - -.cyan-text { - color: #00bcd4 !important; -} - -.cyan.lighten-5 { - background-color: #e0f7fa !important; -} - -.cyan-text.text-lighten-5 { - color: #e0f7fa !important; -} - -.cyan.lighten-4 { - background-color: #b2ebf2 !important; -} - -.cyan-text.text-lighten-4 { - color: #b2ebf2 !important; -} - -.cyan.lighten-3 { - background-color: #80deea !important; -} - -.cyan-text.text-lighten-3 { - color: #80deea !important; -} - -.cyan.lighten-2 { - background-color: #4dd0e1 !important; -} - -.cyan-text.text-lighten-2 { - color: #4dd0e1 !important; -} - -.cyan.lighten-1 { - background-color: #26c6da !important; -} - -.cyan-text.text-lighten-1 { - color: #26c6da !important; -} - -.cyan.darken-1 { - background-color: #00acc1 !important; -} - -.cyan-text.text-darken-1 { - color: #00acc1 !important; -} - -.cyan.darken-2 { - background-color: #0097a7 !important; -} - -.cyan-text.text-darken-2 { - color: #0097a7 !important; -} - -.cyan.darken-3 { - background-color: #00838f !important; -} - -.cyan-text.text-darken-3 { - color: #00838f !important; -} - -.cyan.darken-4 { - background-color: #006064 !important; -} - -.cyan-text.text-darken-4 { - color: #006064 !important; -} - -.cyan.accent-1 { - background-color: #84ffff !important; -} - -.cyan-text.text-accent-1 { - color: #84ffff !important; -} - -.cyan.accent-2 { - background-color: #18ffff !important; -} - -.cyan-text.text-accent-2 { - color: #18ffff !important; -} - -.cyan.accent-3 { - background-color: #00e5ff !important; -} - -.cyan-text.text-accent-3 { - color: #00e5ff !important; -} - -.cyan.accent-4 { - background-color: #00b8d4 !important; -} - -.cyan-text.text-accent-4 { - color: #00b8d4 !important; -} - -.teal { - background-color: #009688 !important; -} - -.teal-text { - color: #009688 !important; -} - -.teal.lighten-5 { - background-color: #e0f2f1 !important; -} - -.teal-text.text-lighten-5 { - color: #e0f2f1 !important; -} - -.teal.lighten-4 { - background-color: #b2dfdb !important; -} - -.teal-text.text-lighten-4 { - color: #b2dfdb !important; -} - -.teal.lighten-3 { - background-color: #80cbc4 !important; -} - -.teal-text.text-lighten-3 { - color: #80cbc4 !important; -} - -.teal.lighten-2 { - background-color: #4db6ac !important; -} - -.teal-text.text-lighten-2 { - color: #4db6ac !important; -} - -.teal.lighten-1 { - background-color: #26a69a !important; -} - -.teal-text.text-lighten-1 { - color: #26a69a !important; -} - -.teal.darken-1 { - background-color: #00897b !important; -} - -.teal-text.text-darken-1 { - color: #00897b !important; -} - -.teal.darken-2 { - background-color: #00796b !important; -} - -.teal-text.text-darken-2 { - color: #00796b !important; -} - -.teal.darken-3 { - background-color: #00695c !important; -} - -.teal-text.text-darken-3 { - color: #00695c !important; -} - -.teal.darken-4 { - background-color: #004d40 !important; -} - -.teal-text.text-darken-4 { - color: #004d40 !important; -} - -.teal.accent-1 { - background-color: #a7ffeb !important; -} - -.teal-text.text-accent-1 { - color: #a7ffeb !important; -} - -.teal.accent-2 { - background-color: #64ffda !important; -} - -.teal-text.text-accent-2 { - color: #64ffda !important; -} - -.teal.accent-3 { - background-color: #1de9b6 !important; -} - -.teal-text.text-accent-3 { - color: #1de9b6 !important; -} - -.teal.accent-4 { - background-color: #00bfa5 !important; -} - -.teal-text.text-accent-4 { - color: #00bfa5 !important; -} - -.green { - background-color: #4CAF50 !important; -} - -.green-text { - color: #4CAF50 !important; -} - -.green.lighten-5 { - background-color: #E8F5E9 !important; -} - -.green-text.text-lighten-5 { - color: #E8F5E9 !important; -} - -.green.lighten-4 { - background-color: #C8E6C9 !important; -} - -.green-text.text-lighten-4 { - color: #C8E6C9 !important; -} - -.green.lighten-3 { - background-color: #A5D6A7 !important; -} - -.green-text.text-lighten-3 { - color: #A5D6A7 !important; -} - -.green.lighten-2 { - background-color: #81C784 !important; -} - -.green-text.text-lighten-2 { - color: #81C784 !important; -} - -.green.lighten-1 { - background-color: #66BB6A !important; -} - -.green-text.text-lighten-1 { - color: #66BB6A !important; -} - -.green.darken-1 { - background-color: #43A047 !important; -} - -.green-text.text-darken-1 { - color: #43A047 !important; -} - -.green.darken-2 { - background-color: #388E3C !important; -} - -.green-text.text-darken-2 { - color: #388E3C !important; -} - -.green.darken-3 { - background-color: #2E7D32 !important; -} - -.green-text.text-darken-3 { - color: #2E7D32 !important; -} - -.green.darken-4 { - background-color: #1B5E20 !important; -} - -.green-text.text-darken-4 { - color: #1B5E20 !important; -} - -.green.accent-1 { - background-color: #B9F6CA !important; -} - -.green-text.text-accent-1 { - color: #B9F6CA !important; -} - -.green.accent-2 { - background-color: #69F0AE !important; -} - -.green-text.text-accent-2 { - color: #69F0AE !important; -} - -.green.accent-3 { - background-color: #00E676 !important; -} - -.green-text.text-accent-3 { - color: #00E676 !important; -} - -.green.accent-4 { - background-color: #00C853 !important; -} - -.green-text.text-accent-4 { - color: #00C853 !important; -} - -.light-green { - background-color: #8bc34a !important; -} - -.light-green-text { - color: #8bc34a !important; -} - -.light-green.lighten-5 { - background-color: #f1f8e9 !important; -} - -.light-green-text.text-lighten-5 { - color: #f1f8e9 !important; -} - -.light-green.lighten-4 { - background-color: #dcedc8 !important; -} - -.light-green-text.text-lighten-4 { - color: #dcedc8 !important; -} - -.light-green.lighten-3 { - background-color: #c5e1a5 !important; -} - -.light-green-text.text-lighten-3 { - color: #c5e1a5 !important; -} - -.light-green.lighten-2 { - background-color: #aed581 !important; -} - -.light-green-text.text-lighten-2 { - color: #aed581 !important; -} - -.light-green.lighten-1 { - background-color: #9ccc65 !important; -} - -.light-green-text.text-lighten-1 { - color: #9ccc65 !important; -} - -.light-green.darken-1 { - background-color: #7cb342 !important; -} - -.light-green-text.text-darken-1 { - color: #7cb342 !important; -} - -.light-green.darken-2 { - background-color: #689f38 !important; -} - -.light-green-text.text-darken-2 { - color: #689f38 !important; -} - -.light-green.darken-3 { - background-color: #558b2f !important; -} - -.light-green-text.text-darken-3 { - color: #558b2f !important; -} - -.light-green.darken-4 { - background-color: #33691e !important; -} - -.light-green-text.text-darken-4 { - color: #33691e !important; -} - -.light-green.accent-1 { - background-color: #ccff90 !important; -} - -.light-green-text.text-accent-1 { - color: #ccff90 !important; -} - -.light-green.accent-2 { - background-color: #b2ff59 !important; -} - -.light-green-text.text-accent-2 { - color: #b2ff59 !important; -} - -.light-green.accent-3 { - background-color: #76ff03 !important; -} - -.light-green-text.text-accent-3 { - color: #76ff03 !important; -} - -.light-green.accent-4 { - background-color: #64dd17 !important; -} - -.light-green-text.text-accent-4 { - color: #64dd17 !important; -} - -.lime { - background-color: #cddc39 !important; -} - -.lime-text { - color: #cddc39 !important; -} - -.lime.lighten-5 { - background-color: #f9fbe7 !important; -} - -.lime-text.text-lighten-5 { - color: #f9fbe7 !important; -} - -.lime.lighten-4 { - background-color: #f0f4c3 !important; -} - -.lime-text.text-lighten-4 { - color: #f0f4c3 !important; -} - -.lime.lighten-3 { - background-color: #e6ee9c !important; -} - -.lime-text.text-lighten-3 { - color: #e6ee9c !important; -} - -.lime.lighten-2 { - background-color: #dce775 !important; -} - -.lime-text.text-lighten-2 { - color: #dce775 !important; -} - -.lime.lighten-1 { - background-color: #d4e157 !important; -} - -.lime-text.text-lighten-1 { - color: #d4e157 !important; -} - -.lime.darken-1 { - background-color: #c0ca33 !important; -} - -.lime-text.text-darken-1 { - color: #c0ca33 !important; -} - -.lime.darken-2 { - background-color: #afb42b !important; -} - -.lime-text.text-darken-2 { - color: #afb42b !important; -} - -.lime.darken-3 { - background-color: #9e9d24 !important; -} - -.lime-text.text-darken-3 { - color: #9e9d24 !important; -} - -.lime.darken-4 { - background-color: #827717 !important; -} - -.lime-text.text-darken-4 { - color: #827717 !important; -} - -.lime.accent-1 { - background-color: #f4ff81 !important; -} - -.lime-text.text-accent-1 { - color: #f4ff81 !important; -} - -.lime.accent-2 { - background-color: #eeff41 !important; -} - -.lime-text.text-accent-2 { - color: #eeff41 !important; -} - -.lime.accent-3 { - background-color: #c6ff00 !important; -} - -.lime-text.text-accent-3 { - color: #c6ff00 !important; -} - -.lime.accent-4 { - background-color: #aeea00 !important; -} - -.lime-text.text-accent-4 { - color: #aeea00 !important; -} - -.yellow { - background-color: #ffeb3b !important; -} - -.yellow-text { - color: #ffeb3b !important; -} - -.yellow.lighten-5 { - background-color: #fffde7 !important; -} - -.yellow-text.text-lighten-5 { - color: #fffde7 !important; -} - -.yellow.lighten-4 { - background-color: #fff9c4 !important; -} - -.yellow-text.text-lighten-4 { - color: #fff9c4 !important; -} - -.yellow.lighten-3 { - background-color: #fff59d !important; -} - -.yellow-text.text-lighten-3 { - color: #fff59d !important; -} - -.yellow.lighten-2 { - background-color: #fff176 !important; -} - -.yellow-text.text-lighten-2 { - color: #fff176 !important; -} - -.yellow.lighten-1 { - background-color: #ffee58 !important; -} - -.yellow-text.text-lighten-1 { - color: #ffee58 !important; -} - -.yellow.darken-1 { - background-color: #fdd835 !important; -} - -.yellow-text.text-darken-1 { - color: #fdd835 !important; -} - -.yellow.darken-2 { - background-color: #fbc02d !important; -} - -.yellow-text.text-darken-2 { - color: #fbc02d !important; -} - -.yellow.darken-3 { - background-color: #f9a825 !important; -} - -.yellow-text.text-darken-3 { - color: #f9a825 !important; -} - -.yellow.darken-4 { - background-color: #f57f17 !important; -} - -.yellow-text.text-darken-4 { - color: #f57f17 !important; -} - -.yellow.accent-1 { - background-color: #ffff8d !important; -} - -.yellow-text.text-accent-1 { - color: #ffff8d !important; -} - -.yellow.accent-2 { - background-color: #ffff00 !important; -} - -.yellow-text.text-accent-2 { - color: #ffff00 !important; -} - -.yellow.accent-3 { - background-color: #ffea00 !important; -} - -.yellow-text.text-accent-3 { - color: #ffea00 !important; -} - -.yellow.accent-4 { - background-color: #ffd600 !important; -} - -.yellow-text.text-accent-4 { - color: #ffd600 !important; -} - -.amber { - background-color: #ffc107 !important; -} - -.amber-text { - color: #ffc107 !important; -} - -.amber.lighten-5 { - background-color: #fff8e1 !important; -} - -.amber-text.text-lighten-5 { - color: #fff8e1 !important; -} - -.amber.lighten-4 { - background-color: #ffecb3 !important; -} - -.amber-text.text-lighten-4 { - color: #ffecb3 !important; -} - -.amber.lighten-3 { - background-color: #ffe082 !important; -} - -.amber-text.text-lighten-3 { - color: #ffe082 !important; -} - -.amber.lighten-2 { - background-color: #ffd54f !important; -} - -.amber-text.text-lighten-2 { - color: #ffd54f !important; -} - -.amber.lighten-1 { - background-color: #ffca28 !important; -} - -.amber-text.text-lighten-1 { - color: #ffca28 !important; -} - -.amber.darken-1 { - background-color: #ffb300 !important; -} - -.amber-text.text-darken-1 { - color: #ffb300 !important; -} - -.amber.darken-2 { - background-color: #ffa000 !important; -} - -.amber-text.text-darken-2 { - color: #ffa000 !important; -} - -.amber.darken-3 { - background-color: #ff8f00 !important; -} - -.amber-text.text-darken-3 { - color: #ff8f00 !important; -} - -.amber.darken-4 { - background-color: #ff6f00 !important; -} - -.amber-text.text-darken-4 { - color: #ff6f00 !important; -} - -.amber.accent-1 { - background-color: #ffe57f !important; -} - -.amber-text.text-accent-1 { - color: #ffe57f !important; -} - -.amber.accent-2 { - background-color: #ffd740 !important; -} - -.amber-text.text-accent-2 { - color: #ffd740 !important; -} - -.amber.accent-3 { - background-color: #ffc400 !important; -} - -.amber-text.text-accent-3 { - color: #ffc400 !important; -} - -.amber.accent-4 { - background-color: #ffab00 !important; -} - -.amber-text.text-accent-4 { - color: #ffab00 !important; -} - -.orange { - background-color: #ff9800 !important; -} - -.orange-text { - color: #ff9800 !important; -} - -.orange.lighten-5 { - background-color: #fff3e0 !important; -} - -.orange-text.text-lighten-5 { - color: #fff3e0 !important; -} - -.orange.lighten-4 { - background-color: #ffe0b2 !important; -} - -.orange-text.text-lighten-4 { - color: #ffe0b2 !important; -} - -.orange.lighten-3 { - background-color: #ffcc80 !important; -} - -.orange-text.text-lighten-3 { - color: #ffcc80 !important; -} - -.orange.lighten-2 { - background-color: #ffb74d !important; -} - -.orange-text.text-lighten-2 { - color: #ffb74d !important; -} - -.orange.lighten-1 { - background-color: #ffa726 !important; -} - -.orange-text.text-lighten-1 { - color: #ffa726 !important; -} - -.orange.darken-1 { - background-color: #fb8c00 !important; -} - -.orange-text.text-darken-1 { - color: #fb8c00 !important; -} - -.orange.darken-2 { - background-color: #f57c00 !important; -} - -.orange-text.text-darken-2 { - color: #f57c00 !important; -} - -.orange.darken-3 { - background-color: #ef6c00 !important; -} - -.orange-text.text-darken-3 { - color: #ef6c00 !important; -} - -.orange.darken-4 { - background-color: #e65100 !important; -} - -.orange-text.text-darken-4 { - color: #e65100 !important; -} - -.orange.accent-1 { - background-color: #ffd180 !important; -} - -.orange-text.text-accent-1 { - color: #ffd180 !important; -} - -.orange.accent-2 { - background-color: #ffab40 !important; -} - -.orange-text.text-accent-2 { - color: #ffab40 !important; -} - -.orange.accent-3 { - background-color: #ff9100 !important; -} - -.orange-text.text-accent-3 { - color: #ff9100 !important; -} - -.orange.accent-4 { - background-color: #ff6d00 !important; -} - -.orange-text.text-accent-4 { - color: #ff6d00 !important; -} - -.deep-orange { - background-color: #ff5722 !important; -} - -.deep-orange-text { - color: #ff5722 !important; -} - -.deep-orange.lighten-5 { - background-color: #fbe9e7 !important; -} - -.deep-orange-text.text-lighten-5 { - color: #fbe9e7 !important; -} - -.deep-orange.lighten-4 { - background-color: #ffccbc !important; -} - -.deep-orange-text.text-lighten-4 { - color: #ffccbc !important; -} - -.deep-orange.lighten-3 { - background-color: #ffab91 !important; -} - -.deep-orange-text.text-lighten-3 { - color: #ffab91 !important; -} - -.deep-orange.lighten-2 { - background-color: #ff8a65 !important; -} - -.deep-orange-text.text-lighten-2 { - color: #ff8a65 !important; -} - -.deep-orange.lighten-1 { - background-color: #ff7043 !important; -} - -.deep-orange-text.text-lighten-1 { - color: #ff7043 !important; -} - -.deep-orange.darken-1 { - background-color: #f4511e !important; -} - -.deep-orange-text.text-darken-1 { - color: #f4511e !important; -} - -.deep-orange.darken-2 { - background-color: #e64a19 !important; -} - -.deep-orange-text.text-darken-2 { - color: #e64a19 !important; -} - -.deep-orange.darken-3 { - background-color: #d84315 !important; -} - -.deep-orange-text.text-darken-3 { - color: #d84315 !important; -} - -.deep-orange.darken-4 { - background-color: #bf360c !important; -} - -.deep-orange-text.text-darken-4 { - color: #bf360c !important; -} - -.deep-orange.accent-1 { - background-color: #ff9e80 !important; -} - -.deep-orange-text.text-accent-1 { - color: #ff9e80 !important; -} - -.deep-orange.accent-2 { - background-color: #ff6e40 !important; -} - -.deep-orange-text.text-accent-2 { - color: #ff6e40 !important; -} - -.deep-orange.accent-3 { - background-color: #ff3d00 !important; -} - -.deep-orange-text.text-accent-3 { - color: #ff3d00 !important; -} - -.deep-orange.accent-4 { - background-color: #dd2c00 !important; -} - -.deep-orange-text.text-accent-4 { - color: #dd2c00 !important; -} - -.brown { - background-color: #795548 !important; -} - -.brown-text { - color: #795548 !important; -} - -.brown.lighten-5 { - background-color: #efebe9 !important; -} - -.brown-text.text-lighten-5 { - color: #efebe9 !important; -} - -.brown.lighten-4 { - background-color: #d7ccc8 !important; -} - -.brown-text.text-lighten-4 { - color: #d7ccc8 !important; -} - -.brown.lighten-3 { - background-color: #bcaaa4 !important; -} - -.brown-text.text-lighten-3 { - color: #bcaaa4 !important; -} - -.brown.lighten-2 { - background-color: #a1887f !important; -} - -.brown-text.text-lighten-2 { - color: #a1887f !important; -} - -.brown.lighten-1 { - background-color: #8d6e63 !important; -} - -.brown-text.text-lighten-1 { - color: #8d6e63 !important; -} - -.brown.darken-1 { - background-color: #6d4c41 !important; -} - -.brown-text.text-darken-1 { - color: #6d4c41 !important; -} - -.brown.darken-2 { - background-color: #5d4037 !important; -} - -.brown-text.text-darken-2 { - color: #5d4037 !important; -} - -.brown.darken-3 { - background-color: #4e342e !important; -} - -.brown-text.text-darken-3 { - color: #4e342e !important; -} - -.brown.darken-4 { - background-color: #3e2723 !important; -} - -.brown-text.text-darken-4 { - color: #3e2723 !important; -} - -.blue-grey { - background-color: #607d8b !important; -} - -.blue-grey-text { - color: #607d8b !important; -} - -.blue-grey.lighten-5 { - background-color: #eceff1 !important; -} - -.blue-grey-text.text-lighten-5 { - color: #eceff1 !important; -} - -.blue-grey.lighten-4 { - background-color: #cfd8dc !important; -} - -.blue-grey-text.text-lighten-4 { - color: #cfd8dc !important; -} - -.blue-grey.lighten-3 { - background-color: #b0bec5 !important; -} - -.blue-grey-text.text-lighten-3 { - color: #b0bec5 !important; -} - -.blue-grey.lighten-2 { - background-color: #90a4ae !important; -} - -.blue-grey-text.text-lighten-2 { - color: #90a4ae !important; -} - -.blue-grey.lighten-1 { - background-color: #78909c !important; -} - -.blue-grey-text.text-lighten-1 { - color: #78909c !important; -} - -.blue-grey.darken-1 { - background-color: #546e7a !important; -} - -.blue-grey-text.text-darken-1 { - color: #546e7a !important; -} - -.blue-grey.darken-2 { - background-color: #455a64 !important; -} - -.blue-grey-text.text-darken-2 { - color: #455a64 !important; -} - -.blue-grey.darken-3 { - background-color: #37474f !important; -} - -.blue-grey-text.text-darken-3 { - color: #37474f !important; -} - -.blue-grey.darken-4 { - background-color: #263238 !important; -} - -.blue-grey-text.text-darken-4 { - color: #263238 !important; -} - -.grey { - background-color: #9e9e9e !important; -} - -.grey-text { - color: #9e9e9e !important; -} - -.grey.lighten-5 { - background-color: #fafafa !important; -} - -.grey-text.text-lighten-5 { - color: #fafafa !important; -} - -.grey.lighten-4 { - background-color: #f5f5f5 !important; -} - -.grey-text.text-lighten-4 { - color: #f5f5f5 !important; -} - -.grey.lighten-3 { - background-color: #eeeeee !important; -} - -.grey-text.text-lighten-3 { - color: #eeeeee !important; -} - -.grey.lighten-2 { - background-color: #e0e0e0 !important; -} - -.grey-text.text-lighten-2 { - color: #e0e0e0 !important; -} - -.grey.lighten-1 { - background-color: #bdbdbd !important; -} - -.grey-text.text-lighten-1 { - color: #bdbdbd !important; -} - -.grey.darken-1 { - background-color: #757575 !important; -} - -.grey-text.text-darken-1 { - color: #757575 !important; -} - -.grey.darken-2 { - background-color: #616161 !important; -} - -.grey-text.text-darken-2 { - color: #616161 !important; -} - -.grey.darken-3 { - background-color: #424242 !important; -} - -.grey-text.text-darken-3 { - color: #424242 !important; -} - -.grey.darken-4 { - background-color: #212121 !important; -} - -.grey-text.text-darken-4 { - color: #212121 !important; -} - -.black { - background-color: #000000 !important; -} - -.black-text { - color: #000000 !important; -} - -.white { - background-color: #FFFFFF !important; -} - -.white-text { - color: #FFFFFF !important; -} - -.transparent { - background-color: transparent !important; -} - -.transparent-text { - color: transparent !important; -} - -/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */ -/* Document - ========================================================================== */ -/** - * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in - * IE on Windows Phone and in iOS. - */ -html { - line-height: 1.15; - /* 1 */ - -ms-text-size-adjust: 100%; - /* 2 */ - -webkit-text-size-adjust: 100%; - /* 2 */ -} - -/* Sections - ========================================================================== */ -/** - * Remove the margin in all browsers (opinionated). - */ -body { - margin: 0; -} - -/** - * Add the correct display in IE 9-. - */ -article, -aside, -footer, -header, -nav, -section { - display: block; -} - -/** - * Correct the font size and margin on `h1` elements within `section` and - * `article` contexts in Chrome, Firefox, and Safari. - */ -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/* Grouping content - ========================================================================== */ -/** - * Add the correct display in IE 9-. - * 1. Add the correct display in IE. - */ -figcaption, -figure, -main { - /* 1 */ - display: block; -} - -/** - * Add the correct margin in IE 8. - */ -figure { - margin: 1em 40px; -} - -/** - * 1. Add the correct box sizing in Firefox. - * 2. Show the overflow in Edge and IE. - */ -hr { - -webkit-box-sizing: content-box; - box-sizing: content-box; - /* 1 */ - height: 0; - /* 1 */ - overflow: visible; - /* 2 */ -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ -pre { - font-family: monospace, monospace; - /* 1 */ - font-size: 1em; - /* 2 */ -} - -/* Text-level semantics - ========================================================================== */ -/** - * 1. Remove the gray background on active links in IE 10. - * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. - */ -a { - background-color: transparent; - /* 1 */ - -webkit-text-decoration-skip: objects; - /* 2 */ -} - -/** - * 1. Remove the bottom border in Chrome 57- and Firefox 39-. - * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. - */ -abbr[title] { - border-bottom: none; - /* 1 */ - text-decoration: underline; - /* 2 */ - -webkit-text-decoration: underline dotted; - -moz-text-decoration: underline dotted; - text-decoration: underline dotted; - /* 2 */ -} - -/** - * Prevent the duplicate application of `bolder` by the next rule in Safari 6. - */ -b, -strong { - font-weight: inherit; -} - -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ -b, -strong { - font-weight: bolder; -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ -code, -kbd, -samp { - font-family: monospace, monospace; - /* 1 */ - font-size: 1em; - /* 2 */ -} - -/** - * Add the correct font style in Android 4.3-. - */ -dfn { - font-style: italic; -} - -/** - * Add the correct background and color in IE 9-. - */ -mark { - background-color: #ff0; - color: #000; -} - -/** - * Add the correct font size in all browsers. - */ -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* Embedded content - ========================================================================== */ -/** - * Add the correct display in IE 9-. - */ -audio, -video { - display: inline-block; -} - -/** - * Add the correct display in iOS 4-7. - */ -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Remove the border on images inside links in IE 10-. - */ -img { - border-style: none; -} - -/** - * Hide the overflow in IE. - */ -svg:not(:root) { - overflow: hidden; -} - -/* Forms - ========================================================================== */ -/** - * 1. Change the font styles in all browsers (opinionated). - * 2. Remove the margin in Firefox and Safari. - */ -button, -input, -optgroup, -select, -textarea { - font-family: sans-serif; - /* 1 */ - font-size: 100%; - /* 1 */ - line-height: 1.15; - /* 1 */ - margin: 0; - /* 2 */ -} - -/** - * Show the overflow in IE. - * 1. Show the overflow in Edge. - */ -button, -input { - /* 1 */ - overflow: visible; -} - -/** - * Remove the inheritance of text transform in Edge, Firefox, and IE. - * 1. Remove the inheritance of text transform in Firefox. - */ -button, -select { - /* 1 */ - text-transform: none; -} - -/** - * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` - * controls in Android 4. - * 2. Correct the inability to style clickable types in iOS and Safari. - */ -button, -html [type="button"], -[type="reset"], -[type="submit"] { - -webkit-appearance: button; - /* 2 */ -} - -/** - * Remove the inner border and padding in Firefox. - */ -button::-moz-focus-inner, -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; -} - -/** - * Restore the focus styles unset by the previous rule. - */ -button:-moz-focusring, -[type="button"]:-moz-focusring, -[type="reset"]:-moz-focusring, -[type="submit"]:-moz-focusring { - outline: 1px dotted ButtonText; -} - -/** - * Correct the padding in Firefox. - */ -fieldset { - padding: 0.35em 0.75em 0.625em; -} - -/** - * 1. Correct the text wrapping in Edge and IE. - * 2. Correct the color inheritance from `fieldset` elements in IE. - * 3. Remove the padding so developers are not caught out when they zero out - * `fieldset` elements in all browsers. - */ -legend { - -webkit-box-sizing: border-box; - box-sizing: border-box; - /* 1 */ - color: inherit; - /* 2 */ - display: table; - /* 1 */ - max-width: 100%; - /* 1 */ - padding: 0; - /* 3 */ - white-space: normal; - /* 1 */ -} - -/** - * 1. Add the correct display in IE 9-. - * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ -progress { - display: inline-block; - /* 1 */ - vertical-align: baseline; - /* 2 */ -} - -/** - * Remove the default vertical scrollbar in IE. - */ -textarea { - overflow: auto; -} - -/** - * 1. Add the correct box sizing in IE 10-. - * 2. Remove the padding in IE 10-. - */ -[type="checkbox"], -[type="radio"] { - -webkit-box-sizing: border-box; - box-sizing: border-box; - /* 1 */ - padding: 0; - /* 2 */ -} - -/** - * Correct the cursor style of increment and decrement buttons in Chrome. - */ -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ -[type="search"] { - -webkit-appearance: textfield; - /* 1 */ - outline-offset: -2px; - /* 2 */ -} - -/** - * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. - */ -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ -::-webkit-file-upload-button { - -webkit-appearance: button; - /* 1 */ - font: inherit; - /* 2 */ -} - -/* Interactive - ========================================================================== */ -/* - * Add the correct display in IE 9-. - * 1. Add the correct display in Edge, IE, and Firefox. - */ -details, -menu { - display: block; -} - -/* - * Add the correct display in all browsers. - */ -summary { - display: list-item; -} - -/* Scripting - ========================================================================== */ -/** - * Add the correct display in IE 9-. - */ -canvas { - display: inline-block; -} - -/** - * Add the correct display in IE. - */ -template { - display: none; -} - -/* Hidden - ========================================================================== */ -/** - * Add the correct display in IE 10-. - */ -[hidden] { - display: none; -} - -html { - -webkit-box-sizing: border-box; - box-sizing: border-box; -} - -*, *:before, *:after { - -webkit-box-sizing: inherit; - box-sizing: inherit; -} - -button, -input, -optgroup, -select, -textarea { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -ul:not(.browser-default) { - padding-left: 0; - list-style-type: none; -} - -ul:not(.browser-default) > li { - list-style-type: none; -} - -a { - color: #039be5; - text-decoration: none; - -webkit-tap-highlight-color: transparent; -} - -.valign-wrapper { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; -} - -.clearfix { - clear: both; -} - -.z-depth-0 { - -webkit-box-shadow: none !important; - box-shadow: none !important; -} - -/* 2dp elevation modified*/ -.z-depth-1, nav, .card-panel, .card, .toast, .btn, .btn-large, .btn-small, .btn-floating, .dropdown-content, .collapsible, .sidenav { - -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2); - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2); -} - -.z-depth-1-half, .btn:hover, .btn-large:hover, .btn-small:hover, .btn-floating:hover { - -webkit-box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -1px rgba(0, 0, 0, 0.2); - box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -1px rgba(0, 0, 0, 0.2); -} - -/* 6dp elevation modified*/ -.z-depth-2 { - -webkit-box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3); - box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3); -} - -/* 12dp elevation modified*/ -.z-depth-3 { - -webkit-box-shadow: 0 8px 17px 2px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); - box-shadow: 0 8px 17px 2px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); -} - -/* 16dp elevation */ -.z-depth-4 { - -webkit-box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -7px rgba(0, 0, 0, 0.2); - box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -7px rgba(0, 0, 0, 0.2); -} - -/* 24dp elevation */ -.z-depth-5, .modal { - -webkit-box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14), 0 9px 46px 8px rgba(0, 0, 0, 0.12), 0 11px 15px -7px rgba(0, 0, 0, 0.2); - box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14), 0 9px 46px 8px rgba(0, 0, 0, 0.12), 0 11px 15px -7px rgba(0, 0, 0, 0.2); -} - -.hoverable { - -webkit-transition: -webkit-box-shadow .25s; - transition: -webkit-box-shadow .25s; - transition: box-shadow .25s; - transition: box-shadow .25s, -webkit-box-shadow .25s; -} - -.hoverable:hover { - -webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); -} - -.divider { - height: 1px; - overflow: hidden; - background-color: #e0e0e0; -} - -blockquote { - margin: 20px 0; - padding-left: 1.5rem; - border-left: 5px solid #ee6e73; -} - -i { - line-height: inherit; -} - -i.left { - float: left; - margin-right: 15px; -} - -i.right { - float: right; - margin-left: 15px; -} - -i.tiny { - font-size: 1rem; -} - -i.small { - font-size: 2rem; -} - -i.medium { - font-size: 4rem; -} - -i.large { - font-size: 6rem; -} - -img.responsive-img, -video.responsive-video { - max-width: 100%; - height: auto; -} - -.pagination li { - display: inline-block; - border-radius: 2px; - text-align: center; - vertical-align: top; - height: 30px; -} - -.pagination li a { - color: #444; - display: inline-block; - font-size: 1.2rem; - padding: 0 10px; - line-height: 30px; -} - -.pagination li.active a { - color: #fff; -} - -.pagination li.active { - background-color: #ee6e73; -} - -.pagination li.disabled a { - cursor: default; - color: #999; -} - -.pagination li i { - font-size: 2rem; -} - -.pagination li.pages ul li { - display: inline-block; - float: none; -} - -@media only screen and (max-width: 992px) { - .pagination { - width: 100%; - } - .pagination li.prev, - .pagination li.next { - width: 10%; - } - .pagination li.pages { - width: 80%; - overflow: hidden; - white-space: nowrap; - } -} - -.breadcrumb { - font-size: 18px; - color: rgba(255, 255, 255, 0.7); -} - -.breadcrumb i, -.breadcrumb [class^="mdi-"], .breadcrumb [class*="mdi-"], -.breadcrumb i.material-icons { - display: inline-block; - float: left; - font-size: 24px; -} - -.breadcrumb:before { - content: '\E5CC'; - color: rgba(255, 255, 255, 0.7); - vertical-align: top; - display: inline-block; - font-family: 'Material Icons'; - font-weight: normal; - font-style: normal; - font-size: 25px; - margin: 0 10px 0 8px; - -webkit-font-smoothing: antialiased; -} - -.breadcrumb:first-child:before { - display: none; -} - -.breadcrumb:last-child { - color: #fff; -} - -.parallax-container { - position: relative; - overflow: hidden; - height: 500px; -} - -.parallax-container .parallax { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: -1; -} - -.parallax-container .parallax img { - opacity: 0; - position: absolute; - left: 50%; - bottom: 0; - min-width: 100%; - min-height: 100%; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - -webkit-transform: translateX(-50%); - transform: translateX(-50%); -} - -.pin-top, .pin-bottom { - position: relative; -} - -.pinned { - position: fixed !important; -} - -/********************* - Transition Classes -**********************/ -ul.staggered-list li { - opacity: 0; -} - -.fade-in { - opacity: 0; - -webkit-transform-origin: 0 50%; - transform-origin: 0 50%; -} - -/********************* - Media Query Classes -**********************/ -@media only screen and (max-width: 600px) { - .hide-on-small-only, .hide-on-small-and-down { - display: none !important; - } -} - -@media only screen and (max-width: 992px) { - .hide-on-med-and-down { - display: none !important; - } -} - -@media only screen and (min-width: 601px) { - .hide-on-med-and-up { - display: none !important; - } -} - -@media only screen and (min-width: 600px) and (max-width: 992px) { - .hide-on-med-only { - display: none !important; - } -} - -@media only screen and (min-width: 993px) { - .hide-on-large-only { - display: none !important; - } -} - -@media only screen and (min-width: 1201px) { - .hide-on-extra-large-only { - display: none !important; - } -} - -@media only screen and (min-width: 1201px) { - .show-on-extra-large { - display: block !important; - } -} - -@media only screen and (min-width: 993px) { - .show-on-large { - display: block !important; - } -} - -@media only screen and (min-width: 600px) and (max-width: 992px) { - .show-on-medium { - display: block !important; - } -} - -@media only screen and (max-width: 600px) { - .show-on-small { - display: block !important; - } -} - -@media only screen and (min-width: 601px) { - .show-on-medium-and-up { - display: block !important; - } -} - -@media only screen and (max-width: 992px) { - .show-on-medium-and-down { - display: block !important; - } -} - -@media only screen and (max-width: 600px) { - .center-on-small-only { - text-align: center; - } -} - -.page-footer { - padding-top: 20px; - color: #fff; - background-color: #ee6e73; -} - -.page-footer .footer-copyright { - overflow: hidden; - min-height: 50px; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - padding: 10px 0px; - color: rgba(255, 255, 255, 0.8); - background-color: rgba(51, 51, 51, 0.08); -} - -table, th, td { - border: none; -} - -table { - width: 100%; - display: table; - border-collapse: collapse; - border-spacing: 0; -} - -table.striped tr { - border-bottom: none; -} - -table.striped > tbody > tr:nth-child(odd) { - background-color: rgba(242, 242, 242, 0.5); -} - -table.striped > tbody > tr > td { - border-radius: 0; -} - -table.highlight > tbody > tr { - -webkit-transition: background-color .25s ease; - transition: background-color .25s ease; -} - -table.highlight > tbody > tr:hover { - background-color: rgba(242, 242, 242, 0.5); -} - -table.centered thead tr th, table.centered tbody tr td { - text-align: center; -} - -tr { - border-bottom: 1px solid rgba(0, 0, 0, 0.12); -} - -td, th { - padding: 15px 5px; - display: table-cell; - text-align: left; - vertical-align: middle; - border-radius: 2px; -} - -@media only screen and (max-width: 992px) { - table.responsive-table { - width: 100%; - border-collapse: collapse; - border-spacing: 0; - display: block; - position: relative; - /* sort out borders */ - } - table.responsive-table td:empty:before { - content: '\00a0'; - } - table.responsive-table th, - table.responsive-table td { - margin: 0; - vertical-align: top; - } - table.responsive-table th { - text-align: left; - } - table.responsive-table thead { - display: block; - float: left; - } - table.responsive-table thead tr { - display: block; - padding: 0 10px 0 0; - } - table.responsive-table thead tr th::before { - content: "\00a0"; - } - table.responsive-table tbody { - display: block; - width: auto; - position: relative; - overflow-x: auto; - white-space: nowrap; - } - table.responsive-table tbody tr { - display: inline-block; - vertical-align: top; - } - table.responsive-table th { - display: block; - text-align: right; - } - table.responsive-table td { - display: block; - min-height: 1.25em; - text-align: left; - } - table.responsive-table tr { - border-bottom: none; - padding: 0 10px; - } - table.responsive-table thead { - border: 0; - border-right: 1px solid rgba(0, 0, 0, 0.12); - } -} - -.collection { - margin: 0.5rem 0 1rem 0; - border: 1px solid #e0e0e0; - border-radius: 2px; - overflow: hidden; - position: relative; -} - -.collection .collection-item { - background-color: #fff; - line-height: 1.5rem; - padding: 10px 20px; - margin: 0; - border-bottom: 1px solid #e0e0e0; -} - -.collection .collection-item.avatar { - min-height: 84px; - padding-left: 72px; - position: relative; -} - -.collection .collection-item.avatar:not(.circle-clipper) > .circle, -.collection .collection-item.avatar :not(.circle-clipper) > .circle { - position: absolute; - width: 42px; - height: 42px; - overflow: hidden; - left: 15px; - display: inline-block; - vertical-align: middle; -} - -.collection .collection-item.avatar i.circle { - font-size: 18px; - line-height: 42px; - color: #fff; - background-color: #999; - text-align: center; -} - -.collection .collection-item.avatar .title { - font-size: 16px; -} - -.collection .collection-item.avatar p { - margin: 0; -} - -.collection .collection-item.avatar .secondary-content { - position: absolute; - top: 16px; - right: 16px; -} - -.collection .collection-item:last-child { - border-bottom: none; -} - -.collection .collection-item.active { - background-color: #26a69a; - color: #eafaf9; -} - -.collection .collection-item.active .secondary-content { - color: #fff; -} - -.collection a.collection-item { - display: block; - -webkit-transition: .25s; - transition: .25s; - color: #26a69a; -} - -.collection a.collection-item:not(.active):hover { - background-color: #ddd; -} - -.collection.with-header .collection-header { - background-color: #fff; - border-bottom: 1px solid #e0e0e0; - padding: 10px 20px; -} - -.collection.with-header .collection-item { - padding-left: 30px; -} - -.collection.with-header .collection-item.avatar { - padding-left: 72px; -} - -.secondary-content { - float: right; - color: #26a69a; -} - -.collapsible .collection { - margin: 0; - border: none; -} - -.video-container { - position: relative; - padding-bottom: 56.25%; - height: 0; - overflow: hidden; -} - -.video-container iframe, .video-container object, .video-container embed { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -.progress { - position: relative; - height: 4px; - display: block; - width: 100%; - background-color: #acece6; - border-radius: 2px; - margin: 0.5rem 0 1rem 0; - overflow: hidden; -} - -.progress .determinate { - position: absolute; - top: 0; - left: 0; - bottom: 0; - background-color: #26a69a; - -webkit-transition: width .3s linear; - transition: width .3s linear; -} - -.progress .indeterminate { - background-color: #26a69a; -} - -.progress .indeterminate:before { - content: ''; - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - will-change: left, right; - -webkit-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; -} - -.progress .indeterminate:after { - content: ''; - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - will-change: left, right; - -webkit-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -webkit-animation-delay: 1.15s; - animation-delay: 1.15s; -} - -@-webkit-keyframes indeterminate { - 0% { - left: -35%; - right: 100%; - } - 60% { - left: 100%; - right: -90%; - } - 100% { - left: 100%; - right: -90%; - } -} - -@keyframes indeterminate { - 0% { - left: -35%; - right: 100%; - } - 60% { - left: 100%; - right: -90%; - } - 100% { - left: 100%; - right: -90%; - } -} - -@-webkit-keyframes indeterminate-short { - 0% { - left: -200%; - right: 100%; - } - 60% { - left: 107%; - right: -8%; - } - 100% { - left: 107%; - right: -8%; - } -} - -@keyframes indeterminate-short { - 0% { - left: -200%; - right: 100%; - } - 60% { - left: 107%; - right: -8%; - } - 100% { - left: 107%; - right: -8%; - } -} - -/******************* - Utility Classes -*******************/ -.hide { - display: none !important; -} - -.left-align { - text-align: left; -} - -.right-align { - text-align: right; -} - -.center, .center-align { - text-align: center; -} - -.left { - float: left !important; -} - -.right { - float: right !important; -} - -.no-select, input[type=range], -input[type=range] + .thumb { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.circle { - border-radius: 50%; -} - -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} - -.truncate { - display: block; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.no-padding { - padding: 0 !important; -} - -span.badge { - min-width: 3rem; - padding: 0 6px; - margin-left: 14px; - text-align: center; - font-size: 1rem; - line-height: 22px; - height: 22px; - color: #757575; - float: right; - -webkit-box-sizing: border-box; - box-sizing: border-box; -} - -span.badge.new { - font-weight: 300; - font-size: 0.8rem; - color: #fff; - background-color: #26a69a; - border-radius: 2px; -} - -span.badge.new:after { - content: " new"; -} - -span.badge[data-badge-caption]::after { - content: " " attr(data-badge-caption); -} - -nav ul a span.badge { - display: inline-block; - float: none; - margin-left: 4px; - line-height: 22px; - height: 22px; - -webkit-font-smoothing: auto; -} - -.collection-item span.badge { - margin-top: calc(0.75rem - 11px); -} - -.collapsible span.badge { - margin-left: auto; -} - -.sidenav span.badge { - margin-top: calc(24px - 11px); -} - -table span.badge { - display: inline-block; - float: none; - margin-left: auto; -} - -/* This is needed for some mobile phones to display the Google Icon font properly */ -.material-icons { - text-rendering: optimizeLegibility; - -webkit-font-feature-settings: 'liga'; - -moz-font-feature-settings: 'liga'; - font-feature-settings: 'liga'; -} - -.container { - margin: 0 auto; - max-width: 1280px; - width: 90%; -} - -@media only screen and (min-width: 601px) { - .container { - width: 85%; - } -} - -@media only screen and (min-width: 993px) { - .container { - width: 70%; - } -} - -.col .row { - margin-left: -0.75rem; - margin-right: -0.75rem; -} - -.section { - padding-top: 1rem; - padding-bottom: 1rem; -} - -.section.no-pad { - padding: 0; -} - -.section.no-pad-bot { - padding-bottom: 0; -} - -.section.no-pad-top { - padding-top: 0; -} - -.row { - margin-left: auto; - margin-right: auto; - margin-bottom: 20px; -} - -.row:after { - content: ""; - display: table; - clear: both; -} - -.row .col { - float: left; - -webkit-box-sizing: border-box; - box-sizing: border-box; - padding: 0 0.75rem; - min-height: 1px; -} - -.row .col[class*="push-"], .row .col[class*="pull-"] { - position: relative; -} - -.row .col.s1 { - width: 8.3333333333%; - margin-left: auto; - left: auto; - right: auto; -} - -.row .col.s2 { - width: 16.6666666667%; - margin-left: auto; - left: auto; - right: auto; -} - -.row .col.s3 { - width: 25%; - margin-left: auto; - left: auto; - right: auto; -} - -.row .col.s4 { - width: 33.3333333333%; - margin-left: auto; - left: auto; - right: auto; -} - -.row .col.s5 { - width: 41.6666666667%; - margin-left: auto; - left: auto; - right: auto; -} - -.row .col.s6 { - width: 50%; - margin-left: auto; - left: auto; - right: auto; -} - -.row .col.s7 { - width: 58.3333333333%; - margin-left: auto; - left: auto; - right: auto; -} - -.row .col.s8 { - width: 66.6666666667%; - margin-left: auto; - left: auto; - right: auto; -} - -.row .col.s9 { - width: 75%; - margin-left: auto; - left: auto; - right: auto; -} - -.row .col.s10 { - width: 83.3333333333%; - margin-left: auto; - left: auto; - right: auto; -} - -.row .col.s11 { - width: 91.6666666667%; - margin-left: auto; - left: auto; - right: auto; -} - -.row .col.s12 { - width: 100%; - margin-left: auto; - left: auto; - right: auto; -} - -.row .col.offset-s1 { - margin-left: 8.3333333333%; -} - -.row .col.pull-s1 { - right: 8.3333333333%; -} - -.row .col.push-s1 { - left: 8.3333333333%; -} - -.row .col.offset-s2 { - margin-left: 16.6666666667%; -} - -.row .col.pull-s2 { - right: 16.6666666667%; -} - -.row .col.push-s2 { - left: 16.6666666667%; -} - -.row .col.offset-s3 { - margin-left: 25%; -} - -.row .col.pull-s3 { - right: 25%; -} - -.row .col.push-s3 { - left: 25%; -} - -.row .col.offset-s4 { - margin-left: 33.3333333333%; -} - -.row .col.pull-s4 { - right: 33.3333333333%; -} - -.row .col.push-s4 { - left: 33.3333333333%; -} - -.row .col.offset-s5 { - margin-left: 41.6666666667%; -} - -.row .col.pull-s5 { - right: 41.6666666667%; -} - -.row .col.push-s5 { - left: 41.6666666667%; -} - -.row .col.offset-s6 { - margin-left: 50%; -} - -.row .col.pull-s6 { - right: 50%; -} - -.row .col.push-s6 { - left: 50%; -} - -.row .col.offset-s7 { - margin-left: 58.3333333333%; -} - -.row .col.pull-s7 { - right: 58.3333333333%; -} - -.row .col.push-s7 { - left: 58.3333333333%; -} - -.row .col.offset-s8 { - margin-left: 66.6666666667%; -} - -.row .col.pull-s8 { - right: 66.6666666667%; -} - -.row .col.push-s8 { - left: 66.6666666667%; -} - -.row .col.offset-s9 { - margin-left: 75%; -} - -.row .col.pull-s9 { - right: 75%; -} - -.row .col.push-s9 { - left: 75%; -} - -.row .col.offset-s10 { - margin-left: 83.3333333333%; -} - -.row .col.pull-s10 { - right: 83.3333333333%; -} - -.row .col.push-s10 { - left: 83.3333333333%; -} - -.row .col.offset-s11 { - margin-left: 91.6666666667%; -} - -.row .col.pull-s11 { - right: 91.6666666667%; -} - -.row .col.push-s11 { - left: 91.6666666667%; -} - -.row .col.offset-s12 { - margin-left: 100%; -} - -.row .col.pull-s12 { - right: 100%; -} - -.row .col.push-s12 { - left: 100%; -} - -@media only screen and (min-width: 601px) { - .row .col.m1 { - width: 8.3333333333%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.m2 { - width: 16.6666666667%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.m3 { - width: 25%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.m4 { - width: 33.3333333333%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.m5 { - width: 41.6666666667%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.m6 { - width: 50%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.m7 { - width: 58.3333333333%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.m8 { - width: 66.6666666667%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.m9 { - width: 75%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.m10 { - width: 83.3333333333%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.m11 { - width: 91.6666666667%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.m12 { - width: 100%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.offset-m1 { - margin-left: 8.3333333333%; - } - .row .col.pull-m1 { - right: 8.3333333333%; - } - .row .col.push-m1 { - left: 8.3333333333%; - } - .row .col.offset-m2 { - margin-left: 16.6666666667%; - } - .row .col.pull-m2 { - right: 16.6666666667%; - } - .row .col.push-m2 { - left: 16.6666666667%; - } - .row .col.offset-m3 { - margin-left: 25%; - } - .row .col.pull-m3 { - right: 25%; - } - .row .col.push-m3 { - left: 25%; - } - .row .col.offset-m4 { - margin-left: 33.3333333333%; - } - .row .col.pull-m4 { - right: 33.3333333333%; - } - .row .col.push-m4 { - left: 33.3333333333%; - } - .row .col.offset-m5 { - margin-left: 41.6666666667%; - } - .row .col.pull-m5 { - right: 41.6666666667%; - } - .row .col.push-m5 { - left: 41.6666666667%; - } - .row .col.offset-m6 { - margin-left: 50%; - } - .row .col.pull-m6 { - right: 50%; - } - .row .col.push-m6 { - left: 50%; - } - .row .col.offset-m7 { - margin-left: 58.3333333333%; - } - .row .col.pull-m7 { - right: 58.3333333333%; - } - .row .col.push-m7 { - left: 58.3333333333%; - } - .row .col.offset-m8 { - margin-left: 66.6666666667%; - } - .row .col.pull-m8 { - right: 66.6666666667%; - } - .row .col.push-m8 { - left: 66.6666666667%; - } - .row .col.offset-m9 { - margin-left: 75%; - } - .row .col.pull-m9 { - right: 75%; - } - .row .col.push-m9 { - left: 75%; - } - .row .col.offset-m10 { - margin-left: 83.3333333333%; - } - .row .col.pull-m10 { - right: 83.3333333333%; - } - .row .col.push-m10 { - left: 83.3333333333%; - } - .row .col.offset-m11 { - margin-left: 91.6666666667%; - } - .row .col.pull-m11 { - right: 91.6666666667%; - } - .row .col.push-m11 { - left: 91.6666666667%; - } - .row .col.offset-m12 { - margin-left: 100%; - } - .row .col.pull-m12 { - right: 100%; - } - .row .col.push-m12 { - left: 100%; - } -} - -@media only screen and (min-width: 993px) { - .row .col.l1 { - width: 8.3333333333%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.l2 { - width: 16.6666666667%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.l3 { - width: 25%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.l4 { - width: 33.3333333333%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.l5 { - width: 41.6666666667%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.l6 { - width: 50%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.l7 { - width: 58.3333333333%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.l8 { - width: 66.6666666667%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.l9 { - width: 75%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.l10 { - width: 83.3333333333%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.l11 { - width: 91.6666666667%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.l12 { - width: 100%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.offset-l1 { - margin-left: 8.3333333333%; - } - .row .col.pull-l1 { - right: 8.3333333333%; - } - .row .col.push-l1 { - left: 8.3333333333%; - } - .row .col.offset-l2 { - margin-left: 16.6666666667%; - } - .row .col.pull-l2 { - right: 16.6666666667%; - } - .row .col.push-l2 { - left: 16.6666666667%; - } - .row .col.offset-l3 { - margin-left: 25%; - } - .row .col.pull-l3 { - right: 25%; - } - .row .col.push-l3 { - left: 25%; - } - .row .col.offset-l4 { - margin-left: 33.3333333333%; - } - .row .col.pull-l4 { - right: 33.3333333333%; - } - .row .col.push-l4 { - left: 33.3333333333%; - } - .row .col.offset-l5 { - margin-left: 41.6666666667%; - } - .row .col.pull-l5 { - right: 41.6666666667%; - } - .row .col.push-l5 { - left: 41.6666666667%; - } - .row .col.offset-l6 { - margin-left: 50%; - } - .row .col.pull-l6 { - right: 50%; - } - .row .col.push-l6 { - left: 50%; - } - .row .col.offset-l7 { - margin-left: 58.3333333333%; - } - .row .col.pull-l7 { - right: 58.3333333333%; - } - .row .col.push-l7 { - left: 58.3333333333%; - } - .row .col.offset-l8 { - margin-left: 66.6666666667%; - } - .row .col.pull-l8 { - right: 66.6666666667%; - } - .row .col.push-l8 { - left: 66.6666666667%; - } - .row .col.offset-l9 { - margin-left: 75%; - } - .row .col.pull-l9 { - right: 75%; - } - .row .col.push-l9 { - left: 75%; - } - .row .col.offset-l10 { - margin-left: 83.3333333333%; - } - .row .col.pull-l10 { - right: 83.3333333333%; - } - .row .col.push-l10 { - left: 83.3333333333%; - } - .row .col.offset-l11 { - margin-left: 91.6666666667%; - } - .row .col.pull-l11 { - right: 91.6666666667%; - } - .row .col.push-l11 { - left: 91.6666666667%; - } - .row .col.offset-l12 { - margin-left: 100%; - } - .row .col.pull-l12 { - right: 100%; - } - .row .col.push-l12 { - left: 100%; - } -} - -@media only screen and (min-width: 1201px) { - .row .col.xl1 { - width: 8.3333333333%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.xl2 { - width: 16.6666666667%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.xl3 { - width: 25%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.xl4 { - width: 33.3333333333%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.xl5 { - width: 41.6666666667%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.xl6 { - width: 50%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.xl7 { - width: 58.3333333333%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.xl8 { - width: 66.6666666667%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.xl9 { - width: 75%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.xl10 { - width: 83.3333333333%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.xl11 { - width: 91.6666666667%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.xl12 { - width: 100%; - margin-left: auto; - left: auto; - right: auto; - } - .row .col.offset-xl1 { - margin-left: 8.3333333333%; - } - .row .col.pull-xl1 { - right: 8.3333333333%; - } - .row .col.push-xl1 { - left: 8.3333333333%; - } - .row .col.offset-xl2 { - margin-left: 16.6666666667%; - } - .row .col.pull-xl2 { - right: 16.6666666667%; - } - .row .col.push-xl2 { - left: 16.6666666667%; - } - .row .col.offset-xl3 { - margin-left: 25%; - } - .row .col.pull-xl3 { - right: 25%; - } - .row .col.push-xl3 { - left: 25%; - } - .row .col.offset-xl4 { - margin-left: 33.3333333333%; - } - .row .col.pull-xl4 { - right: 33.3333333333%; - } - .row .col.push-xl4 { - left: 33.3333333333%; - } - .row .col.offset-xl5 { - margin-left: 41.6666666667%; - } - .row .col.pull-xl5 { - right: 41.6666666667%; - } - .row .col.push-xl5 { - left: 41.6666666667%; - } - .row .col.offset-xl6 { - margin-left: 50%; - } - .row .col.pull-xl6 { - right: 50%; - } - .row .col.push-xl6 { - left: 50%; - } - .row .col.offset-xl7 { - margin-left: 58.3333333333%; - } - .row .col.pull-xl7 { - right: 58.3333333333%; - } - .row .col.push-xl7 { - left: 58.3333333333%; - } - .row .col.offset-xl8 { - margin-left: 66.6666666667%; - } - .row .col.pull-xl8 { - right: 66.6666666667%; - } - .row .col.push-xl8 { - left: 66.6666666667%; - } - .row .col.offset-xl9 { - margin-left: 75%; - } - .row .col.pull-xl9 { - right: 75%; - } - .row .col.push-xl9 { - left: 75%; - } - .row .col.offset-xl10 { - margin-left: 83.3333333333%; - } - .row .col.pull-xl10 { - right: 83.3333333333%; - } - .row .col.push-xl10 { - left: 83.3333333333%; - } - .row .col.offset-xl11 { - margin-left: 91.6666666667%; - } - .row .col.pull-xl11 { - right: 91.6666666667%; - } - .row .col.push-xl11 { - left: 91.6666666667%; - } - .row .col.offset-xl12 { - margin-left: 100%; - } - .row .col.pull-xl12 { - right: 100%; - } - .row .col.push-xl12 { - left: 100%; - } -} - -nav { - color: #fff; - background-color: #ee6e73; - width: 100%; - height: 56px; - line-height: 56px; -} - -nav.nav-extended { - height: auto; -} - -nav.nav-extended .nav-wrapper { - min-height: 56px; - height: auto; -} - -nav.nav-extended .nav-content { - position: relative; - line-height: normal; -} - -nav a { - color: #fff; -} - -nav i, -nav [class^="mdi-"], nav [class*="mdi-"], -nav i.material-icons { - display: block; - font-size: 24px; - height: 56px; - line-height: 56px; -} - -nav .nav-wrapper { - position: relative; - height: 100%; -} - -@media only screen and (min-width: 993px) { - nav a.sidenav-trigger { - display: none; - } -} - -nav .sidenav-trigger { - float: left; - position: relative; - z-index: 1; - height: 56px; - margin: 0 18px; -} - -nav .sidenav-trigger i { - height: 56px; - line-height: 56px; -} - -nav .brand-logo { - position: absolute; - color: #fff; - display: inline-block; - font-size: 2.1rem; - padding: 0; -} - -nav .brand-logo.center { - left: 50%; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); -} - -@media only screen and (max-width: 992px) { - nav .brand-logo { - left: 50%; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); - } - nav .brand-logo.left, nav .brand-logo.right { - padding: 0; - -webkit-transform: none; - transform: none; - } - nav .brand-logo.left { - left: 0.5rem; - } - nav .brand-logo.right { - right: 0.5rem; - left: auto; - } -} - -nav .brand-logo.right { - right: 0.5rem; - padding: 0; -} - -nav .brand-logo i, -nav .brand-logo [class^="mdi-"], nav .brand-logo [class*="mdi-"], -nav .brand-logo i.material-icons { - float: left; - margin-right: 15px; -} - -nav .nav-title { - display: inline-block; - font-size: 32px; - padding: 28px 0; -} - -nav ul { - margin: 0; -} - -nav ul li { - -webkit-transition: background-color .3s; - transition: background-color .3s; - float: left; - padding: 0; -} - -nav ul li.active { - background-color: rgba(0, 0, 0, 0.1); -} - -nav ul a { - -webkit-transition: background-color .3s; - transition: background-color .3s; - font-size: 1rem; - color: #fff; - display: block; - padding: 0 15px; - cursor: pointer; -} - -nav ul a.btn, nav ul a.btn-large, nav ul a.btn-small, nav ul a.btn-large, nav ul a.btn-flat, nav ul a.btn-floating { - margin-top: -2px; - margin-left: 15px; - margin-right: 15px; -} - -nav ul a.btn > .material-icons, nav ul a.btn-large > .material-icons, nav ul a.btn-small > .material-icons, nav ul a.btn-large > .material-icons, nav ul a.btn-flat > .material-icons, nav ul a.btn-floating > .material-icons { - height: inherit; - line-height: inherit; -} - -nav ul a:hover { - background-color: rgba(0, 0, 0, 0.1); -} - -nav ul.left { - float: left; -} - -nav form { - height: 100%; -} - -nav .input-field { - margin: 0; - height: 100%; -} - -nav .input-field input { - height: 100%; - font-size: 1.2rem; - border: none; - padding-left: 2rem; -} - -nav .input-field input:focus, nav .input-field input[type=text]:valid, nav .input-field input[type=password]:valid, nav .input-field input[type=email]:valid, nav .input-field input[type=url]:valid, nav .input-field input[type=date]:valid { - border: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -nav .input-field label { - top: 0; - left: 0; -} - -nav .input-field label i { - color: rgba(255, 255, 255, 0.7); - -webkit-transition: color .3s; - transition: color .3s; -} - -nav .input-field label.active i { - color: #fff; -} - -.navbar-fixed { - position: relative; - height: 56px; - z-index: 997; -} - -.navbar-fixed nav { - position: fixed; -} - -@media only screen and (min-width: 601px) { - nav.nav-extended .nav-wrapper { - min-height: 64px; - } - nav, nav .nav-wrapper i, nav a.sidenav-trigger, nav a.sidenav-trigger i { - height: 64px; - line-height: 64px; - } - .navbar-fixed { - height: 64px; - } -} - -a { - text-decoration: none; -} - -html { - line-height: 1.5; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - font-weight: normal; - color: rgba(0, 0, 0, 0.87); -} - -@media only screen and (min-width: 0) { - html { - font-size: 14px; - } -} - -@media only screen and (min-width: 992px) { - html { - font-size: 14.5px; - } -} - -@media only screen and (min-width: 1200px) { - html { - font-size: 15px; - } -} - -h1, h2, h3, h4, h5, h6 { - font-weight: 400; - line-height: 1.3; -} - -h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { - font-weight: inherit; -} - -h1 { - font-size: 4.2rem; - line-height: 110%; - margin: 2.8rem 0 1.68rem 0; -} - -h2 { - font-size: 3.56rem; - line-height: 110%; - margin: 2.3733333333rem 0 1.424rem 0; -} - -h3 { - font-size: 2.92rem; - line-height: 110%; - margin: 1.9466666667rem 0 1.168rem 0; -} - -h4 { - font-size: 2.28rem; - line-height: 110%; - margin: 1.52rem 0 0.912rem 0; -} - -h5 { - font-size: 1.64rem; - line-height: 110%; - margin: 1.0933333333rem 0 0.656rem 0; -} - -h6 { - font-size: 1.15rem; - line-height: 110%; - margin: 0.7666666667rem 0 0.46rem 0; -} - -em { - font-style: italic; -} - -strong { - font-weight: 500; -} - -small { - font-size: 75%; -} - -.light { - font-weight: 300; -} - -.thin { - font-weight: 200; -} - -@media only screen and (min-width: 360px) { - .flow-text { - font-size: 1.2rem; - } -} - -@media only screen and (min-width: 390px) { - .flow-text { - font-size: 1.224rem; - } -} - -@media only screen and (min-width: 420px) { - .flow-text { - font-size: 1.248rem; - } -} - -@media only screen and (min-width: 450px) { - .flow-text { - font-size: 1.272rem; - } -} - -@media only screen and (min-width: 480px) { - .flow-text { - font-size: 1.296rem; - } -} - -@media only screen and (min-width: 510px) { - .flow-text { - font-size: 1.32rem; - } -} - -@media only screen and (min-width: 540px) { - .flow-text { - font-size: 1.344rem; - } -} - -@media only screen and (min-width: 570px) { - .flow-text { - font-size: 1.368rem; - } -} - -@media only screen and (min-width: 600px) { - .flow-text { - font-size: 1.392rem; - } -} - -@media only screen and (min-width: 630px) { - .flow-text { - font-size: 1.416rem; - } -} - -@media only screen and (min-width: 660px) { - .flow-text { - font-size: 1.44rem; - } -} - -@media only screen and (min-width: 690px) { - .flow-text { - font-size: 1.464rem; - } -} - -@media only screen and (min-width: 720px) { - .flow-text { - font-size: 1.488rem; - } -} - -@media only screen and (min-width: 750px) { - .flow-text { - font-size: 1.512rem; - } -} - -@media only screen and (min-width: 780px) { - .flow-text { - font-size: 1.536rem; - } -} - -@media only screen and (min-width: 810px) { - .flow-text { - font-size: 1.56rem; - } -} - -@media only screen and (min-width: 840px) { - .flow-text { - font-size: 1.584rem; - } -} - -@media only screen and (min-width: 870px) { - .flow-text { - font-size: 1.608rem; - } -} - -@media only screen and (min-width: 900px) { - .flow-text { - font-size: 1.632rem; - } -} - -@media only screen and (min-width: 930px) { - .flow-text { - font-size: 1.656rem; - } -} - -@media only screen and (min-width: 960px) { - .flow-text { - font-size: 1.68rem; - } -} - -@media only screen and (max-width: 360px) { - .flow-text { - font-size: 1.2rem; - } -} - -.scale-transition { - -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; - transition: -webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; - transition: transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; - transition: transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63), -webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; -} - -.scale-transition.scale-out { - -webkit-transform: scale(0); - transform: scale(0); - -webkit-transition: -webkit-transform .2s !important; - transition: -webkit-transform .2s !important; - transition: transform .2s !important; - transition: transform .2s, -webkit-transform .2s !important; -} - -.scale-transition.scale-in { - -webkit-transform: scale(1); - transform: scale(1); -} - -.card-panel { - -webkit-transition: -webkit-box-shadow .25s; - transition: -webkit-box-shadow .25s; - transition: box-shadow .25s; - transition: box-shadow .25s, -webkit-box-shadow .25s; - padding: 24px; - margin: 0.5rem 0 1rem 0; - border-radius: 2px; - background-color: #fff; -} - -.card { - position: relative; - margin: 0.5rem 0 1rem 0; - background-color: #fff; - -webkit-transition: -webkit-box-shadow .25s; - transition: -webkit-box-shadow .25s; - transition: box-shadow .25s; - transition: box-shadow .25s, -webkit-box-shadow .25s; - border-radius: 2px; -} - -.card .card-title { - font-size: 24px; - font-weight: 300; -} - -.card .card-title.activator { - cursor: pointer; -} - -.card.small, .card.medium, .card.large { - position: relative; -} - -.card.small .card-image, .card.medium .card-image, .card.large .card-image { - max-height: 60%; - overflow: hidden; -} - -.card.small .card-image + .card-content, .card.medium .card-image + .card-content, .card.large .card-image + .card-content { - max-height: 40%; -} - -.card.small .card-content, .card.medium .card-content, .card.large .card-content { - max-height: 100%; - overflow: hidden; -} - -.card.small .card-action, .card.medium .card-action, .card.large .card-action { - position: absolute; - bottom: 0; - left: 0; - right: 0; -} - -.card.small { - height: 300px; -} - -.card.medium { - height: 400px; -} - -.card.large { - height: 500px; -} - -.card.horizontal { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; -} - -.card.horizontal.small .card-image, .card.horizontal.medium .card-image, .card.horizontal.large .card-image { - height: 100%; - max-height: none; - overflow: visible; -} - -.card.horizontal.small .card-image img, .card.horizontal.medium .card-image img, .card.horizontal.large .card-image img { - height: 100%; -} - -.card.horizontal .card-image { - max-width: 50%; -} - -.card.horizontal .card-image img { - border-radius: 2px 0 0 2px; - max-width: 100%; - width: auto; -} - -.card.horizontal .card-stacked { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - position: relative; -} - -.card.horizontal .card-stacked .card-content { - -webkit-box-flex: 1; - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; -} - -.card.sticky-action .card-action { - z-index: 2; -} - -.card.sticky-action .card-reveal { - z-index: 1; - padding-bottom: 64px; -} - -.card .card-image { - position: relative; -} - -.card .card-image img { - display: block; - border-radius: 2px 2px 0 0; - position: relative; - left: 0; - right: 0; - top: 0; - bottom: 0; - width: 100%; -} - -.card .card-image .card-title { - color: #fff; - position: absolute; - bottom: 0; - left: 0; - max-width: 100%; - padding: 24px; -} - -.card .card-content { - padding: 24px; - border-radius: 0 0 2px 2px; -} - -.card .card-content p { - margin: 0; -} - -.card .card-content .card-title { - display: block; - line-height: 32px; - margin-bottom: 8px; -} - -.card .card-content .card-title i { - line-height: 32px; -} - -.card .card-action { - background-color: inherit; - border-top: 1px solid rgba(160, 160, 160, 0.2); - position: relative; - padding: 16px 24px; -} - -.card .card-action:last-child { - border-radius: 0 0 2px 2px; -} - -.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating) { - color: #ffab40; - margin-right: 24px; - -webkit-transition: color .3s ease; - transition: color .3s ease; - text-transform: uppercase; -} - -.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating):hover { - color: #ffd8a6; -} - -.card .card-reveal { - padding: 24px; - position: absolute; - background-color: #fff; - width: 100%; - overflow-y: auto; - left: 0; - top: 100%; - height: 100%; - z-index: 3; - display: none; -} - -.card .card-reveal .card-title { - cursor: pointer; - display: block; -} - -#toast-container { - display: block; - position: fixed; - z-index: 10000; -} - -@media only screen and (max-width: 600px) { - #toast-container { - min-width: 100%; - bottom: 0%; - } -} - -@media only screen and (min-width: 601px) and (max-width: 992px) { - #toast-container { - left: 5%; - bottom: 7%; - max-width: 90%; - } -} - -@media only screen and (min-width: 993px) { - #toast-container { - top: 10%; - right: 7%; - max-width: 86%; - } -} - -.toast { - border-radius: 2px; - top: 35px; - width: auto; - margin-top: 10px; - position: relative; - max-width: 100%; - height: auto; - min-height: 48px; - line-height: 1.5em; - background-color: #323232; - padding: 10px 25px; - font-size: 1.1rem; - font-weight: 300; - color: #fff; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - cursor: default; -} - -.toast .toast-action { - color: #eeff41; - font-weight: 500; - margin-right: -25px; - margin-left: 3rem; -} - -.toast.rounded { - border-radius: 24px; -} - -@media only screen and (max-width: 600px) { - .toast { - width: 100%; - border-radius: 0; - } -} - -.tabs { - position: relative; - overflow-x: auto; - overflow-y: hidden; - height: 48px; - width: 100%; - background-color: #fff; - margin: 0 auto; - white-space: nowrap; -} - -.tabs.tabs-transparent { - background-color: transparent; -} - -.tabs.tabs-transparent .tab a, -.tabs.tabs-transparent .tab.disabled a, -.tabs.tabs-transparent .tab.disabled a:hover { - color: rgba(255, 255, 255, 0.7); -} - -.tabs.tabs-transparent .tab a:hover, -.tabs.tabs-transparent .tab a.active { - color: #fff; -} - -.tabs.tabs-transparent .indicator { - background-color: #fff; -} - -.tabs.tabs-fixed-width { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; -} - -.tabs.tabs-fixed-width .tab { - -webkit-box-flex: 1; - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; -} - -.tabs .tab { - display: inline-block; - text-align: center; - line-height: 48px; - height: 48px; - padding: 0; - margin: 0; - text-transform: uppercase; -} - -.tabs .tab a { - color: rgba(238, 110, 115, 0.7); - display: block; - width: 100%; - height: 100%; - padding: 0 24px; - font-size: 14px; - text-overflow: ellipsis; - overflow: hidden; - -webkit-transition: color .28s ease, background-color .28s ease; - transition: color .28s ease, background-color .28s ease; -} - -.tabs .tab a:focus, .tabs .tab a:focus.active { - background-color: rgba(246, 178, 181, 0.2); - outline: none; -} - -.tabs .tab a:hover, .tabs .tab a.active { - background-color: transparent; - color: #ee6e73; -} - -.tabs .tab.disabled a, -.tabs .tab.disabled a:hover { - color: rgba(238, 110, 115, 0.4); - cursor: default; -} - -.tabs .indicator { - position: absolute; - bottom: 0; - height: 2px; - background-color: #f6b2b5; - will-change: left, right; -} - -@media only screen and (max-width: 992px) { - .tabs { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - } - .tabs .tab { - -webkit-box-flex: 1; - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - } - .tabs .tab a { - padding: 0 12px; - } -} - -.material-tooltip { - padding: 10px 8px; - font-size: 1rem; - z-index: 2000; - background-color: transparent; - border-radius: 2px; - color: #fff; - min-height: 36px; - line-height: 120%; - opacity: 0; - position: absolute; - text-align: center; - max-width: calc(100% - 4px); - overflow: hidden; - left: 0; - top: 0; - pointer-events: none; - visibility: hidden; - background-color: #323232; -} - -.backdrop { - position: absolute; - opacity: 0; - height: 7px; - width: 14px; - border-radius: 0 0 50% 50%; - background-color: #323232; - z-index: -1; - -webkit-transform-origin: 50% 0%; - transform-origin: 50% 0%; - visibility: hidden; -} - -.btn, .btn-large, .btn-small, -.btn-flat { - border: none; - border-radius: 2px; - display: inline-block; - height: 36px; - line-height: 36px; - padding: 0 16px; - text-transform: uppercase; - vertical-align: middle; - -webkit-tap-highlight-color: transparent; -} - -.btn.disabled, .disabled.btn-large, .disabled.btn-small, -.btn-floating.disabled, -.btn-large.disabled, -.btn-small.disabled, -.btn-flat.disabled, -.btn:disabled, -.btn-large:disabled, -.btn-small:disabled, -.btn-floating:disabled, -.btn-large:disabled, -.btn-small:disabled, -.btn-flat:disabled, -.btn[disabled], -.btn-large[disabled], -.btn-small[disabled], -.btn-floating[disabled], -.btn-large[disabled], -.btn-small[disabled], -.btn-flat[disabled] { - pointer-events: none; - background-color: #DFDFDF !important; - -webkit-box-shadow: none; - box-shadow: none; - color: #9F9F9F !important; - cursor: default; -} - -.btn.disabled:hover, .disabled.btn-large:hover, .disabled.btn-small:hover, -.btn-floating.disabled:hover, -.btn-large.disabled:hover, -.btn-small.disabled:hover, -.btn-flat.disabled:hover, -.btn:disabled:hover, -.btn-large:disabled:hover, -.btn-small:disabled:hover, -.btn-floating:disabled:hover, -.btn-large:disabled:hover, -.btn-small:disabled:hover, -.btn-flat:disabled:hover, -.btn[disabled]:hover, -.btn-large[disabled]:hover, -.btn-small[disabled]:hover, -.btn-floating[disabled]:hover, -.btn-large[disabled]:hover, -.btn-small[disabled]:hover, -.btn-flat[disabled]:hover { - background-color: #DFDFDF !important; - color: #9F9F9F !important; -} - -.btn, .btn-large, .btn-small, -.btn-floating, -.btn-large, -.btn-small, -.btn-flat { - font-size: 14px; - outline: 0; -} - -.btn i, .btn-large i, .btn-small i, -.btn-floating i, -.btn-large i, -.btn-small i, -.btn-flat i { - font-size: 1.3rem; - line-height: inherit; -} - -.btn:focus, .btn-large:focus, .btn-small:focus, -.btn-floating:focus { - background-color: #1d7d74; -} - -.btn, .btn-large, .btn-small { - text-decoration: none; - color: #fff; - background-color: #26a69a; - text-align: center; - letter-spacing: .5px; - -webkit-transition: background-color .2s ease-out; - transition: background-color .2s ease-out; - cursor: pointer; -} - -.btn:hover, .btn-large:hover, .btn-small:hover { - background-color: #2bbbad; -} - -.btn-floating { - display: inline-block; - color: #fff; - position: relative; - overflow: hidden; - z-index: 1; - width: 40px; - height: 40px; - line-height: 40px; - padding: 0; - background-color: #26a69a; - border-radius: 50%; - -webkit-transition: background-color .3s; - transition: background-color .3s; - cursor: pointer; - vertical-align: middle; -} - -.btn-floating:hover { - background-color: #26a69a; -} - -.btn-floating:before { - border-radius: 0; -} - -.btn-floating.btn-large { - width: 56px; - height: 56px; - padding: 0; -} - -.btn-floating.btn-large.halfway-fab { - bottom: -28px; -} - -.btn-floating.btn-large i { - line-height: 56px; -} - -.btn-floating.btn-small { - width: 32.4px; - height: 32.4px; -} - -.btn-floating.btn-small.halfway-fab { - bottom: -16.2px; -} - -.btn-floating.btn-small i { - line-height: 32.4px; -} - -.btn-floating.halfway-fab { - position: absolute; - right: 24px; - bottom: -20px; -} - -.btn-floating.halfway-fab.left { - right: auto; - left: 24px; -} - -.btn-floating i { - width: inherit; - display: inline-block; - text-align: center; - color: #fff; - font-size: 1.6rem; - line-height: 40px; -} - -button.btn-floating { - border: none; -} - -.fixed-action-btn { - position: fixed; - right: 23px; - bottom: 23px; - padding-top: 15px; - margin-bottom: 0; - z-index: 997; -} - -.fixed-action-btn.active ul { - visibility: visible; -} - -.fixed-action-btn.direction-left, .fixed-action-btn.direction-right { - padding: 0 0 0 15px; -} - -.fixed-action-btn.direction-left ul, .fixed-action-btn.direction-right ul { - text-align: right; - right: 64px; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - height: 100%; - left: auto; - /*width 100% only goes to width of button container */ - width: 500px; -} - -.fixed-action-btn.direction-left ul li, .fixed-action-btn.direction-right ul li { - display: inline-block; - margin: 7.5px 15px 0 0; -} - -.fixed-action-btn.direction-right { - padding: 0 15px 0 0; -} - -.fixed-action-btn.direction-right ul { - text-align: left; - direction: rtl; - left: 64px; - right: auto; -} - -.fixed-action-btn.direction-right ul li { - margin: 7.5px 0 0 15px; -} - -.fixed-action-btn.direction-bottom { - padding: 0 0 15px 0; -} - -.fixed-action-btn.direction-bottom ul { - top: 64px; - bottom: auto; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: reverse; - -webkit-flex-direction: column-reverse; - -ms-flex-direction: column-reverse; - flex-direction: column-reverse; -} - -.fixed-action-btn.direction-bottom ul li { - margin: 15px 0 0 0; -} - -.fixed-action-btn.toolbar { - padding: 0; - height: 56px; -} - -.fixed-action-btn.toolbar.active > a i { - opacity: 0; -} - -.fixed-action-btn.toolbar ul { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - top: 0; - bottom: 0; - z-index: 1; -} - -.fixed-action-btn.toolbar ul li { - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - display: inline-block; - margin: 0; - height: 100%; - -webkit-transition: none; - transition: none; -} - -.fixed-action-btn.toolbar ul li a { - display: block; - overflow: hidden; - position: relative; - width: 100%; - height: 100%; - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; - color: #fff; - line-height: 56px; - z-index: 1; -} - -.fixed-action-btn.toolbar ul li a i { - line-height: inherit; -} - -.fixed-action-btn ul { - left: 0; - right: 0; - text-align: center; - position: absolute; - bottom: 64px; - margin: 0; - visibility: hidden; -} - -.fixed-action-btn ul li { - margin-bottom: 15px; -} - -.fixed-action-btn ul a.btn-floating { - opacity: 0; -} - -.fixed-action-btn .fab-backdrop { - position: absolute; - top: 0; - left: 0; - z-index: -1; - width: 40px; - height: 40px; - background-color: #26a69a; - border-radius: 50%; - -webkit-transform: scale(0); - transform: scale(0); -} - -.btn-flat { - -webkit-box-shadow: none; - box-shadow: none; - background-color: transparent; - color: #343434; - cursor: pointer; - -webkit-transition: background-color .2s; - transition: background-color .2s; -} - -.btn-flat:focus, .btn-flat:hover { - -webkit-box-shadow: none; - box-shadow: none; -} - -.btn-flat:focus { - background-color: rgba(0, 0, 0, 0.1); -} - -.btn-flat.disabled, .btn-flat.btn-flat[disabled] { - background-color: transparent !important; - color: #b3b2b2 !important; - cursor: default; -} - -.btn-large { - height: 54px; - line-height: 54px; - font-size: 15px; - padding: 0 28px; -} - -.btn-large i { - font-size: 1.6rem; -} - -.btn-small { - height: 32.4px; - line-height: 32.4px; - font-size: 13px; -} - -.btn-small i { - font-size: 1.2rem; -} - -.btn-block { - display: block; -} - -.dropdown-content { - background-color: #fff; - margin: 0; - display: none; - min-width: 100px; - overflow-y: auto; - opacity: 0; - position: absolute; - left: 0; - top: 0; - z-index: 9999; - -webkit-transform-origin: 0 0; - transform-origin: 0 0; -} - -.dropdown-content:focus { - outline: 0; -} - -.dropdown-content li { - clear: both; - color: rgba(0, 0, 0, 0.87); - cursor: pointer; - min-height: 50px; - line-height: 1.5rem; - width: 100%; - text-align: left; -} - -.dropdown-content li:hover, .dropdown-content li.active { - background-color: #eee; -} - -.dropdown-content li:focus { - outline: none; -} - -.dropdown-content li.divider { - min-height: 0; - height: 1px; -} - -.dropdown-content li > a, .dropdown-content li > span { - font-size: 16px; - color: #26a69a; - display: block; - line-height: 22px; - padding: 14px 16px; -} - -.dropdown-content li > span > label { - top: 1px; - left: 0; - height: 18px; -} - -.dropdown-content li > a > i { - height: inherit; - line-height: inherit; - float: left; - margin: 0 24px 0 0; - width: 24px; -} - -body.keyboard-focused .dropdown-content li:focus { - background-color: #dadada; -} - -.input-field.col .dropdown-content [type="checkbox"] + label { - top: 1px; - left: 0; - height: 18px; - -webkit-transform: none; - transform: none; -} - -.dropdown-trigger { - cursor: pointer; -} - -/*! - * Waves v0.6.0 - * http://fian.my.id/Waves - * - * Copyright 2014 Alfiana E. Sibuea and other contributors - * Released under the MIT license - * https://github.com/fians/Waves/blob/master/LICENSE - */ -.waves-effect { - position: relative; - cursor: pointer; - display: inline-block; - overflow: hidden; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-tap-highlight-color: transparent; - vertical-align: middle; - z-index: 1; - -webkit-transition: .3s ease-out; - transition: .3s ease-out; -} - -.waves-effect .waves-ripple { - position: absolute; - border-radius: 50%; - width: 20px; - height: 20px; - margin-top: -10px; - margin-left: -10px; - opacity: 0; - background: rgba(0, 0, 0, 0.2); - -webkit-transition: all 0.7s ease-out; - transition: all 0.7s ease-out; - -webkit-transition-property: opacity, -webkit-transform; - transition-property: opacity, -webkit-transform; - transition-property: transform, opacity; - transition-property: transform, opacity, -webkit-transform; - -webkit-transform: scale(0); - transform: scale(0); - pointer-events: none; -} - -.waves-effect.waves-light .waves-ripple { - background-color: rgba(255, 255, 255, 0.45); -} - -.waves-effect.waves-red .waves-ripple { - background-color: rgba(244, 67, 54, 0.7); -} - -.waves-effect.waves-yellow .waves-ripple { - background-color: rgba(255, 235, 59, 0.7); -} - -.waves-effect.waves-orange .waves-ripple { - background-color: rgba(255, 152, 0, 0.7); -} - -.waves-effect.waves-purple .waves-ripple { - background-color: rgba(156, 39, 176, 0.7); -} - -.waves-effect.waves-green .waves-ripple { - background-color: rgba(76, 175, 80, 0.7); -} - -.waves-effect.waves-teal .waves-ripple { - background-color: rgba(0, 150, 136, 0.7); -} - -.waves-effect input[type="button"], .waves-effect input[type="reset"], .waves-effect input[type="submit"] { - border: 0; - font-style: normal; - font-size: inherit; - text-transform: inherit; - background: none; -} - -.waves-effect img { - position: relative; - z-index: -1; -} - -.waves-notransition { - -webkit-transition: none !important; - transition: none !important; -} - -.waves-circle { - -webkit-transform: translateZ(0); - transform: translateZ(0); - -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); -} - -.waves-input-wrapper { - border-radius: 0.2em; - vertical-align: bottom; -} - -.waves-input-wrapper .waves-button-input { - position: relative; - top: 0; - left: 0; - z-index: 1; -} - -.waves-circle { - text-align: center; - width: 2.5em; - height: 2.5em; - line-height: 2.5em; - border-radius: 50%; - -webkit-mask-image: none; -} - -.waves-block { - display: block; -} - -/* Firefox Bug: link not triggered */ -.waves-effect .waves-ripple { - z-index: -1; -} - -.modal { - display: none; - position: fixed; - left: 0; - right: 0; - background-color: #fafafa; - padding: 0; - max-height: 70%; - width: 55%; - margin: auto; - overflow-y: auto; - border-radius: 2px; - will-change: top, opacity; -} - -.modal:focus { - outline: none; -} - -@media only screen and (max-width: 992px) { - .modal { - width: 80%; - } -} - -.modal h1, .modal h2, .modal h3, .modal h4 { - margin-top: 0; -} - -.modal .modal-content { - padding: 24px; -} - -.modal .modal-close { - cursor: pointer; -} - -.modal .modal-footer { - border-radius: 0 0 2px 2px; - background-color: #fafafa; - padding: 4px 6px; - height: 56px; - width: 100%; - text-align: right; -} - -.modal .modal-footer .btn, .modal .modal-footer .btn-large, .modal .modal-footer .btn-small, .modal .modal-footer .btn-flat { - margin: 6px 0; -} - -.modal-overlay { - position: fixed; - z-index: 999; - top: -25%; - left: 0; - bottom: 0; - right: 0; - height: 125%; - width: 100%; - background: #000; - display: none; - will-change: opacity; -} - -.modal.modal-fixed-footer { - padding: 0; - height: 70%; -} - -.modal.modal-fixed-footer .modal-content { - position: absolute; - height: calc(100% - 56px); - max-height: 100%; - width: 100%; - overflow-y: auto; -} - -.modal.modal-fixed-footer .modal-footer { - border-top: 1px solid rgba(0, 0, 0, 0.1); - position: absolute; - bottom: 0; -} - -.modal.bottom-sheet { - top: auto; - bottom: -100%; - margin: 0; - width: 100%; - max-height: 45%; - border-radius: 0; - will-change: bottom, opacity; -} - -.collapsible { - border-top: 1px solid #ddd; - border-right: 1px solid #ddd; - border-left: 1px solid #ddd; - margin: 0.5rem 0 1rem 0; -} - -.collapsible-header { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - cursor: pointer; - -webkit-tap-highlight-color: transparent; - line-height: 1.5; - padding: 1rem; - background-color: #fff; - border-bottom: 1px solid #ddd; -} - -.collapsible-header:focus { - outline: 0; -} - -.collapsible-header i { - width: 2rem; - font-size: 1.6rem; - display: inline-block; - text-align: center; - margin-right: 1rem; -} - -.keyboard-focused .collapsible-header:focus { - background-color: #eee; -} - -.collapsible-body { - display: none; - border-bottom: 1px solid #ddd; - -webkit-box-sizing: border-box; - box-sizing: border-box; - padding: 2rem; -} - -.sidenav .collapsible, -.sidenav.fixed .collapsible { - border: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -.sidenav .collapsible li, -.sidenav.fixed .collapsible li { - padding: 0; -} - -.sidenav .collapsible-header, -.sidenav.fixed .collapsible-header { - background-color: transparent; - border: none; - line-height: inherit; - height: inherit; - padding: 0 16px; -} - -.sidenav .collapsible-header:hover, -.sidenav.fixed .collapsible-header:hover { - background-color: rgba(0, 0, 0, 0.05); -} - -.sidenav .collapsible-header i, -.sidenav.fixed .collapsible-header i { - line-height: inherit; -} - -.sidenav .collapsible-body, -.sidenav.fixed .collapsible-body { - border: 0; - background-color: #fff; -} - -.sidenav .collapsible-body li a, -.sidenav.fixed .collapsible-body li a { - padding: 0 23.5px 0 31px; -} - -.collapsible.popout { - border: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -.collapsible.popout > li { - -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); - margin: 0 24px; - -webkit-transition: margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94); - transition: margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94); -} - -.collapsible.popout > li.active { - -webkit-box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); - box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); - margin: 16px 0; -} - -.chip { - display: inline-block; - height: 32px; - font-size: 13px; - font-weight: 500; - color: rgba(0, 0, 0, 0.6); - line-height: 32px; - padding: 0 12px; - border-radius: 16px; - background-color: #e4e4e4; - margin-bottom: 5px; - margin-right: 5px; -} - -.chip:focus { - outline: none; - background-color: #26a69a; - color: #fff; -} - -.chip > img { - float: left; - margin: 0 8px 0 -12px; - height: 32px; - width: 32px; - border-radius: 50%; -} - -.chip .close { - cursor: pointer; - float: right; - font-size: 16px; - line-height: 32px; - padding-left: 8px; -} - -.chips { - border: none; - border-bottom: 1px solid #9e9e9e; - -webkit-box-shadow: none; - box-shadow: none; - margin: 0 0 8px 0; - min-height: 45px; - outline: none; - -webkit-transition: all .3s; - transition: all .3s; -} - -.chips.focus { - border-bottom: 1px solid #26a69a; - -webkit-box-shadow: 0 1px 0 0 #26a69a; - box-shadow: 0 1px 0 0 #26a69a; -} - -.chips:hover { - cursor: text; -} - -.chips .input { - background: none; - border: 0; - color: rgba(0, 0, 0, 0.6); - display: inline-block; - font-size: 16px; - height: 3rem; - line-height: 32px; - outline: 0; - margin: 0; - padding: 0 !important; - width: 120px !important; -} - -.chips .input:focus { - border: 0 !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; -} - -.chips .autocomplete-content { - margin-top: 0; - margin-bottom: 0; -} - -.prefix ~ .chips { - margin-left: 3rem; - width: 92%; - width: calc(100% - 3rem); -} - -.chips:empty ~ label { - font-size: 0.8rem; - -webkit-transform: translateY(-140%); - transform: translateY(-140%); -} - -.materialboxed { - display: block; - cursor: -webkit-zoom-in; - cursor: zoom-in; - position: relative; - -webkit-transition: opacity .4s; - transition: opacity .4s; - -webkit-backface-visibility: hidden; -} - -.materialboxed:hover:not(.active) { - opacity: .8; -} - -.materialboxed.active { - cursor: -webkit-zoom-out; - cursor: zoom-out; -} - -#materialbox-overlay { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - background-color: #292929; - z-index: 1000; - will-change: opacity; -} - -.materialbox-caption { - position: fixed; - display: none; - color: #fff; - line-height: 50px; - bottom: 0; - left: 0; - width: 100%; - text-align: center; - padding: 0% 15%; - height: 50px; - z-index: 1000; - -webkit-font-smoothing: antialiased; -} - -select:focus { - outline: 1px solid #c9f3ef; -} - -button:focus { - outline: none; - background-color: #2ab7a9; -} - -label { - font-size: 0.8rem; - color: #9e9e9e; -} - -/* Text Inputs + Textarea - ========================================================================== */ -/* Style Placeholders */ -::-webkit-input-placeholder { - color: #d1d1d1; -} -::-moz-placeholder { - color: #d1d1d1; -} -:-ms-input-placeholder { - color: #d1d1d1; -} -::-ms-input-placeholder { - color: #d1d1d1; -} -::placeholder { - color: #d1d1d1; -} - -/* Text inputs */ -input:not([type]), -input[type=text]:not(.browser-default), -input[type=password]:not(.browser-default), -input[type=email]:not(.browser-default), -input[type=url]:not(.browser-default), -input[type=time]:not(.browser-default), -input[type=date]:not(.browser-default), -input[type=datetime]:not(.browser-default), -input[type=datetime-local]:not(.browser-default), -input[type=tel]:not(.browser-default), -input[type=number]:not(.browser-default), -input[type=search]:not(.browser-default), -textarea.materialize-textarea { - background-color: transparent; - border: none; - border-bottom: 1px solid #9e9e9e; - border-radius: 0; - outline: none; - height: 3rem; - width: 100%; - font-size: 16px; - margin: 0 0 8px 0; - padding: 0; - -webkit-box-shadow: none; - box-shadow: none; - -webkit-box-sizing: content-box; - box-sizing: content-box; - -webkit-transition: border .3s, -webkit-box-shadow .3s; - transition: border .3s, -webkit-box-shadow .3s; - transition: box-shadow .3s, border .3s; - transition: box-shadow .3s, border .3s, -webkit-box-shadow .3s; -} - -input:not([type]):disabled, input:not([type])[readonly="readonly"], -input[type=text]:not(.browser-default):disabled, -input[type=text]:not(.browser-default)[readonly="readonly"], -input[type=password]:not(.browser-default):disabled, -input[type=password]:not(.browser-default)[readonly="readonly"], -input[type=email]:not(.browser-default):disabled, -input[type=email]:not(.browser-default)[readonly="readonly"], -input[type=url]:not(.browser-default):disabled, -input[type=url]:not(.browser-default)[readonly="readonly"], -input[type=time]:not(.browser-default):disabled, -input[type=time]:not(.browser-default)[readonly="readonly"], -input[type=date]:not(.browser-default):disabled, -input[type=date]:not(.browser-default)[readonly="readonly"], -input[type=datetime]:not(.browser-default):disabled, -input[type=datetime]:not(.browser-default)[readonly="readonly"], -input[type=datetime-local]:not(.browser-default):disabled, -input[type=datetime-local]:not(.browser-default)[readonly="readonly"], -input[type=tel]:not(.browser-default):disabled, -input[type=tel]:not(.browser-default)[readonly="readonly"], -input[type=number]:not(.browser-default):disabled, -input[type=number]:not(.browser-default)[readonly="readonly"], -input[type=search]:not(.browser-default):disabled, -input[type=search]:not(.browser-default)[readonly="readonly"], -textarea.materialize-textarea:disabled, -textarea.materialize-textarea[readonly="readonly"] { - color: rgba(0, 0, 0, 0.42); - border-bottom: 1px dotted rgba(0, 0, 0, 0.42); -} - -input:not([type]):disabled + label, -input:not([type])[readonly="readonly"] + label, -input[type=text]:not(.browser-default):disabled + label, -input[type=text]:not(.browser-default)[readonly="readonly"] + label, -input[type=password]:not(.browser-default):disabled + label, -input[type=password]:not(.browser-default)[readonly="readonly"] + label, -input[type=email]:not(.browser-default):disabled + label, -input[type=email]:not(.browser-default)[readonly="readonly"] + label, -input[type=url]:not(.browser-default):disabled + label, -input[type=url]:not(.browser-default)[readonly="readonly"] + label, -input[type=time]:not(.browser-default):disabled + label, -input[type=time]:not(.browser-default)[readonly="readonly"] + label, -input[type=date]:not(.browser-default):disabled + label, -input[type=date]:not(.browser-default)[readonly="readonly"] + label, -input[type=datetime]:not(.browser-default):disabled + label, -input[type=datetime]:not(.browser-default)[readonly="readonly"] + label, -input[type=datetime-local]:not(.browser-default):disabled + label, -input[type=datetime-local]:not(.browser-default)[readonly="readonly"] + label, -input[type=tel]:not(.browser-default):disabled + label, -input[type=tel]:not(.browser-default)[readonly="readonly"] + label, -input[type=number]:not(.browser-default):disabled + label, -input[type=number]:not(.browser-default)[readonly="readonly"] + label, -input[type=search]:not(.browser-default):disabled + label, -input[type=search]:not(.browser-default)[readonly="readonly"] + label, -textarea.materialize-textarea:disabled + label, -textarea.materialize-textarea[readonly="readonly"] + label { - color: rgba(0, 0, 0, 0.42); -} - -input:not([type]):focus:not([readonly]), -input[type=text]:not(.browser-default):focus:not([readonly]), -input[type=password]:not(.browser-default):focus:not([readonly]), -input[type=email]:not(.browser-default):focus:not([readonly]), -input[type=url]:not(.browser-default):focus:not([readonly]), -input[type=time]:not(.browser-default):focus:not([readonly]), -input[type=date]:not(.browser-default):focus:not([readonly]), -input[type=datetime]:not(.browser-default):focus:not([readonly]), -input[type=datetime-local]:not(.browser-default):focus:not([readonly]), -input[type=tel]:not(.browser-default):focus:not([readonly]), -input[type=number]:not(.browser-default):focus:not([readonly]), -input[type=search]:not(.browser-default):focus:not([readonly]), -textarea.materialize-textarea:focus:not([readonly]) { - border-bottom: 1px solid #26a69a; - -webkit-box-shadow: 0 1px 0 0 #26a69a; - box-shadow: 0 1px 0 0 #26a69a; -} - -input:not([type]):focus:not([readonly]) + label, -input[type=text]:not(.browser-default):focus:not([readonly]) + label, -input[type=password]:not(.browser-default):focus:not([readonly]) + label, -input[type=email]:not(.browser-default):focus:not([readonly]) + label, -input[type=url]:not(.browser-default):focus:not([readonly]) + label, -input[type=time]:not(.browser-default):focus:not([readonly]) + label, -input[type=date]:not(.browser-default):focus:not([readonly]) + label, -input[type=datetime]:not(.browser-default):focus:not([readonly]) + label, -input[type=datetime-local]:not(.browser-default):focus:not([readonly]) + label, -input[type=tel]:not(.browser-default):focus:not([readonly]) + label, -input[type=number]:not(.browser-default):focus:not([readonly]) + label, -input[type=search]:not(.browser-default):focus:not([readonly]) + label, -textarea.materialize-textarea:focus:not([readonly]) + label { - color: #26a69a; -} - -input:not([type]):focus.valid ~ label, -input[type=text]:not(.browser-default):focus.valid ~ label, -input[type=password]:not(.browser-default):focus.valid ~ label, -input[type=email]:not(.browser-default):focus.valid ~ label, -input[type=url]:not(.browser-default):focus.valid ~ label, -input[type=time]:not(.browser-default):focus.valid ~ label, -input[type=date]:not(.browser-default):focus.valid ~ label, -input[type=datetime]:not(.browser-default):focus.valid ~ label, -input[type=datetime-local]:not(.browser-default):focus.valid ~ label, -input[type=tel]:not(.browser-default):focus.valid ~ label, -input[type=number]:not(.browser-default):focus.valid ~ label, -input[type=search]:not(.browser-default):focus.valid ~ label, -textarea.materialize-textarea:focus.valid ~ label { - color: #4CAF50; -} - -input:not([type]):focus.invalid ~ label, -input[type=text]:not(.browser-default):focus.invalid ~ label, -input[type=password]:not(.browser-default):focus.invalid ~ label, -input[type=email]:not(.browser-default):focus.invalid ~ label, -input[type=url]:not(.browser-default):focus.invalid ~ label, -input[type=time]:not(.browser-default):focus.invalid ~ label, -input[type=date]:not(.browser-default):focus.invalid ~ label, -input[type=datetime]:not(.browser-default):focus.invalid ~ label, -input[type=datetime-local]:not(.browser-default):focus.invalid ~ label, -input[type=tel]:not(.browser-default):focus.invalid ~ label, -input[type=number]:not(.browser-default):focus.invalid ~ label, -input[type=search]:not(.browser-default):focus.invalid ~ label, -textarea.materialize-textarea:focus.invalid ~ label { - color: #F44336; -} - -input:not([type]).validate + label, -input[type=text]:not(.browser-default).validate + label, -input[type=password]:not(.browser-default).validate + label, -input[type=email]:not(.browser-default).validate + label, -input[type=url]:not(.browser-default).validate + label, -input[type=time]:not(.browser-default).validate + label, -input[type=date]:not(.browser-default).validate + label, -input[type=datetime]:not(.browser-default).validate + label, -input[type=datetime-local]:not(.browser-default).validate + label, -input[type=tel]:not(.browser-default).validate + label, -input[type=number]:not(.browser-default).validate + label, -input[type=search]:not(.browser-default).validate + label, -textarea.materialize-textarea.validate + label { - width: 100%; -} - -/* Validation Sass Placeholders */ -input.valid:not([type]), input.valid:not([type]):focus, -input.valid[type=text]:not(.browser-default), -input.valid[type=text]:not(.browser-default):focus, -input.valid[type=password]:not(.browser-default), -input.valid[type=password]:not(.browser-default):focus, -input.valid[type=email]:not(.browser-default), -input.valid[type=email]:not(.browser-default):focus, -input.valid[type=url]:not(.browser-default), -input.valid[type=url]:not(.browser-default):focus, -input.valid[type=time]:not(.browser-default), -input.valid[type=time]:not(.browser-default):focus, -input.valid[type=date]:not(.browser-default), -input.valid[type=date]:not(.browser-default):focus, -input.valid[type=datetime]:not(.browser-default), -input.valid[type=datetime]:not(.browser-default):focus, -input.valid[type=datetime-local]:not(.browser-default), -input.valid[type=datetime-local]:not(.browser-default):focus, -input.valid[type=tel]:not(.browser-default), -input.valid[type=tel]:not(.browser-default):focus, -input.valid[type=number]:not(.browser-default), -input.valid[type=number]:not(.browser-default):focus, -input.valid[type=search]:not(.browser-default), -input.valid[type=search]:not(.browser-default):focus, -textarea.materialize-textarea.valid, -textarea.materialize-textarea.valid:focus, .select-wrapper.valid > input.select-dropdown { - border-bottom: 1px solid #4CAF50; - -webkit-box-shadow: 0 1px 0 0 #4CAF50; - box-shadow: 0 1px 0 0 #4CAF50; -} - -input.invalid:not([type]), input.invalid:not([type]):focus, -input.invalid[type=text]:not(.browser-default), -input.invalid[type=text]:not(.browser-default):focus, -input.invalid[type=password]:not(.browser-default), -input.invalid[type=password]:not(.browser-default):focus, -input.invalid[type=email]:not(.browser-default), -input.invalid[type=email]:not(.browser-default):focus, -input.invalid[type=url]:not(.browser-default), -input.invalid[type=url]:not(.browser-default):focus, -input.invalid[type=time]:not(.browser-default), -input.invalid[type=time]:not(.browser-default):focus, -input.invalid[type=date]:not(.browser-default), -input.invalid[type=date]:not(.browser-default):focus, -input.invalid[type=datetime]:not(.browser-default), -input.invalid[type=datetime]:not(.browser-default):focus, -input.invalid[type=datetime-local]:not(.browser-default), -input.invalid[type=datetime-local]:not(.browser-default):focus, -input.invalid[type=tel]:not(.browser-default), -input.invalid[type=tel]:not(.browser-default):focus, -input.invalid[type=number]:not(.browser-default), -input.invalid[type=number]:not(.browser-default):focus, -input.invalid[type=search]:not(.browser-default), -input.invalid[type=search]:not(.browser-default):focus, -textarea.materialize-textarea.invalid, -textarea.materialize-textarea.invalid:focus, .select-wrapper.invalid > input.select-dropdown, -.select-wrapper.invalid > input.select-dropdown:focus { - border-bottom: 1px solid #F44336; - -webkit-box-shadow: 0 1px 0 0 #F44336; - box-shadow: 0 1px 0 0 #F44336; -} - -input:not([type]).valid ~ .helper-text[data-success], -input:not([type]):focus.valid ~ .helper-text[data-success], -input:not([type]).invalid ~ .helper-text[data-error], -input:not([type]):focus.invalid ~ .helper-text[data-error], -input[type=text]:not(.browser-default).valid ~ .helper-text[data-success], -input[type=text]:not(.browser-default):focus.valid ~ .helper-text[data-success], -input[type=text]:not(.browser-default).invalid ~ .helper-text[data-error], -input[type=text]:not(.browser-default):focus.invalid ~ .helper-text[data-error], -input[type=password]:not(.browser-default).valid ~ .helper-text[data-success], -input[type=password]:not(.browser-default):focus.valid ~ .helper-text[data-success], -input[type=password]:not(.browser-default).invalid ~ .helper-text[data-error], -input[type=password]:not(.browser-default):focus.invalid ~ .helper-text[data-error], -input[type=email]:not(.browser-default).valid ~ .helper-text[data-success], -input[type=email]:not(.browser-default):focus.valid ~ .helper-text[data-success], -input[type=email]:not(.browser-default).invalid ~ .helper-text[data-error], -input[type=email]:not(.browser-default):focus.invalid ~ .helper-text[data-error], -input[type=url]:not(.browser-default).valid ~ .helper-text[data-success], -input[type=url]:not(.browser-default):focus.valid ~ .helper-text[data-success], -input[type=url]:not(.browser-default).invalid ~ .helper-text[data-error], -input[type=url]:not(.browser-default):focus.invalid ~ .helper-text[data-error], -input[type=time]:not(.browser-default).valid ~ .helper-text[data-success], -input[type=time]:not(.browser-default):focus.valid ~ .helper-text[data-success], -input[type=time]:not(.browser-default).invalid ~ .helper-text[data-error], -input[type=time]:not(.browser-default):focus.invalid ~ .helper-text[data-error], -input[type=date]:not(.browser-default).valid ~ .helper-text[data-success], -input[type=date]:not(.browser-default):focus.valid ~ .helper-text[data-success], -input[type=date]:not(.browser-default).invalid ~ .helper-text[data-error], -input[type=date]:not(.browser-default):focus.invalid ~ .helper-text[data-error], -input[type=datetime]:not(.browser-default).valid ~ .helper-text[data-success], -input[type=datetime]:not(.browser-default):focus.valid ~ .helper-text[data-success], -input[type=datetime]:not(.browser-default).invalid ~ .helper-text[data-error], -input[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text[data-error], -input[type=datetime-local]:not(.browser-default).valid ~ .helper-text[data-success], -input[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text[data-success], -input[type=datetime-local]:not(.browser-default).invalid ~ .helper-text[data-error], -input[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text[data-error], -input[type=tel]:not(.browser-default).valid ~ .helper-text[data-success], -input[type=tel]:not(.browser-default):focus.valid ~ .helper-text[data-success], -input[type=tel]:not(.browser-default).invalid ~ .helper-text[data-error], -input[type=tel]:not(.browser-default):focus.invalid ~ .helper-text[data-error], -input[type=number]:not(.browser-default).valid ~ .helper-text[data-success], -input[type=number]:not(.browser-default):focus.valid ~ .helper-text[data-success], -input[type=number]:not(.browser-default).invalid ~ .helper-text[data-error], -input[type=number]:not(.browser-default):focus.invalid ~ .helper-text[data-error], -input[type=search]:not(.browser-default).valid ~ .helper-text[data-success], -input[type=search]:not(.browser-default):focus.valid ~ .helper-text[data-success], -input[type=search]:not(.browser-default).invalid ~ .helper-text[data-error], -input[type=search]:not(.browser-default):focus.invalid ~ .helper-text[data-error], -textarea.materialize-textarea.valid ~ .helper-text[data-success], -textarea.materialize-textarea:focus.valid ~ .helper-text[data-success], -textarea.materialize-textarea.invalid ~ .helper-text[data-error], -textarea.materialize-textarea:focus.invalid ~ .helper-text[data-error], .select-wrapper.valid .helper-text[data-success], -.select-wrapper.invalid ~ .helper-text[data-error] { - color: transparent; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - pointer-events: none; -} - -input:not([type]).valid ~ .helper-text:after, -input:not([type]):focus.valid ~ .helper-text:after, -input[type=text]:not(.browser-default).valid ~ .helper-text:after, -input[type=text]:not(.browser-default):focus.valid ~ .helper-text:after, -input[type=password]:not(.browser-default).valid ~ .helper-text:after, -input[type=password]:not(.browser-default):focus.valid ~ .helper-text:after, -input[type=email]:not(.browser-default).valid ~ .helper-text:after, -input[type=email]:not(.browser-default):focus.valid ~ .helper-text:after, -input[type=url]:not(.browser-default).valid ~ .helper-text:after, -input[type=url]:not(.browser-default):focus.valid ~ .helper-text:after, -input[type=time]:not(.browser-default).valid ~ .helper-text:after, -input[type=time]:not(.browser-default):focus.valid ~ .helper-text:after, -input[type=date]:not(.browser-default).valid ~ .helper-text:after, -input[type=date]:not(.browser-default):focus.valid ~ .helper-text:after, -input[type=datetime]:not(.browser-default).valid ~ .helper-text:after, -input[type=datetime]:not(.browser-default):focus.valid ~ .helper-text:after, -input[type=datetime-local]:not(.browser-default).valid ~ .helper-text:after, -input[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text:after, -input[type=tel]:not(.browser-default).valid ~ .helper-text:after, -input[type=tel]:not(.browser-default):focus.valid ~ .helper-text:after, -input[type=number]:not(.browser-default).valid ~ .helper-text:after, -input[type=number]:not(.browser-default):focus.valid ~ .helper-text:after, -input[type=search]:not(.browser-default).valid ~ .helper-text:after, -input[type=search]:not(.browser-default):focus.valid ~ .helper-text:after, -textarea.materialize-textarea.valid ~ .helper-text:after, -textarea.materialize-textarea:focus.valid ~ .helper-text:after, .select-wrapper.valid ~ .helper-text:after { - content: attr(data-success); - color: #4CAF50; -} - -input:not([type]).invalid ~ .helper-text:after, -input:not([type]):focus.invalid ~ .helper-text:after, -input[type=text]:not(.browser-default).invalid ~ .helper-text:after, -input[type=text]:not(.browser-default):focus.invalid ~ .helper-text:after, -input[type=password]:not(.browser-default).invalid ~ .helper-text:after, -input[type=password]:not(.browser-default):focus.invalid ~ .helper-text:after, -input[type=email]:not(.browser-default).invalid ~ .helper-text:after, -input[type=email]:not(.browser-default):focus.invalid ~ .helper-text:after, -input[type=url]:not(.browser-default).invalid ~ .helper-text:after, -input[type=url]:not(.browser-default):focus.invalid ~ .helper-text:after, -input[type=time]:not(.browser-default).invalid ~ .helper-text:after, -input[type=time]:not(.browser-default):focus.invalid ~ .helper-text:after, -input[type=date]:not(.browser-default).invalid ~ .helper-text:after, -input[type=date]:not(.browser-default):focus.invalid ~ .helper-text:after, -input[type=datetime]:not(.browser-default).invalid ~ .helper-text:after, -input[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text:after, -input[type=datetime-local]:not(.browser-default).invalid ~ .helper-text:after, -input[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text:after, -input[type=tel]:not(.browser-default).invalid ~ .helper-text:after, -input[type=tel]:not(.browser-default):focus.invalid ~ .helper-text:after, -input[type=number]:not(.browser-default).invalid ~ .helper-text:after, -input[type=number]:not(.browser-default):focus.invalid ~ .helper-text:after, -input[type=search]:not(.browser-default).invalid ~ .helper-text:after, -input[type=search]:not(.browser-default):focus.invalid ~ .helper-text:after, -textarea.materialize-textarea.invalid ~ .helper-text:after, -textarea.materialize-textarea:focus.invalid ~ .helper-text:after, .select-wrapper.invalid ~ .helper-text:after { - content: attr(data-error); - color: #F44336; -} - -input:not([type]) + label:after, -input[type=text]:not(.browser-default) + label:after, -input[type=password]:not(.browser-default) + label:after, -input[type=email]:not(.browser-default) + label:after, -input[type=url]:not(.browser-default) + label:after, -input[type=time]:not(.browser-default) + label:after, -input[type=date]:not(.browser-default) + label:after, -input[type=datetime]:not(.browser-default) + label:after, -input[type=datetime-local]:not(.browser-default) + label:after, -input[type=tel]:not(.browser-default) + label:after, -input[type=number]:not(.browser-default) + label:after, -input[type=search]:not(.browser-default) + label:after, -textarea.materialize-textarea + label:after, .select-wrapper + label:after { - display: block; - content: ""; - position: absolute; - top: 100%; - left: 0; - opacity: 0; - -webkit-transition: .2s opacity ease-out, .2s color ease-out; - transition: .2s opacity ease-out, .2s color ease-out; -} - -.input-field { - position: relative; - margin-top: 1rem; - margin-bottom: 1rem; -} - -.input-field.inline { - display: inline-block; - vertical-align: middle; - margin-left: 5px; -} - -.input-field.inline input, -.input-field.inline .select-dropdown { - margin-bottom: 1rem; -} - -.input-field.col label { - left: 0.75rem; -} - -.input-field.col .prefix ~ label, -.input-field.col .prefix ~ .validate ~ label { - width: calc(100% - 3rem - 1.5rem); -} - -.input-field > label { - color: #9e9e9e; - position: absolute; - top: 0; - left: 0; - font-size: 1rem; - cursor: text; - -webkit-transition: color .2s ease-out, -webkit-transform .2s ease-out; - transition: color .2s ease-out, -webkit-transform .2s ease-out; - transition: transform .2s ease-out, color .2s ease-out; - transition: transform .2s ease-out, color .2s ease-out, -webkit-transform .2s ease-out; - -webkit-transform-origin: 0% 100%; - transform-origin: 0% 100%; - text-align: initial; - -webkit-transform: translateY(12px); - transform: translateY(12px); -} - -.input-field > label:not(.label-icon).active { - -webkit-transform: translateY(-14px) scale(0.8); - transform: translateY(-14px) scale(0.8); - -webkit-transform-origin: 0 0; - transform-origin: 0 0; -} - -.input-field > input[type]:-webkit-autofill:not(.browser-default):not([type="search"]) + label, -.input-field > input[type=date]:not(.browser-default) + label, -.input-field > input[type=time]:not(.browser-default) + label { - -webkit-transform: translateY(-14px) scale(0.8); - transform: translateY(-14px) scale(0.8); - -webkit-transform-origin: 0 0; - transform-origin: 0 0; -} - -.input-field .helper-text { - position: relative; - min-height: 18px; - display: block; - font-size: 12px; - color: rgba(0, 0, 0, 0.54); -} - -.input-field .helper-text::after { - opacity: 1; - position: absolute; - top: 0; - left: 0; -} - -.input-field .prefix { - position: absolute; - width: 3rem; - font-size: 2rem; - -webkit-transition: color .2s; - transition: color .2s; - top: 0.5rem; -} - -.input-field .prefix.active { - color: #26a69a; -} - -.input-field .prefix ~ input, -.input-field .prefix ~ textarea, -.input-field .prefix ~ label, -.input-field .prefix ~ .validate ~ label, -.input-field .prefix ~ .helper-text, -.input-field .prefix ~ .autocomplete-content { - margin-left: 3rem; - width: 92%; - width: calc(100% - 3rem); -} - -.input-field .prefix ~ label { - margin-left: 3rem; -} - -@media only screen and (max-width: 992px) { - .input-field .prefix ~ input { - width: 86%; - width: calc(100% - 3rem); - } -} - -@media only screen and (max-width: 600px) { - .input-field .prefix ~ input { - width: 80%; - width: calc(100% - 3rem); - } -} - -/* Search Field */ -.input-field input[type=search] { - display: block; - line-height: inherit; - -webkit-transition: .3s background-color; - transition: .3s background-color; -} - -.nav-wrapper .input-field input[type=search] { - height: inherit; - padding-left: 4rem; - width: calc(100% - 4rem); - border: 0; - -webkit-box-shadow: none; - box-shadow: none; -} - -.input-field input[type=search]:focus:not(.browser-default) { - background-color: #fff; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - color: #444; -} - -.input-field input[type=search]:focus:not(.browser-default) + label i, -.input-field input[type=search]:focus:not(.browser-default) ~ .mdi-navigation-close, -.input-field input[type=search]:focus:not(.browser-default) ~ .material-icons { - color: #444; -} - -.input-field input[type=search] + .label-icon { - -webkit-transform: none; - transform: none; - left: 1rem; -} - -.input-field input[type=search] ~ .mdi-navigation-close, -.input-field input[type=search] ~ .material-icons { - position: absolute; - top: 0; - right: 1rem; - color: transparent; - cursor: pointer; - font-size: 2rem; - -webkit-transition: .3s color; - transition: .3s color; -} - -/* Textarea */ -textarea { - width: 100%; - height: 3rem; - background-color: transparent; -} - -textarea.materialize-textarea { - line-height: normal; - overflow-y: hidden; - /* prevents scroll bar flash */ - padding: .8rem 0 .8rem 0; - /* prevents text jump on Enter keypress */ - resize: none; - min-height: 3rem; - -webkit-box-sizing: border-box; - box-sizing: border-box; -} - -.hiddendiv { - visibility: hidden; - white-space: pre-wrap; - word-wrap: break-word; - overflow-wrap: break-word; - /* future version of deprecated 'word-wrap' */ - padding-top: 1.2rem; - /* prevents text jump on Enter keypress */ - position: absolute; - top: 0; - z-index: -1; -} - -/* Autocomplete */ -.autocomplete-content li .highlight { - color: #444; -} - -.autocomplete-content li img { - height: 40px; - width: 40px; - margin: 5px 15px; -} - -/* Character Counter */ -.character-counter { - min-height: 18px; -} - -/* Radio Buttons - ========================================================================== */ -[type="radio"]:not(:checked), -[type="radio"]:checked { - position: absolute; - opacity: 0; - pointer-events: none; -} - -[type="radio"]:not(:checked) + span, -[type="radio"]:checked + span { - position: relative; - padding-left: 35px; - cursor: pointer; - display: inline-block; - height: 25px; - line-height: 25px; - font-size: 1rem; - -webkit-transition: .28s ease; - transition: .28s ease; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -[type="radio"] + span:before, -[type="radio"] + span:after { - content: ''; - position: absolute; - left: 0; - top: 0; - margin: 4px; - width: 16px; - height: 16px; - z-index: 0; - -webkit-transition: .28s ease; - transition: .28s ease; -} - -/* Unchecked styles */ -[type="radio"]:not(:checked) + span:before, -[type="radio"]:not(:checked) + span:after, -[type="radio"]:checked + span:before, -[type="radio"]:checked + span:after, -[type="radio"].with-gap:checked + span:before, -[type="radio"].with-gap:checked + span:after { - border-radius: 50%; -} - -[type="radio"]:not(:checked) + span:before, -[type="radio"]:not(:checked) + span:after { - border: 2px solid #5a5a5a; -} - -[type="radio"]:not(:checked) + span:after { - -webkit-transform: scale(0); - transform: scale(0); -} - -/* Checked styles */ -[type="radio"]:checked + span:before { - border: 2px solid transparent; -} - -[type="radio"]:checked + span:after, -[type="radio"].with-gap:checked + span:before, -[type="radio"].with-gap:checked + span:after { - border: 2px solid #26a69a; -} - -[type="radio"]:checked + span:after, -[type="radio"].with-gap:checked + span:after { - background-color: #26a69a; -} - -[type="radio"]:checked + span:after { - -webkit-transform: scale(1.02); - transform: scale(1.02); -} - -/* Radio With gap */ -[type="radio"].with-gap:checked + span:after { - -webkit-transform: scale(0.5); - transform: scale(0.5); -} - -/* Focused styles */ -[type="radio"].tabbed:focus + span:before { - -webkit-box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); -} - -/* Disabled Radio With gap */ -[type="radio"].with-gap:disabled:checked + span:before { - border: 2px solid rgba(0, 0, 0, 0.42); -} - -[type="radio"].with-gap:disabled:checked + span:after { - border: none; - background-color: rgba(0, 0, 0, 0.42); -} - -/* Disabled style */ -[type="radio"]:disabled:not(:checked) + span:before, -[type="radio"]:disabled:checked + span:before { - background-color: transparent; - border-color: rgba(0, 0, 0, 0.42); -} - -[type="radio"]:disabled + span { - color: rgba(0, 0, 0, 0.42); -} - -[type="radio"]:disabled:not(:checked) + span:before { - border-color: rgba(0, 0, 0, 0.42); -} - -[type="radio"]:disabled:checked + span:after { - background-color: rgba(0, 0, 0, 0.42); - border-color: #949494; -} - -/* Checkboxes - ========================================================================== */ -/* Remove default checkbox */ -[type="checkbox"]:not(:checked), -[type="checkbox"]:checked { - position: absolute; - opacity: 0; - pointer-events: none; -} - -[type="checkbox"] { - /* checkbox aspect */ -} - -[type="checkbox"] + span:not(.lever) { - position: relative; - padding-left: 35px; - cursor: pointer; - display: inline-block; - height: 25px; - line-height: 25px; - font-size: 1rem; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -[type="checkbox"] + span:not(.lever):before, -[type="checkbox"]:not(.filled-in) + span:not(.lever):after { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 18px; - height: 18px; - z-index: 0; - border: 2px solid #5a5a5a; - border-radius: 1px; - margin-top: 3px; - -webkit-transition: .2s; - transition: .2s; -} - -[type="checkbox"]:not(.filled-in) + span:not(.lever):after { - border: 0; - -webkit-transform: scale(0); - transform: scale(0); -} - -[type="checkbox"]:not(:checked):disabled + span:not(.lever):before { - border: none; - background-color: rgba(0, 0, 0, 0.42); -} - -[type="checkbox"].tabbed:focus + span:not(.lever):after { - -webkit-transform: scale(1); - transform: scale(1); - border: 0; - border-radius: 50%; - -webkit-box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); - background-color: rgba(0, 0, 0, 0.1); -} - -[type="checkbox"]:checked + span:not(.lever):before { - top: -4px; - left: -5px; - width: 12px; - height: 22px; - border-top: 2px solid transparent; - border-left: 2px solid transparent; - border-right: 2px solid #26a69a; - border-bottom: 2px solid #26a69a; - -webkit-transform: rotate(40deg); - transform: rotate(40deg); - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-transform-origin: 100% 100%; - transform-origin: 100% 100%; -} - -[type="checkbox"]:checked:disabled + span:before { - border-right: 2px solid rgba(0, 0, 0, 0.42); - border-bottom: 2px solid rgba(0, 0, 0, 0.42); -} - -/* Indeterminate checkbox */ -[type="checkbox"]:indeterminate + span:not(.lever):before { - top: -11px; - left: -12px; - width: 10px; - height: 22px; - border-top: none; - border-left: none; - border-right: 2px solid #26a69a; - border-bottom: none; - -webkit-transform: rotate(90deg); - transform: rotate(90deg); - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-transform-origin: 100% 100%; - transform-origin: 100% 100%; -} - -[type="checkbox"]:indeterminate:disabled + span:not(.lever):before { - border-right: 2px solid rgba(0, 0, 0, 0.42); - background-color: transparent; -} - -[type="checkbox"].filled-in + span:not(.lever):after { - border-radius: 2px; -} - -[type="checkbox"].filled-in + span:not(.lever):before, -[type="checkbox"].filled-in + span:not(.lever):after { - content: ''; - left: 0; - position: absolute; - /* .1s delay is for check animation */ - -webkit-transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; - transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; - z-index: 1; -} - -[type="checkbox"].filled-in:not(:checked) + span:not(.lever):before { - width: 0; - height: 0; - border: 3px solid transparent; - left: 6px; - top: 10px; - -webkit-transform: rotateZ(37deg); - transform: rotateZ(37deg); - -webkit-transform-origin: 100% 100%; - transform-origin: 100% 100%; -} - -[type="checkbox"].filled-in:not(:checked) + span:not(.lever):after { - height: 20px; - width: 20px; - background-color: transparent; - border: 2px solid #5a5a5a; - top: 0px; - z-index: 0; -} - -[type="checkbox"].filled-in:checked + span:not(.lever):before { - top: 0; - left: 1px; - width: 8px; - height: 13px; - border-top: 2px solid transparent; - border-left: 2px solid transparent; - border-right: 2px solid #fff; - border-bottom: 2px solid #fff; - -webkit-transform: rotateZ(37deg); - transform: rotateZ(37deg); - -webkit-transform-origin: 100% 100%; - transform-origin: 100% 100%; -} - -[type="checkbox"].filled-in:checked + span:not(.lever):after { - top: 0; - width: 20px; - height: 20px; - border: 2px solid #26a69a; - background-color: #26a69a; - z-index: 0; -} - -[type="checkbox"].filled-in.tabbed:focus + span:not(.lever):after { - border-radius: 2px; - border-color: #5a5a5a; - background-color: rgba(0, 0, 0, 0.1); -} - -[type="checkbox"].filled-in.tabbed:checked:focus + span:not(.lever):after { - border-radius: 2px; - background-color: #26a69a; - border-color: #26a69a; -} - -[type="checkbox"].filled-in:disabled:not(:checked) + span:not(.lever):before { - background-color: transparent; - border: 2px solid transparent; -} - -[type="checkbox"].filled-in:disabled:not(:checked) + span:not(.lever):after { - border-color: transparent; - background-color: #949494; -} - -[type="checkbox"].filled-in:disabled:checked + span:not(.lever):before { - background-color: transparent; -} - -[type="checkbox"].filled-in:disabled:checked + span:not(.lever):after { - background-color: #949494; - border-color: #949494; -} - -/* Switch - ========================================================================== */ -.switch, -.switch * { - -webkit-tap-highlight-color: transparent; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.switch label { - cursor: pointer; -} - -.switch label input[type=checkbox] { - opacity: 0; - width: 0; - height: 0; -} - -.switch label input[type=checkbox]:checked + .lever { - background-color: #84c7c1; -} - -.switch label input[type=checkbox]:checked + .lever:before, .switch label input[type=checkbox]:checked + .lever:after { - left: 18px; -} - -.switch label input[type=checkbox]:checked + .lever:after { - background-color: #26a69a; -} - -.switch label .lever { - content: ""; - display: inline-block; - position: relative; - width: 36px; - height: 14px; - background-color: rgba(0, 0, 0, 0.38); - border-radius: 15px; - margin-right: 10px; - -webkit-transition: background 0.3s ease; - transition: background 0.3s ease; - vertical-align: middle; - margin: 0 16px; -} - -.switch label .lever:before, .switch label .lever:after { - content: ""; - position: absolute; - display: inline-block; - width: 20px; - height: 20px; - border-radius: 50%; - left: 0; - top: -3px; - -webkit-transition: left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease; - transition: left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease; - transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease; - transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease; -} - -.switch label .lever:before { - background-color: rgba(38, 166, 154, 0.15); -} - -.switch label .lever:after { - background-color: #F1F1F1; - -webkit-box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12); - box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12); -} - -input[type=checkbox]:checked:not(:disabled) ~ .lever:active::before, -input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before { - -webkit-transform: scale(2.4); - transform: scale(2.4); - background-color: rgba(38, 166, 154, 0.15); -} - -input[type=checkbox]:not(:disabled) ~ .lever:active:before, -input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before { - -webkit-transform: scale(2.4); - transform: scale(2.4); - background-color: rgba(0, 0, 0, 0.08); -} - -.switch input[type=checkbox][disabled] + .lever { - cursor: default; - background-color: rgba(0, 0, 0, 0.12); -} - -.switch label input[type=checkbox][disabled] + .lever:after, -.switch label input[type=checkbox][disabled]:checked + .lever:after { - background-color: #949494; -} - -/* Select Field - ========================================================================== */ -select { - display: none; -} - -select.browser-default { - display: block; -} - -select { - background-color: rgba(255, 255, 255, 0.9); - width: 100%; - padding: 5px; - border: 1px solid #f2f2f2; - border-radius: 2px; - height: 3rem; -} - -.select-label { - position: absolute; -} - -.select-wrapper { - position: relative; -} - -.select-wrapper.valid + label, -.select-wrapper.invalid + label { - width: 100%; - pointer-events: none; -} - -.select-wrapper input.select-dropdown { - position: relative; - cursor: pointer; - background-color: transparent; - border: none; - border-bottom: 1px solid #9e9e9e; - outline: none; - height: 3rem; - line-height: 3rem; - width: 100%; - font-size: 16px; - margin: 0 0 8px 0; - padding: 0; - display: block; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - z-index: 1; -} - -.select-wrapper input.select-dropdown:focus { - border-bottom: 1px solid #26a69a; -} - -.select-wrapper .caret { - position: absolute; - right: 0; - top: 0; - bottom: 0; - margin: auto 0; - z-index: 0; - fill: rgba(0, 0, 0, 0.87); -} - -.select-wrapper + label { - position: absolute; - top: -26px; - font-size: 0.8rem; -} - -select:disabled { - color: rgba(0, 0, 0, 0.42); -} - -.select-wrapper.disabled + label { - color: rgba(0, 0, 0, 0.42); -} - -.select-wrapper.disabled .caret { - fill: rgba(0, 0, 0, 0.42); -} - -.select-wrapper input.select-dropdown:disabled { - color: rgba(0, 0, 0, 0.42); - cursor: default; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.select-wrapper i { - color: rgba(0, 0, 0, 0.3); -} - -.select-dropdown li.disabled, -.select-dropdown li.disabled > span, -.select-dropdown li.optgroup { - color: rgba(0, 0, 0, 0.3); - background-color: transparent; -} - -body.keyboard-focused .select-dropdown.dropdown-content li:focus { - background-color: rgba(0, 0, 0, 0.08); -} - -.select-dropdown.dropdown-content li:hover { - background-color: rgba(0, 0, 0, 0.08); -} - -.select-dropdown.dropdown-content li.selected { - background-color: rgba(0, 0, 0, 0.03); -} - -.prefix ~ .select-wrapper { - margin-left: 3rem; - width: 92%; - width: calc(100% - 3rem); -} - -.prefix ~ label { - margin-left: 3rem; -} - -.select-dropdown li img { - height: 40px; - width: 40px; - margin: 5px 15px; - float: right; -} - -.select-dropdown li.optgroup { - border-top: 1px solid #eee; -} - -.select-dropdown li.optgroup.selected > span { - color: rgba(0, 0, 0, 0.7); -} - -.select-dropdown li.optgroup > span { - color: rgba(0, 0, 0, 0.4); -} - -.select-dropdown li.optgroup ~ li.optgroup-option { - padding-left: 1rem; -} - -/* File Input - ========================================================================== */ -.file-field { - position: relative; -} - -.file-field .file-path-wrapper { - overflow: hidden; - padding-left: 10px; -} - -.file-field input.file-path { - width: 100%; -} - -.file-field .btn, .file-field .btn-large, .file-field .btn-small { - float: left; - height: 3rem; - line-height: 3rem; -} - -.file-field span { - cursor: pointer; -} - -.file-field input[type=file] { - position: absolute; - top: 0; - right: 0; - left: 0; - bottom: 0; - width: 100%; - margin: 0; - padding: 0; - font-size: 20px; - cursor: pointer; - opacity: 0; - filter: alpha(opacity=0); -} - -.file-field input[type=file]::-webkit-file-upload-button { - display: none; -} - -/* Range - ========================================================================== */ -.range-field { - position: relative; -} - -input[type=range], -input[type=range] + .thumb { - cursor: pointer; -} - -input[type=range] { - position: relative; - background-color: transparent; - border: none; - outline: none; - width: 100%; - margin: 15px 0; - padding: 0; -} - -input[type=range]:focus { - outline: none; -} - -input[type=range] + .thumb { - position: absolute; - top: 10px; - left: 0; - border: none; - height: 0; - width: 0; - border-radius: 50%; - background-color: #26a69a; - margin-left: 7px; - -webkit-transform-origin: 50% 50%; - transform-origin: 50% 50%; - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); -} - -input[type=range] + .thumb .value { - display: block; - width: 30px; - text-align: center; - color: #26a69a; - font-size: 0; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); -} - -input[type=range] + .thumb.active { - border-radius: 50% 50% 50% 0; -} - -input[type=range] + .thumb.active .value { - color: #fff; - margin-left: -1px; - margin-top: 8px; - font-size: 10px; -} - -input[type=range] { - -webkit-appearance: none; -} - -input[type=range]::-webkit-slider-runnable-track { - height: 3px; - background: #c2c0c2; - border: none; -} - -input[type=range]::-webkit-slider-thumb { - border: none; - height: 14px; - width: 14px; - border-radius: 50%; - background: #26a69a; - -webkit-transition: -webkit-box-shadow .3s; - transition: -webkit-box-shadow .3s; - transition: box-shadow .3s; - transition: box-shadow .3s, -webkit-box-shadow .3s; - -webkit-appearance: none; - background-color: #26a69a; - -webkit-transform-origin: 50% 50%; - transform-origin: 50% 50%; - margin: -5px 0 0 0; -} - -.keyboard-focused input[type=range]:focus:not(.active)::-webkit-slider-thumb { - -webkit-box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26); - box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26); -} - -input[type=range] { - /* fix for FF unable to apply focus style bug */ - border: 1px solid white; - /*required for proper track sizing in FF*/ -} - -input[type=range]::-moz-range-track { - height: 3px; - background: #c2c0c2; - border: none; -} - -input[type=range]::-moz-focus-inner { - border: 0; -} - -input[type=range]::-moz-range-thumb { - border: none; - height: 14px; - width: 14px; - border-radius: 50%; - background: #26a69a; - -webkit-transition: -webkit-box-shadow .3s; - transition: -webkit-box-shadow .3s; - transition: box-shadow .3s; - transition: box-shadow .3s, -webkit-box-shadow .3s; - margin-top: -5px; -} - -input[type=range]:-moz-focusring { - outline: 1px solid #fff; - outline-offset: -1px; -} - -.keyboard-focused input[type=range]:focus:not(.active)::-moz-range-thumb { - box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26); -} - -input[type=range]::-ms-track { - height: 3px; - background: transparent; - border-color: transparent; - border-width: 6px 0; - /*remove default tick marks*/ - color: transparent; -} - -input[type=range]::-ms-fill-lower { - background: #777; -} - -input[type=range]::-ms-fill-upper { - background: #ddd; -} - -input[type=range]::-ms-thumb { - border: none; - height: 14px; - width: 14px; - border-radius: 50%; - background: #26a69a; - -webkit-transition: -webkit-box-shadow .3s; - transition: -webkit-box-shadow .3s; - transition: box-shadow .3s; - transition: box-shadow .3s, -webkit-box-shadow .3s; -} - -.keyboard-focused input[type=range]:focus:not(.active)::-ms-thumb { - box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26); -} - -/*************** - Nav List -***************/ -.table-of-contents.fixed { - position: fixed; -} - -.table-of-contents li { - padding: 2px 0; -} - -.table-of-contents a { - display: inline-block; - font-weight: 300; - color: #757575; - padding-left: 16px; - height: 1.5rem; - line-height: 1.5rem; - letter-spacing: .4; - display: inline-block; -} - -.table-of-contents a:hover { - color: #a8a8a8; - padding-left: 15px; - border-left: 1px solid #ee6e73; -} - -.table-of-contents a.active { - font-weight: 500; - padding-left: 14px; - border-left: 2px solid #ee6e73; -} - -.sidenav { - position: fixed; - width: 300px; - left: 0; - top: 0; - margin: 0; - -webkit-transform: translateX(-100%); - transform: translateX(-100%); - height: 100%; - height: calc(100% + 60px); - height: -moz-calc(100%); - padding-bottom: 60px; - background-color: #fff; - z-index: 999; - overflow-y: auto; - will-change: transform; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-transform: translateX(-105%); - transform: translateX(-105%); -} - -.sidenav.right-aligned { - right: 0; - -webkit-transform: translateX(105%); - transform: translateX(105%); - left: auto; - -webkit-transform: translateX(100%); - transform: translateX(100%); -} - -.sidenav .collapsible { - margin: 0; -} - -.sidenav li { - float: none; - line-height: 48px; -} - -.sidenav li.active { - background-color: rgba(0, 0, 0, 0.05); -} - -.sidenav li > a { - color: rgba(0, 0, 0, 0.87); - display: block; - font-size: 14px; - font-weight: 500; - height: 48px; - line-height: 48px; - padding: 0 32px; -} - -.sidenav li > a:hover { - background-color: rgba(0, 0, 0, 0.05); -} - -.sidenav li > a.btn, .sidenav li > a.btn-large, .sidenav li > a.btn-small, .sidenav li > a.btn-large, .sidenav li > a.btn-flat, .sidenav li > a.btn-floating { - margin: 10px 15px; -} - -.sidenav li > a.btn, .sidenav li > a.btn-large, .sidenav li > a.btn-small, .sidenav li > a.btn-large, .sidenav li > a.btn-floating { - color: #fff; -} - -.sidenav li > a.btn-flat { - color: #343434; -} - -.sidenav li > a.btn:hover, .sidenav li > a.btn-large:hover, .sidenav li > a.btn-small:hover, .sidenav li > a.btn-large:hover { - background-color: #2bbbad; -} - -.sidenav li > a.btn-floating:hover { - background-color: #26a69a; -} - -.sidenav li > a > i, -.sidenav li > a > [class^="mdi-"], .sidenav li > a li > a > [class*="mdi-"], -.sidenav li > a > i.material-icons { - float: left; - height: 48px; - line-height: 48px; - margin: 0 32px 0 0; - width: 24px; - color: rgba(0, 0, 0, 0.54); -} - -.sidenav .divider { - margin: 8px 0 0 0; -} - -.sidenav .subheader { - cursor: initial; - pointer-events: none; - color: rgba(0, 0, 0, 0.54); - font-size: 14px; - font-weight: 500; - line-height: 48px; -} - -.sidenav .subheader:hover { - background-color: transparent; -} - -.sidenav .user-view { - position: relative; - padding: 32px 32px 0; - margin-bottom: 8px; -} - -.sidenav .user-view > a { - height: auto; - padding: 0; -} - -.sidenav .user-view > a:hover { - background-color: transparent; -} - -.sidenav .user-view .background { - overflow: hidden; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: -1; -} - -.sidenav .user-view .circle, .sidenav .user-view .name, .sidenav .user-view .email { - display: block; -} - -.sidenav .user-view .circle { - height: 64px; - width: 64px; -} - -.sidenav .user-view .name, -.sidenav .user-view .email { - font-size: 14px; - line-height: 24px; -} - -.sidenav .user-view .name { - margin-top: 16px; - font-weight: 500; -} - -.sidenav .user-view .email { - padding-bottom: 16px; - font-weight: 400; -} - -.drag-target { - height: 100%; - width: 10px; - position: fixed; - top: 0; - z-index: 998; -} - -.drag-target.right-aligned { - right: 0; -} - -.sidenav.sidenav-fixed { - left: 0; - -webkit-transform: translateX(0); - transform: translateX(0); - position: fixed; -} - -.sidenav.sidenav-fixed.right-aligned { - right: 0; - left: auto; -} - -@media only screen and (max-width: 992px) { - .sidenav.sidenav-fixed { - -webkit-transform: translateX(-105%); - transform: translateX(-105%); - } - .sidenav.sidenav-fixed.right-aligned { - -webkit-transform: translateX(105%); - transform: translateX(105%); - } - .sidenav > a { - padding: 0 16px; - } - .sidenav .user-view { - padding: 16px 16px 0; - } -} - -.sidenav .collapsible-body > ul:not(.collapsible) > li.active, -.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active { - background-color: #ee6e73; -} - -.sidenav .collapsible-body > ul:not(.collapsible) > li.active a, -.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active a { - color: #fff; -} - -.sidenav .collapsible-body { - padding: 0; -} - -.sidenav-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - opacity: 0; - height: 120vh; - background-color: rgba(0, 0, 0, 0.5); - z-index: 997; - display: none; -} - -/* - @license - Copyright (c) 2014 The Polymer Project Authors. All rights reserved. - This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt - The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt - The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt - Code distributed by Google as part of the polymer project is also - subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt - */ -/**************************/ -/* STYLES FOR THE SPINNER */ -/**************************/ -/* - * Constants: - * STROKEWIDTH = 3px - * ARCSIZE = 270 degrees (amount of circle the arc takes up) - * ARCTIME = 1333ms (time it takes to expand and contract arc) - * ARCSTARTROT = 216 degrees (how much the start location of the arc - * should rotate each time, 216 gives us a - * 5 pointed star shape (it's 360/5 * 3). - * For a 7 pointed star, we might do - * 360/7 * 3 = 154.286) - * CONTAINERWIDTH = 28px - * SHRINK_TIME = 400ms - */ -.preloader-wrapper { - display: inline-block; - position: relative; - width: 50px; - height: 50px; -} - -.preloader-wrapper.small { - width: 36px; - height: 36px; -} - -.preloader-wrapper.big { - width: 64px; - height: 64px; -} - -.preloader-wrapper.active { - /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */ - -webkit-animation: container-rotate 1568ms linear infinite; - animation: container-rotate 1568ms linear infinite; -} - -@-webkit-keyframes container-rotate { - to { - -webkit-transform: rotate(360deg); - } -} - -@keyframes container-rotate { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -.spinner-layer { - position: absolute; - width: 100%; - height: 100%; - opacity: 0; - border-color: #26a69a; -} - -.spinner-blue, -.spinner-blue-only { - border-color: #4285f4; -} - -.spinner-red, -.spinner-red-only { - border-color: #db4437; -} - -.spinner-yellow, -.spinner-yellow-only { - border-color: #f4b400; -} - -.spinner-green, -.spinner-green-only { - border-color: #0f9d58; -} - -/** - * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee): - * - * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't - * guarantee that the animation will start _exactly_ after that value. So we avoid using - * animation-delay and instead set custom keyframes for each color (as redundant as it - * seems). - * - * We write out each animation in full (instead of separating animation-name, - * animation-duration, etc.) because under the polyfill, Safari does not recognize those - * specific properties properly, treats them as -webkit-animation, and overrides the - * other animation rules. See https://github.com/Polymer/platform/issues/53. - */ -.active .spinner-layer.spinner-blue { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; -} - -.active .spinner-layer.spinner-red { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; -} - -.active .spinner-layer.spinner-yellow { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; -} - -.active .spinner-layer.spinner-green { - /* durations: 4 * ARCTIME */ - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; -} - -.active .spinner-layer, -.active .spinner-layer.spinner-blue-only, -.active .spinner-layer.spinner-red-only, -.active .spinner-layer.spinner-yellow-only, -.active .spinner-layer.spinner-green-only { - /* durations: 4 * ARCTIME */ - opacity: 1; - -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; -} - -@-webkit-keyframes fill-unfill-rotate { - 12.5% { - -webkit-transform: rotate(135deg); - } - /* 0.5 * ARCSIZE */ - 25% { - -webkit-transform: rotate(270deg); - } - /* 1 * ARCSIZE */ - 37.5% { - -webkit-transform: rotate(405deg); - } - /* 1.5 * ARCSIZE */ - 50% { - -webkit-transform: rotate(540deg); - } - /* 2 * ARCSIZE */ - 62.5% { - -webkit-transform: rotate(675deg); - } - /* 2.5 * ARCSIZE */ - 75% { - -webkit-transform: rotate(810deg); - } - /* 3 * ARCSIZE */ - 87.5% { - -webkit-transform: rotate(945deg); - } - /* 3.5 * ARCSIZE */ - to { - -webkit-transform: rotate(1080deg); - } - /* 4 * ARCSIZE */ -} - -@keyframes fill-unfill-rotate { - 12.5% { - -webkit-transform: rotate(135deg); - transform: rotate(135deg); - } - /* 0.5 * ARCSIZE */ - 25% { - -webkit-transform: rotate(270deg); - transform: rotate(270deg); - } - /* 1 * ARCSIZE */ - 37.5% { - -webkit-transform: rotate(405deg); - transform: rotate(405deg); - } - /* 1.5 * ARCSIZE */ - 50% { - -webkit-transform: rotate(540deg); - transform: rotate(540deg); - } - /* 2 * ARCSIZE */ - 62.5% { - -webkit-transform: rotate(675deg); - transform: rotate(675deg); - } - /* 2.5 * ARCSIZE */ - 75% { - -webkit-transform: rotate(810deg); - transform: rotate(810deg); - } - /* 3 * ARCSIZE */ - 87.5% { - -webkit-transform: rotate(945deg); - transform: rotate(945deg); - } - /* 3.5 * ARCSIZE */ - to { - -webkit-transform: rotate(1080deg); - transform: rotate(1080deg); - } - /* 4 * ARCSIZE */ -} - -@-webkit-keyframes blue-fade-in-out { - from { - opacity: 1; - } - 25% { - opacity: 1; - } - 26% { - opacity: 0; - } - 89% { - opacity: 0; - } - 90% { - opacity: 1; - } - 100% { - opacity: 1; - } -} - -@keyframes blue-fade-in-out { - from { - opacity: 1; - } - 25% { - opacity: 1; - } - 26% { - opacity: 0; - } - 89% { - opacity: 0; - } - 90% { - opacity: 1; - } - 100% { - opacity: 1; - } -} - -@-webkit-keyframes red-fade-in-out { - from { - opacity: 0; - } - 15% { - opacity: 0; - } - 25% { - opacity: 1; - } - 50% { - opacity: 1; - } - 51% { - opacity: 0; - } -} - -@keyframes red-fade-in-out { - from { - opacity: 0; - } - 15% { - opacity: 0; - } - 25% { - opacity: 1; - } - 50% { - opacity: 1; - } - 51% { - opacity: 0; - } -} - -@-webkit-keyframes yellow-fade-in-out { - from { - opacity: 0; - } - 40% { - opacity: 0; - } - 50% { - opacity: 1; - } - 75% { - opacity: 1; - } - 76% { - opacity: 0; - } -} - -@keyframes yellow-fade-in-out { - from { - opacity: 0; - } - 40% { - opacity: 0; - } - 50% { - opacity: 1; - } - 75% { - opacity: 1; - } - 76% { - opacity: 0; - } -} - -@-webkit-keyframes green-fade-in-out { - from { - opacity: 0; - } - 65% { - opacity: 0; - } - 75% { - opacity: 1; - } - 90% { - opacity: 1; - } - 100% { - opacity: 0; - } -} - -@keyframes green-fade-in-out { - from { - opacity: 0; - } - 65% { - opacity: 0; - } - 75% { - opacity: 1; - } - 90% { - opacity: 1; - } - 100% { - opacity: 0; - } -} - -/** - * Patch the gap that appear between the two adjacent div.circle-clipper while the - * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11). - */ -.gap-patch { - position: absolute; - top: 0; - left: 45%; - width: 10%; - height: 100%; - overflow: hidden; - border-color: inherit; -} - -.gap-patch .circle { - width: 1000%; - left: -450%; -} - -.circle-clipper { - display: inline-block; - position: relative; - width: 50%; - height: 100%; - overflow: hidden; - border-color: inherit; -} - -.circle-clipper .circle { - width: 200%; - height: 100%; - border-width: 3px; - /* STROKEWIDTH */ - border-style: solid; - border-color: inherit; - border-bottom-color: transparent !important; - border-radius: 50%; - -webkit-animation: none; - animation: none; - position: absolute; - top: 0; - right: 0; - bottom: 0; -} - -.circle-clipper.left .circle { - left: 0; - border-right-color: transparent !important; - -webkit-transform: rotate(129deg); - transform: rotate(129deg); -} - -.circle-clipper.right .circle { - left: -100%; - border-left-color: transparent !important; - -webkit-transform: rotate(-129deg); - transform: rotate(-129deg); -} - -.active .circle-clipper.left .circle { - /* duration: ARCTIME */ - -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; -} - -.active .circle-clipper.right .circle { - /* duration: ARCTIME */ - -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; - animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; -} - -@-webkit-keyframes left-spin { - from { - -webkit-transform: rotate(130deg); - } - 50% { - -webkit-transform: rotate(-5deg); - } - to { - -webkit-transform: rotate(130deg); - } -} - -@keyframes left-spin { - from { - -webkit-transform: rotate(130deg); - transform: rotate(130deg); - } - 50% { - -webkit-transform: rotate(-5deg); - transform: rotate(-5deg); - } - to { - -webkit-transform: rotate(130deg); - transform: rotate(130deg); - } -} - -@-webkit-keyframes right-spin { - from { - -webkit-transform: rotate(-130deg); - } - 50% { - -webkit-transform: rotate(5deg); - } - to { - -webkit-transform: rotate(-130deg); - } -} - -@keyframes right-spin { - from { - -webkit-transform: rotate(-130deg); - transform: rotate(-130deg); - } - 50% { - -webkit-transform: rotate(5deg); - transform: rotate(5deg); - } - to { - -webkit-transform: rotate(-130deg); - transform: rotate(-130deg); - } -} - -#spinnerContainer.cooldown { - /* duration: SHRINK_TIME */ - -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); - animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); -} - -@-webkit-keyframes fade-out { - from { - opacity: 1; - } - to { - opacity: 0; - } -} - -@keyframes fade-out { - from { - opacity: 1; - } - to { - opacity: 0; - } -} - -.slider { - position: relative; - height: 400px; - width: 100%; -} - -.slider.fullscreen { - height: 100%; - width: 100%; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; -} - -.slider.fullscreen ul.slides { - height: 100%; -} - -.slider.fullscreen ul.indicators { - z-index: 2; - bottom: 30px; -} - -.slider .slides { - background-color: #9e9e9e; - margin: 0; - height: 400px; -} - -.slider .slides li { - opacity: 0; - position: absolute; - top: 0; - left: 0; - z-index: 1; - width: 100%; - height: inherit; - overflow: hidden; -} - -.slider .slides li img { - height: 100%; - width: 100%; - background-size: cover; - background-position: center; -} - -.slider .slides li .caption { - color: #fff; - position: absolute; - top: 15%; - left: 15%; - width: 70%; - opacity: 0; -} - -.slider .slides li .caption p { - color: #e0e0e0; -} - -.slider .slides li.active { - z-index: 2; -} - -.slider .indicators { - position: absolute; - text-align: center; - left: 0; - right: 0; - bottom: 0; - margin: 0; -} - -.slider .indicators .indicator-item { - display: inline-block; - position: relative; - cursor: pointer; - height: 16px; - width: 16px; - margin: 0 12px; - background-color: #e0e0e0; - -webkit-transition: background-color .3s; - transition: background-color .3s; - border-radius: 50%; -} - -.slider .indicators .indicator-item.active { - background-color: #4CAF50; -} - -.carousel { - overflow: hidden; - position: relative; - width: 100%; - height: 400px; - -webkit-perspective: 500px; - perspective: 500px; - -webkit-transform-style: preserve-3d; - transform-style: preserve-3d; - -webkit-transform-origin: 0% 50%; - transform-origin: 0% 50%; -} - -.carousel.carousel-slider { - top: 0; - left: 0; -} - -.carousel.carousel-slider .carousel-fixed-item { - position: absolute; - left: 0; - right: 0; - bottom: 20px; - z-index: 1; -} - -.carousel.carousel-slider .carousel-fixed-item.with-indicators { - bottom: 68px; -} - -.carousel.carousel-slider .carousel-item { - width: 100%; - height: 100%; - min-height: 400px; - position: absolute; - top: 0; - left: 0; -} - -.carousel.carousel-slider .carousel-item h2 { - font-size: 24px; - font-weight: 500; - line-height: 32px; -} - -.carousel.carousel-slider .carousel-item p { - font-size: 15px; -} - -.carousel .carousel-item { - visibility: hidden; - width: 200px; - height: 200px; - position: absolute; - top: 0; - left: 0; -} - -.carousel .carousel-item > img { - width: 100%; -} - -.carousel .indicators { - position: absolute; - text-align: center; - left: 0; - right: 0; - bottom: 0; - margin: 0; -} - -.carousel .indicators .indicator-item { - display: inline-block; - position: relative; - cursor: pointer; - height: 8px; - width: 8px; - margin: 24px 4px; - background-color: rgba(255, 255, 255, 0.5); - -webkit-transition: background-color .3s; - transition: background-color .3s; - border-radius: 50%; -} - -.carousel .indicators .indicator-item.active { - background-color: #fff; -} - -.carousel.scrolling .carousel-item .materialboxed, -.carousel .carousel-item:not(.active) .materialboxed { - pointer-events: none; -} - -.tap-target-wrapper { - width: 800px; - height: 800px; - position: fixed; - z-index: 1000; - visibility: hidden; - -webkit-transition: visibility 0s .3s; - transition: visibility 0s .3s; -} - -.tap-target-wrapper.open { - visibility: visible; - -webkit-transition: visibility 0s; - transition: visibility 0s; -} - -.tap-target-wrapper.open .tap-target { - -webkit-transform: scale(1); - transform: scale(1); - opacity: .95; - -webkit-transition: opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); - transition: opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); - transition: transform 0.3s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1); - transition: transform 0.3s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); -} - -.tap-target-wrapper.open .tap-target-wave::before { - -webkit-transform: scale(1); - transform: scale(1); -} - -.tap-target-wrapper.open .tap-target-wave::after { - visibility: visible; - -webkit-animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; - animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; - -webkit-transition: opacity .3s, visibility 0s 1s, -webkit-transform .3s; - transition: opacity .3s, visibility 0s 1s, -webkit-transform .3s; - transition: opacity .3s, transform .3s, visibility 0s 1s; - transition: opacity .3s, transform .3s, visibility 0s 1s, -webkit-transform .3s; -} - -.tap-target { - position: absolute; - font-size: 1rem; - border-radius: 50%; - background-color: #ee6e73; - -webkit-box-shadow: 0 20px 20px 0 rgba(0, 0, 0, 0.14), 0 10px 50px 0 rgba(0, 0, 0, 0.12), 0 30px 10px -20px rgba(0, 0, 0, 0.2); - box-shadow: 0 20px 20px 0 rgba(0, 0, 0, 0.14), 0 10px 50px 0 rgba(0, 0, 0, 0.12), 0 30px 10px -20px rgba(0, 0, 0, 0.2); - width: 100%; - height: 100%; - opacity: 0; - -webkit-transform: scale(0); - transform: scale(0); - -webkit-transition: opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); - transition: opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); - transition: transform 0.3s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1); - transition: transform 0.3s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); -} - -.tap-target-content { - position: relative; - display: table-cell; -} - -.tap-target-wave { - position: absolute; - border-radius: 50%; - z-index: 10001; -} - -.tap-target-wave::before, .tap-target-wave::after { - content: ''; - display: block; - position: absolute; - width: 100%; - height: 100%; - border-radius: 50%; - background-color: #ffffff; -} - -.tap-target-wave::before { - -webkit-transform: scale(0); - transform: scale(0); - -webkit-transition: -webkit-transform .3s; - transition: -webkit-transform .3s; - transition: transform .3s; - transition: transform .3s, -webkit-transform .3s; -} - -.tap-target-wave::after { - visibility: hidden; - -webkit-transition: opacity .3s, visibility 0s, -webkit-transform .3s; - transition: opacity .3s, visibility 0s, -webkit-transform .3s; - transition: opacity .3s, transform .3s, visibility 0s; - transition: opacity .3s, transform .3s, visibility 0s, -webkit-transform .3s; - z-index: -1; -} - -.tap-target-origin { - top: 50%; - left: 50%; - -webkit-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); - z-index: 10002; - position: absolute !important; -} - -.tap-target-origin:not(.btn):not(.btn-large):not(.btn-small), .tap-target-origin:not(.btn):not(.btn-large):not(.btn-small):hover { - background: none; -} - -@media only screen and (max-width: 600px) { - .tap-target, .tap-target-wrapper { - width: 600px; - height: 600px; - } -} - -.pulse { - overflow: visible; - position: relative; -} - -.pulse::before { - content: ''; - display: block; - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - background-color: inherit; - border-radius: inherit; - -webkit-transition: opacity .3s, -webkit-transform .3s; - transition: opacity .3s, -webkit-transform .3s; - transition: opacity .3s, transform .3s; - transition: opacity .3s, transform .3s, -webkit-transform .3s; - -webkit-animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; - animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; - z-index: -1; -} - -@-webkit-keyframes pulse-animation { - 0% { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); - } - 50% { - opacity: 0; - -webkit-transform: scale(1.5); - transform: scale(1.5); - } - 100% { - opacity: 0; - -webkit-transform: scale(1.5); - transform: scale(1.5); - } -} - -@keyframes pulse-animation { - 0% { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); - } - 50% { - opacity: 0; - -webkit-transform: scale(1.5); - transform: scale(1.5); - } - 100% { - opacity: 0; - -webkit-transform: scale(1.5); - transform: scale(1.5); - } -} - -/* Modal */ -.datepicker-modal { - max-width: 325px; - min-width: 300px; - max-height: none; -} - -.datepicker-container.modal-content { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - padding: 0; -} - -.datepicker-controls { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - width: 280px; - margin: 0 auto; -} - -.datepicker-controls .selects-container { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; -} - -.datepicker-controls .select-wrapper input { - border-bottom: none; - text-align: center; - margin: 0; -} - -.datepicker-controls .select-wrapper input:focus { - border-bottom: none; -} - -.datepicker-controls .select-wrapper .caret { - display: none; -} - -.datepicker-controls .select-year input { - width: 50px; -} - -.datepicker-controls .select-month input { - width: 70px; -} - -.month-prev, .month-next { - margin-top: 4px; - cursor: pointer; - background-color: transparent; - border: none; -} - -/* Date Display */ -.datepicker-date-display { - -webkit-box-flex: 1; - -webkit-flex: 1 auto; - -ms-flex: 1 auto; - flex: 1 auto; - background-color: #26a69a; - color: #fff; - padding: 20px 22px; - font-weight: 500; -} - -.datepicker-date-display .year-text { - display: block; - font-size: 1.5rem; - line-height: 25px; - color: rgba(255, 255, 255, 0.7); -} - -.datepicker-date-display .date-text { - display: block; - font-size: 2.8rem; - line-height: 47px; - font-weight: 500; -} - -/* Calendar */ -.datepicker-calendar-container { - -webkit-box-flex: 2.5; - -webkit-flex: 2.5 auto; - -ms-flex: 2.5 auto; - flex: 2.5 auto; -} - -.datepicker-table { - width: 280px; - font-size: 1rem; - margin: 0 auto; -} - -.datepicker-table thead { - border-bottom: none; -} - -.datepicker-table th { - padding: 10px 5px; - text-align: center; -} - -.datepicker-table tr { - border: none; -} - -.datepicker-table abbr { - text-decoration: none; - color: #999; -} - -.datepicker-table td { - border-radius: 50%; - padding: 0; -} - -.datepicker-table td.is-today { - color: #26a69a; -} - -.datepicker-table td.is-selected { - background-color: #26a69a; - color: #fff; -} - -.datepicker-table td.is-outside-current-month, .datepicker-table td.is-disabled { - color: rgba(0, 0, 0, 0.3); - pointer-events: none; -} - -.datepicker-day-button { - background-color: transparent; - border: none; - line-height: 38px; - display: block; - width: 100%; - border-radius: 50%; - padding: 0 5px; - cursor: pointer; - color: inherit; -} - -.datepicker-day-button:focus { - background-color: rgba(43, 161, 150, 0.25); -} - -/* Footer */ -.datepicker-footer { - width: 280px; - margin: 0 auto; - padding-bottom: 5px; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; -} - -.datepicker-cancel, -.datepicker-clear, -.datepicker-today, -.datepicker-done { - color: #26a69a; - padding: 0 1rem; -} - -.datepicker-clear { - color: #F44336; -} - -/* Media Queries */ -@media only screen and (min-width: 601px) { - .datepicker-modal { - max-width: 625px; - } - .datepicker-container.modal-content { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - } - .datepicker-date-display { - -webkit-box-flex: 0; - -webkit-flex: 0 1 270px; - -ms-flex: 0 1 270px; - flex: 0 1 270px; - } - .datepicker-controls, - .datepicker-table, - .datepicker-footer { - width: 320px; - } - .datepicker-day-button { - line-height: 44px; - } -} - -/* Timepicker Containers */ -.timepicker-modal { - max-width: 325px; - max-height: none; -} - -.timepicker-container.modal-content { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - padding: 0; -} - -.text-primary { - color: white; -} - -/* Clock Digital Display */ -.timepicker-digital-display { - -webkit-box-flex: 1; - -webkit-flex: 1 auto; - -ms-flex: 1 auto; - flex: 1 auto; - background-color: #26a69a; - padding: 10px; - font-weight: 300; -} - -.timepicker-text-container { - font-size: 4rem; - font-weight: bold; - text-align: center; - color: rgba(255, 255, 255, 0.6); - font-weight: 400; - position: relative; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.timepicker-span-hours, -.timepicker-span-minutes, -.timepicker-span-am-pm div { - cursor: pointer; -} - -.timepicker-span-hours { - margin-right: 3px; -} - -.timepicker-span-minutes { - margin-left: 3px; -} - -.timepicker-display-am-pm { - font-size: 1.3rem; - position: absolute; - right: 1rem; - bottom: 1rem; - font-weight: 400; -} - -/* Analog Clock Display */ -.timepicker-analog-display { - -webkit-box-flex: 2.5; - -webkit-flex: 2.5 auto; - -ms-flex: 2.5 auto; - flex: 2.5 auto; -} - -.timepicker-plate { - background-color: #eee; - border-radius: 50%; - width: 270px; - height: 270px; - overflow: visible; - position: relative; - margin: auto; - margin-top: 25px; - margin-bottom: 5px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.timepicker-canvas, -.timepicker-dial { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; -} - -.timepicker-minutes { - visibility: hidden; -} - -.timepicker-tick { - border-radius: 50%; - color: rgba(0, 0, 0, 0.87); - line-height: 40px; - text-align: center; - width: 40px; - height: 40px; - position: absolute; - cursor: pointer; - font-size: 15px; -} - -.timepicker-tick.active, -.timepicker-tick:hover { - background-color: rgba(38, 166, 154, 0.25); -} - -.timepicker-dial { - -webkit-transition: opacity 350ms, -webkit-transform 350ms; - transition: opacity 350ms, -webkit-transform 350ms; - transition: transform 350ms, opacity 350ms; - transition: transform 350ms, opacity 350ms, -webkit-transform 350ms; -} - -.timepicker-dial-out { - opacity: 0; -} - -.timepicker-dial-out.timepicker-hours { - -webkit-transform: scale(1.1, 1.1); - transform: scale(1.1, 1.1); -} - -.timepicker-dial-out.timepicker-minutes { - -webkit-transform: scale(0.8, 0.8); - transform: scale(0.8, 0.8); -} - -.timepicker-canvas { - -webkit-transition: opacity 175ms; - transition: opacity 175ms; -} - -.timepicker-canvas line { - stroke: #26a69a; - stroke-width: 4; - stroke-linecap: round; -} - -.timepicker-canvas-out { - opacity: 0.25; -} - -.timepicker-canvas-bearing { - stroke: none; - fill: #26a69a; -} - -.timepicker-canvas-bg { - stroke: none; - fill: #26a69a; -} - -/* Footer */ -.timepicker-footer { - margin: 0 auto; - padding: 5px 1rem; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; -} - -.timepicker-clear { - color: #F44336; -} - -.timepicker-close { - color: #26a69a; -} - -.timepicker-clear, -.timepicker-close { - padding: 0 20px; -} - -/* Media Queries */ -@media only screen and (min-width: 601px) { - .timepicker-modal { - max-width: 600px; - } - .timepicker-container.modal-content { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - } - .timepicker-text-container { - top: 32%; - } - .timepicker-display-am-pm { - position: relative; - right: auto; - bottom: auto; - text-align: center; - margin-top: 1.2rem; - } -} diff --git a/web/css/materialize.min.css b/web/css/materialize.min.css deleted file mode 100644 index 74b1741..0000000 --- a/web/css/materialize.min.css +++ /dev/null @@ -1,13 +0,0 @@ -/*! - * Materialize v1.0.0 (http://materializecss.com) - * Copyright 2014-2017 Materialize - * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) - */ -.materialize-red{background-color:#e51c23 !important}.materialize-red-text{color:#e51c23 !important}.materialize-red.lighten-5{background-color:#fdeaeb !important}.materialize-red-text.text-lighten-5{color:#fdeaeb !important}.materialize-red.lighten-4{background-color:#f8c1c3 !important}.materialize-red-text.text-lighten-4{color:#f8c1c3 !important}.materialize-red.lighten-3{background-color:#f3989b !important}.materialize-red-text.text-lighten-3{color:#f3989b !important}.materialize-red.lighten-2{background-color:#ee6e73 !important}.materialize-red-text.text-lighten-2{color:#ee6e73 !important}.materialize-red.lighten-1{background-color:#ea454b !important}.materialize-red-text.text-lighten-1{color:#ea454b !important}.materialize-red.darken-1{background-color:#d0181e !important}.materialize-red-text.text-darken-1{color:#d0181e !important}.materialize-red.darken-2{background-color:#b9151b !important}.materialize-red-text.text-darken-2{color:#b9151b !important}.materialize-red.darken-3{background-color:#a21318 !important}.materialize-red-text.text-darken-3{color:#a21318 !important}.materialize-red.darken-4{background-color:#8b1014 !important}.materialize-red-text.text-darken-4{color:#8b1014 !important}.red{background-color:#F44336 !important}.red-text{color:#F44336 !important}.red.lighten-5{background-color:#FFEBEE !important}.red-text.text-lighten-5{color:#FFEBEE !important}.red.lighten-4{background-color:#FFCDD2 !important}.red-text.text-lighten-4{color:#FFCDD2 !important}.red.lighten-3{background-color:#EF9A9A !important}.red-text.text-lighten-3{color:#EF9A9A !important}.red.lighten-2{background-color:#E57373 !important}.red-text.text-lighten-2{color:#E57373 !important}.red.lighten-1{background-color:#EF5350 !important}.red-text.text-lighten-1{color:#EF5350 !important}.red.darken-1{background-color:#E53935 !important}.red-text.text-darken-1{color:#E53935 !important}.red.darken-2{background-color:#D32F2F !important}.red-text.text-darken-2{color:#D32F2F !important}.red.darken-3{background-color:#C62828 !important}.red-text.text-darken-3{color:#C62828 !important}.red.darken-4{background-color:#B71C1C !important}.red-text.text-darken-4{color:#B71C1C !important}.red.accent-1{background-color:#FF8A80 !important}.red-text.text-accent-1{color:#FF8A80 !important}.red.accent-2{background-color:#FF5252 !important}.red-text.text-accent-2{color:#FF5252 !important}.red.accent-3{background-color:#FF1744 !important}.red-text.text-accent-3{color:#FF1744 !important}.red.accent-4{background-color:#D50000 !important}.red-text.text-accent-4{color:#D50000 !important}.pink{background-color:#e91e63 !important}.pink-text{color:#e91e63 !important}.pink.lighten-5{background-color:#fce4ec !important}.pink-text.text-lighten-5{color:#fce4ec !important}.pink.lighten-4{background-color:#f8bbd0 !important}.pink-text.text-lighten-4{color:#f8bbd0 !important}.pink.lighten-3{background-color:#f48fb1 !important}.pink-text.text-lighten-3{color:#f48fb1 !important}.pink.lighten-2{background-color:#f06292 !important}.pink-text.text-lighten-2{color:#f06292 !important}.pink.lighten-1{background-color:#ec407a !important}.pink-text.text-lighten-1{color:#ec407a !important}.pink.darken-1{background-color:#d81b60 !important}.pink-text.text-darken-1{color:#d81b60 !important}.pink.darken-2{background-color:#c2185b !important}.pink-text.text-darken-2{color:#c2185b !important}.pink.darken-3{background-color:#ad1457 !important}.pink-text.text-darken-3{color:#ad1457 !important}.pink.darken-4{background-color:#880e4f !important}.pink-text.text-darken-4{color:#880e4f !important}.pink.accent-1{background-color:#ff80ab !important}.pink-text.text-accent-1{color:#ff80ab !important}.pink.accent-2{background-color:#ff4081 !important}.pink-text.text-accent-2{color:#ff4081 !important}.pink.accent-3{background-color:#f50057 !important}.pink-text.text-accent-3{color:#f50057 !important}.pink.accent-4{background-color:#c51162 !important}.pink-text.text-accent-4{color:#c51162 !important}.purple{background-color:#9c27b0 !important}.purple-text{color:#9c27b0 !important}.purple.lighten-5{background-color:#f3e5f5 !important}.purple-text.text-lighten-5{color:#f3e5f5 !important}.purple.lighten-4{background-color:#e1bee7 !important}.purple-text.text-lighten-4{color:#e1bee7 !important}.purple.lighten-3{background-color:#ce93d8 !important}.purple-text.text-lighten-3{color:#ce93d8 !important}.purple.lighten-2{background-color:#ba68c8 !important}.purple-text.text-lighten-2{color:#ba68c8 !important}.purple.lighten-1{background-color:#ab47bc !important}.purple-text.text-lighten-1{color:#ab47bc !important}.purple.darken-1{background-color:#8e24aa !important}.purple-text.text-darken-1{color:#8e24aa !important}.purple.darken-2{background-color:#7b1fa2 !important}.purple-text.text-darken-2{color:#7b1fa2 !important}.purple.darken-3{background-color:#6a1b9a !important}.purple-text.text-darken-3{color:#6a1b9a !important}.purple.darken-4{background-color:#4a148c !important}.purple-text.text-darken-4{color:#4a148c !important}.purple.accent-1{background-color:#ea80fc !important}.purple-text.text-accent-1{color:#ea80fc !important}.purple.accent-2{background-color:#e040fb !important}.purple-text.text-accent-2{color:#e040fb !important}.purple.accent-3{background-color:#d500f9 !important}.purple-text.text-accent-3{color:#d500f9 !important}.purple.accent-4{background-color:#a0f !important}.purple-text.text-accent-4{color:#a0f !important}.deep-purple{background-color:#673ab7 !important}.deep-purple-text{color:#673ab7 !important}.deep-purple.lighten-5{background-color:#ede7f6 !important}.deep-purple-text.text-lighten-5{color:#ede7f6 !important}.deep-purple.lighten-4{background-color:#d1c4e9 !important}.deep-purple-text.text-lighten-4{color:#d1c4e9 !important}.deep-purple.lighten-3{background-color:#b39ddb !important}.deep-purple-text.text-lighten-3{color:#b39ddb !important}.deep-purple.lighten-2{background-color:#9575cd !important}.deep-purple-text.text-lighten-2{color:#9575cd !important}.deep-purple.lighten-1{background-color:#7e57c2 !important}.deep-purple-text.text-lighten-1{color:#7e57c2 !important}.deep-purple.darken-1{background-color:#5e35b1 !important}.deep-purple-text.text-darken-1{color:#5e35b1 !important}.deep-purple.darken-2{background-color:#512da8 !important}.deep-purple-text.text-darken-2{color:#512da8 !important}.deep-purple.darken-3{background-color:#4527a0 !important}.deep-purple-text.text-darken-3{color:#4527a0 !important}.deep-purple.darken-4{background-color:#311b92 !important}.deep-purple-text.text-darken-4{color:#311b92 !important}.deep-purple.accent-1{background-color:#b388ff !important}.deep-purple-text.text-accent-1{color:#b388ff !important}.deep-purple.accent-2{background-color:#7c4dff !important}.deep-purple-text.text-accent-2{color:#7c4dff !important}.deep-purple.accent-3{background-color:#651fff !important}.deep-purple-text.text-accent-3{color:#651fff !important}.deep-purple.accent-4{background-color:#6200ea !important}.deep-purple-text.text-accent-4{color:#6200ea !important}.indigo{background-color:#3f51b5 !important}.indigo-text{color:#3f51b5 !important}.indigo.lighten-5{background-color:#e8eaf6 !important}.indigo-text.text-lighten-5{color:#e8eaf6 !important}.indigo.lighten-4{background-color:#c5cae9 !important}.indigo-text.text-lighten-4{color:#c5cae9 !important}.indigo.lighten-3{background-color:#9fa8da !important}.indigo-text.text-lighten-3{color:#9fa8da !important}.indigo.lighten-2{background-color:#7986cb !important}.indigo-text.text-lighten-2{color:#7986cb !important}.indigo.lighten-1{background-color:#5c6bc0 !important}.indigo-text.text-lighten-1{color:#5c6bc0 !important}.indigo.darken-1{background-color:#3949ab !important}.indigo-text.text-darken-1{color:#3949ab !important}.indigo.darken-2{background-color:#303f9f !important}.indigo-text.text-darken-2{color:#303f9f !important}.indigo.darken-3{background-color:#283593 !important}.indigo-text.text-darken-3{color:#283593 !important}.indigo.darken-4{background-color:#1a237e !important}.indigo-text.text-darken-4{color:#1a237e !important}.indigo.accent-1{background-color:#8c9eff !important}.indigo-text.text-accent-1{color:#8c9eff !important}.indigo.accent-2{background-color:#536dfe !important}.indigo-text.text-accent-2{color:#536dfe !important}.indigo.accent-3{background-color:#3d5afe !important}.indigo-text.text-accent-3{color:#3d5afe !important}.indigo.accent-4{background-color:#304ffe !important}.indigo-text.text-accent-4{color:#304ffe !important}.blue{background-color:#2196F3 !important}.blue-text{color:#2196F3 !important}.blue.lighten-5{background-color:#E3F2FD !important}.blue-text.text-lighten-5{color:#E3F2FD !important}.blue.lighten-4{background-color:#BBDEFB !important}.blue-text.text-lighten-4{color:#BBDEFB !important}.blue.lighten-3{background-color:#90CAF9 !important}.blue-text.text-lighten-3{color:#90CAF9 !important}.blue.lighten-2{background-color:#64B5F6 !important}.blue-text.text-lighten-2{color:#64B5F6 !important}.blue.lighten-1{background-color:#42A5F5 !important}.blue-text.text-lighten-1{color:#42A5F5 !important}.blue.darken-1{background-color:#1E88E5 !important}.blue-text.text-darken-1{color:#1E88E5 !important}.blue.darken-2{background-color:#1976D2 !important}.blue-text.text-darken-2{color:#1976D2 !important}.blue.darken-3{background-color:#1565C0 !important}.blue-text.text-darken-3{color:#1565C0 !important}.blue.darken-4{background-color:#0D47A1 !important}.blue-text.text-darken-4{color:#0D47A1 !important}.blue.accent-1{background-color:#82B1FF !important}.blue-text.text-accent-1{color:#82B1FF !important}.blue.accent-2{background-color:#448AFF !important}.blue-text.text-accent-2{color:#448AFF !important}.blue.accent-3{background-color:#2979FF !important}.blue-text.text-accent-3{color:#2979FF !important}.blue.accent-4{background-color:#2962FF !important}.blue-text.text-accent-4{color:#2962FF !important}.light-blue{background-color:#03a9f4 !important}.light-blue-text{color:#03a9f4 !important}.light-blue.lighten-5{background-color:#e1f5fe !important}.light-blue-text.text-lighten-5{color:#e1f5fe !important}.light-blue.lighten-4{background-color:#b3e5fc !important}.light-blue-text.text-lighten-4{color:#b3e5fc !important}.light-blue.lighten-3{background-color:#81d4fa !important}.light-blue-text.text-lighten-3{color:#81d4fa !important}.light-blue.lighten-2{background-color:#4fc3f7 !important}.light-blue-text.text-lighten-2{color:#4fc3f7 !important}.light-blue.lighten-1{background-color:#29b6f6 !important}.light-blue-text.text-lighten-1{color:#29b6f6 !important}.light-blue.darken-1{background-color:#039be5 !important}.light-blue-text.text-darken-1{color:#039be5 !important}.light-blue.darken-2{background-color:#0288d1 !important}.light-blue-text.text-darken-2{color:#0288d1 !important}.light-blue.darken-3{background-color:#0277bd !important}.light-blue-text.text-darken-3{color:#0277bd !important}.light-blue.darken-4{background-color:#01579b !important}.light-blue-text.text-darken-4{color:#01579b !important}.light-blue.accent-1{background-color:#80d8ff !important}.light-blue-text.text-accent-1{color:#80d8ff !important}.light-blue.accent-2{background-color:#40c4ff !important}.light-blue-text.text-accent-2{color:#40c4ff !important}.light-blue.accent-3{background-color:#00b0ff !important}.light-blue-text.text-accent-3{color:#00b0ff !important}.light-blue.accent-4{background-color:#0091ea !important}.light-blue-text.text-accent-4{color:#0091ea !important}.cyan{background-color:#00bcd4 !important}.cyan-text{color:#00bcd4 !important}.cyan.lighten-5{background-color:#e0f7fa !important}.cyan-text.text-lighten-5{color:#e0f7fa !important}.cyan.lighten-4{background-color:#b2ebf2 !important}.cyan-text.text-lighten-4{color:#b2ebf2 !important}.cyan.lighten-3{background-color:#80deea !important}.cyan-text.text-lighten-3{color:#80deea !important}.cyan.lighten-2{background-color:#4dd0e1 !important}.cyan-text.text-lighten-2{color:#4dd0e1 !important}.cyan.lighten-1{background-color:#26c6da !important}.cyan-text.text-lighten-1{color:#26c6da !important}.cyan.darken-1{background-color:#00acc1 !important}.cyan-text.text-darken-1{color:#00acc1 !important}.cyan.darken-2{background-color:#0097a7 !important}.cyan-text.text-darken-2{color:#0097a7 !important}.cyan.darken-3{background-color:#00838f !important}.cyan-text.text-darken-3{color:#00838f !important}.cyan.darken-4{background-color:#006064 !important}.cyan-text.text-darken-4{color:#006064 !important}.cyan.accent-1{background-color:#84ffff !important}.cyan-text.text-accent-1{color:#84ffff !important}.cyan.accent-2{background-color:#18ffff !important}.cyan-text.text-accent-2{color:#18ffff !important}.cyan.accent-3{background-color:#00e5ff !important}.cyan-text.text-accent-3{color:#00e5ff !important}.cyan.accent-4{background-color:#00b8d4 !important}.cyan-text.text-accent-4{color:#00b8d4 !important}.teal{background-color:#009688 !important}.teal-text{color:#009688 !important}.teal.lighten-5{background-color:#e0f2f1 !important}.teal-text.text-lighten-5{color:#e0f2f1 !important}.teal.lighten-4{background-color:#b2dfdb !important}.teal-text.text-lighten-4{color:#b2dfdb !important}.teal.lighten-3{background-color:#80cbc4 !important}.teal-text.text-lighten-3{color:#80cbc4 !important}.teal.lighten-2{background-color:#4db6ac !important}.teal-text.text-lighten-2{color:#4db6ac !important}.teal.lighten-1{background-color:#26a69a !important}.teal-text.text-lighten-1{color:#26a69a !important}.teal.darken-1{background-color:#00897b !important}.teal-text.text-darken-1{color:#00897b !important}.teal.darken-2{background-color:#00796b !important}.teal-text.text-darken-2{color:#00796b !important}.teal.darken-3{background-color:#00695c !important}.teal-text.text-darken-3{color:#00695c !important}.teal.darken-4{background-color:#004d40 !important}.teal-text.text-darken-4{color:#004d40 !important}.teal.accent-1{background-color:#a7ffeb !important}.teal-text.text-accent-1{color:#a7ffeb !important}.teal.accent-2{background-color:#64ffda !important}.teal-text.text-accent-2{color:#64ffda !important}.teal.accent-3{background-color:#1de9b6 !important}.teal-text.text-accent-3{color:#1de9b6 !important}.teal.accent-4{background-color:#00bfa5 !important}.teal-text.text-accent-4{color:#00bfa5 !important}.green{background-color:#4CAF50 !important}.green-text{color:#4CAF50 !important}.green.lighten-5{background-color:#E8F5E9 !important}.green-text.text-lighten-5{color:#E8F5E9 !important}.green.lighten-4{background-color:#C8E6C9 !important}.green-text.text-lighten-4{color:#C8E6C9 !important}.green.lighten-3{background-color:#A5D6A7 !important}.green-text.text-lighten-3{color:#A5D6A7 !important}.green.lighten-2{background-color:#81C784 !important}.green-text.text-lighten-2{color:#81C784 !important}.green.lighten-1{background-color:#66BB6A !important}.green-text.text-lighten-1{color:#66BB6A !important}.green.darken-1{background-color:#43A047 !important}.green-text.text-darken-1{color:#43A047 !important}.green.darken-2{background-color:#388E3C !important}.green-text.text-darken-2{color:#388E3C !important}.green.darken-3{background-color:#2E7D32 !important}.green-text.text-darken-3{color:#2E7D32 !important}.green.darken-4{background-color:#1B5E20 !important}.green-text.text-darken-4{color:#1B5E20 !important}.green.accent-1{background-color:#B9F6CA !important}.green-text.text-accent-1{color:#B9F6CA !important}.green.accent-2{background-color:#69F0AE !important}.green-text.text-accent-2{color:#69F0AE !important}.green.accent-3{background-color:#00E676 !important}.green-text.text-accent-3{color:#00E676 !important}.green.accent-4{background-color:#00C853 !important}.green-text.text-accent-4{color:#00C853 !important}.light-green{background-color:#8bc34a !important}.light-green-text{color:#8bc34a !important}.light-green.lighten-5{background-color:#f1f8e9 !important}.light-green-text.text-lighten-5{color:#f1f8e9 !important}.light-green.lighten-4{background-color:#dcedc8 !important}.light-green-text.text-lighten-4{color:#dcedc8 !important}.light-green.lighten-3{background-color:#c5e1a5 !important}.light-green-text.text-lighten-3{color:#c5e1a5 !important}.light-green.lighten-2{background-color:#aed581 !important}.light-green-text.text-lighten-2{color:#aed581 !important}.light-green.lighten-1{background-color:#9ccc65 !important}.light-green-text.text-lighten-1{color:#9ccc65 !important}.light-green.darken-1{background-color:#7cb342 !important}.light-green-text.text-darken-1{color:#7cb342 !important}.light-green.darken-2{background-color:#689f38 !important}.light-green-text.text-darken-2{color:#689f38 !important}.light-green.darken-3{background-color:#558b2f !important}.light-green-text.text-darken-3{color:#558b2f !important}.light-green.darken-4{background-color:#33691e !important}.light-green-text.text-darken-4{color:#33691e !important}.light-green.accent-1{background-color:#ccff90 !important}.light-green-text.text-accent-1{color:#ccff90 !important}.light-green.accent-2{background-color:#b2ff59 !important}.light-green-text.text-accent-2{color:#b2ff59 !important}.light-green.accent-3{background-color:#76ff03 !important}.light-green-text.text-accent-3{color:#76ff03 !important}.light-green.accent-4{background-color:#64dd17 !important}.light-green-text.text-accent-4{color:#64dd17 !important}.lime{background-color:#cddc39 !important}.lime-text{color:#cddc39 !important}.lime.lighten-5{background-color:#f9fbe7 !important}.lime-text.text-lighten-5{color:#f9fbe7 !important}.lime.lighten-4{background-color:#f0f4c3 !important}.lime-text.text-lighten-4{color:#f0f4c3 !important}.lime.lighten-3{background-color:#e6ee9c !important}.lime-text.text-lighten-3{color:#e6ee9c !important}.lime.lighten-2{background-color:#dce775 !important}.lime-text.text-lighten-2{color:#dce775 !important}.lime.lighten-1{background-color:#d4e157 !important}.lime-text.text-lighten-1{color:#d4e157 !important}.lime.darken-1{background-color:#c0ca33 !important}.lime-text.text-darken-1{color:#c0ca33 !important}.lime.darken-2{background-color:#afb42b !important}.lime-text.text-darken-2{color:#afb42b !important}.lime.darken-3{background-color:#9e9d24 !important}.lime-text.text-darken-3{color:#9e9d24 !important}.lime.darken-4{background-color:#827717 !important}.lime-text.text-darken-4{color:#827717 !important}.lime.accent-1{background-color:#f4ff81 !important}.lime-text.text-accent-1{color:#f4ff81 !important}.lime.accent-2{background-color:#eeff41 !important}.lime-text.text-accent-2{color:#eeff41 !important}.lime.accent-3{background-color:#c6ff00 !important}.lime-text.text-accent-3{color:#c6ff00 !important}.lime.accent-4{background-color:#aeea00 !important}.lime-text.text-accent-4{color:#aeea00 !important}.yellow{background-color:#ffeb3b !important}.yellow-text{color:#ffeb3b !important}.yellow.lighten-5{background-color:#fffde7 !important}.yellow-text.text-lighten-5{color:#fffde7 !important}.yellow.lighten-4{background-color:#fff9c4 !important}.yellow-text.text-lighten-4{color:#fff9c4 !important}.yellow.lighten-3{background-color:#fff59d !important}.yellow-text.text-lighten-3{color:#fff59d !important}.yellow.lighten-2{background-color:#fff176 !important}.yellow-text.text-lighten-2{color:#fff176 !important}.yellow.lighten-1{background-color:#ffee58 !important}.yellow-text.text-lighten-1{color:#ffee58 !important}.yellow.darken-1{background-color:#fdd835 !important}.yellow-text.text-darken-1{color:#fdd835 !important}.yellow.darken-2{background-color:#fbc02d !important}.yellow-text.text-darken-2{color:#fbc02d !important}.yellow.darken-3{background-color:#f9a825 !important}.yellow-text.text-darken-3{color:#f9a825 !important}.yellow.darken-4{background-color:#f57f17 !important}.yellow-text.text-darken-4{color:#f57f17 !important}.yellow.accent-1{background-color:#ffff8d !important}.yellow-text.text-accent-1{color:#ffff8d !important}.yellow.accent-2{background-color:#ff0 !important}.yellow-text.text-accent-2{color:#ff0 !important}.yellow.accent-3{background-color:#ffea00 !important}.yellow-text.text-accent-3{color:#ffea00 !important}.yellow.accent-4{background-color:#ffd600 !important}.yellow-text.text-accent-4{color:#ffd600 !important}.amber{background-color:#ffc107 !important}.amber-text{color:#ffc107 !important}.amber.lighten-5{background-color:#fff8e1 !important}.amber-text.text-lighten-5{color:#fff8e1 !important}.amber.lighten-4{background-color:#ffecb3 !important}.amber-text.text-lighten-4{color:#ffecb3 !important}.amber.lighten-3{background-color:#ffe082 !important}.amber-text.text-lighten-3{color:#ffe082 !important}.amber.lighten-2{background-color:#ffd54f !important}.amber-text.text-lighten-2{color:#ffd54f !important}.amber.lighten-1{background-color:#ffca28 !important}.amber-text.text-lighten-1{color:#ffca28 !important}.amber.darken-1{background-color:#ffb300 !important}.amber-text.text-darken-1{color:#ffb300 !important}.amber.darken-2{background-color:#ffa000 !important}.amber-text.text-darken-2{color:#ffa000 !important}.amber.darken-3{background-color:#ff8f00 !important}.amber-text.text-darken-3{color:#ff8f00 !important}.amber.darken-4{background-color:#ff6f00 !important}.amber-text.text-darken-4{color:#ff6f00 !important}.amber.accent-1{background-color:#ffe57f !important}.amber-text.text-accent-1{color:#ffe57f !important}.amber.accent-2{background-color:#ffd740 !important}.amber-text.text-accent-2{color:#ffd740 !important}.amber.accent-3{background-color:#ffc400 !important}.amber-text.text-accent-3{color:#ffc400 !important}.amber.accent-4{background-color:#ffab00 !important}.amber-text.text-accent-4{color:#ffab00 !important}.orange{background-color:#ff9800 !important}.orange-text{color:#ff9800 !important}.orange.lighten-5{background-color:#fff3e0 !important}.orange-text.text-lighten-5{color:#fff3e0 !important}.orange.lighten-4{background-color:#ffe0b2 !important}.orange-text.text-lighten-4{color:#ffe0b2 !important}.orange.lighten-3{background-color:#ffcc80 !important}.orange-text.text-lighten-3{color:#ffcc80 !important}.orange.lighten-2{background-color:#ffb74d !important}.orange-text.text-lighten-2{color:#ffb74d !important}.orange.lighten-1{background-color:#ffa726 !important}.orange-text.text-lighten-1{color:#ffa726 !important}.orange.darken-1{background-color:#fb8c00 !important}.orange-text.text-darken-1{color:#fb8c00 !important}.orange.darken-2{background-color:#f57c00 !important}.orange-text.text-darken-2{color:#f57c00 !important}.orange.darken-3{background-color:#ef6c00 !important}.orange-text.text-darken-3{color:#ef6c00 !important}.orange.darken-4{background-color:#e65100 !important}.orange-text.text-darken-4{color:#e65100 !important}.orange.accent-1{background-color:#ffd180 !important}.orange-text.text-accent-1{color:#ffd180 !important}.orange.accent-2{background-color:#ffab40 !important}.orange-text.text-accent-2{color:#ffab40 !important}.orange.accent-3{background-color:#ff9100 !important}.orange-text.text-accent-3{color:#ff9100 !important}.orange.accent-4{background-color:#ff6d00 !important}.orange-text.text-accent-4{color:#ff6d00 !important}.deep-orange{background-color:#ff5722 !important}.deep-orange-text{color:#ff5722 !important}.deep-orange.lighten-5{background-color:#fbe9e7 !important}.deep-orange-text.text-lighten-5{color:#fbe9e7 !important}.deep-orange.lighten-4{background-color:#ffccbc !important}.deep-orange-text.text-lighten-4{color:#ffccbc !important}.deep-orange.lighten-3{background-color:#ffab91 !important}.deep-orange-text.text-lighten-3{color:#ffab91 !important}.deep-orange.lighten-2{background-color:#ff8a65 !important}.deep-orange-text.text-lighten-2{color:#ff8a65 !important}.deep-orange.lighten-1{background-color:#ff7043 !important}.deep-orange-text.text-lighten-1{color:#ff7043 !important}.deep-orange.darken-1{background-color:#f4511e !important}.deep-orange-text.text-darken-1{color:#f4511e !important}.deep-orange.darken-2{background-color:#e64a19 !important}.deep-orange-text.text-darken-2{color:#e64a19 !important}.deep-orange.darken-3{background-color:#d84315 !important}.deep-orange-text.text-darken-3{color:#d84315 !important}.deep-orange.darken-4{background-color:#bf360c !important}.deep-orange-text.text-darken-4{color:#bf360c !important}.deep-orange.accent-1{background-color:#ff9e80 !important}.deep-orange-text.text-accent-1{color:#ff9e80 !important}.deep-orange.accent-2{background-color:#ff6e40 !important}.deep-orange-text.text-accent-2{color:#ff6e40 !important}.deep-orange.accent-3{background-color:#ff3d00 !important}.deep-orange-text.text-accent-3{color:#ff3d00 !important}.deep-orange.accent-4{background-color:#dd2c00 !important}.deep-orange-text.text-accent-4{color:#dd2c00 !important}.brown{background-color:#795548 !important}.brown-text{color:#795548 !important}.brown.lighten-5{background-color:#efebe9 !important}.brown-text.text-lighten-5{color:#efebe9 !important}.brown.lighten-4{background-color:#d7ccc8 !important}.brown-text.text-lighten-4{color:#d7ccc8 !important}.brown.lighten-3{background-color:#bcaaa4 !important}.brown-text.text-lighten-3{color:#bcaaa4 !important}.brown.lighten-2{background-color:#a1887f !important}.brown-text.text-lighten-2{color:#a1887f !important}.brown.lighten-1{background-color:#8d6e63 !important}.brown-text.text-lighten-1{color:#8d6e63 !important}.brown.darken-1{background-color:#6d4c41 !important}.brown-text.text-darken-1{color:#6d4c41 !important}.brown.darken-2{background-color:#5d4037 !important}.brown-text.text-darken-2{color:#5d4037 !important}.brown.darken-3{background-color:#4e342e !important}.brown-text.text-darken-3{color:#4e342e !important}.brown.darken-4{background-color:#3e2723 !important}.brown-text.text-darken-4{color:#3e2723 !important}.blue-grey{background-color:#607d8b !important}.blue-grey-text{color:#607d8b !important}.blue-grey.lighten-5{background-color:#eceff1 !important}.blue-grey-text.text-lighten-5{color:#eceff1 !important}.blue-grey.lighten-4{background-color:#cfd8dc !important}.blue-grey-text.text-lighten-4{color:#cfd8dc !important}.blue-grey.lighten-3{background-color:#b0bec5 !important}.blue-grey-text.text-lighten-3{color:#b0bec5 !important}.blue-grey.lighten-2{background-color:#90a4ae !important}.blue-grey-text.text-lighten-2{color:#90a4ae !important}.blue-grey.lighten-1{background-color:#78909c !important}.blue-grey-text.text-lighten-1{color:#78909c !important}.blue-grey.darken-1{background-color:#546e7a !important}.blue-grey-text.text-darken-1{color:#546e7a !important}.blue-grey.darken-2{background-color:#455a64 !important}.blue-grey-text.text-darken-2{color:#455a64 !important}.blue-grey.darken-3{background-color:#37474f !important}.blue-grey-text.text-darken-3{color:#37474f !important}.blue-grey.darken-4{background-color:#263238 !important}.blue-grey-text.text-darken-4{color:#263238 !important}.grey{background-color:#9e9e9e !important}.grey-text{color:#9e9e9e !important}.grey.lighten-5{background-color:#fafafa !important}.grey-text.text-lighten-5{color:#fafafa !important}.grey.lighten-4{background-color:#f5f5f5 !important}.grey-text.text-lighten-4{color:#f5f5f5 !important}.grey.lighten-3{background-color:#eee !important}.grey-text.text-lighten-3{color:#eee !important}.grey.lighten-2{background-color:#e0e0e0 !important}.grey-text.text-lighten-2{color:#e0e0e0 !important}.grey.lighten-1{background-color:#bdbdbd !important}.grey-text.text-lighten-1{color:#bdbdbd !important}.grey.darken-1{background-color:#757575 !important}.grey-text.text-darken-1{color:#757575 !important}.grey.darken-2{background-color:#616161 !important}.grey-text.text-darken-2{color:#616161 !important}.grey.darken-3{background-color:#424242 !important}.grey-text.text-darken-3{color:#424242 !important}.grey.darken-4{background-color:#212121 !important}.grey-text.text-darken-4{color:#212121 !important}.black{background-color:#000 !important}.black-text{color:#000 !important}.white{background-color:#fff !important}.white-text{color:#fff !important}.transparent{background-color:rgba(0,0,0,0) !important}.transparent-text{color:rgba(0,0,0,0) !important}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:0.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}html{-webkit-box-sizing:border-box;box-sizing:border-box}*,*:before,*:after{-webkit-box-sizing:inherit;box-sizing:inherit}button,input,optgroup,select,textarea{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}ul:not(.browser-default){padding-left:0;list-style-type:none}ul:not(.browser-default)>li{list-style-type:none}a{color:#039be5;text-decoration:none;-webkit-tap-highlight-color:transparent}.valign-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.clearfix{clear:both}.z-depth-0{-webkit-box-shadow:none !important;box-shadow:none !important}.z-depth-1,nav,.card-panel,.card,.toast,.btn,.btn-large,.btn-small,.btn-floating,.dropdown-content,.collapsible,.sidenav{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2);box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2)}.z-depth-1-half,.btn:hover,.btn-large:hover,.btn-small:hover,.btn-floating:hover{-webkit-box-shadow:0 3px 3px 0 rgba(0,0,0,0.14),0 1px 7px 0 rgba(0,0,0,0.12),0 3px 1px -1px rgba(0,0,0,0.2);box-shadow:0 3px 3px 0 rgba(0,0,0,0.14),0 1px 7px 0 rgba(0,0,0,0.12),0 3px 1px -1px rgba(0,0,0,0.2)}.z-depth-2{-webkit-box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 1px 10px 0 rgba(0,0,0,0.12),0 2px 4px -1px rgba(0,0,0,0.3);box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 1px 10px 0 rgba(0,0,0,0.12),0 2px 4px -1px rgba(0,0,0,0.3)}.z-depth-3{-webkit-box-shadow:0 8px 17px 2px rgba(0,0,0,0.14),0 3px 14px 2px rgba(0,0,0,0.12),0 5px 5px -3px rgba(0,0,0,0.2);box-shadow:0 8px 17px 2px rgba(0,0,0,0.14),0 3px 14px 2px rgba(0,0,0,0.12),0 5px 5px -3px rgba(0,0,0,0.2)}.z-depth-4{-webkit-box-shadow:0 16px 24px 2px rgba(0,0,0,0.14),0 6px 30px 5px rgba(0,0,0,0.12),0 8px 10px -7px rgba(0,0,0,0.2);box-shadow:0 16px 24px 2px rgba(0,0,0,0.14),0 6px 30px 5px rgba(0,0,0,0.12),0 8px 10px -7px rgba(0,0,0,0.2)}.z-depth-5,.modal{-webkit-box-shadow:0 24px 38px 3px rgba(0,0,0,0.14),0 9px 46px 8px rgba(0,0,0,0.12),0 11px 15px -7px rgba(0,0,0,0.2);box-shadow:0 24px 38px 3px rgba(0,0,0,0.14),0 9px 46px 8px rgba(0,0,0,0.12),0 11px 15px -7px rgba(0,0,0,0.2)}.hoverable{-webkit-transition:-webkit-box-shadow .25s;transition:-webkit-box-shadow .25s;transition:box-shadow .25s;transition:box-shadow .25s, -webkit-box-shadow .25s}.hoverable:hover{-webkit-box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}.divider{height:1px;overflow:hidden;background-color:#e0e0e0}blockquote{margin:20px 0;padding-left:1.5rem;border-left:5px solid #ee6e73}i{line-height:inherit}i.left{float:left;margin-right:15px}i.right{float:right;margin-left:15px}i.tiny{font-size:1rem}i.small{font-size:2rem}i.medium{font-size:4rem}i.large{font-size:6rem}img.responsive-img,video.responsive-video{max-width:100%;height:auto}.pagination li{display:inline-block;border-radius:2px;text-align:center;vertical-align:top;height:30px}.pagination li a{color:#444;display:inline-block;font-size:1.2rem;padding:0 10px;line-height:30px}.pagination li.active a{color:#fff}.pagination li.active{background-color:#ee6e73}.pagination li.disabled a{cursor:default;color:#999}.pagination li i{font-size:2rem}.pagination li.pages ul li{display:inline-block;float:none}@media only screen and (max-width: 992px){.pagination{width:100%}.pagination li.prev,.pagination li.next{width:10%}.pagination li.pages{width:80%;overflow:hidden;white-space:nowrap}}.breadcrumb{font-size:18px;color:rgba(255,255,255,0.7)}.breadcrumb i,.breadcrumb [class^="mdi-"],.breadcrumb [class*="mdi-"],.breadcrumb i.material-icons{display:inline-block;float:left;font-size:24px}.breadcrumb:before{content:'\E5CC';color:rgba(255,255,255,0.7);vertical-align:top;display:inline-block;font-family:'Material Icons';font-weight:normal;font-style:normal;font-size:25px;margin:0 10px 0 8px;-webkit-font-smoothing:antialiased}.breadcrumb:first-child:before{display:none}.breadcrumb:last-child{color:#fff}.parallax-container{position:relative;overflow:hidden;height:500px}.parallax-container .parallax{position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1}.parallax-container .parallax img{opacity:0;position:absolute;left:50%;bottom:0;min-width:100%;min-height:100%;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);-webkit-transform:translateX(-50%);transform:translateX(-50%)}.pin-top,.pin-bottom{position:relative}.pinned{position:fixed !important}ul.staggered-list li{opacity:0}.fade-in{opacity:0;-webkit-transform-origin:0 50%;transform-origin:0 50%}@media only screen and (max-width: 600px){.hide-on-small-only,.hide-on-small-and-down{display:none !important}}@media only screen and (max-width: 992px){.hide-on-med-and-down{display:none !important}}@media only screen and (min-width: 601px){.hide-on-med-and-up{display:none !important}}@media only screen and (min-width: 600px) and (max-width: 992px){.hide-on-med-only{display:none !important}}@media only screen and (min-width: 993px){.hide-on-large-only{display:none !important}}@media only screen and (min-width: 1201px){.hide-on-extra-large-only{display:none !important}}@media only screen and (min-width: 1201px){.show-on-extra-large{display:block !important}}@media only screen and (min-width: 993px){.show-on-large{display:block !important}}@media only screen and (min-width: 600px) and (max-width: 992px){.show-on-medium{display:block !important}}@media only screen and (max-width: 600px){.show-on-small{display:block !important}}@media only screen and (min-width: 601px){.show-on-medium-and-up{display:block !important}}@media only screen and (max-width: 992px){.show-on-medium-and-down{display:block !important}}@media only screen and (max-width: 600px){.center-on-small-only{text-align:center}}.page-footer{padding-top:20px;color:#fff;background-color:#ee6e73}.page-footer .footer-copyright{overflow:hidden;min-height:50px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:10px 0px;color:rgba(255,255,255,0.8);background-color:rgba(51,51,51,0.08)}table,th,td{border:none}table{width:100%;display:table;border-collapse:collapse;border-spacing:0}table.striped tr{border-bottom:none}table.striped>tbody>tr:nth-child(odd){background-color:rgba(242,242,242,0.5)}table.striped>tbody>tr>td{border-radius:0}table.highlight>tbody>tr{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}table.highlight>tbody>tr:hover{background-color:rgba(242,242,242,0.5)}table.centered thead tr th,table.centered tbody tr td{text-align:center}tr{border-bottom:1px solid rgba(0,0,0,0.12)}td,th{padding:15px 5px;display:table-cell;text-align:left;vertical-align:middle;border-radius:2px}@media only screen and (max-width: 992px){table.responsive-table{width:100%;border-collapse:collapse;border-spacing:0;display:block;position:relative}table.responsive-table td:empty:before{content:'\00a0'}table.responsive-table th,table.responsive-table td{margin:0;vertical-align:top}table.responsive-table th{text-align:left}table.responsive-table thead{display:block;float:left}table.responsive-table thead tr{display:block;padding:0 10px 0 0}table.responsive-table thead tr th::before{content:"\00a0"}table.responsive-table tbody{display:block;width:auto;position:relative;overflow-x:auto;white-space:nowrap}table.responsive-table tbody tr{display:inline-block;vertical-align:top}table.responsive-table th{display:block;text-align:right}table.responsive-table td{display:block;min-height:1.25em;text-align:left}table.responsive-table tr{border-bottom:none;padding:0 10px}table.responsive-table thead{border:0;border-right:1px solid rgba(0,0,0,0.12)}}.collection{margin:.5rem 0 1rem 0;border:1px solid #e0e0e0;border-radius:2px;overflow:hidden;position:relative}.collection .collection-item{background-color:#fff;line-height:1.5rem;padding:10px 20px;margin:0;border-bottom:1px solid #e0e0e0}.collection .collection-item.avatar{min-height:84px;padding-left:72px;position:relative}.collection .collection-item.avatar:not(.circle-clipper)>.circle,.collection .collection-item.avatar :not(.circle-clipper)>.circle{position:absolute;width:42px;height:42px;overflow:hidden;left:15px;display:inline-block;vertical-align:middle}.collection .collection-item.avatar i.circle{font-size:18px;line-height:42px;color:#fff;background-color:#999;text-align:center}.collection .collection-item.avatar .title{font-size:16px}.collection .collection-item.avatar p{margin:0}.collection .collection-item.avatar .secondary-content{position:absolute;top:16px;right:16px}.collection .collection-item:last-child{border-bottom:none}.collection .collection-item.active{background-color:#26a69a;color:#eafaf9}.collection .collection-item.active .secondary-content{color:#fff}.collection a.collection-item{display:block;-webkit-transition:.25s;transition:.25s;color:#26a69a}.collection a.collection-item:not(.active):hover{background-color:#ddd}.collection.with-header .collection-header{background-color:#fff;border-bottom:1px solid #e0e0e0;padding:10px 20px}.collection.with-header .collection-item{padding-left:30px}.collection.with-header .collection-item.avatar{padding-left:72px}.secondary-content{float:right;color:#26a69a}.collapsible .collection{margin:0;border:none}.video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.video-container iframe,.video-container object,.video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.progress{position:relative;height:4px;display:block;width:100%;background-color:#acece6;border-radius:2px;margin:.5rem 0 1rem 0;overflow:hidden}.progress .determinate{position:absolute;top:0;left:0;bottom:0;background-color:#26a69a;-webkit-transition:width .3s linear;transition:width .3s linear}.progress .indeterminate{background-color:#26a69a}.progress .indeterminate:before{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.progress .indeterminate:after{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-webkit-animation-delay:1.15s;animation-delay:1.15s}@-webkit-keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@-webkit-keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}.hide{display:none !important}.left-align{text-align:left}.right-align{text-align:right}.center,.center-align{text-align:center}.left{float:left !important}.right{float:right !important}.no-select,input[type=range],input[type=range]+.thumb{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.circle{border-radius:50%}.center-block{display:block;margin-left:auto;margin-right:auto}.truncate{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.no-padding{padding:0 !important}span.badge{min-width:3rem;padding:0 6px;margin-left:14px;text-align:center;font-size:1rem;line-height:22px;height:22px;color:#757575;float:right;-webkit-box-sizing:border-box;box-sizing:border-box}span.badge.new{font-weight:300;font-size:0.8rem;color:#fff;background-color:#26a69a;border-radius:2px}span.badge.new:after{content:" new"}span.badge[data-badge-caption]::after{content:" " attr(data-badge-caption)}nav ul a span.badge{display:inline-block;float:none;margin-left:4px;line-height:22px;height:22px;-webkit-font-smoothing:auto}.collection-item span.badge{margin-top:calc(.75rem - 11px)}.collapsible span.badge{margin-left:auto}.sidenav span.badge{margin-top:calc(24px - 11px)}table span.badge{display:inline-block;float:none;margin-left:auto}.material-icons{text-rendering:optimizeLegibility;-webkit-font-feature-settings:'liga';-moz-font-feature-settings:'liga';font-feature-settings:'liga'}.container{margin:0 auto;max-width:1280px;width:90%}@media only screen and (min-width: 601px){.container{width:85%}}@media only screen and (min-width: 993px){.container{width:70%}}.col .row{margin-left:-.75rem;margin-right:-.75rem}.section{padding-top:1rem;padding-bottom:1rem}.section.no-pad{padding:0}.section.no-pad-bot{padding-bottom:0}.section.no-pad-top{padding-top:0}.row{margin-left:auto;margin-right:auto;margin-bottom:20px}.row:after{content:"";display:table;clear:both}.row .col{float:left;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 .75rem;min-height:1px}.row .col[class*="push-"],.row .col[class*="pull-"]{position:relative}.row .col.s1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.s4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.s7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.s10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-s1{margin-left:8.3333333333%}.row .col.pull-s1{right:8.3333333333%}.row .col.push-s1{left:8.3333333333%}.row .col.offset-s2{margin-left:16.6666666667%}.row .col.pull-s2{right:16.6666666667%}.row .col.push-s2{left:16.6666666667%}.row .col.offset-s3{margin-left:25%}.row .col.pull-s3{right:25%}.row .col.push-s3{left:25%}.row .col.offset-s4{margin-left:33.3333333333%}.row .col.pull-s4{right:33.3333333333%}.row .col.push-s4{left:33.3333333333%}.row .col.offset-s5{margin-left:41.6666666667%}.row .col.pull-s5{right:41.6666666667%}.row .col.push-s5{left:41.6666666667%}.row .col.offset-s6{margin-left:50%}.row .col.pull-s6{right:50%}.row .col.push-s6{left:50%}.row .col.offset-s7{margin-left:58.3333333333%}.row .col.pull-s7{right:58.3333333333%}.row .col.push-s7{left:58.3333333333%}.row .col.offset-s8{margin-left:66.6666666667%}.row .col.pull-s8{right:66.6666666667%}.row .col.push-s8{left:66.6666666667%}.row .col.offset-s9{margin-left:75%}.row .col.pull-s9{right:75%}.row .col.push-s9{left:75%}.row .col.offset-s10{margin-left:83.3333333333%}.row .col.pull-s10{right:83.3333333333%}.row .col.push-s10{left:83.3333333333%}.row .col.offset-s11{margin-left:91.6666666667%}.row .col.pull-s11{right:91.6666666667%}.row .col.push-s11{left:91.6666666667%}.row .col.offset-s12{margin-left:100%}.row .col.pull-s12{right:100%}.row .col.push-s12{left:100%}@media only screen and (min-width: 601px){.row .col.m1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.m4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.m7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.m10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-m1{margin-left:8.3333333333%}.row .col.pull-m1{right:8.3333333333%}.row .col.push-m1{left:8.3333333333%}.row .col.offset-m2{margin-left:16.6666666667%}.row .col.pull-m2{right:16.6666666667%}.row .col.push-m2{left:16.6666666667%}.row .col.offset-m3{margin-left:25%}.row .col.pull-m3{right:25%}.row .col.push-m3{left:25%}.row .col.offset-m4{margin-left:33.3333333333%}.row .col.pull-m4{right:33.3333333333%}.row .col.push-m4{left:33.3333333333%}.row .col.offset-m5{margin-left:41.6666666667%}.row .col.pull-m5{right:41.6666666667%}.row .col.push-m5{left:41.6666666667%}.row .col.offset-m6{margin-left:50%}.row .col.pull-m6{right:50%}.row .col.push-m6{left:50%}.row .col.offset-m7{margin-left:58.3333333333%}.row .col.pull-m7{right:58.3333333333%}.row .col.push-m7{left:58.3333333333%}.row .col.offset-m8{margin-left:66.6666666667%}.row .col.pull-m8{right:66.6666666667%}.row .col.push-m8{left:66.6666666667%}.row .col.offset-m9{margin-left:75%}.row .col.pull-m9{right:75%}.row .col.push-m9{left:75%}.row .col.offset-m10{margin-left:83.3333333333%}.row .col.pull-m10{right:83.3333333333%}.row .col.push-m10{left:83.3333333333%}.row .col.offset-m11{margin-left:91.6666666667%}.row .col.pull-m11{right:91.6666666667%}.row .col.push-m11{left:91.6666666667%}.row .col.offset-m12{margin-left:100%}.row .col.pull-m12{right:100%}.row .col.push-m12{left:100%}}@media only screen and (min-width: 993px){.row .col.l1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.l4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.l7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.l10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-l1{margin-left:8.3333333333%}.row .col.pull-l1{right:8.3333333333%}.row .col.push-l1{left:8.3333333333%}.row .col.offset-l2{margin-left:16.6666666667%}.row .col.pull-l2{right:16.6666666667%}.row .col.push-l2{left:16.6666666667%}.row .col.offset-l3{margin-left:25%}.row .col.pull-l3{right:25%}.row .col.push-l3{left:25%}.row .col.offset-l4{margin-left:33.3333333333%}.row .col.pull-l4{right:33.3333333333%}.row .col.push-l4{left:33.3333333333%}.row .col.offset-l5{margin-left:41.6666666667%}.row .col.pull-l5{right:41.6666666667%}.row .col.push-l5{left:41.6666666667%}.row .col.offset-l6{margin-left:50%}.row .col.pull-l6{right:50%}.row .col.push-l6{left:50%}.row .col.offset-l7{margin-left:58.3333333333%}.row .col.pull-l7{right:58.3333333333%}.row .col.push-l7{left:58.3333333333%}.row .col.offset-l8{margin-left:66.6666666667%}.row .col.pull-l8{right:66.6666666667%}.row .col.push-l8{left:66.6666666667%}.row .col.offset-l9{margin-left:75%}.row .col.pull-l9{right:75%}.row .col.push-l9{left:75%}.row .col.offset-l10{margin-left:83.3333333333%}.row .col.pull-l10{right:83.3333333333%}.row .col.push-l10{left:83.3333333333%}.row .col.offset-l11{margin-left:91.6666666667%}.row .col.pull-l11{right:91.6666666667%}.row .col.push-l11{left:91.6666666667%}.row .col.offset-l12{margin-left:100%}.row .col.pull-l12{right:100%}.row .col.push-l12{left:100%}}@media only screen and (min-width: 1201px){.row .col.xl1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.xl4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.xl7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.xl10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-xl1{margin-left:8.3333333333%}.row .col.pull-xl1{right:8.3333333333%}.row .col.push-xl1{left:8.3333333333%}.row .col.offset-xl2{margin-left:16.6666666667%}.row .col.pull-xl2{right:16.6666666667%}.row .col.push-xl2{left:16.6666666667%}.row .col.offset-xl3{margin-left:25%}.row .col.pull-xl3{right:25%}.row .col.push-xl3{left:25%}.row .col.offset-xl4{margin-left:33.3333333333%}.row .col.pull-xl4{right:33.3333333333%}.row .col.push-xl4{left:33.3333333333%}.row .col.offset-xl5{margin-left:41.6666666667%}.row .col.pull-xl5{right:41.6666666667%}.row .col.push-xl5{left:41.6666666667%}.row .col.offset-xl6{margin-left:50%}.row .col.pull-xl6{right:50%}.row .col.push-xl6{left:50%}.row .col.offset-xl7{margin-left:58.3333333333%}.row .col.pull-xl7{right:58.3333333333%}.row .col.push-xl7{left:58.3333333333%}.row .col.offset-xl8{margin-left:66.6666666667%}.row .col.pull-xl8{right:66.6666666667%}.row .col.push-xl8{left:66.6666666667%}.row .col.offset-xl9{margin-left:75%}.row .col.pull-xl9{right:75%}.row .col.push-xl9{left:75%}.row .col.offset-xl10{margin-left:83.3333333333%}.row .col.pull-xl10{right:83.3333333333%}.row .col.push-xl10{left:83.3333333333%}.row .col.offset-xl11{margin-left:91.6666666667%}.row .col.pull-xl11{right:91.6666666667%}.row .col.push-xl11{left:91.6666666667%}.row .col.offset-xl12{margin-left:100%}.row .col.pull-xl12{right:100%}.row .col.push-xl12{left:100%}}nav{color:#fff;background-color:#ee6e73;width:100%;height:56px;line-height:56px}nav.nav-extended{height:auto}nav.nav-extended .nav-wrapper{min-height:56px;height:auto}nav.nav-extended .nav-content{position:relative;line-height:normal}nav a{color:#fff}nav i,nav [class^="mdi-"],nav [class*="mdi-"],nav i.material-icons{display:block;font-size:24px;height:56px;line-height:56px}nav .nav-wrapper{position:relative;height:100%}@media only screen and (min-width: 993px){nav a.sidenav-trigger{display:none}}nav .sidenav-trigger{float:left;position:relative;z-index:1;height:56px;margin:0 18px}nav .sidenav-trigger i{height:56px;line-height:56px}nav .brand-logo{position:absolute;color:#fff;display:inline-block;font-size:2.1rem;padding:0}nav .brand-logo.center{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}@media only screen and (max-width: 992px){nav .brand-logo{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}nav .brand-logo.left,nav .brand-logo.right{padding:0;-webkit-transform:none;transform:none}nav .brand-logo.left{left:0.5rem}nav .brand-logo.right{right:0.5rem;left:auto}}nav .brand-logo.right{right:0.5rem;padding:0}nav .brand-logo i,nav .brand-logo [class^="mdi-"],nav .brand-logo [class*="mdi-"],nav .brand-logo i.material-icons{float:left;margin-right:15px}nav .nav-title{display:inline-block;font-size:32px;padding:28px 0}nav ul{margin:0}nav ul li{-webkit-transition:background-color .3s;transition:background-color .3s;float:left;padding:0}nav ul li.active{background-color:rgba(0,0,0,0.1)}nav ul a{-webkit-transition:background-color .3s;transition:background-color .3s;font-size:1rem;color:#fff;display:block;padding:0 15px;cursor:pointer}nav ul a.btn,nav ul a.btn-large,nav ul a.btn-small,nav ul a.btn-large,nav ul a.btn-flat,nav ul a.btn-floating{margin-top:-2px;margin-left:15px;margin-right:15px}nav ul a.btn>.material-icons,nav ul a.btn-large>.material-icons,nav ul a.btn-small>.material-icons,nav ul a.btn-large>.material-icons,nav ul a.btn-flat>.material-icons,nav ul a.btn-floating>.material-icons{height:inherit;line-height:inherit}nav ul a:hover{background-color:rgba(0,0,0,0.1)}nav ul.left{float:left}nav form{height:100%}nav .input-field{margin:0;height:100%}nav .input-field input{height:100%;font-size:1.2rem;border:none;padding-left:2rem}nav .input-field input:focus,nav .input-field input[type=text]:valid,nav .input-field input[type=password]:valid,nav .input-field input[type=email]:valid,nav .input-field input[type=url]:valid,nav .input-field input[type=date]:valid{border:none;-webkit-box-shadow:none;box-shadow:none}nav .input-field label{top:0;left:0}nav .input-field label i{color:rgba(255,255,255,0.7);-webkit-transition:color .3s;transition:color .3s}nav .input-field label.active i{color:#fff}.navbar-fixed{position:relative;height:56px;z-index:997}.navbar-fixed nav{position:fixed}@media only screen and (min-width: 601px){nav.nav-extended .nav-wrapper{min-height:64px}nav,nav .nav-wrapper i,nav a.sidenav-trigger,nav a.sidenav-trigger i{height:64px;line-height:64px}.navbar-fixed{height:64px}}a{text-decoration:none}html{line-height:1.5;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-weight:normal;color:rgba(0,0,0,0.87)}@media only screen and (min-width: 0){html{font-size:14px}}@media only screen and (min-width: 992px){html{font-size:14.5px}}@media only screen and (min-width: 1200px){html{font-size:15px}}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.3}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:4.2rem;line-height:110%;margin:2.8rem 0 1.68rem 0}h2{font-size:3.56rem;line-height:110%;margin:2.3733333333rem 0 1.424rem 0}h3{font-size:2.92rem;line-height:110%;margin:1.9466666667rem 0 1.168rem 0}h4{font-size:2.28rem;line-height:110%;margin:1.52rem 0 .912rem 0}h5{font-size:1.64rem;line-height:110%;margin:1.0933333333rem 0 .656rem 0}h6{font-size:1.15rem;line-height:110%;margin:.7666666667rem 0 .46rem 0}em{font-style:italic}strong{font-weight:500}small{font-size:75%}.light{font-weight:300}.thin{font-weight:200}@media only screen and (min-width: 360px){.flow-text{font-size:1.2rem}}@media only screen and (min-width: 390px){.flow-text{font-size:1.224rem}}@media only screen and (min-width: 420px){.flow-text{font-size:1.248rem}}@media only screen and (min-width: 450px){.flow-text{font-size:1.272rem}}@media only screen and (min-width: 480px){.flow-text{font-size:1.296rem}}@media only screen and (min-width: 510px){.flow-text{font-size:1.32rem}}@media only screen and (min-width: 540px){.flow-text{font-size:1.344rem}}@media only screen and (min-width: 570px){.flow-text{font-size:1.368rem}}@media only screen and (min-width: 600px){.flow-text{font-size:1.392rem}}@media only screen and (min-width: 630px){.flow-text{font-size:1.416rem}}@media only screen and (min-width: 660px){.flow-text{font-size:1.44rem}}@media only screen and (min-width: 690px){.flow-text{font-size:1.464rem}}@media only screen and (min-width: 720px){.flow-text{font-size:1.488rem}}@media only screen and (min-width: 750px){.flow-text{font-size:1.512rem}}@media only screen and (min-width: 780px){.flow-text{font-size:1.536rem}}@media only screen and (min-width: 810px){.flow-text{font-size:1.56rem}}@media only screen and (min-width: 840px){.flow-text{font-size:1.584rem}}@media only screen and (min-width: 870px){.flow-text{font-size:1.608rem}}@media only screen and (min-width: 900px){.flow-text{font-size:1.632rem}}@media only screen and (min-width: 930px){.flow-text{font-size:1.656rem}}@media only screen and (min-width: 960px){.flow-text{font-size:1.68rem}}@media only screen and (max-width: 360px){.flow-text{font-size:1.2rem}}.scale-transition{-webkit-transition:-webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important;transition:-webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important;transition:transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important;transition:transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63), -webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important}.scale-transition.scale-out{-webkit-transform:scale(0);transform:scale(0);-webkit-transition:-webkit-transform .2s !important;transition:-webkit-transform .2s !important;transition:transform .2s !important;transition:transform .2s, -webkit-transform .2s !important}.scale-transition.scale-in{-webkit-transform:scale(1);transform:scale(1)}.card-panel{-webkit-transition:-webkit-box-shadow .25s;transition:-webkit-box-shadow .25s;transition:box-shadow .25s;transition:box-shadow .25s, -webkit-box-shadow .25s;padding:24px;margin:.5rem 0 1rem 0;border-radius:2px;background-color:#fff}.card{position:relative;margin:.5rem 0 1rem 0;background-color:#fff;-webkit-transition:-webkit-box-shadow .25s;transition:-webkit-box-shadow .25s;transition:box-shadow .25s;transition:box-shadow .25s, -webkit-box-shadow .25s;border-radius:2px}.card .card-title{font-size:24px;font-weight:300}.card .card-title.activator{cursor:pointer}.card.small,.card.medium,.card.large{position:relative}.card.small .card-image,.card.medium .card-image,.card.large .card-image{max-height:60%;overflow:hidden}.card.small .card-image+.card-content,.card.medium .card-image+.card-content,.card.large .card-image+.card-content{max-height:40%}.card.small .card-content,.card.medium .card-content,.card.large .card-content{max-height:100%;overflow:hidden}.card.small .card-action,.card.medium .card-action,.card.large .card-action{position:absolute;bottom:0;left:0;right:0}.card.small{height:300px}.card.medium{height:400px}.card.large{height:500px}.card.horizontal{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.card.horizontal.small .card-image,.card.horizontal.medium .card-image,.card.horizontal.large .card-image{height:100%;max-height:none;overflow:visible}.card.horizontal.small .card-image img,.card.horizontal.medium .card-image img,.card.horizontal.large .card-image img{height:100%}.card.horizontal .card-image{max-width:50%}.card.horizontal .card-image img{border-radius:2px 0 0 2px;max-width:100%;width:auto}.card.horizontal .card-stacked{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.card.horizontal .card-stacked .card-content{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.card.sticky-action .card-action{z-index:2}.card.sticky-action .card-reveal{z-index:1;padding-bottom:64px}.card .card-image{position:relative}.card .card-image img{display:block;border-radius:2px 2px 0 0;position:relative;left:0;right:0;top:0;bottom:0;width:100%}.card .card-image .card-title{color:#fff;position:absolute;bottom:0;left:0;max-width:100%;padding:24px}.card .card-content{padding:24px;border-radius:0 0 2px 2px}.card .card-content p{margin:0}.card .card-content .card-title{display:block;line-height:32px;margin-bottom:8px}.card .card-content .card-title i{line-height:32px}.card .card-action{background-color:inherit;border-top:1px solid rgba(160,160,160,0.2);position:relative;padding:16px 24px}.card .card-action:last-child{border-radius:0 0 2px 2px}.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating){color:#ffab40;margin-right:24px;-webkit-transition:color .3s ease;transition:color .3s ease;text-transform:uppercase}.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating):hover{color:#ffd8a6}.card .card-reveal{padding:24px;position:absolute;background-color:#fff;width:100%;overflow-y:auto;left:0;top:100%;height:100%;z-index:3;display:none}.card .card-reveal .card-title{cursor:pointer;display:block}#toast-container{display:block;position:fixed;z-index:10000}@media only screen and (max-width: 600px){#toast-container{min-width:100%;bottom:0%}}@media only screen and (min-width: 601px) and (max-width: 992px){#toast-container{left:5%;bottom:7%;max-width:90%}}@media only screen and (min-width: 993px){#toast-container{top:10%;right:7%;max-width:86%}}.toast{border-radius:2px;top:35px;width:auto;margin-top:10px;position:relative;max-width:100%;height:auto;min-height:48px;line-height:1.5em;background-color:#323232;padding:10px 25px;font-size:1.1rem;font-weight:300;color:#fff;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;cursor:default}.toast .toast-action{color:#eeff41;font-weight:500;margin-right:-25px;margin-left:3rem}.toast.rounded{border-radius:24px}@media only screen and (max-width: 600px){.toast{width:100%;border-radius:0}}.tabs{position:relative;overflow-x:auto;overflow-y:hidden;height:48px;width:100%;background-color:#fff;margin:0 auto;white-space:nowrap}.tabs.tabs-transparent{background-color:transparent}.tabs.tabs-transparent .tab a,.tabs.tabs-transparent .tab.disabled a,.tabs.tabs-transparent .tab.disabled a:hover{color:rgba(255,255,255,0.7)}.tabs.tabs-transparent .tab a:hover,.tabs.tabs-transparent .tab a.active{color:#fff}.tabs.tabs-transparent .indicator{background-color:#fff}.tabs.tabs-fixed-width{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tabs.tabs-fixed-width .tab{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tabs .tab{display:inline-block;text-align:center;line-height:48px;height:48px;padding:0;margin:0;text-transform:uppercase}.tabs .tab a{color:rgba(238,110,115,0.7);display:block;width:100%;height:100%;padding:0 24px;font-size:14px;text-overflow:ellipsis;overflow:hidden;-webkit-transition:color .28s ease, background-color .28s ease;transition:color .28s ease, background-color .28s ease}.tabs .tab a:focus,.tabs .tab a:focus.active{background-color:rgba(246,178,181,0.2);outline:none}.tabs .tab a:hover,.tabs .tab a.active{background-color:transparent;color:#ee6e73}.tabs .tab.disabled a,.tabs .tab.disabled a:hover{color:rgba(238,110,115,0.4);cursor:default}.tabs .indicator{position:absolute;bottom:0;height:2px;background-color:#f6b2b5;will-change:left, right}@media only screen and (max-width: 992px){.tabs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tabs .tab{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tabs .tab a{padding:0 12px}}.material-tooltip{padding:10px 8px;font-size:1rem;z-index:2000;background-color:transparent;border-radius:2px;color:#fff;min-height:36px;line-height:120%;opacity:0;position:absolute;text-align:center;max-width:calc(100% - 4px);overflow:hidden;left:0;top:0;pointer-events:none;visibility:hidden;background-color:#323232}.backdrop{position:absolute;opacity:0;height:7px;width:14px;border-radius:0 0 50% 50%;background-color:#323232;z-index:-1;-webkit-transform-origin:50% 0%;transform-origin:50% 0%;visibility:hidden}.btn,.btn-large,.btn-small,.btn-flat{border:none;border-radius:2px;display:inline-block;height:36px;line-height:36px;padding:0 16px;text-transform:uppercase;vertical-align:middle;-webkit-tap-highlight-color:transparent}.btn.disabled,.disabled.btn-large,.disabled.btn-small,.btn-floating.disabled,.btn-large.disabled,.btn-small.disabled,.btn-flat.disabled,.btn:disabled,.btn-large:disabled,.btn-small:disabled,.btn-floating:disabled,.btn-large:disabled,.btn-small:disabled,.btn-flat:disabled,.btn[disabled],.btn-large[disabled],.btn-small[disabled],.btn-floating[disabled],.btn-large[disabled],.btn-small[disabled],.btn-flat[disabled]{pointer-events:none;background-color:#DFDFDF !important;-webkit-box-shadow:none;box-shadow:none;color:#9F9F9F !important;cursor:default}.btn.disabled:hover,.disabled.btn-large:hover,.disabled.btn-small:hover,.btn-floating.disabled:hover,.btn-large.disabled:hover,.btn-small.disabled:hover,.btn-flat.disabled:hover,.btn:disabled:hover,.btn-large:disabled:hover,.btn-small:disabled:hover,.btn-floating:disabled:hover,.btn-large:disabled:hover,.btn-small:disabled:hover,.btn-flat:disabled:hover,.btn[disabled]:hover,.btn-large[disabled]:hover,.btn-small[disabled]:hover,.btn-floating[disabled]:hover,.btn-large[disabled]:hover,.btn-small[disabled]:hover,.btn-flat[disabled]:hover{background-color:#DFDFDF !important;color:#9F9F9F !important}.btn,.btn-large,.btn-small,.btn-floating,.btn-large,.btn-small,.btn-flat{font-size:14px;outline:0}.btn i,.btn-large i,.btn-small i,.btn-floating i,.btn-large i,.btn-small i,.btn-flat i{font-size:1.3rem;line-height:inherit}.btn:focus,.btn-large:focus,.btn-small:focus,.btn-floating:focus{background-color:#1d7d74}.btn,.btn-large,.btn-small{text-decoration:none;color:#fff;background-color:#26a69a;text-align:center;letter-spacing:.5px;-webkit-transition:background-color .2s ease-out;transition:background-color .2s ease-out;cursor:pointer}.btn:hover,.btn-large:hover,.btn-small:hover{background-color:#2bbbad}.btn-floating{display:inline-block;color:#fff;position:relative;overflow:hidden;z-index:1;width:40px;height:40px;line-height:40px;padding:0;background-color:#26a69a;border-radius:50%;-webkit-transition:background-color .3s;transition:background-color .3s;cursor:pointer;vertical-align:middle}.btn-floating:hover{background-color:#26a69a}.btn-floating:before{border-radius:0}.btn-floating.btn-large{width:56px;height:56px;padding:0}.btn-floating.btn-large.halfway-fab{bottom:-28px}.btn-floating.btn-large i{line-height:56px}.btn-floating.btn-small{width:32.4px;height:32.4px}.btn-floating.btn-small.halfway-fab{bottom:-16.2px}.btn-floating.btn-small i{line-height:32.4px}.btn-floating.halfway-fab{position:absolute;right:24px;bottom:-20px}.btn-floating.halfway-fab.left{right:auto;left:24px}.btn-floating i{width:inherit;display:inline-block;text-align:center;color:#fff;font-size:1.6rem;line-height:40px}button.btn-floating{border:none}.fixed-action-btn{position:fixed;right:23px;bottom:23px;padding-top:15px;margin-bottom:0;z-index:997}.fixed-action-btn.active ul{visibility:visible}.fixed-action-btn.direction-left,.fixed-action-btn.direction-right{padding:0 0 0 15px}.fixed-action-btn.direction-left ul,.fixed-action-btn.direction-right ul{text-align:right;right:64px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);height:100%;left:auto;width:500px}.fixed-action-btn.direction-left ul li,.fixed-action-btn.direction-right ul li{display:inline-block;margin:7.5px 15px 0 0}.fixed-action-btn.direction-right{padding:0 15px 0 0}.fixed-action-btn.direction-right ul{text-align:left;direction:rtl;left:64px;right:auto}.fixed-action-btn.direction-right ul li{margin:7.5px 0 0 15px}.fixed-action-btn.direction-bottom{padding:0 0 15px 0}.fixed-action-btn.direction-bottom ul{top:64px;bottom:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.fixed-action-btn.direction-bottom ul li{margin:15px 0 0 0}.fixed-action-btn.toolbar{padding:0;height:56px}.fixed-action-btn.toolbar.active>a i{opacity:0}.fixed-action-btn.toolbar ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;top:0;bottom:0;z-index:1}.fixed-action-btn.toolbar ul li{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;display:inline-block;margin:0;height:100%;-webkit-transition:none;transition:none}.fixed-action-btn.toolbar ul li a{display:block;overflow:hidden;position:relative;width:100%;height:100%;background-color:transparent;-webkit-box-shadow:none;box-shadow:none;color:#fff;line-height:56px;z-index:1}.fixed-action-btn.toolbar ul li a i{line-height:inherit}.fixed-action-btn ul{left:0;right:0;text-align:center;position:absolute;bottom:64px;margin:0;visibility:hidden}.fixed-action-btn ul li{margin-bottom:15px}.fixed-action-btn ul a.btn-floating{opacity:0}.fixed-action-btn .fab-backdrop{position:absolute;top:0;left:0;z-index:-1;width:40px;height:40px;background-color:#26a69a;border-radius:50%;-webkit-transform:scale(0);transform:scale(0)}.btn-flat{-webkit-box-shadow:none;box-shadow:none;background-color:transparent;color:#343434;cursor:pointer;-webkit-transition:background-color .2s;transition:background-color .2s}.btn-flat:focus,.btn-flat:hover{-webkit-box-shadow:none;box-shadow:none}.btn-flat:focus{background-color:rgba(0,0,0,0.1)}.btn-flat.disabled,.btn-flat.btn-flat[disabled]{background-color:transparent !important;color:#b3b2b2 !important;cursor:default}.btn-large{height:54px;line-height:54px;font-size:15px;padding:0 28px}.btn-large i{font-size:1.6rem}.btn-small{height:32.4px;line-height:32.4px;font-size:13px}.btn-small i{font-size:1.2rem}.btn-block{display:block}.dropdown-content{background-color:#fff;margin:0;display:none;min-width:100px;overflow-y:auto;opacity:0;position:absolute;left:0;top:0;z-index:9999;-webkit-transform-origin:0 0;transform-origin:0 0}.dropdown-content:focus{outline:0}.dropdown-content li{clear:both;color:rgba(0,0,0,0.87);cursor:pointer;min-height:50px;line-height:1.5rem;width:100%;text-align:left}.dropdown-content li:hover,.dropdown-content li.active{background-color:#eee}.dropdown-content li:focus{outline:none}.dropdown-content li.divider{min-height:0;height:1px}.dropdown-content li>a,.dropdown-content li>span{font-size:16px;color:#26a69a;display:block;line-height:22px;padding:14px 16px}.dropdown-content li>span>label{top:1px;left:0;height:18px}.dropdown-content li>a>i{height:inherit;line-height:inherit;float:left;margin:0 24px 0 0;width:24px}body.keyboard-focused .dropdown-content li:focus{background-color:#dadada}.input-field.col .dropdown-content [type="checkbox"]+label{top:1px;left:0;height:18px;-webkit-transform:none;transform:none}.dropdown-trigger{cursor:pointer}/*! - * Waves v0.6.0 - * http://fian.my.id/Waves - * - * Copyright 2014 Alfiana E. Sibuea and other contributors - * Released under the MIT license - * https://github.com/fians/Waves/blob/master/LICENSE - */.waves-effect{position:relative;cursor:pointer;display:inline-block;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;vertical-align:middle;z-index:1;-webkit-transition:.3s ease-out;transition:.3s ease-out}.waves-effect .waves-ripple{position:absolute;border-radius:50%;width:20px;height:20px;margin-top:-10px;margin-left:-10px;opacity:0;background:rgba(0,0,0,0.2);-webkit-transition:all 0.7s ease-out;transition:all 0.7s ease-out;-webkit-transition-property:opacity, -webkit-transform;transition-property:opacity, -webkit-transform;transition-property:transform, opacity;transition-property:transform, opacity, -webkit-transform;-webkit-transform:scale(0);transform:scale(0);pointer-events:none}.waves-effect.waves-light .waves-ripple{background-color:rgba(255,255,255,0.45)}.waves-effect.waves-red .waves-ripple{background-color:rgba(244,67,54,0.7)}.waves-effect.waves-yellow .waves-ripple{background-color:rgba(255,235,59,0.7)}.waves-effect.waves-orange .waves-ripple{background-color:rgba(255,152,0,0.7)}.waves-effect.waves-purple .waves-ripple{background-color:rgba(156,39,176,0.7)}.waves-effect.waves-green .waves-ripple{background-color:rgba(76,175,80,0.7)}.waves-effect.waves-teal .waves-ripple{background-color:rgba(0,150,136,0.7)}.waves-effect input[type="button"],.waves-effect input[type="reset"],.waves-effect input[type="submit"]{border:0;font-style:normal;font-size:inherit;text-transform:inherit;background:none}.waves-effect img{position:relative;z-index:-1}.waves-notransition{-webkit-transition:none !important;transition:none !important}.waves-circle{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-mask-image:-webkit-radial-gradient(circle, white 100%, black 100%)}.waves-input-wrapper{border-radius:0.2em;vertical-align:bottom}.waves-input-wrapper .waves-button-input{position:relative;top:0;left:0;z-index:1}.waves-circle{text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%;-webkit-mask-image:none}.waves-block{display:block}.waves-effect .waves-ripple{z-index:-1}.modal{display:none;position:fixed;left:0;right:0;background-color:#fafafa;padding:0;max-height:70%;width:55%;margin:auto;overflow-y:auto;border-radius:2px;will-change:top, opacity}.modal:focus{outline:none}@media only screen and (max-width: 992px){.modal{width:80%}}.modal h1,.modal h2,.modal h3,.modal h4{margin-top:0}.modal .modal-content{padding:24px}.modal .modal-close{cursor:pointer}.modal .modal-footer{border-radius:0 0 2px 2px;background-color:#fafafa;padding:4px 6px;height:56px;width:100%;text-align:right}.modal .modal-footer .btn,.modal .modal-footer .btn-large,.modal .modal-footer .btn-small,.modal .modal-footer .btn-flat{margin:6px 0}.modal-overlay{position:fixed;z-index:999;top:-25%;left:0;bottom:0;right:0;height:125%;width:100%;background:#000;display:none;will-change:opacity}.modal.modal-fixed-footer{padding:0;height:70%}.modal.modal-fixed-footer .modal-content{position:absolute;height:calc(100% - 56px);max-height:100%;width:100%;overflow-y:auto}.modal.modal-fixed-footer .modal-footer{border-top:1px solid rgba(0,0,0,0.1);position:absolute;bottom:0}.modal.bottom-sheet{top:auto;bottom:-100%;margin:0;width:100%;max-height:45%;border-radius:0;will-change:bottom, opacity}.collapsible{border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;margin:.5rem 0 1rem 0}.collapsible-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;cursor:pointer;-webkit-tap-highlight-color:transparent;line-height:1.5;padding:1rem;background-color:#fff;border-bottom:1px solid #ddd}.collapsible-header:focus{outline:0}.collapsible-header i{width:2rem;font-size:1.6rem;display:inline-block;text-align:center;margin-right:1rem}.keyboard-focused .collapsible-header:focus{background-color:#eee}.collapsible-body{display:none;border-bottom:1px solid #ddd;-webkit-box-sizing:border-box;box-sizing:border-box;padding:2rem}.sidenav .collapsible,.sidenav.fixed .collapsible{border:none;-webkit-box-shadow:none;box-shadow:none}.sidenav .collapsible li,.sidenav.fixed .collapsible li{padding:0}.sidenav .collapsible-header,.sidenav.fixed .collapsible-header{background-color:transparent;border:none;line-height:inherit;height:inherit;padding:0 16px}.sidenav .collapsible-header:hover,.sidenav.fixed .collapsible-header:hover{background-color:rgba(0,0,0,0.05)}.sidenav .collapsible-header i,.sidenav.fixed .collapsible-header i{line-height:inherit}.sidenav .collapsible-body,.sidenav.fixed .collapsible-body{border:0;background-color:#fff}.sidenav .collapsible-body li a,.sidenav.fixed .collapsible-body li a{padding:0 23.5px 0 31px}.collapsible.popout{border:none;-webkit-box-shadow:none;box-shadow:none}.collapsible.popout>li{-webkit-box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);margin:0 24px;-webkit-transition:margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);transition:margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94)}.collapsible.popout>li.active{-webkit-box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15);box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15);margin:16px 0}.chip{display:inline-block;height:32px;font-size:13px;font-weight:500;color:rgba(0,0,0,0.6);line-height:32px;padding:0 12px;border-radius:16px;background-color:#e4e4e4;margin-bottom:5px;margin-right:5px}.chip:focus{outline:none;background-color:#26a69a;color:#fff}.chip>img{float:left;margin:0 8px 0 -12px;height:32px;width:32px;border-radius:50%}.chip .close{cursor:pointer;float:right;font-size:16px;line-height:32px;padding-left:8px}.chips{border:none;border-bottom:1px solid #9e9e9e;-webkit-box-shadow:none;box-shadow:none;margin:0 0 8px 0;min-height:45px;outline:none;-webkit-transition:all .3s;transition:all .3s}.chips.focus{border-bottom:1px solid #26a69a;-webkit-box-shadow:0 1px 0 0 #26a69a;box-shadow:0 1px 0 0 #26a69a}.chips:hover{cursor:text}.chips .input{background:none;border:0;color:rgba(0,0,0,0.6);display:inline-block;font-size:16px;height:3rem;line-height:32px;outline:0;margin:0;padding:0 !important;width:120px !important}.chips .input:focus{border:0 !important;-webkit-box-shadow:none !important;box-shadow:none !important}.chips .autocomplete-content{margin-top:0;margin-bottom:0}.prefix ~ .chips{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.chips:empty ~ label{font-size:0.8rem;-webkit-transform:translateY(-140%);transform:translateY(-140%)}.materialboxed{display:block;cursor:-webkit-zoom-in;cursor:zoom-in;position:relative;-webkit-transition:opacity .4s;transition:opacity .4s;-webkit-backface-visibility:hidden}.materialboxed:hover:not(.active){opacity:.8}.materialboxed.active{cursor:-webkit-zoom-out;cursor:zoom-out}#materialbox-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#292929;z-index:1000;will-change:opacity}.materialbox-caption{position:fixed;display:none;color:#fff;line-height:50px;bottom:0;left:0;width:100%;text-align:center;padding:0% 15%;height:50px;z-index:1000;-webkit-font-smoothing:antialiased}select:focus{outline:1px solid #c9f3ef}button:focus{outline:none;background-color:#2ab7a9}label{font-size:.8rem;color:#9e9e9e}::-webkit-input-placeholder{color:#d1d1d1}::-moz-placeholder{color:#d1d1d1}:-ms-input-placeholder{color:#d1d1d1}::-ms-input-placeholder{color:#d1d1d1}::placeholder{color:#d1d1d1}input:not([type]),input[type=text]:not(.browser-default),input[type=password]:not(.browser-default),input[type=email]:not(.browser-default),input[type=url]:not(.browser-default),input[type=time]:not(.browser-default),input[type=date]:not(.browser-default),input[type=datetime]:not(.browser-default),input[type=datetime-local]:not(.browser-default),input[type=tel]:not(.browser-default),input[type=number]:not(.browser-default),input[type=search]:not(.browser-default),textarea.materialize-textarea{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:3rem;width:100%;font-size:16px;margin:0 0 8px 0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-transition:border .3s, -webkit-box-shadow .3s;transition:border .3s, -webkit-box-shadow .3s;transition:box-shadow .3s, border .3s;transition:box-shadow .3s, border .3s, -webkit-box-shadow .3s}input:not([type]):disabled,input:not([type])[readonly="readonly"],input[type=text]:not(.browser-default):disabled,input[type=text]:not(.browser-default)[readonly="readonly"],input[type=password]:not(.browser-default):disabled,input[type=password]:not(.browser-default)[readonly="readonly"],input[type=email]:not(.browser-default):disabled,input[type=email]:not(.browser-default)[readonly="readonly"],input[type=url]:not(.browser-default):disabled,input[type=url]:not(.browser-default)[readonly="readonly"],input[type=time]:not(.browser-default):disabled,input[type=time]:not(.browser-default)[readonly="readonly"],input[type=date]:not(.browser-default):disabled,input[type=date]:not(.browser-default)[readonly="readonly"],input[type=datetime]:not(.browser-default):disabled,input[type=datetime]:not(.browser-default)[readonly="readonly"],input[type=datetime-local]:not(.browser-default):disabled,input[type=datetime-local]:not(.browser-default)[readonly="readonly"],input[type=tel]:not(.browser-default):disabled,input[type=tel]:not(.browser-default)[readonly="readonly"],input[type=number]:not(.browser-default):disabled,input[type=number]:not(.browser-default)[readonly="readonly"],input[type=search]:not(.browser-default):disabled,input[type=search]:not(.browser-default)[readonly="readonly"],textarea.materialize-textarea:disabled,textarea.materialize-textarea[readonly="readonly"]{color:rgba(0,0,0,0.42);border-bottom:1px dotted rgba(0,0,0,0.42)}input:not([type]):disabled+label,input:not([type])[readonly="readonly"]+label,input[type=text]:not(.browser-default):disabled+label,input[type=text]:not(.browser-default)[readonly="readonly"]+label,input[type=password]:not(.browser-default):disabled+label,input[type=password]:not(.browser-default)[readonly="readonly"]+label,input[type=email]:not(.browser-default):disabled+label,input[type=email]:not(.browser-default)[readonly="readonly"]+label,input[type=url]:not(.browser-default):disabled+label,input[type=url]:not(.browser-default)[readonly="readonly"]+label,input[type=time]:not(.browser-default):disabled+label,input[type=time]:not(.browser-default)[readonly="readonly"]+label,input[type=date]:not(.browser-default):disabled+label,input[type=date]:not(.browser-default)[readonly="readonly"]+label,input[type=datetime]:not(.browser-default):disabled+label,input[type=datetime]:not(.browser-default)[readonly="readonly"]+label,input[type=datetime-local]:not(.browser-default):disabled+label,input[type=datetime-local]:not(.browser-default)[readonly="readonly"]+label,input[type=tel]:not(.browser-default):disabled+label,input[type=tel]:not(.browser-default)[readonly="readonly"]+label,input[type=number]:not(.browser-default):disabled+label,input[type=number]:not(.browser-default)[readonly="readonly"]+label,input[type=search]:not(.browser-default):disabled+label,input[type=search]:not(.browser-default)[readonly="readonly"]+label,textarea.materialize-textarea:disabled+label,textarea.materialize-textarea[readonly="readonly"]+label{color:rgba(0,0,0,0.42)}input:not([type]):focus:not([readonly]),input[type=text]:not(.browser-default):focus:not([readonly]),input[type=password]:not(.browser-default):focus:not([readonly]),input[type=email]:not(.browser-default):focus:not([readonly]),input[type=url]:not(.browser-default):focus:not([readonly]),input[type=time]:not(.browser-default):focus:not([readonly]),input[type=date]:not(.browser-default):focus:not([readonly]),input[type=datetime]:not(.browser-default):focus:not([readonly]),input[type=datetime-local]:not(.browser-default):focus:not([readonly]),input[type=tel]:not(.browser-default):focus:not([readonly]),input[type=number]:not(.browser-default):focus:not([readonly]),input[type=search]:not(.browser-default):focus:not([readonly]),textarea.materialize-textarea:focus:not([readonly]){border-bottom:1px solid #26a69a;-webkit-box-shadow:0 1px 0 0 #26a69a;box-shadow:0 1px 0 0 #26a69a}input:not([type]):focus:not([readonly])+label,input[type=text]:not(.browser-default):focus:not([readonly])+label,input[type=password]:not(.browser-default):focus:not([readonly])+label,input[type=email]:not(.browser-default):focus:not([readonly])+label,input[type=url]:not(.browser-default):focus:not([readonly])+label,input[type=time]:not(.browser-default):focus:not([readonly])+label,input[type=date]:not(.browser-default):focus:not([readonly])+label,input[type=datetime]:not(.browser-default):focus:not([readonly])+label,input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,input[type=tel]:not(.browser-default):focus:not([readonly])+label,input[type=number]:not(.browser-default):focus:not([readonly])+label,input[type=search]:not(.browser-default):focus:not([readonly])+label,textarea.materialize-textarea:focus:not([readonly])+label{color:#26a69a}input:not([type]):focus.valid ~ label,input[type=text]:not(.browser-default):focus.valid ~ label,input[type=password]:not(.browser-default):focus.valid ~ label,input[type=email]:not(.browser-default):focus.valid ~ label,input[type=url]:not(.browser-default):focus.valid ~ label,input[type=time]:not(.browser-default):focus.valid ~ label,input[type=date]:not(.browser-default):focus.valid ~ label,input[type=datetime]:not(.browser-default):focus.valid ~ label,input[type=datetime-local]:not(.browser-default):focus.valid ~ label,input[type=tel]:not(.browser-default):focus.valid ~ label,input[type=number]:not(.browser-default):focus.valid ~ label,input[type=search]:not(.browser-default):focus.valid ~ label,textarea.materialize-textarea:focus.valid ~ label{color:#4CAF50}input:not([type]):focus.invalid ~ label,input[type=text]:not(.browser-default):focus.invalid ~ label,input[type=password]:not(.browser-default):focus.invalid ~ label,input[type=email]:not(.browser-default):focus.invalid ~ label,input[type=url]:not(.browser-default):focus.invalid ~ label,input[type=time]:not(.browser-default):focus.invalid ~ label,input[type=date]:not(.browser-default):focus.invalid ~ label,input[type=datetime]:not(.browser-default):focus.invalid ~ label,input[type=datetime-local]:not(.browser-default):focus.invalid ~ label,input[type=tel]:not(.browser-default):focus.invalid ~ label,input[type=number]:not(.browser-default):focus.invalid ~ label,input[type=search]:not(.browser-default):focus.invalid ~ label,textarea.materialize-textarea:focus.invalid ~ label{color:#F44336}input:not([type]).validate+label,input[type=text]:not(.browser-default).validate+label,input[type=password]:not(.browser-default).validate+label,input[type=email]:not(.browser-default).validate+label,input[type=url]:not(.browser-default).validate+label,input[type=time]:not(.browser-default).validate+label,input[type=date]:not(.browser-default).validate+label,input[type=datetime]:not(.browser-default).validate+label,input[type=datetime-local]:not(.browser-default).validate+label,input[type=tel]:not(.browser-default).validate+label,input[type=number]:not(.browser-default).validate+label,input[type=search]:not(.browser-default).validate+label,textarea.materialize-textarea.validate+label{width:100%}input.valid:not([type]),input.valid:not([type]):focus,input.valid[type=text]:not(.browser-default),input.valid[type=text]:not(.browser-default):focus,input.valid[type=password]:not(.browser-default),input.valid[type=password]:not(.browser-default):focus,input.valid[type=email]:not(.browser-default),input.valid[type=email]:not(.browser-default):focus,input.valid[type=url]:not(.browser-default),input.valid[type=url]:not(.browser-default):focus,input.valid[type=time]:not(.browser-default),input.valid[type=time]:not(.browser-default):focus,input.valid[type=date]:not(.browser-default),input.valid[type=date]:not(.browser-default):focus,input.valid[type=datetime]:not(.browser-default),input.valid[type=datetime]:not(.browser-default):focus,input.valid[type=datetime-local]:not(.browser-default),input.valid[type=datetime-local]:not(.browser-default):focus,input.valid[type=tel]:not(.browser-default),input.valid[type=tel]:not(.browser-default):focus,input.valid[type=number]:not(.browser-default),input.valid[type=number]:not(.browser-default):focus,input.valid[type=search]:not(.browser-default),input.valid[type=search]:not(.browser-default):focus,textarea.materialize-textarea.valid,textarea.materialize-textarea.valid:focus,.select-wrapper.valid>input.select-dropdown{border-bottom:1px solid #4CAF50;-webkit-box-shadow:0 1px 0 0 #4CAF50;box-shadow:0 1px 0 0 #4CAF50}input.invalid:not([type]),input.invalid:not([type]):focus,input.invalid[type=text]:not(.browser-default),input.invalid[type=text]:not(.browser-default):focus,input.invalid[type=password]:not(.browser-default),input.invalid[type=password]:not(.browser-default):focus,input.invalid[type=email]:not(.browser-default),input.invalid[type=email]:not(.browser-default):focus,input.invalid[type=url]:not(.browser-default),input.invalid[type=url]:not(.browser-default):focus,input.invalid[type=time]:not(.browser-default),input.invalid[type=time]:not(.browser-default):focus,input.invalid[type=date]:not(.browser-default),input.invalid[type=date]:not(.browser-default):focus,input.invalid[type=datetime]:not(.browser-default),input.invalid[type=datetime]:not(.browser-default):focus,input.invalid[type=datetime-local]:not(.browser-default),input.invalid[type=datetime-local]:not(.browser-default):focus,input.invalid[type=tel]:not(.browser-default),input.invalid[type=tel]:not(.browser-default):focus,input.invalid[type=number]:not(.browser-default),input.invalid[type=number]:not(.browser-default):focus,input.invalid[type=search]:not(.browser-default),input.invalid[type=search]:not(.browser-default):focus,textarea.materialize-textarea.invalid,textarea.materialize-textarea.invalid:focus,.select-wrapper.invalid>input.select-dropdown,.select-wrapper.invalid>input.select-dropdown:focus{border-bottom:1px solid #F44336;-webkit-box-shadow:0 1px 0 0 #F44336;box-shadow:0 1px 0 0 #F44336}input:not([type]).valid ~ .helper-text[data-success],input:not([type]):focus.valid ~ .helper-text[data-success],input:not([type]).invalid ~ .helper-text[data-error],input:not([type]):focus.invalid ~ .helper-text[data-error],input[type=text]:not(.browser-default).valid ~ .helper-text[data-success],input[type=text]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=text]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=text]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=password]:not(.browser-default).valid ~ .helper-text[data-success],input[type=password]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=password]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=password]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=email]:not(.browser-default).valid ~ .helper-text[data-success],input[type=email]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=email]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=email]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=url]:not(.browser-default).valid ~ .helper-text[data-success],input[type=url]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=url]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=url]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=time]:not(.browser-default).valid ~ .helper-text[data-success],input[type=time]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=time]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=time]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=date]:not(.browser-default).valid ~ .helper-text[data-success],input[type=date]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=date]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=date]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=datetime]:not(.browser-default).valid ~ .helper-text[data-success],input[type=datetime]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=datetime]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=datetime-local]:not(.browser-default).valid ~ .helper-text[data-success],input[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=datetime-local]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=tel]:not(.browser-default).valid ~ .helper-text[data-success],input[type=tel]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=tel]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=tel]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=number]:not(.browser-default).valid ~ .helper-text[data-success],input[type=number]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=number]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=number]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=search]:not(.browser-default).valid ~ .helper-text[data-success],input[type=search]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=search]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=search]:not(.browser-default):focus.invalid ~ .helper-text[data-error],textarea.materialize-textarea.valid ~ .helper-text[data-success],textarea.materialize-textarea:focus.valid ~ .helper-text[data-success],textarea.materialize-textarea.invalid ~ .helper-text[data-error],textarea.materialize-textarea:focus.invalid ~ .helper-text[data-error],.select-wrapper.valid .helper-text[data-success],.select-wrapper.invalid ~ .helper-text[data-error]{color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}input:not([type]).valid ~ .helper-text:after,input:not([type]):focus.valid ~ .helper-text:after,input[type=text]:not(.browser-default).valid ~ .helper-text:after,input[type=text]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=password]:not(.browser-default).valid ~ .helper-text:after,input[type=password]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=email]:not(.browser-default).valid ~ .helper-text:after,input[type=email]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=url]:not(.browser-default).valid ~ .helper-text:after,input[type=url]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=time]:not(.browser-default).valid ~ .helper-text:after,input[type=time]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=date]:not(.browser-default).valid ~ .helper-text:after,input[type=date]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=datetime]:not(.browser-default).valid ~ .helper-text:after,input[type=datetime]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=datetime-local]:not(.browser-default).valid ~ .helper-text:after,input[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=tel]:not(.browser-default).valid ~ .helper-text:after,input[type=tel]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=number]:not(.browser-default).valid ~ .helper-text:after,input[type=number]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=search]:not(.browser-default).valid ~ .helper-text:after,input[type=search]:not(.browser-default):focus.valid ~ .helper-text:after,textarea.materialize-textarea.valid ~ .helper-text:after,textarea.materialize-textarea:focus.valid ~ .helper-text:after,.select-wrapper.valid ~ .helper-text:after{content:attr(data-success);color:#4CAF50}input:not([type]).invalid ~ .helper-text:after,input:not([type]):focus.invalid ~ .helper-text:after,input[type=text]:not(.browser-default).invalid ~ .helper-text:after,input[type=text]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=password]:not(.browser-default).invalid ~ .helper-text:after,input[type=password]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=email]:not(.browser-default).invalid ~ .helper-text:after,input[type=email]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=url]:not(.browser-default).invalid ~ .helper-text:after,input[type=url]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=time]:not(.browser-default).invalid ~ .helper-text:after,input[type=time]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=date]:not(.browser-default).invalid ~ .helper-text:after,input[type=date]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=datetime]:not(.browser-default).invalid ~ .helper-text:after,input[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=datetime-local]:not(.browser-default).invalid ~ .helper-text:after,input[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=tel]:not(.browser-default).invalid ~ .helper-text:after,input[type=tel]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=number]:not(.browser-default).invalid ~ .helper-text:after,input[type=number]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=search]:not(.browser-default).invalid ~ .helper-text:after,input[type=search]:not(.browser-default):focus.invalid ~ .helper-text:after,textarea.materialize-textarea.invalid ~ .helper-text:after,textarea.materialize-textarea:focus.invalid ~ .helper-text:after,.select-wrapper.invalid ~ .helper-text:after{content:attr(data-error);color:#F44336}input:not([type])+label:after,input[type=text]:not(.browser-default)+label:after,input[type=password]:not(.browser-default)+label:after,input[type=email]:not(.browser-default)+label:after,input[type=url]:not(.browser-default)+label:after,input[type=time]:not(.browser-default)+label:after,input[type=date]:not(.browser-default)+label:after,input[type=datetime]:not(.browser-default)+label:after,input[type=datetime-local]:not(.browser-default)+label:after,input[type=tel]:not(.browser-default)+label:after,input[type=number]:not(.browser-default)+label:after,input[type=search]:not(.browser-default)+label:after,textarea.materialize-textarea+label:after,.select-wrapper+label:after{display:block;content:"";position:absolute;top:100%;left:0;opacity:0;-webkit-transition:.2s opacity ease-out, .2s color ease-out;transition:.2s opacity ease-out, .2s color ease-out}.input-field{position:relative;margin-top:1rem;margin-bottom:1rem}.input-field.inline{display:inline-block;vertical-align:middle;margin-left:5px}.input-field.inline input,.input-field.inline .select-dropdown{margin-bottom:1rem}.input-field.col label{left:.75rem}.input-field.col .prefix ~ label,.input-field.col .prefix ~ .validate ~ label{width:calc(100% - 3rem - 1.5rem)}.input-field>label{color:#9e9e9e;position:absolute;top:0;left:0;font-size:1rem;cursor:text;-webkit-transition:color .2s ease-out, -webkit-transform .2s ease-out;transition:color .2s ease-out, -webkit-transform .2s ease-out;transition:transform .2s ease-out, color .2s ease-out;transition:transform .2s ease-out, color .2s ease-out, -webkit-transform .2s ease-out;-webkit-transform-origin:0% 100%;transform-origin:0% 100%;text-align:initial;-webkit-transform:translateY(12px);transform:translateY(12px)}.input-field>label:not(.label-icon).active{-webkit-transform:translateY(-14px) scale(0.8);transform:translateY(-14px) scale(0.8);-webkit-transform-origin:0 0;transform-origin:0 0}.input-field>input[type]:-webkit-autofill:not(.browser-default):not([type="search"])+label,.input-field>input[type=date]:not(.browser-default)+label,.input-field>input[type=time]:not(.browser-default)+label{-webkit-transform:translateY(-14px) scale(0.8);transform:translateY(-14px) scale(0.8);-webkit-transform-origin:0 0;transform-origin:0 0}.input-field .helper-text{position:relative;min-height:18px;display:block;font-size:12px;color:rgba(0,0,0,0.54)}.input-field .helper-text::after{opacity:1;position:absolute;top:0;left:0}.input-field .prefix{position:absolute;width:3rem;font-size:2rem;-webkit-transition:color .2s;transition:color .2s;top:.5rem}.input-field .prefix.active{color:#26a69a}.input-field .prefix ~ input,.input-field .prefix ~ textarea,.input-field .prefix ~ label,.input-field .prefix ~ .validate ~ label,.input-field .prefix ~ .helper-text,.input-field .prefix ~ .autocomplete-content{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.input-field .prefix ~ label{margin-left:3rem}@media only screen and (max-width: 992px){.input-field .prefix ~ input{width:86%;width:calc(100% - 3rem)}}@media only screen and (max-width: 600px){.input-field .prefix ~ input{width:80%;width:calc(100% - 3rem)}}.input-field input[type=search]{display:block;line-height:inherit;-webkit-transition:.3s background-color;transition:.3s background-color}.nav-wrapper .input-field input[type=search]{height:inherit;padding-left:4rem;width:calc(100% - 4rem);border:0;-webkit-box-shadow:none;box-shadow:none}.input-field input[type=search]:focus:not(.browser-default){background-color:#fff;border:0;-webkit-box-shadow:none;box-shadow:none;color:#444}.input-field input[type=search]:focus:not(.browser-default)+label i,.input-field input[type=search]:focus:not(.browser-default) ~ .mdi-navigation-close,.input-field input[type=search]:focus:not(.browser-default) ~ .material-icons{color:#444}.input-field input[type=search]+.label-icon{-webkit-transform:none;transform:none;left:1rem}.input-field input[type=search] ~ .mdi-navigation-close,.input-field input[type=search] ~ .material-icons{position:absolute;top:0;right:1rem;color:transparent;cursor:pointer;font-size:2rem;-webkit-transition:.3s color;transition:.3s color}textarea{width:100%;height:3rem;background-color:transparent}textarea.materialize-textarea{line-height:normal;overflow-y:hidden;padding:.8rem 0 .8rem 0;resize:none;min-height:3rem;-webkit-box-sizing:border-box;box-sizing:border-box}.hiddendiv{visibility:hidden;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;padding-top:1.2rem;position:absolute;top:0;z-index:-1}.autocomplete-content li .highlight{color:#444}.autocomplete-content li img{height:40px;width:40px;margin:5px 15px}.character-counter{min-height:18px}[type="radio"]:not(:checked),[type="radio"]:checked{position:absolute;opacity:0;pointer-events:none}[type="radio"]:not(:checked)+span,[type="radio"]:checked+span{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-transition:.28s ease;transition:.28s ease;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[type="radio"]+span:before,[type="radio"]+span:after{content:'';position:absolute;left:0;top:0;margin:4px;width:16px;height:16px;z-index:0;-webkit-transition:.28s ease;transition:.28s ease}[type="radio"]:not(:checked)+span:before,[type="radio"]:not(:checked)+span:after,[type="radio"]:checked+span:before,[type="radio"]:checked+span:after,[type="radio"].with-gap:checked+span:before,[type="radio"].with-gap:checked+span:after{border-radius:50%}[type="radio"]:not(:checked)+span:before,[type="radio"]:not(:checked)+span:after{border:2px solid #5a5a5a}[type="radio"]:not(:checked)+span:after{-webkit-transform:scale(0);transform:scale(0)}[type="radio"]:checked+span:before{border:2px solid transparent}[type="radio"]:checked+span:after,[type="radio"].with-gap:checked+span:before,[type="radio"].with-gap:checked+span:after{border:2px solid #26a69a}[type="radio"]:checked+span:after,[type="radio"].with-gap:checked+span:after{background-color:#26a69a}[type="radio"]:checked+span:after{-webkit-transform:scale(1.02);transform:scale(1.02)}[type="radio"].with-gap:checked+span:after{-webkit-transform:scale(0.5);transform:scale(0.5)}[type="radio"].tabbed:focus+span:before{-webkit-box-shadow:0 0 0 10px rgba(0,0,0,0.1);box-shadow:0 0 0 10px rgba(0,0,0,0.1)}[type="radio"].with-gap:disabled:checked+span:before{border:2px solid rgba(0,0,0,0.42)}[type="radio"].with-gap:disabled:checked+span:after{border:none;background-color:rgba(0,0,0,0.42)}[type="radio"]:disabled:not(:checked)+span:before,[type="radio"]:disabled:checked+span:before{background-color:transparent;border-color:rgba(0,0,0,0.42)}[type="radio"]:disabled+span{color:rgba(0,0,0,0.42)}[type="radio"]:disabled:not(:checked)+span:before{border-color:rgba(0,0,0,0.42)}[type="radio"]:disabled:checked+span:after{background-color:rgba(0,0,0,0.42);border-color:#949494}[type="checkbox"]:not(:checked),[type="checkbox"]:checked{position:absolute;opacity:0;pointer-events:none}[type="checkbox"]+span:not(.lever){position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[type="checkbox"]+span:not(.lever):before,[type="checkbox"]:not(.filled-in)+span:not(.lever):after{content:'';position:absolute;top:0;left:0;width:18px;height:18px;z-index:0;border:2px solid #5a5a5a;border-radius:1px;margin-top:3px;-webkit-transition:.2s;transition:.2s}[type="checkbox"]:not(.filled-in)+span:not(.lever):after{border:0;-webkit-transform:scale(0);transform:scale(0)}[type="checkbox"]:not(:checked):disabled+span:not(.lever):before{border:none;background-color:rgba(0,0,0,0.42)}[type="checkbox"].tabbed:focus+span:not(.lever):after{-webkit-transform:scale(1);transform:scale(1);border:0;border-radius:50%;-webkit-box-shadow:0 0 0 10px rgba(0,0,0,0.1);box-shadow:0 0 0 10px rgba(0,0,0,0.1);background-color:rgba(0,0,0,0.1)}[type="checkbox"]:checked+span:not(.lever):before{top:-4px;left:-5px;width:12px;height:22px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #26a69a;border-bottom:2px solid #26a69a;-webkit-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:checked:disabled+span:before{border-right:2px solid rgba(0,0,0,0.42);border-bottom:2px solid rgba(0,0,0,0.42)}[type="checkbox"]:indeterminate+span:not(.lever):before{top:-11px;left:-12px;width:10px;height:22px;border-top:none;border-left:none;border-right:2px solid #26a69a;border-bottom:none;-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:indeterminate:disabled+span:not(.lever):before{border-right:2px solid rgba(0,0,0,0.42);background-color:transparent}[type="checkbox"].filled-in+span:not(.lever):after{border-radius:2px}[type="checkbox"].filled-in+span:not(.lever):before,[type="checkbox"].filled-in+span:not(.lever):after{content:'';left:0;position:absolute;-webkit-transition:border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;transition:border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;z-index:1}[type="checkbox"].filled-in:not(:checked)+span:not(.lever):before{width:0;height:0;border:3px solid transparent;left:6px;top:10px;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"].filled-in:not(:checked)+span:not(.lever):after{height:20px;width:20px;background-color:transparent;border:2px solid #5a5a5a;top:0px;z-index:0}[type="checkbox"].filled-in:checked+span:not(.lever):before{top:0;left:1px;width:8px;height:13px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #fff;border-bottom:2px solid #fff;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"].filled-in:checked+span:not(.lever):after{top:0;width:20px;height:20px;border:2px solid #26a69a;background-color:#26a69a;z-index:0}[type="checkbox"].filled-in.tabbed:focus+span:not(.lever):after{border-radius:2px;border-color:#5a5a5a;background-color:rgba(0,0,0,0.1)}[type="checkbox"].filled-in.tabbed:checked:focus+span:not(.lever):after{border-radius:2px;background-color:#26a69a;border-color:#26a69a}[type="checkbox"].filled-in:disabled:not(:checked)+span:not(.lever):before{background-color:transparent;border:2px solid transparent}[type="checkbox"].filled-in:disabled:not(:checked)+span:not(.lever):after{border-color:transparent;background-color:#949494}[type="checkbox"].filled-in:disabled:checked+span:not(.lever):before{background-color:transparent}[type="checkbox"].filled-in:disabled:checked+span:not(.lever):after{background-color:#949494;border-color:#949494}.switch,.switch *{-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch label{cursor:pointer}.switch label input[type=checkbox]{opacity:0;width:0;height:0}.switch label input[type=checkbox]:checked+.lever{background-color:#84c7c1}.switch label input[type=checkbox]:checked+.lever:before,.switch label input[type=checkbox]:checked+.lever:after{left:18px}.switch label input[type=checkbox]:checked+.lever:after{background-color:#26a69a}.switch label .lever{content:"";display:inline-block;position:relative;width:36px;height:14px;background-color:rgba(0,0,0,0.38);border-radius:15px;margin-right:10px;-webkit-transition:background 0.3s ease;transition:background 0.3s ease;vertical-align:middle;margin:0 16px}.switch label .lever:before,.switch label .lever:after{content:"";position:absolute;display:inline-block;width:20px;height:20px;border-radius:50%;left:0;top:-3px;-webkit-transition:left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease;transition:left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease;transition:left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease;transition:left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease}.switch label .lever:before{background-color:rgba(38,166,154,0.15)}.switch label .lever:after{background-color:#F1F1F1;-webkit-box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12);box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}input[type=checkbox]:checked:not(:disabled) ~ .lever:active::before,input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before{-webkit-transform:scale(2.4);transform:scale(2.4);background-color:rgba(38,166,154,0.15)}input[type=checkbox]:not(:disabled) ~ .lever:active:before,input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before{-webkit-transform:scale(2.4);transform:scale(2.4);background-color:rgba(0,0,0,0.08)}.switch input[type=checkbox][disabled]+.lever{cursor:default;background-color:rgba(0,0,0,0.12)}.switch label input[type=checkbox][disabled]+.lever:after,.switch label input[type=checkbox][disabled]:checked+.lever:after{background-color:#949494}select{display:none}select.browser-default{display:block}select{background-color:rgba(255,255,255,0.9);width:100%;padding:5px;border:1px solid #f2f2f2;border-radius:2px;height:3rem}.select-label{position:absolute}.select-wrapper{position:relative}.select-wrapper.valid+label,.select-wrapper.invalid+label{width:100%;pointer-events:none}.select-wrapper input.select-dropdown{position:relative;cursor:pointer;background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;outline:none;height:3rem;line-height:3rem;width:100%;font-size:16px;margin:0 0 8px 0;padding:0;display:block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1}.select-wrapper input.select-dropdown:focus{border-bottom:1px solid #26a69a}.select-wrapper .caret{position:absolute;right:0;top:0;bottom:0;margin:auto 0;z-index:0;fill:rgba(0,0,0,0.87)}.select-wrapper+label{position:absolute;top:-26px;font-size:.8rem}select:disabled{color:rgba(0,0,0,0.42)}.select-wrapper.disabled+label{color:rgba(0,0,0,0.42)}.select-wrapper.disabled .caret{fill:rgba(0,0,0,0.42)}.select-wrapper input.select-dropdown:disabled{color:rgba(0,0,0,0.42);cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select-wrapper i{color:rgba(0,0,0,0.3)}.select-dropdown li.disabled,.select-dropdown li.disabled>span,.select-dropdown li.optgroup{color:rgba(0,0,0,0.3);background-color:transparent}body.keyboard-focused .select-dropdown.dropdown-content li:focus{background-color:rgba(0,0,0,0.08)}.select-dropdown.dropdown-content li:hover{background-color:rgba(0,0,0,0.08)}.select-dropdown.dropdown-content li.selected{background-color:rgba(0,0,0,0.03)}.prefix ~ .select-wrapper{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.prefix ~ label{margin-left:3rem}.select-dropdown li img{height:40px;width:40px;margin:5px 15px;float:right}.select-dropdown li.optgroup{border-top:1px solid #eee}.select-dropdown li.optgroup.selected>span{color:rgba(0,0,0,0.7)}.select-dropdown li.optgroup>span{color:rgba(0,0,0,0.4)}.select-dropdown li.optgroup ~ li.optgroup-option{padding-left:1rem}.file-field{position:relative}.file-field .file-path-wrapper{overflow:hidden;padding-left:10px}.file-field input.file-path{width:100%}.file-field .btn,.file-field .btn-large,.file-field .btn-small{float:left;height:3rem;line-height:3rem}.file-field span{cursor:pointer}.file-field input[type=file]{position:absolute;top:0;right:0;left:0;bottom:0;width:100%;margin:0;padding:0;font-size:20px;cursor:pointer;opacity:0;filter:alpha(opacity=0)}.file-field input[type=file]::-webkit-file-upload-button{display:none}.range-field{position:relative}input[type=range],input[type=range]+.thumb{cursor:pointer}input[type=range]{position:relative;background-color:transparent;border:none;outline:none;width:100%;margin:15px 0;padding:0}input[type=range]:focus{outline:none}input[type=range]+.thumb{position:absolute;top:10px;left:0;border:none;height:0;width:0;border-radius:50%;background-color:#26a69a;margin-left:7px;-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}input[type=range]+.thumb .value{display:block;width:30px;text-align:center;color:#26a69a;font-size:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}input[type=range]+.thumb.active{border-radius:50% 50% 50% 0}input[type=range]+.thumb.active .value{color:#fff;margin-left:-1px;margin-top:8px;font-size:10px}input[type=range]{-webkit-appearance:none}input[type=range]::-webkit-slider-runnable-track{height:3px;background:#c2c0c2;border:none}input[type=range]::-webkit-slider-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a;-webkit-transition:-webkit-box-shadow .3s;transition:-webkit-box-shadow .3s;transition:box-shadow .3s;transition:box-shadow .3s, -webkit-box-shadow .3s;-webkit-appearance:none;background-color:#26a69a;-webkit-transform-origin:50% 50%;transform-origin:50% 50%;margin:-5px 0 0 0}.keyboard-focused input[type=range]:focus:not(.active)::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 10px rgba(38,166,154,0.26);box-shadow:0 0 0 10px rgba(38,166,154,0.26)}input[type=range]{border:1px solid white}input[type=range]::-moz-range-track{height:3px;background:#c2c0c2;border:none}input[type=range]::-moz-focus-inner{border:0}input[type=range]::-moz-range-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a;-webkit-transition:-webkit-box-shadow .3s;transition:-webkit-box-shadow .3s;transition:box-shadow .3s;transition:box-shadow .3s, -webkit-box-shadow .3s;margin-top:-5px}input[type=range]:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}.keyboard-focused input[type=range]:focus:not(.active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(38,166,154,0.26)}input[type=range]::-ms-track{height:3px;background:transparent;border-color:transparent;border-width:6px 0;color:transparent}input[type=range]::-ms-fill-lower{background:#777}input[type=range]::-ms-fill-upper{background:#ddd}input[type=range]::-ms-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a;-webkit-transition:-webkit-box-shadow .3s;transition:-webkit-box-shadow .3s;transition:box-shadow .3s;transition:box-shadow .3s, -webkit-box-shadow .3s}.keyboard-focused input[type=range]:focus:not(.active)::-ms-thumb{box-shadow:0 0 0 10px rgba(38,166,154,0.26)}.table-of-contents.fixed{position:fixed}.table-of-contents li{padding:2px 0}.table-of-contents a{display:inline-block;font-weight:300;color:#757575;padding-left:16px;height:1.5rem;line-height:1.5rem;letter-spacing:.4;display:inline-block}.table-of-contents a:hover{color:#a8a8a8;padding-left:15px;border-left:1px solid #ee6e73}.table-of-contents a.active{font-weight:500;padding-left:14px;border-left:2px solid #ee6e73}.sidenav{position:fixed;width:300px;left:0;top:0;margin:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);height:100%;height:calc(100% + 60px);height:-moz-calc(100%);padding-bottom:60px;background-color:#fff;z-index:999;overflow-y:auto;will-change:transform;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateX(-105%);transform:translateX(-105%)}.sidenav.right-aligned{right:0;-webkit-transform:translateX(105%);transform:translateX(105%);left:auto;-webkit-transform:translateX(100%);transform:translateX(100%)}.sidenav .collapsible{margin:0}.sidenav li{float:none;line-height:48px}.sidenav li.active{background-color:rgba(0,0,0,0.05)}.sidenav li>a{color:rgba(0,0,0,0.87);display:block;font-size:14px;font-weight:500;height:48px;line-height:48px;padding:0 32px}.sidenav li>a:hover{background-color:rgba(0,0,0,0.05)}.sidenav li>a.btn,.sidenav li>a.btn-large,.sidenav li>a.btn-small,.sidenav li>a.btn-large,.sidenav li>a.btn-flat,.sidenav li>a.btn-floating{margin:10px 15px}.sidenav li>a.btn,.sidenav li>a.btn-large,.sidenav li>a.btn-small,.sidenav li>a.btn-large,.sidenav li>a.btn-floating{color:#fff}.sidenav li>a.btn-flat{color:#343434}.sidenav li>a.btn:hover,.sidenav li>a.btn-large:hover,.sidenav li>a.btn-small:hover,.sidenav li>a.btn-large:hover{background-color:#2bbbad}.sidenav li>a.btn-floating:hover{background-color:#26a69a}.sidenav li>a>i,.sidenav li>a>[class^="mdi-"],.sidenav li>a li>a>[class*="mdi-"],.sidenav li>a>i.material-icons{float:left;height:48px;line-height:48px;margin:0 32px 0 0;width:24px;color:rgba(0,0,0,0.54)}.sidenav .divider{margin:8px 0 0 0}.sidenav .subheader{cursor:initial;pointer-events:none;color:rgba(0,0,0,0.54);font-size:14px;font-weight:500;line-height:48px}.sidenav .subheader:hover{background-color:transparent}.sidenav .user-view{position:relative;padding:32px 32px 0;margin-bottom:8px}.sidenav .user-view>a{height:auto;padding:0}.sidenav .user-view>a:hover{background-color:transparent}.sidenav .user-view .background{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.sidenav .user-view .circle,.sidenav .user-view .name,.sidenav .user-view .email{display:block}.sidenav .user-view .circle{height:64px;width:64px}.sidenav .user-view .name,.sidenav .user-view .email{font-size:14px;line-height:24px}.sidenav .user-view .name{margin-top:16px;font-weight:500}.sidenav .user-view .email{padding-bottom:16px;font-weight:400}.drag-target{height:100%;width:10px;position:fixed;top:0;z-index:998}.drag-target.right-aligned{right:0}.sidenav.sidenav-fixed{left:0;-webkit-transform:translateX(0);transform:translateX(0);position:fixed}.sidenav.sidenav-fixed.right-aligned{right:0;left:auto}@media only screen and (max-width: 992px){.sidenav.sidenav-fixed{-webkit-transform:translateX(-105%);transform:translateX(-105%)}.sidenav.sidenav-fixed.right-aligned{-webkit-transform:translateX(105%);transform:translateX(105%)}.sidenav>a{padding:0 16px}.sidenav .user-view{padding:16px 16px 0}}.sidenav .collapsible-body>ul:not(.collapsible)>li.active,.sidenav.sidenav-fixed .collapsible-body>ul:not(.collapsible)>li.active{background-color:#ee6e73}.sidenav .collapsible-body>ul:not(.collapsible)>li.active a,.sidenav.sidenav-fixed .collapsible-body>ul:not(.collapsible)>li.active a{color:#fff}.sidenav .collapsible-body{padding:0}.sidenav-overlay{position:fixed;top:0;left:0;right:0;opacity:0;height:120vh;background-color:rgba(0,0,0,0.5);z-index:997;display:none}.preloader-wrapper{display:inline-block;position:relative;width:50px;height:50px}.preloader-wrapper.small{width:36px;height:36px}.preloader-wrapper.big{width:64px;height:64px}.preloader-wrapper.active{-webkit-animation:container-rotate 1568ms linear infinite;animation:container-rotate 1568ms linear infinite}@-webkit-keyframes container-rotate{to{-webkit-transform:rotate(360deg)}}@keyframes container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-layer{position:absolute;width:100%;height:100%;opacity:0;border-color:#26a69a}.spinner-blue,.spinner-blue-only{border-color:#4285f4}.spinner-red,.spinner-red-only{border-color:#db4437}.spinner-yellow,.spinner-yellow-only{border-color:#f4b400}.spinner-green,.spinner-green-only{border-color:#0f9d58}.active .spinner-layer.spinner-blue{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-red{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-yellow{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-green{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer,.active .spinner-layer.spinner-blue-only,.active .spinner-layer.spinner-red-only,.active .spinner-layer.spinner-yellow-only,.active .spinner-layer.spinner-green-only{opacity:1;-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg)}}@keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@-webkit-keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@-webkit-keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@-webkit-keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}@keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}.gap-patch{position:absolute;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.gap-patch .circle{width:1000%;left:-450%}.circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.circle-clipper .circle{width:200%;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent !important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0}.circle-clipper.left .circle{left:0;border-right-color:transparent !important;-webkit-transform:rotate(129deg);transform:rotate(129deg)}.circle-clipper.right .circle{left:-100%;border-left-color:transparent !important;-webkit-transform:rotate(-129deg);transform:rotate(-129deg)}.active .circle-clipper.left .circle{-webkit-animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .circle-clipper.right .circle{-webkit-animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes left-spin{from{-webkit-transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg)}}@keyframes left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@-webkit-keyframes right-spin{from{-webkit-transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg)}}@keyframes right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}#spinnerContainer.cooldown{-webkit-animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1)}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}.slider{position:relative;height:400px;width:100%}.slider.fullscreen{height:100%;width:100%;position:absolute;top:0;left:0;right:0;bottom:0}.slider.fullscreen ul.slides{height:100%}.slider.fullscreen ul.indicators{z-index:2;bottom:30px}.slider .slides{background-color:#9e9e9e;margin:0;height:400px}.slider .slides li{opacity:0;position:absolute;top:0;left:0;z-index:1;width:100%;height:inherit;overflow:hidden}.slider .slides li img{height:100%;width:100%;background-size:cover;background-position:center}.slider .slides li .caption{color:#fff;position:absolute;top:15%;left:15%;width:70%;opacity:0}.slider .slides li .caption p{color:#e0e0e0}.slider .slides li.active{z-index:2}.slider .indicators{position:absolute;text-align:center;left:0;right:0;bottom:0;margin:0}.slider .indicators .indicator-item{display:inline-block;position:relative;cursor:pointer;height:16px;width:16px;margin:0 12px;background-color:#e0e0e0;-webkit-transition:background-color .3s;transition:background-color .3s;border-radius:50%}.slider .indicators .indicator-item.active{background-color:#4CAF50}.carousel{overflow:hidden;position:relative;width:100%;height:400px;-webkit-perspective:500px;perspective:500px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform-origin:0% 50%;transform-origin:0% 50%}.carousel.carousel-slider{top:0;left:0}.carousel.carousel-slider .carousel-fixed-item{position:absolute;left:0;right:0;bottom:20px;z-index:1}.carousel.carousel-slider .carousel-fixed-item.with-indicators{bottom:68px}.carousel.carousel-slider .carousel-item{width:100%;height:100%;min-height:400px;position:absolute;top:0;left:0}.carousel.carousel-slider .carousel-item h2{font-size:24px;font-weight:500;line-height:32px}.carousel.carousel-slider .carousel-item p{font-size:15px}.carousel .carousel-item{visibility:hidden;width:200px;height:200px;position:absolute;top:0;left:0}.carousel .carousel-item>img{width:100%}.carousel .indicators{position:absolute;text-align:center;left:0;right:0;bottom:0;margin:0}.carousel .indicators .indicator-item{display:inline-block;position:relative;cursor:pointer;height:8px;width:8px;margin:24px 4px;background-color:rgba(255,255,255,0.5);-webkit-transition:background-color .3s;transition:background-color .3s;border-radius:50%}.carousel .indicators .indicator-item.active{background-color:#fff}.carousel.scrolling .carousel-item .materialboxed,.carousel .carousel-item:not(.active) .materialboxed{pointer-events:none}.tap-target-wrapper{width:800px;height:800px;position:fixed;z-index:1000;visibility:hidden;-webkit-transition:visibility 0s .3s;transition:visibility 0s .3s}.tap-target-wrapper.open{visibility:visible;-webkit-transition:visibility 0s;transition:visibility 0s}.tap-target-wrapper.open .tap-target{-webkit-transform:scale(1);transform:scale(1);opacity:.95;-webkit-transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1)}.tap-target-wrapper.open .tap-target-wave::before{-webkit-transform:scale(1);transform:scale(1)}.tap-target-wrapper.open .tap-target-wave::after{visibility:visible;-webkit-animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;-webkit-transition:opacity .3s, visibility 0s 1s, -webkit-transform .3s;transition:opacity .3s, visibility 0s 1s, -webkit-transform .3s;transition:opacity .3s, transform .3s, visibility 0s 1s;transition:opacity .3s, transform .3s, visibility 0s 1s, -webkit-transform .3s}.tap-target{position:absolute;font-size:1rem;border-radius:50%;background-color:#ee6e73;-webkit-box-shadow:0 20px 20px 0 rgba(0,0,0,0.14),0 10px 50px 0 rgba(0,0,0,0.12),0 30px 10px -20px rgba(0,0,0,0.2);box-shadow:0 20px 20px 0 rgba(0,0,0,0.14),0 10px 50px 0 rgba(0,0,0,0.12),0 30px 10px -20px rgba(0,0,0,0.2);width:100%;height:100%;opacity:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1)}.tap-target-content{position:relative;display:table-cell}.tap-target-wave{position:absolute;border-radius:50%;z-index:10001}.tap-target-wave::before,.tap-target-wave::after{content:'';display:block;position:absolute;width:100%;height:100%;border-radius:50%;background-color:#ffffff}.tap-target-wave::before{-webkit-transform:scale(0);transform:scale(0);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s}.tap-target-wave::after{visibility:hidden;-webkit-transition:opacity .3s, visibility 0s, -webkit-transform .3s;transition:opacity .3s, visibility 0s, -webkit-transform .3s;transition:opacity .3s, transform .3s, visibility 0s;transition:opacity .3s, transform .3s, visibility 0s, -webkit-transform .3s;z-index:-1}.tap-target-origin{top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);z-index:10002;position:absolute !important}.tap-target-origin:not(.btn):not(.btn-large):not(.btn-small),.tap-target-origin:not(.btn):not(.btn-large):not(.btn-small):hover{background:none}@media only screen and (max-width: 600px){.tap-target,.tap-target-wrapper{width:600px;height:600px}}.pulse{overflow:visible;position:relative}.pulse::before{content:'';display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:inherit;border-radius:inherit;-webkit-transition:opacity .3s, -webkit-transform .3s;transition:opacity .3s, -webkit-transform .3s;transition:opacity .3s, transform .3s;transition:opacity .3s, transform .3s, -webkit-transform .3s;-webkit-animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;z-index:-1}@-webkit-keyframes pulse-animation{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}100%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}}@keyframes pulse-animation{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}100%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}}.datepicker-modal{max-width:325px;min-width:300px;max-height:none}.datepicker-container.modal-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:0}.datepicker-controls{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;width:280px;margin:0 auto}.datepicker-controls .selects-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.datepicker-controls .select-wrapper input{border-bottom:none;text-align:center;margin:0}.datepicker-controls .select-wrapper input:focus{border-bottom:none}.datepicker-controls .select-wrapper .caret{display:none}.datepicker-controls .select-year input{width:50px}.datepicker-controls .select-month input{width:70px}.month-prev,.month-next{margin-top:4px;cursor:pointer;background-color:transparent;border:none}.datepicker-date-display{-webkit-box-flex:1;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;background-color:#26a69a;color:#fff;padding:20px 22px;font-weight:500}.datepicker-date-display .year-text{display:block;font-size:1.5rem;line-height:25px;color:rgba(255,255,255,0.7)}.datepicker-date-display .date-text{display:block;font-size:2.8rem;line-height:47px;font-weight:500}.datepicker-calendar-container{-webkit-box-flex:2.5;-webkit-flex:2.5 auto;-ms-flex:2.5 auto;flex:2.5 auto}.datepicker-table{width:280px;font-size:1rem;margin:0 auto}.datepicker-table thead{border-bottom:none}.datepicker-table th{padding:10px 5px;text-align:center}.datepicker-table tr{border:none}.datepicker-table abbr{text-decoration:none;color:#999}.datepicker-table td{border-radius:50%;padding:0}.datepicker-table td.is-today{color:#26a69a}.datepicker-table td.is-selected{background-color:#26a69a;color:#fff}.datepicker-table td.is-outside-current-month,.datepicker-table td.is-disabled{color:rgba(0,0,0,0.3);pointer-events:none}.datepicker-day-button{background-color:transparent;border:none;line-height:38px;display:block;width:100%;border-radius:50%;padding:0 5px;cursor:pointer;color:inherit}.datepicker-day-button:focus{background-color:rgba(43,161,150,0.25)}.datepicker-footer{width:280px;margin:0 auto;padding-bottom:5px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.datepicker-cancel,.datepicker-clear,.datepicker-today,.datepicker-done{color:#26a69a;padding:0 1rem}.datepicker-clear{color:#F44336}@media only screen and (min-width: 601px){.datepicker-modal{max-width:625px}.datepicker-container.modal-content{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.datepicker-date-display{-webkit-box-flex:0;-webkit-flex:0 1 270px;-ms-flex:0 1 270px;flex:0 1 270px}.datepicker-controls,.datepicker-table,.datepicker-footer{width:320px}.datepicker-day-button{line-height:44px}}.timepicker-modal{max-width:325px;max-height:none}.timepicker-container.modal-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:0}.text-primary{color:#fff}.timepicker-digital-display{-webkit-box-flex:1;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;background-color:#26a69a;padding:10px;font-weight:300}.timepicker-text-container{font-size:4rem;font-weight:bold;text-align:center;color:rgba(255,255,255,0.6);font-weight:400;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.timepicker-span-hours,.timepicker-span-minutes,.timepicker-span-am-pm div{cursor:pointer}.timepicker-span-hours{margin-right:3px}.timepicker-span-minutes{margin-left:3px}.timepicker-display-am-pm{font-size:1.3rem;position:absolute;right:1rem;bottom:1rem;font-weight:400}.timepicker-analog-display{-webkit-box-flex:2.5;-webkit-flex:2.5 auto;-ms-flex:2.5 auto;flex:2.5 auto}.timepicker-plate{background-color:#eee;border-radius:50%;width:270px;height:270px;overflow:visible;position:relative;margin:auto;margin-top:25px;margin-bottom:5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.timepicker-canvas,.timepicker-dial{position:absolute;left:0;right:0;top:0;bottom:0}.timepicker-minutes{visibility:hidden}.timepicker-tick{border-radius:50%;color:rgba(0,0,0,0.87);line-height:40px;text-align:center;width:40px;height:40px;position:absolute;cursor:pointer;font-size:15px}.timepicker-tick.active,.timepicker-tick:hover{background-color:rgba(38,166,154,0.25)}.timepicker-dial{-webkit-transition:opacity 350ms, -webkit-transform 350ms;transition:opacity 350ms, -webkit-transform 350ms;transition:transform 350ms, opacity 350ms;transition:transform 350ms, opacity 350ms, -webkit-transform 350ms}.timepicker-dial-out{opacity:0}.timepicker-dial-out.timepicker-hours{-webkit-transform:scale(1.1, 1.1);transform:scale(1.1, 1.1)}.timepicker-dial-out.timepicker-minutes{-webkit-transform:scale(0.8, 0.8);transform:scale(0.8, 0.8)}.timepicker-canvas{-webkit-transition:opacity 175ms;transition:opacity 175ms}.timepicker-canvas line{stroke:#26a69a;stroke-width:4;stroke-linecap:round}.timepicker-canvas-out{opacity:0.25}.timepicker-canvas-bearing{stroke:none;fill:#26a69a}.timepicker-canvas-bg{stroke:none;fill:#26a69a}.timepicker-footer{margin:0 auto;padding:5px 1rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.timepicker-clear{color:#F44336}.timepicker-close{color:#26a69a}.timepicker-clear,.timepicker-close{padding:0 20px}@media only screen and (min-width: 601px){.timepicker-modal{max-width:600px}.timepicker-container.modal-content{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.timepicker-text-container{top:32%}.timepicker-display-am-pm{position:relative;right:auto;bottom:auto;text-align:center;margin-top:1.2rem}} diff --git a/web/index.html b/web/index.html deleted file mode 100644 index a544adf..0000000 --- a/web/index.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - - - - - - - - - - - - Bluetooth HID Hub - - -

- -
-
- -
-
-
Connected HID devices
-
HID Raw Devices
-

- Selected report filter should translate HID reports to/from - the selected device and BT HID Hub Bluetooth device according to its HID descriptor. Default - filter passes HID messages as is (should be good for most pretty standard keyboards). For some - devices OS may create several HID Raw devices, e.g. one for standard and another one for fancy - keys. - If Default filter does not work and there is not specific filter for your keyboard, then you may - want to develop a device-specific filter (most flexible, but requires some work) or use your - keyboard in compatibility mode (see below). -

-
- - - - - - - -
Device NameCaptureReport Filter
-
-
-
-
    -
  • -
    keyboardKeyboard Compatibility - Mode -
    -
    -

    If none of the existing filters work for your keyboard and you do not want to create - your own filter, you can set your keyboard to work in a compatibility mode. In this - mode BT HID Hub will capture the keyboard events via EVDEV after they are processed - by OS and will create a virtual HID Raw keyboard as a destination for those events. - This virtual HID Raw keyboard will appear in the HID Devices table above, where you - should turn on capture and apply a default (or remapping) filter. If OS creates - several input devices for your one physical device, you may need to set all these - input devices to work in compatibility mode. -

    -

    Such compatibility mode is less flexible as working with HID Raw devices, as some - vendor-specific key - (e.g. fn button) may only be captured before OS processing (HID RAW), not after (via - EVDEV).

    -
    -
    -
    -
    Keyboard Input Devices To Run In Compatibility Mode:
    - - - - - - -
    Device NameCompatibility Mode
    -
    -
    -
    -
    -
  • -
-
-
- -
-
- -
-

Settings

- -
-
-
Change 'pi' user password
-

(*) Default password is 'raspberry'

-
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
- -
-
-
-
- - - - - - - \ No newline at end of file diff --git a/web/js/agent.js b/web/js/agent.js deleted file mode 100644 index 2a207ca..0000000 --- a/web/js/agent.js +++ /dev/null @@ -1,87 +0,0 @@ -class Agent{ - constructor(main) { - this.main=main; - this.webSocketManager = null; - this.currentDevice = null; - this.passkey=null; - var that = this; - $('#modalConfirmButton').on('click', e => { - that.webSocketManager.sendMessage({'msg':'request_confirmation_response', 'device':that.currentDevice, 'passkey':that.passkey,'confirmed':true }); - this.currentDevice = null; - var instance = M.Modal.getInstance($('#modalPopup')) - instance.close(); - }); - $('#modalRejectButton').on('click', e => { - that.webSocketManager.sendMessage({'msg':'request_confirmation_response', 'device':that.currentDevice, 'passkey':that.passkey, 'confirmed':false }); - this.currentDevice = null; - var instance = M.Modal.getInstance($('#modalPopup')) - instance.close(); - }); - } - - setWebSocketManager(webSocketManager){ - this.webSocketManager = webSocketManager; - } - - action_triggered(data){ - var that = this; - if(data['action'] === 'display_pin_code'){ - $('.modal').modal({dismissible:false, - onOpenStart: function () { - that.currentDevice = data['device']; - $('#modalPopupHeader')[0].innerHTML = "Pair?"; - $('#modalPopupTextBefore')[0].innerHTML = "Type in the pin code and hit Enter:"; - $('#modalPopupLargeText')[0].innerHTML = data['pincode']; - $('#modalPopupTextAfter')[0].innerHTML= "Device "+data['device'].split('/')[4]. replace("dev_","").replace(/_/g,":"); - $('#modalCancelButton').show(); - $('#modalConfirmButton').hide(); - $('#modalRejectButton').hide(); - }, - onCloseEnd: function(){ - that.webSocketManager.sendMessage({'msg':'cancel_pairing', 'device':that.currentDevice }); - this.currentDevice = null; - } - - }); - var instance = M.Modal.getInstance($('#modalPopup')) - instance.open(); - } - else if(data['action'] === 'confirm_passkey'){ - $('.modal').modal({dismissible:false, - onOpenStart: function () { - that.currentDevice = data['device']; - that.passkey = data['passkey']; - $('#modalPopupHeader')[0].innerHTML = "Pair to host?"; - $('#modalPopupTextBefore')[0].innerHTML = "Confirm you see the same passkey on host:"; - $('#modalPopupLargeText')[0].innerHTML = data['passkey']; - $('#modalPopupTextAfter')[0].innerHTML= "Device "+data['device'].split('/')[4]. replace("dev_","").replace(/_/g,":"); - $('#modalCancelButton').hide(); - $('#modalConfirmButton').show(); - $('#modalRejectButton').show(); - } - }); - var instance = M.Modal.getInstance($('#modalPopup')) - instance.open(); - } - else if(data['action'] === 'service_authorised') { - var instance = M.Modal.getInstance($('#modalPopup')) - instance.close(); - this.main.updateListOfBluetoothDevices(); - } - } - - bluetoothDevicesUpdated(devices){ - if(this.currentDevice==null) return; - - $.each(devices, function (i, device) { - if (!device.path === this.currentDevice) return; - if(device.paired) { - //close - this.currentDevice = null; - var instance = M.Modal.getInstance($('#modalPopup')) - instance.close(); - } - }); - - } -} diff --git a/web/js/jquery-3.5.1.min.js b/web/js/jquery-3.5.1.min.js deleted file mode 100644 index b061403..0000000 --- a/web/js/jquery-3.5.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 {that.login();return false;}); - var instance = M.Modal.getInstance($('#loginPopup')); - instance.open(); - } - }); - } - - login(){ - var that = this; - var formData = new FormData(); - formData.append("password", $('#piPassword')[0].value); - $.ajax({ - url: "http://" + location.hostname + ":8080/login", - data: formData, - type: 'POST', datatype: 'json', cache:false, contentType: false, processData: false, - success: function (data, textStatus, jqXHR) { - var instance = M.Modal.getInstance($('#loginPopup')); - instance.close(); - that.init_app(); - }, - error: function (jqXHR, textStatus, errorThrown){ - M.toast({html: "Not authorised. "+errorThrown, classes:"red"}); - } - }); - } - - init_app(){ - var that = this; - - $('#pageDiv').show(); - this.setActiveView(views.DEVICES); - $('#settingsNavButton').on('click', e => {that.setActiveView(views.SETTINGS);}); - $('#devicesNavButton').on('click', e => {that.setActiveView(views.DEVICES);}); - $('#startScanningButton').on('click', e => {that.changeScanningMode(true);}); - $('#stopScanningButton').on('click', e => {that.changeScanningMode(false);}); - $('#startDiscoverableButton').on('click', e => {that.changeDiscoverableMode(true);}); - $('#stopDiscoverableButton').on('click', e => {that.changeDiscoverableMode(false);}); - $('#restartServiceButton').on('click', e => {that.restartService();}); - $('#rebootButton').on('click', e => {that.rebootRaspberry();}); - - this.scanning = false; - this.setScanningState(); - this.discoverable = false; - this.setDiscoverableState(); - - $(document).on('submit', '#changePasswordForm', e => {that.changePassword();return false;}); - $('.fixed-action-btn').floatingActionButton(); - $('.tabs').tabs(); - $('.collapsible').collapsible(); - //$('select').formSelect(); - this.updateHIDDevices(); - this.updateListOfBluetoothDevices(); - this.agent = new Agent(this); - this.webSocketManager = new WebSocketManager(this.agent, this); - } - - updateHIDDevices(){ - var that = this; - $.ajax({ - type: 'GET', - dataType: 'json', - url: 'http://' + location.hostname + ':8080/hiddevices', - timeout: 5000, - //async: false, - success: function (response) { - var trHTML = ''; - $.each(response.devices, function (i, device) { - var captureText = ''; - var disable_text = ''; - var filterText = '
'; - if(!device.compatibility_mode && device.capture) captureText = ' checked="checked"' - if(device.compatibility_mode) disable_text = ' disabled="disabled"'; - trHTML += '' + device.name + '

'+filterText+''; - }); - $('#hidDevicesList').html(trHTML); - $('select').formSelect(); - - $('input[type=checkbox][name=captureCheckbox]').on('change', function (data) { - that.setCapture($(this).attr("device"), $(this).prop("checked")); - }); - $('select[name=filterSelect]').on('change', function (data) { - that.setFilter($(this).attr("device"), $(this).val()); - }); - - //fill compatibility device table - trHTML = ''; - var inputDeviceSelected = false; - $.each(response.input_devices, function (i, device) { - var compatibilityModeText = ''; - if(device.compatibility_mode) { - inputDeviceSelected = true; - compatibilityModeText = ' checked="checked"' - } - trHTML += '' + device.name + '

'; - }); - $('#compatilibilityDevicesList').html(trHTML); - $('input[type=checkbox][name=compatibilityCheckbox]').on('change', function (data) { - that.setCompatibilityDevice($(this).attr("device"), $(this).prop("checked")); - }); - if(inputDeviceSelected){ - M.Collapsible.getInstance($('#keyboardCompatibilityPanel')).open(0); - } - }, - error: function (jqXHR, textStatus, errorThrown){ - M.toast({html: "Failed to load connected devices list. "+errorThrown, classes:"red"}); - setTimeout(that.updateHIDDevices, 1000); - } - }); - } - - setCapture(device, state){ - var that = this; - var formData = new FormData(); - formData.append("device_id", device); - formData.append("capture", state); - $.ajax({ - url: "http://" + location.hostname + ":8080/setdevicecapture", - data: formData, - type: 'POST', datatype: 'json', cache:false, contentType: false, processData: false, - success: function (data, textStatus, jqXHR) { - that.updateHIDDevices(); - }, - error: function (jqXHR, textStatus, errorThrown){ - that.updateHIDDevices(); - M.toast({html: "Could not set capture. "+errorThrown, classes:"red"}); - } - }); - } - - setFilter(device, filter){ - var that = this; - var formData = new FormData(); - formData.append("device_id", device); - formData.append("filter", filter); - $.ajax({ - url: "http://" + location.hostname + ":8080/setdevicefilter", - data: formData, - type: 'POST', datatype: 'json', cache:false, contentType: false, processData: false, - success: function (data, textStatus, jqXHR) { - that.updateHIDDevices(); - }, - error: function (jqXHR, textStatus, errorThrown){ - that.updateHIDDevices(); - M.toast({html: "Could not set filter. "+errorThrown, classes:"red"}); - } - }); - } - - setCompatibilityDevice(device, state){ - var that = this; - var formData = new FormData(); - formData.append("device_path", device); - formData.append("compatibility_state", state); - $.ajax({ - url: "http://" + location.hostname + ":8080/setcompatibilitydevice", - data: formData, - type: 'POST', datatype: 'json', cache:false, contentType: false, processData: false, - success: function (data, textStatus, jqXHR) { - that.updateHIDDevices(); - }, - error: function (jqXHR, textStatus, errorThrown){ - that.updateHIDDevices(); - M.toast({html: "Could not set compatibility mode. "+errorThrown, classes:"red"}); - } - }); - } - - changePassword(){ - if($('#newPassword1')[0].value != $('#newPassword2')[0].value) { - $('#newPassword1')[0].setCustomValidity("New passwords must match"); - $('#newPassword2')[0].setCustomValidity("New passwords must match"); - } - else{ - $('#newPassword1')[0].setCustomValidity(""); - $('#newPassword2')[0].setCustomValidity(""); - } - var isValid = $('#changePasswordForm')[0].checkValidity(); - $('#changePasswordForm')[0].reportValidity(); - if(!isValid) return; - - var formData = new FormData(); - formData.append("current_password", $('#currentPassword')[0].value); - formData.append("new_password", $('#newPassword1')[0].value); - $.ajax({ - url: "http://" + location.hostname + ":8080/changepassword", - data: formData, - type: 'POST', datatype: 'json', cache:false, contentType: false, processData: false, - success: function (data, textStatus, jqXHR) { - $('#currentPassword')[0].value = ''; - $('#newPassword1')[0].value = ''; - $('#newPassword2')[0].value = ''; - M.toast({html: "Successfully changed password"}); - }, - error: function (jqXHR, textStatus, errorThrown){ - M.toast({html: "Failed to change password. "+errorThrown, classes:"red"}); - } - }); - return false; - } - - updateListOfBluetoothDevices(){ - var that = this; - $.ajax({ - type: 'GET', - dataType: 'json', - url: 'http://' + location.hostname + ':8080/bluetoothdevices', - timeout: 5000, - //async: false, - success: function (response) { - that.agent.bluetoothDevicesUpdated(response.devices); - var trHTML = ''; - $.each(response.devices, function (i, device) { - if(!device.paired) return; - var connectDisconnectButton = ''; - if(!device.connected){ - connectDisconnectButton = 'Connect'; - } - else{ - connectDisconnectButton = 'Disconnect'; - } - var host = ''; - if(device.host) host = ' Host'; - trHTML += '' + device.alias + ' (Paired'+host+')' + device.address + ''+connectDisconnectButton+' Remove'; - }); - $.each(response.devices, function (i, device) { - if(device.paired) return; - trHTML += '' + device.alias + '' + device.address + 'Pair'; - }); - $('#bluetoothDevicesList').html(trHTML); - $('a[name=pairDeviceButton]').on('click', function (data) { - that.webSocketManager.sendMessage({'msg':'pair_device','device':$(this).attr("device")}) - }); - $('a[name=connectDeviceButton]').on('click', function (data) { - that.webSocketManager.sendMessage({'msg':'connect_device','device':$(this).attr("device")}) - }); - $('a[name=disconnectDeviceButton]').on('click', function (data) { - that.webSocketManager.sendMessage({'msg':'disconnect_device','device':$(this).attr("device")}) - }); - $('a[name=removeDeviceButton]').on('click', function (data) { - that.webSocketManager.sendMessage({'msg':'remove_device','device':$(this).attr("device")}) - }); - if(!response.scanning){ - that.scanning = false; - that.setScanningState(); - } - }, - error: function (jqXHR, textStatus, errorThrown){ - M.toast({html: "Failed to load update bluetooth devices list. "+errorThrown, classes:"red"}); - setTimeout(that.updateListOfBluetoothDevices, 1000); - } - }); - } - - setScanningState(){ - if(this.scanning){ - $('#startScanningButton').hide() - $('#stopScanningButton').show() - } - else{ - $('#startScanningButton').show() - $('#stopScanningButton').hide() - } - } - - changeScanningMode(mode){ - $('#startScanningButton').hide() - $('#stopScanningButton').hide() - var that = this; - $.ajax({ - url: "http://" + location.hostname + ":8080/"+ (mode ? "startscanning" : "stopscanning"), - type: 'POST', datatype: 'json', cache:false, contentType: false, processData: false, - success: function (data, textStatus, jqXHR) { - M.toast({html: "Scan "+ (mode ? "started":"stopped")}); - that.scanning = mode; - that.setScanningState(); - }, - error: function (jqXHR, textStatus, errorThrown){ - M.toast({html: "Could not "+(mode ? "start":"stop")+" scan. "+errorThrown, classes:"red"}); - if(errorThrown === "Operation already in progress") that.scanning = true; - else if(errorThrown === "No discovery started") that.scanning = false; - else that.scanning = !mode; - that.setScanningState(); - } - }); - } - - setDiscoverableState(){ - if(this.discoverable){ - $('#startDiscoverableButton').hide() - $('#stopDiscoverableButton').show() - } - else{ - $('#startDiscoverableButton').show() - $('#stopDiscoverableButton').hide() - } - } - - changeDiscoverableMode(mode){ - $('#startDiscoverableButton').hide() - $('#stopDiscoverableButton').hide() - var that = this; - $.ajax({ - url: "http://" + location.hostname + ":8080/"+ (mode ? "startdiscoverable" : "stopdiscoverable"), - type: 'POST', datatype: 'json', cache:false, contentType: false, processData: false, - success: function (data, textStatus, jqXHR) { - M.toast({html: "Discovery mode changed"}); - that.discoverable = mode; - that.setDiscoverableState(); - }, - error: function (jqXHR, textStatus, errorThrown){ - M.toast({html: "Could not make"+(mode ? "":" not")+" discoverable. "+errorThrown, classes:"red"}); - that.discoverable = !mode; - that.setDiscoverableState(); - } - }); - } - - restartService(){ - $.ajax({ - url: "http://" + location.hostname + ":8080/restartservice", - type: 'POST', cache:false, contentType: false, processData: false, - error: function (jqXHR, textStatus, errorThrown){ - M.toast({html: "Restarting service, reload this page..."}); - } - }); - } - - rebootRaspberry(){ - $.ajax({ - url: "http://" + location.hostname + ":8080/reboot", - type: 'POST', cache:false, contentType: false, processData: false, - error: function (jqXHR, textStatus, errorThrown){ - M.toast({html: "Rebooting Raspberry, reload this page..."}); - } - }); - } - - setActiveView(view){ - switch (view){ - case views.SETTINGS: - $('#settingsPanel').show(); - $('#settingsNavButton').parent().addClass("active"); - $('#devicesPanel').hide(); - $('#devicesNavButton').parent().removeClass("active"); - break; - case views.DEVICES: - default: - $('#devicesPanel').show(); - $('#devicesNavButton').parent().addClass("active"); - $('#settingsPanel').hide(); - $('#settingsNavButton').parent().removeClass("active"); - } - this.activeView = view; - } -} diff --git a/web/js/materialize.js b/web/js/materialize.js deleted file mode 100644 index 1e18382..0000000 --- a/web/js/materialize.js +++ /dev/null @@ -1,12374 +0,0 @@ -/*! - * Materialize v1.0.0 (http://materializecss.com) - * Copyright 2014-2017 Materialize - * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) - */ -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/*! cash-dom 1.3.5, https://github.com/kenwheeler/cash @license MIT */ -(function (factory) { - window.cash = factory(); -})(function () { - var doc = document, - win = window, - ArrayProto = Array.prototype, - slice = ArrayProto.slice, - filter = ArrayProto.filter, - push = ArrayProto.push; - - var noop = function () {}, - isFunction = function (item) { - // @see https://crbug.com/568448 - return typeof item === typeof noop && item.call; - }, - isString = function (item) { - return typeof item === typeof ""; - }; - - var idMatch = /^#[\w-]*$/, - classMatch = /^\.[\w-]*$/, - htmlMatch = /<.+>/, - singlet = /^\w+$/; - - function find(selector, context) { - context = context || doc; - var elems = classMatch.test(selector) ? context.getElementsByClassName(selector.slice(1)) : singlet.test(selector) ? context.getElementsByTagName(selector) : context.querySelectorAll(selector); - return elems; - } - - var frag; - function parseHTML(str) { - if (!frag) { - frag = doc.implementation.createHTMLDocument(null); - var base = frag.createElement("base"); - base.href = doc.location.href; - frag.head.appendChild(base); - } - - frag.body.innerHTML = str; - - return frag.body.childNodes; - } - - function onReady(fn) { - if (doc.readyState !== "loading") { - fn(); - } else { - doc.addEventListener("DOMContentLoaded", fn); - } - } - - function Init(selector, context) { - if (!selector) { - return this; - } - - // If already a cash collection, don't do any further processing - if (selector.cash && selector !== win) { - return selector; - } - - var elems = selector, - i = 0, - length; - - if (isString(selector)) { - elems = idMatch.test(selector) ? - // If an ID use the faster getElementById check - doc.getElementById(selector.slice(1)) : htmlMatch.test(selector) ? - // If HTML, parse it into real elements - parseHTML(selector) : - // else use `find` - find(selector, context); - - // If function, use as shortcut for DOM ready - } else if (isFunction(selector)) { - onReady(selector);return this; - } - - if (!elems) { - return this; - } - - // If a single DOM element is passed in or received via ID, return the single element - if (elems.nodeType || elems === win) { - this[0] = elems; - this.length = 1; - } else { - // Treat like an array and loop through each item. - length = this.length = elems.length; - for (; i < length; i++) { - this[i] = elems[i]; - } - } - - return this; - } - - function cash(selector, context) { - return new Init(selector, context); - } - - var fn = cash.fn = cash.prototype = Init.prototype = { // jshint ignore:line - cash: true, - length: 0, - push: push, - splice: ArrayProto.splice, - map: ArrayProto.map, - init: Init - }; - - Object.defineProperty(fn, "constructor", { value: cash }); - - cash.parseHTML = parseHTML; - cash.noop = noop; - cash.isFunction = isFunction; - cash.isString = isString; - - cash.extend = fn.extend = function (target) { - target = target || {}; - - var args = slice.call(arguments), - length = args.length, - i = 1; - - if (args.length === 1) { - target = this; - i = 0; - } - - for (; i < length; i++) { - if (!args[i]) { - continue; - } - for (var key in args[i]) { - if (args[i].hasOwnProperty(key)) { - target[key] = args[i][key]; - } - } - } - - return target; - }; - - function each(collection, callback) { - var l = collection.length, - i = 0; - - for (; i < l; i++) { - if (callback.call(collection[i], collection[i], i, collection) === false) { - break; - } - } - } - - function matches(el, selector) { - var m = el && (el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector || el.oMatchesSelector); - return !!m && m.call(el, selector); - } - - function getCompareFunction(selector) { - return ( - /* Use browser's `matches` function if string */ - isString(selector) ? matches : - /* Match a cash element */ - selector.cash ? function (el) { - return selector.is(el); - } : - /* Direct comparison */ - function (el, selector) { - return el === selector; - } - ); - } - - function unique(collection) { - return cash(slice.call(collection).filter(function (item, index, self) { - return self.indexOf(item) === index; - })); - } - - cash.extend({ - merge: function (first, second) { - var len = +second.length, - i = first.length, - j = 0; - - for (; j < len; i++, j++) { - first[i] = second[j]; - } - - first.length = i; - return first; - }, - - each: each, - matches: matches, - unique: unique, - isArray: Array.isArray, - isNumeric: function (n) { - return !isNaN(parseFloat(n)) && isFinite(n); - } - - }); - - var uid = cash.uid = "_cash" + Date.now(); - - function getDataCache(node) { - return node[uid] = node[uid] || {}; - } - - function setData(node, key, value) { - return getDataCache(node)[key] = value; - } - - function getData(node, key) { - var c = getDataCache(node); - if (c[key] === undefined) { - c[key] = node.dataset ? node.dataset[key] : cash(node).attr("data-" + key); - } - return c[key]; - } - - function removeData(node, key) { - var c = getDataCache(node); - if (c) { - delete c[key]; - } else if (node.dataset) { - delete node.dataset[key]; - } else { - cash(node).removeAttr("data-" + name); - } - } - - fn.extend({ - data: function (name, value) { - if (isString(name)) { - return value === undefined ? getData(this[0], name) : this.each(function (v) { - return setData(v, name, value); - }); - } - - for (var key in name) { - this.data(key, name[key]); - } - - return this; - }, - - removeData: function (key) { - return this.each(function (v) { - return removeData(v, key); - }); - } - - }); - - var notWhiteMatch = /\S+/g; - - function getClasses(c) { - return isString(c) && c.match(notWhiteMatch); - } - - function hasClass(v, c) { - return v.classList ? v.classList.contains(c) : new RegExp("(^| )" + c + "( |$)", "gi").test(v.className); - } - - function addClass(v, c, spacedName) { - if (v.classList) { - v.classList.add(c); - } else if (spacedName.indexOf(" " + c + " ")) { - v.className += " " + c; - } - } - - function removeClass(v, c) { - if (v.classList) { - v.classList.remove(c); - } else { - v.className = v.className.replace(c, ""); - } - } - - fn.extend({ - addClass: function (c) { - var classes = getClasses(c); - - return classes ? this.each(function (v) { - var spacedName = " " + v.className + " "; - each(classes, function (c) { - addClass(v, c, spacedName); - }); - }) : this; - }, - - attr: function (name, value) { - if (!name) { - return undefined; - } - - if (isString(name)) { - if (value === undefined) { - return this[0] ? this[0].getAttribute ? this[0].getAttribute(name) : this[0][name] : undefined; - } - - return this.each(function (v) { - if (v.setAttribute) { - v.setAttribute(name, value); - } else { - v[name] = value; - } - }); - } - - for (var key in name) { - this.attr(key, name[key]); - } - - return this; - }, - - hasClass: function (c) { - var check = false, - classes = getClasses(c); - if (classes && classes.length) { - this.each(function (v) { - check = hasClass(v, classes[0]); - return !check; - }); - } - return check; - }, - - prop: function (name, value) { - if (isString(name)) { - return value === undefined ? this[0][name] : this.each(function (v) { - v[name] = value; - }); - } - - for (var key in name) { - this.prop(key, name[key]); - } - - return this; - }, - - removeAttr: function (name) { - return this.each(function (v) { - if (v.removeAttribute) { - v.removeAttribute(name); - } else { - delete v[name]; - } - }); - }, - - removeClass: function (c) { - if (!arguments.length) { - return this.attr("class", ""); - } - var classes = getClasses(c); - return classes ? this.each(function (v) { - each(classes, function (c) { - removeClass(v, c); - }); - }) : this; - }, - - removeProp: function (name) { - return this.each(function (v) { - delete v[name]; - }); - }, - - toggleClass: function (c, state) { - if (state !== undefined) { - return this[state ? "addClass" : "removeClass"](c); - } - var classes = getClasses(c); - return classes ? this.each(function (v) { - var spacedName = " " + v.className + " "; - each(classes, function (c) { - if (hasClass(v, c)) { - removeClass(v, c); - } else { - addClass(v, c, spacedName); - } - }); - }) : this; - } }); - - fn.extend({ - add: function (selector, context) { - return unique(cash.merge(this, cash(selector, context))); - }, - - each: function (callback) { - each(this, callback); - return this; - }, - - eq: function (index) { - return cash(this.get(index)); - }, - - filter: function (selector) { - if (!selector) { - return this; - } - - var comparator = isFunction(selector) ? selector : getCompareFunction(selector); - - return cash(filter.call(this, function (e) { - return comparator(e, selector); - })); - }, - - first: function () { - return this.eq(0); - }, - - get: function (index) { - if (index === undefined) { - return slice.call(this); - } - return index < 0 ? this[index + this.length] : this[index]; - }, - - index: function (elem) { - var child = elem ? cash(elem)[0] : this[0], - collection = elem ? this : cash(child).parent().children(); - return slice.call(collection).indexOf(child); - }, - - last: function () { - return this.eq(-1); - } - - }); - - var camelCase = function () { - var camelRegex = /(?:^\w|[A-Z]|\b\w)/g, - whiteSpace = /[\s-_]+/g; - return function (str) { - return str.replace(camelRegex, function (letter, index) { - return letter[index === 0 ? "toLowerCase" : "toUpperCase"](); - }).replace(whiteSpace, ""); - }; - }(); - - var getPrefixedProp = function () { - var cache = {}, - doc = document, - div = doc.createElement("div"), - style = div.style; - - return function (prop) { - prop = camelCase(prop); - if (cache[prop]) { - return cache[prop]; - } - - var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1), - prefixes = ["webkit", "moz", "ms", "o"], - props = (prop + " " + prefixes.join(ucProp + " ") + ucProp).split(" "); - - each(props, function (p) { - if (p in style) { - cache[p] = prop = cache[prop] = p; - return false; - } - }); - - return cache[prop]; - }; - }(); - - cash.prefixedProp = getPrefixedProp; - cash.camelCase = camelCase; - - fn.extend({ - css: function (prop, value) { - if (isString(prop)) { - prop = getPrefixedProp(prop); - return arguments.length > 1 ? this.each(function (v) { - return v.style[prop] = value; - }) : win.getComputedStyle(this[0])[prop]; - } - - for (var key in prop) { - this.css(key, prop[key]); - } - - return this; - } - - }); - - function compute(el, prop) { - return parseInt(win.getComputedStyle(el[0], null)[prop], 10) || 0; - } - - each(["Width", "Height"], function (v) { - var lower = v.toLowerCase(); - - fn[lower] = function () { - return this[0].getBoundingClientRect()[lower]; - }; - - fn["inner" + v] = function () { - return this[0]["client" + v]; - }; - - fn["outer" + v] = function (margins) { - return this[0]["offset" + v] + (margins ? compute(this, "margin" + (v === "Width" ? "Left" : "Top")) + compute(this, "margin" + (v === "Width" ? "Right" : "Bottom")) : 0); - }; - }); - - function registerEvent(node, eventName, callback) { - var eventCache = getData(node, "_cashEvents") || setData(node, "_cashEvents", {}); - eventCache[eventName] = eventCache[eventName] || []; - eventCache[eventName].push(callback); - node.addEventListener(eventName, callback); - } - - function removeEvent(node, eventName, callback) { - var events = getData(node, "_cashEvents"), - eventCache = events && events[eventName], - index; - - if (!eventCache) { - return; - } - - if (callback) { - node.removeEventListener(eventName, callback); - index = eventCache.indexOf(callback); - if (index >= 0) { - eventCache.splice(index, 1); - } - } else { - each(eventCache, function (event) { - node.removeEventListener(eventName, event); - }); - eventCache = []; - } - } - - fn.extend({ - off: function (eventName, callback) { - return this.each(function (v) { - return removeEvent(v, eventName, callback); - }); - }, - - on: function (eventName, delegate, callback, runOnce) { - // jshint ignore:line - var originalCallback; - if (!isString(eventName)) { - for (var key in eventName) { - this.on(key, delegate, eventName[key]); - } - return this; - } - - if (isFunction(delegate)) { - callback = delegate; - delegate = null; - } - - if (eventName === "ready") { - onReady(callback); - return this; - } - - if (delegate) { - originalCallback = callback; - callback = function (e) { - var t = e.target; - while (!matches(t, delegate)) { - if (t === this || t === null) { - return t = false; - } - - t = t.parentNode; - } - - if (t) { - originalCallback.call(t, e); - } - }; - } - - return this.each(function (v) { - var finalCallback = callback; - if (runOnce) { - finalCallback = function () { - callback.apply(this, arguments); - removeEvent(v, eventName, finalCallback); - }; - } - registerEvent(v, eventName, finalCallback); - }); - }, - - one: function (eventName, delegate, callback) { - return this.on(eventName, delegate, callback, true); - }, - - ready: onReady, - - /** - * Modified - * Triggers browser event - * @param String eventName - * @param Object data - Add properties to event object - */ - trigger: function (eventName, data) { - if (document.createEvent) { - var evt = document.createEvent('HTMLEvents'); - evt.initEvent(eventName, true, false); - evt = this.extend(evt, data); - return this.each(function (v) { - return v.dispatchEvent(evt); - }); - } - } - - }); - - function encode(name, value) { - return "&" + encodeURIComponent(name) + "=" + encodeURIComponent(value).replace(/%20/g, "+"); - } - - function getSelectMultiple_(el) { - var values = []; - each(el.options, function (o) { - if (o.selected) { - values.push(o.value); - } - }); - return values.length ? values : null; - } - - function getSelectSingle_(el) { - var selectedIndex = el.selectedIndex; - return selectedIndex >= 0 ? el.options[selectedIndex].value : null; - } - - function getValue(el) { - var type = el.type; - if (!type) { - return null; - } - switch (type.toLowerCase()) { - case "select-one": - return getSelectSingle_(el); - case "select-multiple": - return getSelectMultiple_(el); - case "radio": - return el.checked ? el.value : null; - case "checkbox": - return el.checked ? el.value : null; - default: - return el.value ? el.value : null; - } - } - - fn.extend({ - serialize: function () { - var query = ""; - - each(this[0].elements || this, function (el) { - if (el.disabled || el.tagName === "FIELDSET") { - return; - } - var name = el.name; - switch (el.type.toLowerCase()) { - case "file": - case "reset": - case "submit": - case "button": - break; - case "select-multiple": - var values = getValue(el); - if (values !== null) { - each(values, function (value) { - query += encode(name, value); - }); - } - break; - default: - var value = getValue(el); - if (value !== null) { - query += encode(name, value); - } - } - }); - - return query.substr(1); - }, - - val: function (value) { - if (value === undefined) { - return getValue(this[0]); - } - - return this.each(function (v) { - return v.value = value; - }); - } - - }); - - function insertElement(el, child, prepend) { - if (prepend) { - var first = el.childNodes[0]; - el.insertBefore(child, first); - } else { - el.appendChild(child); - } - } - - function insertContent(parent, child, prepend) { - var str = isString(child); - - if (!str && child.length) { - each(child, function (v) { - return insertContent(parent, v, prepend); - }); - return; - } - - each(parent, str ? function (v) { - return v.insertAdjacentHTML(prepend ? "afterbegin" : "beforeend", child); - } : function (v, i) { - return insertElement(v, i === 0 ? child : child.cloneNode(true), prepend); - }); - } - - fn.extend({ - after: function (selector) { - cash(selector).insertAfter(this); - return this; - }, - - append: function (content) { - insertContent(this, content); - return this; - }, - - appendTo: function (parent) { - insertContent(cash(parent), this); - return this; - }, - - before: function (selector) { - cash(selector).insertBefore(this); - return this; - }, - - clone: function () { - return cash(this.map(function (v) { - return v.cloneNode(true); - })); - }, - - empty: function () { - this.html(""); - return this; - }, - - html: function (content) { - if (content === undefined) { - return this[0].innerHTML; - } - var source = content.nodeType ? content[0].outerHTML : content; - return this.each(function (v) { - return v.innerHTML = source; - }); - }, - - insertAfter: function (selector) { - var _this = this; - - cash(selector).each(function (el, i) { - var parent = el.parentNode, - sibling = el.nextSibling; - _this.each(function (v) { - parent.insertBefore(i === 0 ? v : v.cloneNode(true), sibling); - }); - }); - - return this; - }, - - insertBefore: function (selector) { - var _this2 = this; - cash(selector).each(function (el, i) { - var parent = el.parentNode; - _this2.each(function (v) { - parent.insertBefore(i === 0 ? v : v.cloneNode(true), el); - }); - }); - return this; - }, - - prepend: function (content) { - insertContent(this, content, true); - return this; - }, - - prependTo: function (parent) { - insertContent(cash(parent), this, true); - return this; - }, - - remove: function () { - return this.each(function (v) { - if (!!v.parentNode) { - return v.parentNode.removeChild(v); - } - }); - }, - - text: function (content) { - if (content === undefined) { - return this[0].textContent; - } - return this.each(function (v) { - return v.textContent = content; - }); - } - - }); - - var docEl = doc.documentElement; - - fn.extend({ - position: function () { - var el = this[0]; - return { - left: el.offsetLeft, - top: el.offsetTop - }; - }, - - offset: function () { - var rect = this[0].getBoundingClientRect(); - return { - top: rect.top + win.pageYOffset - docEl.clientTop, - left: rect.left + win.pageXOffset - docEl.clientLeft - }; - }, - - offsetParent: function () { - return cash(this[0].offsetParent); - } - - }); - - fn.extend({ - children: function (selector) { - var elems = []; - this.each(function (el) { - push.apply(elems, el.children); - }); - elems = unique(elems); - - return !selector ? elems : elems.filter(function (v) { - return matches(v, selector); - }); - }, - - closest: function (selector) { - if (!selector || this.length < 1) { - return cash(); - } - if (this.is(selector)) { - return this.filter(selector); - } - return this.parent().closest(selector); - }, - - is: function (selector) { - if (!selector) { - return false; - } - - var match = false, - comparator = getCompareFunction(selector); - - this.each(function (el) { - match = comparator(el, selector); - return !match; - }); - - return match; - }, - - find: function (selector) { - if (!selector || selector.nodeType) { - return cash(selector && this.has(selector).length ? selector : null); - } - - var elems = []; - this.each(function (el) { - push.apply(elems, find(selector, el)); - }); - - return unique(elems); - }, - - has: function (selector) { - var comparator = isString(selector) ? function (el) { - return find(selector, el).length !== 0; - } : function (el) { - return el.contains(selector); - }; - - return this.filter(comparator); - }, - - next: function () { - return cash(this[0].nextElementSibling); - }, - - not: function (selector) { - if (!selector) { - return this; - } - - var comparator = getCompareFunction(selector); - - return this.filter(function (el) { - return !comparator(el, selector); - }); - }, - - parent: function () { - var result = []; - - this.each(function (item) { - if (item && item.parentNode) { - result.push(item.parentNode); - } - }); - - return unique(result); - }, - - parents: function (selector) { - var last, - result = []; - - this.each(function (item) { - last = item; - - while (last && last.parentNode && last !== doc.body.parentNode) { - last = last.parentNode; - - if (!selector || selector && matches(last, selector)) { - result.push(last); - } - } - }); - - return unique(result); - }, - - prev: function () { - return cash(this[0].previousElementSibling); - }, - - siblings: function (selector) { - var collection = this.parent().children(selector), - el = this[0]; - - return collection.filter(function (i) { - return i !== el; - }); - } - - }); - - return cash; -}); -; -var Component = function () { - /** - * Generic constructor for all components - * @constructor - * @param {Element} el - * @param {Object} options - */ - function Component(classDef, el, options) { - _classCallCheck(this, Component); - - // Display error if el is valid HTML Element - if (!(el instanceof Element)) { - console.error(Error(el + ' is not an HTML Element')); - } - - // If exists, destroy and reinitialize in child - var ins = classDef.getInstance(el); - if (!!ins) { - ins.destroy(); - } - - this.el = el; - this.$el = cash(el); - } - - /** - * Initializes components - * @param {class} classDef - * @param {Element | NodeList | jQuery} els - * @param {Object} options - */ - - - _createClass(Component, null, [{ - key: "init", - value: function init(classDef, els, options) { - var instances = null; - if (els instanceof Element) { - instances = new classDef(els, options); - } else if (!!els && (els.jquery || els.cash || els instanceof NodeList)) { - var instancesArr = []; - for (var i = 0; i < els.length; i++) { - instancesArr.push(new classDef(els[i], options)); - } - instances = instancesArr; - } - - return instances; - } - }]); - - return Component; -}(); - -; // Required for Meteor package, the use of window prevents export by Meteor -(function (window) { - if (window.Package) { - M = {}; - } else { - window.M = {}; - } - - // Check for jQuery - M.jQueryLoaded = !!window.jQuery; -})(window); - -// AMD -if (typeof define === 'function' && define.amd) { - define('M', [], function () { - return M; - }); - - // Common JS -} else if (typeof exports !== 'undefined' && !exports.nodeType) { - if (typeof module !== 'undefined' && !module.nodeType && module.exports) { - exports = module.exports = M; - } - exports.default = M; -} - -M.version = '1.0.0'; - -M.keys = { - TAB: 9, - ENTER: 13, - ESC: 27, - ARROW_UP: 38, - ARROW_DOWN: 40 -}; - -/** - * TabPress Keydown handler - */ -M.tabPressed = false; -M.keyDown = false; -var docHandleKeydown = function (e) { - M.keyDown = true; - if (e.which === M.keys.TAB || e.which === M.keys.ARROW_DOWN || e.which === M.keys.ARROW_UP) { - M.tabPressed = true; - } -}; -var docHandleKeyup = function (e) { - M.keyDown = false; - if (e.which === M.keys.TAB || e.which === M.keys.ARROW_DOWN || e.which === M.keys.ARROW_UP) { - M.tabPressed = false; - } -}; -var docHandleFocus = function (e) { - if (M.keyDown) { - document.body.classList.add('keyboard-focused'); - } -}; -var docHandleBlur = function (e) { - document.body.classList.remove('keyboard-focused'); -}; -document.addEventListener('keydown', docHandleKeydown, true); -document.addEventListener('keyup', docHandleKeyup, true); -document.addEventListener('focus', docHandleFocus, true); -document.addEventListener('blur', docHandleBlur, true); - -/** - * Initialize jQuery wrapper for plugin - * @param {Class} plugin javascript class - * @param {string} pluginName jQuery plugin name - * @param {string} classRef Class reference name - */ -M.initializeJqueryWrapper = function (plugin, pluginName, classRef) { - jQuery.fn[pluginName] = function (methodOrOptions) { - // Call plugin method if valid method name is passed in - if (plugin.prototype[methodOrOptions]) { - var params = Array.prototype.slice.call(arguments, 1); - - // Getter methods - if (methodOrOptions.slice(0, 3) === 'get') { - var instance = this.first()[0][classRef]; - return instance[methodOrOptions].apply(instance, params); - } - - // Void methods - return this.each(function () { - var instance = this[classRef]; - instance[methodOrOptions].apply(instance, params); - }); - - // Initialize plugin if options or no argument is passed in - } else if (typeof methodOrOptions === 'object' || !methodOrOptions) { - plugin.init(this, arguments[0]); - return this; - } - - // Return error if an unrecognized method name is passed in - jQuery.error("Method " + methodOrOptions + " does not exist on jQuery." + pluginName); - }; -}; - -/** - * Automatically initialize components - * @param {Element} context DOM Element to search within for components - */ -M.AutoInit = function (context) { - // Use document.body if no context is given - var root = !!context ? context : document.body; - - var registry = { - Autocomplete: root.querySelectorAll('.autocomplete:not(.no-autoinit)'), - Carousel: root.querySelectorAll('.carousel:not(.no-autoinit)'), - Chips: root.querySelectorAll('.chips:not(.no-autoinit)'), - Collapsible: root.querySelectorAll('.collapsible:not(.no-autoinit)'), - Datepicker: root.querySelectorAll('.datepicker:not(.no-autoinit)'), - Dropdown: root.querySelectorAll('.dropdown-trigger:not(.no-autoinit)'), - Materialbox: root.querySelectorAll('.materialboxed:not(.no-autoinit)'), - Modal: root.querySelectorAll('.modal:not(.no-autoinit)'), - Parallax: root.querySelectorAll('.parallax:not(.no-autoinit)'), - Pushpin: root.querySelectorAll('.pushpin:not(.no-autoinit)'), - ScrollSpy: root.querySelectorAll('.scrollspy:not(.no-autoinit)'), - FormSelect: root.querySelectorAll('select:not(.no-autoinit)'), - Sidenav: root.querySelectorAll('.sidenav:not(.no-autoinit)'), - Tabs: root.querySelectorAll('.tabs:not(.no-autoinit)'), - TapTarget: root.querySelectorAll('.tap-target:not(.no-autoinit)'), - Timepicker: root.querySelectorAll('.timepicker:not(.no-autoinit)'), - Tooltip: root.querySelectorAll('.tooltipped:not(.no-autoinit)'), - FloatingActionButton: root.querySelectorAll('.fixed-action-btn:not(.no-autoinit)') - }; - - for (var pluginName in registry) { - var plugin = M[pluginName]; - plugin.init(registry[pluginName]); - } -}; - -/** - * Generate approximated selector string for a jQuery object - * @param {jQuery} obj jQuery object to be parsed - * @returns {string} - */ -M.objectSelectorString = function (obj) { - var tagStr = obj.prop('tagName') || ''; - var idStr = obj.attr('id') || ''; - var classStr = obj.attr('class') || ''; - return (tagStr + idStr + classStr).replace(/\s/g, ''); -}; - -// Unique Random ID -M.guid = function () { - function s4() { - return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); - } - return function () { - return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); - }; -}(); - -/** - * Escapes hash from special characters - * @param {string} hash String returned from this.hash - * @returns {string} - */ -M.escapeHash = function (hash) { - return hash.replace(/(:|\.|\[|\]|,|=|\/)/g, '\\$1'); -}; - -M.elementOrParentIsFixed = function (element) { - var $element = $(element); - var $checkElements = $element.add($element.parents()); - var isFixed = false; - $checkElements.each(function () { - if ($(this).css('position') === 'fixed') { - isFixed = true; - return false; - } - }); - return isFixed; -}; - -/** - * @typedef {Object} Edges - * @property {Boolean} top If the top edge was exceeded - * @property {Boolean} right If the right edge was exceeded - * @property {Boolean} bottom If the bottom edge was exceeded - * @property {Boolean} left If the left edge was exceeded - */ - -/** - * @typedef {Object} Bounding - * @property {Number} left left offset coordinate - * @property {Number} top top offset coordinate - * @property {Number} width - * @property {Number} height - */ - -/** - * Escapes hash from special characters - * @param {Element} container Container element that acts as the boundary - * @param {Bounding} bounding element bounding that is being checked - * @param {Number} offset offset from edge that counts as exceeding - * @returns {Edges} - */ -M.checkWithinContainer = function (container, bounding, offset) { - var edges = { - top: false, - right: false, - bottom: false, - left: false - }; - - var containerRect = container.getBoundingClientRect(); - // If body element is smaller than viewport, use viewport height instead. - var containerBottom = container === document.body ? Math.max(containerRect.bottom, window.innerHeight) : containerRect.bottom; - - var scrollLeft = container.scrollLeft; - var scrollTop = container.scrollTop; - - var scrolledX = bounding.left - scrollLeft; - var scrolledY = bounding.top - scrollTop; - - // Check for container and viewport for each edge - if (scrolledX < containerRect.left + offset || scrolledX < offset) { - edges.left = true; - } - - if (scrolledX + bounding.width > containerRect.right - offset || scrolledX + bounding.width > window.innerWidth - offset) { - edges.right = true; - } - - if (scrolledY < containerRect.top + offset || scrolledY < offset) { - edges.top = true; - } - - if (scrolledY + bounding.height > containerBottom - offset || scrolledY + bounding.height > window.innerHeight - offset) { - edges.bottom = true; - } - - return edges; -}; - -M.checkPossibleAlignments = function (el, container, bounding, offset) { - var canAlign = { - top: true, - right: true, - bottom: true, - left: true, - spaceOnTop: null, - spaceOnRight: null, - spaceOnBottom: null, - spaceOnLeft: null - }; - - var containerAllowsOverflow = getComputedStyle(container).overflow === 'visible'; - var containerRect = container.getBoundingClientRect(); - var containerHeight = Math.min(containerRect.height, window.innerHeight); - var containerWidth = Math.min(containerRect.width, window.innerWidth); - var elOffsetRect = el.getBoundingClientRect(); - - var scrollLeft = container.scrollLeft; - var scrollTop = container.scrollTop; - - var scrolledX = bounding.left - scrollLeft; - var scrolledYTopEdge = bounding.top - scrollTop; - var scrolledYBottomEdge = bounding.top + elOffsetRect.height - scrollTop; - - // Check for container and viewport for left - canAlign.spaceOnRight = !containerAllowsOverflow ? containerWidth - (scrolledX + bounding.width) : window.innerWidth - (elOffsetRect.left + bounding.width); - if (canAlign.spaceOnRight < 0) { - canAlign.left = false; - } - - // Check for container and viewport for Right - canAlign.spaceOnLeft = !containerAllowsOverflow ? scrolledX - bounding.width + elOffsetRect.width : elOffsetRect.right - bounding.width; - if (canAlign.spaceOnLeft < 0) { - canAlign.right = false; - } - - // Check for container and viewport for Top - canAlign.spaceOnBottom = !containerAllowsOverflow ? containerHeight - (scrolledYTopEdge + bounding.height + offset) : window.innerHeight - (elOffsetRect.top + bounding.height + offset); - if (canAlign.spaceOnBottom < 0) { - canAlign.top = false; - } - - // Check for container and viewport for Bottom - canAlign.spaceOnTop = !containerAllowsOverflow ? scrolledYBottomEdge - (bounding.height - offset) : elOffsetRect.bottom - (bounding.height + offset); - if (canAlign.spaceOnTop < 0) { - canAlign.bottom = false; - } - - return canAlign; -}; - -M.getOverflowParent = function (element) { - if (element == null) { - return null; - } - - if (element === document.body || getComputedStyle(element).overflow !== 'visible') { - return element; - } - - return M.getOverflowParent(element.parentElement); -}; - -/** - * Gets id of component from a trigger - * @param {Element} trigger trigger - * @returns {string} - */ -M.getIdFromTrigger = function (trigger) { - var id = trigger.getAttribute('data-target'); - if (!id) { - id = trigger.getAttribute('href'); - if (id) { - id = id.slice(1); - } else { - id = ''; - } - } - return id; -}; - -/** - * Multi browser support for document scroll top - * @returns {Number} - */ -M.getDocumentScrollTop = function () { - return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; -}; - -/** - * Multi browser support for document scroll left - * @returns {Number} - */ -M.getDocumentScrollLeft = function () { - return window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0; -}; - -/** - * @typedef {Object} Edges - * @property {Boolean} top If the top edge was exceeded - * @property {Boolean} right If the right edge was exceeded - * @property {Boolean} bottom If the bottom edge was exceeded - * @property {Boolean} left If the left edge was exceeded - */ - -/** - * @typedef {Object} Bounding - * @property {Number} left left offset coordinate - * @property {Number} top top offset coordinate - * @property {Number} width - * @property {Number} height - */ - -/** - * Get time in ms - * @license https://raw.github.com/jashkenas/underscore/master/LICENSE - * @type {function} - * @return {number} - */ -var getTime = Date.now || function () { - return new Date().getTime(); -}; - -/** - * Returns a function, that, when invoked, will only be triggered at most once - * during a given window of time. Normally, the throttled function will run - * as much as it can, without ever going more than once per `wait` duration; - * but if you'd like to disable the execution on the leading edge, pass - * `{leading: false}`. To disable execution on the trailing edge, ditto. - * @license https://raw.github.com/jashkenas/underscore/master/LICENSE - * @param {function} func - * @param {number} wait - * @param {Object=} options - * @returns {Function} - */ -M.throttle = function (func, wait, options) { - var context = void 0, - args = void 0, - result = void 0; - var timeout = null; - var previous = 0; - options || (options = {}); - var later = function () { - previous = options.leading === false ? 0 : getTime(); - timeout = null; - result = func.apply(context, args); - context = args = null; - }; - return function () { - var now = getTime(); - if (!previous && options.leading === false) previous = now; - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0) { - clearTimeout(timeout); - timeout = null; - previous = now; - result = func.apply(context, args); - context = args = null; - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); - } - return result; - }; -}; -; /* - v2.2.0 - 2017 Julian Garnier - Released under the MIT license - */ -var $jscomp = { scope: {} };$jscomp.defineProperty = "function" == typeof Object.defineProperties ? Object.defineProperty : function (e, r, p) { - if (p.get || p.set) throw new TypeError("ES3 does not support getters and setters.");e != Array.prototype && e != Object.prototype && (e[r] = p.value); -};$jscomp.getGlobal = function (e) { - return "undefined" != typeof window && window === e ? e : "undefined" != typeof global && null != global ? global : e; -};$jscomp.global = $jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX = "jscomp_symbol_"; -$jscomp.initSymbol = function () { - $jscomp.initSymbol = function () {};$jscomp.global.Symbol || ($jscomp.global.Symbol = $jscomp.Symbol); -};$jscomp.symbolCounter_ = 0;$jscomp.Symbol = function (e) { - return $jscomp.SYMBOL_PREFIX + (e || "") + $jscomp.symbolCounter_++; -}; -$jscomp.initSymbolIterator = function () { - $jscomp.initSymbol();var e = $jscomp.global.Symbol.iterator;e || (e = $jscomp.global.Symbol.iterator = $jscomp.global.Symbol("iterator"));"function" != typeof Array.prototype[e] && $jscomp.defineProperty(Array.prototype, e, { configurable: !0, writable: !0, value: function () { - return $jscomp.arrayIterator(this); - } });$jscomp.initSymbolIterator = function () {}; -};$jscomp.arrayIterator = function (e) { - var r = 0;return $jscomp.iteratorPrototype(function () { - return r < e.length ? { done: !1, value: e[r++] } : { done: !0 }; - }); -}; -$jscomp.iteratorPrototype = function (e) { - $jscomp.initSymbolIterator();e = { next: e };e[$jscomp.global.Symbol.iterator] = function () { - return this; - };return e; -};$jscomp.array = $jscomp.array || {};$jscomp.iteratorFromArray = function (e, r) { - $jscomp.initSymbolIterator();e instanceof String && (e += "");var p = 0, - m = { next: function () { - if (p < e.length) { - var u = p++;return { value: r(u, e[u]), done: !1 }; - }m.next = function () { - return { done: !0, value: void 0 }; - };return m.next(); - } };m[Symbol.iterator] = function () { - return m; - };return m; -}; -$jscomp.polyfill = function (e, r, p, m) { - if (r) { - p = $jscomp.global;e = e.split(".");for (m = 0; m < e.length - 1; m++) { - var u = e[m];u in p || (p[u] = {});p = p[u]; - }e = e[e.length - 1];m = p[e];r = r(m);r != m && null != r && $jscomp.defineProperty(p, e, { configurable: !0, writable: !0, value: r }); - } -};$jscomp.polyfill("Array.prototype.keys", function (e) { - return e ? e : function () { - return $jscomp.iteratorFromArray(this, function (e) { - return e; - }); - }; -}, "es6-impl", "es3");var $jscomp$this = this; -(function (r) { - M.anime = r(); -})(function () { - function e(a) { - if (!h.col(a)) try { - return document.querySelectorAll(a); - } catch (c) {} - }function r(a, c) { - for (var d = a.length, b = 2 <= arguments.length ? arguments[1] : void 0, f = [], n = 0; n < d; n++) { - if (n in a) { - var k = a[n];c.call(b, k, n, a) && f.push(k); - } - }return f; - }function p(a) { - return a.reduce(function (a, d) { - return a.concat(h.arr(d) ? p(d) : d); - }, []); - }function m(a) { - if (h.arr(a)) return a; - h.str(a) && (a = e(a) || a);return a instanceof NodeList || a instanceof HTMLCollection ? [].slice.call(a) : [a]; - }function u(a, c) { - return a.some(function (a) { - return a === c; - }); - }function C(a) { - var c = {}, - d;for (d in a) { - c[d] = a[d]; - }return c; - }function D(a, c) { - var d = C(a), - b;for (b in a) { - d[b] = c.hasOwnProperty(b) ? c[b] : a[b]; - }return d; - }function z(a, c) { - var d = C(a), - b;for (b in c) { - d[b] = h.und(a[b]) ? c[b] : a[b]; - }return d; - }function T(a) { - a = a.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, function (a, c, d, k) { - return c + c + d + d + k + k; - });var c = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a); - a = parseInt(c[1], 16);var d = parseInt(c[2], 16), - c = parseInt(c[3], 16);return "rgba(" + a + "," + d + "," + c + ",1)"; - }function U(a) { - function c(a, c, b) { - 0 > b && (b += 1);1 < b && --b;return b < 1 / 6 ? a + 6 * (c - a) * b : .5 > b ? c : b < 2 / 3 ? a + (c - a) * (2 / 3 - b) * 6 : a; - }var d = /hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(a) || /hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%,\s*([\d.]+)\)/g.exec(a);a = parseInt(d[1]) / 360;var b = parseInt(d[2]) / 100, - f = parseInt(d[3]) / 100, - d = d[4] || 1;if (0 == b) f = b = a = f;else { - var n = .5 > f ? f * (1 + b) : f + b - f * b, - k = 2 * f - n, - f = c(k, n, a + 1 / 3), - b = c(k, n, a);a = c(k, n, a - 1 / 3); - }return "rgba(" + 255 * f + "," + 255 * b + "," + 255 * a + "," + d + ")"; - }function y(a) { - if (a = /([\+\-]?[0-9#\.]+)(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(a)) return a[2]; - }function V(a) { - if (-1 < a.indexOf("translate") || "perspective" === a) return "px";if (-1 < a.indexOf("rotate") || -1 < a.indexOf("skew")) return "deg"; - }function I(a, c) { - return h.fnc(a) ? a(c.target, c.id, c.total) : a; - }function E(a, c) { - if (c in a.style) return getComputedStyle(a).getPropertyValue(c.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()) || "0"; - }function J(a, c) { - if (h.dom(a) && u(W, c)) return "transform";if (h.dom(a) && (a.getAttribute(c) || h.svg(a) && a[c])) return "attribute";if (h.dom(a) && "transform" !== c && E(a, c)) return "css";if (null != a[c]) return "object"; - }function X(a, c) { - var d = V(c), - d = -1 < c.indexOf("scale") ? 1 : 0 + d;a = a.style.transform;if (!a) return d;for (var b = [], f = [], n = [], k = /(\w+)\((.+?)\)/g; b = k.exec(a);) { - f.push(b[1]), n.push(b[2]); - }a = r(n, function (a, b) { - return f[b] === c; - });return a.length ? a[0] : d; - }function K(a, c) { - switch (J(a, c)) {case "transform": - return X(a, c);case "css": - return E(a, c);case "attribute": - return a.getAttribute(c);}return a[c] || 0; - }function L(a, c) { - var d = /^(\*=|\+=|-=)/.exec(a);if (!d) return a;var b = y(a) || 0;c = parseFloat(c);a = parseFloat(a.replace(d[0], ""));switch (d[0][0]) {case "+": - return c + a + b;case "-": - return c - a + b;case "*": - return c * a + b;} - }function F(a, c) { - return Math.sqrt(Math.pow(c.x - a.x, 2) + Math.pow(c.y - a.y, 2)); - }function M(a) { - a = a.points;for (var c = 0, d, b = 0; b < a.numberOfItems; b++) { - var f = a.getItem(b);0 < b && (c += F(d, f));d = f; - }return c; - }function N(a) { - if (a.getTotalLength) return a.getTotalLength();switch (a.tagName.toLowerCase()) {case "circle": - return 2 * Math.PI * a.getAttribute("r");case "rect": - return 2 * a.getAttribute("width") + 2 * a.getAttribute("height");case "line": - return F({ x: a.getAttribute("x1"), y: a.getAttribute("y1") }, { x: a.getAttribute("x2"), y: a.getAttribute("y2") });case "polyline": - return M(a);case "polygon": - var c = a.points;return M(a) + F(c.getItem(c.numberOfItems - 1), c.getItem(0));} - }function Y(a, c) { - function d(b) { - b = void 0 === b ? 0 : b;return a.el.getPointAtLength(1 <= c + b ? c + b : 0); - }var b = d(), - f = d(-1), - n = d(1);switch (a.property) {case "x": - return b.x;case "y": - return b.y; - case "angle": - return 180 * Math.atan2(n.y - f.y, n.x - f.x) / Math.PI;} - }function O(a, c) { - var d = /-?\d*\.?\d+/g, - b;b = h.pth(a) ? a.totalLength : a;if (h.col(b)) { - if (h.rgb(b)) { - var f = /rgb\((\d+,\s*[\d]+,\s*[\d]+)\)/g.exec(b);b = f ? "rgba(" + f[1] + ",1)" : b; - } else b = h.hex(b) ? T(b) : h.hsl(b) ? U(b) : void 0; - } else f = (f = y(b)) ? b.substr(0, b.length - f.length) : b, b = c && !/\s/g.test(b) ? f + c : f;b += "";return { original: b, numbers: b.match(d) ? b.match(d).map(Number) : [0], strings: h.str(a) || c ? b.split(d) : [] }; - }function P(a) { - a = a ? p(h.arr(a) ? a.map(m) : m(a)) : [];return r(a, function (a, d, b) { - return b.indexOf(a) === d; - }); - }function Z(a) { - var c = P(a);return c.map(function (a, b) { - return { target: a, id: b, total: c.length }; - }); - }function aa(a, c) { - var d = C(c);if (h.arr(a)) { - var b = a.length;2 !== b || h.obj(a[0]) ? h.fnc(c.duration) || (d.duration = c.duration / b) : a = { value: a }; - }return m(a).map(function (a, b) { - b = b ? 0 : c.delay;a = h.obj(a) && !h.pth(a) ? a : { value: a };h.und(a.delay) && (a.delay = b);return a; - }).map(function (a) { - return z(a, d); - }); - }function ba(a, c) { - var d = {}, - b;for (b in a) { - var f = I(a[b], c);h.arr(f) && (f = f.map(function (a) { - return I(a, c); - }), 1 === f.length && (f = f[0]));d[b] = f; - }d.duration = parseFloat(d.duration);d.delay = parseFloat(d.delay);return d; - }function ca(a) { - return h.arr(a) ? A.apply(this, a) : Q[a]; - }function da(a, c) { - var d;return a.tweens.map(function (b) { - b = ba(b, c);var f = b.value, - e = K(c.target, a.name), - k = d ? d.to.original : e, - k = h.arr(f) ? f[0] : k, - w = L(h.arr(f) ? f[1] : f, k), - e = y(w) || y(k) || y(e);b.from = O(k, e);b.to = O(w, e);b.start = d ? d.end : a.offset;b.end = b.start + b.delay + b.duration;b.easing = ca(b.easing);b.elasticity = (1E3 - Math.min(Math.max(b.elasticity, 1), 999)) / 1E3;b.isPath = h.pth(f);b.isColor = h.col(b.from.original);b.isColor && (b.round = 1);return d = b; - }); - }function ea(a, c) { - return r(p(a.map(function (a) { - return c.map(function (b) { - var c = J(a.target, b.name);if (c) { - var d = da(b, a);b = { type: c, property: b.name, animatable: a, tweens: d, duration: d[d.length - 1].end, delay: d[0].delay }; - } else b = void 0;return b; - }); - })), function (a) { - return !h.und(a); - }); - }function R(a, c, d, b) { - var f = "delay" === a;return c.length ? (f ? Math.min : Math.max).apply(Math, c.map(function (b) { - return b[a]; - })) : f ? b.delay : d.offset + b.delay + b.duration; - }function fa(a) { - var c = D(ga, a), - d = D(S, a), - b = Z(a.targets), - f = [], - e = z(c, d), - k;for (k in a) { - e.hasOwnProperty(k) || "targets" === k || f.push({ name: k, offset: e.offset, tweens: aa(a[k], d) }); - }a = ea(b, f);return z(c, { children: [], animatables: b, animations: a, duration: R("duration", a, c, d), delay: R("delay", a, c, d) }); - }function q(a) { - function c() { - return window.Promise && new Promise(function (a) { - return p = a; - }); - }function d(a) { - return g.reversed ? g.duration - a : a; - }function b(a) { - for (var b = 0, c = {}, d = g.animations, f = d.length; b < f;) { - var e = d[b], - k = e.animatable, - h = e.tweens, - n = h.length - 1, - l = h[n];n && (l = r(h, function (b) { - return a < b.end; - })[0] || l);for (var h = Math.min(Math.max(a - l.start - l.delay, 0), l.duration) / l.duration, w = isNaN(h) ? 1 : l.easing(h, l.elasticity), h = l.to.strings, p = l.round, n = [], m = void 0, m = l.to.numbers.length, t = 0; t < m; t++) { - var x = void 0, - x = l.to.numbers[t], - q = l.from.numbers[t], - x = l.isPath ? Y(l.value, w * x) : q + w * (x - q);p && (l.isColor && 2 < t || (x = Math.round(x * p) / p));n.push(x); - }if (l = h.length) for (m = h[0], w = 0; w < l; w++) { - p = h[w + 1], t = n[w], isNaN(t) || (m = p ? m + (t + p) : m + (t + " ")); - } else m = n[0];ha[e.type](k.target, e.property, m, c, k.id);e.currentValue = m;b++; - }if (b = Object.keys(c).length) for (d = 0; d < b; d++) { - H || (H = E(document.body, "transform") ? "transform" : "-webkit-transform"), g.animatables[d].target.style[H] = c[d].join(" "); - }g.currentTime = a;g.progress = a / g.duration * 100; - }function f(a) { - if (g[a]) g[a](g); - }function e() { - g.remaining && !0 !== g.remaining && g.remaining--; - }function k(a) { - var k = g.duration, - n = g.offset, - w = n + g.delay, - r = g.currentTime, - x = g.reversed, - q = d(a);if (g.children.length) { - var u = g.children, - v = u.length; - if (q >= g.currentTime) for (var G = 0; G < v; G++) { - u[G].seek(q); - } else for (; v--;) { - u[v].seek(q); - } - }if (q >= w || !k) g.began || (g.began = !0, f("begin")), f("run");if (q > n && q < k) b(q);else if (q <= n && 0 !== r && (b(0), x && e()), q >= k && r !== k || !k) b(k), x || e();f("update");a >= k && (g.remaining ? (t = h, "alternate" === g.direction && (g.reversed = !g.reversed)) : (g.pause(), g.completed || (g.completed = !0, f("complete"), "Promise" in window && (p(), m = c()))), l = 0); - }a = void 0 === a ? {} : a;var h, - t, - l = 0, - p = null, - m = c(), - g = fa(a);g.reset = function () { - var a = g.direction, - c = g.loop;g.currentTime = 0;g.progress = 0;g.paused = !0;g.began = !1;g.completed = !1;g.reversed = "reverse" === a;g.remaining = "alternate" === a && 1 === c ? 2 : c;b(0);for (a = g.children.length; a--;) { - g.children[a].reset(); - } - };g.tick = function (a) { - h = a;t || (t = h);k((l + h - t) * q.speed); - };g.seek = function (a) { - k(d(a)); - };g.pause = function () { - var a = v.indexOf(g);-1 < a && v.splice(a, 1);g.paused = !0; - };g.play = function () { - g.paused && (g.paused = !1, t = 0, l = d(g.currentTime), v.push(g), B || ia()); - };g.reverse = function () { - g.reversed = !g.reversed;t = 0;l = d(g.currentTime); - };g.restart = function () { - g.pause(); - g.reset();g.play(); - };g.finished = m;g.reset();g.autoplay && g.play();return g; - }var ga = { update: void 0, begin: void 0, run: void 0, complete: void 0, loop: 1, direction: "normal", autoplay: !0, offset: 0 }, - S = { duration: 1E3, delay: 0, easing: "easeOutElastic", elasticity: 500, round: 0 }, - W = "translateX translateY translateZ rotate rotateX rotateY rotateZ scale scaleX scaleY scaleZ skewX skewY perspective".split(" "), - H, - h = { arr: function (a) { - return Array.isArray(a); - }, obj: function (a) { - return -1 < Object.prototype.toString.call(a).indexOf("Object"); - }, - pth: function (a) { - return h.obj(a) && a.hasOwnProperty("totalLength"); - }, svg: function (a) { - return a instanceof SVGElement; - }, dom: function (a) { - return a.nodeType || h.svg(a); - }, str: function (a) { - return "string" === typeof a; - }, fnc: function (a) { - return "function" === typeof a; - }, und: function (a) { - return "undefined" === typeof a; - }, hex: function (a) { - return (/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a) - ); - }, rgb: function (a) { - return (/^rgb/.test(a) - ); - }, hsl: function (a) { - return (/^hsl/.test(a) - ); - }, col: function (a) { - return h.hex(a) || h.rgb(a) || h.hsl(a); - } }, - A = function () { - function a(a, d, b) { - return (((1 - 3 * b + 3 * d) * a + (3 * b - 6 * d)) * a + 3 * d) * a; - }return function (c, d, b, f) { - if (0 <= c && 1 >= c && 0 <= b && 1 >= b) { - var e = new Float32Array(11);if (c !== d || b !== f) for (var k = 0; 11 > k; ++k) { - e[k] = a(.1 * k, c, b); - }return function (k) { - if (c === d && b === f) return k;if (0 === k) return 0;if (1 === k) return 1;for (var h = 0, l = 1; 10 !== l && e[l] <= k; ++l) { - h += .1; - }--l;var l = h + (k - e[l]) / (e[l + 1] - e[l]) * .1, - n = 3 * (1 - 3 * b + 3 * c) * l * l + 2 * (3 * b - 6 * c) * l + 3 * c;if (.001 <= n) { - for (h = 0; 4 > h; ++h) { - n = 3 * (1 - 3 * b + 3 * c) * l * l + 2 * (3 * b - 6 * c) * l + 3 * c;if (0 === n) break;var m = a(l, c, b) - k, - l = l - m / n; - }k = l; - } else if (0 === n) k = l;else { - var l = h, - h = h + .1, - g = 0;do { - m = l + (h - l) / 2, n = a(m, c, b) - k, 0 < n ? h = m : l = m; - } while (1e-7 < Math.abs(n) && 10 > ++g);k = m; - }return a(k, d, f); - }; - } - }; - }(), - Q = function () { - function a(a, b) { - return 0 === a || 1 === a ? a : -Math.pow(2, 10 * (a - 1)) * Math.sin(2 * (a - 1 - b / (2 * Math.PI) * Math.asin(1)) * Math.PI / b); - }var c = "Quad Cubic Quart Quint Sine Expo Circ Back Elastic".split(" "), - d = { In: [[.55, .085, .68, .53], [.55, .055, .675, .19], [.895, .03, .685, .22], [.755, .05, .855, .06], [.47, 0, .745, .715], [.95, .05, .795, .035], [.6, .04, .98, .335], [.6, -.28, .735, .045], a], Out: [[.25, .46, .45, .94], [.215, .61, .355, 1], [.165, .84, .44, 1], [.23, 1, .32, 1], [.39, .575, .565, 1], [.19, 1, .22, 1], [.075, .82, .165, 1], [.175, .885, .32, 1.275], function (b, c) { - return 1 - a(1 - b, c); - }], InOut: [[.455, .03, .515, .955], [.645, .045, .355, 1], [.77, 0, .175, 1], [.86, 0, .07, 1], [.445, .05, .55, .95], [1, 0, 0, 1], [.785, .135, .15, .86], [.68, -.55, .265, 1.55], function (b, c) { - return .5 > b ? a(2 * b, c) / 2 : 1 - a(-2 * b + 2, c) / 2; - }] }, - b = { linear: A(.25, .25, .75, .75) }, - f = {}, - e;for (e in d) { - f.type = e, d[f.type].forEach(function (a) { - return function (d, f) { - b["ease" + a.type + c[f]] = h.fnc(d) ? d : A.apply($jscomp$this, d); - }; - }(f)), f = { type: f.type }; - }return b; - }(), - ha = { css: function (a, c, d) { - return a.style[c] = d; - }, attribute: function (a, c, d) { - return a.setAttribute(c, d); - }, object: function (a, c, d) { - return a[c] = d; - }, transform: function (a, c, d, b, f) { - b[f] || (b[f] = []);b[f].push(c + "(" + d + ")"); - } }, - v = [], - B = 0, - ia = function () { - function a() { - B = requestAnimationFrame(c); - }function c(c) { - var b = v.length;if (b) { - for (var d = 0; d < b;) { - v[d] && v[d].tick(c), d++; - }a(); - } else cancelAnimationFrame(B), B = 0; - }return a; - }();q.version = "2.2.0";q.speed = 1;q.running = v;q.remove = function (a) { - a = P(a);for (var c = v.length; c--;) { - for (var d = v[c], b = d.animations, f = b.length; f--;) { - u(a, b[f].animatable.target) && (b.splice(f, 1), b.length || d.pause()); - } - } - };q.getValue = K;q.path = function (a, c) { - var d = h.str(a) ? e(a)[0] : a, - b = c || 100;return function (a) { - return { el: d, property: a, totalLength: N(d) * (b / 100) }; - }; - };q.setDashoffset = function (a) { - var c = N(a);a.setAttribute("stroke-dasharray", c);return c; - };q.bezier = A;q.easings = Q;q.timeline = function (a) { - var c = q(a);c.pause();c.duration = 0;c.add = function (d) { - c.children.forEach(function (a) { - a.began = !0;a.completed = !0; - });m(d).forEach(function (b) { - var d = z(b, D(S, a || {}));d.targets = d.targets || a.targets;b = c.duration;var e = d.offset;d.autoplay = !1;d.direction = c.direction;d.offset = h.und(e) ? b : L(e, b);c.began = !0;c.completed = !0;c.seek(d.offset);d = q(d);d.began = !0;d.completed = !0;d.duration > b && (c.duration = d.duration);c.children.push(d); - });c.seek(0);c.reset();c.autoplay && c.restart();return c; - };return c; - };q.random = function (a, c) { - return Math.floor(Math.random() * (c - a + 1)) + a; - };return q; -}); -;(function ($, anim) { - 'use strict'; - - var _defaults = { - accordion: true, - onOpenStart: undefined, - onOpenEnd: undefined, - onCloseStart: undefined, - onCloseEnd: undefined, - inDuration: 300, - outDuration: 300 - }; - - /** - * @class - * - */ - - var Collapsible = function (_Component) { - _inherits(Collapsible, _Component); - - /** - * Construct Collapsible instance - * @constructor - * @param {Element} el - * @param {Object} options - */ - function Collapsible(el, options) { - _classCallCheck(this, Collapsible); - - var _this3 = _possibleConstructorReturn(this, (Collapsible.__proto__ || Object.getPrototypeOf(Collapsible)).call(this, Collapsible, el, options)); - - _this3.el.M_Collapsible = _this3; - - /** - * Options for the collapsible - * @member Collapsible#options - * @prop {Boolean} [accordion=false] - Type of the collapsible - * @prop {Function} onOpenStart - Callback function called before collapsible is opened - * @prop {Function} onOpenEnd - Callback function called after collapsible is opened - * @prop {Function} onCloseStart - Callback function called before collapsible is closed - * @prop {Function} onCloseEnd - Callback function called after collapsible is closed - * @prop {Number} inDuration - Transition in duration in milliseconds. - * @prop {Number} outDuration - Transition duration in milliseconds. - */ - _this3.options = $.extend({}, Collapsible.defaults, options); - - // Setup tab indices - _this3.$headers = _this3.$el.children('li').children('.collapsible-header'); - _this3.$headers.attr('tabindex', 0); - - _this3._setupEventHandlers(); - - // Open first active - var $activeBodies = _this3.$el.children('li.active').children('.collapsible-body'); - if (_this3.options.accordion) { - // Handle Accordion - $activeBodies.first().css('display', 'block'); - } else { - // Handle Expandables - $activeBodies.css('display', 'block'); - } - return _this3; - } - - _createClass(Collapsible, [{ - key: "destroy", - - - /** - * Teardown component - */ - value: function destroy() { - this._removeEventHandlers(); - this.el.M_Collapsible = undefined; - } - - /** - * Setup Event Handlers - */ - - }, { - key: "_setupEventHandlers", - value: function _setupEventHandlers() { - var _this4 = this; - - this._handleCollapsibleClickBound = this._handleCollapsibleClick.bind(this); - this._handleCollapsibleKeydownBound = this._handleCollapsibleKeydown.bind(this); - this.el.addEventListener('click', this._handleCollapsibleClickBound); - this.$headers.each(function (header) { - header.addEventListener('keydown', _this4._handleCollapsibleKeydownBound); - }); - } - - /** - * Remove Event Handlers - */ - - }, { - key: "_removeEventHandlers", - value: function _removeEventHandlers() { - var _this5 = this; - - this.el.removeEventListener('click', this._handleCollapsibleClickBound); - this.$headers.each(function (header) { - header.removeEventListener('keydown', _this5._handleCollapsibleKeydownBound); - }); - } - - /** - * Handle Collapsible Click - * @param {Event} e - */ - - }, { - key: "_handleCollapsibleClick", - value: function _handleCollapsibleClick(e) { - var $header = $(e.target).closest('.collapsible-header'); - if (e.target && $header.length) { - var $collapsible = $header.closest('.collapsible'); - if ($collapsible[0] === this.el) { - var $collapsibleLi = $header.closest('li'); - var $collapsibleLis = $collapsible.children('li'); - var isActive = $collapsibleLi[0].classList.contains('active'); - var index = $collapsibleLis.index($collapsibleLi); - - if (isActive) { - this.close(index); - } else { - this.open(index); - } - } - } - } - - /** - * Handle Collapsible Keydown - * @param {Event} e - */ - - }, { - key: "_handleCollapsibleKeydown", - value: function _handleCollapsibleKeydown(e) { - if (e.keyCode === 13) { - this._handleCollapsibleClickBound(e); - } - } - - /** - * Animate in collapsible slide - * @param {Number} index - 0th index of slide - */ - - }, { - key: "_animateIn", - value: function _animateIn(index) { - var _this6 = this; - - var $collapsibleLi = this.$el.children('li').eq(index); - if ($collapsibleLi.length) { - var $body = $collapsibleLi.children('.collapsible-body'); - - anim.remove($body[0]); - $body.css({ - display: 'block', - overflow: 'hidden', - height: 0, - paddingTop: '', - paddingBottom: '' - }); - - var pTop = $body.css('padding-top'); - var pBottom = $body.css('padding-bottom'); - var finalHeight = $body[0].scrollHeight; - $body.css({ - paddingTop: 0, - paddingBottom: 0 - }); - - anim({ - targets: $body[0], - height: finalHeight, - paddingTop: pTop, - paddingBottom: pBottom, - duration: this.options.inDuration, - easing: 'easeInOutCubic', - complete: function (anim) { - $body.css({ - overflow: '', - paddingTop: '', - paddingBottom: '', - height: '' - }); - - // onOpenEnd callback - if (typeof _this6.options.onOpenEnd === 'function') { - _this6.options.onOpenEnd.call(_this6, $collapsibleLi[0]); - } - } - }); - } - } - - /** - * Animate out collapsible slide - * @param {Number} index - 0th index of slide to open - */ - - }, { - key: "_animateOut", - value: function _animateOut(index) { - var _this7 = this; - - var $collapsibleLi = this.$el.children('li').eq(index); - if ($collapsibleLi.length) { - var $body = $collapsibleLi.children('.collapsible-body'); - anim.remove($body[0]); - $body.css('overflow', 'hidden'); - anim({ - targets: $body[0], - height: 0, - paddingTop: 0, - paddingBottom: 0, - duration: this.options.outDuration, - easing: 'easeInOutCubic', - complete: function () { - $body.css({ - height: '', - overflow: '', - padding: '', - display: '' - }); - - // onCloseEnd callback - if (typeof _this7.options.onCloseEnd === 'function') { - _this7.options.onCloseEnd.call(_this7, $collapsibleLi[0]); - } - } - }); - } - } - - /** - * Open Collapsible - * @param {Number} index - 0th index of slide - */ - - }, { - key: "open", - value: function open(index) { - var _this8 = this; - - var $collapsibleLi = this.$el.children('li').eq(index); - if ($collapsibleLi.length && !$collapsibleLi[0].classList.contains('active')) { - // onOpenStart callback - if (typeof this.options.onOpenStart === 'function') { - this.options.onOpenStart.call(this, $collapsibleLi[0]); - } - - // Handle accordion behavior - if (this.options.accordion) { - var $collapsibleLis = this.$el.children('li'); - var $activeLis = this.$el.children('li.active'); - $activeLis.each(function (el) { - var index = $collapsibleLis.index($(el)); - _this8.close(index); - }); - } - - // Animate in - $collapsibleLi[0].classList.add('active'); - this._animateIn(index); - } - } - - /** - * Close Collapsible - * @param {Number} index - 0th index of slide - */ - - }, { - key: "close", - value: function close(index) { - var $collapsibleLi = this.$el.children('li').eq(index); - if ($collapsibleLi.length && $collapsibleLi[0].classList.contains('active')) { - // onCloseStart callback - if (typeof this.options.onCloseStart === 'function') { - this.options.onCloseStart.call(this, $collapsibleLi[0]); - } - - // Animate out - $collapsibleLi[0].classList.remove('active'); - this._animateOut(index); - } - } - }], [{ - key: "init", - value: function init(els, options) { - return _get(Collapsible.__proto__ || Object.getPrototypeOf(Collapsible), "init", this).call(this, this, els, options); - } - - /** - * Get Instance - */ - - }, { - key: "getInstance", - value: function getInstance(el) { - var domElem = !!el.jquery ? el[0] : el; - return domElem.M_Collapsible; - } - }, { - key: "defaults", - get: function () { - return _defaults; - } - }]); - - return Collapsible; - }(Component); - - M.Collapsible = Collapsible; - - if (M.jQueryLoaded) { - M.initializeJqueryWrapper(Collapsible, 'collapsible', 'M_Collapsible'); - } -})(cash, M.anime); -;(function ($, anim) { - 'use strict'; - - var _defaults = { - alignment: 'left', - autoFocus: true, - constrainWidth: true, - container: null, - coverTrigger: true, - closeOnClick: true, - hover: false, - inDuration: 150, - outDuration: 250, - onOpenStart: null, - onOpenEnd: null, - onCloseStart: null, - onCloseEnd: null, - onItemClick: null - }; - - /** - * @class - */ - - var Dropdown = function (_Component2) { - _inherits(Dropdown, _Component2); - - function Dropdown(el, options) { - _classCallCheck(this, Dropdown); - - var _this9 = _possibleConstructorReturn(this, (Dropdown.__proto__ || Object.getPrototypeOf(Dropdown)).call(this, Dropdown, el, options)); - - _this9.el.M_Dropdown = _this9; - Dropdown._dropdowns.push(_this9); - - _this9.id = M.getIdFromTrigger(el); - _this9.dropdownEl = document.getElementById(_this9.id); - _this9.$dropdownEl = $(_this9.dropdownEl); - - /** - * Options for the dropdown - * @member Dropdown#options - * @prop {String} [alignment='left'] - Edge which the dropdown is aligned to - * @prop {Boolean} [autoFocus=true] - Automatically focus dropdown el for keyboard - * @prop {Boolean} [constrainWidth=true] - Constrain width to width of the button - * @prop {Element} container - Container element to attach dropdown to (optional) - * @prop {Boolean} [coverTrigger=true] - Place dropdown over trigger - * @prop {Boolean} [closeOnClick=true] - Close on click of dropdown item - * @prop {Boolean} [hover=false] - Open dropdown on hover - * @prop {Number} [inDuration=150] - Duration of open animation in ms - * @prop {Number} [outDuration=250] - Duration of close animation in ms - * @prop {Function} onOpenStart - Function called when dropdown starts opening - * @prop {Function} onOpenEnd - Function called when dropdown finishes opening - * @prop {Function} onCloseStart - Function called when dropdown starts closing - * @prop {Function} onCloseEnd - Function called when dropdown finishes closing - */ - _this9.options = $.extend({}, Dropdown.defaults, options); - - /** - * Describes open/close state of dropdown - * @type {Boolean} - */ - _this9.isOpen = false; - - /** - * Describes if dropdown content is scrollable - * @type {Boolean} - */ - _this9.isScrollable = false; - - /** - * Describes if touch moving on dropdown content - * @type {Boolean} - */ - _this9.isTouchMoving = false; - - _this9.focusedIndex = -1; - _this9.filterQuery = []; - - // Move dropdown-content after dropdown-trigger - if (!!_this9.options.container) { - $(_this9.options.container).append(_this9.dropdownEl); - } else { - _this9.$el.after(_this9.dropdownEl); - } - - _this9._makeDropdownFocusable(); - _this9._resetFilterQueryBound = _this9._resetFilterQuery.bind(_this9); - _this9._handleDocumentClickBound = _this9._handleDocumentClick.bind(_this9); - _this9._handleDocumentTouchmoveBound = _this9._handleDocumentTouchmove.bind(_this9); - _this9._handleDropdownClickBound = _this9._handleDropdownClick.bind(_this9); - _this9._handleDropdownKeydownBound = _this9._handleDropdownKeydown.bind(_this9); - _this9._handleTriggerKeydownBound = _this9._handleTriggerKeydown.bind(_this9); - _this9._setupEventHandlers(); - return _this9; - } - - _createClass(Dropdown, [{ - key: "destroy", - - - /** - * Teardown component - */ - value: function destroy() { - this._resetDropdownStyles(); - this._removeEventHandlers(); - Dropdown._dropdowns.splice(Dropdown._dropdowns.indexOf(this), 1); - this.el.M_Dropdown = undefined; - } - - /** - * Setup Event Handlers - */ - - }, { - key: "_setupEventHandlers", - value: function _setupEventHandlers() { - // Trigger keydown handler - this.el.addEventListener('keydown', this._handleTriggerKeydownBound); - - // Item click handler - this.dropdownEl.addEventListener('click', this._handleDropdownClickBound); - - // Hover event handlers - if (this.options.hover) { - this._handleMouseEnterBound = this._handleMouseEnter.bind(this); - this.el.addEventListener('mouseenter', this._handleMouseEnterBound); - this._handleMouseLeaveBound = this._handleMouseLeave.bind(this); - this.el.addEventListener('mouseleave', this._handleMouseLeaveBound); - this.dropdownEl.addEventListener('mouseleave', this._handleMouseLeaveBound); - - // Click event handlers - } else { - this._handleClickBound = this._handleClick.bind(this); - this.el.addEventListener('click', this._handleClickBound); - } - } - - /** - * Remove Event Handlers - */ - - }, { - key: "_removeEventHandlers", - value: function _removeEventHandlers() { - this.el.removeEventListener('keydown', this._handleTriggerKeydownBound); - this.dropdownEl.removeEventListener('click', this._handleDropdownClickBound); - - if (this.options.hover) { - this.el.removeEventListener('mouseenter', this._handleMouseEnterBound); - this.el.removeEventListener('mouseleave', this._handleMouseLeaveBound); - this.dropdownEl.removeEventListener('mouseleave', this._handleMouseLeaveBound); - } else { - this.el.removeEventListener('click', this._handleClickBound); - } - } - }, { - key: "_setupTemporaryEventHandlers", - value: function _setupTemporaryEventHandlers() { - // Use capture phase event handler to prevent click - document.body.addEventListener('click', this._handleDocumentClickBound, true); - document.body.addEventListener('touchend', this._handleDocumentClickBound); - document.body.addEventListener('touchmove', this._handleDocumentTouchmoveBound); - this.dropdownEl.addEventListener('keydown', this._handleDropdownKeydownBound); - } - }, { - key: "_removeTemporaryEventHandlers", - value: function _removeTemporaryEventHandlers() { - // Use capture phase event handler to prevent click - document.body.removeEventListener('click', this._handleDocumentClickBound, true); - document.body.removeEventListener('touchend', this._handleDocumentClickBound); - document.body.removeEventListener('touchmove', this._handleDocumentTouchmoveBound); - this.dropdownEl.removeEventListener('keydown', this._handleDropdownKeydownBound); - } - }, { - key: "_handleClick", - value: function _handleClick(e) { - e.preventDefault(); - this.open(); - } - }, { - key: "_handleMouseEnter", - value: function _handleMouseEnter() { - this.open(); - } - }, { - key: "_handleMouseLeave", - value: function _handleMouseLeave(e) { - var toEl = e.toElement || e.relatedTarget; - var leaveToDropdownContent = !!$(toEl).closest('.dropdown-content').length; - var leaveToActiveDropdownTrigger = false; - - var $closestTrigger = $(toEl).closest('.dropdown-trigger'); - if ($closestTrigger.length && !!$closestTrigger[0].M_Dropdown && $closestTrigger[0].M_Dropdown.isOpen) { - leaveToActiveDropdownTrigger = true; - } - - // Close hover dropdown if mouse did not leave to either active dropdown-trigger or dropdown-content - if (!leaveToActiveDropdownTrigger && !leaveToDropdownContent) { - this.close(); - } - } - }, { - key: "_handleDocumentClick", - value: function _handleDocumentClick(e) { - var _this10 = this; - - var $target = $(e.target); - if (this.options.closeOnClick && $target.closest('.dropdown-content').length && !this.isTouchMoving) { - // isTouchMoving to check if scrolling on mobile. - setTimeout(function () { - _this10.close(); - }, 0); - } else if ($target.closest('.dropdown-trigger').length || !$target.closest('.dropdown-content').length) { - setTimeout(function () { - _this10.close(); - }, 0); - } - this.isTouchMoving = false; - } - }, { - key: "_handleTriggerKeydown", - value: function _handleTriggerKeydown(e) { - // ARROW DOWN OR ENTER WHEN SELECT IS CLOSED - open Dropdown - if ((e.which === M.keys.ARROW_DOWN || e.which === M.keys.ENTER) && !this.isOpen) { - e.preventDefault(); - this.open(); - } - } - - /** - * Handle Document Touchmove - * @param {Event} e - */ - - }, { - key: "_handleDocumentTouchmove", - value: function _handleDocumentTouchmove(e) { - var $target = $(e.target); - if ($target.closest('.dropdown-content').length) { - this.isTouchMoving = true; - } - } - - /** - * Handle Dropdown Click - * @param {Event} e - */ - - }, { - key: "_handleDropdownClick", - value: function _handleDropdownClick(e) { - // onItemClick callback - if (typeof this.options.onItemClick === 'function') { - var itemEl = $(e.target).closest('li')[0]; - this.options.onItemClick.call(this, itemEl); - } - } - - /** - * Handle Dropdown Keydown - * @param {Event} e - */ - - }, { - key: "_handleDropdownKeydown", - value: function _handleDropdownKeydown(e) { - if (e.which === M.keys.TAB) { - e.preventDefault(); - this.close(); - - // Navigate down dropdown list - } else if ((e.which === M.keys.ARROW_DOWN || e.which === M.keys.ARROW_UP) && this.isOpen) { - e.preventDefault(); - var direction = e.which === M.keys.ARROW_DOWN ? 1 : -1; - var newFocusedIndex = this.focusedIndex; - var foundNewIndex = false; - do { - newFocusedIndex = newFocusedIndex + direction; - - if (!!this.dropdownEl.children[newFocusedIndex] && this.dropdownEl.children[newFocusedIndex].tabIndex !== -1) { - foundNewIndex = true; - break; - } - } while (newFocusedIndex < this.dropdownEl.children.length && newFocusedIndex >= 0); - - if (foundNewIndex) { - this.focusedIndex = newFocusedIndex; - this._focusFocusedItem(); - } - - // ENTER selects choice on focused item - } else if (e.which === M.keys.ENTER && this.isOpen) { - // Search for and ") + ''; - } - }, { - key: "renderRow", - value: function renderRow(days, isRTL, isRowSelected) { - return '' + (isRTL ? days.reverse() : days).join('') + ''; - } - }, { - key: "renderTable", - value: function renderTable(opts, data, randId) { - return '
' + this.renderHead(opts) + this.renderBody(data) + '
'; - } - }, { - key: "renderHead", - value: function renderHead(opts) { - var i = void 0, - arr = []; - for (i = 0; i < 7; i++) { - arr.push("" + this.renderDayName(opts, i, true) + ""); - } - return '' + (opts.isRTL ? arr.reverse() : arr).join('') + ''; - } - }, { - key: "renderBody", - value: function renderBody(rows) { - return '' + rows.join('') + ''; - } - }, { - key: "renderTitle", - value: function renderTitle(instance, c, year, month, refYear, randId) { - var i = void 0, - j = void 0, - arr = void 0, - opts = this.options, - isMinYear = year === opts.minYear, - isMaxYear = year === opts.maxYear, - html = '
', - monthHtml = void 0, - yearHtml = void 0, - prev = true, - next = true; - - for (arr = [], i = 0; i < 12; i++) { - arr.push(''); - } - - monthHtml = ''; - - if ($.isArray(opts.yearRange)) { - i = opts.yearRange[0]; - j = opts.yearRange[1] + 1; - } else { - i = year - opts.yearRange; - j = 1 + year + opts.yearRange; - } - - for (arr = []; i < j && i <= opts.maxYear; i++) { - if (i >= opts.minYear) { - arr.push(""); - } - } - - yearHtml = ""; - - var leftArrow = ''; - html += ""; - - html += '
'; - if (opts.showMonthAfterYear) { - html += yearHtml + monthHtml; - } else { - html += monthHtml + yearHtml; - } - html += '
'; - - if (isMinYear && (month === 0 || opts.minMonth >= month)) { - prev = false; - } - - if (isMaxYear && (month === 11 || opts.maxMonth <= month)) { - next = false; - } - - var rightArrow = ''; - html += ""; - - return html += '
'; - } - - /** - * refresh the HTML - */ - - }, { - key: "draw", - value: function draw(force) { - if (!this.isOpen && !force) { - return; - } - var opts = this.options, - minYear = opts.minYear, - maxYear = opts.maxYear, - minMonth = opts.minMonth, - maxMonth = opts.maxMonth, - html = '', - randId = void 0; - - if (this._y <= minYear) { - this._y = minYear; - if (!isNaN(minMonth) && this._m < minMonth) { - this._m = minMonth; - } - } - if (this._y >= maxYear) { - this._y = maxYear; - if (!isNaN(maxMonth) && this._m > maxMonth) { - this._m = maxMonth; - } - } - - randId = 'datepicker-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2); - - for (var c = 0; c < 1; c++) { - this._renderDateDisplay(); - html += this.renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId); - } - - this.destroySelects(); - - this.calendarEl.innerHTML = html; - - // Init Materialize Select - var yearSelect = this.calendarEl.querySelector('.orig-select-year'); - var monthSelect = this.calendarEl.querySelector('.orig-select-month'); - M.FormSelect.init(yearSelect, { - classes: 'select-year', - dropdownOptions: { container: document.body, constrainWidth: false } - }); - M.FormSelect.init(monthSelect, { - classes: 'select-month', - dropdownOptions: { container: document.body, constrainWidth: false } - }); - - // Add change handlers for select - yearSelect.addEventListener('change', this._handleYearChange.bind(this)); - monthSelect.addEventListener('change', this._handleMonthChange.bind(this)); - - if (typeof this.options.onDraw === 'function') { - this.options.onDraw(this); - } - } - - /** - * Setup Event Handlers - */ - - }, { - key: "_setupEventHandlers", - value: function _setupEventHandlers() { - this._handleInputKeydownBound = this._handleInputKeydown.bind(this); - this._handleInputClickBound = this._handleInputClick.bind(this); - this._handleInputChangeBound = this._handleInputChange.bind(this); - this._handleCalendarClickBound = this._handleCalendarClick.bind(this); - this._finishSelectionBound = this._finishSelection.bind(this); - this._handleMonthChange = this._handleMonthChange.bind(this); - this._closeBound = this.close.bind(this); - - this.el.addEventListener('click', this._handleInputClickBound); - this.el.addEventListener('keydown', this._handleInputKeydownBound); - this.el.addEventListener('change', this._handleInputChangeBound); - this.calendarEl.addEventListener('click', this._handleCalendarClickBound); - this.doneBtn.addEventListener('click', this._finishSelectionBound); - this.cancelBtn.addEventListener('click', this._closeBound); - - if (this.options.showClearBtn) { - this._handleClearClickBound = this._handleClearClick.bind(this); - this.clearBtn.addEventListener('click', this._handleClearClickBound); - } - } - }, { - key: "_setupVariables", - value: function _setupVariables() { - var _this56 = this; - - this.$modalEl = $(Datepicker._template); - this.modalEl = this.$modalEl[0]; - - this.calendarEl = this.modalEl.querySelector('.datepicker-calendar'); - - this.yearTextEl = this.modalEl.querySelector('.year-text'); - this.dateTextEl = this.modalEl.querySelector('.date-text'); - if (this.options.showClearBtn) { - this.clearBtn = this.modalEl.querySelector('.datepicker-clear'); - } - this.doneBtn = this.modalEl.querySelector('.datepicker-done'); - this.cancelBtn = this.modalEl.querySelector('.datepicker-cancel'); - - this.formats = { - d: function () { - return _this56.date.getDate(); - }, - dd: function () { - var d = _this56.date.getDate(); - return (d < 10 ? '0' : '') + d; - }, - ddd: function () { - return _this56.options.i18n.weekdaysShort[_this56.date.getDay()]; - }, - dddd: function () { - return _this56.options.i18n.weekdays[_this56.date.getDay()]; - }, - m: function () { - return _this56.date.getMonth() + 1; - }, - mm: function () { - var m = _this56.date.getMonth() + 1; - return (m < 10 ? '0' : '') + m; - }, - mmm: function () { - return _this56.options.i18n.monthsShort[_this56.date.getMonth()]; - }, - mmmm: function () { - return _this56.options.i18n.months[_this56.date.getMonth()]; - }, - yy: function () { - return ('' + _this56.date.getFullYear()).slice(2); - }, - yyyy: function () { - return _this56.date.getFullYear(); - } - }; - } - - /** - * Remove Event Handlers - */ - - }, { - key: "_removeEventHandlers", - value: function _removeEventHandlers() { - this.el.removeEventListener('click', this._handleInputClickBound); - this.el.removeEventListener('keydown', this._handleInputKeydownBound); - this.el.removeEventListener('change', this._handleInputChangeBound); - this.calendarEl.removeEventListener('click', this._handleCalendarClickBound); - } - }, { - key: "_handleInputClick", - value: function _handleInputClick() { - this.open(); - } - }, { - key: "_handleInputKeydown", - value: function _handleInputKeydown(e) { - if (e.which === M.keys.ENTER) { - e.preventDefault(); - this.open(); - } - } - }, { - key: "_handleCalendarClick", - value: function _handleCalendarClick(e) { - if (!this.isOpen) { - return; - } - - var $target = $(e.target); - if (!$target.hasClass('is-disabled')) { - if ($target.hasClass('datepicker-day-button') && !$target.hasClass('is-empty') && !$target.parent().hasClass('is-disabled')) { - this.setDate(new Date(e.target.getAttribute('data-year'), e.target.getAttribute('data-month'), e.target.getAttribute('data-day'))); - if (this.options.autoClose) { - this._finishSelection(); - } - } else if ($target.closest('.month-prev').length) { - this.prevMonth(); - } else if ($target.closest('.month-next').length) { - this.nextMonth(); - } - } - } - }, { - key: "_handleClearClick", - value: function _handleClearClick() { - this.date = null; - this.setInputValue(); - this.close(); - } - }, { - key: "_handleMonthChange", - value: function _handleMonthChange(e) { - this.gotoMonth(e.target.value); - } - }, { - key: "_handleYearChange", - value: function _handleYearChange(e) { - this.gotoYear(e.target.value); - } - - /** - * change view to a specific month (zero-index, e.g. 0: January) - */ - - }, { - key: "gotoMonth", - value: function gotoMonth(month) { - if (!isNaN(month)) { - this.calendars[0].month = parseInt(month, 10); - this.adjustCalendars(); - } - } - - /** - * change view to a specific full year (e.g. "2012") - */ - - }, { - key: "gotoYear", - value: function gotoYear(year) { - if (!isNaN(year)) { - this.calendars[0].year = parseInt(year, 10); - this.adjustCalendars(); - } - } - }, { - key: "_handleInputChange", - value: function _handleInputChange(e) { - var date = void 0; - - // Prevent change event from being fired when triggered by the plugin - if (e.firedBy === this) { - return; - } - if (this.options.parse) { - date = this.options.parse(this.el.value, this.options.format); - } else { - date = new Date(Date.parse(this.el.value)); - } - - if (Datepicker._isDate(date)) { - this.setDate(date); - } - } - }, { - key: "renderDayName", - value: function renderDayName(opts, day, abbr) { - day += opts.firstDay; - while (day >= 7) { - day -= 7; - } - return abbr ? opts.i18n.weekdaysAbbrev[day] : opts.i18n.weekdays[day]; - } - - /** - * Set input value to the selected date and close Datepicker - */ - - }, { - key: "_finishSelection", - value: function _finishSelection() { - this.setInputValue(); - this.close(); - } - - /** - * Open Datepicker - */ - - }, { - key: "open", - value: function open() { - if (this.isOpen) { - return; - } - - this.isOpen = true; - if (typeof this.options.onOpen === 'function') { - this.options.onOpen.call(this); - } - this.draw(); - this.modal.open(); - return this; - } - - /** - * Close Datepicker - */ - - }, { - key: "close", - value: function close() { - if (!this.isOpen) { - return; - } - - this.isOpen = false; - if (typeof this.options.onClose === 'function') { - this.options.onClose.call(this); - } - this.modal.close(); - return this; - } - }], [{ - key: "init", - value: function init(els, options) { - return _get(Datepicker.__proto__ || Object.getPrototypeOf(Datepicker), "init", this).call(this, this, els, options); - } - }, { - key: "_isDate", - value: function _isDate(obj) { - return (/Date/.test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime()) - ); - } - }, { - key: "_isWeekend", - value: function _isWeekend(date) { - var day = date.getDay(); - return day === 0 || day === 6; - } - }, { - key: "_setToStartOfDay", - value: function _setToStartOfDay(date) { - if (Datepicker._isDate(date)) date.setHours(0, 0, 0, 0); - } - }, { - key: "_getDaysInMonth", - value: function _getDaysInMonth(year, month) { - return [31, Datepicker._isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; - } - }, { - key: "_isLeapYear", - value: function _isLeapYear(year) { - // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951 - return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; - } - }, { - key: "_compareDates", - value: function _compareDates(a, b) { - // weak date comparison (use setToStartOfDay(date) to ensure correct result) - return a.getTime() === b.getTime(); - } - }, { - key: "_setToStartOfDay", - value: function _setToStartOfDay(date) { - if (Datepicker._isDate(date)) date.setHours(0, 0, 0, 0); - } - - /** - * Get Instance - */ - - }, { - key: "getInstance", - value: function getInstance(el) { - var domElem = !!el.jquery ? el[0] : el; - return domElem.M_Datepicker; - } - }, { - key: "defaults", - get: function () { - return _defaults; - } - }]); - - return Datepicker; - }(Component); - - Datepicker._template = [''].join(''); - - M.Datepicker = Datepicker; - - if (M.jQueryLoaded) { - M.initializeJqueryWrapper(Datepicker, 'datepicker', 'M_Datepicker'); - } -})(cash); -;(function ($) { - 'use strict'; - - var _defaults = { - dialRadius: 135, - outerRadius: 105, - innerRadius: 70, - tickRadius: 20, - duration: 350, - container: null, - defaultTime: 'now', // default time, 'now' or '13:14' e.g. - fromNow: 0, // Millisecond offset from the defaultTime - showClearBtn: false, - - // internationalization - i18n: { - cancel: 'Cancel', - clear: 'Clear', - done: 'Ok' - }, - - autoClose: false, // auto close when minute is selected - twelveHour: true, // change to 12 hour AM/PM clock from 24 hour - vibrate: true, // vibrate the device when dragging clock hand - - // Callbacks - onOpenStart: null, - onOpenEnd: null, - onCloseStart: null, - onCloseEnd: null, - onSelect: null - }; - - /** - * @class - * - */ - - var Timepicker = function (_Component16) { - _inherits(Timepicker, _Component16); - - function Timepicker(el, options) { - _classCallCheck(this, Timepicker); - - var _this57 = _possibleConstructorReturn(this, (Timepicker.__proto__ || Object.getPrototypeOf(Timepicker)).call(this, Timepicker, el, options)); - - _this57.el.M_Timepicker = _this57; - - _this57.options = $.extend({}, Timepicker.defaults, options); - - _this57.id = M.guid(); - _this57._insertHTMLIntoDOM(); - _this57._setupModal(); - _this57._setupVariables(); - _this57._setupEventHandlers(); - - _this57._clockSetup(); - _this57._pickerSetup(); - return _this57; - } - - _createClass(Timepicker, [{ - key: "destroy", - - - /** - * Teardown component - */ - value: function destroy() { - this._removeEventHandlers(); - this.modal.destroy(); - $(this.modalEl).remove(); - this.el.M_Timepicker = undefined; - } - - /** - * Setup Event Handlers - */ - - }, { - key: "_setupEventHandlers", - value: function _setupEventHandlers() { - this._handleInputKeydownBound = this._handleInputKeydown.bind(this); - this._handleInputClickBound = this._handleInputClick.bind(this); - this._handleClockClickStartBound = this._handleClockClickStart.bind(this); - this._handleDocumentClickMoveBound = this._handleDocumentClickMove.bind(this); - this._handleDocumentClickEndBound = this._handleDocumentClickEnd.bind(this); - - this.el.addEventListener('click', this._handleInputClickBound); - this.el.addEventListener('keydown', this._handleInputKeydownBound); - this.plate.addEventListener('mousedown', this._handleClockClickStartBound); - this.plate.addEventListener('touchstart', this._handleClockClickStartBound); - - $(this.spanHours).on('click', this.showView.bind(this, 'hours')); - $(this.spanMinutes).on('click', this.showView.bind(this, 'minutes')); - } - }, { - key: "_removeEventHandlers", - value: function _removeEventHandlers() { - this.el.removeEventListener('click', this._handleInputClickBound); - this.el.removeEventListener('keydown', this._handleInputKeydownBound); - } - }, { - key: "_handleInputClick", - value: function _handleInputClick() { - this.open(); - } - }, { - key: "_handleInputKeydown", - value: function _handleInputKeydown(e) { - if (e.which === M.keys.ENTER) { - e.preventDefault(); - this.open(); - } - } - }, { - key: "_handleClockClickStart", - value: function _handleClockClickStart(e) { - e.preventDefault(); - var clockPlateBR = this.plate.getBoundingClientRect(); - var offset = { x: clockPlateBR.left, y: clockPlateBR.top }; - - this.x0 = offset.x + this.options.dialRadius; - this.y0 = offset.y + this.options.dialRadius; - this.moved = false; - var clickPos = Timepicker._Pos(e); - this.dx = clickPos.x - this.x0; - this.dy = clickPos.y - this.y0; - - // Set clock hands - this.setHand(this.dx, this.dy, false); - - // Mousemove on document - document.addEventListener('mousemove', this._handleDocumentClickMoveBound); - document.addEventListener('touchmove', this._handleDocumentClickMoveBound); - - // Mouseup on document - document.addEventListener('mouseup', this._handleDocumentClickEndBound); - document.addEventListener('touchend', this._handleDocumentClickEndBound); - } - }, { - key: "_handleDocumentClickMove", - value: function _handleDocumentClickMove(e) { - e.preventDefault(); - var clickPos = Timepicker._Pos(e); - var x = clickPos.x - this.x0; - var y = clickPos.y - this.y0; - this.moved = true; - this.setHand(x, y, false, true); - } - }, { - key: "_handleDocumentClickEnd", - value: function _handleDocumentClickEnd(e) { - var _this58 = this; - - e.preventDefault(); - document.removeEventListener('mouseup', this._handleDocumentClickEndBound); - document.removeEventListener('touchend', this._handleDocumentClickEndBound); - var clickPos = Timepicker._Pos(e); - var x = clickPos.x - this.x0; - var y = clickPos.y - this.y0; - if (this.moved && x === this.dx && y === this.dy) { - this.setHand(x, y); - } - - if (this.currentView === 'hours') { - this.showView('minutes', this.options.duration / 2); - } else if (this.options.autoClose) { - $(this.minutesView).addClass('timepicker-dial-out'); - setTimeout(function () { - _this58.done(); - }, this.options.duration / 2); - } - - if (typeof this.options.onSelect === 'function') { - this.options.onSelect.call(this, this.hours, this.minutes); - } - - // Unbind mousemove event - document.removeEventListener('mousemove', this._handleDocumentClickMoveBound); - document.removeEventListener('touchmove', this._handleDocumentClickMoveBound); - } - }, { - key: "_insertHTMLIntoDOM", - value: function _insertHTMLIntoDOM() { - this.$modalEl = $(Timepicker._template); - this.modalEl = this.$modalEl[0]; - this.modalEl.id = 'modal-' + this.id; - - // Append popover to input by default - var containerEl = document.querySelector(this.options.container); - if (this.options.container && !!containerEl) { - this.$modalEl.appendTo(containerEl); - } else { - this.$modalEl.insertBefore(this.el); - } - } - }, { - key: "_setupModal", - value: function _setupModal() { - var _this59 = this; - - this.modal = M.Modal.init(this.modalEl, { - onOpenStart: this.options.onOpenStart, - onOpenEnd: this.options.onOpenEnd, - onCloseStart: this.options.onCloseStart, - onCloseEnd: function () { - if (typeof _this59.options.onCloseEnd === 'function') { - _this59.options.onCloseEnd.call(_this59); - } - _this59.isOpen = false; - } - }); - } - }, { - key: "_setupVariables", - value: function _setupVariables() { - this.currentView = 'hours'; - this.vibrate = navigator.vibrate ? 'vibrate' : navigator.webkitVibrate ? 'webkitVibrate' : null; - - this._canvas = this.modalEl.querySelector('.timepicker-canvas'); - this.plate = this.modalEl.querySelector('.timepicker-plate'); - - this.hoursView = this.modalEl.querySelector('.timepicker-hours'); - this.minutesView = this.modalEl.querySelector('.timepicker-minutes'); - this.spanHours = this.modalEl.querySelector('.timepicker-span-hours'); - this.spanMinutes = this.modalEl.querySelector('.timepicker-span-minutes'); - this.spanAmPm = this.modalEl.querySelector('.timepicker-span-am-pm'); - this.footer = this.modalEl.querySelector('.timepicker-footer'); - this.amOrPm = 'PM'; - } - }, { - key: "_pickerSetup", - value: function _pickerSetup() { - var $clearBtn = $("").appendTo(this.footer).on('click', this.clear.bind(this)); - if (this.options.showClearBtn) { - $clearBtn.css({ visibility: '' }); - } - - var confirmationBtnsContainer = $('
'); - $('').appendTo(confirmationBtnsContainer).on('click', this.close.bind(this)); - $('').appendTo(confirmationBtnsContainer).on('click', this.done.bind(this)); - confirmationBtnsContainer.appendTo(this.footer); - } - }, { - key: "_clockSetup", - value: function _clockSetup() { - if (this.options.twelveHour) { - this.$amBtn = $('
AM
'); - this.$pmBtn = $('
PM
'); - this.$amBtn.on('click', this._handleAmPmClick.bind(this)).appendTo(this.spanAmPm); - this.$pmBtn.on('click', this._handleAmPmClick.bind(this)).appendTo(this.spanAmPm); - } - - this._buildHoursView(); - this._buildMinutesView(); - this._buildSVGClock(); - } - }, { - key: "_buildSVGClock", - value: function _buildSVGClock() { - // Draw clock hands and others - var dialRadius = this.options.dialRadius; - var tickRadius = this.options.tickRadius; - var diameter = dialRadius * 2; - - var svg = Timepicker._createSVGEl('svg'); - svg.setAttribute('class', 'timepicker-svg'); - svg.setAttribute('width', diameter); - svg.setAttribute('height', diameter); - var g = Timepicker._createSVGEl('g'); - g.setAttribute('transform', 'translate(' + dialRadius + ',' + dialRadius + ')'); - var bearing = Timepicker._createSVGEl('circle'); - bearing.setAttribute('class', 'timepicker-canvas-bearing'); - bearing.setAttribute('cx', 0); - bearing.setAttribute('cy', 0); - bearing.setAttribute('r', 4); - var hand = Timepicker._createSVGEl('line'); - hand.setAttribute('x1', 0); - hand.setAttribute('y1', 0); - var bg = Timepicker._createSVGEl('circle'); - bg.setAttribute('class', 'timepicker-canvas-bg'); - bg.setAttribute('r', tickRadius); - g.appendChild(hand); - g.appendChild(bg); - g.appendChild(bearing); - svg.appendChild(g); - this._canvas.appendChild(svg); - - this.hand = hand; - this.bg = bg; - this.bearing = bearing; - this.g = g; - } - }, { - key: "_buildHoursView", - value: function _buildHoursView() { - var $tick = $('
'); - // Hours view - if (this.options.twelveHour) { - for (var i = 1; i < 13; i += 1) { - var tick = $tick.clone(); - var radian = i / 6 * Math.PI; - var radius = this.options.outerRadius; - tick.css({ - left: this.options.dialRadius + Math.sin(radian) * radius - this.options.tickRadius + 'px', - top: this.options.dialRadius - Math.cos(radian) * radius - this.options.tickRadius + 'px' - }); - tick.html(i === 0 ? '00' : i); - this.hoursView.appendChild(tick[0]); - // tick.on(mousedownEvent, mousedown); - } - } else { - for (var _i2 = 0; _i2 < 24; _i2 += 1) { - var _tick = $tick.clone(); - var _radian = _i2 / 6 * Math.PI; - var inner = _i2 > 0 && _i2 < 13; - var _radius = inner ? this.options.innerRadius : this.options.outerRadius; - _tick.css({ - left: this.options.dialRadius + Math.sin(_radian) * _radius - this.options.tickRadius + 'px', - top: this.options.dialRadius - Math.cos(_radian) * _radius - this.options.tickRadius + 'px' - }); - _tick.html(_i2 === 0 ? '00' : _i2); - this.hoursView.appendChild(_tick[0]); - // tick.on(mousedownEvent, mousedown); - } - } - } - }, { - key: "_buildMinutesView", - value: function _buildMinutesView() { - var $tick = $('
'); - // Minutes view - for (var i = 0; i < 60; i += 5) { - var tick = $tick.clone(); - var radian = i / 30 * Math.PI; - tick.css({ - left: this.options.dialRadius + Math.sin(radian) * this.options.outerRadius - this.options.tickRadius + 'px', - top: this.options.dialRadius - Math.cos(radian) * this.options.outerRadius - this.options.tickRadius + 'px' - }); - tick.html(Timepicker._addLeadingZero(i)); - this.minutesView.appendChild(tick[0]); - } - } - }, { - key: "_handleAmPmClick", - value: function _handleAmPmClick(e) { - var $btnClicked = $(e.target); - this.amOrPm = $btnClicked.hasClass('am-btn') ? 'AM' : 'PM'; - this._updateAmPmView(); - } - }, { - key: "_updateAmPmView", - value: function _updateAmPmView() { - if (this.options.twelveHour) { - this.$amBtn.toggleClass('text-primary', this.amOrPm === 'AM'); - this.$pmBtn.toggleClass('text-primary', this.amOrPm === 'PM'); - } - } - }, { - key: "_updateTimeFromInput", - value: function _updateTimeFromInput() { - // Get the time - var value = ((this.el.value || this.options.defaultTime || '') + '').split(':'); - if (this.options.twelveHour && !(typeof value[1] === 'undefined')) { - if (value[1].toUpperCase().indexOf('AM') > 0) { - this.amOrPm = 'AM'; - } else { - this.amOrPm = 'PM'; - } - value[1] = value[1].replace('AM', '').replace('PM', ''); - } - if (value[0] === 'now') { - var now = new Date(+new Date() + this.options.fromNow); - value = [now.getHours(), now.getMinutes()]; - if (this.options.twelveHour) { - this.amOrPm = value[0] >= 12 && value[0] < 24 ? 'PM' : 'AM'; - } - } - this.hours = +value[0] || 0; - this.minutes = +value[1] || 0; - this.spanHours.innerHTML = this.hours; - this.spanMinutes.innerHTML = Timepicker._addLeadingZero(this.minutes); - - this._updateAmPmView(); - } - }, { - key: "showView", - value: function showView(view, delay) { - if (view === 'minutes' && $(this.hoursView).css('visibility') === 'visible') { - // raiseCallback(this.options.beforeHourSelect); - } - var isHours = view === 'hours', - nextView = isHours ? this.hoursView : this.minutesView, - hideView = isHours ? this.minutesView : this.hoursView; - this.currentView = view; - - $(this.spanHours).toggleClass('text-primary', isHours); - $(this.spanMinutes).toggleClass('text-primary', !isHours); - - // Transition view - hideView.classList.add('timepicker-dial-out'); - $(nextView).css('visibility', 'visible').removeClass('timepicker-dial-out'); - - // Reset clock hand - this.resetClock(delay); - - // After transitions ended - clearTimeout(this.toggleViewTimer); - this.toggleViewTimer = setTimeout(function () { - $(hideView).css('visibility', 'hidden'); - }, this.options.duration); - } - }, { - key: "resetClock", - value: function resetClock(delay) { - var view = this.currentView, - value = this[view], - isHours = view === 'hours', - unit = Math.PI / (isHours ? 6 : 30), - radian = value * unit, - radius = isHours && value > 0 && value < 13 ? this.options.innerRadius : this.options.outerRadius, - x = Math.sin(radian) * radius, - y = -Math.cos(radian) * radius, - self = this; - - if (delay) { - $(this.canvas).addClass('timepicker-canvas-out'); - setTimeout(function () { - $(self.canvas).removeClass('timepicker-canvas-out'); - self.setHand(x, y); - }, delay); - } else { - this.setHand(x, y); - } - } - }, { - key: "setHand", - value: function setHand(x, y, roundBy5) { - var _this60 = this; - - var radian = Math.atan2(x, -y), - isHours = this.currentView === 'hours', - unit = Math.PI / (isHours || roundBy5 ? 6 : 30), - z = Math.sqrt(x * x + y * y), - inner = isHours && z < (this.options.outerRadius + this.options.innerRadius) / 2, - radius = inner ? this.options.innerRadius : this.options.outerRadius; - - if (this.options.twelveHour) { - radius = this.options.outerRadius; - } - - // Radian should in range [0, 2PI] - if (radian < 0) { - radian = Math.PI * 2 + radian; - } - - // Get the round value - var value = Math.round(radian / unit); - - // Get the round radian - radian = value * unit; - - // Correct the hours or minutes - if (this.options.twelveHour) { - if (isHours) { - if (value === 0) value = 12; - } else { - if (roundBy5) value *= 5; - if (value === 60) value = 0; - } - } else { - if (isHours) { - if (value === 12) { - value = 0; - } - value = inner ? value === 0 ? 12 : value : value === 0 ? 0 : value + 12; - } else { - if (roundBy5) { - value *= 5; - } - if (value === 60) { - value = 0; - } - } - } - - // Once hours or minutes changed, vibrate the device - if (this[this.currentView] !== value) { - if (this.vibrate && this.options.vibrate) { - // Do not vibrate too frequently - if (!this.vibrateTimer) { - navigator[this.vibrate](10); - this.vibrateTimer = setTimeout(function () { - _this60.vibrateTimer = null; - }, 100); - } - } - } - - this[this.currentView] = value; - if (isHours) { - this['spanHours'].innerHTML = value; - } else { - this['spanMinutes'].innerHTML = Timepicker._addLeadingZero(value); - } - - // Set clock hand and others' position - var cx1 = Math.sin(radian) * (radius - this.options.tickRadius), - cy1 = -Math.cos(radian) * (radius - this.options.tickRadius), - cx2 = Math.sin(radian) * radius, - cy2 = -Math.cos(radian) * radius; - this.hand.setAttribute('x2', cx1); - this.hand.setAttribute('y2', cy1); - this.bg.setAttribute('cx', cx2); - this.bg.setAttribute('cy', cy2); - } - }, { - key: "open", - value: function open() { - if (this.isOpen) { - return; - } - - this.isOpen = true; - this._updateTimeFromInput(); - this.showView('hours'); - - this.modal.open(); - } - }, { - key: "close", - value: function close() { - if (!this.isOpen) { - return; - } - - this.isOpen = false; - this.modal.close(); - } - - /** - * Finish timepicker selection. - */ - - }, { - key: "done", - value: function done(e, clearValue) { - // Set input value - var last = this.el.value; - var value = clearValue ? '' : Timepicker._addLeadingZero(this.hours) + ':' + Timepicker._addLeadingZero(this.minutes); - this.time = value; - if (!clearValue && this.options.twelveHour) { - value = value + " " + this.amOrPm; - } - this.el.value = value; - - // Trigger change event - if (value !== last) { - this.$el.trigger('change'); - } - - this.close(); - this.el.focus(); - } - }, { - key: "clear", - value: function clear() { - this.done(null, true); - } - }], [{ - key: "init", - value: function init(els, options) { - return _get(Timepicker.__proto__ || Object.getPrototypeOf(Timepicker), "init", this).call(this, this, els, options); - } - }, { - key: "_addLeadingZero", - value: function _addLeadingZero(num) { - return (num < 10 ? '0' : '') + num; - } - }, { - key: "_createSVGEl", - value: function _createSVGEl(name) { - var svgNS = 'http://www.w3.org/2000/svg'; - return document.createElementNS(svgNS, name); - } - - /** - * @typedef {Object} Point - * @property {number} x The X Coordinate - * @property {number} y The Y Coordinate - */ - - /** - * Get x position of mouse or touch event - * @param {Event} e - * @return {Point} x and y location - */ - - }, { - key: "_Pos", - value: function _Pos(e) { - if (e.targetTouches && e.targetTouches.length >= 1) { - return { x: e.targetTouches[0].clientX, y: e.targetTouches[0].clientY }; - } - // mouse event - return { x: e.clientX, y: e.clientY }; - } - - /** - * Get Instance - */ - - }, { - key: "getInstance", - value: function getInstance(el) { - var domElem = !!el.jquery ? el[0] : el; - return domElem.M_Timepicker; - } - }, { - key: "defaults", - get: function () { - return _defaults; - } - }]); - - return Timepicker; - }(Component); - - Timepicker._template = [''].join(''); - - M.Timepicker = Timepicker; - - if (M.jQueryLoaded) { - M.initializeJqueryWrapper(Timepicker, 'timepicker', 'M_Timepicker'); - } -})(cash); -;(function ($) { - 'use strict'; - - var _defaults = {}; - - /** - * @class - * - */ - - var CharacterCounter = function (_Component17) { - _inherits(CharacterCounter, _Component17); - - /** - * Construct CharacterCounter instance - * @constructor - * @param {Element} el - * @param {Object} options - */ - function CharacterCounter(el, options) { - _classCallCheck(this, CharacterCounter); - - var _this61 = _possibleConstructorReturn(this, (CharacterCounter.__proto__ || Object.getPrototypeOf(CharacterCounter)).call(this, CharacterCounter, el, options)); - - _this61.el.M_CharacterCounter = _this61; - - /** - * Options for the character counter - */ - _this61.options = $.extend({}, CharacterCounter.defaults, options); - - _this61.isInvalid = false; - _this61.isValidLength = false; - _this61._setupCounter(); - _this61._setupEventHandlers(); - return _this61; - } - - _createClass(CharacterCounter, [{ - key: "destroy", - - - /** - * Teardown component - */ - value: function destroy() { - this._removeEventHandlers(); - this.el.CharacterCounter = undefined; - this._removeCounter(); - } - - /** - * Setup Event Handlers - */ - - }, { - key: "_setupEventHandlers", - value: function _setupEventHandlers() { - this._handleUpdateCounterBound = this.updateCounter.bind(this); - - this.el.addEventListener('focus', this._handleUpdateCounterBound, true); - this.el.addEventListener('input', this._handleUpdateCounterBound, true); - } - - /** - * Remove Event Handlers - */ - - }, { - key: "_removeEventHandlers", - value: function _removeEventHandlers() { - this.el.removeEventListener('focus', this._handleUpdateCounterBound, true); - this.el.removeEventListener('input', this._handleUpdateCounterBound, true); - } - - /** - * Setup counter element - */ - - }, { - key: "_setupCounter", - value: function _setupCounter() { - this.counterEl = document.createElement('span'); - $(this.counterEl).addClass('character-counter').css({ - float: 'right', - 'font-size': '12px', - height: 1 - }); - - this.$el.parent().append(this.counterEl); - } - - /** - * Remove counter element - */ - - }, { - key: "_removeCounter", - value: function _removeCounter() { - $(this.counterEl).remove(); - } - - /** - * Update counter - */ - - }, { - key: "updateCounter", - value: function updateCounter() { - var maxLength = +this.$el.attr('data-length'), - actualLength = this.el.value.length; - this.isValidLength = actualLength <= maxLength; - var counterString = actualLength; - - if (maxLength) { - counterString += '/' + maxLength; - this._validateInput(); - } - - $(this.counterEl).html(counterString); - } - - /** - * Add validation classes - */ - - }, { - key: "_validateInput", - value: function _validateInput() { - if (this.isValidLength && this.isInvalid) { - this.isInvalid = false; - this.$el.removeClass('invalid'); - } else if (!this.isValidLength && !this.isInvalid) { - this.isInvalid = true; - this.$el.removeClass('valid'); - this.$el.addClass('invalid'); - } - } - }], [{ - key: "init", - value: function init(els, options) { - return _get(CharacterCounter.__proto__ || Object.getPrototypeOf(CharacterCounter), "init", this).call(this, this, els, options); - } - - /** - * Get Instance - */ - - }, { - key: "getInstance", - value: function getInstance(el) { - var domElem = !!el.jquery ? el[0] : el; - return domElem.M_CharacterCounter; - } - }, { - key: "defaults", - get: function () { - return _defaults; - } - }]); - - return CharacterCounter; - }(Component); - - M.CharacterCounter = CharacterCounter; - - if (M.jQueryLoaded) { - M.initializeJqueryWrapper(CharacterCounter, 'characterCounter', 'M_CharacterCounter'); - } -})(cash); -;(function ($) { - 'use strict'; - - var _defaults = { - duration: 200, // ms - dist: -100, // zoom scale TODO: make this more intuitive as an option - shift: 0, // spacing for center image - padding: 0, // Padding between non center items - numVisible: 5, // Number of visible items in carousel - fullWidth: false, // Change to full width styles - indicators: false, // Toggle indicators - noWrap: false, // Don't wrap around and cycle through items. - onCycleTo: null // Callback for when a new slide is cycled to. - }; - - /** - * @class - * - */ - - var Carousel = function (_Component18) { - _inherits(Carousel, _Component18); - - /** - * Construct Carousel instance - * @constructor - * @param {Element} el - * @param {Object} options - */ - function Carousel(el, options) { - _classCallCheck(this, Carousel); - - var _this62 = _possibleConstructorReturn(this, (Carousel.__proto__ || Object.getPrototypeOf(Carousel)).call(this, Carousel, el, options)); - - _this62.el.M_Carousel = _this62; - - /** - * Options for the carousel - * @member Carousel#options - * @prop {Number} duration - * @prop {Number} dist - * @prop {Number} shift - * @prop {Number} padding - * @prop {Number} numVisible - * @prop {Boolean} fullWidth - * @prop {Boolean} indicators - * @prop {Boolean} noWrap - * @prop {Function} onCycleTo - */ - _this62.options = $.extend({}, Carousel.defaults, options); - - // Setup - _this62.hasMultipleSlides = _this62.$el.find('.carousel-item').length > 1; - _this62.showIndicators = _this62.options.indicators && _this62.hasMultipleSlides; - _this62.noWrap = _this62.options.noWrap || !_this62.hasMultipleSlides; - _this62.pressed = false; - _this62.dragged = false; - _this62.offset = _this62.target = 0; - _this62.images = []; - _this62.itemWidth = _this62.$el.find('.carousel-item').first().innerWidth(); - _this62.itemHeight = _this62.$el.find('.carousel-item').first().innerHeight(); - _this62.dim = _this62.itemWidth * 2 + _this62.options.padding || 1; // Make sure dim is non zero for divisions. - _this62._autoScrollBound = _this62._autoScroll.bind(_this62); - _this62._trackBound = _this62._track.bind(_this62); - - // Full Width carousel setup - if (_this62.options.fullWidth) { - _this62.options.dist = 0; - _this62._setCarouselHeight(); - - // Offset fixed items when indicators. - if (_this62.showIndicators) { - _this62.$el.find('.carousel-fixed-item').addClass('with-indicators'); - } - } - - // Iterate through slides - _this62.$indicators = $('
    '); - _this62.$el.find('.carousel-item').each(function (el, i) { - _this62.images.push(el); - if (_this62.showIndicators) { - var $indicator = $('
  • '); - - // Add active to first by default. - if (i === 0) { - $indicator[0].classList.add('active'); - } - - _this62.$indicators.append($indicator); - } - }); - if (_this62.showIndicators) { - _this62.$el.append(_this62.$indicators); - } - _this62.count = _this62.images.length; - - // Cap numVisible at count - _this62.options.numVisible = Math.min(_this62.count, _this62.options.numVisible); - - // Setup cross browser string - _this62.xform = 'transform'; - ['webkit', 'Moz', 'O', 'ms'].every(function (prefix) { - var e = prefix + 'Transform'; - if (typeof document.body.style[e] !== 'undefined') { - _this62.xform = e; - return false; - } - return true; - }); - - _this62._setupEventHandlers(); - _this62._scroll(_this62.offset); - return _this62; - } - - _createClass(Carousel, [{ - key: "destroy", - - - /** - * Teardown component - */ - value: function destroy() { - this._removeEventHandlers(); - this.el.M_Carousel = undefined; - } - - /** - * Setup Event Handlers - */ - - }, { - key: "_setupEventHandlers", - value: function _setupEventHandlers() { - var _this63 = this; - - this._handleCarouselTapBound = this._handleCarouselTap.bind(this); - this._handleCarouselDragBound = this._handleCarouselDrag.bind(this); - this._handleCarouselReleaseBound = this._handleCarouselRelease.bind(this); - this._handleCarouselClickBound = this._handleCarouselClick.bind(this); - - if (typeof window.ontouchstart !== 'undefined') { - this.el.addEventListener('touchstart', this._handleCarouselTapBound); - this.el.addEventListener('touchmove', this._handleCarouselDragBound); - this.el.addEventListener('touchend', this._handleCarouselReleaseBound); - } - - this.el.addEventListener('mousedown', this._handleCarouselTapBound); - this.el.addEventListener('mousemove', this._handleCarouselDragBound); - this.el.addEventListener('mouseup', this._handleCarouselReleaseBound); - this.el.addEventListener('mouseleave', this._handleCarouselReleaseBound); - this.el.addEventListener('click', this._handleCarouselClickBound); - - if (this.showIndicators && this.$indicators) { - this._handleIndicatorClickBound = this._handleIndicatorClick.bind(this); - this.$indicators.find('.indicator-item').each(function (el, i) { - el.addEventListener('click', _this63._handleIndicatorClickBound); - }); - } - - // Resize - var throttledResize = M.throttle(this._handleResize, 200); - this._handleThrottledResizeBound = throttledResize.bind(this); - - window.addEventListener('resize', this._handleThrottledResizeBound); - } - - /** - * Remove Event Handlers - */ - - }, { - key: "_removeEventHandlers", - value: function _removeEventHandlers() { - var _this64 = this; - - if (typeof window.ontouchstart !== 'undefined') { - this.el.removeEventListener('touchstart', this._handleCarouselTapBound); - this.el.removeEventListener('touchmove', this._handleCarouselDragBound); - this.el.removeEventListener('touchend', this._handleCarouselReleaseBound); - } - this.el.removeEventListener('mousedown', this._handleCarouselTapBound); - this.el.removeEventListener('mousemove', this._handleCarouselDragBound); - this.el.removeEventListener('mouseup', this._handleCarouselReleaseBound); - this.el.removeEventListener('mouseleave', this._handleCarouselReleaseBound); - this.el.removeEventListener('click', this._handleCarouselClickBound); - - if (this.showIndicators && this.$indicators) { - this.$indicators.find('.indicator-item').each(function (el, i) { - el.removeEventListener('click', _this64._handleIndicatorClickBound); - }); - } - - window.removeEventListener('resize', this._handleThrottledResizeBound); - } - - /** - * Handle Carousel Tap - * @param {Event} e - */ - - }, { - key: "_handleCarouselTap", - value: function _handleCarouselTap(e) { - // Fixes firefox draggable image bug - if (e.type === 'mousedown' && $(e.target).is('img')) { - e.preventDefault(); - } - this.pressed = true; - this.dragged = false; - this.verticalDragged = false; - this.reference = this._xpos(e); - this.referenceY = this._ypos(e); - - this.velocity = this.amplitude = 0; - this.frame = this.offset; - this.timestamp = Date.now(); - clearInterval(this.ticker); - this.ticker = setInterval(this._trackBound, 100); - } - - /** - * Handle Carousel Drag - * @param {Event} e - */ - - }, { - key: "_handleCarouselDrag", - value: function _handleCarouselDrag(e) { - var x = void 0, - y = void 0, - delta = void 0, - deltaY = void 0; - if (this.pressed) { - x = this._xpos(e); - y = this._ypos(e); - delta = this.reference - x; - deltaY = Math.abs(this.referenceY - y); - if (deltaY < 30 && !this.verticalDragged) { - // If vertical scrolling don't allow dragging. - if (delta > 2 || delta < -2) { - this.dragged = true; - this.reference = x; - this._scroll(this.offset + delta); - } - } else if (this.dragged) { - // If dragging don't allow vertical scroll. - e.preventDefault(); - e.stopPropagation(); - return false; - } else { - // Vertical scrolling. - this.verticalDragged = true; - } - } - - if (this.dragged) { - // If dragging don't allow vertical scroll. - e.preventDefault(); - e.stopPropagation(); - return false; - } - } - - /** - * Handle Carousel Release - * @param {Event} e - */ - - }, { - key: "_handleCarouselRelease", - value: function _handleCarouselRelease(e) { - if (this.pressed) { - this.pressed = false; - } else { - return; - } - - clearInterval(this.ticker); - this.target = this.offset; - if (this.velocity > 10 || this.velocity < -10) { - this.amplitude = 0.9 * this.velocity; - this.target = this.offset + this.amplitude; - } - this.target = Math.round(this.target / this.dim) * this.dim; - - // No wrap of items. - if (this.noWrap) { - if (this.target >= this.dim * (this.count - 1)) { - this.target = this.dim * (this.count - 1); - } else if (this.target < 0) { - this.target = 0; - } - } - this.amplitude = this.target - this.offset; - this.timestamp = Date.now(); - requestAnimationFrame(this._autoScrollBound); - - if (this.dragged) { - e.preventDefault(); - e.stopPropagation(); - } - return false; - } - - /** - * Handle Carousel CLick - * @param {Event} e - */ - - }, { - key: "_handleCarouselClick", - value: function _handleCarouselClick(e) { - // Disable clicks if carousel was dragged. - if (this.dragged) { - e.preventDefault(); - e.stopPropagation(); - return false; - } else if (!this.options.fullWidth) { - var clickedIndex = $(e.target).closest('.carousel-item').index(); - var diff = this._wrap(this.center) - clickedIndex; - - // Disable clicks if carousel was shifted by click - if (diff !== 0) { - e.preventDefault(); - e.stopPropagation(); - } - this._cycleTo(clickedIndex); - } - } - - /** - * Handle Indicator CLick - * @param {Event} e - */ - - }, { - key: "_handleIndicatorClick", - value: function _handleIndicatorClick(e) { - e.stopPropagation(); - - var indicator = $(e.target).closest('.indicator-item'); - if (indicator.length) { - this._cycleTo(indicator.index()); - } - } - - /** - * Handle Throttle Resize - * @param {Event} e - */ - - }, { - key: "_handleResize", - value: function _handleResize(e) { - if (this.options.fullWidth) { - this.itemWidth = this.$el.find('.carousel-item').first().innerWidth(); - this.imageHeight = this.$el.find('.carousel-item.active').height(); - this.dim = this.itemWidth * 2 + this.options.padding; - this.offset = this.center * 2 * this.itemWidth; - this.target = this.offset; - this._setCarouselHeight(true); - } else { - this._scroll(); - } - } - - /** - * Set carousel height based on first slide - * @param {Booleam} imageOnly - true for image slides - */ - - }, { - key: "_setCarouselHeight", - value: function _setCarouselHeight(imageOnly) { - var _this65 = this; - - var firstSlide = this.$el.find('.carousel-item.active').length ? this.$el.find('.carousel-item.active').first() : this.$el.find('.carousel-item').first(); - var firstImage = firstSlide.find('img').first(); - if (firstImage.length) { - if (firstImage[0].complete) { - // If image won't trigger the load event - var imageHeight = firstImage.height(); - if (imageHeight > 0) { - this.$el.css('height', imageHeight + 'px'); - } else { - // If image still has no height, use the natural dimensions to calculate - var naturalWidth = firstImage[0].naturalWidth; - var naturalHeight = firstImage[0].naturalHeight; - var adjustedHeight = this.$el.width() / naturalWidth * naturalHeight; - this.$el.css('height', adjustedHeight + 'px'); - } - } else { - // Get height when image is loaded normally - firstImage.one('load', function (el, i) { - _this65.$el.css('height', el.offsetHeight + 'px'); - }); - } - } else if (!imageOnly) { - var slideHeight = firstSlide.height(); - this.$el.css('height', slideHeight + 'px'); - } - } - - /** - * Get x position from event - * @param {Event} e - */ - - }, { - key: "_xpos", - value: function _xpos(e) { - // touch event - if (e.targetTouches && e.targetTouches.length >= 1) { - return e.targetTouches[0].clientX; - } - - // mouse event - return e.clientX; - } - - /** - * Get y position from event - * @param {Event} e - */ - - }, { - key: "_ypos", - value: function _ypos(e) { - // touch event - if (e.targetTouches && e.targetTouches.length >= 1) { - return e.targetTouches[0].clientY; - } - - // mouse event - return e.clientY; - } - - /** - * Wrap index - * @param {Number} x - */ - - }, { - key: "_wrap", - value: function _wrap(x) { - return x >= this.count ? x % this.count : x < 0 ? this._wrap(this.count + x % this.count) : x; - } - - /** - * Tracks scrolling information - */ - - }, { - key: "_track", - value: function _track() { - var now = void 0, - elapsed = void 0, - delta = void 0, - v = void 0; - - now = Date.now(); - elapsed = now - this.timestamp; - this.timestamp = now; - delta = this.offset - this.frame; - this.frame = this.offset; - - v = 1000 * delta / (1 + elapsed); - this.velocity = 0.8 * v + 0.2 * this.velocity; - } - - /** - * Auto scrolls to nearest carousel item. - */ - - }, { - key: "_autoScroll", - value: function _autoScroll() { - var elapsed = void 0, - delta = void 0; - - if (this.amplitude) { - elapsed = Date.now() - this.timestamp; - delta = this.amplitude * Math.exp(-elapsed / this.options.duration); - if (delta > 2 || delta < -2) { - this._scroll(this.target - delta); - requestAnimationFrame(this._autoScrollBound); - } else { - this._scroll(this.target); - } - } - } - - /** - * Scroll to target - * @param {Number} x - */ - - }, { - key: "_scroll", - value: function _scroll(x) { - var _this66 = this; - - // Track scrolling state - if (!this.$el.hasClass('scrolling')) { - this.el.classList.add('scrolling'); - } - if (this.scrollingTimeout != null) { - window.clearTimeout(this.scrollingTimeout); - } - this.scrollingTimeout = window.setTimeout(function () { - _this66.$el.removeClass('scrolling'); - }, this.options.duration); - - // Start actual scroll - var i = void 0, - half = void 0, - delta = void 0, - dir = void 0, - tween = void 0, - el = void 0, - alignment = void 0, - zTranslation = void 0, - tweenedOpacity = void 0, - centerTweenedOpacity = void 0; - var lastCenter = this.center; - var numVisibleOffset = 1 / this.options.numVisible; - - this.offset = typeof x === 'number' ? x : this.offset; - this.center = Math.floor((this.offset + this.dim / 2) / this.dim); - delta = this.offset - this.center * this.dim; - dir = delta < 0 ? 1 : -1; - tween = -dir * delta * 2 / this.dim; - half = this.count >> 1; - - if (this.options.fullWidth) { - alignment = 'translateX(0)'; - centerTweenedOpacity = 1; - } else { - alignment = 'translateX(' + (this.el.clientWidth - this.itemWidth) / 2 + 'px) '; - alignment += 'translateY(' + (this.el.clientHeight - this.itemHeight) / 2 + 'px)'; - centerTweenedOpacity = 1 - numVisibleOffset * tween; - } - - // Set indicator active - if (this.showIndicators) { - var diff = this.center % this.count; - var activeIndicator = this.$indicators.find('.indicator-item.active'); - if (activeIndicator.index() !== diff) { - activeIndicator.removeClass('active'); - this.$indicators.find('.indicator-item').eq(diff)[0].classList.add('active'); - } - } - - // center - // Don't show wrapped items. - if (!this.noWrap || this.center >= 0 && this.center < this.count) { - el = this.images[this._wrap(this.center)]; - - // Add active class to center item. - if (!$(el).hasClass('active')) { - this.$el.find('.carousel-item').removeClass('active'); - el.classList.add('active'); - } - var transformString = alignment + " translateX(" + -delta / 2 + "px) translateX(" + dir * this.options.shift * tween * i + "px) translateZ(" + this.options.dist * tween + "px)"; - this._updateItemStyle(el, centerTweenedOpacity, 0, transformString); - } - - for (i = 1; i <= half; ++i) { - // right side - if (this.options.fullWidth) { - zTranslation = this.options.dist; - tweenedOpacity = i === half && delta < 0 ? 1 - tween : 1; - } else { - zTranslation = this.options.dist * (i * 2 + tween * dir); - tweenedOpacity = 1 - numVisibleOffset * (i * 2 + tween * dir); - } - // Don't show wrapped items. - if (!this.noWrap || this.center + i < this.count) { - el = this.images[this._wrap(this.center + i)]; - var _transformString = alignment + " translateX(" + (this.options.shift + (this.dim * i - delta) / 2) + "px) translateZ(" + zTranslation + "px)"; - this._updateItemStyle(el, tweenedOpacity, -i, _transformString); - } - - // left side - if (this.options.fullWidth) { - zTranslation = this.options.dist; - tweenedOpacity = i === half && delta > 0 ? 1 - tween : 1; - } else { - zTranslation = this.options.dist * (i * 2 - tween * dir); - tweenedOpacity = 1 - numVisibleOffset * (i * 2 - tween * dir); - } - // Don't show wrapped items. - if (!this.noWrap || this.center - i >= 0) { - el = this.images[this._wrap(this.center - i)]; - var _transformString2 = alignment + " translateX(" + (-this.options.shift + (-this.dim * i - delta) / 2) + "px) translateZ(" + zTranslation + "px)"; - this._updateItemStyle(el, tweenedOpacity, -i, _transformString2); - } - } - - // center - // Don't show wrapped items. - if (!this.noWrap || this.center >= 0 && this.center < this.count) { - el = this.images[this._wrap(this.center)]; - var _transformString3 = alignment + " translateX(" + -delta / 2 + "px) translateX(" + dir * this.options.shift * tween + "px) translateZ(" + this.options.dist * tween + "px)"; - this._updateItemStyle(el, centerTweenedOpacity, 0, _transformString3); - } - - // onCycleTo callback - var $currItem = this.$el.find('.carousel-item').eq(this._wrap(this.center)); - if (lastCenter !== this.center && typeof this.options.onCycleTo === 'function') { - this.options.onCycleTo.call(this, $currItem[0], this.dragged); - } - - // One time callback - if (typeof this.oneTimeCallback === 'function') { - this.oneTimeCallback.call(this, $currItem[0], this.dragged); - this.oneTimeCallback = null; - } - } - - /** - * Cycle to target - * @param {Element} el - * @param {Number} opacity - * @param {Number} zIndex - * @param {String} transform - */ - - }, { - key: "_updateItemStyle", - value: function _updateItemStyle(el, opacity, zIndex, transform) { - el.style[this.xform] = transform; - el.style.zIndex = zIndex; - el.style.opacity = opacity; - el.style.visibility = 'visible'; - } - - /** - * Cycle to target - * @param {Number} n - * @param {Function} callback - */ - - }, { - key: "_cycleTo", - value: function _cycleTo(n, callback) { - var diff = this.center % this.count - n; - - // Account for wraparound. - if (!this.noWrap) { - if (diff < 0) { - if (Math.abs(diff + this.count) < Math.abs(diff)) { - diff += this.count; - } - } else if (diff > 0) { - if (Math.abs(diff - this.count) < diff) { - diff -= this.count; - } - } - } - - this.target = this.dim * Math.round(this.offset / this.dim); - // Next - if (diff < 0) { - this.target += this.dim * Math.abs(diff); - - // Prev - } else if (diff > 0) { - this.target -= this.dim * diff; - } - - // Set one time callback - if (typeof callback === 'function') { - this.oneTimeCallback = callback; - } - - // Scroll - if (this.offset !== this.target) { - this.amplitude = this.target - this.offset; - this.timestamp = Date.now(); - requestAnimationFrame(this._autoScrollBound); - } - } - - /** - * Cycle to next item - * @param {Number} [n] - */ - - }, { - key: "next", - value: function next(n) { - if (n === undefined || isNaN(n)) { - n = 1; - } - - var index = this.center + n; - if (index >= this.count || index < 0) { - if (this.noWrap) { - return; - } - - index = this._wrap(index); - } - this._cycleTo(index); - } - - /** - * Cycle to previous item - * @param {Number} [n] - */ - - }, { - key: "prev", - value: function prev(n) { - if (n === undefined || isNaN(n)) { - n = 1; - } - - var index = this.center - n; - if (index >= this.count || index < 0) { - if (this.noWrap) { - return; - } - - index = this._wrap(index); - } - - this._cycleTo(index); - } - - /** - * Cycle to nth item - * @param {Number} [n] - * @param {Function} callback - */ - - }, { - key: "set", - value: function set(n, callback) { - if (n === undefined || isNaN(n)) { - n = 0; - } - - if (n > this.count || n < 0) { - if (this.noWrap) { - return; - } - - n = this._wrap(n); - } - - this._cycleTo(n, callback); - } - }], [{ - key: "init", - value: function init(els, options) { - return _get(Carousel.__proto__ || Object.getPrototypeOf(Carousel), "init", this).call(this, this, els, options); - } - - /** - * Get Instance - */ - - }, { - key: "getInstance", - value: function getInstance(el) { - var domElem = !!el.jquery ? el[0] : el; - return domElem.M_Carousel; - } - }, { - key: "defaults", - get: function () { - return _defaults; - } - }]); - - return Carousel; - }(Component); - - M.Carousel = Carousel; - - if (M.jQueryLoaded) { - M.initializeJqueryWrapper(Carousel, 'carousel', 'M_Carousel'); - } -})(cash); -;(function ($) { - 'use strict'; - - var _defaults = { - onOpen: undefined, - onClose: undefined - }; - - /** - * @class - * - */ - - var TapTarget = function (_Component19) { - _inherits(TapTarget, _Component19); - - /** - * Construct TapTarget instance - * @constructor - * @param {Element} el - * @param {Object} options - */ - function TapTarget(el, options) { - _classCallCheck(this, TapTarget); - - var _this67 = _possibleConstructorReturn(this, (TapTarget.__proto__ || Object.getPrototypeOf(TapTarget)).call(this, TapTarget, el, options)); - - _this67.el.M_TapTarget = _this67; - - /** - * Options for the select - * @member TapTarget#options - * @prop {Function} onOpen - Callback function called when feature discovery is opened - * @prop {Function} onClose - Callback function called when feature discovery is closed - */ - _this67.options = $.extend({}, TapTarget.defaults, options); - - _this67.isOpen = false; - - // setup - _this67.$origin = $('#' + _this67.$el.attr('data-target')); - _this67._setup(); - - _this67._calculatePositioning(); - _this67._setupEventHandlers(); - return _this67; - } - - _createClass(TapTarget, [{ - key: "destroy", - - - /** - * Teardown component - */ - value: function destroy() { - this._removeEventHandlers(); - this.el.TapTarget = undefined; - } - - /** - * Setup Event Handlers - */ - - }, { - key: "_setupEventHandlers", - value: function _setupEventHandlers() { - this._handleDocumentClickBound = this._handleDocumentClick.bind(this); - this._handleTargetClickBound = this._handleTargetClick.bind(this); - this._handleOriginClickBound = this._handleOriginClick.bind(this); - - this.el.addEventListener('click', this._handleTargetClickBound); - this.originEl.addEventListener('click', this._handleOriginClickBound); - - // Resize - var throttledResize = M.throttle(this._handleResize, 200); - this._handleThrottledResizeBound = throttledResize.bind(this); - - window.addEventListener('resize', this._handleThrottledResizeBound); - } - - /** - * Remove Event Handlers - */ - - }, { - key: "_removeEventHandlers", - value: function _removeEventHandlers() { - this.el.removeEventListener('click', this._handleTargetClickBound); - this.originEl.removeEventListener('click', this._handleOriginClickBound); - window.removeEventListener('resize', this._handleThrottledResizeBound); - } - - /** - * Handle Target Click - * @param {Event} e - */ - - }, { - key: "_handleTargetClick", - value: function _handleTargetClick(e) { - this.open(); - } - - /** - * Handle Origin Click - * @param {Event} e - */ - - }, { - key: "_handleOriginClick", - value: function _handleOriginClick(e) { - this.close(); - } - - /** - * Handle Resize - * @param {Event} e - */ - - }, { - key: "_handleResize", - value: function _handleResize(e) { - this._calculatePositioning(); - } - - /** - * Handle Resize - * @param {Event} e - */ - - }, { - key: "_handleDocumentClick", - value: function _handleDocumentClick(e) { - if (!$(e.target).closest('.tap-target-wrapper').length) { - this.close(); - e.preventDefault(); - e.stopPropagation(); - } - } - - /** - * Setup Tap Target - */ - - }, { - key: "_setup", - value: function _setup() { - // Creating tap target - this.wrapper = this.$el.parent()[0]; - this.waveEl = $(this.wrapper).find('.tap-target-wave')[0]; - this.originEl = $(this.wrapper).find('.tap-target-origin')[0]; - this.contentEl = this.$el.find('.tap-target-content')[0]; - - // Creating wrapper - if (!$(this.wrapper).hasClass('.tap-target-wrapper')) { - this.wrapper = document.createElement('div'); - this.wrapper.classList.add('tap-target-wrapper'); - this.$el.before($(this.wrapper)); - this.wrapper.append(this.el); - } - - // Creating content - if (!this.contentEl) { - this.contentEl = document.createElement('div'); - this.contentEl.classList.add('tap-target-content'); - this.$el.append(this.contentEl); - } - - // Creating foreground wave - if (!this.waveEl) { - this.waveEl = document.createElement('div'); - this.waveEl.classList.add('tap-target-wave'); - - // Creating origin - if (!this.originEl) { - this.originEl = this.$origin.clone(true, true); - this.originEl.addClass('tap-target-origin'); - this.originEl.removeAttr('id'); - this.originEl.removeAttr('style'); - this.originEl = this.originEl[0]; - this.waveEl.append(this.originEl); - } - - this.wrapper.append(this.waveEl); - } - } - - /** - * Calculate positioning - */ - - }, { - key: "_calculatePositioning", - value: function _calculatePositioning() { - // Element or parent is fixed position? - var isFixed = this.$origin.css('position') === 'fixed'; - if (!isFixed) { - var parents = this.$origin.parents(); - for (var i = 0; i < parents.length; i++) { - isFixed = $(parents[i]).css('position') == 'fixed'; - if (isFixed) { - break; - } - } - } - - // Calculating origin - var originWidth = this.$origin.outerWidth(); - var originHeight = this.$origin.outerHeight(); - var originTop = isFixed ? this.$origin.offset().top - M.getDocumentScrollTop() : this.$origin.offset().top; - var originLeft = isFixed ? this.$origin.offset().left - M.getDocumentScrollLeft() : this.$origin.offset().left; - - // Calculating screen - var windowWidth = window.innerWidth; - var windowHeight = window.innerHeight; - var centerX = windowWidth / 2; - var centerY = windowHeight / 2; - var isLeft = originLeft <= centerX; - var isRight = originLeft > centerX; - var isTop = originTop <= centerY; - var isBottom = originTop > centerY; - var isCenterX = originLeft >= windowWidth * 0.25 && originLeft <= windowWidth * 0.75; - - // Calculating tap target - var tapTargetWidth = this.$el.outerWidth(); - var tapTargetHeight = this.$el.outerHeight(); - var tapTargetTop = originTop + originHeight / 2 - tapTargetHeight / 2; - var tapTargetLeft = originLeft + originWidth / 2 - tapTargetWidth / 2; - var tapTargetPosition = isFixed ? 'fixed' : 'absolute'; - - // Calculating content - var tapTargetTextWidth = isCenterX ? tapTargetWidth : tapTargetWidth / 2 + originWidth; - var tapTargetTextHeight = tapTargetHeight / 2; - var tapTargetTextTop = isTop ? tapTargetHeight / 2 : 0; - var tapTargetTextBottom = 0; - var tapTargetTextLeft = isLeft && !isCenterX ? tapTargetWidth / 2 - originWidth : 0; - var tapTargetTextRight = 0; - var tapTargetTextPadding = originWidth; - var tapTargetTextAlign = isBottom ? 'bottom' : 'top'; - - // Calculating wave - var tapTargetWaveWidth = originWidth > originHeight ? originWidth * 2 : originWidth * 2; - var tapTargetWaveHeight = tapTargetWaveWidth; - var tapTargetWaveTop = tapTargetHeight / 2 - tapTargetWaveHeight / 2; - var tapTargetWaveLeft = tapTargetWidth / 2 - tapTargetWaveWidth / 2; - - // Setting tap target - var tapTargetWrapperCssObj = {}; - tapTargetWrapperCssObj.top = isTop ? tapTargetTop + 'px' : ''; - tapTargetWrapperCssObj.right = isRight ? windowWidth - tapTargetLeft - tapTargetWidth + 'px' : ''; - tapTargetWrapperCssObj.bottom = isBottom ? windowHeight - tapTargetTop - tapTargetHeight + 'px' : ''; - tapTargetWrapperCssObj.left = isLeft ? tapTargetLeft + 'px' : ''; - tapTargetWrapperCssObj.position = tapTargetPosition; - $(this.wrapper).css(tapTargetWrapperCssObj); - - // Setting content - $(this.contentEl).css({ - width: tapTargetTextWidth + 'px', - height: tapTargetTextHeight + 'px', - top: tapTargetTextTop + 'px', - right: tapTargetTextRight + 'px', - bottom: tapTargetTextBottom + 'px', - left: tapTargetTextLeft + 'px', - padding: tapTargetTextPadding + 'px', - verticalAlign: tapTargetTextAlign - }); - - // Setting wave - $(this.waveEl).css({ - top: tapTargetWaveTop + 'px', - left: tapTargetWaveLeft + 'px', - width: tapTargetWaveWidth + 'px', - height: tapTargetWaveHeight + 'px' - }); - } - - /** - * Open TapTarget - */ - - }, { - key: "open", - value: function open() { - if (this.isOpen) { - return; - } - - // onOpen callback - if (typeof this.options.onOpen === 'function') { - this.options.onOpen.call(this, this.$origin[0]); - } - - this.isOpen = true; - this.wrapper.classList.add('open'); - - document.body.addEventListener('click', this._handleDocumentClickBound, true); - document.body.addEventListener('touchend', this._handleDocumentClickBound); - } - - /** - * Close Tap Target - */ - - }, { - key: "close", - value: function close() { - if (!this.isOpen) { - return; - } - - // onClose callback - if (typeof this.options.onClose === 'function') { - this.options.onClose.call(this, this.$origin[0]); - } - - this.isOpen = false; - this.wrapper.classList.remove('open'); - - document.body.removeEventListener('click', this._handleDocumentClickBound, true); - document.body.removeEventListener('touchend', this._handleDocumentClickBound); - } - }], [{ - key: "init", - value: function init(els, options) { - return _get(TapTarget.__proto__ || Object.getPrototypeOf(TapTarget), "init", this).call(this, this, els, options); - } - - /** - * Get Instance - */ - - }, { - key: "getInstance", - value: function getInstance(el) { - var domElem = !!el.jquery ? el[0] : el; - return domElem.M_TapTarget; - } - }, { - key: "defaults", - get: function () { - return _defaults; - } - }]); - - return TapTarget; - }(Component); - - M.TapTarget = TapTarget; - - if (M.jQueryLoaded) { - M.initializeJqueryWrapper(TapTarget, 'tapTarget', 'M_TapTarget'); - } -})(cash); -;(function ($) { - 'use strict'; - - var _defaults = { - classes: '', - dropdownOptions: {} - }; - - /** - * @class - * - */ - - var FormSelect = function (_Component20) { - _inherits(FormSelect, _Component20); - - /** - * Construct FormSelect instance - * @constructor - * @param {Element} el - * @param {Object} options - */ - function FormSelect(el, options) { - _classCallCheck(this, FormSelect); - - // Don't init if browser default version - var _this68 = _possibleConstructorReturn(this, (FormSelect.__proto__ || Object.getPrototypeOf(FormSelect)).call(this, FormSelect, el, options)); - - if (_this68.$el.hasClass('browser-default')) { - return _possibleConstructorReturn(_this68); - } - - _this68.el.M_FormSelect = _this68; - - /** - * Options for the select - * @member FormSelect#options - */ - _this68.options = $.extend({}, FormSelect.defaults, options); - - _this68.isMultiple = _this68.$el.prop('multiple'); - - // Setup - _this68.el.tabIndex = -1; - _this68._keysSelected = {}; - _this68._valueDict = {}; // Maps key to original and generated option element. - _this68._setupDropdown(); - - _this68._setupEventHandlers(); - return _this68; - } - - _createClass(FormSelect, [{ - key: "destroy", - - - /** - * Teardown component - */ - value: function destroy() { - this._removeEventHandlers(); - this._removeDropdown(); - this.el.M_FormSelect = undefined; - } - - /** - * Setup Event Handlers - */ - - }, { - key: "_setupEventHandlers", - value: function _setupEventHandlers() { - var _this69 = this; - - this._handleSelectChangeBound = this._handleSelectChange.bind(this); - this._handleOptionClickBound = this._handleOptionClick.bind(this); - this._handleInputClickBound = this._handleInputClick.bind(this); - - $(this.dropdownOptions).find('li:not(.optgroup)').each(function (el) { - el.addEventListener('click', _this69._handleOptionClickBound); - }); - this.el.addEventListener('change', this._handleSelectChangeBound); - this.input.addEventListener('click', this._handleInputClickBound); - } - - /** - * Remove Event Handlers - */ - - }, { - key: "_removeEventHandlers", - value: function _removeEventHandlers() { - var _this70 = this; - - $(this.dropdownOptions).find('li:not(.optgroup)').each(function (el) { - el.removeEventListener('click', _this70._handleOptionClickBound); - }); - this.el.removeEventListener('change', this._handleSelectChangeBound); - this.input.removeEventListener('click', this._handleInputClickBound); - } - - /** - * Handle Select Change - * @param {Event} e - */ - - }, { - key: "_handleSelectChange", - value: function _handleSelectChange(e) { - this._setValueToInput(); - } - - /** - * Handle Option Click - * @param {Event} e - */ - - }, { - key: "_handleOptionClick", - value: function _handleOptionClick(e) { - e.preventDefault(); - var option = $(e.target).closest('li')[0]; - var key = option.id; - if (!$(option).hasClass('disabled') && !$(option).hasClass('optgroup') && key.length) { - var selected = true; - - if (this.isMultiple) { - // Deselect placeholder option if still selected. - var placeholderOption = $(this.dropdownOptions).find('li.disabled.selected'); - if (placeholderOption.length) { - placeholderOption.removeClass('selected'); - placeholderOption.find('input[type="checkbox"]').prop('checked', false); - this._toggleEntryFromArray(placeholderOption[0].id); - } - selected = this._toggleEntryFromArray(key); - } else { - $(this.dropdownOptions).find('li').removeClass('selected'); - $(option).toggleClass('selected', selected); - } - - // Set selected on original select option - // Only trigger if selected state changed - var prevSelected = $(this._valueDict[key].el).prop('selected'); - if (prevSelected !== selected) { - $(this._valueDict[key].el).prop('selected', selected); - this.$el.trigger('change'); - } - } - - e.stopPropagation(); - } - - /** - * Handle Input Click - */ - - }, { - key: "_handleInputClick", - value: function _handleInputClick() { - if (this.dropdown && this.dropdown.isOpen) { - this._setValueToInput(); - this._setSelectedStates(); - } - } - - /** - * Setup dropdown - */ - - }, { - key: "_setupDropdown", - value: function _setupDropdown() { - var _this71 = this; - - this.wrapper = document.createElement('div'); - $(this.wrapper).addClass('select-wrapper ' + this.options.classes); - this.$el.before($(this.wrapper)); - this.wrapper.appendChild(this.el); - - if (this.el.disabled) { - this.wrapper.classList.add('disabled'); - } - - // Create dropdown - this.$selectOptions = this.$el.children('option, optgroup'); - this.dropdownOptions = document.createElement('ul'); - this.dropdownOptions.id = "select-options-" + M.guid(); - $(this.dropdownOptions).addClass('dropdown-content select-dropdown ' + (this.isMultiple ? 'multiple-select-dropdown' : '')); - - // Create dropdown structure. - if (this.$selectOptions.length) { - this.$selectOptions.each(function (el) { - if ($(el).is('option')) { - // Direct descendant option. - var optionEl = void 0; - if (_this71.isMultiple) { - optionEl = _this71._appendOptionWithIcon(_this71.$el, el, 'multiple'); - } else { - optionEl = _this71._appendOptionWithIcon(_this71.$el, el); - } - - _this71._addOptionToValueDict(el, optionEl); - } else if ($(el).is('optgroup')) { - // Optgroup. - var selectOptions = $(el).children('option'); - $(_this71.dropdownOptions).append($('
  • ' + el.getAttribute('label') + '
  • ')[0]); - - selectOptions.each(function (el) { - var optionEl = _this71._appendOptionWithIcon(_this71.$el, el, 'optgroup-option'); - _this71._addOptionToValueDict(el, optionEl); - }); - } - }); - } - - this.$el.after(this.dropdownOptions); - - // Add input dropdown - this.input = document.createElement('input'); - $(this.input).addClass('select-dropdown dropdown-trigger'); - this.input.setAttribute('type', 'text'); - this.input.setAttribute('readonly', 'true'); - this.input.setAttribute('data-target', this.dropdownOptions.id); - if (this.el.disabled) { - $(this.input).prop('disabled', 'true'); - } - - this.$el.before(this.input); - this._setValueToInput(); - - // Add caret - var dropdownIcon = $(''); - this.$el.before(dropdownIcon[0]); - - // Initialize dropdown - if (!this.el.disabled) { - var dropdownOptions = $.extend({}, this.options.dropdownOptions); - - // Add callback for centering selected option when dropdown content is scrollable - dropdownOptions.onOpenEnd = function (el) { - var selectedOption = $(_this71.dropdownOptions).find('.selected').first(); - - if (selectedOption.length) { - // Focus selected option in dropdown - M.keyDown = true; - _this71.dropdown.focusedIndex = selectedOption.index(); - _this71.dropdown._focusFocusedItem(); - M.keyDown = false; - - // Handle scrolling to selected option - if (_this71.dropdown.isScrollable) { - var scrollOffset = selectedOption[0].getBoundingClientRect().top - _this71.dropdownOptions.getBoundingClientRect().top; // scroll to selected option - scrollOffset -= _this71.dropdownOptions.clientHeight / 2; // center in dropdown - _this71.dropdownOptions.scrollTop = scrollOffset; - } - } - }; - - if (this.isMultiple) { - dropdownOptions.closeOnClick = false; - } - this.dropdown = M.Dropdown.init(this.input, dropdownOptions); - } - - // Add initial selections - this._setSelectedStates(); - } - - /** - * Add option to value dict - * @param {Element} el original option element - * @param {Element} optionEl generated option element - */ - - }, { - key: "_addOptionToValueDict", - value: function _addOptionToValueDict(el, optionEl) { - var index = Object.keys(this._valueDict).length; - var key = this.dropdownOptions.id + index; - var obj = {}; - optionEl.id = key; - - obj.el = el; - obj.optionEl = optionEl; - this._valueDict[key] = obj; - } - - /** - * Remove dropdown - */ - - }, { - key: "_removeDropdown", - value: function _removeDropdown() { - $(this.wrapper).find('.caret').remove(); - $(this.input).remove(); - $(this.dropdownOptions).remove(); - $(this.wrapper).before(this.$el); - $(this.wrapper).remove(); - } - - /** - * Setup dropdown - * @param {Element} select select element - * @param {Element} option option element from select - * @param {String} type - * @return {Element} option element added - */ - - }, { - key: "_appendOptionWithIcon", - value: function _appendOptionWithIcon(select, option, type) { - // Add disabled attr if disabled - var disabledClass = option.disabled ? 'disabled ' : ''; - var optgroupClass = type === 'optgroup-option' ? 'optgroup-option ' : ''; - var multipleCheckbox = this.isMultiple ? "" : option.innerHTML; - var liEl = $('
  • '); - var spanEl = $(''); - spanEl.html(multipleCheckbox); - liEl.addClass(disabledClass + " " + optgroupClass); - liEl.append(spanEl); - - // add icons - var iconUrl = option.getAttribute('data-icon'); - if (!!iconUrl) { - var imgEl = $("\"\""); - liEl.prepend(imgEl); - } - - // Check for multiple type. - $(this.dropdownOptions).append(liEl[0]); - return liEl[0]; - } - - /** - * Toggle entry from option - * @param {String} key Option key - * @return {Boolean} if entry was added or removed - */ - - }, { - key: "_toggleEntryFromArray", - value: function _toggleEntryFromArray(key) { - var notAdded = !this._keysSelected.hasOwnProperty(key); - var $optionLi = $(this._valueDict[key].optionEl); - - if (notAdded) { - this._keysSelected[key] = true; - } else { - delete this._keysSelected[key]; - } - - $optionLi.toggleClass('selected', notAdded); - - // Set checkbox checked value - $optionLi.find('input[type="checkbox"]').prop('checked', notAdded); - - // use notAdded instead of true (to detect if the option is selected or not) - $optionLi.prop('selected', notAdded); - - return notAdded; - } - - /** - * Set text value to input - */ - - }, { - key: "_setValueToInput", - value: function _setValueToInput() { - var values = []; - var options = this.$el.find('option'); - - options.each(function (el) { - if ($(el).prop('selected')) { - var text = $(el).text(); - values.push(text); - } - }); - - if (!values.length) { - var firstDisabled = this.$el.find('option:disabled').eq(0); - if (firstDisabled.length && firstDisabled[0].value === '') { - values.push(firstDisabled.text()); - } - } - - this.input.value = values.join(', '); - } - - /** - * Set selected state of dropdown to match actual select element - */ - - }, { - key: "_setSelectedStates", - value: function _setSelectedStates() { - this._keysSelected = {}; - - for (var key in this._valueDict) { - var option = this._valueDict[key]; - var optionIsSelected = $(option.el).prop('selected'); - $(option.optionEl).find('input[type="checkbox"]').prop('checked', optionIsSelected); - if (optionIsSelected) { - this._activateOption($(this.dropdownOptions), $(option.optionEl)); - this._keysSelected[key] = true; - } else { - $(option.optionEl).removeClass('selected'); - } - } - } - - /** - * Make option as selected and scroll to selected position - * @param {jQuery} collection Select options jQuery element - * @param {Element} newOption element of the new option - */ - - }, { - key: "_activateOption", - value: function _activateOption(collection, newOption) { - if (newOption) { - if (!this.isMultiple) { - collection.find('li.selected').removeClass('selected'); - } - var option = $(newOption); - option.addClass('selected'); - } - } - - /** - * Get Selected Values - * @return {Array} Array of selected values - */ - - }, { - key: "getSelectedValues", - value: function getSelectedValues() { - var selectedValues = []; - for (var key in this._keysSelected) { - selectedValues.push(this._valueDict[key].el.value); - } - return selectedValues; - } - }], [{ - key: "init", - value: function init(els, options) { - return _get(FormSelect.__proto__ || Object.getPrototypeOf(FormSelect), "init", this).call(this, this, els, options); - } - - /** - * Get Instance - */ - - }, { - key: "getInstance", - value: function getInstance(el) { - var domElem = !!el.jquery ? el[0] : el; - return domElem.M_FormSelect; - } - }, { - key: "defaults", - get: function () { - return _defaults; - } - }]); - - return FormSelect; - }(Component); - - M.FormSelect = FormSelect; - - if (M.jQueryLoaded) { - M.initializeJqueryWrapper(FormSelect, 'formSelect', 'M_FormSelect'); - } -})(cash); -;(function ($, anim) { - 'use strict'; - - var _defaults = {}; - - /** - * @class - * - */ - - var Range = function (_Component21) { - _inherits(Range, _Component21); - - /** - * Construct Range instance - * @constructor - * @param {Element} el - * @param {Object} options - */ - function Range(el, options) { - _classCallCheck(this, Range); - - var _this72 = _possibleConstructorReturn(this, (Range.__proto__ || Object.getPrototypeOf(Range)).call(this, Range, el, options)); - - _this72.el.M_Range = _this72; - - /** - * Options for the range - * @member Range#options - */ - _this72.options = $.extend({}, Range.defaults, options); - - _this72._mousedown = false; - - // Setup - _this72._setupThumb(); - - _this72._setupEventHandlers(); - return _this72; - } - - _createClass(Range, [{ - key: "destroy", - - - /** - * Teardown component - */ - value: function destroy() { - this._removeEventHandlers(); - this._removeThumb(); - this.el.M_Range = undefined; - } - - /** - * Setup Event Handlers - */ - - }, { - key: "_setupEventHandlers", - value: function _setupEventHandlers() { - this._handleRangeChangeBound = this._handleRangeChange.bind(this); - this._handleRangeMousedownTouchstartBound = this._handleRangeMousedownTouchstart.bind(this); - this._handleRangeInputMousemoveTouchmoveBound = this._handleRangeInputMousemoveTouchmove.bind(this); - this._handleRangeMouseupTouchendBound = this._handleRangeMouseupTouchend.bind(this); - this._handleRangeBlurMouseoutTouchleaveBound = this._handleRangeBlurMouseoutTouchleave.bind(this); - - this.el.addEventListener('change', this._handleRangeChangeBound); - - this.el.addEventListener('mousedown', this._handleRangeMousedownTouchstartBound); - this.el.addEventListener('touchstart', this._handleRangeMousedownTouchstartBound); - - this.el.addEventListener('input', this._handleRangeInputMousemoveTouchmoveBound); - this.el.addEventListener('mousemove', this._handleRangeInputMousemoveTouchmoveBound); - this.el.addEventListener('touchmove', this._handleRangeInputMousemoveTouchmoveBound); - - this.el.addEventListener('mouseup', this._handleRangeMouseupTouchendBound); - this.el.addEventListener('touchend', this._handleRangeMouseupTouchendBound); - - this.el.addEventListener('blur', this._handleRangeBlurMouseoutTouchleaveBound); - this.el.addEventListener('mouseout', this._handleRangeBlurMouseoutTouchleaveBound); - this.el.addEventListener('touchleave', this._handleRangeBlurMouseoutTouchleaveBound); - } - - /** - * Remove Event Handlers - */ - - }, { - key: "_removeEventHandlers", - value: function _removeEventHandlers() { - this.el.removeEventListener('change', this._handleRangeChangeBound); - - this.el.removeEventListener('mousedown', this._handleRangeMousedownTouchstartBound); - this.el.removeEventListener('touchstart', this._handleRangeMousedownTouchstartBound); - - this.el.removeEventListener('input', this._handleRangeInputMousemoveTouchmoveBound); - this.el.removeEventListener('mousemove', this._handleRangeInputMousemoveTouchmoveBound); - this.el.removeEventListener('touchmove', this._handleRangeInputMousemoveTouchmoveBound); - - this.el.removeEventListener('mouseup', this._handleRangeMouseupTouchendBound); - this.el.removeEventListener('touchend', this._handleRangeMouseupTouchendBound); - - this.el.removeEventListener('blur', this._handleRangeBlurMouseoutTouchleaveBound); - this.el.removeEventListener('mouseout', this._handleRangeBlurMouseoutTouchleaveBound); - this.el.removeEventListener('touchleave', this._handleRangeBlurMouseoutTouchleaveBound); - } - - /** - * Handle Range Change - * @param {Event} e - */ - - }, { - key: "_handleRangeChange", - value: function _handleRangeChange() { - $(this.value).html(this.$el.val()); - - if (!$(this.thumb).hasClass('active')) { - this._showRangeBubble(); - } - - var offsetLeft = this._calcRangeOffset(); - $(this.thumb).addClass('active').css('left', offsetLeft + 'px'); - } - - /** - * Handle Range Mousedown and Touchstart - * @param {Event} e - */ - - }, { - key: "_handleRangeMousedownTouchstart", - value: function _handleRangeMousedownTouchstart(e) { - // Set indicator value - $(this.value).html(this.$el.val()); - - this._mousedown = true; - this.$el.addClass('active'); - - if (!$(this.thumb).hasClass('active')) { - this._showRangeBubble(); - } - - if (e.type !== 'input') { - var offsetLeft = this._calcRangeOffset(); - $(this.thumb).addClass('active').css('left', offsetLeft + 'px'); - } - } - - /** - * Handle Range Input, Mousemove and Touchmove - */ - - }, { - key: "_handleRangeInputMousemoveTouchmove", - value: function _handleRangeInputMousemoveTouchmove() { - if (this._mousedown) { - if (!$(this.thumb).hasClass('active')) { - this._showRangeBubble(); - } - - var offsetLeft = this._calcRangeOffset(); - $(this.thumb).addClass('active').css('left', offsetLeft + 'px'); - $(this.value).html(this.$el.val()); - } - } - - /** - * Handle Range Mouseup and Touchend - */ - - }, { - key: "_handleRangeMouseupTouchend", - value: function _handleRangeMouseupTouchend() { - this._mousedown = false; - this.$el.removeClass('active'); - } - - /** - * Handle Range Blur, Mouseout and Touchleave - */ - - }, { - key: "_handleRangeBlurMouseoutTouchleave", - value: function _handleRangeBlurMouseoutTouchleave() { - if (!this._mousedown) { - var paddingLeft = parseInt(this.$el.css('padding-left')); - var marginLeft = 7 + paddingLeft + 'px'; - - if ($(this.thumb).hasClass('active')) { - anim.remove(this.thumb); - anim({ - targets: this.thumb, - height: 0, - width: 0, - top: 10, - easing: 'easeOutQuad', - marginLeft: marginLeft, - duration: 100 - }); - } - $(this.thumb).removeClass('active'); - } - } - - /** - * Setup dropdown - */ - - }, { - key: "_setupThumb", - value: function _setupThumb() { - this.thumb = document.createElement('span'); - this.value = document.createElement('span'); - $(this.thumb).addClass('thumb'); - $(this.value).addClass('value'); - $(this.thumb).append(this.value); - this.$el.after(this.thumb); - } - - /** - * Remove dropdown - */ - - }, { - key: "_removeThumb", - value: function _removeThumb() { - $(this.thumb).remove(); - } - - /** - * morph thumb into bubble - */ - - }, { - key: "_showRangeBubble", - value: function _showRangeBubble() { - var paddingLeft = parseInt($(this.thumb).parent().css('padding-left')); - var marginLeft = -7 + paddingLeft + 'px'; // TODO: fix magic number? - anim.remove(this.thumb); - anim({ - targets: this.thumb, - height: 30, - width: 30, - top: -30, - marginLeft: marginLeft, - duration: 300, - easing: 'easeOutQuint' - }); - } - - /** - * Calculate the offset of the thumb - * @return {Number} offset in pixels - */ - - }, { - key: "_calcRangeOffset", - value: function _calcRangeOffset() { - var width = this.$el.width() - 15; - var max = parseFloat(this.$el.attr('max')) || 100; // Range default max - var min = parseFloat(this.$el.attr('min')) || 0; // Range default min - var percent = (parseFloat(this.$el.val()) - min) / (max - min); - return percent * width; - } - }], [{ - key: "init", - value: function init(els, options) { - return _get(Range.__proto__ || Object.getPrototypeOf(Range), "init", this).call(this, this, els, options); - } - - /** - * Get Instance - */ - - }, { - key: "getInstance", - value: function getInstance(el) { - var domElem = !!el.jquery ? el[0] : el; - return domElem.M_Range; - } - }, { - key: "defaults", - get: function () { - return _defaults; - } - }]); - - return Range; - }(Component); - - M.Range = Range; - - if (M.jQueryLoaded) { - M.initializeJqueryWrapper(Range, 'range', 'M_Range'); - } - - Range.init($('input[type=range]')); -})(cash, M.anime); diff --git a/web/js/materialize.min.js b/web/js/materialize.min.js deleted file mode 100644 index 4ff077d..0000000 --- a/web/js/materialize.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Materialize v1.0.0 (http://materializecss.com) - * Copyright 2014-2017 Materialize - * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) - */ -var _get=function t(e,i,n){null===e&&(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,i);if(void 0===s){var o=Object.getPrototypeOf(e);return null===o?void 0:t(o,i,n)}if("value"in s)return s.value;var a=s.get;return void 0!==a?a.call(n):void 0},_createClass=function(){function n(t,e){for(var i=0;i/,p=/^\w+$/;function v(t,e){e=e||o;var i=u.test(t)?e.getElementsByClassName(t.slice(1)):p.test(t)?e.getElementsByTagName(t):e.querySelectorAll(t);return i}function f(t){if(!i){var e=(i=o.implementation.createHTMLDocument(null)).createElement("base");e.href=o.location.href,i.head.appendChild(e)}return i.body.innerHTML=t,i.body.childNodes}function m(t){"loading"!==o.readyState?t():o.addEventListener("DOMContentLoaded",t)}function g(t,e){if(!t)return this;if(t.cash&&t!==a)return t;var i,n=t,s=0;if(d(t))n=l.test(t)?o.getElementById(t.slice(1)):c.test(t)?f(t):v(t,e);else if(h(t))return m(t),this;if(!n)return this;if(n.nodeType||n===a)this[0]=n,this.length=1;else for(i=this.length=n.length;ss.right-i||l+e.width>window.innerWidth-i)&&(n.right=!0),(ho-i||h+e.height>window.innerHeight-i)&&(n.bottom=!0),n},M.checkPossibleAlignments=function(t,e,i,n){var s={top:!0,right:!0,bottom:!0,left:!0,spaceOnTop:null,spaceOnRight:null,spaceOnBottom:null,spaceOnLeft:null},o="visible"===getComputedStyle(e).overflow,a=e.getBoundingClientRect(),r=Math.min(a.height,window.innerHeight),l=Math.min(a.width,window.innerWidth),h=t.getBoundingClientRect(),d=e.scrollLeft,u=e.scrollTop,c=i.left-d,p=i.top-u,v=i.top+h.height-u;return s.spaceOnRight=o?window.innerWidth-(h.left+i.width):l-(c+i.width),s.spaceOnRight<0&&(s.left=!1),s.spaceOnLeft=o?h.right-i.width:c-i.width+h.width,s.spaceOnLeft<0&&(s.right=!1),s.spaceOnBottom=o?window.innerHeight-(h.top+i.height+n):r-(p+i.height+n),s.spaceOnBottom<0&&(s.top=!1),s.spaceOnTop=o?h.bottom-(i.height+n):v-(i.height-n),s.spaceOnTop<0&&(s.bottom=!1),s},M.getOverflowParent=function(t){return null==t?null:t===document.body||"visible"!==getComputedStyle(t).overflow?t:M.getOverflowParent(t.parentElement)},M.getIdFromTrigger=function(t){var e=t.getAttribute("data-target");return e||(e=(e=t.getAttribute("href"))?e.slice(1):""),e},M.getDocumentScrollTop=function(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},M.getDocumentScrollLeft=function(){return window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0};var getTime=Date.now||function(){return(new Date).getTime()};M.throttle=function(i,n,s){var o=void 0,a=void 0,r=void 0,l=null,h=0;s||(s={});var d=function(){h=!1===s.leading?0:getTime(),l=null,r=i.apply(o,a),o=a=null};return function(){var t=getTime();h||!1!==s.leading||(h=t);var e=n-(t-h);return o=this,a=arguments,e<=0?(clearTimeout(l),l=null,h=t,r=i.apply(o,a),o=a=null):l||!1===s.trailing||(l=setTimeout(d,e)),r}};var $jscomp={scope:{}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,i){if(i.get||i.set)throw new TypeError("ES3 does not support getters and setters.");t!=Array.prototype&&t!=Object.prototype&&(t[e]=i.value)},$jscomp.getGlobal=function(t){return"undefined"!=typeof window&&window===t?t:"undefined"!=typeof global&&null!=global?global:t},$jscomp.global=$jscomp.getGlobal(this),$jscomp.SYMBOL_PREFIX="jscomp_symbol_",$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){},$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)},$jscomp.symbolCounter_=0,$jscomp.Symbol=function(t){return $jscomp.SYMBOL_PREFIX+(t||"")+$jscomp.symbolCounter_++},$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var t=$jscomp.global.Symbol.iterator;t||(t=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator")),"function"!=typeof Array.prototype[t]&&$jscomp.defineProperty(Array.prototype,t,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}}),$jscomp.initSymbolIterator=function(){}},$jscomp.arrayIterator=function(t){var e=0;return $jscomp.iteratorPrototype(function(){return e=k.currentTime)for(var h=0;ht&&(s.duration=e.duration),s.children.push(e)}),s.seek(0),s.reset(),s.autoplay&&s.restart(),s},s},O.random=function(t,e){return Math.floor(Math.random()*(e-t+1))+t},O}(),function(r,l){"use strict";var e={accordion:!0,onOpenStart:void 0,onOpenEnd:void 0,onCloseStart:void 0,onCloseEnd:void 0,inDuration:300,outDuration:300},t=function(t){function s(t,e){_classCallCheck(this,s);var i=_possibleConstructorReturn(this,(s.__proto__||Object.getPrototypeOf(s)).call(this,s,t,e));(i.el.M_Collapsible=i).options=r.extend({},s.defaults,e),i.$headers=i.$el.children("li").children(".collapsible-header"),i.$headers.attr("tabindex",0),i._setupEventHandlers();var n=i.$el.children("li.active").children(".collapsible-body");return i.options.accordion?n.first().css("display","block"):n.css("display","block"),i}return _inherits(s,Component),_createClass(s,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_Collapsible=void 0}},{key:"_setupEventHandlers",value:function(){var e=this;this._handleCollapsibleClickBound=this._handleCollapsibleClick.bind(this),this._handleCollapsibleKeydownBound=this._handleCollapsibleKeydown.bind(this),this.el.addEventListener("click",this._handleCollapsibleClickBound),this.$headers.each(function(t){t.addEventListener("keydown",e._handleCollapsibleKeydownBound)})}},{key:"_removeEventHandlers",value:function(){var e=this;this.el.removeEventListener("click",this._handleCollapsibleClickBound),this.$headers.each(function(t){t.removeEventListener("keydown",e._handleCollapsibleKeydownBound)})}},{key:"_handleCollapsibleClick",value:function(t){var e=r(t.target).closest(".collapsible-header");if(t.target&&e.length){var i=e.closest(".collapsible");if(i[0]===this.el){var n=e.closest("li"),s=i.children("li"),o=n[0].classList.contains("active"),a=s.index(n);o?this.close(a):this.open(a)}}}},{key:"_handleCollapsibleKeydown",value:function(t){13===t.keyCode&&this._handleCollapsibleClickBound(t)}},{key:"_animateIn",value:function(t){var e=this,i=this.$el.children("li").eq(t);if(i.length){var n=i.children(".collapsible-body");l.remove(n[0]),n.css({display:"block",overflow:"hidden",height:0,paddingTop:"",paddingBottom:""});var s=n.css("padding-top"),o=n.css("padding-bottom"),a=n[0].scrollHeight;n.css({paddingTop:0,paddingBottom:0}),l({targets:n[0],height:a,paddingTop:s,paddingBottom:o,duration:this.options.inDuration,easing:"easeInOutCubic",complete:function(t){n.css({overflow:"",paddingTop:"",paddingBottom:"",height:""}),"function"==typeof e.options.onOpenEnd&&e.options.onOpenEnd.call(e,i[0])}})}}},{key:"_animateOut",value:function(t){var e=this,i=this.$el.children("li").eq(t);if(i.length){var n=i.children(".collapsible-body");l.remove(n[0]),n.css("overflow","hidden"),l({targets:n[0],height:0,paddingTop:0,paddingBottom:0,duration:this.options.outDuration,easing:"easeInOutCubic",complete:function(){n.css({height:"",overflow:"",padding:"",display:""}),"function"==typeof e.options.onCloseEnd&&e.options.onCloseEnd.call(e,i[0])}})}}},{key:"open",value:function(t){var i=this,e=this.$el.children("li").eq(t);if(e.length&&!e[0].classList.contains("active")){if("function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,e[0]),this.options.accordion){var n=this.$el.children("li");this.$el.children("li.active").each(function(t){var e=n.index(r(t));i.close(e)})}e[0].classList.add("active"),this._animateIn(t)}}},{key:"close",value:function(t){var e=this.$el.children("li").eq(t);e.length&&e[0].classList.contains("active")&&("function"==typeof this.options.onCloseStart&&this.options.onCloseStart.call(this,e[0]),e[0].classList.remove("active"),this._animateOut(t))}}],[{key:"init",value:function(t,e){return _get(s.__proto__||Object.getPrototypeOf(s),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Collapsible}},{key:"defaults",get:function(){return e}}]),s}();M.Collapsible=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"collapsible","M_Collapsible")}(cash,M.anime),function(h,i){"use strict";var e={alignment:"left",autoFocus:!0,constrainWidth:!0,container:null,coverTrigger:!0,closeOnClick:!0,hover:!1,inDuration:150,outDuration:250,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null,onItemClick:null},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return i.el.M_Dropdown=i,n._dropdowns.push(i),i.id=M.getIdFromTrigger(t),i.dropdownEl=document.getElementById(i.id),i.$dropdownEl=h(i.dropdownEl),i.options=h.extend({},n.defaults,e),i.isOpen=!1,i.isScrollable=!1,i.isTouchMoving=!1,i.focusedIndex=-1,i.filterQuery=[],i.options.container?h(i.options.container).append(i.dropdownEl):i.$el.after(i.dropdownEl),i._makeDropdownFocusable(),i._resetFilterQueryBound=i._resetFilterQuery.bind(i),i._handleDocumentClickBound=i._handleDocumentClick.bind(i),i._handleDocumentTouchmoveBound=i._handleDocumentTouchmove.bind(i),i._handleDropdownClickBound=i._handleDropdownClick.bind(i),i._handleDropdownKeydownBound=i._handleDropdownKeydown.bind(i),i._handleTriggerKeydownBound=i._handleTriggerKeydown.bind(i),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._resetDropdownStyles(),this._removeEventHandlers(),n._dropdowns.splice(n._dropdowns.indexOf(this),1),this.el.M_Dropdown=void 0}},{key:"_setupEventHandlers",value:function(){this.el.addEventListener("keydown",this._handleTriggerKeydownBound),this.dropdownEl.addEventListener("click",this._handleDropdownClickBound),this.options.hover?(this._handleMouseEnterBound=this._handleMouseEnter.bind(this),this.el.addEventListener("mouseenter",this._handleMouseEnterBound),this._handleMouseLeaveBound=this._handleMouseLeave.bind(this),this.el.addEventListener("mouseleave",this._handleMouseLeaveBound),this.dropdownEl.addEventListener("mouseleave",this._handleMouseLeaveBound)):(this._handleClickBound=this._handleClick.bind(this),this.el.addEventListener("click",this._handleClickBound))}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("keydown",this._handleTriggerKeydownBound),this.dropdownEl.removeEventListener("click",this._handleDropdownClickBound),this.options.hover?(this.el.removeEventListener("mouseenter",this._handleMouseEnterBound),this.el.removeEventListener("mouseleave",this._handleMouseLeaveBound),this.dropdownEl.removeEventListener("mouseleave",this._handleMouseLeaveBound)):this.el.removeEventListener("click",this._handleClickBound)}},{key:"_setupTemporaryEventHandlers",value:function(){document.body.addEventListener("click",this._handleDocumentClickBound,!0),document.body.addEventListener("touchend",this._handleDocumentClickBound),document.body.addEventListener("touchmove",this._handleDocumentTouchmoveBound),this.dropdownEl.addEventListener("keydown",this._handleDropdownKeydownBound)}},{key:"_removeTemporaryEventHandlers",value:function(){document.body.removeEventListener("click",this._handleDocumentClickBound,!0),document.body.removeEventListener("touchend",this._handleDocumentClickBound),document.body.removeEventListener("touchmove",this._handleDocumentTouchmoveBound),this.dropdownEl.removeEventListener("keydown",this._handleDropdownKeydownBound)}},{key:"_handleClick",value:function(t){t.preventDefault(),this.open()}},{key:"_handleMouseEnter",value:function(){this.open()}},{key:"_handleMouseLeave",value:function(t){var e=t.toElement||t.relatedTarget,i=!!h(e).closest(".dropdown-content").length,n=!1,s=h(e).closest(".dropdown-trigger");s.length&&s[0].M_Dropdown&&s[0].M_Dropdown.isOpen&&(n=!0),n||i||this.close()}},{key:"_handleDocumentClick",value:function(t){var e=this,i=h(t.target);this.options.closeOnClick&&i.closest(".dropdown-content").length&&!this.isTouchMoving?setTimeout(function(){e.close()},0):!i.closest(".dropdown-trigger").length&&i.closest(".dropdown-content").length||setTimeout(function(){e.close()},0),this.isTouchMoving=!1}},{key:"_handleTriggerKeydown",value:function(t){t.which!==M.keys.ARROW_DOWN&&t.which!==M.keys.ENTER||this.isOpen||(t.preventDefault(),this.open())}},{key:"_handleDocumentTouchmove",value:function(t){h(t.target).closest(".dropdown-content").length&&(this.isTouchMoving=!0)}},{key:"_handleDropdownClick",value:function(t){if("function"==typeof this.options.onItemClick){var e=h(t.target).closest("li")[0];this.options.onItemClick.call(this,e)}}},{key:"_handleDropdownKeydown",value:function(t){if(t.which===M.keys.TAB)t.preventDefault(),this.close();else if(t.which!==M.keys.ARROW_DOWN&&t.which!==M.keys.ARROW_UP||!this.isOpen)if(t.which===M.keys.ENTER&&this.isOpen){var e=this.dropdownEl.children[this.focusedIndex],i=h(e).find("a, button").first();i.length?i[0].click():e&&e.click()}else t.which===M.keys.ESC&&this.isOpen&&(t.preventDefault(),this.close());else{t.preventDefault();var n=t.which===M.keys.ARROW_DOWN?1:-1,s=this.focusedIndex,o=!1;do{if(s+=n,this.dropdownEl.children[s]&&-1!==this.dropdownEl.children[s].tabIndex){o=!0;break}}while(sl.spaceOnBottom?(h="bottom",i+=l.spaceOnTop,o-=l.spaceOnTop):i+=l.spaceOnBottom)),!l[d]){var u="left"===d?"right":"left";l[u]?d=u:l.spaceOnLeft>l.spaceOnRight?(d="right",n+=l.spaceOnLeft,s-=l.spaceOnLeft):(d="left",n+=l.spaceOnRight)}return"bottom"===h&&(o=o-e.height+(this.options.coverTrigger?t.height:0)),"right"===d&&(s=s-e.width+t.width),{x:s,y:o,verticalAlignment:h,horizontalAlignment:d,height:i,width:n}}},{key:"_animateIn",value:function(){var e=this;i.remove(this.dropdownEl),i({targets:this.dropdownEl,opacity:{value:[0,1],easing:"easeOutQuad"},scaleX:[.3,1],scaleY:[.3,1],duration:this.options.inDuration,easing:"easeOutQuint",complete:function(t){e.options.autoFocus&&e.dropdownEl.focus(),"function"==typeof e.options.onOpenEnd&&e.options.onOpenEnd.call(e,e.el)}})}},{key:"_animateOut",value:function(){var e=this;i.remove(this.dropdownEl),i({targets:this.dropdownEl,opacity:{value:0,easing:"easeOutQuint"},scaleX:.3,scaleY:.3,duration:this.options.outDuration,easing:"easeOutQuint",complete:function(t){e._resetDropdownStyles(),"function"==typeof e.options.onCloseEnd&&e.options.onCloseEnd.call(e,e.el)}})}},{key:"_placeDropdown",value:function(){var t=this.options.constrainWidth?this.el.getBoundingClientRect().width:this.dropdownEl.getBoundingClientRect().width;this.dropdownEl.style.width=t+"px";var e=this._getDropdownPosition();this.dropdownEl.style.left=e.x+"px",this.dropdownEl.style.top=e.y+"px",this.dropdownEl.style.height=e.height+"px",this.dropdownEl.style.width=e.width+"px",this.dropdownEl.style.transformOrigin=("left"===e.horizontalAlignment?"0":"100%")+" "+("top"===e.verticalAlignment?"0":"100%")}},{key:"open",value:function(){this.isOpen||(this.isOpen=!0,"function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,this.el),this._resetDropdownStyles(),this.dropdownEl.style.display="block",this._placeDropdown(),this._animateIn(),this._setupTemporaryEventHandlers())}},{key:"close",value:function(){this.isOpen&&(this.isOpen=!1,this.focusedIndex=-1,"function"==typeof this.options.onCloseStart&&this.options.onCloseStart.call(this,this.el),this._animateOut(),this._removeTemporaryEventHandlers(),this.options.autoFocus&&this.el.focus())}},{key:"recalculateDimensions",value:function(){this.isOpen&&(this.$dropdownEl.css({width:"",height:"",left:"",top:"","transform-origin":""}),this._placeDropdown())}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Dropdown}},{key:"defaults",get:function(){return e}}]),n}();t._dropdowns=[],M.Dropdown=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"dropdown","M_Dropdown")}(cash,M.anime),function(s,i){"use strict";var e={opacity:.5,inDuration:250,outDuration:250,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null,preventScrolling:!0,dismissible:!0,startingTop:"4%",endingTop:"10%"},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Modal=i).options=s.extend({},n.defaults,e),i.isOpen=!1,i.id=i.$el.attr("id"),i._openingTrigger=void 0,i.$overlay=s(''),i.el.tabIndex=0,i._nthModalOpened=0,n._count++,i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){n._count--,this._removeEventHandlers(),this.el.removeAttribute("style"),this.$overlay.remove(),this.el.M_Modal=void 0}},{key:"_setupEventHandlers",value:function(){this._handleOverlayClickBound=this._handleOverlayClick.bind(this),this._handleModalCloseClickBound=this._handleModalCloseClick.bind(this),1===n._count&&document.body.addEventListener("click",this._handleTriggerClick),this.$overlay[0].addEventListener("click",this._handleOverlayClickBound),this.el.addEventListener("click",this._handleModalCloseClickBound)}},{key:"_removeEventHandlers",value:function(){0===n._count&&document.body.removeEventListener("click",this._handleTriggerClick),this.$overlay[0].removeEventListener("click",this._handleOverlayClickBound),this.el.removeEventListener("click",this._handleModalCloseClickBound)}},{key:"_handleTriggerClick",value:function(t){var e=s(t.target).closest(".modal-trigger");if(e.length){var i=M.getIdFromTrigger(e[0]),n=document.getElementById(i).M_Modal;n&&n.open(e),t.preventDefault()}}},{key:"_handleOverlayClick",value:function(){this.options.dismissible&&this.close()}},{key:"_handleModalCloseClick",value:function(t){s(t.target).closest(".modal-close").length&&this.close()}},{key:"_handleKeydown",value:function(t){27===t.keyCode&&this.options.dismissible&&this.close()}},{key:"_handleFocus",value:function(t){this.el.contains(t.target)||this._nthModalOpened!==n._modalsOpen||this.el.focus()}},{key:"_animateIn",value:function(){var t=this;s.extend(this.el.style,{display:"block",opacity:0}),s.extend(this.$overlay[0].style,{display:"block",opacity:0}),i({targets:this.$overlay[0],opacity:this.options.opacity,duration:this.options.inDuration,easing:"easeOutQuad"});var e={targets:this.el,duration:this.options.inDuration,easing:"easeOutCubic",complete:function(){"function"==typeof t.options.onOpenEnd&&t.options.onOpenEnd.call(t,t.el,t._openingTrigger)}};this.el.classList.contains("bottom-sheet")?s.extend(e,{bottom:0,opacity:1}):s.extend(e,{top:[this.options.startingTop,this.options.endingTop],opacity:1,scaleX:[.8,1],scaleY:[.8,1]}),i(e)}},{key:"_animateOut",value:function(){var t=this;i({targets:this.$overlay[0],opacity:0,duration:this.options.outDuration,easing:"easeOutQuart"});var e={targets:this.el,duration:this.options.outDuration,easing:"easeOutCubic",complete:function(){t.el.style.display="none",t.$overlay.remove(),"function"==typeof t.options.onCloseEnd&&t.options.onCloseEnd.call(t,t.el)}};this.el.classList.contains("bottom-sheet")?s.extend(e,{bottom:"-100%",opacity:0}):s.extend(e,{top:[this.options.endingTop,this.options.startingTop],opacity:0,scaleX:.8,scaleY:.8}),i(e)}},{key:"open",value:function(t){if(!this.isOpen)return this.isOpen=!0,n._modalsOpen++,this._nthModalOpened=n._modalsOpen,this.$overlay[0].style.zIndex=1e3+2*n._modalsOpen,this.el.style.zIndex=1e3+2*n._modalsOpen+1,this._openingTrigger=t?t[0]:void 0,"function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,this.el,this._openingTrigger),this.options.preventScrolling&&(document.body.style.overflow="hidden"),this.el.classList.add("open"),this.el.insertAdjacentElement("afterend",this.$overlay[0]),this.options.dismissible&&(this._handleKeydownBound=this._handleKeydown.bind(this),this._handleFocusBound=this._handleFocus.bind(this),document.addEventListener("keydown",this._handleKeydownBound),document.addEventListener("focus",this._handleFocusBound,!0)),i.remove(this.el),i.remove(this.$overlay[0]),this._animateIn(),this.el.focus(),this}},{key:"close",value:function(){if(this.isOpen)return this.isOpen=!1,n._modalsOpen--,this._nthModalOpened=0,"function"==typeof this.options.onCloseStart&&this.options.onCloseStart.call(this,this.el),this.el.classList.remove("open"),0===n._modalsOpen&&(document.body.style.overflow=""),this.options.dismissible&&(document.removeEventListener("keydown",this._handleKeydownBound),document.removeEventListener("focus",this._handleFocusBound,!0)),i.remove(this.el),i.remove(this.$overlay[0]),this._animateOut(),this}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Modal}},{key:"defaults",get:function(){return e}}]),n}();t._modalsOpen=0,t._count=0,M.Modal=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"modal","M_Modal")}(cash,M.anime),function(o,a){"use strict";var e={inDuration:275,outDuration:200,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Materialbox=i).options=o.extend({},n.defaults,e),i.overlayActive=!1,i.doneAnimating=!0,i.placeholder=o("
    ").addClass("material-placeholder"),i.originalWidth=0,i.originalHeight=0,i.originInlineStyles=i.$el.attr("style"),i.caption=i.el.getAttribute("data-caption")||"",i.$el.before(i.placeholder),i.placeholder.append(i.$el),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_Materialbox=void 0,o(this.placeholder).after(this.el).remove(),this.$el.removeAttr("style")}},{key:"_setupEventHandlers",value:function(){this._handleMaterialboxClickBound=this._handleMaterialboxClick.bind(this),this.el.addEventListener("click",this._handleMaterialboxClickBound)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleMaterialboxClickBound)}},{key:"_handleMaterialboxClick",value:function(t){!1===this.doneAnimating||this.overlayActive&&this.doneAnimating?this.close():this.open()}},{key:"_handleWindowScroll",value:function(){this.overlayActive&&this.close()}},{key:"_handleWindowResize",value:function(){this.overlayActive&&this.close()}},{key:"_handleWindowEscape",value:function(t){27===t.keyCode&&this.doneAnimating&&this.overlayActive&&this.close()}},{key:"_makeAncestorsOverflowVisible",value:function(){this.ancestorsChanged=o();for(var t=this.placeholder[0].parentNode;null!==t&&!o(t).is(document);){var e=o(t);"visible"!==e.css("overflow")&&(e.css("overflow","visible"),void 0===this.ancestorsChanged?this.ancestorsChanged=e:this.ancestorsChanged=this.ancestorsChanged.add(e)),t=t.parentNode}}},{key:"_animateImageIn",value:function(){var t=this,e={targets:this.el,height:[this.originalHeight,this.newHeight],width:[this.originalWidth,this.newWidth],left:M.getDocumentScrollLeft()+this.windowWidth/2-this.placeholder.offset().left-this.newWidth/2,top:M.getDocumentScrollTop()+this.windowHeight/2-this.placeholder.offset().top-this.newHeight/2,duration:this.options.inDuration,easing:"easeOutQuad",complete:function(){t.doneAnimating=!0,"function"==typeof t.options.onOpenEnd&&t.options.onOpenEnd.call(t,t.el)}};this.maxWidth=this.$el.css("max-width"),this.maxHeight=this.$el.css("max-height"),"none"!==this.maxWidth&&(e.maxWidth=this.newWidth),"none"!==this.maxHeight&&(e.maxHeight=this.newHeight),a(e)}},{key:"_animateImageOut",value:function(){var t=this,e={targets:this.el,width:this.originalWidth,height:this.originalHeight,left:0,top:0,duration:this.options.outDuration,easing:"easeOutQuad",complete:function(){t.placeholder.css({height:"",width:"",position:"",top:"",left:""}),t.attrWidth&&t.$el.attr("width",t.attrWidth),t.attrHeight&&t.$el.attr("height",t.attrHeight),t.$el.removeAttr("style"),t.originInlineStyles&&t.$el.attr("style",t.originInlineStyles),t.$el.removeClass("active"),t.doneAnimating=!0,t.ancestorsChanged.length&&t.ancestorsChanged.css("overflow",""),"function"==typeof t.options.onCloseEnd&&t.options.onCloseEnd.call(t,t.el)}};a(e)}},{key:"_updateVars",value:function(){this.windowWidth=window.innerWidth,this.windowHeight=window.innerHeight,this.caption=this.el.getAttribute("data-caption")||""}},{key:"open",value:function(){var t=this;this._updateVars(),this.originalWidth=this.el.getBoundingClientRect().width,this.originalHeight=this.el.getBoundingClientRect().height,this.doneAnimating=!1,this.$el.addClass("active"),this.overlayActive=!0,"function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,this.el),this.placeholder.css({width:this.placeholder[0].getBoundingClientRect().width+"px",height:this.placeholder[0].getBoundingClientRect().height+"px",position:"relative",top:0,left:0}),this._makeAncestorsOverflowVisible(),this.$el.css({position:"absolute","z-index":1e3,"will-change":"left, top, width, height"}),this.attrWidth=this.$el.attr("width"),this.attrHeight=this.$el.attr("height"),this.attrWidth&&(this.$el.css("width",this.attrWidth+"px"),this.$el.removeAttr("width")),this.attrHeight&&(this.$el.css("width",this.attrHeight+"px"),this.$el.removeAttr("height")),this.$overlay=o('
    ').css({opacity:0}).one("click",function(){t.doneAnimating&&t.close()}),this.$el.before(this.$overlay);var e=this.$overlay[0].getBoundingClientRect();this.$overlay.css({width:this.windowWidth+"px",height:this.windowHeight+"px",left:-1*e.left+"px",top:-1*e.top+"px"}),a.remove(this.el),a.remove(this.$overlay[0]),a({targets:this.$overlay[0],opacity:1,duration:this.options.inDuration,easing:"easeOutQuad"}),""!==this.caption&&(this.$photocaption&&a.remove(this.$photoCaption[0]),this.$photoCaption=o('
    '),this.$photoCaption.text(this.caption),o("body").append(this.$photoCaption),this.$photoCaption.css({display:"inline"}),a({targets:this.$photoCaption[0],opacity:1,duration:this.options.inDuration,easing:"easeOutQuad"}));var i=0,n=this.originalWidth/this.windowWidth,s=this.originalHeight/this.windowHeight;this.newWidth=0,this.newHeight=0,si.options.responsiveThreshold,i.$img=i.$el.find("img").first(),i.$img.each(function(){this.complete&&s(this).trigger("load")}),i._updateParallax(),i._setupEventHandlers(),i._setupStyles(),n._parallaxes.push(i),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){n._parallaxes.splice(n._parallaxes.indexOf(this),1),this.$img[0].style.transform="",this._removeEventHandlers(),this.$el[0].M_Parallax=void 0}},{key:"_setupEventHandlers",value:function(){this._handleImageLoadBound=this._handleImageLoad.bind(this),this.$img[0].addEventListener("load",this._handleImageLoadBound),0===n._parallaxes.length&&(n._handleScrollThrottled=M.throttle(n._handleScroll,5),window.addEventListener("scroll",n._handleScrollThrottled),n._handleWindowResizeThrottled=M.throttle(n._handleWindowResize,5),window.addEventListener("resize",n._handleWindowResizeThrottled))}},{key:"_removeEventHandlers",value:function(){this.$img[0].removeEventListener("load",this._handleImageLoadBound),0===n._parallaxes.length&&(window.removeEventListener("scroll",n._handleScrollThrottled),window.removeEventListener("resize",n._handleWindowResizeThrottled))}},{key:"_setupStyles",value:function(){this.$img[0].style.opacity=1}},{key:"_handleImageLoad",value:function(){this._updateParallax()}},{key:"_updateParallax",value:function(){var t=0e.options.responsiveThreshold}}},{key:"defaults",get:function(){return e}}]),n}();t._parallaxes=[],M.Parallax=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"parallax","M_Parallax")}(cash),function(a,s){"use strict";var e={duration:300,onShow:null,swipeable:!1,responsiveThreshold:1/0},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Tabs=i).options=a.extend({},n.defaults,e),i.$tabLinks=i.$el.children("li.tab").children("a"),i.index=0,i._setupActiveTabLink(),i.options.swipeable?i._setupSwipeableTabs():i._setupNormalTabs(),i._setTabsAndTabWidth(),i._createIndicator(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this._indicator.parentNode.removeChild(this._indicator),this.options.swipeable?this._teardownSwipeableTabs():this._teardownNormalTabs(),this.$el[0].M_Tabs=void 0}},{key:"_setupEventHandlers",value:function(){this._handleWindowResizeBound=this._handleWindowResize.bind(this),window.addEventListener("resize",this._handleWindowResizeBound),this._handleTabClickBound=this._handleTabClick.bind(this),this.el.addEventListener("click",this._handleTabClickBound)}},{key:"_removeEventHandlers",value:function(){window.removeEventListener("resize",this._handleWindowResizeBound),this.el.removeEventListener("click",this._handleTabClickBound)}},{key:"_handleWindowResize",value:function(){this._setTabsAndTabWidth(),0!==this.tabWidth&&0!==this.tabsWidth&&(this._indicator.style.left=this._calcLeftPos(this.$activeTabLink)+"px",this._indicator.style.right=this._calcRightPos(this.$activeTabLink)+"px")}},{key:"_handleTabClick",value:function(t){var e=this,i=a(t.target).closest("li.tab"),n=a(t.target).closest("a");if(n.length&&n.parent().hasClass("tab"))if(i.hasClass("disabled"))t.preventDefault();else if(!n.attr("target")){this.$activeTabLink.removeClass("active");var s=this.$content;this.$activeTabLink=n,this.$content=a(M.escapeHash(n[0].hash)),this.$tabLinks=this.$el.children("li.tab").children("a"),this.$activeTabLink.addClass("active");var o=this.index;this.index=Math.max(this.$tabLinks.index(n),0),this.options.swipeable?this._tabsCarousel&&this._tabsCarousel.set(this.index,function(){"function"==typeof e.options.onShow&&e.options.onShow.call(e,e.$content[0])}):this.$content.length&&(this.$content[0].style.display="block",this.$content.addClass("active"),"function"==typeof this.options.onShow&&this.options.onShow.call(this,this.$content[0]),s.length&&!s.is(this.$content)&&(s[0].style.display="none",s.removeClass("active"))),this._setTabsAndTabWidth(),this._animateIndicator(o),t.preventDefault()}}},{key:"_createIndicator",value:function(){var t=this,e=document.createElement("li");e.classList.add("indicator"),this.el.appendChild(e),this._indicator=e,setTimeout(function(){t._indicator.style.left=t._calcLeftPos(t.$activeTabLink)+"px",t._indicator.style.right=t._calcRightPos(t.$activeTabLink)+"px"},0)}},{key:"_setupActiveTabLink",value:function(){this.$activeTabLink=a(this.$tabLinks.filter('[href="'+location.hash+'"]')),0===this.$activeTabLink.length&&(this.$activeTabLink=this.$el.children("li.tab").children("a.active").first()),0===this.$activeTabLink.length&&(this.$activeTabLink=this.$el.children("li.tab").children("a").first()),this.$tabLinks.removeClass("active"),this.$activeTabLink[0].classList.add("active"),this.index=Math.max(this.$tabLinks.index(this.$activeTabLink),0),this.$activeTabLink.length&&(this.$content=a(M.escapeHash(this.$activeTabLink[0].hash)),this.$content.addClass("active"))}},{key:"_setupSwipeableTabs",value:function(){var i=this;window.innerWidth>this.options.responsiveThreshold&&(this.options.swipeable=!1);var n=a();this.$tabLinks.each(function(t){var e=a(M.escapeHash(t.hash));e.addClass("carousel-item"),n=n.add(e)});var t=a('');n.first().before(t),t.append(n),n[0].style.display="";var e=this.$activeTabLink.closest(".tab").index();this._tabsCarousel=M.Carousel.init(t[0],{fullWidth:!0,noWrap:!0,onCycleTo:function(t){var e=i.index;i.index=a(t).index(),i.$activeTabLink.removeClass("active"),i.$activeTabLink=i.$tabLinks.eq(i.index),i.$activeTabLink.addClass("active"),i._animateIndicator(e),"function"==typeof i.options.onShow&&i.options.onShow.call(i,i.$content[0])}}),this._tabsCarousel.set(e)}},{key:"_teardownSwipeableTabs",value:function(){var t=this._tabsCarousel.$el;this._tabsCarousel.destroy(),t.after(t.children()),t.remove()}},{key:"_setupNormalTabs",value:function(){this.$tabLinks.not(this.$activeTabLink).each(function(t){if(t.hash){var e=a(M.escapeHash(t.hash));e.length&&(e[0].style.display="none")}})}},{key:"_teardownNormalTabs",value:function(){this.$tabLinks.each(function(t){if(t.hash){var e=a(M.escapeHash(t.hash));e.length&&(e[0].style.display="")}})}},{key:"_setTabsAndTabWidth",value:function(){this.tabsWidth=this.$el.width(),this.tabWidth=Math.max(this.tabsWidth,this.el.scrollWidth)/this.$tabLinks.length}},{key:"_calcRightPos",value:function(t){return Math.ceil(this.tabsWidth-t.position().left-t[0].getBoundingClientRect().width)}},{key:"_calcLeftPos",value:function(t){return Math.floor(t.position().left)}},{key:"updateTabIndicator",value:function(){this._setTabsAndTabWidth(),this._animateIndicator(this.index)}},{key:"_animateIndicator",value:function(t){var e=0,i=0;0<=this.index-t?e=90:i=90;var n={targets:this._indicator,left:{value:this._calcLeftPos(this.$activeTabLink),delay:e},right:{value:this._calcRightPos(this.$activeTabLink),delay:i},duration:this.options.duration,easing:"easeOutQuad"};s.remove(this._indicator),s(n)}},{key:"select",value:function(t){var e=this.$tabLinks.filter('[href="#'+t+'"]');e.length&&e.trigger("click")}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Tabs}},{key:"defaults",get:function(){return e}}]),n}();M.Tabs=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"tabs","M_Tabs")}(cash,M.anime),function(d,e){"use strict";var i={exitDelay:200,enterDelay:0,html:null,margin:5,inDuration:250,outDuration:200,position:"bottom",transitionMovement:10},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Tooltip=i).options=d.extend({},n.defaults,e),i.isOpen=!1,i.isHovered=!1,i.isFocused=!1,i._appendTooltipEl(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){d(this.tooltipEl).remove(),this._removeEventHandlers(),this.el.M_Tooltip=void 0}},{key:"_appendTooltipEl",value:function(){var t=document.createElement("div");t.classList.add("material-tooltip"),this.tooltipEl=t;var e=document.createElement("div");e.classList.add("tooltip-content"),e.innerHTML=this.options.html,t.appendChild(e),document.body.appendChild(t)}},{key:"_updateTooltipContent",value:function(){this.tooltipEl.querySelector(".tooltip-content").innerHTML=this.options.html}},{key:"_setupEventHandlers",value:function(){this._handleMouseEnterBound=this._handleMouseEnter.bind(this),this._handleMouseLeaveBound=this._handleMouseLeave.bind(this),this._handleFocusBound=this._handleFocus.bind(this),this._handleBlurBound=this._handleBlur.bind(this),this.el.addEventListener("mouseenter",this._handleMouseEnterBound),this.el.addEventListener("mouseleave",this._handleMouseLeaveBound),this.el.addEventListener("focus",this._handleFocusBound,!0),this.el.addEventListener("blur",this._handleBlurBound,!0)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("mouseenter",this._handleMouseEnterBound),this.el.removeEventListener("mouseleave",this._handleMouseLeaveBound),this.el.removeEventListener("focus",this._handleFocusBound,!0),this.el.removeEventListener("blur",this._handleBlurBound,!0)}},{key:"open",value:function(t){this.isOpen||(t=void 0===t||void 0,this.isOpen=!0,this.options=d.extend({},this.options,this._getAttributeOptions()),this._updateTooltipContent(),this._setEnterDelayTimeout(t))}},{key:"close",value:function(){this.isOpen&&(this.isHovered=!1,this.isFocused=!1,this.isOpen=!1,this._setExitDelayTimeout())}},{key:"_setExitDelayTimeout",value:function(){var t=this;clearTimeout(this._exitDelayTimeout),this._exitDelayTimeout=setTimeout(function(){t.isHovered||t.isFocused||t._animateOut()},this.options.exitDelay)}},{key:"_setEnterDelayTimeout",value:function(t){var e=this;clearTimeout(this._enterDelayTimeout),this._enterDelayTimeout=setTimeout(function(){(e.isHovered||e.isFocused||t)&&e._animateIn()},this.options.enterDelay)}},{key:"_positionTooltip",value:function(){var t,e=this.el,i=this.tooltipEl,n=e.offsetHeight,s=e.offsetWidth,o=i.offsetHeight,a=i.offsetWidth,r=this.options.margin,l=void 0,h=void 0;this.xMovement=0,this.yMovement=0,l=e.getBoundingClientRect().top+M.getDocumentScrollTop(),h=e.getBoundingClientRect().left+M.getDocumentScrollLeft(),"top"===this.options.position?(l+=-o-r,h+=s/2-a/2,this.yMovement=-this.options.transitionMovement):"right"===this.options.position?(l+=n/2-o/2,h+=s+r,this.xMovement=this.options.transitionMovement):"left"===this.options.position?(l+=n/2-o/2,h+=-a-r,this.xMovement=-this.options.transitionMovement):(l+=n+r,h+=s/2-a/2,this.yMovement=this.options.transitionMovement),t=this._repositionWithinScreen(h,l,a,o),d(i).css({top:t.y+"px",left:t.x+"px"})}},{key:"_repositionWithinScreen",value:function(t,e,i,n){var s=M.getDocumentScrollLeft(),o=M.getDocumentScrollTop(),a=t-s,r=e-o,l={left:a,top:r,width:i,height:n},h=this.options.margin+this.options.transitionMovement,d=M.checkWithinContainer(document.body,l,h);return d.left?a=h:d.right&&(a-=a+i-window.innerWidth),d.top?r=h:d.bottom&&(r-=r+n-window.innerHeight),{x:a+s,y:r+o}}},{key:"_animateIn",value:function(){this._positionTooltip(),this.tooltipEl.style.visibility="visible",e.remove(this.tooltipEl),e({targets:this.tooltipEl,opacity:1,translateX:this.xMovement,translateY:this.yMovement,duration:this.options.inDuration,easing:"easeOutCubic"})}},{key:"_animateOut",value:function(){e.remove(this.tooltipEl),e({targets:this.tooltipEl,opacity:0,translateX:0,translateY:0,duration:this.options.outDuration,easing:"easeOutCubic"})}},{key:"_handleMouseEnter",value:function(){this.isHovered=!0,this.isFocused=!1,this.open(!1)}},{key:"_handleMouseLeave",value:function(){this.isHovered=!1,this.isFocused=!1,this.close()}},{key:"_handleFocus",value:function(){M.tabPressed&&(this.isFocused=!0,this.open(!1))}},{key:"_handleBlur",value:function(){this.isFocused=!1,this.close()}},{key:"_getAttributeOptions",value:function(){var t={},e=this.el.getAttribute("data-tooltip"),i=this.el.getAttribute("data-position");return e&&(t.html=e),i&&(t.position=i),t}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Tooltip}},{key:"defaults",get:function(){return i}}]),n}();M.Tooltip=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"tooltip","M_Tooltip")}(cash,M.anime),function(i){"use strict";var t=t||{},e=document.querySelectorAll.bind(document);function m(t){var e="";for(var i in t)t.hasOwnProperty(i)&&(e+=i+":"+t[i]+";");return e}var g={duration:750,show:function(t,e){if(2===t.button)return!1;var i=e||this,n=document.createElement("div");n.className="waves-ripple",i.appendChild(n);var s,o,a,r,l,h,d,u=(h={top:0,left:0},d=(s=i)&&s.ownerDocument,o=d.documentElement,void 0!==s.getBoundingClientRect&&(h=s.getBoundingClientRect()),a=null!==(l=r=d)&&l===l.window?r:9===r.nodeType&&r.defaultView,{top:h.top+a.pageYOffset-o.clientTop,left:h.left+a.pageXOffset-o.clientLeft}),c=t.pageY-u.top,p=t.pageX-u.left,v="scale("+i.clientWidth/100*10+")";"touches"in t&&(c=t.touches[0].pageY-u.top,p=t.touches[0].pageX-u.left),n.setAttribute("data-hold",Date.now()),n.setAttribute("data-scale",v),n.setAttribute("data-x",p),n.setAttribute("data-y",c);var f={top:c+"px",left:p+"px"};n.className=n.className+" waves-notransition",n.setAttribute("style",m(f)),n.className=n.className.replace("waves-notransition",""),f["-webkit-transform"]=v,f["-moz-transform"]=v,f["-ms-transform"]=v,f["-o-transform"]=v,f.transform=v,f.opacity="1",f["-webkit-transition-duration"]=g.duration+"ms",f["-moz-transition-duration"]=g.duration+"ms",f["-o-transition-duration"]=g.duration+"ms",f["transition-duration"]=g.duration+"ms",f["-webkit-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f["-moz-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f["-o-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f["transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",n.setAttribute("style",m(f))},hide:function(t){l.touchup(t);var e=this,i=(e.clientWidth,null),n=e.getElementsByClassName("waves-ripple");if(!(0i||1"+o+""+a+""+r+""),i.length&&e.prepend(i)}},{key:"_resetCurrentElement",value:function(){this.activeIndex=-1,this.$active.removeClass("active")}},{key:"_resetAutocomplete",value:function(){h(this.container).empty(),this._resetCurrentElement(),this.oldVal=null,this.isOpen=!1,this._mousedown=!1}},{key:"selectOption",value:function(t){var e=t.text().trim();this.el.value=e,this.$el.trigger("change"),this._resetAutocomplete(),this.close(),"function"==typeof this.options.onAutocomplete&&this.options.onAutocomplete.call(this,e)}},{key:"_renderDropdown",value:function(t,i){var n=this;this._resetAutocomplete();var e=[];for(var s in t)if(t.hasOwnProperty(s)&&-1!==s.toLowerCase().indexOf(i)){if(this.count>=this.options.limit)break;var o={data:t[s],key:s};e.push(o),this.count++}if(this.options.sortFunction){e.sort(function(t,e){return n.options.sortFunction(t.key.toLowerCase(),e.key.toLowerCase(),i.toLowerCase())})}for(var a=0;a");r.data?l.append(''+r.key+""):l.append(""+r.key+""),h(this.container).append(l),this._highlight(i,l)}}},{key:"open",value:function(){var t=this.el.value.toLowerCase();this._resetAutocomplete(),t.length>=this.options.minLength&&(this.isOpen=!0,this._renderDropdown(this.options.data,t)),this.dropdown.isOpen?this.dropdown.recalculateDimensions():this.dropdown.open()}},{key:"close",value:function(){this.dropdown.close()}},{key:"updateData",value:function(t){var e=this.el.value.toLowerCase();this.options.data=t,this.isOpen&&this._renderDropdown(t,e)}}],[{key:"init",value:function(t,e){return _get(s.__proto__||Object.getPrototypeOf(s),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Autocomplete}},{key:"defaults",get:function(){return e}}]),s}();t._keydown=!1,M.Autocomplete=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"autocomplete","M_Autocomplete")}(cash),function(d){M.updateTextFields=function(){d("input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], input[type=date], input[type=time], textarea").each(function(t,e){var i=d(this);0'),d("body").append(e));var i=t.css("font-family"),n=t.css("font-size"),s=t.css("line-height"),o=t.css("padding-top"),a=t.css("padding-right"),r=t.css("padding-bottom"),l=t.css("padding-left");n&&e.css("font-size",n),i&&e.css("font-family",i),s&&e.css("line-height",s),o&&e.css("padding-top",o),a&&e.css("padding-right",a),r&&e.css("padding-bottom",r),l&&e.css("padding-left",l),t.data("original-height")||t.data("original-height",t.height()),"off"===t.attr("wrap")&&e.css("overflow-wrap","normal").css("white-space","pre"),e.text(t[0].value+"\n");var h=e.html().replace(/\n/g,"
    ");e.html(h),0'),this.$slides.each(function(t,e){var i=s('
  • ');n.$indicators.append(i[0])}),this.$el.append(this.$indicators[0]),this.$indicators=this.$indicators.children("li.indicator-item"))}},{key:"_removeIndicators",value:function(){this.$el.find("ul.indicators").remove()}},{key:"set",value:function(t){var e=this;if(t>=this.$slides.length?t=0:t<0&&(t=this.$slides.length-1),this.activeIndex!=t){this.$active=this.$slides.eq(this.activeIndex);var i=this.$active.find(".caption");this.$active.removeClass("active"),o({targets:this.$active[0],opacity:0,duration:this.options.duration,easing:"easeOutQuad",complete:function(){e.$slides.not(".active").each(function(t){o({targets:t,opacity:0,translateX:0,translateY:0,duration:0,easing:"easeOutQuad"})})}}),this._animateCaptionIn(i[0],this.options.duration),this.options.indicators&&(this.$indicators.eq(this.activeIndex).removeClass("active"),this.$indicators.eq(t).addClass("active")),o({targets:this.$slides.eq(t)[0],opacity:1,duration:this.options.duration,easing:"easeOutQuad"}),o({targets:this.$slides.eq(t).find(".caption")[0],opacity:1,translateX:0,translateY:0,duration:this.options.duration,delay:this.options.duration,easing:"easeOutQuad"}),this.$slides.eq(t).addClass("active"),this.activeIndex=t,this.start()}}},{key:"pause",value:function(){clearInterval(this.interval)}},{key:"start",value:function(){clearInterval(this.interval),this.interval=setInterval(this._handleIntervalBound,this.options.duration+this.options.interval)}},{key:"next",value:function(){var t=this.activeIndex+1;t>=this.$slides.length?t=0:t<0&&(t=this.$slides.length-1),this.set(t)}},{key:"prev",value:function(){var t=this.activeIndex-1;t>=this.$slides.length?t=0:t<0&&(t=this.$slides.length-1),this.set(t)}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Slider}},{key:"defaults",get:function(){return e}}]),n}();M.Slider=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"slider","M_Slider")}(cash,M.anime),function(n,s){n(document).on("click",".card",function(t){if(n(this).children(".card-reveal").length){var i=n(t.target).closest(".card");void 0===i.data("initialOverflow")&&i.data("initialOverflow",void 0===i.css("overflow")?"":i.css("overflow"));var e=n(this).find(".card-reveal");n(t.target).is(n(".card-reveal .card-title"))||n(t.target).is(n(".card-reveal .card-title i"))?s({targets:e[0],translateY:0,duration:225,easing:"easeInOutQuad",complete:function(t){var e=t.animatables[0].target;n(e).css({display:"none"}),i.css("overflow",i.data("initialOverflow"))}}):(n(t.target).is(n(".card .activator"))||n(t.target).is(n(".card .activator i")))&&(i.css("overflow","hidden"),e.css({display:"block"}),s({targets:e[0],translateY:"-100%",duration:300,easing:"easeInOutQuad"}))}})}(cash,M.anime),function(h){"use strict";var e={data:[],placeholder:"",secondaryPlaceholder:"",autocompleteOptions:{},limit:1/0,onChipAdd:null,onChipSelect:null,onChipDelete:null},t=function(t){function l(t,e){_classCallCheck(this,l);var i=_possibleConstructorReturn(this,(l.__proto__||Object.getPrototypeOf(l)).call(this,l,t,e));return(i.el.M_Chips=i).options=h.extend({},l.defaults,e),i.$el.addClass("chips input-field"),i.chipsData=[],i.$chips=h(),i._setupInput(),i.hasAutocomplete=0"),this.$el.append(this.$input)),this.$input.addClass("input")}},{key:"_setupLabel",value:function(){this.$label=this.$el.find("label"),this.$label.length&&this.$label.setAttribute("for",this.$input.attr("id"))}},{key:"_setPlaceholder",value:function(){void 0!==this.chipsData&&!this.chipsData.length&&this.options.placeholder?h(this.$input).prop("placeholder",this.options.placeholder):(void 0===this.chipsData||this.chipsData.length)&&this.options.secondaryPlaceholder&&h(this.$input).prop("placeholder",this.options.secondaryPlaceholder)}},{key:"_isValid",value:function(t){if(t.hasOwnProperty("tag")&&""!==t.tag){for(var e=!1,i=0;i=this.options.limit)){var e=this._renderChip(t);this.$chips.add(e),this.chipsData.push(t),h(this.$input).before(e),this._setPlaceholder(),"function"==typeof this.options.onChipAdd&&this.options.onChipAdd.call(this,this.$el,e)}}},{key:"deleteChip",value:function(t){var e=this.$chips.eq(t);this.$chips.eq(t).remove(),this.$chips=this.$chips.filter(function(t){return 0<=h(t).index()}),this.chipsData.splice(t,1),this._setPlaceholder(),"function"==typeof this.options.onChipDelete&&this.options.onChipDelete.call(this,this.$el,e[0])}},{key:"selectChip",value:function(t){var e=this.$chips.eq(t);(this._selectedChip=e)[0].focus(),"function"==typeof this.options.onChipSelect&&this.options.onChipSelect.call(this,this.$el,e[0])}}],[{key:"init",value:function(t,e){return _get(l.__proto__||Object.getPrototypeOf(l),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Chips}},{key:"_handleChipsKeydown",value:function(t){l._keydown=!0;var e=h(t.target).closest(".chips"),i=t.target&&e.length;if(!h(t.target).is("input, textarea")&&i){var n=e[0].M_Chips;if(8===t.keyCode||46===t.keyCode){t.preventDefault();var s=n.chipsData.length;if(n._selectedChip){var o=n._selectedChip.index();n.deleteChip(o),n._selectedChip=null,s=Math.max(o-1,0)}n.chipsData.length&&n.selectChip(s)}else if(37===t.keyCode){if(n._selectedChip){var a=n._selectedChip.index()-1;if(a<0)return;n.selectChip(a)}}else if(39===t.keyCode&&n._selectedChip){var r=n._selectedChip.index()+1;r>=n.chipsData.length?n.$input[0].focus():n.selectChip(r)}}}},{key:"_handleChipsKeyup",value:function(t){l._keydown=!1}},{key:"_handleChipsBlur",value:function(t){l._keydown||(h(t.target).closest(".chips")[0].M_Chips._selectedChip=null)}},{key:"defaults",get:function(){return e}}]),l}();t._keydown=!1,M.Chips=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"chips","M_Chips"),h(document).ready(function(){h(document.body).on("click",".chip .close",function(){var t=h(this).closest(".chips");t.length&&t[0].M_Chips||h(this).closest(".chip").remove()})})}(cash),function(s){"use strict";var e={top:0,bottom:1/0,offset:0,onPositionChange:null},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Pushpin=i).options=s.extend({},n.defaults,e),i.originalOffset=i.el.offsetTop,n._pushpins.push(i),i._setupEventHandlers(),i._updatePosition(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this.el.style.top=null,this._removePinClasses(),this._removeEventHandlers();var t=n._pushpins.indexOf(this);n._pushpins.splice(t,1)}},{key:"_setupEventHandlers",value:function(){document.addEventListener("scroll",n._updateElements)}},{key:"_removeEventHandlers",value:function(){document.removeEventListener("scroll",n._updateElements)}},{key:"_updatePosition",value:function(){var t=M.getDocumentScrollTop()+this.options.offset;this.options.top<=t&&this.options.bottom>=t&&!this.el.classList.contains("pinned")&&(this._removePinClasses(),this.el.style.top=this.options.offset+"px",this.el.classList.add("pinned"),"function"==typeof this.options.onPositionChange&&this.options.onPositionChange.call(this,"pinned")),tthis.options.bottom&&!this.el.classList.contains("pin-bottom")&&(this._removePinClasses(),this.el.classList.add("pin-bottom"),this.el.style.top=this.options.bottom-this.originalOffset+"px","function"==typeof this.options.onPositionChange&&this.options.onPositionChange.call(this,"pin-bottom"))}},{key:"_removePinClasses",value:function(){this.el.classList.remove("pin-top"),this.el.classList.remove("pinned"),this.el.classList.remove("pin-bottom")}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Pushpin}},{key:"_updateElements",value:function(){for(var t in n._pushpins){n._pushpins[t]._updatePosition()}}},{key:"defaults",get:function(){return e}}]),n}();t._pushpins=[],M.Pushpin=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"pushpin","M_Pushpin")}(cash),function(r,s){"use strict";var e={direction:"top",hoverEnabled:!0,toolbarEnabled:!1};r.fn.reverse=[].reverse;var t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_FloatingActionButton=i).options=r.extend({},n.defaults,e),i.isOpen=!1,i.$anchor=i.$el.children("a").first(),i.$menu=i.$el.children("ul").first(),i.$floatingBtns=i.$el.find("ul .btn-floating"),i.$floatingBtnsReverse=i.$el.find("ul .btn-floating").reverse(),i.offsetY=0,i.offsetX=0,i.$el.addClass("direction-"+i.options.direction),"top"===i.options.direction?i.offsetY=40:"right"===i.options.direction?i.offsetX=-40:"bottom"===i.options.direction?i.offsetY=-40:i.offsetX=40,i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_FloatingActionButton=void 0}},{key:"_setupEventHandlers",value:function(){this._handleFABClickBound=this._handleFABClick.bind(this),this._handleOpenBound=this.open.bind(this),this._handleCloseBound=this.close.bind(this),this.options.hoverEnabled&&!this.options.toolbarEnabled?(this.el.addEventListener("mouseenter",this._handleOpenBound),this.el.addEventListener("mouseleave",this._handleCloseBound)):this.el.addEventListener("click",this._handleFABClickBound)}},{key:"_removeEventHandlers",value:function(){this.options.hoverEnabled&&!this.options.toolbarEnabled?(this.el.removeEventListener("mouseenter",this._handleOpenBound),this.el.removeEventListener("mouseleave",this._handleCloseBound)):this.el.removeEventListener("click",this._handleFABClickBound)}},{key:"_handleFABClick",value:function(){this.isOpen?this.close():this.open()}},{key:"_handleDocumentClick",value:function(t){r(t.target).closest(this.$menu).length||this.close()}},{key:"open",value:function(){this.isOpen||(this.options.toolbarEnabled?this._animateInToolbar():this._animateInFAB(),this.isOpen=!0)}},{key:"close",value:function(){this.isOpen&&(this.options.toolbarEnabled?(window.removeEventListener("scroll",this._handleCloseBound,!0),document.body.removeEventListener("click",this._handleDocumentClickBound,!0),this._animateOutToolbar()):this._animateOutFAB(),this.isOpen=!1)}},{key:"_animateInFAB",value:function(){var e=this;this.$el.addClass("active");var i=0;this.$floatingBtnsReverse.each(function(t){s({targets:t,opacity:1,scale:[.4,1],translateY:[e.offsetY,0],translateX:[e.offsetX,0],duration:275,delay:i,easing:"easeInOutQuad"}),i+=40})}},{key:"_animateOutFAB",value:function(){var e=this;this.$floatingBtnsReverse.each(function(t){s.remove(t),s({targets:t,opacity:0,scale:.4,translateY:e.offsetY,translateX:e.offsetX,duration:175,easing:"easeOutQuad",complete:function(){e.$el.removeClass("active")}})})}},{key:"_animateInToolbar",value:function(){var t,e=this,i=window.innerWidth,n=window.innerHeight,s=this.el.getBoundingClientRect(),o=r('
    '),a=this.$anchor.css("background-color");this.$anchor.append(o),this.offsetX=s.left-i/2+s.width/2,this.offsetY=n-s.bottom,t=i/o[0].clientWidth,this.btnBottom=s.bottom,this.btnLeft=s.left,this.btnWidth=s.width,this.$el.addClass("active"),this.$el.css({"text-align":"center",width:"100%",bottom:0,left:0,transform:"translateX("+this.offsetX+"px)",transition:"none"}),this.$anchor.css({transform:"translateY("+-this.offsetY+"px)",transition:"none"}),o.css({"background-color":a}),setTimeout(function(){e.$el.css({transform:"",transition:"transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s"}),e.$anchor.css({overflow:"visible",transform:"",transition:"transform .2s"}),setTimeout(function(){e.$el.css({overflow:"hidden","background-color":a}),o.css({transform:"scale("+t+")",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"}),e.$menu.children("li").children("a").css({opacity:1}),e._handleDocumentClickBound=e._handleDocumentClick.bind(e),window.addEventListener("scroll",e._handleCloseBound,!0),document.body.addEventListener("click",e._handleDocumentClickBound,!0)},100)},0)}},{key:"_animateOutToolbar",value:function(){var t=this,e=window.innerWidth,i=window.innerHeight,n=this.$el.find(".fab-backdrop"),s=this.$anchor.css("background-color");this.offsetX=this.btnLeft-e/2+this.btnWidth/2,this.offsetY=i-this.btnBottom,this.$el.removeClass("active"),this.$el.css({"background-color":"transparent",transition:"none"}),this.$anchor.css({transition:"none"}),n.css({transform:"scale(0)","background-color":s}),this.$menu.children("li").children("a").css({opacity:""}),setTimeout(function(){n.remove(),t.$el.css({"text-align":"",width:"",bottom:"",left:"",overflow:"","background-color":"",transform:"translate3d("+-t.offsetX+"px,0,0)"}),t.$anchor.css({overflow:"",transform:"translate3d(0,"+t.offsetY+"px,0)"}),setTimeout(function(){t.$el.css({transform:"translate3d(0,0,0)",transition:"transform .2s"}),t.$anchor.css({transform:"translate3d(0,0,0)",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"})},20)},200)}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_FloatingActionButton}},{key:"defaults",get:function(){return e}}]),n}();M.FloatingActionButton=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"floatingActionButton","M_FloatingActionButton")}(cash,M.anime),function(g){"use strict";var e={autoClose:!1,format:"mmm dd, yyyy",parse:null,defaultDate:null,setDefaultDate:!1,disableWeekends:!1,disableDayFn:null,firstDay:0,minDate:null,maxDate:null,yearRange:10,minYear:0,maxYear:9999,minMonth:void 0,maxMonth:void 0,startRange:null,endRange:null,isRTL:!1,showMonthAfterYear:!1,showDaysInNextAndPreviousMonths:!1,container:null,showClearBtn:!1,i18n:{cancel:"Cancel",clear:"Clear",done:"Ok",previousMonth:"‹",nextMonth:"›",months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],weekdaysAbbrev:["S","M","T","W","T","F","S"]},events:[],onSelect:null,onOpen:null,onClose:null,onDraw:null},t=function(t){function B(t,e){_classCallCheck(this,B);var i=_possibleConstructorReturn(this,(B.__proto__||Object.getPrototypeOf(B)).call(this,B,t,e));(i.el.M_Datepicker=i).options=g.extend({},B.defaults,e),e&&e.hasOwnProperty("i18n")&&"object"==typeof e.i18n&&(i.options.i18n=g.extend({},B.defaults.i18n,e.i18n)),i.options.minDate&&i.options.minDate.setHours(0,0,0,0),i.options.maxDate&&i.options.maxDate.setHours(0,0,0,0),i.id=M.guid(),i._setupVariables(),i._insertHTMLIntoDOM(),i._setupModal(),i._setupEventHandlers(),i.options.defaultDate||(i.options.defaultDate=new Date(Date.parse(i.el.value)));var n=i.options.defaultDate;return B._isDate(n)?i.options.setDefaultDate?(i.setDate(n,!0),i.setInputValue()):i.gotoDate(n):i.gotoDate(new Date),i.isOpen=!1,i}return _inherits(B,Component),_createClass(B,[{key:"destroy",value:function(){this._removeEventHandlers(),this.modal.destroy(),g(this.modalEl).remove(),this.destroySelects(),this.el.M_Datepicker=void 0}},{key:"destroySelects",value:function(){var t=this.calendarEl.querySelector(".orig-select-year");t&&M.FormSelect.getInstance(t).destroy();var e=this.calendarEl.querySelector(".orig-select-month");e&&M.FormSelect.getInstance(e).destroy()}},{key:"_insertHTMLIntoDOM",value:function(){this.options.showClearBtn&&(g(this.clearBtn).css({visibility:""}),this.clearBtn.innerHTML=this.options.i18n.clear),this.doneBtn.innerHTML=this.options.i18n.done,this.cancelBtn.innerHTML=this.options.i18n.cancel,this.options.container?this.$modalEl.appendTo(this.options.container):this.$modalEl.insertBefore(this.el)}},{key:"_setupModal",value:function(){var t=this;this.modalEl.id="modal-"+this.id,this.modal=M.Modal.init(this.modalEl,{onCloseEnd:function(){t.isOpen=!1}})}},{key:"toString",value:function(t){var e=this;return t=t||this.options.format,B._isDate(this.date)?t.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g).map(function(t){return e.formats[t]?e.formats[t]():t}).join(""):""}},{key:"setDate",value:function(t,e){if(!t)return this.date=null,this._renderDateDisplay(),this.draw();if("string"==typeof t&&(t=new Date(Date.parse(t))),B._isDate(t)){var i=this.options.minDate,n=this.options.maxDate;B._isDate(i)&&tn.maxDate||n.disableWeekends&&B._isWeekend(y)||n.disableDayFn&&n.disableDayFn(y),isEmpty:C,isStartRange:x,isEndRange:L,isInRange:T,showDaysInNextAndPreviousMonths:n.showDaysInNextAndPreviousMonths};l.push(this.renderDay($)),7==++_&&(r.push(this.renderRow(l,n.isRTL,m)),_=0,m=!(l=[]))}return this.renderTable(n,r,i)}},{key:"renderDay",value:function(t){var e=[],i="false";if(t.isEmpty){if(!t.showDaysInNextAndPreviousMonths)return'';e.push("is-outside-current-month"),e.push("is-selection-disabled")}return t.isDisabled&&e.push("is-disabled"),t.isToday&&e.push("is-today"),t.isSelected&&(e.push("is-selected"),i="true"),t.hasEvent&&e.push("has-event"),t.isInRange&&e.push("is-inrange"),t.isStartRange&&e.push("is-startrange"),t.isEndRange&&e.push("is-endrange"),'"}},{key:"renderRow",value:function(t,e,i){return''+(e?t.reverse():t).join("")+""}},{key:"renderTable",value:function(t,e,i){return'
    '+this.renderHead(t)+this.renderBody(e)+"
    "}},{key:"renderHead",value:function(t){var e=void 0,i=[];for(e=0;e<7;e++)i.push(''+this.renderDayName(t,e,!0)+"");return""+(t.isRTL?i.reverse():i).join("")+""}},{key:"renderBody",value:function(t){return""+t.join("")+""}},{key:"renderTitle",value:function(t,e,i,n,s,o){var a,r,l=void 0,h=void 0,d=void 0,u=this.options,c=i===u.minYear,p=i===u.maxYear,v='
    ',f=!0,m=!0;for(d=[],l=0;l<12;l++)d.push('");for(a='",g.isArray(u.yearRange)?(l=u.yearRange[0],h=u.yearRange[1]+1):(l=i-u.yearRange,h=1+i+u.yearRange),d=[];l=u.minYear&&d.push('");r='";v+='',v+='
    ',u.showMonthAfterYear?v+=r+a:v+=a+r,v+="
    ",c&&(0===n||u.minMonth>=n)&&(f=!1),p&&(11===n||u.maxMonth<=n)&&(m=!1);return(v+='')+"
    "}},{key:"draw",value:function(t){if(this.isOpen||t){var e,i=this.options,n=i.minYear,s=i.maxYear,o=i.minMonth,a=i.maxMonth,r="";this._y<=n&&(this._y=n,!isNaN(o)&&this._m=s&&(this._y=s,!isNaN(a)&&this._m>a&&(this._m=a)),e="datepicker-title-"+Math.random().toString(36).replace(/[^a-z]+/g,"").substr(0,2);for(var l=0;l<1;l++)this._renderDateDisplay(),r+=this.renderTitle(this,l,this.calendars[l].year,this.calendars[l].month,this.calendars[0].year,e)+this.render(this.calendars[l].year,this.calendars[l].month,e);this.destroySelects(),this.calendarEl.innerHTML=r;var h=this.calendarEl.querySelector(".orig-select-year"),d=this.calendarEl.querySelector(".orig-select-month");M.FormSelect.init(h,{classes:"select-year",dropdownOptions:{container:document.body,constrainWidth:!1}}),M.FormSelect.init(d,{classes:"select-month",dropdownOptions:{container:document.body,constrainWidth:!1}}),h.addEventListener("change",this._handleYearChange.bind(this)),d.addEventListener("change",this._handleMonthChange.bind(this)),"function"==typeof this.options.onDraw&&this.options.onDraw(this)}}},{key:"_setupEventHandlers",value:function(){this._handleInputKeydownBound=this._handleInputKeydown.bind(this),this._handleInputClickBound=this._handleInputClick.bind(this),this._handleInputChangeBound=this._handleInputChange.bind(this),this._handleCalendarClickBound=this._handleCalendarClick.bind(this),this._finishSelectionBound=this._finishSelection.bind(this),this._handleMonthChange=this._handleMonthChange.bind(this),this._closeBound=this.close.bind(this),this.el.addEventListener("click",this._handleInputClickBound),this.el.addEventListener("keydown",this._handleInputKeydownBound),this.el.addEventListener("change",this._handleInputChangeBound),this.calendarEl.addEventListener("click",this._handleCalendarClickBound),this.doneBtn.addEventListener("click",this._finishSelectionBound),this.cancelBtn.addEventListener("click",this._closeBound),this.options.showClearBtn&&(this._handleClearClickBound=this._handleClearClick.bind(this),this.clearBtn.addEventListener("click",this._handleClearClickBound))}},{key:"_setupVariables",value:function(){var e=this;this.$modalEl=g(B._template),this.modalEl=this.$modalEl[0],this.calendarEl=this.modalEl.querySelector(".datepicker-calendar"),this.yearTextEl=this.modalEl.querySelector(".year-text"),this.dateTextEl=this.modalEl.querySelector(".date-text"),this.options.showClearBtn&&(this.clearBtn=this.modalEl.querySelector(".datepicker-clear")),this.doneBtn=this.modalEl.querySelector(".datepicker-done"),this.cancelBtn=this.modalEl.querySelector(".datepicker-cancel"),this.formats={d:function(){return e.date.getDate()},dd:function(){var t=e.date.getDate();return(t<10?"0":"")+t},ddd:function(){return e.options.i18n.weekdaysShort[e.date.getDay()]},dddd:function(){return e.options.i18n.weekdays[e.date.getDay()]},m:function(){return e.date.getMonth()+1},mm:function(){var t=e.date.getMonth()+1;return(t<10?"0":"")+t},mmm:function(){return e.options.i18n.monthsShort[e.date.getMonth()]},mmmm:function(){return e.options.i18n.months[e.date.getMonth()]},yy:function(){return(""+e.date.getFullYear()).slice(2)},yyyy:function(){return e.date.getFullYear()}}}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleInputClickBound),this.el.removeEventListener("keydown",this._handleInputKeydownBound),this.el.removeEventListener("change",this._handleInputChangeBound),this.calendarEl.removeEventListener("click",this._handleCalendarClickBound)}},{key:"_handleInputClick",value:function(){this.open()}},{key:"_handleInputKeydown",value:function(t){t.which===M.keys.ENTER&&(t.preventDefault(),this.open())}},{key:"_handleCalendarClick",value:function(t){if(this.isOpen){var e=g(t.target);e.hasClass("is-disabled")||(!e.hasClass("datepicker-day-button")||e.hasClass("is-empty")||e.parent().hasClass("is-disabled")?e.closest(".month-prev").length?this.prevMonth():e.closest(".month-next").length&&this.nextMonth():(this.setDate(new Date(t.target.getAttribute("data-year"),t.target.getAttribute("data-month"),t.target.getAttribute("data-day"))),this.options.autoClose&&this._finishSelection()))}}},{key:"_handleClearClick",value:function(){this.date=null,this.setInputValue(),this.close()}},{key:"_handleMonthChange",value:function(t){this.gotoMonth(t.target.value)}},{key:"_handleYearChange",value:function(t){this.gotoYear(t.target.value)}},{key:"gotoMonth",value:function(t){isNaN(t)||(this.calendars[0].month=parseInt(t,10),this.adjustCalendars())}},{key:"gotoYear",value:function(t){isNaN(t)||(this.calendars[0].year=parseInt(t,10),this.adjustCalendars())}},{key:"_handleInputChange",value:function(t){var e=void 0;t.firedBy!==this&&(e=this.options.parse?this.options.parse(this.el.value,this.options.format):new Date(Date.parse(this.el.value)),B._isDate(e)&&this.setDate(e))}},{key:"renderDayName",value:function(t,e,i){for(e+=t.firstDay;7<=e;)e-=7;return i?t.i18n.weekdaysAbbrev[e]:t.i18n.weekdays[e]}},{key:"_finishSelection",value:function(){this.setInputValue(),this.close()}},{key:"open",value:function(){if(!this.isOpen)return this.isOpen=!0,"function"==typeof this.options.onOpen&&this.options.onOpen.call(this),this.draw(),this.modal.open(),this}},{key:"close",value:function(){if(this.isOpen)return this.isOpen=!1,"function"==typeof this.options.onClose&&this.options.onClose.call(this),this.modal.close(),this}}],[{key:"init",value:function(t,e){return _get(B.__proto__||Object.getPrototypeOf(B),"init",this).call(this,this,t,e)}},{key:"_isDate",value:function(t){return/Date/.test(Object.prototype.toString.call(t))&&!isNaN(t.getTime())}},{key:"_isWeekend",value:function(t){var e=t.getDay();return 0===e||6===e}},{key:"_setToStartOfDay",value:function(t){B._isDate(t)&&t.setHours(0,0,0,0)}},{key:"_getDaysInMonth",value:function(t,e){return[31,B._isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31][e]}},{key:"_isLeapYear",value:function(t){return t%4==0&&t%100!=0||t%400==0}},{key:"_compareDates",value:function(t,e){return t.getTime()===e.getTime()}},{key:"_setToStartOfDay",value:function(t){B._isDate(t)&&t.setHours(0,0,0,0)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Datepicker}},{key:"defaults",get:function(){return e}}]),B}();t._template=['"].join(""),M.Datepicker=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"datepicker","M_Datepicker")}(cash),function(h){"use strict";var e={dialRadius:135,outerRadius:105,innerRadius:70,tickRadius:20,duration:350,container:null,defaultTime:"now",fromNow:0,showClearBtn:!1,i18n:{cancel:"Cancel",clear:"Clear",done:"Ok"},autoClose:!1,twelveHour:!0,vibrate:!0,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null,onSelect:null},t=function(t){function f(t,e){_classCallCheck(this,f);var i=_possibleConstructorReturn(this,(f.__proto__||Object.getPrototypeOf(f)).call(this,f,t,e));return(i.el.M_Timepicker=i).options=h.extend({},f.defaults,e),i.id=M.guid(),i._insertHTMLIntoDOM(),i._setupModal(),i._setupVariables(),i._setupEventHandlers(),i._clockSetup(),i._pickerSetup(),i}return _inherits(f,Component),_createClass(f,[{key:"destroy",value:function(){this._removeEventHandlers(),this.modal.destroy(),h(this.modalEl).remove(),this.el.M_Timepicker=void 0}},{key:"_setupEventHandlers",value:function(){this._handleInputKeydownBound=this._handleInputKeydown.bind(this),this._handleInputClickBound=this._handleInputClick.bind(this),this._handleClockClickStartBound=this._handleClockClickStart.bind(this),this._handleDocumentClickMoveBound=this._handleDocumentClickMove.bind(this),this._handleDocumentClickEndBound=this._handleDocumentClickEnd.bind(this),this.el.addEventListener("click",this._handleInputClickBound),this.el.addEventListener("keydown",this._handleInputKeydownBound),this.plate.addEventListener("mousedown",this._handleClockClickStartBound),this.plate.addEventListener("touchstart",this._handleClockClickStartBound),h(this.spanHours).on("click",this.showView.bind(this,"hours")),h(this.spanMinutes).on("click",this.showView.bind(this,"minutes"))}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleInputClickBound),this.el.removeEventListener("keydown",this._handleInputKeydownBound)}},{key:"_handleInputClick",value:function(){this.open()}},{key:"_handleInputKeydown",value:function(t){t.which===M.keys.ENTER&&(t.preventDefault(),this.open())}},{key:"_handleClockClickStart",value:function(t){t.preventDefault();var e=this.plate.getBoundingClientRect(),i=e.left,n=e.top;this.x0=i+this.options.dialRadius,this.y0=n+this.options.dialRadius,this.moved=!1;var s=f._Pos(t);this.dx=s.x-this.x0,this.dy=s.y-this.y0,this.setHand(this.dx,this.dy,!1),document.addEventListener("mousemove",this._handleDocumentClickMoveBound),document.addEventListener("touchmove",this._handleDocumentClickMoveBound),document.addEventListener("mouseup",this._handleDocumentClickEndBound),document.addEventListener("touchend",this._handleDocumentClickEndBound)}},{key:"_handleDocumentClickMove",value:function(t){t.preventDefault();var e=f._Pos(t),i=e.x-this.x0,n=e.y-this.y0;this.moved=!0,this.setHand(i,n,!1,!0)}},{key:"_handleDocumentClickEnd",value:function(t){var e=this;t.preventDefault(),document.removeEventListener("mouseup",this._handleDocumentClickEndBound),document.removeEventListener("touchend",this._handleDocumentClickEndBound);var i=f._Pos(t),n=i.x-this.x0,s=i.y-this.y0;this.moved&&n===this.dx&&s===this.dy&&this.setHand(n,s),"hours"===this.currentView?this.showView("minutes",this.options.duration/2):this.options.autoClose&&(h(this.minutesView).addClass("timepicker-dial-out"),setTimeout(function(){e.done()},this.options.duration/2)),"function"==typeof this.options.onSelect&&this.options.onSelect.call(this,this.hours,this.minutes),document.removeEventListener("mousemove",this._handleDocumentClickMoveBound),document.removeEventListener("touchmove",this._handleDocumentClickMoveBound)}},{key:"_insertHTMLIntoDOM",value:function(){this.$modalEl=h(f._template),this.modalEl=this.$modalEl[0],this.modalEl.id="modal-"+this.id;var t=document.querySelector(this.options.container);this.options.container&&t?this.$modalEl.appendTo(t):this.$modalEl.insertBefore(this.el)}},{key:"_setupModal",value:function(){var t=this;this.modal=M.Modal.init(this.modalEl,{onOpenStart:this.options.onOpenStart,onOpenEnd:this.options.onOpenEnd,onCloseStart:this.options.onCloseStart,onCloseEnd:function(){"function"==typeof t.options.onCloseEnd&&t.options.onCloseEnd.call(t),t.isOpen=!1}})}},{key:"_setupVariables",value:function(){this.currentView="hours",this.vibrate=navigator.vibrate?"vibrate":navigator.webkitVibrate?"webkitVibrate":null,this._canvas=this.modalEl.querySelector(".timepicker-canvas"),this.plate=this.modalEl.querySelector(".timepicker-plate"),this.hoursView=this.modalEl.querySelector(".timepicker-hours"),this.minutesView=this.modalEl.querySelector(".timepicker-minutes"),this.spanHours=this.modalEl.querySelector(".timepicker-span-hours"),this.spanMinutes=this.modalEl.querySelector(".timepicker-span-minutes"),this.spanAmPm=this.modalEl.querySelector(".timepicker-span-am-pm"),this.footer=this.modalEl.querySelector(".timepicker-footer"),this.amOrPm="PM"}},{key:"_pickerSetup",value:function(){var t=h('").appendTo(this.footer).on("click",this.clear.bind(this));this.options.showClearBtn&&t.css({visibility:""});var e=h('
    ');h('").appendTo(e).on("click",this.close.bind(this)),h('").appendTo(e).on("click",this.done.bind(this)),e.appendTo(this.footer)}},{key:"_clockSetup",value:function(){this.options.twelveHour&&(this.$amBtn=h('
    AM
    '),this.$pmBtn=h('
    PM
    '),this.$amBtn.on("click",this._handleAmPmClick.bind(this)).appendTo(this.spanAmPm),this.$pmBtn.on("click",this._handleAmPmClick.bind(this)).appendTo(this.spanAmPm)),this._buildHoursView(),this._buildMinutesView(),this._buildSVGClock()}},{key:"_buildSVGClock",value:function(){var t=this.options.dialRadius,e=this.options.tickRadius,i=2*t,n=f._createSVGEl("svg");n.setAttribute("class","timepicker-svg"),n.setAttribute("width",i),n.setAttribute("height",i);var s=f._createSVGEl("g");s.setAttribute("transform","translate("+t+","+t+")");var o=f._createSVGEl("circle");o.setAttribute("class","timepicker-canvas-bearing"),o.setAttribute("cx",0),o.setAttribute("cy",0),o.setAttribute("r",4);var a=f._createSVGEl("line");a.setAttribute("x1",0),a.setAttribute("y1",0);var r=f._createSVGEl("circle");r.setAttribute("class","timepicker-canvas-bg"),r.setAttribute("r",e),s.appendChild(a),s.appendChild(r),s.appendChild(o),n.appendChild(s),this._canvas.appendChild(n),this.hand=a,this.bg=r,this.bearing=o,this.g=s}},{key:"_buildHoursView",value:function(){var t=h('
    ');if(this.options.twelveHour)for(var e=1;e<13;e+=1){var i=t.clone(),n=e/6*Math.PI,s=this.options.outerRadius;i.css({left:this.options.dialRadius+Math.sin(n)*s-this.options.tickRadius+"px",top:this.options.dialRadius-Math.cos(n)*s-this.options.tickRadius+"px"}),i.html(0===e?"00":e),this.hoursView.appendChild(i[0])}else for(var o=0;o<24;o+=1){var a=t.clone(),r=o/6*Math.PI,l=0'),e=0;e<60;e+=5){var i=t.clone(),n=e/30*Math.PI;i.css({left:this.options.dialRadius+Math.sin(n)*this.options.outerRadius-this.options.tickRadius+"px",top:this.options.dialRadius-Math.cos(n)*this.options.outerRadius-this.options.tickRadius+"px"}),i.html(f._addLeadingZero(e)),this.minutesView.appendChild(i[0])}}},{key:"_handleAmPmClick",value:function(t){var e=h(t.target);this.amOrPm=e.hasClass("am-btn")?"AM":"PM",this._updateAmPmView()}},{key:"_updateAmPmView",value:function(){this.options.twelveHour&&(this.$amBtn.toggleClass("text-primary","AM"===this.amOrPm),this.$pmBtn.toggleClass("text-primary","PM"===this.amOrPm))}},{key:"_updateTimeFromInput",value:function(){var t=((this.el.value||this.options.defaultTime||"")+"").split(":");if(this.options.twelveHour&&void 0!==t[1]&&(0','",""].join(""),M.Timepicker=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"timepicker","M_Timepicker")}(cash),function(s){"use strict";var e={},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_CharacterCounter=i).options=s.extend({},n.defaults,e),i.isInvalid=!1,i.isValidLength=!1,i._setupCounter(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.CharacterCounter=void 0,this._removeCounter()}},{key:"_setupEventHandlers",value:function(){this._handleUpdateCounterBound=this.updateCounter.bind(this),this.el.addEventListener("focus",this._handleUpdateCounterBound,!0),this.el.addEventListener("input",this._handleUpdateCounterBound,!0)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("focus",this._handleUpdateCounterBound,!0),this.el.removeEventListener("input",this._handleUpdateCounterBound,!0)}},{key:"_setupCounter",value:function(){this.counterEl=document.createElement("span"),s(this.counterEl).addClass("character-counter").css({float:"right","font-size":"12px",height:1}),this.$el.parent().append(this.counterEl)}},{key:"_removeCounter",value:function(){s(this.counterEl).remove()}},{key:"updateCounter",value:function(){var t=+this.$el.attr("data-length"),e=this.el.value.length;this.isValidLength=e<=t;var i=e;t&&(i+="/"+t,this._validateInput()),s(this.counterEl).html(i)}},{key:"_validateInput",value:function(){this.isValidLength&&this.isInvalid?(this.isInvalid=!1,this.$el.removeClass("invalid")):this.isValidLength||this.isInvalid||(this.isInvalid=!0,this.$el.removeClass("valid"),this.$el.addClass("invalid"))}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_CharacterCounter}},{key:"defaults",get:function(){return e}}]),n}();M.CharacterCounter=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"characterCounter","M_CharacterCounter")}(cash),function(b){"use strict";var e={duration:200,dist:-100,shift:0,padding:0,numVisible:5,fullWidth:!1,indicators:!1,noWrap:!1,onCycleTo:null},t=function(t){function i(t,e){_classCallCheck(this,i);var n=_possibleConstructorReturn(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,i,t,e));return(n.el.M_Carousel=n).options=b.extend({},i.defaults,e),n.hasMultipleSlides=1'),n.$el.find(".carousel-item").each(function(t,e){if(n.images.push(t),n.showIndicators){var i=b('
  • ');0===e&&i[0].classList.add("active"),n.$indicators.append(i)}}),n.showIndicators&&n.$el.append(n.$indicators),n.count=n.images.length,n.options.numVisible=Math.min(n.count,n.options.numVisible),n.xform="transform",["webkit","Moz","O","ms"].every(function(t){var e=t+"Transform";return void 0===document.body.style[e]||(n.xform=e,!1)}),n._setupEventHandlers(),n._scroll(n.offset),n}return _inherits(i,Component),_createClass(i,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_Carousel=void 0}},{key:"_setupEventHandlers",value:function(){var i=this;this._handleCarouselTapBound=this._handleCarouselTap.bind(this),this._handleCarouselDragBound=this._handleCarouselDrag.bind(this),this._handleCarouselReleaseBound=this._handleCarouselRelease.bind(this),this._handleCarouselClickBound=this._handleCarouselClick.bind(this),void 0!==window.ontouchstart&&(this.el.addEventListener("touchstart",this._handleCarouselTapBound),this.el.addEventListener("touchmove",this._handleCarouselDragBound),this.el.addEventListener("touchend",this._handleCarouselReleaseBound)),this.el.addEventListener("mousedown",this._handleCarouselTapBound),this.el.addEventListener("mousemove",this._handleCarouselDragBound),this.el.addEventListener("mouseup",this._handleCarouselReleaseBound),this.el.addEventListener("mouseleave",this._handleCarouselReleaseBound),this.el.addEventListener("click",this._handleCarouselClickBound),this.showIndicators&&this.$indicators&&(this._handleIndicatorClickBound=this._handleIndicatorClick.bind(this),this.$indicators.find(".indicator-item").each(function(t,e){t.addEventListener("click",i._handleIndicatorClickBound)}));var t=M.throttle(this._handleResize,200);this._handleThrottledResizeBound=t.bind(this),window.addEventListener("resize",this._handleThrottledResizeBound)}},{key:"_removeEventHandlers",value:function(){var i=this;void 0!==window.ontouchstart&&(this.el.removeEventListener("touchstart",this._handleCarouselTapBound),this.el.removeEventListener("touchmove",this._handleCarouselDragBound),this.el.removeEventListener("touchend",this._handleCarouselReleaseBound)),this.el.removeEventListener("mousedown",this._handleCarouselTapBound),this.el.removeEventListener("mousemove",this._handleCarouselDragBound),this.el.removeEventListener("mouseup",this._handleCarouselReleaseBound),this.el.removeEventListener("mouseleave",this._handleCarouselReleaseBound),this.el.removeEventListener("click",this._handleCarouselClickBound),this.showIndicators&&this.$indicators&&this.$indicators.find(".indicator-item").each(function(t,e){t.removeEventListener("click",i._handleIndicatorClickBound)}),window.removeEventListener("resize",this._handleThrottledResizeBound)}},{key:"_handleCarouselTap",value:function(t){"mousedown"===t.type&&b(t.target).is("img")&&t.preventDefault(),this.pressed=!0,this.dragged=!1,this.verticalDragged=!1,this.reference=this._xpos(t),this.referenceY=this._ypos(t),this.velocity=this.amplitude=0,this.frame=this.offset,this.timestamp=Date.now(),clearInterval(this.ticker),this.ticker=setInterval(this._trackBound,100)}},{key:"_handleCarouselDrag",value:function(t){var e=void 0,i=void 0,n=void 0;if(this.pressed)if(e=this._xpos(t),i=this._ypos(t),n=this.reference-e,Math.abs(this.referenceY-i)<30&&!this.verticalDragged)(2=this.dim*(this.count-1)?this.target=this.dim*(this.count-1):this.target<0&&(this.target=0)),this.amplitude=this.target-this.offset,this.timestamp=Date.now(),requestAnimationFrame(this._autoScrollBound),this.dragged&&(t.preventDefault(),t.stopPropagation()),!1}},{key:"_handleCarouselClick",value:function(t){if(this.dragged)return t.preventDefault(),t.stopPropagation(),!1;if(!this.options.fullWidth){var e=b(t.target).closest(".carousel-item").index();0!==this._wrap(this.center)-e&&(t.preventDefault(),t.stopPropagation()),this._cycleTo(e)}}},{key:"_handleIndicatorClick",value:function(t){t.stopPropagation();var e=b(t.target).closest(".indicator-item");e.length&&this._cycleTo(e.index())}},{key:"_handleResize",value:function(t){this.options.fullWidth?(this.itemWidth=this.$el.find(".carousel-item").first().innerWidth(),this.imageHeight=this.$el.find(".carousel-item.active").height(),this.dim=2*this.itemWidth+this.options.padding,this.offset=2*this.center*this.itemWidth,this.target=this.offset,this._setCarouselHeight(!0)):this._scroll()}},{key:"_setCarouselHeight",value:function(t){var i=this,e=this.$el.find(".carousel-item.active").length?this.$el.find(".carousel-item.active").first():this.$el.find(".carousel-item").first(),n=e.find("img").first();if(n.length)if(n[0].complete){var s=n.height();if(0=this.count?t%this.count:t<0?this._wrap(this.count+t%this.count):t}},{key:"_track",value:function(){var t,e,i,n;e=(t=Date.now())-this.timestamp,this.timestamp=t,i=this.offset-this.frame,this.frame=this.offset,n=1e3*i/(1+e),this.velocity=.8*n+.2*this.velocity}},{key:"_autoScroll",value:function(){var t=void 0,e=void 0;this.amplitude&&(t=Date.now()-this.timestamp,2<(e=this.amplitude*Math.exp(-t/this.options.duration))||e<-2?(this._scroll(this.target-e),requestAnimationFrame(this._autoScrollBound)):this._scroll(this.target))}},{key:"_scroll",value:function(t){var e=this;this.$el.hasClass("scrolling")||this.el.classList.add("scrolling"),null!=this.scrollingTimeout&&window.clearTimeout(this.scrollingTimeout),this.scrollingTimeout=window.setTimeout(function(){e.$el.removeClass("scrolling")},this.options.duration);var i,n,s,o,a=void 0,r=void 0,l=void 0,h=void 0,d=void 0,u=void 0,c=this.center,p=1/this.options.numVisible;if(this.offset="number"==typeof t?t:this.offset,this.center=Math.floor((this.offset+this.dim/2)/this.dim),o=-(s=(n=this.offset-this.center*this.dim)<0?1:-1)*n*2/this.dim,i=this.count>>1,this.options.fullWidth?(l="translateX(0)",u=1):(l="translateX("+(this.el.clientWidth-this.itemWidth)/2+"px) ",l+="translateY("+(this.el.clientHeight-this.itemHeight)/2+"px)",u=1-p*o),this.showIndicators){var v=this.center%this.count,f=this.$indicators.find(".indicator-item.active");f.index()!==v&&(f.removeClass("active"),this.$indicators.find(".indicator-item").eq(v)[0].classList.add("active"))}if(!this.noWrap||0<=this.center&&this.center=this.count||e<0){if(this.noWrap)return;e=this._wrap(e)}this._cycleTo(e)}},{key:"prev",value:function(t){(void 0===t||isNaN(t))&&(t=1);var e=this.center-t;if(e>=this.count||e<0){if(this.noWrap)return;e=this._wrap(e)}this._cycleTo(e)}},{key:"set",value:function(t,e){if((void 0===t||isNaN(t))&&(t=0),t>this.count||t<0){if(this.noWrap)return;t=this._wrap(t)}this._cycleTo(t,e)}}],[{key:"init",value:function(t,e){return _get(i.__proto__||Object.getPrototypeOf(i),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Carousel}},{key:"defaults",get:function(){return e}}]),i}();M.Carousel=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"carousel","M_Carousel")}(cash),function(S){"use strict";var e={onOpen:void 0,onClose:void 0},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_TapTarget=i).options=S.extend({},n.defaults,e),i.isOpen=!1,i.$origin=S("#"+i.$el.attr("data-target")),i._setup(),i._calculatePositioning(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.TapTarget=void 0}},{key:"_setupEventHandlers",value:function(){this._handleDocumentClickBound=this._handleDocumentClick.bind(this),this._handleTargetClickBound=this._handleTargetClick.bind(this),this._handleOriginClickBound=this._handleOriginClick.bind(this),this.el.addEventListener("click",this._handleTargetClickBound),this.originEl.addEventListener("click",this._handleOriginClickBound);var t=M.throttle(this._handleResize,200);this._handleThrottledResizeBound=t.bind(this),window.addEventListener("resize",this._handleThrottledResizeBound)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleTargetClickBound),this.originEl.removeEventListener("click",this._handleOriginClickBound),window.removeEventListener("resize",this._handleThrottledResizeBound)}},{key:"_handleTargetClick",value:function(t){this.open()}},{key:"_handleOriginClick",value:function(t){this.close()}},{key:"_handleResize",value:function(t){this._calculatePositioning()}},{key:"_handleDocumentClick",value:function(t){S(t.target).closest(".tap-target-wrapper").length||(this.close(),t.preventDefault(),t.stopPropagation())}},{key:"_setup",value:function(){this.wrapper=this.$el.parent()[0],this.waveEl=S(this.wrapper).find(".tap-target-wave")[0],this.originEl=S(this.wrapper).find(".tap-target-origin")[0],this.contentEl=this.$el.find(".tap-target-content")[0],S(this.wrapper).hasClass(".tap-target-wrapper")||(this.wrapper=document.createElement("div"),this.wrapper.classList.add("tap-target-wrapper"),this.$el.before(S(this.wrapper)),this.wrapper.append(this.el)),this.contentEl||(this.contentEl=document.createElement("div"),this.contentEl.classList.add("tap-target-content"),this.$el.append(this.contentEl)),this.waveEl||(this.waveEl=document.createElement("div"),this.waveEl.classList.add("tap-target-wave"),this.originEl||(this.originEl=this.$origin.clone(!0,!0),this.originEl.addClass("tap-target-origin"),this.originEl.removeAttr("id"),this.originEl.removeAttr("style"),this.originEl=this.originEl[0],this.waveEl.append(this.originEl)),this.wrapper.append(this.waveEl))}},{key:"_calculatePositioning",value:function(){var t="fixed"===this.$origin.css("position");if(!t)for(var e=this.$origin.parents(),i=0;i'+t.getAttribute("label")+"")[0]),i.each(function(t){var e=n._appendOptionWithIcon(n.$el,t,"optgroup-option");n._addOptionToValueDict(t,e)})}}),this.$el.after(this.dropdownOptions),this.input=document.createElement("input"),d(this.input).addClass("select-dropdown dropdown-trigger"),this.input.setAttribute("type","text"),this.input.setAttribute("readonly","true"),this.input.setAttribute("data-target",this.dropdownOptions.id),this.el.disabled&&d(this.input).prop("disabled","true"),this.$el.before(this.input),this._setValueToInput();var t=d('');if(this.$el.before(t[0]),!this.el.disabled){var e=d.extend({},this.options.dropdownOptions);e.onOpenEnd=function(t){var e=d(n.dropdownOptions).find(".selected").first();if(e.length&&(M.keyDown=!0,n.dropdown.focusedIndex=e.index(),n.dropdown._focusFocusedItem(),M.keyDown=!1,n.dropdown.isScrollable)){var i=e[0].getBoundingClientRect().top-n.dropdownOptions.getBoundingClientRect().top;i-=n.dropdownOptions.clientHeight/2,n.dropdownOptions.scrollTop=i}},this.isMultiple&&(e.closeOnClick=!1),this.dropdown=M.Dropdown.init(this.input,e)}this._setSelectedStates()}},{key:"_addOptionToValueDict",value:function(t,e){var i=Object.keys(this._valueDict).length,n=this.dropdownOptions.id+i,s={};e.id=n,s.el=t,s.optionEl=e,this._valueDict[n]=s}},{key:"_removeDropdown",value:function(){d(this.wrapper).find(".caret").remove(),d(this.input).remove(),d(this.dropdownOptions).remove(),d(this.wrapper).before(this.$el),d(this.wrapper).remove()}},{key:"_appendOptionWithIcon",value:function(t,e,i){var n=e.disabled?"disabled ":"",s="optgroup-option"===i?"optgroup-option ":"",o=this.isMultiple?'":e.innerHTML,a=d("
  • "),r=d("");r.html(o),a.addClass(n+" "+s),a.append(r);var l=e.getAttribute("data-icon");if(l){var h=d('');a.prepend(h)}return d(this.dropdownOptions).append(a[0]),a[0]}},{key:"_toggleEntryFromArray",value:function(t){var e=!this._keysSelected.hasOwnProperty(t),i=d(this._valueDict[t].optionEl);return e?this._keysSelected[t]=!0:delete this._keysSelected[t],i.toggleClass("selected",e),i.find('input[type="checkbox"]').prop("checked",e),i.prop("selected",e),e}},{key:"_setValueToInput",value:function(){var i=[];if(this.$el.find("option").each(function(t){if(d(t).prop("selected")){var e=d(t).text();i.push(e)}}),!i.length){var t=this.$el.find("option:disabled").eq(0);t.length&&""===t[0].value&&i.push(t.text())}this.input.value=i.join(", ")}},{key:"_setSelectedStates",value:function(){for(var t in this._keysSelected={},this._valueDict){var e=this._valueDict[t],i=d(e.el).prop("selected");d(e.optionEl).find('input[type="checkbox"]').prop("checked",i),i?(this._activateOption(d(this.dropdownOptions),d(e.optionEl)),this._keysSelected[t]=!0):d(e.optionEl).removeClass("selected")}}},{key:"_activateOption",value:function(t,e){e&&(this.isMultiple||t.find("li.selected").removeClass("selected"),d(e).addClass("selected"))}},{key:"getSelectedValues",value:function(){var t=[];for(var e in this._keysSelected)t.push(this._valueDict[e].el.value);return t}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_FormSelect}},{key:"defaults",get:function(){return e}}]),n}();M.FormSelect=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"formSelect","M_FormSelect")}(cash),function(s,e){"use strict";var i={},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Range=i).options=s.extend({},n.defaults,e),i._mousedown=!1,i._setupThumb(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this._removeThumb(),this.el.M_Range=void 0}},{key:"_setupEventHandlers",value:function(){this._handleRangeChangeBound=this._handleRangeChange.bind(this),this._handleRangeMousedownTouchstartBound=this._handleRangeMousedownTouchstart.bind(this),this._handleRangeInputMousemoveTouchmoveBound=this._handleRangeInputMousemoveTouchmove.bind(this),this._handleRangeMouseupTouchendBound=this._handleRangeMouseupTouchend.bind(this),this._handleRangeBlurMouseoutTouchleaveBound=this._handleRangeBlurMouseoutTouchleave.bind(this),this.el.addEventListener("change",this._handleRangeChangeBound),this.el.addEventListener("mousedown",this._handleRangeMousedownTouchstartBound),this.el.addEventListener("touchstart",this._handleRangeMousedownTouchstartBound),this.el.addEventListener("input",this._handleRangeInputMousemoveTouchmoveBound),this.el.addEventListener("mousemove",this._handleRangeInputMousemoveTouchmoveBound),this.el.addEventListener("touchmove",this._handleRangeInputMousemoveTouchmoveBound),this.el.addEventListener("mouseup",this._handleRangeMouseupTouchendBound),this.el.addEventListener("touchend",this._handleRangeMouseupTouchendBound),this.el.addEventListener("blur",this._handleRangeBlurMouseoutTouchleaveBound),this.el.addEventListener("mouseout",this._handleRangeBlurMouseoutTouchleaveBound),this.el.addEventListener("touchleave",this._handleRangeBlurMouseoutTouchleaveBound)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("change",this._handleRangeChangeBound),this.el.removeEventListener("mousedown",this._handleRangeMousedownTouchstartBound),this.el.removeEventListener("touchstart",this._handleRangeMousedownTouchstartBound),this.el.removeEventListener("input",this._handleRangeInputMousemoveTouchmoveBound),this.el.removeEventListener("mousemove",this._handleRangeInputMousemoveTouchmoveBound),this.el.removeEventListener("touchmove",this._handleRangeInputMousemoveTouchmoveBound),this.el.removeEventListener("mouseup",this._handleRangeMouseupTouchendBound),this.el.removeEventListener("touchend",this._handleRangeMouseupTouchendBound),this.el.removeEventListener("blur",this._handleRangeBlurMouseoutTouchleaveBound),this.el.removeEventListener("mouseout",this._handleRangeBlurMouseoutTouchleaveBound),this.el.removeEventListener("touchleave",this._handleRangeBlurMouseoutTouchleaveBound)}},{key:"_handleRangeChange",value:function(){s(this.value).html(this.$el.val()),s(this.thumb).hasClass("active")||this._showRangeBubble();var t=this._calcRangeOffset();s(this.thumb).addClass("active").css("left",t+"px")}},{key:"_handleRangeMousedownTouchstart",value:function(t){if(s(this.value).html(this.$el.val()),this._mousedown=!0,this.$el.addClass("active"),s(this.thumb).hasClass("active")||this._showRangeBubble(),"input"!==t.type){var e=this._calcRangeOffset();s(this.thumb).addClass("active").css("left",e+"px")}}},{key:"_handleRangeInputMousemoveTouchmove",value:function(){if(this._mousedown){s(this.thumb).hasClass("active")||this._showRangeBubble();var t=this._calcRangeOffset();s(this.thumb).addClass("active").css("left",t+"px"),s(this.value).html(this.$el.val())}}},{key:"_handleRangeMouseupTouchend",value:function(){this._mousedown=!1,this.$el.removeClass("active")}},{key:"_handleRangeBlurMouseoutTouchleave",value:function(){if(!this._mousedown){var t=7+parseInt(this.$el.css("padding-left"))+"px";s(this.thumb).hasClass("active")&&(e.remove(this.thumb),e({targets:this.thumb,height:0,width:0,top:10,easing:"easeOutQuad",marginLeft:t,duration:100})),s(this.thumb).removeClass("active")}}},{key:"_setupThumb",value:function(){this.thumb=document.createElement("span"),this.value=document.createElement("span"),s(this.thumb).addClass("thumb"),s(this.value).addClass("value"),s(this.thumb).append(this.value),this.$el.after(this.thumb)}},{key:"_removeThumb",value:function(){s(this.thumb).remove()}},{key:"_showRangeBubble",value:function(){var t=-7+parseInt(s(this.thumb).parent().css("padding-left"))+"px";e.remove(this.thumb),e({targets:this.thumb,height:30,width:30,top:-30,marginLeft:t,duration:300,easing:"easeOutQuint"})}},{key:"_calcRangeOffset",value:function(){var t=this.$el.width()-15,e=parseFloat(this.$el.attr("max"))||100,i=parseFloat(this.$el.attr("min"))||0;return(parseFloat(this.$el.val())-i)/(e-i)*t}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Range}},{key:"defaults",get:function(){return i}}]),n}();M.Range=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"range","M_Range"),t.init(s("input[type=range]"))}(cash,M.anime); \ No newline at end of file diff --git a/web/js/websocket-manager.js b/web/js/websocket-manager.js deleted file mode 100644 index bf48e27..0000000 --- a/web/js/websocket-manager.js +++ /dev/null @@ -1,114 +0,0 @@ -var socket = null; -var connected = false; -var isAttemptingToConnect = false; -var isRefreshing = false; -var reconnectingTimer = null; - - -var STATE_CONNECTING = "connecting"; -var STATE_CONNECTED = "connected"; -var STATE_DISCONNECTED = "disconnected"; - - -class WebSocketManager{ - constructor(agent, main) { - this.agent = agent; - this.agent.setWebSocketManager(this); - this.main = main; - this.connect(); - } - - async connect(){ - var that = this; - return new Promise(function(resolve, reject) { - isAttemptingToConnect = true; - socket = new WebSocket("ws://" + location.hostname + ":8080/ws"); - socket.onopen = function () { - that.changeConnectedState(true); - console.log('client side socket open'); - socket.send(JSON.stringify({"msg": "connect"})); - resolve(); - }; - socket.onerror = function (e) { - M.toast({html: "Cannot connect to the websocket server", classes:"red"}); - reject(); - } - socket.onmessage = function (message) { - var msg = JSON.parse(message.data); - - if (msg['msg'] === 'connected') { - connected = true; - } - else if(msg['msg'] === 'agent_action'){ - that.agent.action_triggered(msg['data']); - } - else if(msg['msg'] === 'bt_devices_updated'){ - that.main.updateListOfBluetoothDevices(); - } - else if(msg['msg'] === 'hid_devices_updated'){ - that.main.updateHIDDevices(); - } - else { - } - }; - socket.onclose = function (e) { - console.log('client side socket onclose'); - socket = null; - that.changeConnectedState(false); - if(!isAttemptingToConnect) M.toast({html: "Server disconnected.", classes:"red"}); - isAttemptingToConnect = false; - if(reconnectingTimer == null) { - reconnectingTimer = setInterval(function () { - if (!connected && !isAttemptingToConnect) { - that.connect(); - } - if (connected) { - clearInterval(reconnectingTimer); - reconnectingTimer = null; - } - }, 1000); - } - }; - }); - } - - sendMessage(msg) { - if(socket!=null && connected){ - socket.send(JSON.stringify(msg)); - } - } - - changeConnectedState(isConnected) { - if(isConnected){ - connected = true; - } - else{ - connected = false; - if(!isAttemptingToConnect){ - M.toast({html: "Server closed connection", classes:"red"}); - } - } - //codeRunner.handleConnectionStateChanged(isConnected); - } - - async refreshConnection(){ - isRefreshing = true; - if(socket !=null && connected){ - var msg = JSON.stringify({"msg": "shutdown"}); - try { - socket.send(msg); - socket.close(); - } - catch(e){ - - } - socket==null; - connected=false; - } - await new Promise(resolve => setTimeout(resolve, 1000)); - isRefreshing = false; - return this.connect(); - } - -} -