diff --git a/.github/ISSUE_TEMPLATE/bazel_worker.md b/.github/ISSUE_TEMPLATE/bazel_worker.md new file mode 100644 index 000000000..b542e3e6c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bazel_worker.md @@ -0,0 +1,5 @@ +--- +name: "package:bazel_worker" +about: "Create a bug or file a feature request against package:bazel_worker." +labels: "package:bazel_worker" +--- \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/browser_launcher.md b/.github/ISSUE_TEMPLATE/browser_launcher.md new file mode 100644 index 000000000..7dbd844ee --- /dev/null +++ b/.github/ISSUE_TEMPLATE/browser_launcher.md @@ -0,0 +1,5 @@ +--- +name: "package:browser_launcher" +about: "Create a bug or file a feature request against package:browser_launcher." +labels: "package:browser_launcher" +--- \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/clock.md b/.github/ISSUE_TEMPLATE/clock.md new file mode 100644 index 000000000..1ed8f73b6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/clock.md @@ -0,0 +1,5 @@ +--- +name: "package:clock" +about: "Create a bug or file a feature request against package:clock." +labels: "package:clock" +--- \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/csslib.md b/.github/ISSUE_TEMPLATE/csslib.md new file mode 100644 index 000000000..a35581ab6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/csslib.md @@ -0,0 +1,5 @@ +--- +name: "package:csslib" +about: "Create a bug or file a feature request against package:csslib." +labels: "package:csslib" +--- \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/json_rpc_2.md b/.github/ISSUE_TEMPLATE/json_rpc_2.md new file mode 100644 index 000000000..29310dd09 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/json_rpc_2.md @@ -0,0 +1,5 @@ +--- +name: "package:json_rpc_2" +about: "Create a bug or file a feature request against package:json_rpc_2." +labels: "package:json_rpc_2" +--- \ No newline at end of file diff --git a/.github/labeler.yml b/.github/labeler.yml index 11d45829d..8d48ebdfa 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -4,6 +4,10 @@ - changed-files: - any-glob-to-any-file: '.github/**' +'package:bazel_worker': + - changed-files: + - any-glob-to-any-file: 'pkgs/bazel_worker/**' + 'package:benchmark_harness': - changed-files: - any-glob-to-any-file: 'pkgs/benchmark_harness/**' @@ -12,14 +16,26 @@ - changed-files: - any-glob-to-any-file: 'pkgs/boolean_selector/**' +'package:browser_launcher': + - changed-files: + - any-glob-to-any-file: 'pkgs/browser_launcher/**' + 'package:cli_config': - changed-files: - any-glob-to-any-file: 'pkgs/cli_config/**' +'package:clock': + - changed-files: + - any-glob-to-any-file: 'pkgs/clock/**' + 'package:coverage': - changed-files: - any-glob-to-any-file: 'pkgs/coverage/**' +'package:csslib': + - changed-files: + - any-glob-to-any-file: 'pkgs/csslib/**' + 'package:extension_discovery': - changed-files: - any-glob-to-any-file: 'pkgs/extension_discovery/**' @@ -36,6 +52,10 @@ - changed-files: - any-glob-to-any-file: 'pkgs/graphs/**' +'package:json_rpc_2': + - changed-files: + - any-glob-to-any-file: 'pkgs/json_rpc_2/**' + 'package:mime': - changed-files: - any-glob-to-any-file: 'pkgs/mime/**' diff --git a/.github/workflows/bazel_worker.yaml b/.github/workflows/bazel_worker.yaml new file mode 100644 index 000000000..b9daabebf --- /dev/null +++ b/.github/workflows/bazel_worker.yaml @@ -0,0 +1,41 @@ +name: package:bazel_worker + +on: + # Run on PRs and pushes to the default branch. + push: + branches: [ main ] + paths: + - '.github/workflows/bazel_worker.yml' + - 'pkgs/bazel_worker/**' + pull_request: + branches: [ main ] + paths: + - '.github/workflows/bazel_worker.yml' + - 'pkgs/bazel_worker/**' + schedule: + - cron: "0 0 * * 0" + +env: + PUB_ENVIRONMENT: bot.github + + +defaults: + run: + working-directory: pkgs/bazel_worker/ + +jobs: + # Run the test script against the latest dev build. + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + sdk: [3.1.0, dev] + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 + - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 + with: + sdk: ${{ matrix.sdk }} + - run: "dart format --output=none --set-exit-if-changed ." + - name: Test + run: ./tool/travis.sh diff --git a/.github/workflows/browser_launcher.yaml b/.github/workflows/browser_launcher.yaml new file mode 100644 index 000000000..be9ede1e2 --- /dev/null +++ b/.github/workflows/browser_launcher.yaml @@ -0,0 +1,46 @@ +name: package:browser_launcher + +on: + # Run on PRs and pushes to the default branch. + push: + branches: [ main ] + paths: + - '.github/workflows/browser_launcher.yml' + - 'pkgs/browser_launcher/**' + pull_request: + branches: [ main ] + paths: + - '.github/workflows/browser_launcher.yml' + - 'pkgs/browser_launcher/**' + schedule: + - cron: "0 0 * * 0" + +env: + PUB_ENVIRONMENT: bot.github + DISPLAY: ':99' + +defaults: + run: + working-directory: pkgs/browser_launcher/ + +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + sdk: [3.4, dev] + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 + - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 + with: + sdk: ${{ matrix.sdk }} + + - run: dart pub get + + - run: dart format --output=none --set-exit-if-changed . + - run: dart analyze --fatal-infos + + - name: Run Xvfb + run: Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & + + - run: dart test diff --git a/.github/workflows/clock.yaml b/.github/workflows/clock.yaml new file mode 100644 index 000000000..1ad4ade04 --- /dev/null +++ b/.github/workflows/clock.yaml @@ -0,0 +1,75 @@ +name: package:clock + +on: + # Run on PRs and pushes to the default branch. + push: + branches: [ main ] + paths: + - '.github/workflows/clock.yml' + - 'pkgs/clock/**' + pull_request: + branches: [ main ] + paths: + - '.github/workflows/clock.yml' + - 'pkgs/clock/**' + schedule: + - cron: "0 0 * * 0" + +env: + PUB_ENVIRONMENT: bot.github + + +defaults: + run: + working-directory: pkgs/clock/ + +jobs: + # Check code formatting and static analysis on a single OS (linux) + # against Dart dev. + analyze: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + sdk: [dev] + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 + - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 + with: + sdk: ${{ matrix.sdk }} + - id: install + name: Install dependencies + run: dart pub get + - name: Check formatting + run: dart format --output=none --set-exit-if-changed . + if: always() && steps.install.outcome == 'success' + - name: Analyze code + run: dart analyze --fatal-infos + if: always() && steps.install.outcome == 'success' + + # Run tests on a matrix consisting of two dimensions: + # 1. OS: ubuntu-latest, (macos-latest, windows-latest) + # 2. release channel: dev + test: + needs: analyze + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + # Add macos-latest and/or windows-latest if relevant for this package. + os: [ubuntu-latest] + sdk: [3.4, dev] + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 + - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 + with: + sdk: ${{ matrix.sdk }} + - id: install + name: Install dependencies + run: dart pub get + - name: Run VM tests + run: dart test --platform vm + if: always() && steps.install.outcome == 'success' + - name: Run Chrome tests + run: dart test --platform chrome + if: always() && steps.install.outcome == 'success' diff --git a/.github/workflows/csslib.yaml b/.github/workflows/csslib.yaml new file mode 100644 index 000000000..054f5718f --- /dev/null +++ b/.github/workflows/csslib.yaml @@ -0,0 +1,72 @@ +name: package:csslib + +on: + # Run on PRs and pushes to the default branch. + push: + branches: [ main ] + paths: + - '.github/workflows/csslib.yml' + - 'pkgs/csslib/**' + pull_request: + branches: [ main ] + paths: + - '.github/workflows/csslib.yml' + - 'pkgs/csslib/**' + schedule: + - cron: "0 0 * * 0" + +env: + PUB_ENVIRONMENT: bot.github + + +defaults: + run: + working-directory: pkgs/csslib/ + +jobs: + # Check code formatting and static analysis on a single OS (linux) + # against Dart dev. + analyze: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + sdk: [dev] + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 + - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 + with: + sdk: ${{ matrix.sdk }} + - id: install + name: Install dependencies + run: dart pub get + - name: Check formatting + run: dart format --output=none --set-exit-if-changed . + if: always() && steps.install.outcome == 'success' + - name: Analyze code + run: dart analyze --fatal-infos + if: always() && steps.install.outcome == 'success' + + # Run tests on a matrix consisting of two dimensions: + # 1. OS: ubuntu-latest, (macos-latest, windows-latest) + # 2. release channel: dev + test: + needs: analyze + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + # Add macos-latest and/or windows-latest if relevant for this package. + os: [ubuntu-latest, windows-latest] + sdk: [3.1, dev] + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 + - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 + with: + sdk: ${{ matrix.sdk }} + - id: install + name: Install dependencies + run: dart pub get + - name: Run VM tests + run: dart test --platform vm + if: always() && steps.install.outcome == 'success' diff --git a/.github/workflows/json_rpc_2.yaml b/.github/workflows/json_rpc_2.yaml new file mode 100644 index 000000000..cd1ba682f --- /dev/null +++ b/.github/workflows/json_rpc_2.yaml @@ -0,0 +1,75 @@ +name: package:json_rpc_2 + +on: + # Run on PRs and pushes to the default branch. + push: + branches: [ main ] + paths: + - '.github/workflows/json_rpc_2.yml' + - 'pkgs/json_rpc_2/**' + pull_request: + branches: [ main ] + paths: + - '.github/workflows/json_rpc_2.yml' + - 'pkgs/json_rpc_2/**' + schedule: + - cron: "0 0 * * 0" + +env: + PUB_ENVIRONMENT: bot.github + + +defaults: + run: + working-directory: pkgs/json_rpc_2/ + +jobs: + # Check code formatting and static analysis on a single OS (linux) + # against Dart dev. + analyze: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + sdk: [dev] + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 + - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 + with: + sdk: ${{ matrix.sdk }} + - id: install + name: Install dependencies + run: dart pub get + - name: Check formatting + run: dart format --output=none --set-exit-if-changed . + if: always() && steps.install.outcome == 'success' + - name: Analyze code + run: dart analyze --fatal-infos + if: always() && steps.install.outcome == 'success' + + # Run tests on a matrix consisting of two dimensions: + # 1. OS: ubuntu-latest, (macos-latest, windows-latest) + # 2. release channel: dev + test: + needs: analyze + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + # Add macos-latest and/or windows-latest if relevant for this package. + os: [ubuntu-latest] + sdk: [3.4, dev] + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 + - uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672 + with: + sdk: ${{ matrix.sdk }} + - id: install + name: Install dependencies + run: dart pub get + - name: Run VM tests + run: dart test --platform vm + if: always() && steps.install.outcome == 'success' + - name: Run browser tests + run: dart test --platform chrome --compiler dart2wasm,dart2js + if: always() && steps.install.outcome == 'success' diff --git a/README.md b/README.md index eb41aecf2..c4f28502f 100644 --- a/README.md +++ b/README.md @@ -14,14 +14,19 @@ don't naturally belong to other topic monorepos (like | Package | Description | Version | | --- | --- | --- | +| [bazel_worker](pkgs/bazel_worker/) | Protocol and utilities to implement or invoke persistent bazel workers. | [![pub package](https://img.shields.io/pub/v/bazel_worker.svg)](https://pub.dev/packages/bazel_worker) | | [benchmark_harness](pkgs/benchmark_harness/) | The official Dart project benchmark harness. | [![pub package](https://img.shields.io/pub/v/benchmark_harness.svg)](https://pub.dev/packages/benchmark_harness) | | [boolean_selector](pkgs/boolean_selector/) | A flexible syntax for boolean expressions, based on a simplified version of Dart's expression syntax. | [![pub package](https://img.shields.io/pub/v/boolean_selector.svg)](https://pub.dev/packages/boolean_selector) | +| [browser_launcher](pkgs/browser_launcher/) | Provides a standardized way to launch web browsers for testing and tools. | [![pub package](https://img.shields.io/pub/v/browser_launcher.svg)](https://pub.dev/packages/browser_launcher) | | [cli_config](pkgs/cli_config/) | A library to take config values from configuration files, CLI arguments, and environment variables. | [![pub package](https://img.shields.io/pub/v/cli_config.svg)](https://pub.dev/packages/cli_config) | +| [clock](pkgs/clock/) | A fakeable wrapper for dart:core clock APIs. | [![pub package](https://img.shields.io/pub/v/clock.svg)](https://pub.dev/packages/clock) | | [coverage](pkgs/coverage/) | Coverage data manipulation and formatting. | [![pub package](https://img.shields.io/pub/v/coverage.svg)](https://pub.dev/packages/coverage) | +| [csslib](pkgs/csslib/) | A library for parsing and analyzing CSS (Cascading Style Sheets). | [![pub package](https://img.shields.io/pub/v/csslib.svg)](https://pub.dev/packages/csslib) | | [extension_discovery](pkgs/extension_discovery/) | A convention and utilities for package extension discovery. | [![pub package](https://img.shields.io/pub/v/extension_discovery.svg)](https://pub.dev/packages/extension_discovery) | | [file](pkgs/file/) | A pluggable, mockable file system abstraction for Dart. | [![pub package](https://img.shields.io/pub/v/file.svg)](https://pub.dev/packages/file) | | [file_testing](pkgs/file_testing/) | Testing utilities for package:file (published but unlisted). | [![pub package](https://img.shields.io/pub/v/file_testing.svg)](https://pub.dev/packages/file_testing) | | [graphs](pkgs/graphs/) | Graph algorithms that operate on graphs in any representation | [![pub package](https://img.shields.io/pub/v/graphs.svg)](https://pub.dev/packages/graphs) | +| [json_rpc_2](pkgs/json_rpc_2/) | Utilities to write a client or server using the JSON-RPC 2.0 spec. | [![pub package](https://img.shields.io/pub/v/json_rpc_2.svg)](https://pub.dev/packages/json_rpc_2) | | [mime](pkgs/mime/) | Utilities for handling media (MIME) types. | [![pub package](https://img.shields.io/pub/v/mime.svg)](https://pub.dev/packages/mime) | | [oauth2](pkgs/oauth2/) | A client library for authenticatingand making requests via OAuth2. | [![pub package](https://img.shields.io/pub/v/oauth2.svg)](https://pub.dev/packages/oauth2) | | [source_map_stack_trace](pkgs/source_map_stack_trace/) | A package for applying source maps to stack traces. | [![pub package](https://img.shields.io/pub/v/source_map_stack_trace.svg)](https://pub.dev/packages/source_map_stack_trace) | diff --git a/pkgs/bazel_worker/.gitignore b/pkgs/bazel_worker/.gitignore new file mode 100644 index 000000000..00035d7c2 --- /dev/null +++ b/pkgs/bazel_worker/.gitignore @@ -0,0 +1,10 @@ +.buildlog +.DS_Store +.idea +.pub/ +.settings/ +build/ +packages +.packages +pubspec.lock +.dart_tool diff --git a/pkgs/bazel_worker/AUTHORS b/pkgs/bazel_worker/AUTHORS new file mode 100644 index 000000000..e8063a8cd --- /dev/null +++ b/pkgs/bazel_worker/AUTHORS @@ -0,0 +1,6 @@ +# Below is a list of people and organizations that have contributed +# to the project. Names should be added to the list like so: +# +# Name/Organization + +Google Inc. diff --git a/pkgs/bazel_worker/CHANGELOG.md b/pkgs/bazel_worker/CHANGELOG.md new file mode 100644 index 000000000..13be67912 --- /dev/null +++ b/pkgs/bazel_worker/CHANGELOG.md @@ -0,0 +1,189 @@ +## 1.1.2 + +* Require Dart SDK `^3.1.0`. +* Move to `dart-lang/tools` monorepo. + +## 1.1.1 + +* Fix a bug where if spawnWorker threw an error, work requests would hang + forever instead of failing. + +## 1.1.0 + +* Add constructors with named parameters to + the generated worker protocol messages. +* Include comments on the generated worker protocol API. + +## 1.0.3 + +* Require `package:protobuf` >= 3.0.0. +* Require Dart SDK >= 2.19.0 + +## 1.0.2 + +* Expand pub documentation to improve pub score. + +## 1.0.1 + +* Require Dart SDK >=2.14.0 +* Drop dependency on `package:pedantic`. + +## 1.0.0 + +* Improve `AsyncMessageGrouper` performance. +* Add `benchmark/benchmark.dart` measuring `AsyncMessageGrouper` performance. + +## 1.0.0-nullsafety.0 + +* Migrate to null safety. +* Use `WorkResponse` with `exitCode` set to `EXIT_CODE_BROKEN_PIPE` instead of + `null` responses. + +## 0.1.25+1-dev + +* Regenerate proto code and fix some new analysis hints. + +## 0.1.25 + +* Add `isBroadcast` implementation to `TestStdin` classes. + +## 0.1.24 + +* Check for closed port when trying to read a response in + `IsolateDriverConnection` and return `null` if there is nothing to be read. + +## 0.1.23+1 + +* Don't rely on `exitCode` to know when a worker terminates, instead wait for + the input stream to close. + * The SDK may also start throwing instead of returning a `null` here, so this + pre-emptively guards against that. + +## 0.1.23 + +* Support protobuf `1.x`. +* Added a tool for updating generated proto files and updated them + using the latest version of the protoc_plugin package. + * This required a lower bound bump of the `protobuf` package to `0.14.4`. + +## 0.1.22 + +* Require protobuf 0.14.0. + +## 0.1.21+1 + +* Don't rely on `exitCode` to know when a worker terminates, instead wait for + the input stream to close. Backport of fix in `0.1.23+1` in a version that + does not require a newer protobuf. + +## 0.1.21 + +* Make `TestStdinAsync` behave like a `Stream` + +## 0.1.20 + +* Close worker `outputStream` on `cancel`. + +## 0.1.19 + +* Work around https://github.com/dart-lang/sdk/issues/35874. + +## 0.1.18 + +* Add a `trackWork` optional named argument to `BazelDriver.doWork`. This allows + the caller to know when a work request is actually sent to a worker. + +## 0.1.17 + +* Allow protobuf 0.13.0. + +## 0.1.16 + +* Update the worker_protocol.pb.dart file with the latest proto generator. +* Require protobuf 0.11.0. + +## 0.1.15 + +* Update the worker_protocol.pb.dart file with the latest proto generator. +* Require protobuf 0.10.4. + +## 0.1.14 + +* Allow workers to support running in isolates. To support running in isolates, + workers must modify their `main` method to accept a `SendPort` then use it + when creating the `AsyncWorkerConnection`. See `async_worker` in `e2e_test`. + +## 0.1.13 + +* Support protobuf 0.10.0. + +## 0.1.12 + +* Set max SDK version to `<3.0.0`. + +## 0.1.11 + +* Added support for protobuf 0.9.0. + +## 0.1.10 + +* Update the SDK dependency to 2.0.0-dev.17.0. +* Update to protobuf version 0.8.0 +* Remove usages of deprecated upper-case constants from the SDK. + +## 0.1.9 + +* Update the worker_protocol.pb.dart file with the latest proto generator. + +## 0.1.8 + +* Add `Future cancel()` method to `DriverConnection`, which in the case of a + `StdDriverConnection` closes the input stream. + * The `terminateWorkers` method on `BazelWorkerDriver` now calls `cancel` on + all worker connections to ensure the vm can exit correctly. + +## 0.1.7 + +* Update the `BazelWorkerDriver` class to handle worker crashes, and retry work + requests. The number of retries is configurable with the new `int maxRetries` + optional arg to the `BazelWorkerDriver` constructor. + +## 0.1.6 + +* Update the worker_protocol.pb.dart file with the latest proto generator. +* Add support for package:async 2.x and package:protobuf 6.x. + +## 0.1.5 + +* Change TestStdinAsync.controller to StreamController> (instead of + using dynamic as the type argument). + +## 0.1.4 + +* Added `BazelWorkerDriver` class, which can be used to implement the bazel side + of the protocol. This allows you to speak to any process which knows the bazel + protocol from your own process. +* Changed `WorkerConnection#readRequest` to return a `FutureOr` + instead of dynamic. + +## 0.1.3 + +* Add automatic intercepting of print calls and append them to + `response.output`. This makes more libraries work out of the box, as printing + would previously cause an error due to communication over stdin/stdout. + * Note that using stdin/stdout directly will still cause an error, but that is + less common. + +## 0.1.2 + +* Add better handling for the case where stdin gives an error instead of an EOF. + +## 0.1.1 + +* Export `AsyncMessageGrouper` and `SyncMessageGrouper` as part of the testing + library. These can assist when writing e2e tests and communicating with a + worker process. + +## 0.1.0 + +* Initial version. diff --git a/pkgs/bazel_worker/LICENSE b/pkgs/bazel_worker/LICENSE new file mode 100644 index 000000000..237243134 --- /dev/null +++ b/pkgs/bazel_worker/LICENSE @@ -0,0 +1,27 @@ +Copyright 2016, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/pkgs/bazel_worker/README.md b/pkgs/bazel_worker/README.md new file mode 100644 index 000000000..22a86dc79 --- /dev/null +++ b/pkgs/bazel_worker/README.md @@ -0,0 +1,66 @@ +Tools for creating a persistent worker loop for [bazel](https://bazel.build/). + +## Usage + +There are two abstract classes provided by this package, `AsyncWorkerLoop` and +`SyncWorkerLoop`. These each have a `performRequest` method which you must +implement. + +Lets look at a simple example of a `SyncWorkerLoop` implementation: + +```dart +import 'dart:io'; +import 'package:bazel_worker/bazel_worker.dart'; + +void main() { + // Blocks until it gets an EOF from stdin. + SyncSimpleWorker().run(); +} + +class SyncSimpleWorker extends SyncWorkerLoop { + /// Must synchronously return a [WorkResponse], since this is a + /// [SyncWorkerLoop]. + WorkResponse performRequest(WorkRequest request) { + File('hello.txt').writeAsStringSync('hello world!'); + return WorkResponse()..exitCode = EXIT_CODE_OK; + } +} +``` + +And now the same thing, implemented as an `AsyncWorkerLoop`: + +```dart +import 'dart:io'; +import 'package:bazel_worker/bazel_worker.dart'; + +void main() { + // Doesn't block, runs tasks async as they are received on stdin. + AsyncSimpleWorker().run(); +} + +class AsyncSimpleWorker extends AsyncWorkerLoop { + /// Must return a [Future], since this is an + /// [AsyncWorkerLoop]. + Future performRequest(WorkRequest request) async { + await File('hello.txt').writeAsString('hello world!'); + return WorkResponse()..exitCode = EXIT_CODE_OK; + } +} +``` + +As you can see, these are nearly identical, it mostly comes down to the +constraints on your package and personal preference which one you choose to +implement. + +## Testing + +A `package:bazel_worker/testing.dart` file is also provided, which can greatly +assist with writing unit tests for your worker. See the +`test/worker_loop_test.dart` test included in this package for an example of how +the helpers can be used. + +## Features and bugs + +Please file feature requests and bugs at the [issue tracker][tracker]. + +[tracker]: https://github.com/dart-lang/tools/issues diff --git a/pkgs/bazel_worker/analysis_options.yaml b/pkgs/bazel_worker/analysis_options.yaml new file mode 100644 index 000000000..9419b0985 --- /dev/null +++ b/pkgs/bazel_worker/analysis_options.yaml @@ -0,0 +1,13 @@ +# https://dart.dev/guides/language/analysis-options +include: package:dart_flutter_team_lints/analysis_options.yaml + +analyzer: + language: + strict-casts: true + errors: + # For the generated file + lines_longer_than_80_chars: ignore + +linter: + rules: + - package_api_docs diff --git a/pkgs/bazel_worker/benchmark/benchmark.dart b/pkgs/bazel_worker/benchmark/benchmark.dart new file mode 100644 index 000000000..035e2b848 --- /dev/null +++ b/pkgs/bazel_worker/benchmark/benchmark.dart @@ -0,0 +1,57 @@ +import 'dart:math'; +import 'dart:typed_data'; + +import 'package:bazel_worker/bazel_worker.dart'; +import 'package:bazel_worker/src/async_message_grouper.dart'; + +/// Benchmark for `AsyncMessageGrouper`. +Future main() async { + // Create a large work request with 10,000 inputs. + var workRequest = WorkRequest(); + for (var i = 0; i != 10000; ++i) { + var path = 'blaze-bin/some/path/to/a/file/that/is/an/input/$i'; + workRequest + ..arguments.add('--input=$path') + ..inputs.add(Input( + path: '', + digest: List.filled(70, 0x11), + )); + } + + // Serialize it. + var requestBytes = workRequest.writeToBuffer(); + var length = requestBytes.length; + print('Request has $length requestBytes.'); + + // Add the length in front base 128 encoded as in the worker protocol. + requestBytes = + Uint8List.fromList(requestBytes.toList()..insertAll(0, _varInt(length))); + + // Split into 10000 byte chunks. + var lists = []; + for (var i = 0; i < requestBytes.length; i += 10000) { + lists.add(Uint8List.sublistView( + requestBytes, i, min(i + 10000, requestBytes.length))); + } + + // Time `AsyncMessageGrouper` and deserialization. + for (var i = 0; i != 30; ++i) { + var stopwatch = Stopwatch()..start(); + var asyncGrouper = AsyncMessageGrouper(Stream.fromIterable(lists)); + var message = (await asyncGrouper.next)!; + print('Grouped in ${stopwatch.elapsedMilliseconds}ms'); + stopwatch.reset(); + WorkRequest.fromBuffer(message); + print('Deserialized in ${stopwatch.elapsedMilliseconds}ms'); + } +} + +Uint8List _varInt(int value) { + var result = []; + while (value >= 0x80) { + result.add(0x80 | (value & 0x7f)); + value >>= 7; + } + result.add(value); + return Uint8List.fromList(result); +} diff --git a/pkgs/bazel_worker/e2e_test/analysis_options.yaml b/pkgs/bazel_worker/e2e_test/analysis_options.yaml new file mode 120000 index 000000000..c9e0d9fbb --- /dev/null +++ b/pkgs/bazel_worker/e2e_test/analysis_options.yaml @@ -0,0 +1 @@ +../analysis_options.yaml \ No newline at end of file diff --git a/pkgs/bazel_worker/e2e_test/bin/async_worker.dart b/pkgs/bazel_worker/e2e_test/bin/async_worker.dart new file mode 100644 index 000000000..80d624f77 --- /dev/null +++ b/pkgs/bazel_worker/e2e_test/bin/async_worker.dart @@ -0,0 +1,14 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:isolate'; + +import 'package:e2e_test/async_worker.dart'; + +/// This worker can run in one of two ways: normally, using stdin/stdout, or +/// in an isolate, communicating over a [SendPort]. +Future main(List args, [SendPort? sendPort]) async { + await ExampleAsyncWorker(sendPort).run(); +} diff --git a/pkgs/bazel_worker/e2e_test/bin/async_worker_in_isolate.dart b/pkgs/bazel_worker/e2e_test/bin/async_worker_in_isolate.dart new file mode 100644 index 000000000..a94875d57 --- /dev/null +++ b/pkgs/bazel_worker/e2e_test/bin/async_worker_in_isolate.dart @@ -0,0 +1,24 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:isolate'; + +import 'package:e2e_test/forwards_to_isolate_async_worker.dart'; + +/// Wraps the worker provided by `async_worker.dart`, launching it in an +/// isolate. Requests are forwarded to the isolate and responses are returned +/// directly from the isolate. +/// +/// Anyone actually using the facility to wrap a worker in an isolate will want +/// to use this code to do additional work, for example post processing one of +/// the output files. +Future main(List args, [SendPort? message]) async { + var receivePort = ReceivePort(); + await Isolate.spawnUri( + Uri.file('async_worker.dart'), [], receivePort.sendPort); + + var worker = await ForwardsToIsolateAsyncWorker.create(receivePort); + await worker.run(); +} diff --git a/pkgs/bazel_worker/e2e_test/bin/sync_worker.dart b/pkgs/bazel_worker/e2e_test/bin/sync_worker.dart new file mode 100644 index 000000000..9bdcc774a --- /dev/null +++ b/pkgs/bazel_worker/e2e_test/bin/sync_worker.dart @@ -0,0 +1,9 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:e2e_test/sync_worker.dart'; + +void main() { + ExampleSyncWorker().run(); +} diff --git a/pkgs/bazel_worker/e2e_test/lib/async_worker.dart b/pkgs/bazel_worker/e2e_test/lib/async_worker.dart new file mode 100644 index 000000000..d48d87c8d --- /dev/null +++ b/pkgs/bazel_worker/e2e_test/lib/async_worker.dart @@ -0,0 +1,24 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:isolate'; + +import 'package:bazel_worker/bazel_worker.dart'; + +/// Example worker that just returns in its response all the arguments passed +/// separated by newlines. +class ExampleAsyncWorker extends AsyncWorkerLoop { + /// Set [sendPort] to run in an isolate. + ExampleAsyncWorker([SendPort? sendPort]) + : super(connection: AsyncWorkerConnection(sendPort: sendPort)); + + @override + Future performRequest(WorkRequest request) async { + return WorkResponse( + exitCode: 0, + output: request.arguments.join('\n'), + ); + } +} diff --git a/pkgs/bazel_worker/e2e_test/lib/forwards_to_isolate_async_worker.dart b/pkgs/bazel_worker/e2e_test/lib/forwards_to_isolate_async_worker.dart new file mode 100644 index 000000000..bb937b220 --- /dev/null +++ b/pkgs/bazel_worker/e2e_test/lib/forwards_to_isolate_async_worker.dart @@ -0,0 +1,28 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:isolate'; + +import 'package:bazel_worker/bazel_worker.dart'; +import 'package:bazel_worker/driver.dart'; + +/// Example worker that just forwards requests to an isolate. +class ForwardsToIsolateAsyncWorker extends AsyncWorkerLoop { + final IsolateDriverConnection _isolateDriverConnection; + + static Future create( + ReceivePort receivePort) async { + return ForwardsToIsolateAsyncWorker( + await IsolateDriverConnection.create(receivePort)); + } + + ForwardsToIsolateAsyncWorker(this._isolateDriverConnection); + + @override + Future performRequest(WorkRequest request) { + _isolateDriverConnection.writeRequest(request); + return _isolateDriverConnection.readResponse(); + } +} diff --git a/pkgs/bazel_worker/e2e_test/lib/sync_worker.dart b/pkgs/bazel_worker/e2e_test/lib/sync_worker.dart new file mode 100644 index 000000000..687ecdd3c --- /dev/null +++ b/pkgs/bazel_worker/e2e_test/lib/sync_worker.dart @@ -0,0 +1,14 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:bazel_worker/bazel_worker.dart'; + +/// Example worker that just returns in its response all the arguments passed +/// separated by newlines. +class ExampleSyncWorker extends SyncWorkerLoop { + @override + WorkResponse performRequest(WorkRequest request) { + return WorkResponse(exitCode: 0, output: request.arguments.join('\n')); + } +} diff --git a/pkgs/bazel_worker/e2e_test/pubspec.yaml b/pkgs/bazel_worker/e2e_test/pubspec.yaml new file mode 100644 index 000000000..d24a8e136 --- /dev/null +++ b/pkgs/bazel_worker/e2e_test/pubspec.yaml @@ -0,0 +1,15 @@ +name: e2e_test +publish_to: none + +environment: + sdk: '>=2.19.0 <4.0.0' + +dependencies: + bazel_worker: + path: ../ + +dev_dependencies: + cli_util: ^0.4.0 + dart_flutter_team_lints: ^1.0.0 + path: ^1.8.0 + test: ^1.16.0 diff --git a/pkgs/bazel_worker/e2e_test/test/e2e_test.dart b/pkgs/bazel_worker/e2e_test/test/e2e_test.dart new file mode 100644 index 000000000..fa4c1a679 --- /dev/null +++ b/pkgs/bazel_worker/e2e_test/test/e2e_test.dart @@ -0,0 +1,64 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:io'; + +import 'package:bazel_worker/driver.dart'; +import 'package:cli_util/cli_util.dart'; +import 'package:path/path.dart' as p; +import 'package:test/test.dart'; + +void main() { + var sdkPath = getSdkPath(); + var dart = p.join(sdkPath, 'bin', 'dart'); + runE2eTestForWorker('sync worker', + () => Process.start(dart, [p.join('bin', 'sync_worker.dart')])); + runE2eTestForWorker('async worker', + () => Process.start(dart, [p.join('bin', 'async_worker.dart')])); + runE2eTestForWorker( + 'async worker in isolate', + () => + Process.start(dart, [p.join('bin', 'async_worker_in_isolate.dart')])); +} + +void runE2eTestForWorker(String groupName, SpawnWorker spawnWorker) { + late BazelWorkerDriver driver; + group(groupName, () { + setUp(() { + driver = BazelWorkerDriver(spawnWorker); + }); + + tearDown(() async { + await driver.terminateWorkers(); + }); + + test('single work request', () async { + await _doRequests(driver, count: 1); + }); + + test('lots of requests', () async { + await _doRequests(driver, count: 1000); + }); + }); +} + +/// Runs [count] work requests through [driver], and asserts that they all +/// completed with the correct response. +Future _doRequests(BazelWorkerDriver driver, {int? count}) async { + count ??= 100; + var requests = List.generate(count, (requestNum) { + var request = WorkRequest( + arguments: List.generate(requestNum, (argNum) => '$argNum'), + ); + return request; + }); + var responses = await Future.wait(requests.map(driver.doWork)); + for (var i = 0; i < responses.length; i++) { + var request = requests[i]; + var response = responses[i]; + expect(response.exitCode, EXIT_CODE_OK); + expect(response.output, request.arguments.join('\n')); + } +} diff --git a/pkgs/bazel_worker/example/README.md b/pkgs/bazel_worker/example/README.md new file mode 100644 index 000000000..dad3b79b4 --- /dev/null +++ b/pkgs/bazel_worker/example/README.md @@ -0,0 +1,3 @@ +Run `dart example/client.dart`. The client will start up a worker process, send +a single work request, read a file written by the worker, then terminate the +worker. diff --git a/pkgs/bazel_worker/example/client.dart b/pkgs/bazel_worker/example/client.dart new file mode 100644 index 000000000..7147fcbf0 --- /dev/null +++ b/pkgs/bazel_worker/example/client.dart @@ -0,0 +1,22 @@ +import 'dart:io'; + +import 'package:bazel_worker/driver.dart'; + +void main() async { + var scratchSpace = await Directory.systemTemp.createTemp(); + var driver = BazelWorkerDriver( + () => Process.start(Platform.resolvedExecutable, + [Platform.script.resolve('worker.dart').toFilePath()], + workingDirectory: scratchSpace.path), + maxWorkers: 4); + var response = await driver.doWork(WorkRequest(arguments: ['foo'])); + if (response.exitCode != EXIT_CODE_OK) { + print('Worker request failed'); + } else { + print('Worker request succeeded, file content:'); + var outputFile = File.fromUri(scratchSpace.uri.resolve('hello.txt')); + print(await outputFile.readAsString()); + } + await scratchSpace.delete(recursive: true); + await driver.terminateWorkers(); +} diff --git a/pkgs/bazel_worker/example/worker.dart b/pkgs/bazel_worker/example/worker.dart new file mode 100644 index 000000000..ba3f48cc7 --- /dev/null +++ b/pkgs/bazel_worker/example/worker.dart @@ -0,0 +1,15 @@ +import 'dart:io'; +import 'package:bazel_worker/bazel_worker.dart'; + +void main() { + // Blocks until it gets an EOF from stdin. + SyncSimpleWorker().run(); +} + +class SyncSimpleWorker extends SyncWorkerLoop { + @override + WorkResponse performRequest(WorkRequest request) { + File('hello.txt').writeAsStringSync(request.arguments.first); + return WorkResponse(exitCode: EXIT_CODE_OK); + } +} diff --git a/pkgs/bazel_worker/lib/bazel_worker.dart b/pkgs/bazel_worker/lib/bazel_worker.dart new file mode 100644 index 000000000..d77b53f88 --- /dev/null +++ b/pkgs/bazel_worker/lib/bazel_worker.dart @@ -0,0 +1,11 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +export 'src/constants.dart'; +export 'src/message_grouper.dart'; +export 'src/worker/async_worker_loop.dart'; +export 'src/worker/sync_worker_loop.dart'; +export 'src/worker/worker_connection.dart'; +export 'src/worker/worker_loop.dart'; +export 'src/worker_protocol.pb.dart'; diff --git a/pkgs/bazel_worker/lib/driver.dart b/pkgs/bazel_worker/lib/driver.dart new file mode 100644 index 000000000..362841cc7 --- /dev/null +++ b/pkgs/bazel_worker/lib/driver.dart @@ -0,0 +1,9 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +export 'src/constants.dart'; +export 'src/driver/driver.dart'; +export 'src/driver/driver_connection.dart'; +export 'src/message_grouper.dart'; +export 'src/worker_protocol.pb.dart'; diff --git a/pkgs/bazel_worker/lib/src/async_message_grouper.dart b/pkgs/bazel_worker/lib/src/async_message_grouper.dart new file mode 100644 index 000000000..e1f0deaef --- /dev/null +++ b/pkgs/bazel_worker/lib/src/async_message_grouper.dart @@ -0,0 +1,131 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:math'; +import 'dart:typed_data'; + +import 'package:async/async.dart'; +import 'package:protobuf/protobuf.dart'; + +import 'message_grouper.dart'; + +/// Collects stream data into messages by interpreting it as +/// base-128 encoded lengths interleaved with raw data. +class AsyncMessageGrouper implements MessageGrouper { + /// The input stream. + final StreamQueue> _inputQueue; + + /// The current input buffer. + List _inputBuffer = []; + + /// Position in the current input buffer. + int _inputBufferPos = 0; + + /// Completes after [cancel] is called or `inputStream` is closed. + Future get done => _done.future; + final _done = Completer(); + + /// Whether currently reading length or raw data. + bool _readingLength = true; + + /// If reading length, buffer to build up length one byte at a time until + /// done. + List _lengthBuffer = []; + + /// If reading raw data, buffer for the data. + Uint8List _message = Uint8List(0); + + /// If reading raw data, position in the buffer. + int _messagePos = 0; + + AsyncMessageGrouper(Stream> inputStream) + : _inputQueue = StreamQueue(inputStream); + + /// Returns the next full message that is received, or null if none are left. + @override + Future?> get next async { + try { + // Loop while there is data in the input buffer or the input stream. + while ( + _inputBufferPos != _inputBuffer.length || await _inputQueue.hasNext) { + // If the input buffer is empty fill it from the input stream. + if (_inputBufferPos == _inputBuffer.length) { + _inputBuffer = await _inputQueue.next; + _inputBufferPos = 0; + } + + // Loop over the input buffer. Might return without reading the full + // buffer if a message completes. Then, this is tracked in + // `_inputBufferPos`. + while (_inputBufferPos != _inputBuffer.length) { + if (_readingLength) { + // Reading message length byte by byte. + var byte = _inputBuffer[_inputBufferPos++]; + _lengthBuffer.add(byte); + // Check for the last byte in the length, and then read it. + if ((byte & 0x80) == 0) { + var reader = CodedBufferReader(_lengthBuffer); + var length = reader.readInt32(); + _lengthBuffer = []; + + // Special case: don't keep reading an empty message, return it + // and `_readingLength` stays true. + if (length == 0) { + return Uint8List(0); + } + + // Switch to reading raw data. Allocate message buffer and reset + // `_messagePos`. + _readingLength = false; + _message = Uint8List(length); + _messagePos = 0; + } + } else { + // Copy as much as possible from the input buffer. Limit is the + // smaller of the remaining length to fill in the message and the + // remaining length in the buffer. + var lengthToCopy = min(_message.length - _messagePos, + _inputBuffer.length - _inputBufferPos); + _message.setRange( + _messagePos, + _messagePos + lengthToCopy, + _inputBuffer.sublist( + _inputBufferPos, _inputBufferPos + lengthToCopy)); + _messagePos += lengthToCopy; + _inputBufferPos += lengthToCopy; + + // If there is a complete message to return, return it and switch + // back to reading length. + if (_messagePos == _message.length) { + var result = _message; + // Don't keep a reference to the message. + _message = Uint8List(0); + _readingLength = true; + return result; + } + } + } + } + + // If there is nothing left in the queue then cancel the subscription. + unawaited(cancel()); + } catch (e) { + // It appears we sometimes get an exception instead of -1 as expected when + // stdin closes, this handles that in the same way (returning a null + // message) + return null; + } + return null; + } + + /// Stop listening to the stream for further updates. + Future cancel() { + if (!_done.isCompleted) { + _done.complete(null); + return _inputQueue.cancel()!; + } + return done; + } +} diff --git a/pkgs/bazel_worker/lib/src/constants.dart b/pkgs/bazel_worker/lib/src/constants.dart new file mode 100644 index 000000000..a6d044a3b --- /dev/null +++ b/pkgs/bazel_worker/lib/src/constants.dart @@ -0,0 +1,9 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// ignore_for_file: constant_identifier_names + +const int EXIT_CODE_OK = 0; +const int EXIT_CODE_ERROR = 15; +const int EXIT_CODE_BROKEN_PIPE = 32; diff --git a/pkgs/bazel_worker/lib/src/driver/driver.dart b/pkgs/bazel_worker/lib/src/driver/driver.dart new file mode 100644 index 000000000..4a780208a --- /dev/null +++ b/pkgs/bazel_worker/lib/src/driver/driver.dart @@ -0,0 +1,239 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:collection'; +import 'dart:io'; + +import '../constants.dart'; +import '../worker_protocol.pb.dart'; +import 'driver_connection.dart'; + +typedef SpawnWorker = Future Function(); + +/// A driver for talking to a bazel worker. +/// +/// This allows you to use any binary that supports the bazel worker protocol in +/// the same way that bazel would, but from another dart process instead. +class BazelWorkerDriver { + /// Idle worker processes. + final _idleWorkers = []; + + /// The maximum number of idle workers at any given time. + final int _maxIdleWorkers; + + /// The maximum number of times to retry a [_WorkAttempt] if there is an error. + final int _maxRetries; + + /// The maximum number of concurrent workers to run at any given time. + final int _maxWorkers; + + /// The number of currently active workers. + int get _numWorkers => _readyWorkers.length + _spawningWorkers.length; + + /// All workers that are fully spawned and ready to handle work. + final _readyWorkers = []; + + /// All workers that are in the process of being spawned. + final _spawningWorkers = >[]; + + /// Work requests that haven't been started yet. + final _workQueue = Queue<_WorkAttempt>(); + + /// Factory method that spawns a worker process. + final SpawnWorker _spawnWorker; + + BazelWorkerDriver(this._spawnWorker, + {int? maxIdleWorkers, int? maxWorkers, int? maxRetries}) + : _maxIdleWorkers = maxIdleWorkers ?? 4, + _maxWorkers = maxWorkers ?? 4, + _maxRetries = maxRetries ?? 4; + + /// Waits for an available worker, and then sends [WorkRequest] to it. + /// + /// If [trackWork] is provided it will be invoked with a [Future] once the + /// [request] has been actually sent to the worker. This allows the caller + /// to determine when actual work is being done versus just waiting for an + /// available worker. + Future doWork(WorkRequest request, + {void Function(Future)? trackWork}) { + var attempt = _WorkAttempt(request, trackWork: trackWork); + _workQueue.add(attempt); + _runWorkQueue(); + return attempt.response; + } + + /// Calls `kill` on all worker processes. + Future terminateWorkers() async { + for (var worker in _readyWorkers.toList()) { + _killWorker(worker); + } + await Future.wait(_spawningWorkers.map((worker) async { + _killWorker(await worker); + })); + } + + /// Runs as many items in [_workQueue] as possible given the number of + /// available workers. + /// + /// Will spawn additional workers until [_maxWorkers] has been reached. + /// + /// This method synchronously drains the [_workQueue] and [_idleWorkers], but + /// some tasks may not actually start right away if they need to wait for a + /// worker to spin up. + void _runWorkQueue() { + // Bail out conditions, we will continue to call ourselves indefinitely + // until one of these is met. + if (_workQueue.isEmpty) return; + if (_numWorkers == _maxWorkers && _idleWorkers.isEmpty) return; + if (_numWorkers > _maxWorkers) { + throw StateError('Internal error, created to many workers. Please ' + 'file a bug at https://github.com/dart-lang/bazel_worker/issues/new'); + } + + // At this point we definitely want to run a task, we just need to decide + // whether or not we need to start up a new worker. + var attempt = _workQueue.removeFirst(); + if (_idleWorkers.isNotEmpty) { + _runWorker(_idleWorkers.removeLast(), attempt); + } else { + // No need to block here, we want to continue to synchronously drain the + // work queue. + var futureWorker = _spawnWorker(); + _spawningWorkers.add(futureWorker); + futureWorker.then((worker) { + _spawningWorkers.remove(futureWorker); + _readyWorkers.add(worker); + var connection = StdDriverConnection.forWorker(worker); + _workerConnections[worker] = connection; + _runWorker(worker, attempt); + + // When the worker exits we should retry running the work queue in case + // there is more work to be done. This is primarily just a defensive + // thing but is cheap to do. + // + // We don't use `exitCode` because it is null for detached processes ( + // which is common for workers). + connection.done.then((_) { + _idleWorkers.remove(worker); + _readyWorkers.remove(worker); + _runWorkQueue(); + }); + }).onError((e, s) { + _spawningWorkers.remove(futureWorker); + if (attempt.responseCompleter.isCompleted) return; + attempt.responseCompleter.completeError(e, s); + }); + } + // Recursively calls itself until one of the bail out conditions are met. + _runWorkQueue(); + } + + /// Sends [attempt] to [worker]. + /// + /// Once the worker responds then it will be added back to the pool of idle + /// workers. + void _runWorker(Process worker, _WorkAttempt attempt) { + var rescheduled = false; + + runZonedGuarded(() async { + var connection = _workerConnections[worker]!; + + connection.writeRequest(attempt.request); + var responseFuture = connection.readResponse(); + if (attempt.trackWork != null) { + attempt.trackWork!(responseFuture); + } + var response = await responseFuture; + + // It is possible for us to complete with an error response due to an + // unhandled async error before we get here. + if (!attempt.responseCompleter.isCompleted) { + if (response.exitCode == EXIT_CODE_BROKEN_PIPE) { + rescheduled = _tryReschedule(attempt); + if (rescheduled) return; + stderr.writeln('Failed to run request ${attempt.request}'); + response = WorkResponse( + exitCode: EXIT_CODE_ERROR, + output: + 'Invalid response from worker, this probably means it wrote ' + 'invalid output or died.', + ); + } + attempt.responseCompleter.complete(response); + _cleanUp(worker); + } + }, (e, s) { + // Note that we don't need to do additional cleanup here on failures. If + // the worker dies that is already handled in a generic fashion, we just + // need to make sure we complete with a valid response. + if (!attempt.responseCompleter.isCompleted) { + rescheduled = _tryReschedule(attempt); + if (rescheduled) return; + var response = WorkResponse( + exitCode: EXIT_CODE_ERROR, + output: 'Error running worker:\n$e\n$s', + ); + attempt.responseCompleter.complete(response); + _cleanUp(worker); + } + }); + } + + /// Performs post-work cleanup for [worker]. + void _cleanUp(Process worker) { + // If the worker crashes, it won't be in `_readyWorkers` any more, and + // we don't want to add it to _idleWorkers. + if (_readyWorkers.contains(worker)) { + _idleWorkers.add(worker); + } + + // Do additional work if available. + _runWorkQueue(); + + // If the worker wasn't immediately used we might have to many idle + // workers now, kill one if necessary. + if (_idleWorkers.length > _maxIdleWorkers) { + // Note that whenever we spawn a worker we listen for its exit code + // and clean it up so we don't need to do that here. + var worker = _idleWorkers.removeLast(); + _killWorker(worker); + } + } + + /// Attempts to reschedule a failed [attempt]. + /// + /// Returns whether or not the job was successfully rescheduled. + bool _tryReschedule(_WorkAttempt attempt) { + if (attempt.timesRetried >= _maxRetries) return false; + stderr.writeln('Rescheduling failed request...'); + attempt.timesRetried++; + _workQueue.add(attempt); + _runWorkQueue(); + return true; + } + + void _killWorker(Process worker) { + _workerConnections[worker]!.cancel(); + _readyWorkers.remove(worker); + _idleWorkers.remove(worker); + worker.kill(); + } +} + +/// Encapsulates an attempt to fulfill a [WorkRequest], a completer for the +/// [WorkResponse], and the number of times it has been retried. +class _WorkAttempt { + final WorkRequest request; + final responseCompleter = Completer(); + final void Function(Future)? trackWork; + + Future get response => responseCompleter.future; + + int timesRetried = 0; + + _WorkAttempt(this.request, {this.trackWork}); +} + +final _workerConnections = Expando('connection'); diff --git a/pkgs/bazel_worker/lib/src/driver/driver_connection.dart b/pkgs/bazel_worker/lib/src/driver/driver_connection.dart new file mode 100644 index 000000000..b419debbc --- /dev/null +++ b/pkgs/bazel_worker/lib/src/driver/driver_connection.dart @@ -0,0 +1,129 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; +import 'dart:isolate'; + +import '../async_message_grouper.dart'; +import '../constants.dart'; +import '../message_grouper.dart'; +import '../utils.dart'; +import '../worker_protocol.pb.dart'; + +/// A connection from a `BazelWorkerDriver` to a worker. +/// +/// Unlike `WorkerConnection` there is no synchronous version of this class. +/// This is because drivers talk to multiple workers, so they should never block +/// when waiting for the response of any individual worker. +abstract class DriverConnection { + Future readResponse(); + + void writeRequest(WorkRequest request); + + Future cancel(); +} + +/// Default implementation of [DriverConnection] that works with [Stdin] +/// and [Stdout]. +class StdDriverConnection implements DriverConnection { + final AsyncMessageGrouper _messageGrouper; + final StreamSink> _outputStream; + + Future get done => _messageGrouper.done; + + StdDriverConnection( + {Stream>? inputStream, StreamSink>? outputStream}) + : _messageGrouper = AsyncMessageGrouper(inputStream ?? stdin), + _outputStream = outputStream ?? stdout; + + factory StdDriverConnection.forWorker(Process worker) => StdDriverConnection( + inputStream: worker.stdout, outputStream: worker.stdin); + + /// Note: This will attempts to recover from invalid proto messages by parsing + /// them as strings. This is a common error case for workers (they print a + /// message to stdout on accident). This isn't perfect however as it only + /// happens if the parsing throws, you can still hang indefinitely if the + /// [MessageGrouper] doesn't find what it thinks is the end of a proto + /// message. + @override + Future readResponse() async { + var buffer = await _messageGrouper.next; + if (buffer == null) { + return WorkResponse( + exitCode: EXIT_CODE_BROKEN_PIPE, + output: 'Connection to worker closed', + ); + } + + WorkResponse response; + try { + response = WorkResponse.fromBuffer(buffer); + } catch (_) { + try { + // Try parsing the message as a string and set that as the output. + var output = utf8.decode(buffer); + var response = WorkResponse( + exitCode: EXIT_CODE_ERROR, + output: 'Worker sent an invalid response:\n$output', + ); + return response; + } catch (_) { + // Fall back to original exception and rethrow if we fail to parse as + // a string. + } + rethrow; + } + return response; + } + + @override + void writeRequest(WorkRequest request) { + _outputStream.add(protoToDelimitedBuffer(request)); + } + + @override + Future cancel() async { + await _outputStream.close(); + await _messageGrouper.cancel(); + } +} + +/// [DriverConnection] that works with an isolate via a [SendPort]. +class IsolateDriverConnection implements DriverConnection { + final StreamIterator _receivePortIterator; + final SendPort _sendPort; + + IsolateDriverConnection._(this._receivePortIterator, this._sendPort); + + /// Creates a driver connection for a worker in an isolate. Provide the + /// [receivePort] attached to the [SendPort] that the isolate was created + /// with. + static Future create(ReceivePort receivePort) async { + var receivePortIterator = StreamIterator(receivePort); + await receivePortIterator.moveNext(); + var sendPort = receivePortIterator.current as SendPort; + return IsolateDriverConnection._(receivePortIterator, sendPort); + } + + @override + Future readResponse() async { + if (!await _receivePortIterator.moveNext()) { + return WorkResponse( + exitCode: EXIT_CODE_BROKEN_PIPE, + output: 'Connection to worker closed.', + ); + } + return WorkResponse.fromBuffer(_receivePortIterator.current as List); + } + + @override + void writeRequest(WorkRequest request) { + _sendPort.send(request.writeToBuffer()); + } + + @override + Future cancel() async {} +} diff --git a/pkgs/bazel_worker/lib/src/message_grouper.dart b/pkgs/bazel_worker/lib/src/message_grouper.dart new file mode 100644 index 000000000..31aa2040f --- /dev/null +++ b/pkgs/bazel_worker/lib/src/message_grouper.dart @@ -0,0 +1,16 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'async_message_grouper.dart'; +import 'sync_message_grouper.dart'; + +/// Interface for a [MessageGrouper], which groups bytes in delimited proto +/// format into the bytes for each message. +/// +/// This interface should not generally be implemented directly, instead use +/// the [SyncMessageGrouper] or [AsyncMessageGrouper] implementations. +abstract class MessageGrouper { + /// Returns either a [List] or a [Future>]. + dynamic get next; +} diff --git a/pkgs/bazel_worker/lib/src/message_grouper_state.dart b/pkgs/bazel_worker/lib/src/message_grouper_state.dart new file mode 100644 index 000000000..26568354b --- /dev/null +++ b/pkgs/bazel_worker/lib/src/message_grouper_state.dart @@ -0,0 +1,123 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:typed_data'; + +import 'package:protobuf/protobuf.dart'; + +import 'message_grouper.dart'; + +/// State held by the [MessageGrouper] while waiting for additional data to +/// arrive. +class MessageGrouperState { + /// Reads the initial length. + var _lengthReader = _LengthReader(); + + /// Reads messages from a stream of bytes. + _MessageReader? _messageReader; + + /// Handle one byte at a time. + /// + /// Returns a [List] of message bytes if [byte] was the last byte in a + /// message, otherwise returns `null`. + List? handleInput(int byte) { + if (!_lengthReader.done) { + _lengthReader.readByte(byte); + if (_lengthReader.done) { + _messageReader = _MessageReader(_lengthReader.length); + } + } else { + assert(_messageReader != null); + _messageReader!.readByte(byte); + } + + if (_lengthReader.done && _messageReader!.done) { + var message = _messageReader!.message; + reset(); + return message; + } + + return null; + } + + /// Reset the state so that we are ready to receive the next message. + void reset() { + _lengthReader = _LengthReader(); + _messageReader = null; + } +} + +/// Reads a length one byte at a time. +/// +/// The base-128 encoding is in little-endian order, with the high bit set on +/// all bytes but the last. This was chosen since it's the same as the +/// base-128 encoding used by protobufs, so it allows a modest amount of code +/// reuse at the other end of the protocol. +class _LengthReader { + /// Whether or not we are done reading the length. + bool get done => _done; + bool _done = false; + + /// If [_done] is `true`, the decoded value of the length bytes received so + /// far (if any), otherwise unitialized. + late int _length; + + /// The length read in. You are only allowed to read this if [_done] is + /// `true`. + int get length { + assert(_done); + return _length; + } + + final List _buffer = []; + + /// Read a single byte into [_length]. + void readByte(int byte) { + assert(!_done); + _buffer.add(byte); + + // Check for the last byte in the length, and then read it. + if ((byte & 0x80) == 0) { + _done = true; + var reader = CodedBufferReader(_buffer); + _length = reader.readInt32(); + } + } +} + +/// Reads some number of bytes from a stream, one byte at a time. +class _MessageReader { + /// Whether or not we are done reading bytes from the stream. + bool get done => _done; + bool _done; + + /// The total length of the message to be read. + final int _length; + + /// A [Uint8List] which holds the message data. You are only allowed to read + /// this if [_done] is `true`. + Uint8List get message { + assert(_done); + return _message; + } + + final Uint8List _message; + + /// If [_done] is `false`, the number of message bytes that have been received + /// so far. Otherwise zero. + int _numMessageBytesReceived = 0; + + _MessageReader(int length) + : _message = Uint8List(length), + _length = length, + _done = length == 0; + + /// Reads [byte] into [_message]. + void readByte(int byte) { + assert(!done); + + _message[_numMessageBytesReceived++] = byte; + if (_numMessageBytesReceived == _length) _done = true; + } +} diff --git a/pkgs/bazel_worker/lib/src/sync_message_grouper.dart b/pkgs/bazel_worker/lib/src/sync_message_grouper.dart new file mode 100644 index 000000000..b8f7b369f --- /dev/null +++ b/pkgs/bazel_worker/lib/src/sync_message_grouper.dart @@ -0,0 +1,37 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:io'; + +import 'message_grouper.dart'; +import 'message_grouper_state.dart'; + +/// Groups bytes in delimited proto format into the bytes for each message. +class SyncMessageGrouper implements MessageGrouper { + final _state = MessageGrouperState(); + final Stdin _stdin; + + SyncMessageGrouper(this._stdin); + + /// Blocks until the next full message is received, and then returns it. + /// + /// Returns null at end of file. + @override + List? get next { + try { + List? message; + while (message == null) { + var nextByte = _stdin.readByteSync(); + if (nextByte == -1) return null; + message = _state.handleInput(nextByte); + } + return message; + } catch (e) { + // It appears we sometimes get an exception instead of -1 as expected when + // stdin closes, this handles that in the same way (returning a null + // message) + return null; + } + } +} diff --git a/pkgs/bazel_worker/lib/src/utils.dart b/pkgs/bazel_worker/lib/src/utils.dart new file mode 100644 index 000000000..609b4356a --- /dev/null +++ b/pkgs/bazel_worker/lib/src/utils.dart @@ -0,0 +1,23 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:typed_data'; + +import 'package:protobuf/protobuf.dart'; + +List protoToDelimitedBuffer(GeneratedMessage message) { + var messageBuffer = CodedBufferWriter(); + message.writeToCodedBufferWriter(messageBuffer); + + var delimiterBuffer = CodedBufferWriter(); + delimiterBuffer.writeInt32NoTag(messageBuffer.lengthInBytes); + + var result = + Uint8List(messageBuffer.lengthInBytes + delimiterBuffer.lengthInBytes); + + delimiterBuffer.writeTo(result); + messageBuffer.writeTo(result, delimiterBuffer.lengthInBytes); + + return result; +} diff --git a/pkgs/bazel_worker/lib/src/worker/async_worker_loop.dart b/pkgs/bazel_worker/lib/src/worker/async_worker_loop.dart new file mode 100644 index 000000000..5182b5598 --- /dev/null +++ b/pkgs/bazel_worker/lib/src/worker/async_worker_loop.dart @@ -0,0 +1,54 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; + +import '../constants.dart'; +import '../worker_protocol.pb.dart'; +import 'worker_connection.dart'; +import 'worker_loop.dart'; + +/// Persistent Bazel worker loop. +/// +/// Extend this class and implement the `performRequest` method. +abstract class AsyncWorkerLoop implements WorkerLoop { + final AsyncWorkerConnection connection; + + AsyncWorkerLoop({AsyncWorkerConnection? connection}) + : connection = connection ?? StdAsyncWorkerConnection(); + + /// Perform a single [WorkRequest], and return a [WorkResponse]. + @override + Future performRequest(WorkRequest request); + + /// Run the worker loop. The returned [Future] doesn't complete until + /// [connection#readRequest] returns `null`. + @override + Future run() async { + while (true) { + late WorkResponse response; + try { + var request = await connection.readRequest(); + if (request == null) break; + var printMessages = StringBuffer(); + response = await runZoned(() => performRequest(request), + zoneSpecification: + ZoneSpecification(print: (self, parent, zone, message) { + printMessages.writeln(); + printMessages.write(message); + })); + if (printMessages.isNotEmpty) { + response.output = '${response.output}$printMessages'; + } + } catch (e, s) { + response = WorkResponse( + exitCode: EXIT_CODE_ERROR, + output: '$e\n$s', + ); + } + + connection.writeResponse(response); + } + } +} diff --git a/pkgs/bazel_worker/lib/src/worker/sync_worker_loop.dart b/pkgs/bazel_worker/lib/src/worker/sync_worker_loop.dart new file mode 100644 index 000000000..a8571058c --- /dev/null +++ b/pkgs/bazel_worker/lib/src/worker/sync_worker_loop.dart @@ -0,0 +1,51 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +import 'dart:async'; + +import '../constants.dart'; +import '../worker_protocol.pb.dart'; +import 'worker_connection.dart'; +import 'worker_loop.dart'; + +/// Persistent Bazel worker loop. +/// +/// Extend this class and implement the `performRequest` method. +abstract class SyncWorkerLoop implements WorkerLoop { + final SyncWorkerConnection connection; + + SyncWorkerLoop({SyncWorkerConnection? connection}) + : connection = connection ?? StdSyncWorkerConnection(); + + /// Perform a single [WorkRequest], and return a [WorkResponse]. + @override + WorkResponse performRequest(WorkRequest request); + + /// Run the worker loop. Blocks until [connection#readRequest] returns `null`. + @override + void run() { + while (true) { + late WorkResponse response; + try { + var request = connection.readRequest(); + if (request == null) break; + var printMessages = StringBuffer(); + response = runZoned(() => performRequest(request), zoneSpecification: + ZoneSpecification(print: (self, parent, zone, message) { + printMessages.writeln(); + printMessages.write(message); + })); + if (printMessages.isNotEmpty) { + response.output = '${response.output}$printMessages'; + } + } catch (e, s) { + response = WorkResponse( + exitCode: EXIT_CODE_ERROR, + output: '$e\n$s', + ); + } + + connection.writeResponse(response); + } + } +} diff --git a/pkgs/bazel_worker/lib/src/worker/worker_connection.dart b/pkgs/bazel_worker/lib/src/worker/worker_connection.dart new file mode 100644 index 000000000..b395316a3 --- /dev/null +++ b/pkgs/bazel_worker/lib/src/worker/worker_connection.dart @@ -0,0 +1,124 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:io'; +import 'dart:isolate'; +import 'dart:typed_data'; + +import '../async_message_grouper.dart'; +import '../sync_message_grouper.dart'; +import '../utils.dart'; +import '../worker_protocol.pb.dart'; + +/// A connection from a worker to a driver (driver could be bazel, a dart +/// program using `BazelWorkerDriver`, or any other process that speaks the +/// protocol). +abstract class WorkerConnection { + /// Reads a [WorkRequest] or returns `null` if there are none left. + /// + /// See [AsyncWorkerConnection] and [SyncWorkerConnection] for more narrow + /// interfaces. + FutureOr readRequest(); + + void writeResponse(WorkResponse response); +} + +abstract class AsyncWorkerConnection implements WorkerConnection { + /// Creates a [StdAsyncWorkerConnection] with the specified [inputStream] + /// and [outputStream], unless [sendPort] is specified, in which case + /// creates a [SendPortAsyncWorkerConnection]. + factory AsyncWorkerConnection( + {Stream>? inputStream, + StreamSink>? outputStream, + SendPort? sendPort}) => + sendPort == null + ? StdAsyncWorkerConnection( + inputStream: inputStream, outputStream: outputStream) + : SendPortAsyncWorkerConnection(sendPort); + + @override + Future readRequest(); +} + +abstract class SyncWorkerConnection implements WorkerConnection { + @override + WorkRequest? readRequest(); +} + +/// Default implementation of [AsyncWorkerConnection] that works with [Stdin] +/// and [Stdout]. +class StdAsyncWorkerConnection implements AsyncWorkerConnection { + final AsyncMessageGrouper _messageGrouper; + final StreamSink> _outputStream; + + StdAsyncWorkerConnection( + {Stream>? inputStream, StreamSink>? outputStream}) + : _messageGrouper = AsyncMessageGrouper(inputStream ?? stdin), + _outputStream = outputStream ?? stdout; + + @override + Future readRequest() async { + var buffer = await _messageGrouper.next; + if (buffer == null) return null; + + return WorkRequest.fromBuffer(buffer); + } + + @override + void writeResponse(WorkResponse response) { + _outputStream.add(protoToDelimitedBuffer(response)); + } +} + +/// Implementation of [AsyncWorkerConnection] for running in an isolate. +class SendPortAsyncWorkerConnection implements AsyncWorkerConnection { + final ReceivePort receivePort; + final StreamIterator receivePortIterator; + final SendPort sendPort; + + factory SendPortAsyncWorkerConnection(SendPort sendPort) { + var receivePort = ReceivePort(); + sendPort.send(receivePort.sendPort); + return SendPortAsyncWorkerConnection._(receivePort, sendPort); + } + + SendPortAsyncWorkerConnection._(this.receivePort, this.sendPort) + : receivePortIterator = StreamIterator(receivePort.cast()); + + @override + Future readRequest() async { + if (!await receivePortIterator.moveNext()) return null; + return WorkRequest.fromBuffer(receivePortIterator.current); + } + + @override + void writeResponse(WorkResponse response) { + sendPort.send(response.writeToBuffer()); + } +} + +/// Default implementation of [SyncWorkerConnection] that works with [Stdin] and +/// [Stdout]. +class StdSyncWorkerConnection implements SyncWorkerConnection { + final SyncMessageGrouper _messageGrouper; + final Stdout _stdoutStream; + + StdSyncWorkerConnection({Stdin? stdinStream, Stdout? stdoutStream}) + : _messageGrouper = SyncMessageGrouper(stdinStream ?? stdin), + _stdoutStream = stdoutStream ?? stdout; + + @override + WorkRequest? readRequest() { + var buffer = _messageGrouper.next; + if (buffer == null) return null; + + return WorkRequest.fromBuffer(buffer); + } + + @override + void writeResponse(WorkResponse response) { + _stdoutStream.add(protoToDelimitedBuffer(response)); + } +} diff --git a/pkgs/bazel_worker/lib/src/worker/worker_loop.dart b/pkgs/bazel_worker/lib/src/worker/worker_loop.dart new file mode 100644 index 000000000..5723fd11b --- /dev/null +++ b/pkgs/bazel_worker/lib/src/worker/worker_loop.dart @@ -0,0 +1,20 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import '../worker_protocol.pb.dart'; +import 'async_worker_loop.dart'; +import 'sync_worker_loop.dart'; + +/// Interface for a [WorkerLoop]. +/// +/// This interface should not generally be implemented directly, instead use +/// the [SyncWorkerLoop] or [AsyncWorkerLoop] implementations. +abstract class WorkerLoop { + /// Perform a single [WorkRequest], and return either a [WorkResponse] or + /// a [Future]. + dynamic performRequest(WorkRequest request); + + /// Run the worker loop. Should return either a [Future] or `null`. + dynamic run(); +} diff --git a/pkgs/bazel_worker/lib/src/worker_protocol.pb.dart b/pkgs/bazel_worker/lib/src/worker_protocol.pb.dart new file mode 100644 index 000000000..8b7a7a99e --- /dev/null +++ b/pkgs/bazel_worker/lib/src/worker_protocol.pb.dart @@ -0,0 +1,384 @@ +// +// Generated code. Do not modify. +// source: worker_protocol.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + +import 'dart:core' as $core; + +import 'package:protobuf/protobuf.dart' as $pb; + +/// An input file. +class Input extends $pb.GeneratedMessage { + factory Input({ + $core.String? path, + $core.List<$core.int>? digest, + }) { + final $result = create(); + if (path != null) { + $result.path = path; + } + if (digest != null) { + $result.digest = digest; + } + return $result; + } + Input._() : super(); + factory Input.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory Input.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'Input', + package: const $pb.PackageName(_omitMessageNames ? '' : 'blaze.worker'), + createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'path') + ..a<$core.List<$core.int>>( + 2, _omitFieldNames ? '' : 'digest', $pb.PbFieldType.OY) + ..hasRequiredFields = false; + + @$core.Deprecated('Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + Input clone() => Input()..mergeFromMessage(this); + @$core.Deprecated('Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + Input copyWith(void Function(Input) updates) => + super.copyWith((message) => updates(message as Input)) as Input; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static Input create() => Input._(); + Input createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static Input getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static Input? _defaultInstance; + + /// The path in the file system where to read this input artifact from. This is + /// either a path relative to the execution root (the worker process is + /// launched with the working directory set to the execution root), or an + /// absolute path. + @$pb.TagNumber(1) + $core.String get path => $_getSZ(0); + @$pb.TagNumber(1) + set path($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasPath() => $_has(0); + @$pb.TagNumber(1) + void clearPath() => clearField(1); + + /// A hash-value of the contents. The format of the contents is unspecified and + /// the digest should be treated as an opaque token. This can be empty in some + /// cases. + @$pb.TagNumber(2) + $core.List<$core.int> get digest => $_getN(1); + @$pb.TagNumber(2) + set digest($core.List<$core.int> v) { + $_setBytes(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasDigest() => $_has(1); + @$pb.TagNumber(2) + void clearDigest() => clearField(2); +} + +/// This represents a single work unit that Blaze sends to the worker. +class WorkRequest extends $pb.GeneratedMessage { + factory WorkRequest({ + $core.Iterable<$core.String>? arguments, + $core.Iterable? inputs, + $core.int? requestId, + $core.bool? cancel, + $core.int? verbosity, + $core.String? sandboxDir, + }) { + final $result = create(); + if (arguments != null) { + $result.arguments.addAll(arguments); + } + if (inputs != null) { + $result.inputs.addAll(inputs); + } + if (requestId != null) { + $result.requestId = requestId; + } + if (cancel != null) { + $result.cancel = cancel; + } + if (verbosity != null) { + $result.verbosity = verbosity; + } + if (sandboxDir != null) { + $result.sandboxDir = sandboxDir; + } + return $result; + } + WorkRequest._() : super(); + factory WorkRequest.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory WorkRequest.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'WorkRequest', + package: const $pb.PackageName(_omitMessageNames ? '' : 'blaze.worker'), + createEmptyInstance: create) + ..pPS(1, _omitFieldNames ? '' : 'arguments') + ..pc(2, _omitFieldNames ? '' : 'inputs', $pb.PbFieldType.PM, + subBuilder: Input.create) + ..a<$core.int>(3, _omitFieldNames ? '' : 'requestId', $pb.PbFieldType.O3) + ..aOB(4, _omitFieldNames ? '' : 'cancel') + ..a<$core.int>(5, _omitFieldNames ? '' : 'verbosity', $pb.PbFieldType.O3) + ..aOS(6, _omitFieldNames ? '' : 'sandboxDir') + ..hasRequiredFields = false; + + @$core.Deprecated('Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + WorkRequest clone() => WorkRequest()..mergeFromMessage(this); + @$core.Deprecated('Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + WorkRequest copyWith(void Function(WorkRequest) updates) => + super.copyWith((message) => updates(message as WorkRequest)) + as WorkRequest; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static WorkRequest create() => WorkRequest._(); + WorkRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static WorkRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static WorkRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.List<$core.String> get arguments => $_getList(0); + + /// The inputs that the worker is allowed to read during execution of this + /// request. + @$pb.TagNumber(2) + $core.List get inputs => $_getList(1); + + /// Each WorkRequest must have either a unique + /// request_id or request_id = 0. If request_id is 0, this WorkRequest must be + /// processed alone (singleplex), otherwise the worker may process multiple + /// WorkRequests in parallel (multiplexing). As an exception to the above, if + /// the cancel field is true, the request_id must be the same as a previously + /// sent WorkRequest. The request_id must be attached unchanged to the + /// corresponding WorkResponse. Only one singleplex request may be sent to a + /// worker at a time. + @$pb.TagNumber(3) + $core.int get requestId => $_getIZ(2); + @$pb.TagNumber(3) + set requestId($core.int v) { + $_setSignedInt32(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasRequestId() => $_has(2); + @$pb.TagNumber(3) + void clearRequestId() => clearField(3); + + /// EXPERIMENTAL: When true, this is a cancel request, indicating that a + /// previously sent WorkRequest with the same request_id should be cancelled. + /// The arguments and inputs fields must be empty and should be ignored. + @$pb.TagNumber(4) + $core.bool get cancel => $_getBF(3); + @$pb.TagNumber(4) + set cancel($core.bool v) { + $_setBool(3, v); + } + + @$pb.TagNumber(4) + $core.bool hasCancel() => $_has(3); + @$pb.TagNumber(4) + void clearCancel() => clearField(4); + + /// Values greater than 0 indicate that the worker may output extra debug + /// information to stderr (which will go into the worker log). Setting the + /// --worker_verbose flag for Bazel makes this flag default to 10. + @$pb.TagNumber(5) + $core.int get verbosity => $_getIZ(4); + @$pb.TagNumber(5) + set verbosity($core.int v) { + $_setSignedInt32(4, v); + } + + @$pb.TagNumber(5) + $core.bool hasVerbosity() => $_has(4); + @$pb.TagNumber(5) + void clearVerbosity() => clearField(5); + + /// The relative directory inside the workers working directory where the + /// inputs and outputs are placed, for sandboxing purposes. For singleplex + /// workers, this is unset, as they can use their working directory as sandbox. + /// For multiplex workers, this will be set when the + /// --experimental_worker_multiplex_sandbox flag is set _and_ the execution + /// requirements for the worker includes 'supports-multiplex-sandbox'. + /// The paths in `inputs` will not contain this prefix, but the actual files + /// will be placed/must be written relative to this directory. The worker + /// implementation is responsible for resolving the file paths. + @$pb.TagNumber(6) + $core.String get sandboxDir => $_getSZ(5); + @$pb.TagNumber(6) + set sandboxDir($core.String v) { + $_setString(5, v); + } + + @$pb.TagNumber(6) + $core.bool hasSandboxDir() => $_has(5); + @$pb.TagNumber(6) + void clearSandboxDir() => clearField(6); +} + +/// The worker sends this message to Blaze when it finished its work on the +/// WorkRequest message. +class WorkResponse extends $pb.GeneratedMessage { + factory WorkResponse({ + $core.int? exitCode, + $core.String? output, + $core.int? requestId, + $core.bool? wasCancelled, + }) { + final $result = create(); + if (exitCode != null) { + $result.exitCode = exitCode; + } + if (output != null) { + $result.output = output; + } + if (requestId != null) { + $result.requestId = requestId; + } + if (wasCancelled != null) { + $result.wasCancelled = wasCancelled; + } + return $result; + } + WorkResponse._() : super(); + factory WorkResponse.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory WorkResponse.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'WorkResponse', + package: const $pb.PackageName(_omitMessageNames ? '' : 'blaze.worker'), + createEmptyInstance: create) + ..a<$core.int>(1, _omitFieldNames ? '' : 'exitCode', $pb.PbFieldType.O3) + ..aOS(2, _omitFieldNames ? '' : 'output') + ..a<$core.int>(3, _omitFieldNames ? '' : 'requestId', $pb.PbFieldType.O3) + ..aOB(4, _omitFieldNames ? '' : 'wasCancelled') + ..hasRequiredFields = false; + + @$core.Deprecated('Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + WorkResponse clone() => WorkResponse()..mergeFromMessage(this); + @$core.Deprecated('Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + WorkResponse copyWith(void Function(WorkResponse) updates) => + super.copyWith((message) => updates(message as WorkResponse)) + as WorkResponse; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static WorkResponse create() => WorkResponse._(); + WorkResponse createEmptyInstance() => create(); + static $pb.PbList createRepeated() => + $pb.PbList(); + @$core.pragma('dart2js:noInline') + static WorkResponse getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static WorkResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.int get exitCode => $_getIZ(0); + @$pb.TagNumber(1) + set exitCode($core.int v) { + $_setSignedInt32(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasExitCode() => $_has(0); + @$pb.TagNumber(1) + void clearExitCode() => clearField(1); + + /// This is printed to the user after the WorkResponse has been received and is + /// supposed to contain compiler warnings / errors etc. - thus we'll use a + /// string type here, which gives us UTF-8 encoding. + @$pb.TagNumber(2) + $core.String get output => $_getSZ(1); + @$pb.TagNumber(2) + set output($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasOutput() => $_has(1); + @$pb.TagNumber(2) + void clearOutput() => clearField(2); + + /// This field must be set to the same request_id as the WorkRequest it is a + /// response to. Since worker processes which support multiplex worker will + /// handle multiple WorkRequests in parallel, this ID will be used to + /// determined which WorkerProxy does this WorkResponse belong to. + @$pb.TagNumber(3) + $core.int get requestId => $_getIZ(2); + @$pb.TagNumber(3) + set requestId($core.int v) { + $_setSignedInt32(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasRequestId() => $_has(2); + @$pb.TagNumber(3) + void clearRequestId() => clearField(3); + + /// EXPERIMENTAL When true, indicates that this response was sent due to + /// receiving a cancel request. The exit_code and output fields should be empty + /// and will be ignored. Exactly one WorkResponse must be sent for each + /// non-cancelling WorkRequest received by the worker, but if the worker + /// received a cancel request, it doesn't matter if it replies with a regular + /// WorkResponse or with one where was_cancelled = true. + @$pb.TagNumber(4) + $core.bool get wasCancelled => $_getBF(3); + @$pb.TagNumber(4) + set wasCancelled($core.bool v) { + $_setBool(3, v); + } + + @$pb.TagNumber(4) + $core.bool hasWasCancelled() => $_has(3); + @$pb.TagNumber(4) + void clearWasCancelled() => clearField(4); +} + +const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names'); +const _omitMessageNames = + $core.bool.fromEnvironment('protobuf.omit_message_names'); diff --git a/pkgs/bazel_worker/lib/testing.dart b/pkgs/bazel_worker/lib/testing.dart new file mode 100644 index 000000000..3ae4c1f4d --- /dev/null +++ b/pkgs/bazel_worker/lib/testing.dart @@ -0,0 +1,203 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:collection'; +import 'dart:io'; +import 'dart:typed_data'; + +import 'bazel_worker.dart'; + +export 'src/async_message_grouper.dart'; +export 'src/sync_message_grouper.dart'; +export 'src/utils.dart' show protoToDelimitedBuffer; + +/// Interface for a mock [Stdin] object that allows you to add bytes manually. +abstract class TestStdin implements Stdin { + void addInputBytes(List bytes); + + void close(); +} + +/// A [Stdin] mock object which only implements `readByteSync`. +class TestStdinSync implements TestStdin { + /// Pending bytes to be delivered synchronously. + final Queue pendingBytes = Queue(); + + /// Adds all the [bytes] to this stream. + @override + void addInputBytes(List bytes) { + pendingBytes.addAll(bytes); + } + + /// Add a -1 to signal EOF. + @override + void close() { + pendingBytes.add(-1); + } + + @override + int readByteSync() { + return pendingBytes.removeFirst(); + } + + @override + bool get isBroadcast => false; + + @override + void noSuchMethod(Invocation invocation) { + throw StateError('Unexpected invocation ${invocation.memberName}.'); + } +} + +/// A mock [Stdin] object which only implements `listen`. +/// +/// Note: You must call [close] in order for the loop to exit properly. +class TestStdinAsync implements TestStdin { + /// Controls the stream for async delivery of bytes. + final StreamController _controller = StreamController(); + StreamController get controller => _controller; + + /// Adds all the [bytes] to this stream. + @override + void addInputBytes(List bytes) { + _controller.add(Uint8List.fromList(bytes)); + } + + /// Closes this stream. This is necessary for the [AsyncWorkerLoop] to exit. + @override + void close() { + _controller.close(); + } + + @override + StreamSubscription listen(void Function(Uint8List bytes)? onData, + {Function? onError, void Function()? onDone, bool? cancelOnError}) { + return _controller.stream.listen(onData, + onError: onError, onDone: onDone, cancelOnError: cancelOnError); + } + + @override + bool get isBroadcast => false; + + @override + void noSuchMethod(Invocation invocation) { + throw StateError('Unexpected invocation ${invocation.memberName}.'); + } +} + +/// A [Stdout] mock object. +class TestStdoutStream implements Stdout { + final List> writes = >[]; + + @override + void add(List bytes) { + writes.add(bytes); + } + + @override + void noSuchMethod(Invocation invocation) { + throw StateError('Unexpected invocation ${invocation.memberName}.'); + } +} + +/// Interface for a [TestWorkerConnection] which records its responses +abstract class TestWorkerConnection implements WorkerConnection { + List get responses; +} + +/// Interface for a [TestWorkerLoop] which allows you to enqueue responses. +abstract class TestWorkerLoop implements WorkerLoop { + void enqueueResponse(WorkResponse response); + + /// If set, this message will be printed during the call to `performRequest`. + String? get printMessage; +} + +/// A [StdSyncWorkerConnection] which records its responses. +class TestSyncWorkerConnection extends StdSyncWorkerConnection + implements TestWorkerConnection { + @override + final List responses = []; + + TestSyncWorkerConnection(Stdin stdinStream, Stdout stdoutStream) + : super(stdinStream: stdinStream, stdoutStream: stdoutStream); + + @override + void writeResponse(WorkResponse response) { + super.writeResponse(response); + responses.add(response); + } +} + +/// A [SyncWorkerLoop] for testing. +class TestSyncWorkerLoop extends SyncWorkerLoop implements TestWorkerLoop { + final List requests = []; + final Queue _responses = Queue(); + + @override + final String? printMessage; + + TestSyncWorkerLoop(SyncWorkerConnection connection, {this.printMessage}) + : super(connection: connection); + + @override + WorkResponse performRequest(WorkRequest request) { + requests.add(request); + if (printMessage != null) print(printMessage); + return _responses.removeFirst(); + } + + /// Adds [response] to the queue. These will be returned from + /// [performRequest] in the order they are added, otherwise it will throw + /// if the queue is empty. + @override + void enqueueResponse(WorkResponse response) { + _responses.addLast(response); + } +} + +/// A [StdAsyncWorkerConnection] which records its responses. +class TestAsyncWorkerConnection extends StdAsyncWorkerConnection + implements TestWorkerConnection { + @override + final List responses = []; + + TestAsyncWorkerConnection( + Stream> inputStream, StreamSink> outputStream) + : super(inputStream: inputStream, outputStream: outputStream); + + @override + void writeResponse(WorkResponse response) { + super.writeResponse(response); + responses.add(response); + } +} + +/// A [AsyncWorkerLoop] for testing. +class TestAsyncWorkerLoop extends AsyncWorkerLoop implements TestWorkerLoop { + final List requests = []; + final Queue _responses = Queue(); + + @override + final String? printMessage; + + TestAsyncWorkerLoop(AsyncWorkerConnection connection, {this.printMessage}) + : super(connection: connection); + + @override + Future performRequest(WorkRequest request) async { + requests.add(request); + if (printMessage != null) print(printMessage); + return _responses.removeFirst(); + } + + /// Adds [response] to the queue. These will be returned from + /// [performRequest] in the order they are added, otherwise it will throw + /// if the queue is empty. + @override + void enqueueResponse(WorkResponse response) { + _responses.addLast(response); + } +} diff --git a/pkgs/bazel_worker/pubspec.yaml b/pkgs/bazel_worker/pubspec.yaml new file mode 100644 index 000000000..5981c1c73 --- /dev/null +++ b/pkgs/bazel_worker/pubspec.yaml @@ -0,0 +1,16 @@ +name: bazel_worker +version: 1.1.2 +description: >- + Protocol and utilities to implement or invoke persistent bazel workers. +repository: https://github.com/dart-lang/tools/tree/main/pkgs/bazel_worker + +environment: + sdk: ^3.1.0 + +dependencies: + async: ^2.5.0 + protobuf: ^3.0.0 + +dev_dependencies: + dart_flutter_team_lints: ^3.0.0 + test: ^1.16.0 diff --git a/pkgs/bazel_worker/test/driver_connection_test.dart b/pkgs/bazel_worker/test/driver_connection_test.dart new file mode 100644 index 000000000..3bbb56d57 --- /dev/null +++ b/pkgs/bazel_worker/test/driver_connection_test.dart @@ -0,0 +1,24 @@ +// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:isolate'; + +import 'package:bazel_worker/src/constants.dart'; +import 'package:bazel_worker/src/driver/driver_connection.dart'; +import 'package:test/test.dart'; + +void main() { + group('IsolateDriverConnection', () { + test('handles closed port', () async { + var isolatePort = ReceivePort(); + var outsidePort = ReceivePort(); + isolatePort.sendPort.send(outsidePort.sendPort); + var connection = await IsolateDriverConnection.create(isolatePort); + + isolatePort.close(); + + expect((await connection.readResponse()).exitCode, EXIT_CODE_BROKEN_PIPE); + }); + }); +} diff --git a/pkgs/bazel_worker/test/driver_test.dart b/pkgs/bazel_worker/test/driver_test.dart new file mode 100644 index 000000000..c3978304e --- /dev/null +++ b/pkgs/bazel_worker/test/driver_test.dart @@ -0,0 +1,277 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:collection'; +import 'dart:io'; + +import 'package:bazel_worker/bazel_worker.dart'; +import 'package:bazel_worker/driver.dart'; +import 'package:test/test.dart'; + +void main() { + BazelWorkerDriver? driver; + final disconnectedResponse = WorkResponse( + exitCode: EXIT_CODE_BROKEN_PIPE, + output: 'Connection closed', + )..freeze(); + + group('basic driver', () { + test('can run a single request', () async { + await _doRequests(count: 1); + await _doRequests(count: 1); + }); + + test('can run multiple batches of requests through multiple workers', + () async { + var maxWorkers = 4; + var maxIdleWorkers = 2; + driver = BazelWorkerDriver(MockWorker.spawn, + maxWorkers: maxWorkers, maxIdleWorkers: maxIdleWorkers); + for (var i = 0; i < 10; i++) { + await _doRequests(driver: driver); + expect(MockWorker.liveWorkers.length, maxIdleWorkers); + // No workers should be killed while there is ongoing work, but they + // should be cleaned up once there isn't any more work to do. + expect(MockWorker.deadWorkers.length, + (maxWorkers - maxIdleWorkers) * (i + 1)); + } + }); + + test('can run multiple requests through one worker', () async { + var maxWorkers = 1; + var maxIdleWorkers = 1; + driver = BazelWorkerDriver(MockWorker.spawn, + maxWorkers: maxWorkers, maxIdleWorkers: maxIdleWorkers); + for (var i = 0; i < 10; i++) { + await _doRequests(driver: driver); + expect(MockWorker.liveWorkers.length, 1); + expect(MockWorker.deadWorkers.length, 0); + } + }); + + test('can run one request through multiple workers', () async { + driver = + BazelWorkerDriver(MockWorker.spawn, maxWorkers: 4, maxIdleWorkers: 4); + for (var i = 0; i < 10; i++) { + await _doRequests(driver: driver, count: 1); + expect(MockWorker.liveWorkers.length, 1); + expect(MockWorker.deadWorkers.length, 0); + } + }); + + test('can run with maxIdleWorkers == 0', () async { + var maxWorkers = 4; + driver = BazelWorkerDriver(MockWorker.spawn, + maxWorkers: maxWorkers, maxIdleWorkers: 0); + for (var i = 0; i < 10; i++) { + await _doRequests(driver: driver); + expect(MockWorker.liveWorkers.length, 0); + expect(MockWorker.deadWorkers.length, maxWorkers * (i + 1)); + } + }); + + test('trackWork gets invoked when a worker is actually ready', () async { + var maxWorkers = 2; + driver = BazelWorkerDriver(MockWorker.spawn, maxWorkers: maxWorkers); + var tracking = []; + await _doRequests( + driver: driver, + count: 10, + trackWork: (Future response) { + // We should never be tracking more than `maxWorkers` jobs at a time. + expect(tracking.length, lessThan(maxWorkers)); + tracking.add(response); + response.then((_) => tracking.remove(response)); + }); + }); + + group('failing workers', () { + /// A driver which spawns [numBadWorkers] failing workers and then good + /// ones after that, and which will retry [maxRetries] times. + void createDriver({int maxRetries = 2, int numBadWorkers = 2}) { + var numSpawned = 0; + driver = BazelWorkerDriver( + () async => MockWorker(workerLoopFactory: (MockWorker worker) { + var connection = StdAsyncWorkerConnection( + inputStream: worker._stdinController.stream, + outputStream: worker._stdoutController.sink); + if (numSpawned < numBadWorkers) { + numSpawned++; + return ThrowingMockWorkerLoop( + worker, MockWorker.responseQueue, connection); + } else { + return MockWorkerLoop(MockWorker.responseQueue, + connection: connection); + } + }), + maxRetries: maxRetries); + } + + test('should retry up to maxRetries times', () async { + createDriver(); + var expectedResponse = WorkResponse(); + MockWorker.responseQueue.addAll( + [disconnectedResponse, disconnectedResponse, expectedResponse]); + var actualResponse = await driver!.doWork(WorkRequest()); + // The first 2 null responses are thrown away, and we should get the + // third one. + expect(actualResponse, expectedResponse); + + expect(MockWorker.deadWorkers.length, 2); + expect(MockWorker.liveWorkers.length, 1); + }); + + test('should fail if it exceeds maxRetries failures', () async { + createDriver(maxRetries: 2, numBadWorkers: 3); + MockWorker.responseQueue.addAll( + [disconnectedResponse, disconnectedResponse, WorkResponse()]); + var actualResponse = await driver!.doWork(WorkRequest()); + // Should actually get a bad response. + expect(actualResponse.exitCode, 15); + expect( + actualResponse.output, + 'Invalid response from worker, this probably means it wrote ' + 'invalid output or died.'); + + expect(MockWorker.deadWorkers.length, 3); + }); + }); + + test('handles spawnWorker failures', () async { + driver = BazelWorkerDriver(() async => throw StateError('oh no!'), + maxRetries: 0); + expect(driver!.doWork(WorkRequest()), throwsA(isA())); + }); + + tearDown(() async { + await driver?.terminateWorkers(); + expect(MockWorker.liveWorkers, isEmpty); + MockWorker.deadWorkers.clear(); + MockWorker.responseQueue.clear(); + }); + }); +} + +/// Runs [count] of fake work requests through [driver], and asserts that they +/// all completed. +Future _doRequests( + {BazelWorkerDriver? driver, + int count = 100, + void Function(Future)? trackWork}) async { + // If we create a driver, we need to make sure and terminate it. + var terminateDriver = driver == null; + driver ??= BazelWorkerDriver(MockWorker.spawn); + var requests = List.generate(count, (_) => WorkRequest()); + var responses = List.generate(count, (_) => WorkResponse()); + MockWorker.responseQueue.addAll(responses); + var actualResponses = await Future.wait( + requests.map((request) => driver!.doWork(request, trackWork: trackWork))); + expect(actualResponses, unorderedEquals(responses)); + if (terminateDriver) await driver.terminateWorkers(); +} + +/// A mock worker loop that returns work responses from the provided list. +/// +/// Throws if it runs out of responses. +class MockWorkerLoop extends AsyncWorkerLoop { + final Queue _responseQueue; + + MockWorkerLoop(this._responseQueue, {super.connection}); + + @override + Future performRequest(WorkRequest request) async { + print('Performing request $request'); + return _responseQueue.removeFirst(); + } +} + +/// A mock worker loop with a custom `run` function that throws. +class ThrowingMockWorkerLoop extends MockWorkerLoop { + final MockWorker _mockWorker; + + ThrowingMockWorkerLoop(this._mockWorker, Queue responseQueue, + AsyncWorkerConnection connection) + : super(responseQueue, connection: connection); + + /// Run the worker loop. The returned [Future] doesn't complete until + /// [connection#readRequest] returns `null`. + @override + Future run() async { + while (true) { + var request = await connection.readRequest(); + if (request == null) break; + await performRequest(request); + _mockWorker.kill(); + } + } +} + +/// A mock worker process. +/// +/// Items in [responseQueue] will be returned in order based on requests. +/// +/// If there are no items left in [responseQueue] then it will throw. +class MockWorker implements Process { + /// Spawns a new [MockWorker]. + static Future spawn() async => MockWorker(); + + /// Static queue of pending responses, these are shared by all workers. + /// + /// If this is empty and a request is received then it will throw. + static final responseQueue = Queue(); + + /// Static list of all live workers. + static final liveWorkers = []; + + /// Static list of all the dead workers. + static final deadWorkers = []; + + /// Standard constructor, creates a [WorkerLoop] from [workerLoopFactory] or + /// a [MockWorkerLoop] if no factory is provided. + MockWorker({WorkerLoop Function(MockWorker)? workerLoopFactory}) { + liveWorkers.add(this); + var workerLoop = workerLoopFactory != null + ? workerLoopFactory(this) + : MockWorkerLoop(responseQueue, + connection: StdAsyncWorkerConnection( + inputStream: _stdinController.stream, + outputStream: _stdoutController.sink)); + workerLoop.run(); + } + + @override + Future get exitCode => throw UnsupportedError('Not needed.'); + + @override + Stream> get stdout => _stdoutController.stream; + final _stdoutController = StreamController>(); + + @override + Stream> get stderr => _stderrController.stream; + final _stderrController = StreamController>(); + + @override + late final IOSink stdin = IOSink(_stdinController.sink); + final _stdinController = StreamController>(); + + @override + int get pid => throw UnsupportedError('Not needed.'); + + @override + bool kill( + [ProcessSignal processSignal = ProcessSignal.sigterm, int exitCode = 0]) { + if (_killed) return false; + () async { + await _stdoutController.close(); + await _stderrController.close(); + await _stdinController.close(); + }(); + deadWorkers.add(this); + liveWorkers.remove(this); + return true; + } + + final _killed = false; +} diff --git a/pkgs/bazel_worker/test/message_grouper_test.dart b/pkgs/bazel_worker/test/message_grouper_test.dart new file mode 100644 index 000000000..475190ed8 --- /dev/null +++ b/pkgs/bazel_worker/test/message_grouper_test.dart @@ -0,0 +1,145 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:io'; + +import 'package:bazel_worker/bazel_worker.dart'; +import 'package:bazel_worker/testing.dart'; +import 'package:test/test.dart'; + +void main() { + group('AsyncMessageGrouper', () { + runTests(TestStdinAsync.new, AsyncMessageGrouper.new); + }); + + group('SyncMessageGrouper', () { + runTests(TestStdinSync.new, SyncMessageGrouper.new); + }); +} + +void runTests(TestStdin Function() stdinFactory, + MessageGrouper Function(Stdin) messageGrouperFactory) { + late MessageGrouper messageGrouper; + + late TestStdin stdinStream; + + setUp(() { + stdinStream = stdinFactory(); + messageGrouper = messageGrouperFactory(stdinStream); + }); + + /// Check that if the message grouper produces the [expectedOutput] in + /// response to the corresponding [input]. + Future check(List input, List> expectedOutput) async { + stdinStream.addInputBytes(input); + for (var chunk in expectedOutput) { + expect(await messageGrouper.next, equals(chunk)); + } + } + + /// Make a simple message having the given [length] + List makeMessage(int length) { + var result = []; + for (var i = 0; i < length; i++) { + result.add(i & 0xff); + } + return result; + } + + test('Empty message', () async { + await check([0], [[]]); + }); + + test('Short message', () async { + await check([ + 5, + 10, + 20, + 30, + 40, + 50 + ], [ + [10, 20, 30, 40, 50] + ]); + }); + + test('Message with 2-byte length', () async { + var len = 0x155; + var msg = makeMessage(len); + var encodedLen = [0xd5, 0x02]; + await check([...encodedLen, ...msg], [msg]); + }); + + test('Message with 3-byte length', () async { + var len = 0x4103; + var msg = makeMessage(len); + var encodedLen = [0x83, 0x82, 0x01]; + await check([...encodedLen, ...msg], [msg]); + }); + + test('Multiple messages', () async { + await check([ + 2, + 10, + 20, + 2, + 30, + 40 + ], [ + [10, 20], + [30, 40] + ]); + }); + + test('Empty message at start', () async { + await check([ + 0, + 2, + 10, + 20 + ], [ + [], + [10, 20] + ]); + }); + + test('Empty message at end', () async { + await check([ + 2, + 10, + 20, + 0 + ], [ + [10, 20], + [] + ]); + }); + + test('Empty message in the middle', () async { + await check([ + 2, + 10, + 20, + 0, + 2, + 30, + 40 + ], [ + [10, 20], + [], + [30, 40] + ]); + }); + + test('Handles the case when stdin gives an error instead of EOF', () async { + if (stdinStream is TestStdinSync) { + // Reading will now cause an error as pendingBytes is empty. + (stdinStream as TestStdinSync).pendingBytes.clear(); + expect(messageGrouper.next, isNull); + } else if (stdinStream is TestStdinAsync) { + (stdinStream as TestStdinAsync).controller.addError('Error!'); + expect(await messageGrouper.next, isNull); + } + }); +} diff --git a/pkgs/bazel_worker/test/test_all.dart b/pkgs/bazel_worker/test/test_all.dart new file mode 100644 index 000000000..7eb6b118d --- /dev/null +++ b/pkgs/bazel_worker/test/test_all.dart @@ -0,0 +1,15 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'driver_connection_test.dart' as driver_connection; +import 'driver_test.dart' as driver; +import 'message_grouper_test.dart' as message_grouper; +import 'worker_loop_test.dart' as worker_loop; + +void main() { + driver.main(); + message_grouper.main(); + worker_loop.main(); + driver_connection.main(); +} diff --git a/pkgs/bazel_worker/test/worker_loop_test.dart b/pkgs/bazel_worker/test/worker_loop_test.dart new file mode 100644 index 000000000..50d21512e --- /dev/null +++ b/pkgs/bazel_worker/test/worker_loop_test.dart @@ -0,0 +1,122 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:io'; + +import 'package:bazel_worker/bazel_worker.dart'; +import 'package:bazel_worker/testing.dart'; +import 'package:test/test.dart'; + +void main() { + group('SyncWorkerLoop', () { + runTests(TestStdinSync.new, TestSyncWorkerConnection.new, + TestSyncWorkerLoop.new); + }); + + group('AsyncWorkerLoop', () { + runTests(TestStdinAsync.new, TestAsyncWorkerConnection.new, + TestAsyncWorkerLoop.new); + }); + + group('SyncWorkerLoopWithPrint', () { + runTests( + TestStdinSync.new, + TestSyncWorkerConnection.new, + (TestSyncWorkerConnection connection) => + TestSyncWorkerLoop(connection, printMessage: 'Goodbye!')); + }); + + group('AsyncWorkerLoopWithPrint', () { + runTests( + TestStdinAsync.new, + TestAsyncWorkerConnection.new, + (TestAsyncWorkerConnection connection) => + TestAsyncWorkerLoop(connection, printMessage: 'Goodbye!')); + }); +} + +void runTests( + TestStdin Function() stdinFactory, + T Function(Stdin, Stdout) workerConnectionFactory, + TestWorkerLoop Function(T) workerLoopFactory) { + late TestStdin stdinStream; + late TestStdoutStream stdoutStream; + late T connection; + late TestWorkerLoop workerLoop; + + setUp(() { + stdinStream = stdinFactory(); + stdoutStream = TestStdoutStream(); + connection = workerConnectionFactory(stdinStream, stdoutStream); + workerLoop = workerLoopFactory(connection); + }); + + test('basic', () async { + var request = WorkRequest(arguments: ['--foo=bar']); + stdinStream.addInputBytes(protoToDelimitedBuffer(request)); + stdinStream.close(); + + var response = WorkResponse(output: 'Hello World'); + workerLoop.enqueueResponse(response); + + // Make sure `print` never gets called in the parent zone. + var printMessages = []; + await runZoned(() => workerLoop.run(), zoneSpecification: + ZoneSpecification(print: (self, parent, zone, message) { + printMessages.add(message); + })); + expect(printMessages, isEmpty, + reason: 'The worker loop should hide all print calls from the parent ' + 'zone.'); + + expect(connection.responses, hasLength(1)); + expect(connection.responses[0], response); + if (workerLoop.printMessage != null) { + expect(response.output, endsWith(workerLoop.printMessage!), + reason: 'Print messages should get appended to the response output.'); + } + + // Check that a serialized version was written to std out. + expect(stdoutStream.writes, hasLength(1)); + expect(stdoutStream.writes[0], protoToDelimitedBuffer(response)); + }); + + test('Exception in the worker.', () async { + var request = WorkRequest(arguments: ['--foo=bar']); + stdinStream.addInputBytes(protoToDelimitedBuffer(request)); + stdinStream.close(); + + // Didn't enqueue a response, so this will throw inside of `performRequest`. + await workerLoop.run(); + + expect(connection.responses, hasLength(1)); + var response = connection.responses[0]; + expect(response.exitCode, EXIT_CODE_ERROR); + + // Check that a serialized version was written to std out. + expect(stdoutStream.writes, hasLength(1)); + expect(stdoutStream.writes[0], protoToDelimitedBuffer(response)); + }); + + test('Stops at EOF', () async { + stdinStream.addInputBytes([-1]); + stdinStream.close(); + await workerLoop.run(); + }); + + test('Stops if stdin gives an error instead of EOF', () async { + if (stdinStream is TestStdinSync) { + // Reading will now cause an error as pendingBytes is empty. + (stdinStream as TestStdinSync).pendingBytes.clear(); + await workerLoop.run(); + } else if (stdinStream is TestStdinAsync) { + var done = Completer(); + // ignore: avoid_dynamic_calls + workerLoop.run().then((_) => done.complete(null)); + (stdinStream as TestStdinAsync).controller.addError('Error!!'); + await done.future; + } + }); +} diff --git a/pkgs/bazel_worker/tool/travis.sh b/pkgs/bazel_worker/tool/travis.sh new file mode 100755 index 000000000..05adb02d5 --- /dev/null +++ b/pkgs/bazel_worker/tool/travis.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +# for details. All rights reserved. Use of this source code is governed by a +# BSD-style license that can be found in the LICENSE file. + +# Fast fail the script on failures. +set -e + +dart pub get + +# Verify that the libraries are error free. +dart analyze --fatal-infos \ + lib/bazel_worker.dart \ + lib/driver.dart \ + lib/testing.dart \ + test/test_all.dart + +# Run the tests. +dart test + +pushd e2e_test +dart pub get +dart analyze --fatal-infos test/e2e_test.dart +dart test +popd diff --git a/pkgs/bazel_worker/tool/update_proto.sh b/pkgs/bazel_worker/tool/update_proto.sh new file mode 100755 index 000000000..3f77a06a0 --- /dev/null +++ b/pkgs/bazel_worker/tool/update_proto.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +set -e + +if [ -z "$1" ]; then + echo "Expected exactly one argument which is the protoc_plugin version to use" +else + echo "Using protoc_plugin version $1" + dart pub global activate protoc_plugin "$1" +fi + +BAZEL_REPO=.dart_tool/bazel_worker/bazel.git/ +# Bash away old versions if they exist +rm -rf "$BAZEL_REPO" +git clone --depth 1 https://github.com/bazelbuild/bazel.git "$BAZEL_REPO" + +protoc --proto_path="${BAZEL_REPO}/src/main/protobuf" --dart_out="lib/src" worker_protocol.proto +dart format lib/src/worker_protocol.pb.dart + +# We only care about the *.pb.dart file, not the extra files +rm lib/src/worker_protocol.pbenum.dart +rm lib/src/worker_protocol.pbjson.dart +rm lib/src/worker_protocol.pbserver.dart + +rm -rf "$BAZEL_REPO" diff --git a/pkgs/browser_launcher/.gitignore b/pkgs/browser_launcher/.gitignore new file mode 100644 index 000000000..ec8eae3f1 --- /dev/null +++ b/pkgs/browser_launcher/.gitignore @@ -0,0 +1,4 @@ +# Don’t commit the following directories created by pub. +.dart_tool/ +.packages +pubspec.lock diff --git a/pkgs/browser_launcher/AUTHORS b/pkgs/browser_launcher/AUTHORS new file mode 100644 index 000000000..e8063a8cd --- /dev/null +++ b/pkgs/browser_launcher/AUTHORS @@ -0,0 +1,6 @@ +# Below is a list of people and organizations that have contributed +# to the project. Names should be added to the list like so: +# +# Name/Organization + +Google Inc. diff --git a/pkgs/browser_launcher/CHANGELOG.md b/pkgs/browser_launcher/CHANGELOG.md new file mode 100644 index 000000000..f37505648 --- /dev/null +++ b/pkgs/browser_launcher/CHANGELOG.md @@ -0,0 +1,71 @@ +## 1.1.3 + +- Move to `dart-lang/tools` monorepo. + +## 1.1.2 + +- Require Dart 3.4 +- Log errors from chrome +- Allow tests to detect headless-only environment (for CI). +- Add extra flags that may help disable additional throttling in background tabs +- Add `--use-mock-keychain` flag to avoid blocking dialog on MacOS. + +## 1.1.1 + +- Populate the pubspec `repository` field. + +## 1.1.0 + +- Add optional `signIn` argument to `startWithDebugPort`. + To be used together with `user-data-dir` to start a Chrome + window signed in to the default profile with extensions enabled. +- Enable the `avoid_dynamic_calls` lint. + +## 1.0.0 + +- Migrate to null-safety. + +## 0.1.10 + +- Support `webkit_inspection_protocol` version `^1.0.0`. + +## 0.1.9 + +- Add support for Chrome executables in `CHROME_PATH`. + +## 0.1.8 + +- Log `STDERR` on Chrome launch failure. + +## 0.1.7 + +- Widen the dependency range on `package:webkit_inspection_protocol`. + +## 0.1.6 + +- Update lower Dart SDK requirement to `2.2.0`. +- Update the dependency range on `package:webkit_inspection_protocol`. + +## 0.1.5 + +- Add a parameter to use a specified user-data-dir instead of a system temp. + +## 0.1.4 + +- Start Chrome maximized. + +## 0.1.3 + +- widen the version constraint on `package:webkit_inspection_protocol` + +## 0.1.2 + +- lower min sdk version to match Flutter stable + +## 0.1.1 + +- added example + +## 0.1.0 + +- initial release diff --git a/pkgs/browser_launcher/LICENSE b/pkgs/browser_launcher/LICENSE new file mode 100644 index 000000000..767000764 --- /dev/null +++ b/pkgs/browser_launcher/LICENSE @@ -0,0 +1,27 @@ +Copyright 2019, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/pkgs/browser_launcher/README.md b/pkgs/browser_launcher/README.md new file mode 100644 index 000000000..f6398b63c --- /dev/null +++ b/pkgs/browser_launcher/README.md @@ -0,0 +1,8 @@ +[![Build Status](https://github.com/dart-lang/tools/actions/workflows/browser_launcher.yaml/badge.svg)](https://github.com/dart-lang/tools/actions/workflows/browser_launcher.yaml) +[![pub package](https://img.shields.io/pub/v/browser_launcher.svg)](https://pub.dev/packages/browser_launcher) +[![package publisher](https://img.shields.io/pub/publisher/browser_launcher.svg)](https://pub.dev/packages/browser_launcher/publisher) + +Provides a standardized way to launch web browsers. + +Currently, Chrome is the only supported browser; support for other browsers may +be added in the future. diff --git a/pkgs/browser_launcher/analysis_options.yaml b/pkgs/browser_launcher/analysis_options.yaml new file mode 100644 index 000000000..9125368fd --- /dev/null +++ b/pkgs/browser_launcher/analysis_options.yaml @@ -0,0 +1,32 @@ +# https://dart.dev/guides/language/analysis-options +include: package:dart_flutter_team_lints/analysis_options.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +linter: + rules: + - avoid_bool_literals_in_conditional_expressions + - avoid_classes_with_only_static_members + - avoid_private_typedef_functions + - avoid_redundant_argument_values + - avoid_returning_this + - avoid_unused_constructor_parameters + - avoid_void_async + - cancel_subscriptions + - join_return_with_assignment + - literal_only_boolean_expressions + - missing_whitespace_between_adjacent_strings + - no_adjacent_strings_in_list + - no_runtimeType_toString + - prefer_const_declarations + - prefer_expression_function_bodies + - prefer_final_locals + - require_trailing_commas + - unnecessary_raw_strings + - use_if_null_to_convert_nulls_to_bools + - use_raw_strings + - use_string_buffers diff --git a/pkgs/browser_launcher/example/main.dart b/pkgs/browser_launcher/example/main.dart new file mode 100644 index 000000000..6814bceff --- /dev/null +++ b/pkgs/browser_launcher/example/main.dart @@ -0,0 +1,31 @@ +// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:browser_launcher/browser_launcher.dart'; + +const _googleUrl = 'https://www.google.com/'; +const _googleImagesUrl = 'https://www.google.com/imghp?hl=en'; + +Future main() async { + // Launches a chrome browser with two tabs open to [_googleUrl] and + // [_googleImagesUrl]. + await Chrome.start([_googleUrl, _googleImagesUrl]); + print('launched Chrome'); + + // Pause briefly before opening Chrome with a debug port. + await Future.delayed(const Duration(seconds: 3)); + + // Launches a chrome browser open to [_googleUrl]. Since we are launching with + // a debug port, we will use a variety of different launch configurations, + // such as launching in a new browser. + final chrome = await Chrome.startWithDebugPort([_googleUrl], debugPort: 8888); + print('launched Chrome with a debug port'); + + // When running this dart code, observe that the browser stays open for 3 + // seconds before we close it. + await Future.delayed(const Duration(seconds: 3)); + + await chrome.close(); + print('closed Chrome'); +} diff --git a/pkgs/browser_launcher/lib/browser_launcher.dart b/pkgs/browser_launcher/lib/browser_launcher.dart new file mode 100644 index 000000000..7d85dadce --- /dev/null +++ b/pkgs/browser_launcher/lib/browser_launcher.dart @@ -0,0 +1,5 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +export 'src/chrome.dart'; diff --git a/pkgs/browser_launcher/lib/src/chrome.dart b/pkgs/browser_launcher/lib/src/chrome.dart new file mode 100644 index 000000000..8ee14f05d --- /dev/null +++ b/pkgs/browser_launcher/lib/src/chrome.dart @@ -0,0 +1,237 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; + +import 'package:logging/logging.dart'; +import 'package:path/path.dart' as p; +import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; + +const _chromeEnvironments = ['CHROME_EXECUTABLE', 'CHROME_PATH']; +const _linuxExecutable = 'google-chrome'; +const _macOSExecutable = + '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'; +const _windowsExecutable = r'Google\Chrome\Application\chrome.exe'; + +String get _executable { + for (var chromeEnv in _chromeEnvironments) { + if (Platform.environment.containsKey(chromeEnv)) { + return Platform.environment[chromeEnv]!; + } + } + if (Platform.isLinux) return _linuxExecutable; + if (Platform.isMacOS) return _macOSExecutable; + if (Platform.isWindows) { + final windowsPrefixes = [ + Platform.environment['LOCALAPPDATA'], + Platform.environment['PROGRAMFILES'], + Platform.environment['PROGRAMFILES(X86)'], + ]; + return p.join( + windowsPrefixes.firstWhere( + (prefix) { + if (prefix == null) return false; + final path = p.join(prefix, _windowsExecutable); + return File(path).existsSync(); + }, + orElse: () => '.', + )!, + _windowsExecutable, + ); + } + throw StateError('Unexpected platform type.'); +} + +/// Manager for an instance of Chrome. +class Chrome { + static final _logger = Logger('BROWSER_LAUNCHER.CHROME'); + + Chrome._( + this.debugPort, + this.chromeConnection, { + Process? process, + Directory? dataDir, + this.deleteDataDir = false, + }) : _process = process, + _dataDir = dataDir; + + final int debugPort; + final ChromeConnection chromeConnection; + final Process? _process; + final Directory? _dataDir; + final bool deleteDataDir; + + /// Connects to an instance of Chrome with an open debug port. + static Future fromExisting(int port) async => + _connect(Chrome._(port, ChromeConnection('localhost', port))); + + /// Starts Chrome with the given arguments and a specific port. + /// + /// Each url in [urls] will be loaded in a separate tab. + /// + /// If [userDataDir] is `null`, a new temp directory will be + /// passed to chrome as a user data directory. Chrome will + /// start without sign in and with extensions disabled. + /// + /// If [userDataDir] is not `null`, it will be passed to chrome + /// as a user data directory. Chrome will start signed into + /// the default profile with extensions enabled if [signIn] + /// is also true. + static Future startWithDebugPort( + List urls, { + int debugPort = 0, + bool headless = false, + String? userDataDir, + bool signIn = false, + }) async { + Directory dataDir; + if (userDataDir == null) { + signIn = false; + dataDir = Directory.systemTemp.createTempSync(); + } else { + dataDir = Directory(userDataDir); + } + final port = debugPort == 0 ? await findUnusedPort() : debugPort; + final args = [ + // Using a tmp directory ensures that a new instance of chrome launches + // allowing for the remote debug port to be enabled. + '--user-data-dir=${dataDir.path}', + '--remote-debugging-port=$port', + // When the DevTools has focus we don't want to slow down the application. + '--disable-background-timer-throttling', + '--disable-blink-features=TimerThrottlingForBackgroundTabs', + '--disable-features=IntensiveWakeUpThrottling', + // Since we are using a temp profile, disable features that slow the + // Chrome launch. + if (!signIn) '--disable-extensions', + '--disable-popup-blocking', + if (!signIn) '--bwsi', + '--no-first-run', + '--no-default-browser-check', + '--disable-default-apps', + '--disable-translate', + '--start-maximized', + // When running on MacOS, Chrome may open system dialogs requesting + // credentials. This uses a mock keychain to avoid that dialog from + // blocking. + '--use-mock-keychain', + ]; + if (headless) { + args.add('--headless'); + } + + final process = await _startProcess(urls, args: args); + + // Wait until the DevTools are listening before trying to connect. + final errorLines = []; + try { + final stderr = process.stderr.asBroadcastStream(); + stderr + .transform(utf8.decoder) + .transform(const LineSplitter()) + .listen(_logger.fine); + + await stderr + .transform(utf8.decoder) + .transform(const LineSplitter()) + .firstWhere((line) { + errorLines.add(line); + return line.startsWith('DevTools listening'); + }).timeout(const Duration(seconds: 60)); + } on TimeoutException catch (e, s) { + _logger.severe('Unable to connect to Chrome DevTools', e, s); + throw Exception( + 'Unable to connect to Chrome DevTools: $e.\n\n' + 'Chrome STDERR:\n${errorLines.join('\n')}', + ); + } + + return _connect( + Chrome._( + port, + ChromeConnection('localhost', port), + process: process, + dataDir: dataDir, + deleteDataDir: userDataDir == null, + ), + ); + } + + /// Starts Chrome with the given arguments. + /// + /// Each url in [urls] will be loaded in a separate tab. + static Future start( + List urls, { + List args = const [], + }) async => + await _startProcess(urls, args: args); + + static Future _startProcess( + List urls, { + List args = const [], + }) async { + final processArgs = args.toList()..addAll(urls); + return await Process.start(_executable, processArgs); + } + + static Future _connect(Chrome chrome) async { + // The connection is lazy. Try a simple call to make sure the provided + // connection is valid. + try { + await chrome.chromeConnection.getTabs(); + } catch (e) { + await chrome.close(); + throw ChromeError( + 'Unable to connect to Chrome debug port: ${chrome.debugPort}\n $e', + ); + } + return chrome; + } + + Future close() async { + chromeConnection.close(); + _process?.kill(ProcessSignal.sigkill); + await _process?.exitCode; + try { + // Chrome starts another process as soon as it dies that modifies the + // profile information. Give it some time before attempting to delete + // the directory. + if (deleteDataDir) { + await Future.delayed(const Duration(milliseconds: 500)); + await _dataDir?.delete(recursive: true); + } + } catch (_) { + // Silently fail if we can't clean up the profile information. + // It is a system tmp directory so it should get cleaned up eventually. + } + } +} + +class ChromeError extends Error { + final String details; + ChromeError(this.details); + + @override + String toString() => 'ChromeError: $details'; +} + +/// Returns a port that is probably, but not definitely, not in use. +/// +/// This has a built-in race condition: another process may bind this port at +/// any time after this call has returned. +Future findUnusedPort() async { + int port; + ServerSocket socket; + try { + socket = + await ServerSocket.bind(InternetAddress.loopbackIPv6, 0, v6Only: true); + } on SocketException { + socket = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0); + } + port = socket.port; + await socket.close(); + return port; +} diff --git a/pkgs/browser_launcher/pubspec.yaml b/pkgs/browser_launcher/pubspec.yaml new file mode 100644 index 000000000..1647d5251 --- /dev/null +++ b/pkgs/browser_launcher/pubspec.yaml @@ -0,0 +1,16 @@ +name: browser_launcher +version: 1.1.3 +description: Provides a standardized way to launch web browsers for testing and tools. +repository: https://github.com/dart-lang/tools/tree/main/pkgs/browser_launcher + +environment: + sdk: ^3.4.0 + +dependencies: + logging: ^1.0.0 + path: ^1.8.0 + webkit_inspection_protocol: ^1.0.0 + +dev_dependencies: + dart_flutter_team_lints: ^3.0.0 + test: ^1.17.3 diff --git a/pkgs/browser_launcher/test/chrome_test.dart b/pkgs/browser_launcher/test/chrome_test.dart new file mode 100644 index 000000000..92437681a --- /dev/null +++ b/pkgs/browser_launcher/test/chrome_test.dart @@ -0,0 +1,226 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@OnPlatform({'windows': Skip('appveyor is not setup to install Chrome')}) +library; + +import 'dart:async'; +import 'dart:io'; + +import 'package:browser_launcher/src/chrome.dart'; +import 'package:logging/logging.dart'; +import 'package:test/test.dart'; +import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; + +const _headlessOnlyEnvironment = 'HEADLESS_ONLY'; + +bool get headlessOnlyEnvironment => + Platform.environment[_headlessOnlyEnvironment] == 'true'; + +void _configureLogging(bool verbose) { + Logger.root.level = verbose ? Level.ALL : Level.INFO; + Logger.root.onRecord.listen((record) { + print('${record.level.name}: ${record.time}: ${record.message}'); + }); +} + +void main() { + Chrome? chrome; + + // Pass 'true' for debugging. + _configureLogging(false); + + Future getTab(String url) => chrome!.chromeConnection.getTab( + (t) => t.url.contains(url), + retryFor: const Duration(seconds: 5), + ); + + Future?> getTabs() => chrome!.chromeConnection.getTabs( + retryFor: const Duration(seconds: 5), + ); + + Future connectToTab(String url) async { + final tab = await getTab(url); + expect(tab, isNotNull); + return tab!.connect(); + } + + Future openTab(String url) => + chrome!.chromeConnection.getUrl(_openTabUrl(url)); + + Future launchChromeWithDebugPort({ + int port = 0, + String? userDataDir, + bool signIn = false, + bool headless = false, + }) async { + chrome = await Chrome.startWithDebugPort( + [_googleUrl], + debugPort: port, + userDataDir: userDataDir, + signIn: signIn, + headless: headless, + ); + } + + Future launchChrome({bool headless = false}) async { + await Chrome.start([_googleUrl], args: [if (headless) '--headless']); + } + + final headlessModes = [ + true, + if (!headlessOnlyEnvironment) false, + ]; + + for (var headless in headlessModes) { + group('(headless: $headless)', () { + group('chrome with temp data dir', () { + tearDown(() async { + await chrome?.close(); + chrome = null; + }); + + test('can launch chrome', () async { + await launchChrome(headless: headless); + expect(chrome, isNull); + }); + + test('can launch chrome with debug port', () async { + await launchChromeWithDebugPort(headless: headless); + expect(chrome, isNotNull); + }); + + test('has a working debugger', () async { + await launchChromeWithDebugPort(headless: headless); + final tabs = await getTabs(); + expect( + tabs, + contains( + const TypeMatcher() + .having((t) => t.url, 'url', _googleUrl), + ), + ); + }); + + test('uses open debug port if provided port is 0', () async { + await launchChromeWithDebugPort(headless: headless); + expect(chrome!.debugPort, isNot(equals(0))); + }); + + test('can provide a specific debug port', () async { + final port = await findUnusedPort(); + await launchChromeWithDebugPort(port: port, headless: headless); + expect(chrome!.debugPort, port); + }); + }); + + group('chrome with user data dir', () { + late Directory dataDir; + const waitMilliseconds = Duration(milliseconds: 100); + + for (var signIn in [false, true]) { + group('and signIn = $signIn', () { + setUp(() { + dataDir = Directory.systemTemp.createTempSync(_userDataDirName); + }); + + tearDown(() async { + await chrome?.close(); + chrome = null; + + var attempts = 0; + while (true) { + try { + attempts++; + await Future.delayed(waitMilliseconds); + dataDir.deleteSync(recursive: true); + break; + } catch (_) { + if (attempts > 3) rethrow; + } + } + }); + + test('can launch with debug port', () async { + await launchChromeWithDebugPort( + userDataDir: dataDir.path, + signIn: signIn, + headless: headless, + ); + expect(chrome, isNotNull); + }); + + test('has a working debugger', () async { + await launchChromeWithDebugPort( + userDataDir: dataDir.path, + signIn: signIn, + headless: headless, + ); + final tabs = await getTabs(); + expect( + tabs, + contains( + const TypeMatcher() + .having((t) => t.url, 'url', _googleUrl), + ), + ); + }); + + test( + 'has correct profile path', + () async { + await launchChromeWithDebugPort( + userDataDir: dataDir.path, + signIn: signIn, + headless: headless, + ); + await openTab(_chromeVersionUrl); + final wipConnection = await connectToTab(_chromeVersionUrl); + await wipConnection.debugger.enable(); + await wipConnection.runtime.enable(); + final result = await _evaluate( + wipConnection.page, + "document.getElementById('profile_path').textContent", + ); + expect(result, contains(_userDataDirName)); + }, + // Note: When re-enabling, skip for headless mode because headless + // mode does not allow chrome: urls. + skip: 'https://github.com/dart-lang/sdk/issues/52357', + ); + }); + } + }); + }); + } +} + +String _openTabUrl(String url) => '/json/new?$url'; + +Future _evaluate(WipPage page, String expression) async { + String? result; + const stopInSeconds = Duration(seconds: 5); + const waitMilliseconds = Duration(milliseconds: 100); + final stopTime = DateTime.now().add(stopInSeconds); + + while (result == null && DateTime.now().isBefore(stopTime)) { + await Future.delayed(waitMilliseconds); + try { + final wipResponse = await page.sendCommand( + 'Runtime.evaluate', + params: {'expression': expression}, + ); + final response = wipResponse.json['result'] as Map; + final value = (response['result'] as Map)['value']; + result = value?.toString(); + } catch (_) { + return null; + } + } + return result; +} + +const _googleUrl = 'https://www.google.com/'; +const _chromeVersionUrl = 'chrome://version/'; +const _userDataDirName = 'data dir'; diff --git a/pkgs/clock/.gitignore b/pkgs/clock/.gitignore new file mode 100644 index 000000000..63fe85d83 --- /dev/null +++ b/pkgs/clock/.gitignore @@ -0,0 +1,5 @@ +.packages +.pub/ +.dart_tool/ +build/ +pubspec.lock diff --git a/pkgs/clock/AUTHORS b/pkgs/clock/AUTHORS new file mode 100644 index 000000000..e8063a8cd --- /dev/null +++ b/pkgs/clock/AUTHORS @@ -0,0 +1,6 @@ +# Below is a list of people and organizations that have contributed +# to the project. Names should be added to the list like so: +# +# Name/Organization + +Google Inc. diff --git a/pkgs/clock/CHANGELOG.md b/pkgs/clock/CHANGELOG.md new file mode 100644 index 000000000..f372adaa1 --- /dev/null +++ b/pkgs/clock/CHANGELOG.md @@ -0,0 +1,52 @@ +## 1.1.2 + +* Require Dart 3.4 +* Move to `dart-lang/tools` monorepo. + +## 1.1.1 + +* Switch to using `package:lints`. +* Populate the pubspec `repository` field. + +## 1.1.0 + +* Update SDK constraints to `>=2.12.0 <3.0.0`. +* Update to null safety. + +## 1.0.1 + +* Update to lowercase Dart core library constants. + +## 1.0.0 + +This release contains the `Clock` class that was defined in [`quiver`][]. It's +backwards-compatible with the `quiver` version, and *mostly* +backwards-compatible with the old version of the `clock` package. + +[`quiver`]: https://pub.dartlang.org/packages/quiver + +### New Features + +* A top-level `clock` field has been added that provides a default `Clock` + implementation. It can be controlled by the `withClock()` function. It should + generally be used in preference to manual dependency-injection, since it will + work with the [`fake_async`][] package. + +* A `Clock.stopwatch()` method has been added that creates a `Stopwatch` that + uses the clock as its source of time. + +[`fake_async`]: https://pub.dartlang.org/packages/fake_async + +### Changes Relative to `clock` 0.1 + +* The top-level `new` getter and `getStopwatch()` methods are deprecated. + `clock.new()` and `clock.stopwatch()` should be used instead. + +* `Clock.getStopwatch()` is deprecated. `Clock.stopwatch()` should be used instead. + +* The `isFinal` argument to `withClock()` is deprecated. + +* `new Clock()` now takes an optional positional argument that returns the + current time as a `DateTime` instead of its old arguments. + +* `Clock.now()` is now a method rather than a getter. diff --git a/pkgs/clock/LICENSE b/pkgs/clock/LICENSE new file mode 100644 index 000000000..7a4a3ea24 --- /dev/null +++ b/pkgs/clock/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/pkgs/clock/README.md b/pkgs/clock/README.md new file mode 100644 index 000000000..dccdc0755 --- /dev/null +++ b/pkgs/clock/README.md @@ -0,0 +1,52 @@ +[![Build Status](https://github.com/dart-lang/tools/actions/workflows/clock.yaml/badge.svg)](https://github.com/dart-lang/tools/actions/workflows/clock.yaml) +[![pub package](https://img.shields.io/pub/v/clock.svg)](https://pub.dev/packages/clock) +[![package publisher](https://img.shields.io/pub/publisher/clock.svg)](https://pub.dev/packages/clock/publisher) + +This package provides a [`Clock`][] class which encapsulates the notion of the +"current time" and provides easy access to points relative to the current time. +Different `Clock`s can have a different notion of the current time, and the +default top-level [`clock`][]'s notion can be swapped out to reliably test +timing-dependent code. + +[`Clock`]: https://pub.dev/documentation/clock/latest/clock/Clock-class.html +[`clock`]: https://pub.dev/documentation/clock/latest/clock/clock.html + +For example, you can use `clock` in your libraries like this: + +```dart +// run_with_timing.dart +import 'package:clock/clock.dart'; + +/// Runs [callback] and prints how long it took. +T runWithTiming(T Function() callback) { + var stopwatch = clock.stopwatch()..start(); + var result = callback(); + print('It took ${stopwatch.elapsed}!'); + return result; +} +``` + +...and then test your code using the [`fake_async`][] package, which +automatically overrides the current clock: + +[`fake_async`]: https://pub.dartlang.org/packages/fake_async + +```dart +// run_with_timing_test.dart +import 'run_with_timing.dart'; + +import 'package:fake_async/fake_async.dart'; +import 'package:test/test.dart'; + +void main() { + test('runWithTiming() prints the elapsed time', () { + FakeAsync().run((async) { + expect(() { + runWithTiming(() { + async.elapse(Duration(seconds: 10)); + }); + }, prints('It took 0:00:10.000000!')); + }); + }); +} +``` diff --git a/pkgs/clock/analysis_options.yaml b/pkgs/clock/analysis_options.yaml new file mode 100644 index 000000000..9ee7c2b6a --- /dev/null +++ b/pkgs/clock/analysis_options.yaml @@ -0,0 +1,14 @@ +# https://dart.dev/guides/language/analysis-options +include: package:dart_flutter_team_lints/analysis_options.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +linter: + rules: + - avoid_private_typedef_functions + - avoid_redundant_argument_values + - use_super_parameters diff --git a/pkgs/clock/lib/clock.dart b/pkgs/clock/lib/clock.dart new file mode 100644 index 000000000..755789e77 --- /dev/null +++ b/pkgs/clock/lib/clock.dart @@ -0,0 +1,34 @@ +// Copyright 2013 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'src/default.dart'; + +export 'src/clock.dart'; +export 'src/default.dart'; + +/// Returns current time. +@Deprecated('Pass around an instance of Clock instead.') +typedef TimeFunction = DateTime Function(); + +/// Returns the current system time. +@Deprecated('Use new DateTime.now() instead.') +DateTime systemTime() => DateTime.now(); + +/// Returns the current time as reported by [clock]. +@Deprecated('Use clock.now() instead.') +DateTime get now => clock.now(); + +/// Returns a stopwatch that uses the current time as reported by [clock]. +@Deprecated('Use clock.stopwatch() instead.') +Stopwatch getStopwatch() => clock.stopwatch(); diff --git a/pkgs/clock/lib/src/clock.dart b/pkgs/clock/lib/src/clock.dart new file mode 100644 index 000000000..f6f47deb1 --- /dev/null +++ b/pkgs/clock/lib/src/clock.dart @@ -0,0 +1,182 @@ +// Copyright 2018 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import '../clock.dart'; +import 'stopwatch.dart'; +import 'utils.dart'; + +/// A provider for the "current time" and points relative to the current time. +/// +/// This class is designed with testability in mind. The current point in time +/// (or [now()]) is defined by a function that returns a [DateTime]. By +/// supplying your own time function or using [Clock.fixed], you can control +/// exactly what time a [Clock] returns and base your test expectations on that. +/// +/// Most users should use the top-level [clock] field, which provides access to +/// a default implementation of [Clock] which can be overridden using +/// [withClock]. +class Clock { + /// The function that's called to determine this clock's notion of the current + /// time. + final DateTime Function() _time; + + /// Creates a clock based on the given [currentTime], or on the system clock + /// by default. + // ignore: deprecated_member_use_from_same_package + const Clock([DateTime Function() currentTime = systemTime]) + : _time = currentTime; + + /// Creates [Clock] that always considers the current time to be [time]. + Clock.fixed(DateTime time) : _time = (() => time); + + /// Returns current time. + DateTime now() => _time(); + + /// Returns the point in time [Duration] amount of time ago. + DateTime agoBy(Duration duration) => now().subtract(duration); + + /// Returns the point in time [Duration] amount of time from now. + DateTime fromNowBy(Duration duration) => now().add(duration); + + /// Returns the point in time that's given amount of time ago. + /// + /// The amount of time is the sum of the individual parts. + DateTime ago( + {int days = 0, + int hours = 0, + int minutes = 0, + int seconds = 0, + int milliseconds = 0, + int microseconds = 0}) => + agoBy(Duration( + days: days, + hours: hours, + minutes: minutes, + seconds: seconds, + milliseconds: milliseconds, + microseconds: microseconds)); + + /// Returns the point in time that's given amount of time from now. + /// + /// The amount of time is the sum of the individual parts. + DateTime fromNow( + {int days = 0, + int hours = 0, + int minutes = 0, + int seconds = 0, + int milliseconds = 0, + int microseconds = 0}) => + fromNowBy(Duration( + days: days, + hours: hours, + minutes: minutes, + seconds: seconds, + milliseconds: milliseconds, + microseconds: microseconds)); + + /// Return the point in time [microseconds] ago. + DateTime microsAgo(int microseconds) => ago(microseconds: microseconds); + + /// Return the point in time [microseconds] from now. + DateTime microsFromNow(int microseconds) => + fromNow(microseconds: microseconds); + + /// Return the point in time [milliseconds] ago. + DateTime millisAgo(int milliseconds) => ago(milliseconds: milliseconds); + + /// Return the point in time [milliseconds] from now. + DateTime millisFromNow(int milliseconds) => + fromNow(milliseconds: milliseconds); + + /// Return the point in time [seconds] ago. + DateTime secondsAgo(int seconds) => ago(seconds: seconds); + + /// Return the point in time [seconds] from now. + DateTime secondsFromNow(int seconds) => fromNow(seconds: seconds); + + /// Return the point in time [minutes] ago. + DateTime minutesAgo(int minutes) => ago(minutes: minutes); + + /// Return the point in time [minutes] from now. + DateTime minutesFromNow(int minutes) => fromNow(minutes: minutes); + + /// Return the point in time [hours] ago. + DateTime hoursAgo(int hours) => ago(hours: hours); + + /// Return the point in time [hours] from now. + DateTime hoursFromNow(int hours) => fromNow(hours: hours); + + /// Return the point in time [days] ago. + DateTime daysAgo(int days) => ago(days: days); + + /// Return the point in time [days] from now. + DateTime daysFromNow(int days) => fromNow(days: days); + + /// Return the point in time [weeks] ago. + DateTime weeksAgo(int weeks) => ago(days: 7 * weeks); + + /// Return the point in time [weeks] from now. + DateTime weeksFromNow(int weeks) => fromNow(days: 7 * weeks); + + /// Return the point in time [months] ago on the same date. + /// + /// If the current day of the month isn't valid in the new month, the nearest + /// valid day in the new month will be used. + DateTime monthsAgo(int months) { + var time = now(); + var month = (time.month - months - 1) % 12 + 1; + var year = time.year - (months + 12 - time.month) ~/ 12; + var day = clampDayOfMonth(year: year, month: month, day: time.day); + return DateTime(year, month, day, time.hour, time.minute, time.second, + time.millisecond); + } + + /// Return the point in time [months] from now on the same date. + /// + /// If the current day of the month isn't valid in the new month, the nearest + /// valid day in the new month will be used. + DateTime monthsFromNow(int months) { + var time = now(); + var month = (time.month + months - 1) % 12 + 1; + var year = time.year + (months + time.month - 1) ~/ 12; + var day = clampDayOfMonth(year: year, month: month, day: time.day); + return DateTime(year, month, day, time.hour, time.minute, time.second, + time.millisecond); + } + + /// Return the point in time [years] ago on the same date. + /// + /// If the current day of the month isn't valid in the new year, the nearest + /// valid day in the original month will be used. + DateTime yearsAgo(int years) { + var time = now(); + var year = time.year - years; + var day = clampDayOfMonth(year: year, month: time.month, day: time.day); + return DateTime(year, time.month, day, time.hour, time.minute, time.second, + time.millisecond); + } + + /// Return the point in time [years] from now on the same date. + /// + /// If the current day of the month isn't valid in the new year, the nearest + /// valid day in the original month will be used. + DateTime yearsFromNow(int years) => yearsAgo(-years); + + /// Returns a new stopwatch that uses the current time as reported by `this`. + Stopwatch stopwatch() => ClockStopwatch(this); + + /// Returns a new stopwatch that uses the current time as reported by `this`. + @Deprecated('Use stopwatch() instead.') + Stopwatch getStopwatch() => stopwatch(); +} diff --git a/pkgs/clock/lib/src/default.dart b/pkgs/clock/lib/src/default.dart new file mode 100644 index 000000000..2a46b9f8b --- /dev/null +++ b/pkgs/clock/lib/src/default.dart @@ -0,0 +1,54 @@ +// Copyright 2018 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; + +import 'clock.dart'; + +/// The key for the [Zone] value that controls the current implementation of +/// [clock]. +final _clockKey = Object(); + +/// The key for the [Zone] value that controls whether nested zones can override +/// [clock]. +final _isFinalKey = Object(); + +/// The default implementation of [clock] for the current [Zone]. +/// +/// This defaults to the system clock. It can be set within a zone using +/// [withClock]. +Clock get clock => Zone.current[_clockKey] as Clock? ?? const Clock(); + +/// Runs [callback] with the given value for the top-level [clock] field. +/// +/// This is [Zone]-scoped, so asynchronous callbacks spawned within [callback] +/// will also use the new value for [clock]. +/// +// ignore: deprecated_member_use_from_same_package +/// If [isFinal] is `true`, calls to [withClock] within [callback] will throw a +/// [StateError]. However, this parameter is deprecated and should be avoided. +T withClock( + Clock clock, + T Function() callback, { + @Deprecated('This parameter is deprecated and should be avoided') + bool isFinal = false, +}) { + if ((Zone.current[_isFinalKey] ?? false) == true) { + throw StateError( + 'Cannot call withClock() within a call to withClock(isFinal = true).'); + } + + return runZoned(callback, + zoneValues: {_clockKey: clock, _isFinalKey: isFinal}); +} diff --git a/pkgs/clock/lib/src/stopwatch.dart b/pkgs/clock/lib/src/stopwatch.dart new file mode 100644 index 000000000..93fe1abc4 --- /dev/null +++ b/pkgs/clock/lib/src/stopwatch.dart @@ -0,0 +1,73 @@ +// Copyright 2018 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'clock.dart'; + +/// The system's timer frequency in Hz. +/// +/// We can't really know how frequently the clock is updated, and that may not +/// even make sense for some implementations, so we just pretend we follow the +/// system's frequency. +final _frequency = Stopwatch().frequency; + +/// A stopwatch that gets its notion of the current time from a [Clock]. +class ClockStopwatch implements Stopwatch { + /// The provider for this stopwatch's notion of the current time. + final Clock _clock; + + /// The number of elapsed microseconds that have been recorded from previous + /// runs of this stopwatch. + /// + /// This doesn't include the time between [_start] and the current time. + var _elapsed = 0; + + /// The point at which [start] was called most recently, or `null` if this + /// isn't active. + DateTime? _start; + + ClockStopwatch(this._clock); + + @override + int get frequency => _frequency; + @override + int get elapsedTicks => (elapsedMicroseconds * frequency) ~/ 1000000; + @override + Duration get elapsed => Duration(microseconds: elapsedMicroseconds); + @override + int get elapsedMilliseconds => elapsedMicroseconds ~/ 1000; + @override + bool get isRunning => _start != null; + + @override + int get elapsedMicroseconds => + _elapsed + + (_start == null ? 0 : _clock.now().difference(_start!).inMicroseconds); + + @override + void start() { + _start ??= _clock.now(); + } + + @override + void stop() { + _elapsed = elapsedMicroseconds; + _start = null; + } + + @override + void reset() { + _elapsed = 0; + if (_start != null) _start = _clock.now(); + } +} diff --git a/pkgs/clock/lib/src/utils.dart b/pkgs/clock/lib/src/utils.dart new file mode 100644 index 000000000..4301b099d --- /dev/null +++ b/pkgs/clock/lib/src/utils.dart @@ -0,0 +1,59 @@ +// Copyright 2018 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This code is copied from quiver. We don't take on an explicit dependency +// because quiver is very large and the amount of code we use from it is very +// small. + +/// The number of days in each month. +/// +/// This array uses 1-based month numbers, i.e. January is the 1-st element in +/// the array, not the 0-th. +const _daysInMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + +/// Returns the number of days in the specified month. +/// +/// This function assumes the use of the Gregorian calendar or the proleptic +/// Gregorian calendar. +int daysInMonth(int year, int month) => + (month == DateTime.february && isLeapYear(year)) ? 29 : _daysInMonth[month]; + +/// Returns true if [year] is a leap year. +/// +/// This implements the Gregorian calendar leap year rules wherein a year is +/// considered to be a leap year if it is divisible by 4, excepting years +/// divisible by 100, but including years divisible by 400. +/// +/// This function assumes the use of the Gregorian calendar or the proleptic +/// Gregorian calendar. +bool isLeapYear(int year) => + year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); + +/// Takes a `date` that may be outside the allowed range of dates for a given +/// [month] in a given [year] and returns the closest date that is within the +/// allowed range. +/// +/// For example: +/// +/// February 31, 2013 => February 28, 2013 +/// +/// When jumping from month to month or from leap year to common year we may +/// end up in a month that has fewer days than the month we are jumping from. +/// In that case it is impossible to preserve the exact date. So we "clamp" the +/// date value to fit within the month. For example, jumping from March 31 one +/// month back takes us to February 28 (or 29 during a leap year), as February +/// doesn't have 31-st date. +int clampDayOfMonth( + {required int year, required int month, required int day}) => + day.clamp(1, daysInMonth(year, month)); diff --git a/pkgs/clock/pubspec.yaml b/pkgs/clock/pubspec.yaml new file mode 100644 index 000000000..2487fe778 --- /dev/null +++ b/pkgs/clock/pubspec.yaml @@ -0,0 +1,11 @@ +name: clock +version: 1.1.2 +description: A fakeable wrapper for dart:core clock APIs. +repository: https://github.com/dart-lang/tools/tree/main/pkgs/clock + +environment: + sdk: ^3.4.0 + +dev_dependencies: + dart_flutter_team_lints: ^3.0.0 + test: ^1.16.6 diff --git a/pkgs/clock/test/clock_test.dart b/pkgs/clock/test/clock_test.dart new file mode 100644 index 000000000..c457153df --- /dev/null +++ b/pkgs/clock/test/clock_test.dart @@ -0,0 +1,210 @@ +// Copyright 2013 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the 'License'); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an 'AS IS' BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:clock/clock.dart'; + +import 'package:test/test.dart'; + +import 'utils.dart'; + +void main() { + late Clock clock; + setUp(() { + clock = Clock.fixed(date(2013)); + }); + + test('should return a non-null value from system clock', () { + expect(const Clock().now(), isNotNull); + }); + + // This test may be flaky on certain systems. I ran it over 10 million + // cycles on my machine without any failures, but that's no guarantee. + test('should be close enough to system clock', () { + // At 10ms the test doesn't seem to be flaky. + var epsilon = 10; + expect(DateTime.now().difference(const Clock().now()).inMilliseconds.abs(), + lessThan(epsilon)); + expect(DateTime.now().difference(const Clock().now()).inMilliseconds.abs(), + lessThan(epsilon)); + }); + + test('should return time provided by a custom function', () { + var time = date(2013); + var fixedClock = Clock(() => time); + expect(fixedClock.now(), date(2013)); + + time = date(2014); + expect(fixedClock.now(), date(2014)); + }); + + test('should return fixed time', () { + expect(Clock.fixed(date(2013)).now(), date(2013)); + }); + + test('should return time Duration ago', () { + expect(clock.agoBy(const Duration(days: 366)), date(2012)); + }); + + test('should return time Duration from now', () { + expect(clock.fromNowBy(const Duration(days: 365)), date(2014)); + }); + + test('should return time parts ago', () { + expect( + clock.ago( + days: 1, + hours: 1, + minutes: 1, + seconds: 1, + milliseconds: 1, + microseconds: 1000), + DateTime(2012, 12, 30, 22, 58, 58, 998)); + }); + + test('should return time parts from now', () { + expect( + clock.fromNow( + days: 1, + hours: 1, + minutes: 1, + seconds: 1, + milliseconds: 1, + microseconds: 1000), + DateTime(2013, 1, 2, 1, 1, 1, 2)); + }); + + test('should return time micros ago', () { + expect(clock.microsAgo(1000), DateTime(2012, 12, 31, 23, 59, 59, 999)); + }); + + test('should return time micros from now', () { + expect(clock.microsFromNow(1000), DateTime(2013, 1, 1, 0, 0, 0, 1)); + }); + + test('should return time millis ago', () { + expect(clock.millisAgo(1000), DateTime(2012, 12, 31, 23, 59, 59)); + }); + + test('should return time millis from now', () { + expect(clock.millisFromNow(3), DateTime(2013, 1, 1, 0, 0, 0, 3)); + }); + + test('should return time seconds ago', () { + expect(clock.secondsAgo(10), DateTime(2012, 12, 31, 23, 59, 50)); + }); + + test('should return time seconds from now', () { + expect(clock.secondsFromNow(3), DateTime(2013, 1, 1, 0, 0, 3)); + }); + + test('should return time minutes ago', () { + expect(clock.minutesAgo(10), DateTime(2012, 12, 31, 23, 50)); + }); + + test('should return time minutes from now', () { + expect(clock.minutesFromNow(3), DateTime(2013, 1, 1, 0, 3)); + }); + + test('should return time hours ago', () { + expect(clock.hoursAgo(10), DateTime(2012, 12, 31, 14)); + }); + + test('should return time hours from now', () { + expect(clock.hoursFromNow(3), DateTime(2013, 1, 1, 3)); + }); + + test('should return time days ago', () { + expect(clock.daysAgo(10), date(2012, 12, 22)); + }); + + test('should return time days from now', () { + expect(clock.daysFromNow(3), date(2013, 1, 4)); + }); + + test('should return time months ago on the same date', () { + expect(clock.monthsAgo(1), date(2012, 12, 1)); + expect(clock.monthsAgo(2), date(2012, 11, 1)); + expect(clock.monthsAgo(3), date(2012, 10, 1)); + expect(clock.monthsAgo(4), date(2012, 9, 1)); + }); + + test('should return time months from now on the same date', () { + expect(clock.monthsFromNow(1), date(2013, 2, 1)); + expect(clock.monthsFromNow(2), date(2013, 3, 1)); + expect(clock.monthsFromNow(3), date(2013, 4, 1)); + expect(clock.monthsFromNow(4), date(2013, 5, 1)); + }); + + test('should go from 2013-05-31 to 2012-11-30', () { + expect(fixed(2013, 5, 31).monthsAgo(6), date(2012, 11, 30)); + }); + + test('should go from 2013-03-31 to 2013-02-28 (common year)', () { + expect(fixed(2013, 3, 31).monthsAgo(1), date(2013, 2, 28)); + }); + + test('should go from 2013-05-31 to 2013-02-28 (common year)', () { + expect(fixed(2013, 5, 31).monthsAgo(3), date(2013, 2, 28)); + }); + + test('should go from 2004-03-31 to 2004-02-29 (leap year)', () { + expect(fixed(2004, 3, 31).monthsAgo(1), date(2004, 2, 29)); + }); + + test('should go from 2013-03-31 to 2013-06-30', () { + expect(fixed(2013, 3, 31).monthsFromNow(3), date(2013, 6, 30)); + }); + + test('should go from 2003-12-31 to 2004-02-29 (common to leap)', () { + expect(fixed(2003, 12, 31).monthsFromNow(2), date(2004, 2, 29)); + }); + + test('should go from 2004-02-29 to 2003-02-28 by year', () { + expect(fixed(2004, 2, 29).yearsAgo(1), date(2003, 2, 28)); + }); + + test('should go from 2004-02-29 to 2003-02-28 by month', () { + expect(fixed(2004, 2, 29).monthsAgo(12), date(2003, 2, 28)); + }); + + test('should go from 2004-02-29 to 2005-02-28 by year', () { + expect(fixed(2004, 2, 29).yearsFromNow(1), date(2005, 2, 28)); + }); + + test('should go from 2004-02-29 to 2005-02-28 by month', () { + expect(fixed(2004, 2, 29).monthsFromNow(12), date(2005, 2, 28)); + }); + + test('should return time years ago on the same date', () { + expect(clock.yearsAgo(1), date(2012, 1, 1)); // leap year + expect(clock.yearsAgo(2), date(2011, 1, 1)); + expect(clock.yearsAgo(3), date(2010, 1, 1)); + expect(clock.yearsAgo(4), date(2009, 1, 1)); + expect(clock.yearsAgo(5), date(2008, 1, 1)); // leap year + expect(clock.yearsAgo(6), date(2007, 1, 1)); + expect(clock.yearsAgo(30), date(1983, 1, 1)); + expect(clock.yearsAgo(2013), date(0, 1, 1)); + }); + + test('should return time years from now on the same date', () { + expect(clock.yearsFromNow(1), date(2014, 1, 1)); + expect(clock.yearsFromNow(2), date(2015, 1, 1)); + expect(clock.yearsFromNow(3), date(2016, 1, 1)); + expect(clock.yearsFromNow(4), date(2017, 1, 1)); + expect(clock.yearsFromNow(5), date(2018, 1, 1)); + expect(clock.yearsFromNow(6), date(2019, 1, 1)); + expect(clock.yearsFromNow(30), date(2043, 1, 1)); + expect(clock.yearsFromNow(1000), date(3013, 1, 1)); + }); +} diff --git a/pkgs/clock/test/default_test.dart b/pkgs/clock/test/default_test.dart new file mode 100644 index 000000000..80acd15bb --- /dev/null +++ b/pkgs/clock/test/default_test.dart @@ -0,0 +1,84 @@ +// Copyright 2018 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the 'License'); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an 'AS IS' BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:clock/clock.dart'; + +import 'package:test/test.dart'; + +import 'utils.dart'; + +void main() { + test('the default clock returns the system time', () { + expect(DateTime.now().difference(clock.now()).inMilliseconds.abs(), + lessThan(100)); + }); + + group('withClock()', () { + group('overrides the clock', () { + test('synchronously', () { + var time = date(1990, 11, 8); + withClock(Clock(() => time), () { + expect(clock.now(), equals(time)); + time = date(2016, 6, 26); + expect(clock.now(), equals(time)); + }); + }); + + test('asynchronously', () { + var time = date(1990, 11, 8); + withClock(Clock.fixed(time), () { + expect(Future(() async { + expect(clock.now(), equals(time)); + }), completes); + }); + }); + + test('within another withClock() call', () { + var outerTime = date(1990, 11, 8); + withClock(Clock.fixed(outerTime), () { + expect(clock.now(), equals(outerTime)); + + var innerTime = date(2016, 11, 8); + withClock(Clock.fixed(innerTime), () { + expect(clock.now(), equals(innerTime)); + expect(Future(() async { + expect(clock.now(), equals(innerTime)); + }), completes); + }); + + expect(clock.now(), equals(outerTime)); + }); + }); + }); + + test("with isFinal: true doesn't allow nested calls", () { + var outerTime = date(1990, 11, 8); + withClock(Clock.fixed(outerTime), () { + expect(clock.now(), equals(outerTime)); + + expect(() => withClock(fixed(2016, 11, 8), neverCalledVoid), + throwsStateError); + + expect(clock.now(), equals(outerTime)); + // ignore: deprecated_member_use_from_same_package + }, isFinal: true); + }); + }); +} + +/// A wrapper for [neverCalled] that works around sdk#33015. +void Function() get neverCalledVoid { + var function = neverCalled; + return () => function(); +} diff --git a/pkgs/clock/test/stopwatch_test.dart b/pkgs/clock/test/stopwatch_test.dart new file mode 100644 index 000000000..e96c0f7d0 --- /dev/null +++ b/pkgs/clock/test/stopwatch_test.dart @@ -0,0 +1,171 @@ +// Copyright 2018 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the 'License'); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an 'AS IS' BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:clock/clock.dart'; + +import 'package:test/test.dart'; + +import 'utils.dart'; + +void main() { + test('returns the system frequency', () { + expect(fixed(1990, 11, 8).stopwatch().frequency, + equals(Stopwatch().frequency)); + }); + + group('before it starts', () { + late Stopwatch stopwatch; + setUp(() { + stopwatch = clock.stopwatch(); + }); + + test('is not running', () => expect(stopwatch.isRunning, isFalse)); + + test('stop() does nothing', () { + stopwatch.stop(); + expect(stopwatch.isRunning, isFalse); + expect(stopwatch.elapsed, equals(Duration.zero)); + }); + + group('reports no elapsed', () { + test('duration', () => expect(stopwatch.elapsed, equals(Duration.zero))); + test('ticks', () => expect(stopwatch.elapsedTicks, isZero)); + test('microseconds', () => expect(stopwatch.elapsedMicroseconds, isZero)); + test('milliseconds', () => expect(stopwatch.elapsedMilliseconds, isZero)); + }); + }); + + group('when 12345μs have elapsed', () { + late DateTime time; + late Clock clock; + late Stopwatch stopwatch; + setUp(() { + time = date(1990, 11, 8); + clock = Clock(() => time); + stopwatch = clock.stopwatch()..start(); + time = clock.microsFromNow(12345); + }); + + group('and the stopwatch is active', () { + test('is running', () { + expect(stopwatch.isRunning, isTrue); + }); + + test('reports more elapsed time', () { + time = clock.microsFromNow(54321); + expect(stopwatch.elapsedMicroseconds, equals(66666)); + }); + + test('start does nothing', () { + stopwatch.start(); + expect(stopwatch.isRunning, isTrue); + expect(stopwatch.elapsedMicroseconds, equals(12345)); + }); + + group('reset()', () { + setUp(() { + stopwatch.reset(); + }); + + test('sets the elapsed time to zero', () { + expect(stopwatch.elapsed, equals(Duration.zero)); + }); + + test('reports more elapsed time', () { + time = clock.microsFromNow(54321); + expect(stopwatch.elapsedMicroseconds, equals(54321)); + }); + }); + + group('reports elapsed', () { + test('duration', () { + expect( + stopwatch.elapsed, equals(const Duration(microseconds: 12345))); + }); + + test('ticks', () { + expect(stopwatch.elapsedTicks, + equals((Stopwatch().frequency * 12345) ~/ 1000000)); + }); + + test('microseconds', () { + expect(stopwatch.elapsedMicroseconds, equals(12345)); + }); + + test('milliseconds', () { + expect(stopwatch.elapsedMilliseconds, equals(12)); + }); + }); + }); + + group('and the stopwatch is inactive, reports that as', () { + setUp(() { + stopwatch.stop(); + }); + + test('is not running', () { + expect(stopwatch.isRunning, isFalse); + }); + + test("doesn't report more elapsed time", () { + time = clock.microsFromNow(54321); + expect(stopwatch.elapsedMicroseconds, equals(12345)); + }); + + test('start starts reporting more elapsed time', () { + stopwatch.start(); + expect(stopwatch.isRunning, isTrue); + time = clock.microsFromNow(54321); + expect(stopwatch.elapsedMicroseconds, equals(66666)); + }); + + group('reset()', () { + setUp(() { + stopwatch.reset(); + }); + + test('sets the elapsed time to zero', () { + expect(stopwatch.elapsed, equals(Duration.zero)); + }); + + test("doesn't report more elapsed time", () { + time = clock.microsFromNow(54321); + expect(stopwatch.elapsed, equals(Duration.zero)); + }); + }); + + group('reports elapsed', () { + test('duration', () { + expect( + stopwatch.elapsed, equals(const Duration(microseconds: 12345))); + }); + + test('ticks', () { + expect(stopwatch.elapsedTicks, + equals((Stopwatch().frequency * 12345) ~/ 1000000)); + }); + + test('microseconds', () { + expect(stopwatch.elapsedMicroseconds, equals(12345)); + }); + + test('milliseconds', () { + expect(stopwatch.elapsedMilliseconds, equals(12)); + }); + }); + }); + }, onPlatform: { + 'js': const Skip('Web does not have enough precision'), + }); +} diff --git a/pkgs/clock/test/utils.dart b/pkgs/clock/test/utils.dart new file mode 100644 index 000000000..ea4b1df68 --- /dev/null +++ b/pkgs/clock/test/utils.dart @@ -0,0 +1,25 @@ +// Copyright 2018 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:clock/clock.dart'; + +/// A utility function for tersely constructing a [DateTime] with no time +/// component. +DateTime date(int year, [int? month, int? day]) => + DateTime(year, month ?? 1, day ?? 1); + +/// Returns a clock that always returns a date with the given [year], [month], +/// and [day]. +Clock fixed(int year, [int? month, int? day]) => + Clock.fixed(date(year, month, day)); diff --git a/pkgs/csslib/.gitignore b/pkgs/csslib/.gitignore new file mode 100644 index 000000000..c107fc64c --- /dev/null +++ b/pkgs/csslib/.gitignore @@ -0,0 +1,4 @@ +.dart_tool +.packages +pubspec.lock +doc/api/ diff --git a/pkgs/csslib/CHANGELOG.md b/pkgs/csslib/CHANGELOG.md new file mode 100644 index 000000000..366c3a657 --- /dev/null +++ b/pkgs/csslib/CHANGELOG.md @@ -0,0 +1,233 @@ +## 1.0.2 + +- Require Dart 3.1 +- Move to `dart-lang/tools` monorepo. + +## 1.0.1 + +- Update `ExpressionsProcessor.processFont` to handle null expressions. +- Require Dart 3.0. + +## 1.0.0 + +- Rev to `1.0.0` (note however that there are no API changes from `0.17.x`). + +## 0.17.3 + +- Add markdown badges to the readme. +- Adopted `package:dart_flutter_team_lints` linting rules. +- Addressed an issue parsing font names not surrounded by quotes. +- Fixed the reported span for `Expression` nodes. +- Fixed a regression parsing declaration values containing spaces. +- Add support for `lh` and `rlh` units. +- Refactor the package example. +- Addressed an issue with the indent level of the `CssPrinter` output. +- Require Dart 2.19. + +## 0.17.2 + +- Fixed a crash caused by `min()`, `max()` and `clamp()` functions that contain + mathematical expressions. +- Add commas between PercentageTerms in keyframe rules. + +## 0.17.1 + +- Fix `Color.css` constructor when there are double values in the `rgba` string. + +## 0.17.0 + +- Migrate to null safety. +- `Font.merge` and `BoxEdge.merge` are now static methods instead of factory + constructors. +- Add a type on the `identList` argument to `TokenKind.matchList`. +- Remove workaround for https://github.com/dart-lang/sdk/issues/43136, which is + now fixed. + +## 0.16.2 + +- Added support for escape codes in identifiers. + +## 0.16.1 + +- Fixed a crash caused by parsing certain calc() expressions and variables names that contain numbers. + +## 0.16.0 + +- Removed support for the shadow-piercing comibnators `/deep/` and `>>>`. These + were dropped from the Shadow DOM specification. + +## 0.15.0 + +- **BREAKING** + - Removed `css` executable from `bin` directory. + - Removed the deprecated `css.dart` library. + - `Message.level` is now of type `MessageLevel` defined in this package. +- Removed dependencies on `package:args` and `package:logging`. +- Require Dart SDK `>=2.1.0`. + +## 0.14.6 + +* Removed whitespace between comma-delimited expressions in compact output. + + Before: + ```css + div{color:rgba(0, 0, 0, 0.5);} + ``` + + After: + ```css + div{color:rgba(0,0,0,0.5);} + ``` + +* Removed last semicolon from declaration groups in compact output. + + Before: + ```css + div{color:red;background:blue;} + ``` + + After: + ```css + div{color:red;background:blue} + ``` + +## 0.14.5 + +* Fixed a crashed caused by parsing `:host()` without an argument and added an + error message explaining that a selector argument is expected. + +## 0.14.4+1 + +* Set max SDK version to `<3.0.0`, and adjust other dependencies. + +## 0.14.4 + +* Reduced whitespace in compact output for the `@page` at-rule and margin boxes. +* Updated SDK version to 2.0.0-dev.17.0. +* Stop using deprecated constants. + +## 0.14.3 + +* Reduced the amount of whitespace in compact output around braces. + +## 0.14.2 + +* Fixed Dart 2 runtime failure. + +## 0.14.1 + +* Deprecated `package:csslib/css.dart`. + Use `parser.dart` and `visitor.dart` instead. + +## 0.14.0 + +### New features + +* Supports nested at-rules. +* Supports nested HTML comments in CSS comments and vice-versa. + +### Breaking changes + +* The `List rulesets` field on `MediaDirective`, `HostDirective`, and + `StyletDirective` has been replaced by `List rules` to allow nested + at-rules in addition to rulesets. + +## 0.13.6 + +* Adds support for `@viewport`. +* Adds support for `-webkit-calc()` and `-moz-calc()`. +* Adds support for querying media features without specifying an expression. For + example: `@media (transform-3d) { ... }`. +* Prevents exception being thrown for invalid dimension terms, and instead + issues an error. + +## 0.13.5 + +* Adds support for `@-moz-document`. +* Adds support for `@supports`. + +## 0.13.4 + +* Parses CSS 2.1 pseudo-elements as pseudo-elements instead of pseudo-classes. +* Supports signed decimal numbers with no integer part. +* Fixes parsing hexadecimal numbers when followed by an identifier. +* Fixes parsing strings which contain unicode-range character sequences. + +## 0.13.3+1 + +* Fixes analyzer error. + +## 0.13.3 + +* Adds support for shadow host selectors `:host()` and `:host-context()`. +* Adds support for shadow-piercing descendant combinator `>>>` and its alias + `/deep/` for backwards compatibility. +* Adds support for non-functional IE filter properties (i.e. `filter: FlipH`). +* Fixes emitted CSS for `@page` directive when body includes declarations and + page-margin boxes. +* Exports `Message` from `parser.dart` so it's no longer necessary to import + `src/messages.dart` to use the parser API. + +## 0.13.2+2 + +* Fix static warnings. + +## 0.13.2+1 + +* Fix new strong mode error. + +## 0.13.2 + +* Relax type of TreeNode.visit, to allow returning values from visitors. + +## 0.13.1 + +* Fix two checked mode bugs introduced in 0.13.0. + +## 0.13.0 + + * **BREAKING** Fix all [strong mode][] errors and warnings. + This involved adding more precise on some public APIs, which + is why it may break users. + +[strong mode]: https://github.com/dart-lang/dev_compiler/blob/master/STRONG_MODE.md + +## 0.12.2 + + * Fix to handle calc functions however, the expressions are treated as a + LiteralTerm and not fully parsed into the AST. + +## 0.12.1 + + * Fix to handling of escapes in strings. + +## 0.12.0+1 + +* Allow the latest version of `logging` package. + +## 0.12.0 + +* Top-level methods in `parser.dart` now take `PreprocessorOptions` instead of + `List`. + +* `PreprocessorOptions.inputFile` is now final. + +## 0.11.0+4 + +* Cleanup some ambiguous and some incorrect type signatures. + +## 0.11.0+3 + +* Improve the speed and memory efficiency of parsing. + +## 0.11.0+2 + +* Fix another test that was failing on IE10. + +## 0.11.0+1 + +* Fix a test that was failing on IE10. + +## 0.11.0 + +* Switch from `source_maps`' `Span` class to `source_span`'s `SourceSpan` class. diff --git a/pkgs/csslib/LICENSE b/pkgs/csslib/LICENSE new file mode 100644 index 000000000..ab3bfa014 --- /dev/null +++ b/pkgs/csslib/LICENSE @@ -0,0 +1,27 @@ +Copyright 2013, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/pkgs/csslib/README.md b/pkgs/csslib/README.md new file mode 100644 index 000000000..edbd80d3e --- /dev/null +++ b/pkgs/csslib/README.md @@ -0,0 +1,21 @@ +[![Build Status](https://github.com/dart-lang/tools/actions/workflows/csslib.yaml/badge.svg)](https://github.com/dart-lang/tools/actions/workflows/csslib.yaml) +[![pub package](https://img.shields.io/pub/v/csslib.svg)](https://pub.dev/packages/csslib) +[![package publisher](https://img.shields.io/pub/publisher/csslib.svg)](https://pub.dev/packages/csslib/publisher) + +A Dart [CSS](https://developer.mozilla.org/en-US/docs/Web/CSS) parser. + +## Usage + +Parsing CSS is easy! + +```dart +import 'package:csslib/parser.dart'; + +void main() { + var stylesheet = parse( + '.foo { color: red; left: 20px; top: 20px; width: 100px; height:200px }'); + print(stylesheet.toDebugString()); +} +``` + +You can pass a `String` or `List` to `parse`. diff --git a/pkgs/csslib/analysis_options.yaml b/pkgs/csslib/analysis_options.yaml new file mode 100644 index 000000000..6c38fe479 --- /dev/null +++ b/pkgs/csslib/analysis_options.yaml @@ -0,0 +1,13 @@ +include: package:dart_flutter_team_lints/analysis_options.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + errors: + comment_references: ignore # too many false positives + +linter: + rules: + - prefer_expression_function_bodies diff --git a/pkgs/csslib/example/main.dart b/pkgs/csslib/example/main.dart new file mode 100644 index 000000000..88dc748f3 --- /dev/null +++ b/pkgs/csslib/example/main.dart @@ -0,0 +1,99 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a + +import 'package:csslib/parser.dart' as css; +import 'package:csslib/visitor.dart'; + +void main() { + var errors = []; + + // Parse a simple stylesheet. + print('1. Good CSS, parsed CSS emitted:'); + print(' ============================='); + var stylesheet = parseCss(''' +@import "support/at-charset-019.css"; +div { color: red; } +button[type] { background-color: red; } +.foo { + color: red; left: 20px; top: 20px; width: 100px; height:200px +} +#div { + color : #00F578; border-color: #878787; +} +''', errors: errors); + + if (errors.isNotEmpty) { + print('Got ${errors.length} errors.\n'); + for (var error in errors) { + print(error); + } + } else { + print(prettyPrint(stylesheet)); + } + + // Parse a stylesheet with errors + print('\n2. Catch severe syntax errors:'); + print(' ==========================='); + var stylesheetError = parseCss(''' +.foo #%^&*asdf { + color: red; left: 20px; top: 20px; width: 100px; height:200px +} +''', errors: errors); + + if (errors.isNotEmpty) { + print('Got ${errors.length} errors.\n'); + for (var error in errors) { + print(error); + } + } else { + print(stylesheetError.toString()); + } + + // Parse a stylesheet that warns (checks) problematic CSS. + print('\n3. Detect CSS problem with checking on:'); + print(' ==================================='); + stylesheetError = parseCss('# div1 { color: red; }', errors: errors); + + if (errors.isNotEmpty) { + print('Detected ${errors.length} problem in checked mode.\n'); + for (var error in errors) { + print(error); + } + } else { + print(stylesheetError.toString()); + } + + // Parse a CSS selector. + print('\n4. Parse a selector only:'); + print(' ======================'); + var selectorAst = css.selector('#div .foo', errors: errors); + if (errors.isNotEmpty) { + print('Got ${errors.length} errors.\n'); + for (var error in errors) { + print(error); + } + } else { + print(prettyPrint(selectorAst)); + } +} + +/// Spin-up CSS parser in checked mode to detect any problematic CSS. Normally, +/// CSS will allow any property/value pairs regardless of validity; all of our +/// tests (by default) will ensure that the CSS is really valid. +StyleSheet parseCss( + String cssInput, { + List? errors, + css.PreprocessorOptions? opts, +}) => + css.parse(cssInput, errors: errors, options: opts ?? _default); + +/// Pretty printer for CSS. +String prettyPrint(StyleSheet ss) => + (CssPrinter()..visitTree(ss, pretty: true)).toString(); + +const _default = css.PreprocessorOptions( + useColors: false, + checked: true, + warningsAsErrors: true, + inputFile: 'memory', +); diff --git a/pkgs/csslib/lib/parser.dart b/pkgs/csslib/lib/parser.dart new file mode 100644 index 000000000..446929823 --- /dev/null +++ b/pkgs/csslib/lib/parser.dart @@ -0,0 +1,2870 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:math' as math; + +import 'package:source_span/source_span.dart'; + +import 'src/messages.dart'; +import 'src/preprocessor_options.dart'; +import 'visitor.dart'; + +export 'src/messages.dart' show Message, MessageLevel; +export 'src/preprocessor_options.dart'; + +part 'src/analyzer.dart'; +part 'src/polyfill.dart'; +part 'src/property.dart'; +part 'src/token.dart'; +part 'src/token_kind.dart'; +part 'src/tokenizer.dart'; +part 'src/tokenizer_base.dart'; + +enum ClauseType { + none, + conjunction, + disjunction, +} + +/// Used for parser lookup ahead (used for nested selectors Less support). +class ParserState extends TokenizerState { + final Token peekToken; + final Token? previousToken; + + ParserState(this.peekToken, this.previousToken, Tokenizer tokenizer) + : super(tokenizer); +} + +void _createMessages({List? errors, PreprocessorOptions? options}) { + errors ??= []; + options ??= const PreprocessorOptions(useColors: false, inputFile: 'memory'); + + messages = Messages(options: options, printHandler: errors.add); +} + +/// CSS checked mode enabled. +bool get isChecked => messages.options.checked; + +// TODO(terry): Remove nested name parameter. +/// Parse and analyze the CSS file. +StyleSheet compile(Object input, + {List? errors, + PreprocessorOptions? options, + bool nested = true, + bool polyfill = false, + List? includes}) { + includes ??= []; + + var source = _inputAsString(input); + + _createMessages(errors: errors, options: options); + + var file = SourceFile.fromString(source); + + var tree = _Parser(file, source).parse(); + + analyze([tree], errors: errors, options: options); + + if (polyfill) { + var processCss = PolyFill(messages); + processCss.process(tree, includes: includes); + } + + return tree; +} + +/// Analyze the CSS file. +void analyze(List styleSheets, + {List? errors, PreprocessorOptions? options}) { + _createMessages(errors: errors, options: options); + Analyzer(styleSheets, messages).run(); +} + +/// Parse the [input] CSS stylesheet into a tree. +/// +/// The [input] can be a [String], or [List]`` of bytes and returns a +/// [StyleSheet] AST. The optional [errors] list will collect any error +/// encountered. +StyleSheet parse( + Object input, { + List? errors, + PreprocessorOptions? options, +}) { + var source = _inputAsString(input); + + _createMessages(errors: errors, options: options); + + var file = SourceFile.fromString(source); + return _Parser(file, source).parse(); +} + +/// Parse the [input] CSS selector into a tree. The [input] can be a [String], +/// or [List]`` of bytes and returns a [StyleSheet] AST. The optional +/// [errors] list will contain each error/warning as a [Message]. +// TODO(jmesserly): should rename "parseSelector" and return Selector +StyleSheet selector(Object input, {List? errors}) { + var source = _inputAsString(input); + + _createMessages(errors: errors); + + var file = SourceFile.fromString(source); + return (_Parser(file, source)..tokenizer.inSelector = true).parseSelector(); +} + +SelectorGroup? parseSelectorGroup(Object input, {List? errors}) { + var source = _inputAsString(input); + + _createMessages(errors: errors); + + var file = SourceFile.fromString(source); + return (_Parser(file, source) + // TODO(jmesserly): this fix should be applied to the parser. It's + // tricky because by the time the flag is set one token has already + // been fetched. + ..tokenizer.inSelector = true) + .processSelectorGroup(); +} + +String _inputAsString(Object input) { + String source; + + if (input is String) { + source = input; + } else if (input is List) { + // TODO(terry): The parse function needs an "encoding" argument and will + // default to whatever encoding CSS defaults to. + // + // Here's some info about CSS encodings: + // http://www.w3.org/International/questions/qa-css-charset.en.php + // + // As JMesserly suggests it will probably need a "pre-parser" html5lib + // (encoding_parser.dart) that interprets the bytes as ASCII and scans for + // @charset. But for now an "encoding" argument would work. Often the + // HTTP header will indicate the correct encoding. + // + // See encoding helpers at: package:html5lib/lib/src/char_encodings.dart + // These helpers can decode in different formats given an encoding name + // (mostly unicode, ascii, windows-1252 which is html5 default encoding). + source = String.fromCharCodes(input as List); + } else { + // TODO(terry): Support RandomAccessFile using console. + throw ArgumentError("'source' must be a String or " + 'List (of bytes). RandomAccessFile not supported from this ' + 'simple interface'); + } + + return source; +} + +// TODO(terry): Consider removing this class when all usages can be eliminated +// or replaced with compile API. +/// Public parsing interface for csslib. +class Parser { + final _Parser _parser; + + // TODO(jmesserly): having file and text is redundant. + // TODO(rnystrom): baseUrl isn't used. Remove from API. + Parser(SourceFile file, String text, {int start = 0, String? baseUrl}) + : _parser = _Parser(file, text, start: start); + + StyleSheet parse() => _parser.parse(); +} + +// CSS2.1 pseudo-elements which were defined with a single ':'. +const _legacyPseudoElements = { + 'after', + 'before', + 'first-letter', + 'first-line', +}; + +/// A simple recursive descent parser for CSS. +class _Parser { + final Tokenizer tokenizer; + + /// File containing the source being parsed, used to report errors with + /// source-span locations. + final SourceFile file; + + Token? _previousToken; + late Token _peekToken; + + _Parser(this.file, String text, {int start = 0}) + : tokenizer = Tokenizer(file, text, true, start) { + _peekToken = tokenizer.next(); + } + + /// Main entry point for parsing an entire CSS file. + StyleSheet parse() { + var productions = []; + + var start = _peekToken.span; + while (!_maybeEat(TokenKind.END_OF_FILE) && !_peekKind(TokenKind.RBRACE)) { + // TODO(terry): Need to handle charset. + final rule = processRule(); + if (rule != null) { + productions.add(rule); + } else { + break; + } + } + + checkEndOfFile(); + + return StyleSheet(productions, _makeSpan(start)); + } + + /// Main entry point for parsing a simple selector sequence. + StyleSheet parseSelector() { + var productions = []; + + var start = _peekToken.span; + while (!_maybeEat(TokenKind.END_OF_FILE) && !_peekKind(TokenKind.RBRACE)) { + var selector = processSelector(); + if (selector != null) { + productions.add(selector); + } else { + break; // Prevent infinite loop if we can't parse something. + } + } + + checkEndOfFile(); + + return StyleSheet.selector(productions, _makeSpan(start)); + } + + /// Generate an error if [file] has not been completely consumed. + void checkEndOfFile() { + if (!(_peekKind(TokenKind.END_OF_FILE) || + _peekKind(TokenKind.INCOMPLETE_COMMENT))) { + _error('premature end of file unknown CSS', _peekToken.span); + } + } + + /// Guard to break out of parser when an unexpected end of file is found. + // TODO(jimhug): Failure to call this method can lead to infinite parser + // loops. Consider embracing exceptions for more errors to reduce + // the danger here. + bool isPrematureEndOfFile() { + if (_maybeEat(TokenKind.END_OF_FILE)) { + _error('unexpected end of file', _peekToken.span); + return true; + } else { + return false; + } + } + + /////////////////////////////////////////////////////////////////// + // Basic support methods + /////////////////////////////////////////////////////////////////// + int _peek() => _peekToken.kind; + + Token _next({bool unicodeRange = false}) { + final next = _previousToken = _peekToken; + _peekToken = tokenizer.next(unicodeRange: unicodeRange); + return next; + } + + bool _peekKind(int kind) => _peekToken.kind == kind; + + // Is the next token a legal identifier? This includes pseudo-keywords. + bool _peekIdentifier() => TokenKind.isIdentifier(_peekToken.kind); + + /// Marks the parser/tokenizer look ahead to support Less nested selectors. + ParserState get _mark => ParserState(_peekToken, _previousToken, tokenizer); + + /// Restores the parser/tokenizer state to state remembered by _mark. + void _restore(ParserState markedData) { + tokenizer.restore(markedData); + _peekToken = markedData.peekToken; + _previousToken = markedData.previousToken; + } + + bool _maybeEat(int kind, {bool unicodeRange = false}) { + if (_peekToken.kind == kind) { + _previousToken = _peekToken; + _peekToken = tokenizer.next(unicodeRange: unicodeRange); + return true; + } else { + return false; + } + } + + void _eat(int kind, {bool unicodeRange = false}) { + if (!_maybeEat(kind, unicodeRange: unicodeRange)) { + _errorExpected(TokenKind.kindToString(kind)); + } + } + + void _errorExpected(String expected) { + var tok = _next(); + String message; + try { + message = 'expected $expected, but found $tok'; + } catch (e) { + message = 'parsing error expected $expected'; + } + _error(message, tok.span); + } + + void _error(String message, SourceSpan? location) { + location ??= _peekToken.span; + messages.error(message, location); + } + + void _warning(String message, SourceSpan? location) { + location ??= _peekToken.span; + messages.warning(message, location); + } + + FileSpan _makeSpan(FileSpan start) { + // TODO(terry): there are places where we are creating spans before we eat + // the tokens, so using _previousToken is not always valid. + // TODO(nweiz): use < rather than compareTo when SourceSpan supports it. + if (_previousToken == null || _previousToken!.span.compareTo(start) < 0) { + return start; + } + return start.expand(_previousToken!.span); + } + + /////////////////////////////////////////////////////////////////// + // Top level productions + /////////////////////////////////////////////////////////////////// + + /// The media_query_list production below replaces the media_list production + /// from CSS2 the new grammar is: + /// + /// media_query_list + /// : S* [media_query [ ',' S* media_query ]* ]? + /// media_query + /// : [ONLY | NOT]? S* media_type S* [ AND S* expression ]* + /// | expression [ AND S* expression ]* + /// media_type + /// : IDENT + /// expression + /// : '(' S* media_feature S* [ ':' S* expr ]? ')' S* + /// media_feature + /// : IDENT + List processMediaQueryList() { + var mediaQueries = []; + + do { + var mediaQuery = processMediaQuery(); + if (mediaQuery != null) { + mediaQueries.add(mediaQuery); + } else { + break; + } + } while (_maybeEat(TokenKind.COMMA)); + + return mediaQueries; + } + + MediaQuery? processMediaQuery() { + // Grammar: [ONLY | NOT]? S* media_type S* + // [ AND S* MediaExpr ]* | MediaExpr [ AND S* MediaExpr ]* + + var start = _peekToken.span; + + // Is it a unary media operator? + var op = _peekToken.text; + var opLen = op.length; + var unaryOp = TokenKind.matchMediaOperator(op, 0, opLen); + if (unaryOp != -1) { + if (isChecked) { + if (unaryOp != TokenKind.MEDIA_OP_NOT || + unaryOp != TokenKind.MEDIA_OP_ONLY) { + _warning('Only the unary operators NOT and ONLY allowed', + _makeSpan(start)); + } + } + _next(); + start = _peekToken.span; + } + + Identifier? type; + // Get the media type. + if (_peekIdentifier()) type = identifier(); + + var exprs = []; + + while (true) { + // Parse AND if query has a media_type or previous expression. + var andOp = exprs.isNotEmpty || type != null; + if (andOp) { + op = _peekToken.text; + opLen = op.length; + if (TokenKind.matchMediaOperator(op, 0, opLen) != + TokenKind.MEDIA_OP_AND) { + break; + } + _next(); + } + + var expr = processMediaExpression(andOp); + if (expr == null) break; + + exprs.add(expr); + } + + if (unaryOp != -1 || type != null || exprs.isNotEmpty) { + return MediaQuery(unaryOp, type, exprs, _makeSpan(start)); + } + return null; + } + + MediaExpression? processMediaExpression([bool andOperator = false]) { + var start = _peekToken.span; + + // Grammar: '(' S* media_feature S* [ ':' S* expr ]? ')' S* + if (_maybeEat(TokenKind.LPAREN)) { + if (_peekIdentifier()) { + var feature = identifier(); // Media feature. + var exprs = _maybeEat(TokenKind.COLON) + ? processExpr() + : Expressions(_makeSpan(_peekToken.span)); + if (_maybeEat(TokenKind.RPAREN)) { + return MediaExpression(andOperator, feature, exprs, _makeSpan(start)); + } else if (isChecked) { + _warning( + 'Missing parenthesis around media expression', _makeSpan(start)); + return null; + } + } else if (isChecked) { + _warning('Missing media feature in media expression', _makeSpan(start)); + } + } + return null; + } + + /// Directive grammar: + /// + /// import: '@import' [string | URI] media_list? + /// media: '@media' media_query_list '{' ruleset '}' + /// page: '@page' [':' IDENT]? '{' declarations '}' + /// stylet: '@stylet' IDENT '{' ruleset '}' + /// media_query_list: IDENT [',' IDENT] + /// keyframes: '@-webkit-keyframes ...' (see grammar below). + /// font_face: '@font-face' '{' declarations '}' + /// namespace: '@namespace name url("xmlns") + /// host: '@host '{' ruleset '}' + /// mixin: '@mixin name [(args,...)] '{' declarations/ruleset '}' + /// include: '@include name [(@arg,@arg1)] + /// '@include name [(@arg...)] + /// content: '@content' + /// -moz-document: '@-moz-document' [ | url-prefix() | + /// domain() | regexp([]; + if (_maybeEat(TokenKind.LBRACE)) { + while (!_maybeEat(TokenKind.END_OF_FILE)) { + final rule = processRule(); + if (rule == null) break; + rules.add(rule); + } + + if (!_maybeEat(TokenKind.RBRACE)) { + _error('expected } after ruleset for @media', _peekToken.span); + } + } else { + _error('expected { after media before ruleset', _peekToken.span); + } + return MediaDirective(media, rules, _makeSpan(start)); + + case TokenKind.DIRECTIVE_HOST: + _next(); + + var rules = []; + if (_maybeEat(TokenKind.LBRACE)) { + while (!_maybeEat(TokenKind.END_OF_FILE)) { + final rule = processRule(); + if (rule == null) break; + rules.add(rule); + } + + if (!_maybeEat(TokenKind.RBRACE)) { + _error('expected } after ruleset for @host', _peekToken.span); + } + } else { + _error('expected { after host before ruleset', _peekToken.span); + } + return HostDirective(rules, _makeSpan(start)); + + case TokenKind.DIRECTIVE_PAGE: + // @page S* IDENT? pseudo_page? + // S* '{' S* + // [ declaration | margin ]? + // [ ';' S* [ declaration | margin ]? ]* '}' S* + // + // pseudo_page : + // ':' [ "left" | "right" | "first" ] + // + // margin : + // margin_sym S* '{' declaration [ ';' S* declaration? ]* '}' S* + // + // margin_sym : @top-left-corner, @top-left, @bottom-left, etc. + // + // See http://www.w3.org/TR/css3-page/#CSS21 + _next(); + + // Page name + Identifier? name; + if (_peekIdentifier()) { + name = identifier(); + } + + // Any pseudo page? + Identifier? pseudoPage; + if (_maybeEat(TokenKind.COLON)) { + if (_peekIdentifier()) { + pseudoPage = identifier(); + // TODO(terry): Normalize pseudoPage to lowercase. + if (isChecked && + !(pseudoPage.name == 'left' || + pseudoPage.name == 'right' || + pseudoPage.name == 'first')) { + _warning( + 'Pseudo page must be left, top or first', pseudoPage.span); + return null; + } + } + } + + var pseudoName = pseudoPage is Identifier ? pseudoPage.name : ''; + var ident = name is Identifier ? name.name : ''; + return PageDirective( + ident, pseudoName, processMarginsDeclarations(), _makeSpan(start)); + + case TokenKind.DIRECTIVE_CHARSET: + // @charset S* STRING S* ';' + _next(); + + var charEncoding = processQuotedString(false); + return CharsetDirective(charEncoding, _makeSpan(start)); + + // TODO(terry): Workaround Dart2js bug continue not implemented in switch + // see https://code.google.com/p/dart/issues/detail?id=8270 + /* + case TokenKind.DIRECTIVE_MS_KEYFRAMES: + // TODO(terry): For now only IE 10 (are base level) supports @keyframes, + // -moz- has only been optional since Oct 2012 release of Firefox, not + // all versions of webkit support @keyframes and opera doesn't yet + // support w/o -o- prefix. Add more warnings for other prefixes when + // they become optional. + if (isChecked) { + _warning('@-ms-keyframes should be @keyframes', _makeSpan(start)); + } + continue keyframeDirective; + + keyframeDirective: + */ + case TokenKind.DIRECTIVE_KEYFRAMES: + case TokenKind.DIRECTIVE_WEB_KIT_KEYFRAMES: + case TokenKind.DIRECTIVE_MOZ_KEYFRAMES: + case TokenKind.DIRECTIVE_O_KEYFRAMES: + // TODO(terry): Remove workaround when bug 8270 is fixed. + case TokenKind.DIRECTIVE_MS_KEYFRAMES: + if (tokenId == TokenKind.DIRECTIVE_MS_KEYFRAMES && isChecked) { + _warning('@-ms-keyframes should be @keyframes', _makeSpan(start)); + } + // TODO(terry): End of workaround. + + // Key frames grammar: + // + // @[browser]? keyframes [IDENT|STRING] '{' keyframes-blocks '}'; + // + // browser: [-webkit-, -moz-, -ms-, -o-] + // + // keyframes-blocks: + // [keyframe-selectors '{' declarations '}']* ; + // + // keyframe-selectors: + // ['from'|'to'|PERCENTAGE] [',' ['from'|'to'|PERCENTAGE] ]* ; + _next(); + + Identifier? name; + if (_peekIdentifier()) { + name = identifier(); + } + + _eat(TokenKind.LBRACE); + + var keyframe = KeyFrameDirective(tokenId, name, _makeSpan(start)); + + do { + var selectors = Expressions(_makeSpan(start)); + + do { + var term = processTerm() as Expression; + + // TODO(terry): Only allow from, to and PERCENTAGE ... + + selectors.add(term); + } while (_maybeEat(TokenKind.COMMA)); + + keyframe.add(KeyFrameBlock( + selectors, processDeclarations(), _makeSpan(start))); + } while (!_maybeEat(TokenKind.RBRACE) && !isPrematureEndOfFile()); + + return keyframe; + + case TokenKind.DIRECTIVE_FONTFACE: + _next(); + return FontFaceDirective(processDeclarations(), _makeSpan(start)); + + case TokenKind.DIRECTIVE_STYLET: + // Stylet grammar: + // + // @stylet IDENT '{' + // ruleset + // '}' + _next(); + + dynamic name; + if (_peekIdentifier()) { + name = identifier(); + } + + _eat(TokenKind.LBRACE); + + var productions = []; + + start = _peekToken.span; + while (!_maybeEat(TokenKind.END_OF_FILE)) { + final rule = processRule(); + if (rule == null) { + break; + } + productions.add(rule); + } + + _eat(TokenKind.RBRACE); + + return StyletDirective(name as String, productions, _makeSpan(start)); + + case TokenKind.DIRECTIVE_NAMESPACE: + // Namespace grammar: + // + // @namespace S* [namespace_prefix S*]? [STRING|URI] S* ';' S* + // namespace_prefix : IDENT + _next(); + + Identifier? prefix; + if (_peekIdentifier()) { + prefix = identifier(); + } + + // The namespace URI can be either a quoted string url("uri_string") + // are identical. + String? namespaceUri; + if (_peekIdentifier()) { + var func = processFunction(identifier()); + if (func is UriTerm) { + namespaceUri = func.text; + } + } else { + if (prefix != null && prefix.name == 'url') { + var func = processFunction(prefix); + if (func is UriTerm) { + // @namespace url(""); + namespaceUri = func.text; + prefix = null; + } + } else { + namespaceUri = processQuotedString(false); + } + } + + return NamespaceDirective( + prefix?.name ?? '', namespaceUri, _makeSpan(start)); + + case TokenKind.DIRECTIVE_MIXIN: + return processMixin(); + + case TokenKind.DIRECTIVE_INCLUDE: + return processInclude(_makeSpan(start)); + case TokenKind.DIRECTIVE_CONTENT: + // TODO(terry): TBD + _warning('@content not implemented.', _makeSpan(start)); + return null; + case TokenKind.DIRECTIVE_MOZ_DOCUMENT: + return processDocumentDirective(); + case TokenKind.DIRECTIVE_SUPPORTS: + return processSupportsDirective(); + case TokenKind.DIRECTIVE_VIEWPORT: + case TokenKind.DIRECTIVE_MS_VIEWPORT: + return processViewportDirective(); + } + return null; + } + + /// Parse the mixin beginning token offset [start]. Returns a + /// [MixinDefinition] node. + /// + /// Mixin grammar: + /// + /// @mixin IDENT [(args,...)] '{' + /// [ruleset | property | directive]* + /// '}' + MixinDefinition? processMixin() { + _next(); + + var name = identifier(); + + var params = []; + // Any parameters? + if (_maybeEat(TokenKind.LPAREN)) { + var mustHaveParam = false; + var keepGoing = true; + while (keepGoing) { + var varDef = processVariableOrDirective(mixinParameter: true); + if (varDef is VarDefinitionDirective || varDef is VarDefinition) { + params.add(varDef as TreeNode); + } else if (mustHaveParam) { + _warning('Expecting parameter', _makeSpan(_peekToken.span)); + keepGoing = false; + } + if (_maybeEat(TokenKind.COMMA)) { + mustHaveParam = true; + continue; + } + keepGoing = !_maybeEat(TokenKind.RPAREN); + } + } + + _eat(TokenKind.LBRACE); + + var productions = []; + MixinDefinition? mixinDirective; + + var start = _peekToken.span; + while (!_maybeEat(TokenKind.END_OF_FILE)) { + var directive = processDirective(); + if (directive != null) { + productions.add(directive); + continue; + } + + var declGroup = processDeclarations(checkBrace: false); + if (declGroup.declarations.any((decl) => + decl is Declaration && decl is! IncludeMixinAtDeclaration)) { + var newDecls = []; + for (var include in productions) { + // If declGroup has items that are declarations then we assume + // this mixin is a declaration mixin not a top-level mixin. + if (include is IncludeDirective) { + newDecls.add(IncludeMixinAtDeclaration(include, include.span)); + } else { + _warning('Error mixing of top-level vs declarations mixins', + _makeSpan(include.span as FileSpan)); + } + } + declGroup.declarations.insertAll(0, newDecls); + productions = []; + } else { + // Declarations are just @includes make it a list of productions + // not a declaration group (anything else is a ruleset). Make it a + // list of productions, not a declaration group. + for (var decl in declGroup.declarations) { + productions + .add(decl is IncludeMixinAtDeclaration ? decl.include : decl); + } + declGroup.declarations.clear(); + } + + if (declGroup.declarations.isNotEmpty) { + if (productions.isEmpty) { + mixinDirective = MixinDeclarationDirective( + name.name, params, false, declGroup, _makeSpan(start)); + break; + } else { + for (var decl in declGroup.declarations) { + productions + .add(decl is IncludeMixinAtDeclaration ? decl.include : decl); + } + } + } else { + mixinDirective = MixinRulesetDirective( + name.name, params, false, productions, _makeSpan(start)); + break; + } + } + + if (productions.isNotEmpty) { + mixinDirective = MixinRulesetDirective( + name.name, params, false, productions, _makeSpan(start)); + } + + _eat(TokenKind.RBRACE); + + return mixinDirective; + } + + /// Returns a VarDefinitionDirective or VarDefinition if a varaible otherwise + /// return the token id of a directive or -1 if neither. + dynamic // VarDefinitionDirective | VarDefinition | int + processVariableOrDirective({bool mixinParameter = false}) { + var start = _peekToken.span; + + var tokId = _peek(); + // Handle case for @ directive (where there's a whitespace between the @ + // sign and the directive name. Technically, it's not valid grammar but + // a number of CSS tests test for whitespace between @ and name. + if (tokId == TokenKind.AT) { + _next(); + tokId = _peek(); + if (_peekIdentifier()) { + // Is it a directive? + var directive = _peekToken.text; + var directiveLen = directive.length; + tokId = TokenKind.matchDirectives(directive, 0, directiveLen); + if (tokId == -1) { + tokId = TokenKind.matchMarginDirectives(directive, 0, directiveLen); + } + } + + if (tokId == -1) { + if (messages.options.lessSupport) { + // Less compatibility: + // @name: value; => var-name: value; (VarDefinition) + // property: @name; => property: var(name); (VarUsage) + Identifier? name; + if (_peekIdentifier()) { + name = identifier(); + } + + Expressions? exprs; + if (mixinParameter && _maybeEat(TokenKind.COLON)) { + exprs = processExpr(); + } else if (!mixinParameter) { + _eat(TokenKind.COLON); + exprs = processExpr(); + } + + var span = _makeSpan(start); + return VarDefinitionDirective(VarDefinition(name, exprs, span), span); + } else if (isChecked) { + _error('unexpected directive @$_peekToken', _peekToken.span); + } + } + } else if (mixinParameter && _peekToken.kind == TokenKind.VAR_DEFINITION) { + _next(); + Identifier? definedName; + if (_peekIdentifier()) definedName = identifier(); + + Expressions? exprs; + if (_maybeEat(TokenKind.COLON)) { + exprs = processExpr(); + } + + return VarDefinition(definedName, exprs, _makeSpan(start)); + } + + return tokId; + } + + IncludeDirective processInclude(SourceSpan span, {bool eatSemiColon = true}) { + // Stylet grammar: + // + // @include IDENT [(args,...)]; + _next(); + + Identifier? name; + if (_peekIdentifier()) { + name = identifier(); + } + + var params = >[]; + + // Any parameters? Parameters can be multiple terms per argument e.g., + // 3px solid yellow, green is two parameters: + // 1. 3px solid yellow + // 2. green + // the first has 3 terms and the second has 1 term. + if (_maybeEat(TokenKind.LPAREN)) { + var terms = []; + dynamic expr; + var keepGoing = true; + while (keepGoing && (expr = processTerm()) != null) { + // VarUsage is returned as a list + terms.add((expr is List ? expr[0] : expr) as Expression); + keepGoing = !_peekKind(TokenKind.RPAREN); + if (keepGoing) { + if (_maybeEat(TokenKind.COMMA)) { + params.add(terms); + terms = []; + } + } + } + params.add(terms); + _maybeEat(TokenKind.RPAREN); + } + + if (eatSemiColon) { + _eat(TokenKind.SEMICOLON); + } + + return IncludeDirective(name!.name, params, span); + } + + DocumentDirective processDocumentDirective() { + var start = _peekToken.span; + _next(); // '@-moz-document' + var functions = []; + do { + LiteralTerm function; + + // Consume function token: IDENT '(' + var ident = identifier(); + _eat(TokenKind.LPAREN); + + // Consume function arguments. + if (ident.name == 'url-prefix' || ident.name == 'domain') { + // @-moz-document allows the 'url-prefix' and 'domain' functions to + // omit quotations around their argument, contrary to the standard + // in which they must be strings. To support this we consume a + // string with optional quotation marks, then reapply quotation + // marks so they're present in the emitted CSS. + var argumentStart = _peekToken.span; + var value = processQuotedString(true); + // Don't quote the argument if it's empty. '@-moz-document url-prefix()' + // is a common pattern used for browser detection. + var argument = value.isNotEmpty ? '"$value"' : ''; + var argumentSpan = _makeSpan(argumentStart); + + _eat(TokenKind.RPAREN); + + var arguments = Expressions(_makeSpan(argumentSpan)) + ..add(LiteralTerm(argument, argument, argumentSpan)); + function = FunctionTerm(ident.name, ident.name, arguments, + _makeSpan(ident.span as FileSpan)); + } else { + function = processFunction(ident) as LiteralTerm; + } + + functions.add(function); + } while (_maybeEat(TokenKind.COMMA)); + + _eat(TokenKind.LBRACE); + var groupRuleBody = processGroupRuleBody(); + _eat(TokenKind.RBRACE); + return DocumentDirective(functions, groupRuleBody, _makeSpan(start)); + } + + SupportsDirective processSupportsDirective() { + var start = _peekToken.span; + _next(); // '@supports' + var condition = processSupportsCondition(); + _eat(TokenKind.LBRACE); + var groupRuleBody = processGroupRuleBody(); + _eat(TokenKind.RBRACE); + return SupportsDirective(condition, groupRuleBody, _makeSpan(start)); + } + + SupportsCondition? processSupportsCondition() { + if (_peekKind(TokenKind.IDENTIFIER)) { + return processSupportsNegation(); + } + + var start = _peekToken.span; + var conditions = []; + var clauseType = ClauseType.none; + + while (true) { + conditions.add(processSupportsConditionInParens()); + + ClauseType type; + var text = _peekToken.text.toLowerCase(); + + if (text == 'and') { + type = ClauseType.conjunction; + } else if (text == 'or') { + type = ClauseType.disjunction; + } else { + break; // Done parsing clause. + } + + if (clauseType == ClauseType.none) { + clauseType = type; // First operand and operator of clause. + } else if (clauseType != type) { + _error("Operators can't be mixed without a layer of parentheses", + _peekToken.span); + break; + } + + _next(); // Consume operator. + } + + if (clauseType == ClauseType.conjunction) { + return SupportsConjunction(conditions, _makeSpan(start)); + } else if (clauseType == ClauseType.disjunction) { + return SupportsDisjunction(conditions, _makeSpan(start)); + } else { + return conditions.first; + } + } + + SupportsNegation? processSupportsNegation() { + var start = _peekToken.span; + var text = _peekToken.text.toLowerCase(); + if (text != 'not') return null; + _next(); // 'not' + var condition = processSupportsConditionInParens(); + return SupportsNegation(condition, _makeSpan(start)); + } + + SupportsConditionInParens processSupportsConditionInParens() { + var start = _peekToken.span; + _eat(TokenKind.LPAREN); + // Try to parse a condition. + var condition = processSupportsCondition(); + if (condition != null) { + _eat(TokenKind.RPAREN); + return SupportsConditionInParens.nested(condition, _makeSpan(start)); + } + // Otherwise, parse a declaration. + var declaration = processDeclaration([]); + _eat(TokenKind.RPAREN); + return SupportsConditionInParens(declaration, _makeSpan(start)); + } + + ViewportDirective processViewportDirective() { + var start = _peekToken.span; + var name = _next().text; + var declarations = processDeclarations(); + return ViewportDirective(name, declarations, _makeSpan(start)); + } + + TreeNode? processRule([SelectorGroup? selectorGroup]) { + if (selectorGroup == null) { + final directive = processDirective(); + if (directive != null) { + _maybeEat(TokenKind.SEMICOLON); + return directive; + } + selectorGroup = processSelectorGroup(); + } + if (selectorGroup != null) { + return RuleSet(selectorGroup, processDeclarations(), selectorGroup.span); + } + return null; + } + + List processGroupRuleBody() { + var nodes = []; + while (!(_peekKind(TokenKind.RBRACE) || _peekKind(TokenKind.END_OF_FILE))) { + var rule = processRule(); + if (rule != null) { + nodes.add(rule); + continue; + } + break; + } + return nodes; + } + + /// Look ahead to see if what should be a declaration is really a selector. + /// If it's a selector than it's a nested selector. This support's Less' + /// nested selector syntax (requires a look ahead). E.g., + /// + /// div { + /// width : 20px; + /// span { + /// color: red; + /// } + /// } + /// + /// Two tag name selectors div and span equivalent to: + /// + /// div { + /// width: 20px; + /// } + /// div span { + /// color: red; + /// } + /// + /// Return `null` if no selector or [SelectorGroup] if a selector was parsed. + SelectorGroup? _nestedSelector() { + var oldMessages = messages; + _createMessages(); + + var markedData = _mark; + + // Look a head do we have a nested selector instead of a declaration? + var selGroup = processSelectorGroup(); + + var nestedSelector = selGroup != null && + _peekKind(TokenKind.LBRACE) && + messages.messages.isEmpty; + + if (!nestedSelector) { + // Not a selector so restore the world. + _restore(markedData); + messages = oldMessages; + return null; + } else { + // Remember any messages from look ahead. + oldMessages.mergeMessages(messages); + messages = oldMessages; + return selGroup; + } + } + + DeclarationGroup processDeclarations({bool checkBrace = true}) { + var start = _peekToken.span; + + if (checkBrace) _eat(TokenKind.LBRACE); + + var decls = []; + var dartStyles = + []; // List of latest styles exposed to Dart. + + do { + var selectorGroup = _nestedSelector(); + while (selectorGroup != null) { + // Nested selector so process as a ruleset. + var ruleset = processRule(selectorGroup)!; + decls.add(ruleset); + selectorGroup = _nestedSelector(); + } + + var decl = processDeclaration(dartStyles); + if (decl != null) { + if (decl.hasDartStyle) { + var newDartStyle = decl.dartStyle!; + + // Replace or add latest Dart style. + var replaced = false; + for (var i = 0; i < dartStyles.length; i++) { + var dartStyle = dartStyles[i]; + if (dartStyle.isSame(newDartStyle)) { + dartStyles[i] = newDartStyle; + replaced = true; + break; + } + } + if (!replaced) { + dartStyles.add(newDartStyle); + } + } + decls.add(decl); + } + } while (_maybeEat(TokenKind.SEMICOLON)); + + if (checkBrace) _eat(TokenKind.RBRACE); + + // Fixup declaration to only have dartStyle that are live for this set of + // declarations. + for (var decl in decls) { + if (decl is Declaration) { + if (decl.hasDartStyle && !dartStyles.contains(decl.dartStyle)) { + // Dart style not live, ignore these styles in this Declarations. + decl.dartStyle = null; + } + } + } + + return DeclarationGroup(decls, _makeSpan(start)); + } + + List processMarginsDeclarations() { + var groups = []; + + var start = _peekToken.span; + + _eat(TokenKind.LBRACE); + + var decls = []; + var dartStyles = + []; // List of latest styles exposed to Dart. + + do { + switch (_peek()) { + case TokenKind.MARGIN_DIRECTIVE_TOPLEFTCORNER: + case TokenKind.MARGIN_DIRECTIVE_TOPLEFT: + case TokenKind.MARGIN_DIRECTIVE_TOPCENTER: + case TokenKind.MARGIN_DIRECTIVE_TOPRIGHT: + case TokenKind.MARGIN_DIRECTIVE_TOPRIGHTCORNER: + case TokenKind.MARGIN_DIRECTIVE_BOTTOMLEFTCORNER: + case TokenKind.MARGIN_DIRECTIVE_BOTTOMLEFT: + case TokenKind.MARGIN_DIRECTIVE_BOTTOMCENTER: + case TokenKind.MARGIN_DIRECTIVE_BOTTOMRIGHT: + case TokenKind.MARGIN_DIRECTIVE_BOTTOMRIGHTCORNER: + case TokenKind.MARGIN_DIRECTIVE_LEFTTOP: + case TokenKind.MARGIN_DIRECTIVE_LEFTMIDDLE: + case TokenKind.MARGIN_DIRECTIVE_LEFTBOTTOM: + case TokenKind.MARGIN_DIRECTIVE_RIGHTTOP: + case TokenKind.MARGIN_DIRECTIVE_RIGHTMIDDLE: + case TokenKind.MARGIN_DIRECTIVE_RIGHTBOTTOM: + // Margin syms processed. + // margin : + // margin_sym S* '{' declaration [ ';' S* declaration? ]* '}' S* + // + // margin_sym : @top-left-corner, @top-left, @bottom-left, etc. + var marginSym = _peek(); + + _next(); + + var declGroup = processDeclarations(); + groups.add( + MarginGroup(marginSym, declGroup.declarations, _makeSpan(start))); + break; + default: + var decl = processDeclaration(dartStyles); + if (decl != null) { + if (decl.hasDartStyle) { + var newDartStyle = decl.dartStyle!; + + // Replace or add latest Dart style. + var replaced = false; + for (var i = 0; i < dartStyles.length; i++) { + var dartStyle = dartStyles[i]; + if (dartStyle.isSame(newDartStyle)) { + dartStyles[i] = newDartStyle; + replaced = true; + break; + } + } + if (!replaced) { + dartStyles.add(newDartStyle); + } + } + decls.add(decl); + } + _maybeEat(TokenKind.SEMICOLON); + break; + } + } while (!_maybeEat(TokenKind.RBRACE) && !isPrematureEndOfFile()); + + // Fixup declaration to only have dartStyle that are live for this set of + // declarations. + for (var decl in decls) { + if (decl.hasDartStyle && !dartStyles.contains(decl.dartStyle)) { + // Dart style not live, ignore these styles in this Declarations. + decl.dartStyle = null; + } + } + + if (decls.isNotEmpty) { + groups.add(DeclarationGroup(decls, _makeSpan(start))); + } + + return groups; + } + + SelectorGroup? processSelectorGroup() { + var selectors = []; + var start = _peekToken.span; + + tokenizer.inSelector = true; + do { + var selector = processSelector(); + if (selector != null) { + selectors.add(selector); + } + } while (_maybeEat(TokenKind.COMMA)); + tokenizer.inSelector = false; + + if (selectors.isNotEmpty) { + return SelectorGroup(selectors, _makeSpan(start)); + } + return null; + } + + /// Return list of selectors + Selector? processSelector() { + var simpleSequences = []; + var start = _peekToken.span; + while (true) { + // First item is never descendant make sure it's COMBINATOR_NONE. + var selectorItem = simpleSelectorSequence(simpleSequences.isEmpty); + if (selectorItem != null) { + simpleSequences.add(selectorItem); + } else { + break; + } + } + + if (simpleSequences.isEmpty) return null; + + return Selector(simpleSequences, _makeSpan(start)); + } + + /// Same as [processSelector] but reports an error for each combinator. + /// + /// This is a quick fix for parsing `` until the parser + /// supports Selector Level 4 grammar: + /// https://drafts.csswg.org/selectors-4/#typedef-compound-selector + Selector? processCompoundSelector() { + var selector = processSelector(); + if (selector != null) { + for (var sequence in selector.simpleSelectorSequences) { + if (!sequence.isCombinatorNone) { + _error('compound selector can not contain combinator', sequence.span); + } + } + } + return selector; + } + + SimpleSelectorSequence? simpleSelectorSequence(bool forceCombinatorNone) { + var start = _peekToken.span; + var combinatorType = TokenKind.COMBINATOR_NONE; + var thisOperator = false; + + switch (_peek()) { + case TokenKind.PLUS: + _eat(TokenKind.PLUS); + combinatorType = TokenKind.COMBINATOR_PLUS; + break; + case TokenKind.GREATER: + _eat(TokenKind.GREATER); + combinatorType = TokenKind.COMBINATOR_GREATER; + break; + case TokenKind.TILDE: + _eat(TokenKind.TILDE); + combinatorType = TokenKind.COMBINATOR_TILDE; + break; + case TokenKind.AMPERSAND: + _eat(TokenKind.AMPERSAND); + thisOperator = true; + break; + } + + // Check if WHITESPACE existed between tokens if so we're descendent. + if (combinatorType == TokenKind.COMBINATOR_NONE && !forceCombinatorNone) { + if (_previousToken != null && _previousToken!.end != _peekToken.start) { + combinatorType = TokenKind.COMBINATOR_DESCENDANT; + } + } + + var span = _makeSpan(start); + var simpleSel = thisOperator + ? ElementSelector(ThisOperator(span), span) + : simpleSelector(); + if (simpleSel == null && + (combinatorType == TokenKind.COMBINATOR_PLUS || + combinatorType == TokenKind.COMBINATOR_GREATER || + combinatorType == TokenKind.COMBINATOR_TILDE)) { + // For "+ &", "~ &" or "> &" a selector sequence with no name is needed + // so that the & will have a combinator too. This is needed to + // disambiguate selector expressions: + // .foo&:hover combinator before & is NONE + // .foo & combinator before & is DESCDENDANT + // .foo > & combinator before & is GREATER + simpleSel = ElementSelector(Identifier('', span), span); + } + if (simpleSel != null) { + return SimpleSelectorSequence(simpleSel, span, combinatorType); + } + return null; + } + + /// Simple selector grammar: + /// + /// simple_selector_sequence + /// : [ type_selector | universal ] + /// [ HASH | class | attrib | pseudo | negation ]* + /// | [ HASH | class | attrib | pseudo | negation ]+ + /// type_selector + /// : [ namespace_prefix ]? element_name + /// namespace_prefix + /// : [ IDENT | '*' ]? '|' + /// element_name + /// : IDENT + /// universal + /// : [ namespace_prefix ]? '*' + /// class + /// : '.' IDENT + SimpleSelector? simpleSelector() { + // TODO(terry): Natalie makes a good point parsing of namespace and element + // are essentially the same (asterisk or identifier) other + // than the error message for element. Should consolidate the + // code. + // TODO(terry): Need to handle attribute namespace too. + dynamic first; + var start = _peekToken.span; + switch (_peek()) { + case TokenKind.ASTERISK: + // Mark as universal namespace. + var tok = _next(); + first = Wildcard(_makeSpan(tok.span)); + break; + case TokenKind.IDENTIFIER: + first = identifier(); + break; + default: + // Expecting simple selector. + // TODO(terry): Could be a synthesized token like value, etc. + if (TokenKind.isKindIdentifier(_peek())) { + first = identifier(); + } else if (_peekKind(TokenKind.SEMICOLON)) { + // Can't be a selector if we found a semi-colon. + return null; + } + break; + } + + if (_maybeEat(TokenKind.NAMESPACE)) { + TreeNode? element; + switch (_peek()) { + case TokenKind.ASTERISK: + // Mark as universal element + var tok = _next(); + element = Wildcard(_makeSpan(tok.span)); + break; + case TokenKind.IDENTIFIER: + element = identifier(); + break; + default: + _error('expected element name or universal(*), but found $_peekToken', + _peekToken.span); + break; + } + + return NamespaceSelector( + first, ElementSelector(element, element!.span!), _makeSpan(start)); + } else if (first != null) { + return ElementSelector(first, _makeSpan(start)); + } else { + // Check for HASH | class | attrib | pseudo | negation + return simpleSelectorTail(); + } + } + + bool _anyWhiteSpaceBeforePeekToken(int kind) { + if (_previousToken != null && _previousToken!.kind == kind) { + // If end of previous token isn't same as the start of peek token then + // there's something between these tokens probably whitespace. + return _previousToken!.end != _peekToken.start; + } + + return false; + } + + /// type_selector | universal | HASH | class | attrib | pseudo + SimpleSelector? simpleSelectorTail() { + // Check for HASH | class | attrib | pseudo | negation + var start = _peekToken.span; + switch (_peek()) { + case TokenKind.HASH: + _eat(TokenKind.HASH); + + if (_anyWhiteSpaceBeforePeekToken(TokenKind.HASH)) { + _error('Not a valid ID selector expected #id', _makeSpan(start)); + return null; + } + return IdSelector(identifier(), _makeSpan(start)); + case TokenKind.DOT: + _eat(TokenKind.DOT); + + if (_anyWhiteSpaceBeforePeekToken(TokenKind.DOT)) { + _error('Not a valid class selector expected .className', + _makeSpan(start)); + return null; + } + return ClassSelector(identifier(), _makeSpan(start)); + case TokenKind.COLON: + // :pseudo-class ::pseudo-element + return processPseudoSelector(start); + case TokenKind.LBRACK: + return processAttribute(); + case TokenKind.DOUBLE: + _error('name must start with a alpha character, but found a number', + _peekToken.span); + _next(); + break; + } + return null; + } + + SimpleSelector? processPseudoSelector(FileSpan start) { + // :pseudo-class ::pseudo-element + // TODO(terry): '::' should be token. + _eat(TokenKind.COLON); + var pseudoElement = _maybeEat(TokenKind.COLON); + + // TODO(terry): If no identifier specified consider optimizing out the + // : or :: and making this a normal selector. For now, + // create an empty pseudoName. + Identifier pseudoName; + if (_peekIdentifier()) { + pseudoName = identifier(); + } else { + return null; + } + var name = pseudoName.name.toLowerCase(); + + // Functional pseudo? + if (_peekToken.kind == TokenKind.LPAREN) { + if (!pseudoElement && name == 'not') { + _eat(TokenKind.LPAREN); + + // Negation : ':NOT(' S* negation_arg S* ')' + var negArg = simpleSelector(); + + _eat(TokenKind.RPAREN); + return NegationSelector(negArg, _makeSpan(start)); + } else if (!pseudoElement && + (name == 'host' || + name == 'host-context' || + name == 'global-context' || + name == '-acx-global-context')) { + _eat(TokenKind.LPAREN); + var selector = processCompoundSelector(); + if (selector == null) { + _errorExpected('a selector argument'); + return null; + } + _eat(TokenKind.RPAREN); + var span = _makeSpan(start); + return PseudoClassFunctionSelector(pseudoName, selector, span); + } else { + // Special parsing for expressions in pseudo functions. Minus is used + // as operator not identifier. + // TODO(jmesserly): we need to flip this before we eat the "(" as the + // next token will be fetched when we do that. I think we should try to + // refactor so we don't need this boolean; it seems fragile. + tokenizer.inSelectorExpression = true; + _eat(TokenKind.LPAREN); + + // Handle function expression. + var span = _makeSpan(start); + var expr = processSelectorExpression(); + + tokenizer.inSelectorExpression = false; + + // Used during selector look-a-head if not a SelectorExpression is + // bad. + if (expr is SelectorExpression) { + _eat(TokenKind.RPAREN); + return pseudoElement + ? PseudoElementFunctionSelector(pseudoName, expr, span) + : PseudoClassFunctionSelector(pseudoName, expr, span); + } else { + _errorExpected('CSS expression'); + return null; + } + } + } + + // Treat CSS2.1 pseudo-elements defined with pseudo class syntax as pseudo- + // elements for backwards compatibility. + return pseudoElement || _legacyPseudoElements.contains(name) + ? PseudoElementSelector(pseudoName, _makeSpan(start), + isLegacy: !pseudoElement) + : PseudoClassSelector(pseudoName, _makeSpan(start)); + } + + /// In CSS3, the expressions are identifiers, strings, or of the form "an+b". + /// + /// : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+ + /// + /// num [0-9]+|[0-9]*\.[0-9]+ + /// PLUS '+' + /// DIMENSION {num}{ident} + /// NUMBER {num} + TreeNode /* SelectorExpression | LiteralTerm */ processSelectorExpression() { + var start = _peekToken.span; + + var expressions = []; + + Token? termToken; + dynamic value; + + var keepParsing = true; + while (keepParsing) { + switch (_peek()) { + case TokenKind.PLUS: + start = _peekToken.span; + termToken = _next(); + expressions.add(OperatorPlus(_makeSpan(start))); + break; + case TokenKind.MINUS: + start = _peekToken.span; + termToken = _next(); + expressions.add(OperatorMinus(_makeSpan(start))); + break; + case TokenKind.INTEGER: + termToken = _next(); + value = int.parse(termToken.text); + break; + case TokenKind.DOUBLE: + termToken = _next(); + value = double.parse(termToken.text); + break; + case TokenKind.SINGLE_QUOTE: + value = processQuotedString(false); + value = "'${_escapeString(value as String, single: true)}'"; + return LiteralTerm(value, value, _makeSpan(start)); + case TokenKind.DOUBLE_QUOTE: + value = processQuotedString(false); + value = '"${_escapeString(value as String)}"'; + return LiteralTerm(value, value, _makeSpan(start)); + case TokenKind.IDENTIFIER: + value = identifier(); // Snarf up the ident we'll remap, maybe. + break; + default: + keepParsing = false; + } + + if (keepParsing && value != null) { + var unitTerm = + processDimension(termToken, value as Object, _makeSpan(start)); + expressions.add(unitTerm); + + value = null; + } + } + + return SelectorExpression(expressions, _makeSpan(start)); + } + + // Attribute grammar: + // + // attributes : + // '[' S* IDENT S* [ ATTRIB_MATCHES S* [ IDENT | STRING ] S* ]? ']' + // + // ATTRIB_MATCHES : + // [ '=' | INCLUDES | DASHMATCH | PREFIXMATCH | SUFFIXMATCH | SUBSTRMATCH ] + // + // INCLUDES: '~=' + // + // DASHMATCH: '|=' + // + // PREFIXMATCH: '^=' + // + // SUFFIXMATCH: '$=' + // + // SUBSTRMATCH: '*=' + AttributeSelector? processAttribute() { + var start = _peekToken.span; + + if (_maybeEat(TokenKind.LBRACK)) { + var attrName = identifier(); + + int op; + switch (_peek()) { + case TokenKind.EQUALS: + case TokenKind.INCLUDES: // ~= + case TokenKind.DASH_MATCH: // |= + case TokenKind.PREFIX_MATCH: // ^= + case TokenKind.SUFFIX_MATCH: // $= + case TokenKind.SUBSTRING_MATCH: // *= + op = _peek(); + _next(); + break; + default: + op = TokenKind.NO_MATCH; + } + + dynamic value; + if (op != TokenKind.NO_MATCH) { + // Operator hit so we require a value too. + if (_peekIdentifier()) { + value = identifier(); + } else { + value = processQuotedString(false); + } + + if (value == null) { + _error('expected attribute value string or ident', _peekToken.span); + } + } + + _eat(TokenKind.RBRACK); + + return AttributeSelector(attrName, op, value, _makeSpan(start)); + } + return null; + } + + // Declaration grammar: + // + // declaration: property ':' expr prio? + // + // property: IDENT [or IE hacks] + // prio: !important + // expr: (see processExpr) + // + // Here are the ugly IE hacks we need to support: + // property: expr prio? \9; - IE8 and below property, /9 before semi-colon + // *IDENT - IE7 or below + // _IDENT - IE6 property (automatically a valid ident) + Declaration? processDeclaration(List dartStyles) { + Declaration? decl; + + var start = _peekToken.span; + + // IE7 hack of * before property name if so the property is IE7 or below. + var ie7 = _peekKind(TokenKind.ASTERISK); + if (ie7) { + _next(); + } + + // IDENT ':' expr '!important'? + if (TokenKind.isIdentifier(_peekToken.kind)) { + var propertyIdent = identifier(); + + var ieFilterProperty = propertyIdent.name.toLowerCase() == 'filter'; + + _eat(TokenKind.COLON); + + var exprs = processExpr(ieFilterProperty); + + var dartComposite = _styleForDart(propertyIdent, exprs, dartStyles); + + // Handle !important (prio) + var importantPriority = _maybeEat(TokenKind.IMPORTANT); + + decl = Declaration(propertyIdent, exprs, dartComposite, _makeSpan(start), + important: importantPriority, ie7: ie7); + } else if (_peekToken.kind == TokenKind.VAR_DEFINITION) { + _next(); + Identifier? definedName; + if (_peekIdentifier()) definedName = identifier(); + + _eat(TokenKind.COLON); + + var exprs = processExpr(); + + decl = VarDefinition(definedName, exprs, _makeSpan(start)); + } else if (_peekToken.kind == TokenKind.DIRECTIVE_INCLUDE) { + // @include mixinName in the declaration area. + var span = _makeSpan(start); + var include = processInclude(span, eatSemiColon: false); + decl = IncludeMixinAtDeclaration(include, span); + } else if (_peekToken.kind == TokenKind.DIRECTIVE_EXTEND) { + var simpleSequences = []; + + _next(); + var span = _makeSpan(start); + var selector = simpleSelector(); + if (selector == null) { + _warning('@extends expecting simple selector name', span); + } else { + simpleSequences.add(selector); + } + if (_peekKind(TokenKind.COLON)) { + var pseudoSelector = processPseudoSelector(_peekToken.span); + if (pseudoSelector is PseudoElementSelector || + pseudoSelector is PseudoClassSelector) { + simpleSequences.add(pseudoSelector!); + } else { + _warning('not a valid selector', span); + } + } + decl = ExtendDeclaration(simpleSequences, span); + } + + return decl; + } + + /// List of styles exposed to the Dart UI framework. + static const int _fontPartFont = 0; + static const int _fontPartVariant = 1; + static const int _fontPartWeight = 2; + static const int _fontPartSize = 3; + static const int _fontPartFamily = 4; + static const int _fontPartStyle = 5; + static const int _marginPartMargin = 6; + static const int _marginPartLeft = 7; + static const int _marginPartTop = 8; + static const int _marginPartRight = 9; + static const int _marginPartBottom = 10; + static const int _lineHeightPart = 11; + static const int _borderPartBorder = 12; + static const int _borderPartLeft = 13; + static const int _borderPartTop = 14; + static const int _borderPartRight = 15; + static const int _borderPartBottom = 16; + static const int _borderPartWidth = 17; + static const int _borderPartLeftWidth = 18; + static const int _borderPartTopWidth = 19; + static const int _borderPartRightWidth = 20; + static const int _borderPartBottomWidth = 21; + static const int _heightPart = 22; + static const int _widthPart = 23; + static const int _paddingPartPadding = 24; + static const int _paddingPartLeft = 25; + static const int _paddingPartTop = 26; + static const int _paddingPartRight = 27; + static const int _paddingPartBottom = 28; + + static const Map _stylesToDart = { + 'font': _fontPartFont, + 'font-family': _fontPartFamily, + 'font-size': _fontPartSize, + 'font-style': _fontPartStyle, + 'font-variant': _fontPartVariant, + 'font-weight': _fontPartWeight, + 'line-height': _lineHeightPart, + 'margin': _marginPartMargin, + 'margin-left': _marginPartLeft, + 'margin-right': _marginPartRight, + 'margin-top': _marginPartTop, + 'margin-bottom': _marginPartBottom, + 'border': _borderPartBorder, + 'border-left': _borderPartLeft, + 'border-right': _borderPartRight, + 'border-top': _borderPartTop, + 'border-bottom': _borderPartBottom, + 'border-width': _borderPartWidth, + 'border-left-width': _borderPartLeftWidth, + 'border-top-width': _borderPartTopWidth, + 'border-right-width': _borderPartRightWidth, + 'border-bottom-width': _borderPartBottomWidth, + 'height': _heightPart, + 'width': _widthPart, + 'padding': _paddingPartPadding, + 'padding-left': _paddingPartLeft, + 'padding-top': _paddingPartTop, + 'padding-right': _paddingPartRight, + 'padding-bottom': _paddingPartBottom + }; + + static const Map _nameToFontWeight = { + 'bold': FontWeight.bold, + 'normal': FontWeight.normal + }; + + static int? _findStyle(String styleName) => _stylesToDart[styleName]; + + DartStyleExpression? _styleForDart(Identifier property, Expressions exprs, + List dartStyles) { + var styleType = _findStyle(property.name.toLowerCase()); + if (styleType != null) { + return buildDartStyleNode(styleType, exprs, dartStyles); + } + return null; + } + + FontExpression _mergeFontStyles( + FontExpression fontExpr, List dartStyles) { + // Merge all font styles for this class selector. + for (var dartStyle in dartStyles) { + if (dartStyle.isFont) { + fontExpr = FontExpression.merge(dartStyle as FontExpression, fontExpr); + } + } + + return fontExpr; + } + + DartStyleExpression? buildDartStyleNode( + int styleType, Expressions exprs, List dartStyles) { + switch (styleType) { + // Properties in order: + // + // font-style font-variant font-weight font-size/line-height font-family + // + // The font-size and font-family values are required. If other values are + // missing; a default, if it exist, will be used. + case _fontPartFont: + var processor = ExpressionsProcessor(exprs); + return _mergeFontStyles(processor.processFont(), dartStyles); + case _fontPartFamily: + var processor = ExpressionsProcessor(exprs); + + try { + return _mergeFontStyles(processor.processFontFamily(), dartStyles); + } catch (fontException) { + _error('$fontException', _peekToken.span); + } + break; + case _fontPartSize: + var processor = ExpressionsProcessor(exprs); + return _mergeFontStyles(processor.processFontSize(), dartStyles); + case _fontPartStyle: + // Possible style values: + // normal [default] + // italic + // oblique + // inherit + + // TODO(terry): TBD + break; + case _fontPartVariant: + // Possible variant values: + // normal [default] + // small-caps + // inherit + + // TODO(terry): TBD + break; + case _fontPartWeight: + // Possible weight values: + // normal [default] + // bold + // bolder + // lighter + // 100 - 900 + // inherit + + // TODO(terry): Only 'normal', 'bold', or values of 100-900 supported + // need to handle bolder, lighter, and inherit. See + // https://github.com/dart-lang/csslib/issues/1 + var expr = exprs.expressions[0]; + if (expr is NumberTerm) { + var fontExpr = FontExpression(expr.span, weight: expr.value as int?); + return _mergeFontStyles(fontExpr, dartStyles); + } else if (expr is LiteralTerm) { + var weight = _nameToFontWeight[expr.value.toString()]; + if (weight != null) { + var fontExpr = FontExpression(expr.span, weight: weight); + return _mergeFontStyles(fontExpr, dartStyles); + } + } + break; + case _lineHeightPart: + if (exprs.expressions.length == 1) { + var expr = exprs.expressions[0]; + if (expr is UnitTerm) { + var unitTerm = expr; + // TODO(terry): Need to handle other units and LiteralTerm normal + // See https://github.com/dart-lang/csslib/issues/2. + if (unitTerm.unit == TokenKind.UNIT_LENGTH_PX || + unitTerm.unit == TokenKind.UNIT_LENGTH_PT) { + var fontExpr = FontExpression(expr.span, + lineHeight: LineHeight(expr.value as num, inPixels: true)); + return _mergeFontStyles(fontExpr, dartStyles); + } else if (isChecked) { + _warning('Unexpected unit for line-height', expr.span); + } + } else if (expr is NumberTerm) { + var fontExpr = FontExpression(expr.span, + lineHeight: LineHeight(expr.value as num, inPixels: false)); + return _mergeFontStyles(fontExpr, dartStyles); + } else if (isChecked) { + _warning('Unexpected value for line-height', expr.span); + } + } + break; + case _marginPartMargin: + return MarginExpression.boxEdge(exprs.span, processFourNums(exprs)); + case _borderPartBorder: + for (var expr in exprs.expressions) { + var v = marginValue(expr); + if (v != null) { + final box = BoxEdge.uniform(v); + return BorderExpression.boxEdge(exprs.span, box); + } + } + break; + case _borderPartWidth: + var v = marginValue(exprs.expressions[0]); + if (v != null) { + final box = BoxEdge.uniform(v); + return BorderExpression.boxEdge(exprs.span, box); + } + break; + case _paddingPartPadding: + return PaddingExpression.boxEdge(exprs.span, processFourNums(exprs)); + case _marginPartLeft: + case _marginPartTop: + case _marginPartRight: + case _marginPartBottom: + case _borderPartLeft: + case _borderPartTop: + case _borderPartRight: + case _borderPartBottom: + case _borderPartLeftWidth: + case _borderPartTopWidth: + case _borderPartRightWidth: + case _borderPartBottomWidth: + case _heightPart: + case _widthPart: + case _paddingPartLeft: + case _paddingPartTop: + case _paddingPartRight: + case _paddingPartBottom: + if (exprs.expressions.isNotEmpty) { + return processOneNumber(exprs, styleType); + } + break; + } + return null; + } + + // TODO(terry): Look at handling width of thin, thick, etc. any none numbers + // to convert to a number. + DartStyleExpression? processOneNumber(Expressions exprs, int part) { + var value = marginValue(exprs.expressions[0]); + if (value != null) { + return switch (part) { + _marginPartLeft => MarginExpression(exprs.span, left: value), + _marginPartTop => MarginExpression(exprs.span, top: value), + _marginPartRight => MarginExpression(exprs.span, right: value), + _marginPartBottom => MarginExpression(exprs.span, bottom: value), + _borderPartLeft || + _borderPartLeftWidth => + BorderExpression(exprs.span, left: value), + _borderPartTop || + _borderPartTopWidth => + BorderExpression(exprs.span, top: value), + _borderPartRight || + _borderPartRightWidth => + BorderExpression(exprs.span, right: value), + _borderPartBottom || + _borderPartBottomWidth => + BorderExpression(exprs.span, bottom: value), + _heightPart => HeightExpression(exprs.span, value), + _widthPart => WidthExpression(exprs.span, value), + _paddingPartLeft => PaddingExpression(exprs.span, left: value), + _paddingPartTop => PaddingExpression(exprs.span, top: value), + _paddingPartRight => PaddingExpression(exprs.span, right: value), + _paddingPartBottom => PaddingExpression(exprs.span, bottom: value), + _ => null + }; + } + return null; + } + + /// Margins are of the format: + /// + /// * top,right,bottom,left (4 parameters) + /// * top,right/left, bottom (3 parameters) + /// * top/bottom,right/left (2 parameters) + /// * top/right/bottom/left (1 parameter) + /// + /// The values of the margins can be a unit or unitless or auto. + BoxEdge? processFourNums(Expressions exprs) { + num? top; + num? right; + num? bottom; + num? left; + + var totalExprs = exprs.expressions.length; + switch (totalExprs) { + case 1: + top = marginValue(exprs.expressions[0]); + right = top; + bottom = top; + left = top; + break; + case 2: + top = marginValue(exprs.expressions[0]); + bottom = top; + right = marginValue(exprs.expressions[1]); + left = right; + break; + case 3: + top = marginValue(exprs.expressions[0]); + right = marginValue(exprs.expressions[1]); + left = right; + bottom = marginValue(exprs.expressions[2]); + break; + case 4: + top = marginValue(exprs.expressions[0]); + right = marginValue(exprs.expressions[1]); + bottom = marginValue(exprs.expressions[2]); + left = marginValue(exprs.expressions[3]); + break; + default: + return null; + } + + return BoxEdge.clockwiseFromTop(top, right, bottom, left); + } + + // TODO(terry): Need to handle auto. + num? marginValue(Expression exprTerm) { + if (exprTerm is UnitTerm) { + return exprTerm.value as num; + } else if (exprTerm is NumberTerm) { + return exprTerm.value as num; + } + return null; + } + + // Expression grammar: + // + // expression: term [ operator? term]* + // + // operator: '/' | ',' + // term: (see processTerm) + Expressions processExpr([bool ieFilter = false]) { + var start = _peekToken.span; + var expressions = Expressions(_makeSpan(start)); + + var keepGoing = true; + dynamic expr; + while (keepGoing && (expr = processTerm(ieFilter)) != null) { + Expression? op; + + var opStart = _peekToken.span; + + switch (_peek()) { + case TokenKind.SLASH: + op = OperatorSlash(_makeSpan(opStart)); + break; + case TokenKind.COMMA: + op = OperatorComma(_makeSpan(opStart)); + break; + case TokenKind.BACKSLASH: + // Backslash outside of string; detected IE8 or older signaled by \9 + // at end of an expression. + var ie8Start = _peekToken.span; + + _next(); + if (_peekKind(TokenKind.INTEGER)) { + var numToken = _next(); + var value = int.parse(numToken.text); + if (value == 9) { + op = IE8Term(_makeSpan(ie8Start)); + } else if (isChecked) { + _warning( + '\$value is not valid in an expression', _makeSpan(start)); + } + } + break; + } + + if (expr != null) { + if (expr is List) { + for (var exprItem in expr) { + expressions.add(exprItem); + } + } else { + expressions.add(expr as Expression); + } + } else { + keepGoing = false; + } + + if (op != null) { + expressions.add(op); + if (op is IE8Term) { + keepGoing = false; + } else { + _next(); + } + } + } + + return expressions; + } + + // ignore: constant_identifier_names + static const int MAX_UNICODE = 0x10FFFF; + + // Term grammar: + // + // term: + // unary_operator? + // [ term_value ] + // | STRING S* | IDENT S* | URI S* | UNICODERANGE S* | hexcolor + // + // term_value: + // NUMBER S* | PERCENTAGE S* | LENGTH S* | EMS S* | EXS S* | ANGLE S* | + // TIME S* | FREQ S* | function + // + // NUMBER: {num} + // PERCENTAGE: {num}% + // LENGTH: {num}['px' | 'cm' | 'mm' | 'in' | 'pt' | 'pc'] + // EMS: {num}'em' + // EXS: {num}'ex' + // ANGLE: {num}['deg' | 'rad' | 'grad'] + // TIME: {num}['ms' | 's'] + // FREQ: {num}['hz' | 'khz'] + // function: IDENT '(' expr ')' + // + dynamic /* Expression | List | ... */ processTerm( + [bool ieFilter = false]) { + var start = _peekToken.span; + var unary = ''; + + dynamic processIdentifier() { + var nameValue = identifier(); // Snarf up the ident we'll remap, maybe. + + if (!ieFilter && _maybeEat(TokenKind.LPAREN)) { + var calc = processCalc(nameValue); + if (calc != null) return calc; + // FUNCTION + return processFunction(nameValue); + } + if (ieFilter) { + if (_maybeEat(TokenKind.COLON) && + nameValue.name.toLowerCase() == 'progid') { + // IE filter:progid: + return processIEFilter(start); + } else { + // Handle filter: where name is any filter e.g., alpha, + // chroma, Wave, blur, etc. + return processIEFilter(start); + } + } + + // TODO(terry): Need to have a list of known identifiers today only + // 'from' is special. + if (nameValue.name == 'from') { + return LiteralTerm(nameValue, nameValue.name, _makeSpan(start)); + } + + // What kind of identifier is it, named color? + var colorEntry = TokenKind.matchColorName(nameValue.name); + if (colorEntry == null) { + if (isChecked) { + var propName = nameValue.name; + var errMsg = TokenKind.isPredefinedName(propName) + ? 'Improper use of property value $propName' + : 'Unknown property value $propName'; + _warning(errMsg, _makeSpan(start)); + } + return LiteralTerm(nameValue, nameValue.name, _makeSpan(start)); + } + + // Yes, process the color as an RGB value. + var rgbColor = + TokenKind.decimalToHex(TokenKind.colorValue(colorEntry), 6); + return _parseHex(rgbColor, _makeSpan(start)); + } + + switch (_peek()) { + case TokenKind.HASH: + _eat(TokenKind.HASH); + if (!_anyWhiteSpaceBeforePeekToken(TokenKind.HASH)) { + String? hexText; + if (_peekKind(TokenKind.INTEGER)) { + var hexText1 = _peekToken.text; + _next(); + // Append identifier only if there's no delimiting whitespace. + if (_peekIdentifier() && _previousToken!.end == _peekToken.start) { + hexText = '$hexText1${identifier().name}'; + } else { + hexText = hexText1; + } + } else if (_peekIdentifier()) { + hexText = identifier().name; + } + if (hexText != null) { + return _parseHex(hexText, _makeSpan(start)); + } + } + + if (isChecked) { + _warning('Expected hex number', _makeSpan(start)); + } + // Construct the bad hex value with a #number. + return _parseHex( + ' ${(processTerm() as LiteralTerm).text}', _makeSpan(start)); + case TokenKind.INTEGER: + var t = _next(); + var value = int.parse('$unary${t.text}'); + return processDimension(t, value, _makeSpan(start)); + case TokenKind.DOUBLE: + var t = _next(); + var value = double.parse('$unary${t.text}'); + return processDimension(t, value, _makeSpan(start)); + case TokenKind.SINGLE_QUOTE: + var value = processQuotedString(false); + value = "'${_escapeString(value, single: true)}'"; + return LiteralTerm(value, value, _makeSpan(start)); + case TokenKind.DOUBLE_QUOTE: + var value = processQuotedString(false); + value = '"${_escapeString(value)}"'; + return LiteralTerm(value, value, _makeSpan(start)); + case TokenKind.LPAREN: + _next(); + + var group = GroupTerm(_makeSpan(start)); + + dynamic /* Expression | List | ... */ term; + do { + term = processTerm(); + if (term != null && term is LiteralTerm) { + group.add(term); + } + } while (term != null && + !_maybeEat(TokenKind.RPAREN) && + !isPrematureEndOfFile()); + + return group; + case TokenKind.LBRACK: + _next(); + + var term = processTerm() as LiteralTerm; + if (term is! NumberTerm) { + _error('Expecting a positive number', _makeSpan(start)); + } + + _eat(TokenKind.RBRACK); + + return ItemTerm(term.value, term.text, _makeSpan(start)); + case TokenKind.IDENTIFIER: + return processIdentifier(); + case TokenKind.UNICODE_RANGE: + String? first; + String? second; + int firstNumber; + int secondNumber; + _eat(TokenKind.UNICODE_RANGE, unicodeRange: true); + if (_maybeEat(TokenKind.HEX_INTEGER, unicodeRange: true)) { + first = _previousToken!.text; + firstNumber = int.parse('0x$first'); + if (firstNumber > MAX_UNICODE) { + _error('unicode range must be less than 10FFFF', _makeSpan(start)); + } + if (_maybeEat(TokenKind.MINUS, unicodeRange: true)) { + if (_maybeEat(TokenKind.HEX_INTEGER, unicodeRange: true)) { + second = _previousToken!.text; + secondNumber = int.parse('0x$second'); + if (secondNumber > MAX_UNICODE) { + _error( + 'unicode range must be less than 10FFFF', _makeSpan(start)); + } + if (firstNumber > secondNumber) { + _error('unicode first range can not be greater than last', + _makeSpan(start)); + } + } + } + } else if (_maybeEat(TokenKind.HEX_RANGE, unicodeRange: true)) { + first = _previousToken!.text; + } + + return UnicodeRangeTerm(first, second, _makeSpan(start)); + case TokenKind.AT: + if (messages.options.lessSupport) { + _next(); + + var expr = processExpr(); + if (isChecked && expr.expressions.length > 1) { + _error('only @name for Less syntax', _peekToken.span); + } + + var param = expr.expressions[0]; + var varUsage = + VarUsage((param as LiteralTerm).text, [], _makeSpan(start)); + expr.expressions[0] = varUsage; + return expr.expressions; + } + break; + default: + // For tokens that we don't match above, but that are identifier like + // ('PT', 'PX', ...) handle them like identifiers. + if (TokenKind.isKindIdentifier(_peek())) { + return processIdentifier(); + } else { + return null; + } + } + } + + /// Process all dimension units. + LiteralTerm processDimension(Token? t, Object value, FileSpan span) { + LiteralTerm term; + var unitType = _peek(); + + switch (unitType) { + case TokenKind.UNIT_EM: + span = span.expand(_next().span); + term = EmTerm(value, t!.text, span); + break; + case TokenKind.UNIT_EX: + span = span.expand(_next().span); + term = ExTerm(value, t!.text, span); + break; + case TokenKind.UNIT_LENGTH_PX: + case TokenKind.UNIT_LENGTH_CM: + case TokenKind.UNIT_LENGTH_MM: + case TokenKind.UNIT_LENGTH_IN: + case TokenKind.UNIT_LENGTH_PT: + case TokenKind.UNIT_LENGTH_PC: + span = span.expand(_next().span); + term = LengthTerm(value, t!.text, span, unitType); + break; + case TokenKind.UNIT_ANGLE_DEG: + case TokenKind.UNIT_ANGLE_RAD: + case TokenKind.UNIT_ANGLE_GRAD: + case TokenKind.UNIT_ANGLE_TURN: + span = span.expand(_next().span); + term = AngleTerm(value, t!.text, span, unitType); + break; + case TokenKind.UNIT_TIME_MS: + case TokenKind.UNIT_TIME_S: + span = span.expand(_next().span); + term = TimeTerm(value, t!.text, span, unitType); + break; + case TokenKind.UNIT_FREQ_HZ: + case TokenKind.UNIT_FREQ_KHZ: + span = span.expand(_next().span); + term = FreqTerm(value, t!.text, span, unitType); + break; + case TokenKind.PERCENT: + span = span.expand(_next().span); + term = PercentageTerm(value, t!.text, span); + break; + case TokenKind.UNIT_FRACTION: + span = span.expand(_next().span); + term = FractionTerm(value, t!.text, span); + break; + case TokenKind.UNIT_RESOLUTION_DPI: + case TokenKind.UNIT_RESOLUTION_DPCM: + case TokenKind.UNIT_RESOLUTION_DPPX: + span = span.expand(_next().span); + term = ResolutionTerm(value, t!.text, span, unitType); + break; + case TokenKind.UNIT_CH: + span = span.expand(_next().span); + term = ChTerm(value, t!.text, span, unitType); + break; + case TokenKind.UNIT_REM: + span = span.expand(_next().span); + term = RemTerm(value, t!.text, span, unitType); + break; + case TokenKind.UNIT_VIEWPORT_VW: + case TokenKind.UNIT_VIEWPORT_VH: + case TokenKind.UNIT_VIEWPORT_VMIN: + case TokenKind.UNIT_VIEWPORT_VMAX: + span = span.expand(_next().span); + term = ViewportTerm(value, t!.text, span, unitType); + break; + case TokenKind.UNIT_LH: + case TokenKind.UNIT_RLH: + span = span.expand(_next().span); + term = LineHeightTerm(value, t!.text, span, unitType); + break; + default: + if (value is Identifier) { + term = LiteralTerm(value, value.name, span); + } else { + term = NumberTerm(value, t!.text, span); + } + } + + return term; + } + + String processQuotedString([bool urlString = false]) { + var start = _peekToken.span; + + // URI term sucks up everything inside of quotes(' or ") or between parens + var stopToken = urlString ? TokenKind.RPAREN : -1; + + // Note: disable skipping whitespace tokens inside a string. + // TODO(jmesserly): the layering here feels wrong. + var inString = tokenizer._inString; + tokenizer._inString = false; + + switch (_peek()) { + case TokenKind.SINGLE_QUOTE: + stopToken = TokenKind.SINGLE_QUOTE; + _next(); // Skip the SINGLE_QUOTE. + start = _peekToken.span; + break; + case TokenKind.DOUBLE_QUOTE: + stopToken = TokenKind.DOUBLE_QUOTE; + _next(); // Skip the DOUBLE_QUOTE. + start = _peekToken.span; + break; + default: + if (urlString) { + if (_peek() == TokenKind.LPAREN) { + _next(); // Skip the LPAREN. + start = _peekToken.span; + } + stopToken = TokenKind.RPAREN; + } else { + _error('unexpected string', _makeSpan(start)); + } + break; + } + + // Gobble up everything until we hit our stop token. + var stringValue = StringBuffer(); + while (_peek() != stopToken && _peek() != TokenKind.END_OF_FILE) { + stringValue.write(_next().text); + } + + tokenizer._inString = inString; + + // All characters between quotes is the string. + if (stopToken != TokenKind.RPAREN) { + _next(); // Skip the SINGLE_QUOTE or DOUBLE_QUOTE; + } + + return stringValue.toString(); + } + + // TODO(terry): Should probably understand IE's non-standard filter syntax to + // fully support calc, var(), etc. + /// IE's filter property breaks CSS value parsing. IE's format can be: + /// + /// filter: progid:DXImageTransform.MS.gradient(Type=0, Color='#9d8b83'); + /// + /// We'll just parse everything after the 'progid:' look for the left paren + /// then parse to the right paren ignoring everything in between. + dynamic processIEFilter(FileSpan startAfterProgidColon) { + // Support non-functional filters (i.e. filter: FlipH) + var kind = _peek(); + if (kind == TokenKind.SEMICOLON || kind == TokenKind.RBRACE) { + var tok = tokenizer.makeIEFilter( + startAfterProgidColon.start.offset, _peekToken.start); + return LiteralTerm(tok.text, tok.text, tok.span); + } + + var parens = 0; + while (_peek() != TokenKind.END_OF_FILE) { + switch (_peek()) { + case TokenKind.LPAREN: + _eat(TokenKind.LPAREN); + parens++; + break; + case TokenKind.RPAREN: + _eat(TokenKind.RPAREN); + if (--parens == 0) { + var tok = tokenizer.makeIEFilter( + startAfterProgidColon.start.offset, _peekToken.start); + return LiteralTerm(tok.text, tok.text, tok.span); + } + break; + default: + _eat(_peek()); + } + } + } + + // TODO(terry): Hack to gobble up the calc expression as a string looking + // for the matching RPAREN the expression is not parsed into the + // AST. + // + // grammar should be: + // + // = calc( ) + // = [ [ '+' | '-' ] ]* + // = [ '*' | '/' ]* + // = | | | ( ) + // + String processCalcExpression() { + var inString = tokenizer._inString; + tokenizer._inString = false; + + // Gobble up everything until we hit our stop token. + var stringValue = StringBuffer(); + var left = 1; + var matchingParens = false; + while (_peek() != TokenKind.END_OF_FILE && !matchingParens) { + var token = _peek(); + if (token == TokenKind.LPAREN) { + left++; + } else if (token == TokenKind.RPAREN) { + left--; + } + + matchingParens = left == 0; + if (!matchingParens) stringValue.write(_next().text); + } + + if (!matchingParens) { + _error('problem parsing function expected ), ', _peekToken.span); + } + + tokenizer._inString = inString; + + return stringValue.toString(); + } + + CalcTerm? processCalc(Identifier func) { + var start = _peekToken.span; + + var name = func.name; + if (const {'calc', '-webkit-calc', '-moz-calc', 'min', 'max', 'clamp'} + .contains(name)) { + // TODO(terry): Implement expression parsing properly. + var expression = processCalcExpression(); + var calcExpr = LiteralTerm(expression, expression, _makeSpan(start)); + + if (!_maybeEat(TokenKind.RPAREN)) { + _error('problem parsing function expected ), ', _peekToken.span); + } + + return CalcTerm(name, name, calcExpr, _makeSpan(start)); + } + + return null; + } + + // Function grammar: + // + // function: IDENT '(' expr ')' + // + TreeNode /* LiteralTerm | Expression */ processFunction(Identifier func) { + var start = _peekToken.span; + var name = func.name; + + switch (name) { + case 'url': + // URI term sucks up everything inside of quotes(' or ") or between + // parens. + var urlParam = processQuotedString(true); + + // TODO(terry): Better error message and checking for mismatched quotes. + if (_peek() == TokenKind.END_OF_FILE) { + _error('problem parsing URI', _peekToken.span); + } + + if (_peek() == TokenKind.RPAREN) { + _next(); + } + + return UriTerm(urlParam, _makeSpan(start)); + case 'var': + // TODO(terry): Consider handling var in IE specific filter/progid. + // This will require parsing entire IE specific syntax + // e.g. `param = value` or `progid:com_id`, etc. + // for example: + // + // var-blur: Blur(Add = 0, Direction = 225, Strength = 10); + // var-gradient: progid:DXImageTransform.Microsoft.gradient" + // (GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670'); + var expr = processExpr(); + if (!_maybeEat(TokenKind.RPAREN)) { + _error('problem parsing var expected ), ', _peekToken.span); + } + if (isChecked && + expr.expressions.whereType().length > 1) { + _error('too many parameters to var()', _peekToken.span); + } + + var paramName = (expr.expressions[0] as LiteralTerm).text; + + // [0] - var name, [1] - OperatorComma, [2] - default value. + var defaultValues = expr.expressions.length >= 3 + ? expr.expressions.sublist(2) + : []; + return VarUsage(paramName, defaultValues, _makeSpan(start)); + default: + var expr = processExpr(); + if (!_maybeEat(TokenKind.RPAREN)) { + _error('problem parsing function expected ), ', _peekToken.span); + } + + return FunctionTerm(name, name, expr, _makeSpan(start)); + } + } + + Identifier identifier() { + var tok = _next(); + + if (!TokenKind.isIdentifier(tok.kind) && + !TokenKind.isKindIdentifier(tok.kind)) { + if (isChecked) { + _warning('expected identifier, but found $tok', tok.span); + } + return Identifier('', _makeSpan(tok.span)); + } + + return Identifier(tok.text, _makeSpan(tok.span)); + } + + // TODO(terry): Move this to base <= 36 and into shared code. + static int _hexDigit(int c) { + if (c >= 48 /*0*/ && c <= 57 /*9*/) { + return c - 48; + } else if (c >= 97 /*a*/ && c <= 102 /*f*/) { + return c - 87; + } else if (c >= 65 /*A*/ && c <= 70 /*F*/) { + return c - 55; + } else { + return -1; + } + } + + HexColorTerm _parseHex(String hexText, SourceSpan span) { + var hexValue = 0; + + for (var i = 0; i < hexText.length; i++) { + var digit = _hexDigit(hexText.codeUnitAt(i)); + if (digit < 0) { + _warning('Bad hex number', span); + return HexColorTerm(BAD_HEX_VALUE(), hexText, span); + } + hexValue = (hexValue << 4) + digit; + } + + // Make 3 character hex value #RRGGBB => #RGB iff: + // high/low nibble of RR is the same, high/low nibble of GG is the same and + // high/low nibble of BB is the same. + if (hexText.length == 6 && + hexText[0] == hexText[1] && + hexText[2] == hexText[3] && + hexText[4] == hexText[5]) { + hexText = '${hexText[0]}${hexText[2]}${hexText[4]}'; + } else if (hexText.length == 4 && + hexText[0] == hexText[1] && + hexText[2] == hexText[3]) { + hexText = '${hexText[0]}${hexText[2]}'; + } else if (hexText.length == 2 && hexText[0] == hexText[1]) { + hexText = hexText[0]; + } + return HexColorTerm(hexValue, hexText, span); + } +} + +class ExpressionsProcessor { + final Expressions _exprs; + int _index = 0; + + ExpressionsProcessor(this._exprs); + + // TODO(terry): Only handles ##px unit. + FontExpression processFontSize() { + // font-size[/line-height] + // + // Possible size values: + // * xx-small + // * small + // * medium [default] + // * large + // * x-large + // * xx-large + // * smaller + // * larger + // * ##length in px, pt, etc. + // * ##%, percent of parent elem's font-size + // * inherit + LengthTerm? size; + LineHeight? lineHt; + var nextIsLineHeight = false; + for (; _index < _exprs.expressions.length; _index++) { + var expr = _exprs.expressions[_index]; + if (size == null && expr is LengthTerm) { + // font-size part. + size = expr; + } else if (size != null) { + if (expr is OperatorSlash) { + // LineHeight could follow? + nextIsLineHeight = true; + } else if (nextIsLineHeight && expr is LengthTerm) { + assert(expr.unit == TokenKind.UNIT_LENGTH_PX); + lineHt = LineHeight(expr.value as num, inPixels: true); + nextIsLineHeight = false; + _index++; + break; + } else { + break; + } + } else { + break; + } + } + + return FontExpression(_exprs.span, size: size, lineHeight: lineHt); + } + + FontExpression processFontFamily() { + var family = []; + + // Possible family values: + // * font-family: arial, Times new roman ,Lucida Sans Unicode,Courier; + // * font-family: "Times New Roman", arial, Lucida Sans Unicode, Courier; + var moreFamilies = false; + + for (; _index < _exprs.expressions.length; _index++) { + var expr = _exprs.expressions[_index]; + if (expr is LiteralTerm) { + if (family.isEmpty || moreFamilies) { + // It's font-family now. + family.add(expr.toString()); + moreFamilies = false; + } else if (isChecked) { + messages.warning('Only font-family can be a list', _exprs.span); + } + } else if (expr is OperatorComma && family.isNotEmpty) { + moreFamilies = true; + } else { + break; + } + } + + return FontExpression(_exprs.span, family: family); + } + + FontExpression processFont() { + // Process all parts of the font expression. + FontExpression? fontSize; + FontExpression? fontFamily; + for (; _index < _exprs.expressions.length; _index++) { + // Order is font-size font-family + fontSize ??= processFontSize(); + fontFamily ??= processFontFamily(); + // TODO(terry): Handle font-weight, font-style, and font-variant. See + // https://github.com/dart-lang/csslib/issues/3 + // https://github.com/dart-lang/csslib/issues/4 + // https://github.com/dart-lang/csslib/issues/5 + } + + return FontExpression(_exprs.span, + size: fontSize?.font.size, + lineHeight: fontSize?.font.lineHeight, + family: fontFamily?.font.family); + } +} + +/// Escapes [text] for use in a CSS string. +/// [single] specifies single quote `'` vs double quote `"`. +String _escapeString(String text, {bool single = false}) { + StringBuffer? result; + + for (var i = 0; i < text.length; i++) { + var code = text.codeUnitAt(i); + String? replace; + switch (code) { + case 34 /*'"'*/ : + if (!single) replace = r'\"'; + break; + case 39 /*"'"*/ : + if (single) replace = r"\'"; + break; + } + + if (replace != null && result == null) { + result = StringBuffer(text.substring(0, i)); + } + + if (result != null) result.write(replace ?? text[i]); + } + + return result == null ? text : result.toString(); +} diff --git a/pkgs/csslib/lib/src/analyzer.dart b/pkgs/csslib/lib/src/analyzer.dart new file mode 100644 index 000000000..9d6f4ff5e --- /dev/null +++ b/pkgs/csslib/lib/src/analyzer.dart @@ -0,0 +1,1014 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +part of '../parser.dart'; + +// TODO(terry): Add optimizing phase to remove duplicated selectors in the same +// selector group (e.g., .btn, .btn { color: red; }). Also, look +// at simplifying selectors expressions too (much harder). +// TODO(terry): Detect invalid directive usage. All @imports must occur before +// all rules other than @charset directive. Any @import directive +// after any non @charset or @import directive are ignored. e.g., +// @import "a.css"; +// div { color: red; } +// @import "b.css"; +// becomes: +// @import "a.css"; +// div { color: red; } +// + +/// Analysis phase will validate/fixup any new CSS feature or any Sass style +/// feature. +class Analyzer { + final List _styleSheets; + final Messages _messages; + + Analyzer(this._styleSheets, this._messages); + + // TODO(terry): Currently each feature walks the AST each time. Once we have + // our complete feature set consider benchmarking the cost and + // possibly combine in one walk. + void run() { + // Expand top-level @include. + TopLevelIncludes.expand(_messages, _styleSheets); + + // Expand @include in declarations. + DeclarationIncludes.expand(_messages, _styleSheets); + + // Remove all @mixin and @include + for (var styleSheet in _styleSheets) { + MixinsAndIncludes.remove(styleSheet); + } + + // Expand any nested selectors using selector descendant combinator to + // signal CSS inheritance notation. + for (var styleSheet in _styleSheets) { + ExpandNestedSelectors() + ..visitStyleSheet(styleSheet) + ..flatten(styleSheet); + } + + // Expand any @extend. + for (var styleSheet in _styleSheets) { + var allExtends = AllExtends()..visitStyleSheet(styleSheet); + InheritExtends(_messages, allExtends).visitStyleSheet(styleSheet); + } + } +} + +/// Traverse all rulesets looking for nested ones. If a ruleset is in a +/// declaration group (implies nested selector) then generate new ruleset(s) at +/// level 0 of CSS using selector inheritance syntax (flattens the nesting). +/// +/// How the AST works for a rule [RuleSet] and nested rules. First of all a +/// CSS rule [RuleSet] consist of a selector and a declaration e.g., +/// +/// selector { +/// declaration +/// } +/// +/// AST structure of a [RuleSet] is: +/// +/// RuleSet +/// SelectorGroup +/// List +/// List +/// Combinator // +, >, ~, DESCENDENT, or NONE +/// SimpleSelector // class, id, element, namespace, attribute +/// DeclarationGroup +/// List // Declaration or RuleSet +/// +/// For the simple rule: +/// +/// div + span { color: red; } +/// +/// the AST [RuleSet] is: +/// +/// RuleSet +/// SelectorGroup +/// List +/// [0] +/// List +/// [0] Combinator = COMBINATOR_NONE +/// ElementSelector (name = div) +/// [1] Combinator = COMBINATOR_PLUS +/// ElementSelector (name = span) +/// DeclarationGroup +/// List // Declarations or RuleSets +/// [0] +/// Declaration (property = color, expression = red) +/// +/// Usually a SelectorGroup contains 1 Selector. Consider the selectors: +/// +/// div { color: red; } +/// a { color: red; } +/// +/// are equivalent to +/// +/// div, a { color : red; } +/// +/// In the above the RuleSet would have a SelectorGroup with 2 selectors e.g., +/// +/// RuleSet +/// SelectorGroup +/// List +/// [0] +/// List +/// [0] Combinator = COMBINATOR_NONE +/// ElementSelector (name = div) +/// [1] +/// List +/// [0] Combinator = COMBINATOR_NONE +/// ElementSelector (name = a) +/// DeclarationGroup +/// List // Declarations or RuleSets +/// [0] +/// Declaration (property = color, expression = red) +/// +/// For a nested rule e.g., +/// +/// div { +/// color : blue; +/// a { color : red; } +/// } +/// +/// Would map to the follow CSS rules: +/// +/// div { color: blue; } +/// div a { color: red; } +/// +/// The AST for the former nested rule is: +/// +/// RuleSet +/// SelectorGroup +/// List +/// [0] +/// List +/// [0] Combinator = COMBINATOR_NONE +/// ElementSelector (name = div) +/// DeclarationGroup +/// List // Declarations or RuleSets +/// [0] +/// Declaration (property = color, expression = blue) +/// [1] +/// RuleSet +/// SelectorGroup +/// List +/// [0] +/// List +/// [0] Combinator = COMBINATOR_NONE +/// ElementSelector (name = a) +/// DeclarationGroup +/// List // Declarations or RuleSets +/// [0] +/// Declaration (property = color, expression = red) +/// +/// Nested rules is a terse mechanism to describe CSS inheritance. The analyzer +/// will flatten and expand the nested rules to it's flatten structure. Using +/// the all parent [RuleSets] (selector expressions) and applying each nested +/// [RuleSet] to the list of [Selectors] in a [SelectorGroup]. +/// +/// Then result is a style sheet where all nested rules have been flatten and +/// expanded. +class ExpandNestedSelectors extends Visitor { + /// Parent [RuleSet] if a nested rule otherwise `null`. + RuleSet? _parentRuleSet; + + /// Top-most rule if nested rules. + SelectorGroup? _topLevelSelectorGroup; + + /// SelectorGroup at each nesting level. + SelectorGroup? _nestedSelectorGroup; + + /// Declaration (sans the nested selectors). + DeclarationGroup? _flatDeclarationGroup; + + /// Each nested selector get's a flatten RuleSet. + List _expandedRuleSets = []; + + /// Maping of a nested rule set to the fully expanded list of RuleSet(s). + final _expansions = >{}; + + @override + void visitRuleSet(RuleSet node) { + final oldParent = _parentRuleSet; + + var oldNestedSelectorGroups = _nestedSelectorGroup; + + if (_nestedSelectorGroup == null) { + // Create top-level selector (may have nested rules). + final newSelectors = node.selectorGroup!.selectors.toList(); + _topLevelSelectorGroup = SelectorGroup(newSelectors, node.span); + _nestedSelectorGroup = _topLevelSelectorGroup; + } else { + // Generate new selector groups from the nested rules. + _nestedSelectorGroup = _mergeToFlatten(node); + } + + _parentRuleSet = node; + + super.visitRuleSet(node); + + _parentRuleSet = oldParent; + + // Remove nested rules; they're all flatten and in the _expandedRuleSets. + node.declarationGroup.declarations + .removeWhere((declaration) => declaration is RuleSet); + + _nestedSelectorGroup = oldNestedSelectorGroups; + + // If any expandedRuleSets and we're back at the top-level rule set then + // there were nested rule set(s). + if (_parentRuleSet == null) { + if (_expandedRuleSets.isNotEmpty) { + // Remember ruleset to replace with these flattened rulesets. + _expansions[node] = _expandedRuleSets; + _expandedRuleSets = []; + } + assert(_flatDeclarationGroup == null); + assert(_nestedSelectorGroup == null); + } + } + + /// Build up the list of all inherited sequences from the parent selector + /// [node] is the current nested selector and it's parent is the last entry in + /// the [_nestedSelectorGroup]. + SelectorGroup _mergeToFlatten(RuleSet node) { + // Create a new SelectorGroup for this nesting level. + var nestedSelectors = _nestedSelectorGroup!.selectors; + var selectors = node.selectorGroup!.selectors; + + // Create a merged set of previous parent selectors and current selectors. + var newSelectors = []; + for (var selector in selectors) { + for (var nestedSelector in nestedSelectors) { + var seq = _mergeNestedSelector(nestedSelector.simpleSelectorSequences, + selector.simpleSelectorSequences); + newSelectors.add(Selector(seq, node.span)); + } + } + + return SelectorGroup(newSelectors, node.span); + } + + /// Merge the nested selector sequences [current] to the [parent] sequences or + /// substitute any & with the parent selector. + List _mergeNestedSelector( + List parent, + List current) { + // If any & operator then the parent selector will be substituted otherwise + // the parent selector is pre-pended to the current selector. + var hasThis = current.any((s) => s.simpleSelector.isThis); + + var newSequence = []; + + if (!hasThis) { + // If no & in the sector group then prefix with the parent selector. + newSequence.addAll(parent); + newSequence.addAll(_convertToDescendentSequence(current)); + } else { + for (var sequence in current) { + if (sequence.simpleSelector.isThis) { + // Substitute the & with the parent selector and only use a combinator + // descendant if & is prefix by a sequence with an empty name e.g., + // "... + &", "&", "... ~ &", etc. + var hasPrefix = newSequence.isNotEmpty && + newSequence.last.simpleSelector.name.isNotEmpty; + newSequence.addAll( + hasPrefix ? _convertToDescendentSequence(parent) : parent); + } else { + newSequence.add(sequence); + } + } + } + + return newSequence; + } + + /// Return selector sequences with first sequence combinator being a + /// descendant. Used for nested selectors when the parent selector needs to + /// be prefixed to a nested selector or to substitute the this (&) with the + /// parent selector. + List _convertToDescendentSequence( + List sequences) { + if (sequences.isEmpty) return sequences; + + var newSequences = []; + var first = sequences.first; + newSequences.add(SimpleSelectorSequence( + first.simpleSelector, first.span, TokenKind.COMBINATOR_DESCENDANT)); + newSequences.addAll(sequences.skip(1)); + + return newSequences; + } + + @override + void visitDeclarationGroup(DeclarationGroup node) { + var span = node.span; + + var currentGroup = DeclarationGroup([], span); + + var oldGroup = _flatDeclarationGroup; + _flatDeclarationGroup = currentGroup; + + var expandedLength = _expandedRuleSets.length; + + super.visitDeclarationGroup(node); + + // We're done with the group. + _flatDeclarationGroup = oldGroup; + + // No nested rule to process it's a top-level rule. + if (_nestedSelectorGroup == _topLevelSelectorGroup) return; + + // If flatten selector's declaration is empty skip this selector, no need + // to emit an empty nested selector. + if (currentGroup.declarations.isEmpty) return; + + var selectorGroup = _nestedSelectorGroup; + + // Build new rule set from the nested selectors and declarations. + var newRuleSet = RuleSet(selectorGroup, currentGroup, span); + + // Place in order so outer-most rule is first. + if (expandedLength == _expandedRuleSets.length) { + _expandedRuleSets.add(newRuleSet); + } else { + _expandedRuleSets.insert(expandedLength, newRuleSet); + } + } + + // Record all declarations in a nested selector (Declaration, VarDefinition + // and MarginGroup) but not the nested rule in the Declaration. + + @override + void visitDeclaration(Declaration node) { + if (_parentRuleSet != null) { + _flatDeclarationGroup!.declarations.add(node); + } + super.visitDeclaration(node); + } + + @override + void visitVarDefinition(VarDefinition node) { + if (_parentRuleSet != null) { + _flatDeclarationGroup!.declarations.add(node); + } + super.visitVarDefinition(node); + } + + @override + void visitExtendDeclaration(ExtendDeclaration node) { + if (_parentRuleSet != null) { + _flatDeclarationGroup!.declarations.add(node); + } + super.visitExtendDeclaration(node); + } + + @override + void visitMarginGroup(MarginGroup node) { + if (_parentRuleSet != null) { + _flatDeclarationGroup!.declarations.add(node); + } + super.visitMarginGroup(node); + } + + /// Replace the rule set that contains nested rules with the flatten rule + /// sets. + void flatten(StyleSheet styleSheet) { + // TODO(terry): Iterate over topLevels instead of _expansions it's already + // a map (this maybe quadratic). + _expansions.forEach((RuleSet ruleSet, List newRules) { + var index = styleSheet.topLevels.indexOf(ruleSet); + if (index == -1) { + // Check any @media directives for nested rules and replace them. + var found = _MediaRulesReplacer.replace(styleSheet, ruleSet, newRules); + assert(found); + } else { + styleSheet.topLevels.insertAll(index + 1, newRules); + } + }); + _expansions.clear(); + } +} + +class _MediaRulesReplacer extends Visitor { + final RuleSet _ruleSet; + final List _newRules; + bool _foundAndReplaced = false; + + /// Look for the [ruleSet] inside of an @media directive; if found then + /// replace with the [newRules]. If [ruleSet] is found and replaced return + /// true. + static bool replace( + StyleSheet styleSheet, RuleSet ruleSet, List newRules) { + var visitor = _MediaRulesReplacer(ruleSet, newRules); + visitor.visitStyleSheet(styleSheet); + return visitor._foundAndReplaced; + } + + _MediaRulesReplacer(this._ruleSet, this._newRules); + + @override + void visitMediaDirective(MediaDirective node) { + var index = node.rules.indexOf(_ruleSet); + if (index != -1) { + node.rules.insertAll(index + 1, _newRules); + _foundAndReplaced = true; + } + } +} + +/// Expand all @include at the top-level the ruleset(s) associated with the +/// mixin. +class TopLevelIncludes extends Visitor { + StyleSheet? _styleSheet; + final Messages _messages; + + /// Map of variable name key to it's definition. + final map = {}; + MixinDefinition? currDef; + + static void expand(Messages messages, List styleSheets) { + TopLevelIncludes(messages, styleSheets); + } + + bool _anyRulesets(MixinRulesetDirective def) => + def.rulesets.any((rule) => rule is RuleSet); + + TopLevelIncludes(this._messages, List styleSheets) { + for (var styleSheet in styleSheets) { + visitTree(styleSheet); + } + } + + @override + void visitStyleSheet(StyleSheet ss) { + _styleSheet = ss; + super.visitStyleSheet(ss); + _styleSheet = null; + } + + @override + void visitIncludeDirective(IncludeDirective node) { + final currDef = this.currDef; + if (map.containsKey(node.name)) { + var mixinDef = map[node.name]; + if (mixinDef is MixinRulesetDirective) { + _TopLevelIncludeReplacer.replace(_styleSheet!, node, mixinDef.rulesets); + } else if (currDef is MixinRulesetDirective && _anyRulesets(currDef)) { + final mixinRuleset = currDef; + var index = mixinRuleset.rulesets.indexOf(node); + mixinRuleset.rulesets.removeAt(index); + _messages.warning( + 'Using declaration mixin ${node.name} as top-level mixin', + node.span); + } + } else { + if (currDef is MixinRulesetDirective) { + var rulesetDirect = currDef; + rulesetDirect.rulesets.removeWhere((entry) { + if (entry == node) { + _messages.warning('Undefined mixin ${node.name}', node.span); + return true; + } + return false; + }); + } + } + super.visitIncludeDirective(node); + } + + @override + void visitMixinRulesetDirective(MixinRulesetDirective node) { + currDef = node; + + super.visitMixinRulesetDirective(node); + + // Replace with latest top-level mixin definition. + map[node.name] = node; + currDef = null; + } + + @override + void visitMixinDeclarationDirective(MixinDeclarationDirective node) { + currDef = node; + + super.visitMixinDeclarationDirective(node); + + // Replace with latest mixin definition. + map[node.name] = node; + currDef = null; + } +} + +/// @include as a top-level with ruleset(s). +class _TopLevelIncludeReplacer extends Visitor { + final IncludeDirective _include; + final List _newRules; + + /// Look for the [ruleSet] inside of an @media directive; if found then + /// replace with the [newRules]. If [ruleSet] is found and replaced return + /// true. + static void replace(StyleSheet styleSheet, IncludeDirective include, + List newRules) { + _TopLevelIncludeReplacer(include, newRules).visitStyleSheet(styleSheet); + } + + _TopLevelIncludeReplacer(this._include, this._newRules); + + @override + void visitStyleSheet(StyleSheet node) { + var index = node.topLevels.indexOf(_include); + if (index != -1) { + node.topLevels.insertAll(index + 1, _newRules); + node.topLevels.replaceRange(index, index + 1, [NoOp()]); + } + super.visitStyleSheet(node); + } + + @override + void visitMixinRulesetDirective(MixinRulesetDirective node) { + var index = node.rulesets.indexOf(_include); + if (index != -1) { + node.rulesets.insertAll(index + 1, _newRules); + // Only the resolve the @include once. + node.rulesets.replaceRange(index, index + 1, [NoOp()]); + } + super.visitMixinRulesetDirective(node); + } +} + +/// Utility function to match an include to a list of either Declarations or +/// RuleSets, depending on type of mixin (ruleset or declaration). The include +/// can be an include in a declaration or an include directive (top-level). +int _findInclude(List list, TreeNode node) { + final matchNode = (node is IncludeMixinAtDeclaration) + ? node.include + : node as IncludeDirective; + + var index = 0; + for (var item in list) { + var includeNode = (item is IncludeMixinAtDeclaration) ? item.include : item; + if (includeNode == matchNode) return index; + index++; + } + return -1; +} + +/// Stamp out a mixin with the defined args substituted with the user's +/// parameters. +class CallMixin extends Visitor { + final MixinDefinition mixinDef; + List? _definedArgs; + Expressions? _currExpressions; + int _currIndex = -1; + + final varUsages = >>{}; + + /// Only var defs with more than one expression (comma separated). + final Map? varDefs; + + CallMixin(this.mixinDef, [this.varDefs]) { + if (mixinDef is MixinRulesetDirective) { + visitMixinRulesetDirective(mixinDef as MixinRulesetDirective); + } else { + visitMixinDeclarationDirective(mixinDef as MixinDeclarationDirective); + } + } + + /// Given a mixin's defined arguments return a cloned mixin definition that + /// has replaced all defined arguments with user's supplied VarUsages. + MixinDefinition transform(List> callArgs) { + // TODO(terry): Handle default arguments and varArgs. + // Transform mixin with callArgs. + for (var index = 0; index < _definedArgs!.length; index++) { + var definedArg = _definedArgs![index]; + VarDefinition? varDef; + if (definedArg is VarDefinition) { + varDef = definedArg; + } else if (definedArg is VarDefinitionDirective) { + var varDirective = definedArg; + varDef = varDirective.def; + } + var callArg = callArgs[index]; + + // Is callArg a var definition with multi-args (expressions > 1). + var defArgs = _varDefsAsCallArgs(callArg); + if (defArgs.isNotEmpty) { + // Replace call args with the var def parameters. + callArgs.insertAll(index, defArgs); + callArgs.removeAt(index + defArgs.length); + callArg = callArgs[index]; + } + + var expressions = varUsages[varDef!.definedName]; + expressions!.forEach((k, v) { + for (var usagesIndex in v) { + k.expressions.replaceRange(usagesIndex, usagesIndex + 1, callArg); + } + }); + } + + // Clone the mixin + return mixinDef.clone(); + } + + /// Rip apart var def with multiple parameters. + List> _varDefsAsCallArgs(List callArg) { + var defArgs = >[]; + var firstCallArg = callArg[0]; + if (firstCallArg is VarUsage) { + var varDef = varDefs![firstCallArg.name]; + var expressions = (varDef!.expression as Expressions).expressions; + assert(expressions.length > 1); + for (var expr in expressions) { + if (expr is! OperatorComma) { + defArgs.add([expr]); + } + } + } + return defArgs; + } + + @override + void visitExpressions(Expressions node) { + var oldExpressions = _currExpressions; + var oldIndex = _currIndex; + + _currExpressions = node; + for (_currIndex = 0; _currIndex < node.expressions.length; _currIndex++) { + node.expressions[_currIndex].visit(this); + } + + _currIndex = oldIndex; + _currExpressions = oldExpressions; + } + + void _addExpression(Map> expressions) { + var indexSet = {}; + indexSet.add(_currIndex); + expressions[_currExpressions!] = indexSet; + } + + @override + void visitVarUsage(VarUsage node) { + assert(_currIndex != -1); + assert(_currExpressions != null); + if (varUsages.containsKey(node.name)) { + var expressions = varUsages[node.name]; + var allIndexes = expressions![_currExpressions]; + if (allIndexes == null) { + _addExpression(expressions); + } else { + allIndexes.add(_currIndex); + } + } else { + var newExpressions = >{}; + _addExpression(newExpressions); + varUsages[node.name] = newExpressions; + } + super.visitVarUsage(node); + } + + @override + void visitMixinDeclarationDirective(MixinDeclarationDirective node) { + _definedArgs = node.definedArgs; + super.visitMixinDeclarationDirective(node); + } + + @override + void visitMixinRulesetDirective(MixinRulesetDirective node) { + _definedArgs = node.definedArgs; + super.visitMixinRulesetDirective(node); + } +} + +/// Expand all @include inside of a declaration associated with a mixin. +class DeclarationIncludes extends Visitor { + StyleSheet? _styleSheet; + final Messages _messages; + + /// Map of variable name key to it's definition. + final Map map = {}; + + /// Cache of mixin called with parameters. + final Map callMap = {}; + MixinDefinition? currDef; + DeclarationGroup? currDeclGroup; + + /// Var definitions with more than 1 expression. + final varDefs = {}; + + static void expand(Messages messages, List styleSheets) { + DeclarationIncludes(messages, styleSheets); + } + + DeclarationIncludes(this._messages, List styleSheets) { + for (var styleSheet in styleSheets) { + visitTree(styleSheet); + } + } + + bool _allIncludes(List rulesets) => + rulesets.every((rule) => rule is IncludeDirective || rule is NoOp); + + CallMixin _createCallDeclMixin(MixinDefinition mixinDef) => + callMap[mixinDef.name] ??= CallMixin(mixinDef, varDefs); + + @override + void visitStyleSheet(StyleSheet ss) { + _styleSheet = ss; + super.visitStyleSheet(ss); + _styleSheet = null; + } + + @override + void visitDeclarationGroup(DeclarationGroup node) { + currDeclGroup = node; + super.visitDeclarationGroup(node); + currDeclGroup = null; + } + + @override + void visitIncludeMixinAtDeclaration(IncludeMixinAtDeclaration node) { + if (map.containsKey(node.include.name)) { + var mixinDef = map[node.include.name]; + + // Fix up any mixin that is really a Declaration but has includes. + if (mixinDef is MixinRulesetDirective) { + if (!_allIncludes(mixinDef.rulesets) && currDeclGroup != null) { + var index = _findInclude(currDeclGroup!.declarations, node); + if (index != -1) { + currDeclGroup!.declarations + .replaceRange(index, index + 1, [NoOp()]); + } + _messages.warning( + 'Using top-level mixin ${node.include.name} as a declaration', + node.span); + } else { + // We're a list of @include(s) inside of a mixin ruleset - convert + // to a list of IncludeMixinAtDeclaration(s). + var origRulesets = mixinDef.rulesets; + var rulesets = []; + if (origRulesets.every((ruleset) => ruleset is IncludeDirective)) { + for (var ruleset in origRulesets) { + rulesets.add(IncludeMixinAtDeclaration( + ruleset as IncludeDirective, ruleset.span)); + } + _IncludeReplacer.replace(_styleSheet!, node, rulesets); + } + } + } + + if (mixinDef!.definedArgs.isNotEmpty && node.include.args.isNotEmpty) { + var callMixin = _createCallDeclMixin(mixinDef); + mixinDef = callMixin.transform(node.include.args); + } + + if (mixinDef is MixinDeclarationDirective) { + _IncludeReplacer.replace( + _styleSheet!, node, mixinDef.declarations.declarations); + } + } else { + _messages.warning('Undefined mixin ${node.include.name}', node.span); + } + + super.visitIncludeMixinAtDeclaration(node); + } + + @override + void visitIncludeDirective(IncludeDirective node) { + if (map.containsKey(node.name)) { + var mixinDef = map[node.name]; + if (currDef is MixinDeclarationDirective && + mixinDef is MixinDeclarationDirective) { + _IncludeReplacer.replace( + _styleSheet!, node, mixinDef.declarations.declarations); + } else if (currDef is MixinDeclarationDirective) { + var decls = + (currDef as MixinDeclarationDirective).declarations.declarations; + var index = _findInclude(decls, node); + if (index != -1) { + decls.replaceRange(index, index + 1, [NoOp()]); + } + } + } + + super.visitIncludeDirective(node); + } + + @override + void visitMixinRulesetDirective(MixinRulesetDirective node) { + currDef = node; + + super.visitMixinRulesetDirective(node); + + // Replace with latest top-level mixin definition. + map[node.name] = node; + currDef = null; + } + + @override + void visitMixinDeclarationDirective(MixinDeclarationDirective node) { + currDef = node; + + super.visitMixinDeclarationDirective(node); + + // Replace with latest mixin definition. + map[node.name] = node; + currDef = null; + } + + @override + void visitVarDefinition(VarDefinition node) { + // Only record var definitions that have multiple expressions (comma + // separated for mixin parameter substitution. + var exprs = (node.expression as Expressions).expressions; + if (exprs.length > 1) { + varDefs[node.definedName] = node; + } + super.visitVarDefinition(node); + } + + @override + void visitVarDefinitionDirective(VarDefinitionDirective node) { + visitVarDefinition(node.def); + } +} + +/// @include as a top-level with ruleset(s). +class _IncludeReplacer extends Visitor { + final TreeNode _include; + final List _newDeclarations; + + /// Look for the [ruleSet] inside of a @media directive; if found then replace + /// with the [newRules]. + static void replace( + StyleSheet ss, TreeNode include, List newDeclarations) { + var visitor = _IncludeReplacer(include, newDeclarations); + visitor.visitStyleSheet(ss); + } + + _IncludeReplacer(this._include, this._newDeclarations); + + @override + void visitDeclarationGroup(DeclarationGroup node) { + var index = _findInclude(node.declarations, _include); + if (index != -1) { + node.declarations.insertAll(index + 1, _newDeclarations); + // Change @include to NoOp so it's processed only once. + node.declarations.replaceRange(index, index + 1, [NoOp()]); + } + super.visitDeclarationGroup(node); + } +} + +/// Remove all @mixin and @include and any NoOp used as placeholder for +/// @include. +class MixinsAndIncludes extends Visitor { + static void remove(StyleSheet styleSheet) { + MixinsAndIncludes().visitStyleSheet(styleSheet); + } + + bool _nodesToRemove(Object node) => + node is IncludeDirective || node is MixinDefinition || node is NoOp; + + @override + void visitStyleSheet(StyleSheet ss) { + var index = ss.topLevels.length; + while (--index >= 0) { + if (_nodesToRemove(ss.topLevels[index])) { + ss.topLevels.removeAt(index); + } + } + super.visitStyleSheet(ss); + } + + @override + void visitDeclarationGroup(DeclarationGroup node) { + var index = node.declarations.length; + while (--index >= 0) { + if (_nodesToRemove(node.declarations[index])) { + node.declarations.removeAt(index); + } + } + super.visitDeclarationGroup(node); + } +} + +/// Find all @extend to create inheritance. +class AllExtends extends Visitor { + final inherits = >{}; + + SelectorGroup? _currSelectorGroup; + int? _currDeclIndex; + final _extendsToRemove = []; + + @override + void visitRuleSet(RuleSet node) { + var oldSelectorGroup = _currSelectorGroup; + _currSelectorGroup = node.selectorGroup; + + super.visitRuleSet(node); + + _currSelectorGroup = oldSelectorGroup; + } + + @override + void visitExtendDeclaration(ExtendDeclaration node) { + var inheritName = ''; + for (var selector in node.selectors) { + inheritName += selector.toString(); + } + if (inherits.containsKey(inheritName)) { + inherits[inheritName]!.add(_currSelectorGroup!); + } else { + inherits[inheritName] = [_currSelectorGroup!]; + } + + // Remove this @extend + _extendsToRemove.add(_currDeclIndex!); + + super.visitExtendDeclaration(node); + } + + @override + void visitDeclarationGroup(DeclarationGroup node) { + var oldDeclIndex = _currDeclIndex; + + var decls = node.declarations; + for (_currDeclIndex = 0; + _currDeclIndex! < decls.length; + _currDeclIndex = _currDeclIndex! + 1) { + decls[_currDeclIndex!].visit(this); + } + + if (_extendsToRemove.isNotEmpty) { + var removeTotal = _extendsToRemove.length - 1; + for (var index = removeTotal; index >= 0; index--) { + decls.removeAt(_extendsToRemove[index]); + } + _extendsToRemove.clear(); + } + + _currDeclIndex = oldDeclIndex; + } +} + +// TODO(terry): Need to handle merging selector sequences +// TODO(terry): Need to handle @extend-Only selectors. +// TODO(terry): Need to handle !optional glag. +/// Changes any selector that matches @extend. +class InheritExtends extends Visitor { + final AllExtends _allExtends; + + InheritExtends(Messages messages, this._allExtends); + + @override + void visitSelectorGroup(SelectorGroup node) { + for (var selectorsIndex = 0; + selectorsIndex < node.selectors.length; + selectorsIndex++) { + var selectors = node.selectors[selectorsIndex]; + var isLastNone = false; + var selectorName = ''; + for (var index = 0; + index < selectors.simpleSelectorSequences.length; + index++) { + var simpleSeq = selectors.simpleSelectorSequences[index]; + var namePart = simpleSeq.simpleSelector.toString(); + selectorName = isLastNone ? (selectorName + namePart) : namePart; + var matches = _allExtends.inherits[selectorName]; + if (matches != null) { + for (var match in matches) { + // Create a new group. + var newSelectors = selectors.clone(); + var newSeq = match.selectors[0].clone(); + if (isLastNone) { + // Add the inherited selector. + node.selectors.add(newSeq); + } else { + // Replace the selector sequence to the left of the pseudo class + // or pseudo element. + + // Make new selector seq combinator the same as the original. + var orgCombinator = + newSelectors.simpleSelectorSequences[index].combinator; + newSeq.simpleSelectorSequences[0].combinator = orgCombinator; + + newSelectors.simpleSelectorSequences.replaceRange( + index, index + 1, newSeq.simpleSelectorSequences); + node.selectors.add(newSelectors); + } + isLastNone = false; + } + } else { + isLastNone = simpleSeq.isCombinatorNone; + } + } + } + super.visitSelectorGroup(node); + } +} diff --git a/pkgs/csslib/lib/src/css_printer.dart b/pkgs/csslib/lib/src/css_printer.dart new file mode 100644 index 000000000..463c855aa --- /dev/null +++ b/pkgs/csslib/lib/src/css_printer.dart @@ -0,0 +1,737 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +part of '../visitor.dart'; + +/// Visitor that produces a formatted string representation of the CSS tree. +class CssPrinter extends Visitor { + StringBuffer _buff = StringBuffer(); + bool _prettyPrint = true; + bool _isInKeyframes = false; + int _indent = 0; + bool _startOfLine = true; + + /// Walk the [tree] Stylesheet. [pretty] if true emits line breaks, extra + /// spaces, friendly property values, etc., if false emits compacted output. + @override + void visitTree(StyleSheet tree, {bool pretty = false}) { + _prettyPrint = pretty; + _buff = StringBuffer(); + _indent = 0; + _startOfLine = true; + + visitStyleSheet(tree); + } + + /// Appends [str] to the output buffer. + void emit(String str) { + if (_prettyPrint) { + if (_startOfLine) { + _startOfLine = false; + _buff.write(' ' * _indent); + } + _buff.write(str); + } else { + _buff.write(str); + } + } + + void _emitLBrace() { + _indent += 2; + _buff.write('{'); + + if (_prettyPrint) { + _buff.writeln(); + _startOfLine = true; + } + } + + void _emitRBrace() { + _indent -= 2; + + if (_prettyPrint) { + if (!_startOfLine) _buff.write('\n'); + _buff.write('${' ' * _indent}}\n'); + _startOfLine = true; + } else { + _buff.write('}'); + } + } + + void _emitSemicolon({bool forceLf = false}) { + if (_prettyPrint) { + _buff.write(';\n'); + _startOfLine = true; + } else { + _buff.write(';'); + if (forceLf) _buff.write('\n'); + } + } + + void _emitLf({bool force = false}) { + if (_prettyPrint) { + _buff.write('\n'); + _startOfLine = true; + } else if (force) { + _buff.write('\n'); + } + } + + /// Returns the output buffer. + @override + String toString() => _buff.toString().trim(); + + String get _sp => _prettyPrint ? ' ' : ''; + + // TODO(terry): When adding obfuscation we'll need isOptimized (compact w/ + // obfuscation) and have isTesting (compact no obfuscation) and + // isCompact would be !prettyPrint. We'll need another boolean + // flag for obfuscation. + bool get _isTesting => !_prettyPrint; + + @override + void visitCalcTerm(CalcTerm node) { + emit('${node.text}('); + node.expr.visit(this); + emit(')'); + } + + @override + void visitCssComment(CssComment node) { + emit('/* ${node.comment} */'); + } + + @override + void visitCommentDefinition(CommentDefinition node) { + emit(''); + } + + @override + void visitMediaExpression(MediaExpression node) { + emit(node.andOperator ? ' AND ' : ' '); + emit('(${node.mediaFeature}'); + if (node.exprs.expressions.isNotEmpty) { + emit(':'); + visitExpressions(node.exprs); + } + emit(')'); + } + + @override + void visitMediaQuery(MediaQuery node) { + var unary = node.hasUnary ? ' ${node.unary}' : ''; + var mediaType = node.hasMediaType ? ' ${node.mediaType}' : ''; + emit('$unary$mediaType'); + for (var expression in node.expressions) { + visitMediaExpression(expression); + } + } + + void emitMediaQueries(List queries) { + var queriesLen = queries.length; + for (var i = 0; i < queriesLen; i++) { + var query = queries[i]; + if (i > 0) emit(','); + visitMediaQuery(query); + } + } + + @override + void visitDocumentDirective(DocumentDirective node) { + emit('@-moz-document '); + node.functions.first.visit(this); + for (var function in node.functions.skip(1)) { + emit(',$_sp'); + function.visit(this); + } + emit(_sp); + _emitLBrace(); + for (var ruleSet in node.groupRuleBody) { + ruleSet.visit(this); + } + _emitRBrace(); + } + + @override + void visitSupportsDirective(SupportsDirective node) { + emit('@supports '); + node.condition!.visit(this); + emit(_sp); + _emitLBrace(); + for (var rule in node.groupRuleBody) { + rule.visit(this); + } + _emitRBrace(); + } + + @override + void visitSupportsConditionInParens(SupportsConditionInParens node) { + emit('('); + node.condition!.visit(this); + emit(')'); + } + + @override + void visitSupportsNegation(SupportsNegation node) { + emit('not$_sp'); + node.condition.visit(this); + } + + @override + void visitSupportsConjunction(SupportsConjunction node) { + node.conditions.first.visit(this); + for (var condition in node.conditions.skip(1)) { + emit('${_sp}and$_sp'); + condition.visit(this); + } + } + + @override + void visitSupportsDisjunction(SupportsDisjunction node) { + node.conditions.first.visit(this); + for (var condition in node.conditions.skip(1)) { + emit('${_sp}or$_sp'); + condition.visit(this); + } + } + + @override + void visitViewportDirective(ViewportDirective node) { + emit('@${node.name}$_sp'); + _emitLBrace(); + node.declarations.visit(this); + _emitRBrace(); + } + + @override + void visitMediaDirective(MediaDirective node) { + emit('@media'); + emitMediaQueries(node.mediaQueries.cast()); + emit(_sp); + _emitLBrace(); + for (var ruleset in node.rules) { + ruleset.visit(this); + } + _emitRBrace(); + } + + @override + void visitHostDirective(HostDirective node) { + emit('@host$_sp'); + _emitLBrace(); + for (var ruleset in node.rules) { + ruleset.visit(this); + } + _emitRBrace(); + } + + /// @page : pseudoPage { + /// decls + /// } + @override + void visitPageDirective(PageDirective node) { + emit('@page'); + if (node.hasIdent || node.hasPseudoPage) { + if (node.hasIdent) emit(' '); + emit(node._ident!); + emit(node.hasPseudoPage ? ':${node._pseudoPage}' : ''); + } + + var declsMargin = node._declsMargin; + var declsMarginLength = declsMargin.length; + emit(_sp); + _emitLBrace(); + for (var i = 0; i < declsMarginLength; i++) { + declsMargin[i].visit(this); + } + _emitRBrace(); + } + + /// @charset "charset encoding" + @override + void visitCharsetDirective(CharsetDirective node) { + emit('@charset "${node.charEncoding}"'); + _emitSemicolon(forceLf: true); + } + + @override + void visitImportDirective(ImportDirective node) { + bool isStartingQuote(String ch) => '\'"'.contains(ch[0]); + + if (_isTesting) { + // Emit assuming url() was parsed; most suite tests use url function. + emit('@import url(${node.import})'); + } else if (isStartingQuote(node.import)) { + emit('@import ${node.import}'); + } else { + // url(...) isn't needed only a URI can follow an @import directive; emit + // url as a string. + emit('@import "${node.import}"'); + } + emitMediaQueries(node.mediaQueries); + _emitSemicolon(forceLf: true); + } + + @override + void visitKeyFrameDirective(KeyFrameDirective node) { + emit('${node.keyFrameName} '); + node.name!.visit(this); + emit(_sp); + _emitLBrace(); + _isInKeyframes = true; + for (final block in node._blocks) { + block.visit(this); + } + _isInKeyframes = false; + _emitRBrace(); + } + + @override + void visitFontFaceDirective(FontFaceDirective node) { + emit('@font-face'); + emit(_sp); + _emitLBrace(); + node._declarations.visit(this); + _emitRBrace(); + } + + @override + void visitKeyFrameBlock(KeyFrameBlock node) { + node._blockSelectors.visit(this); + emit(_sp); + _emitLBrace(); + node._declarations.visit(this); + _emitRBrace(); + } + + @override + void visitStyletDirective(StyletDirective node) { + emit('/* @stylet export as ${node.dartClassName} */'); + _emitLf(force: true); + } + + @override + void visitNamespaceDirective(NamespaceDirective node) { + bool isStartingQuote(String ch) => '\'"'.contains(ch); + + if (isStartingQuote(node._uri!)) { + emit('@namespace ${node.prefix}"${node._uri}"'); + } else { + if (_isTesting) { + // Emit exactly was we parsed. + emit('@namespace ${node.prefix}url(${node._uri})'); + } else { + // url(...) isn't needed only a URI can follow a: + // @namespace prefix directive. + emit('@namespace ${node.prefix}${node._uri}'); + } + } + _emitSemicolon(forceLf: true); + } + + @override + void visitVarDefinitionDirective(VarDefinitionDirective node) { + visitVarDefinition(node.def); + _emitSemicolon(); + } + + @override + void visitMixinRulesetDirective(MixinRulesetDirective node) { + emit('@mixin ${node.name} '); + _emitLBrace(); + for (var ruleset in node.rulesets) { + ruleset.visit(this); + } + _emitRBrace(); + } + + @override + void visitMixinDeclarationDirective(MixinDeclarationDirective node) { + emit('@mixin ${node.name}$_sp'); + _emitLBrace(); + visitDeclarationGroup(node.declarations); + _emitRBrace(); + } + + /// Added optional newLine for handling @include at top-level vs/ inside of + /// a declaration group. + @override + void visitIncludeDirective(IncludeDirective node, [bool topLevel = true]) { + if (topLevel) _emitLf(); + emit('@include ${node.name}'); + _emitSemicolon(forceLf: true); + } + + @override + void visitContentDirective(ContentDirective node) { + // TODO(terry): TBD + } + + @override + void visitRuleSet(RuleSet node) { + node.selectorGroup!.visit(this); + emit(_sp); + _emitLBrace(); + node.declarationGroup.visit(this); + _emitRBrace(); + } + + @override + void visitDeclarationGroup(DeclarationGroup node) { + var declarations = node.declarations; + var declarationsLength = declarations.length; + for (var i = 0; i < declarationsLength; i++) { + declarations[i].visit(this); + // Don't emit the last semicolon in compact mode. + if (_prettyPrint || i < declarationsLength - 1) { + _emitSemicolon(); + } + } + } + + @override + void visitMarginGroup(MarginGroup node) { + var marginSymName = + TokenKind.idToValue(TokenKind.MARGIN_DIRECTIVES, node.margin_sym); + + emit('@$marginSymName$_sp'); + _emitLBrace(); + visitDeclarationGroup(node); + _emitRBrace(); + } + + @override + void visitDeclaration(Declaration node) { + emit('${node.property}:$_sp'); + node.expression!.visit(this); + if (node.important) { + emit('$_sp!important'); + } + } + + @override + void visitVarDefinition(VarDefinition node) { + emit('var-${node.definedName}: '); + node.expression!.visit(this); + } + + @override + void visitIncludeMixinAtDeclaration(IncludeMixinAtDeclaration node) { + // Don't emit a new line we're inside of a declaration group. + visitIncludeDirective(node.include, false); + } + + @override + void visitExtendDeclaration(ExtendDeclaration node) { + emit('@extend '); + for (var selector in node.selectors) { + selector.visit(this); + } + } + + @override + void visitSelectorGroup(SelectorGroup node) { + var selectors = node.selectors; + var selectorsLength = selectors.length; + for (var i = 0; i < selectorsLength; i++) { + if (i > 0) emit(',$_sp'); + selectors[i].visit(this); + } + } + + @override + void visitSimpleSelectorSequence(SimpleSelectorSequence node) { + emit(node._combinatorToString); + node.simpleSelector.visit(this); + } + + @override + void visitSimpleSelector(SimpleSelector node) { + emit(node.name); + } + + @override + void visitNamespaceSelector(NamespaceSelector node) { + emit(node.toString()); + } + + @override + void visitElementSelector(ElementSelector node) { + emit(node.toString()); + } + + @override + void visitAttributeSelector(AttributeSelector node) { + emit(node.toString()); + } + + @override + void visitIdSelector(IdSelector node) { + emit(node.toString()); + } + + @override + void visitClassSelector(ClassSelector node) { + emit(node.toString()); + } + + @override + void visitPseudoClassSelector(PseudoClassSelector node) { + emit(node.toString()); + } + + @override + void visitPseudoElementSelector(PseudoElementSelector node) { + emit(node.toString()); + } + + @override + void visitPseudoClassFunctionSelector(PseudoClassFunctionSelector node) { + emit(':${node.name}('); + node.argument.visit(this); + emit(')'); + } + + @override + void visitPseudoElementFunctionSelector(PseudoElementFunctionSelector node) { + emit('::${node.name}('); + node.expression.visit(this); + emit(')'); + } + + @override + void visitNegationSelector(NegationSelector node) { + emit(':not('); + node.negationArg!.visit(this); + emit(')'); + } + + @override + void visitSelectorExpression(SelectorExpression node) { + var expressions = node.expressions; + var expressionsLength = expressions.length; + for (var i = 0; i < expressionsLength; i++) { + // Add space seperator between terms without an operator. + var expression = expressions[i]; + expression.visit(this); + } + } + + @override + void visitUnicodeRangeTerm(UnicodeRangeTerm node) { + if (node.hasSecond) { + emit('U+${node.first}-${node.second}'); + } else { + emit('U+${node.first}'); + } + } + + @override + void visitLiteralTerm(LiteralTerm node) { + emit(node.text); + } + + @override + void visitHexColorTerm(HexColorTerm node) { + String? mappedName; + if (_isTesting && (node.value is! BAD_HEX_VALUE)) { + mappedName = TokenKind.hexToColorName(node.value); + } + mappedName ??= '#${node.text}'; + + emit(mappedName); + } + + @override + void visitNumberTerm(NumberTerm node) { + visitLiteralTerm(node); + } + + @override + void visitUnitTerm(UnitTerm node) { + emit(node.toString()); + } + + @override + void visitLengthTerm(LengthTerm node) { + emit(node.toString()); + } + + @override + void visitPercentageTerm(PercentageTerm node) { + emit('${node.text}%'); + } + + @override + void visitEmTerm(EmTerm node) { + emit('${node.text}em'); + } + + @override + void visitExTerm(ExTerm node) { + emit('${node.text}ex'); + } + + @override + void visitAngleTerm(AngleTerm node) { + emit(node.toString()); + } + + @override + void visitTimeTerm(TimeTerm node) { + emit(node.toString()); + } + + @override + void visitFreqTerm(FreqTerm node) { + emit(node.toString()); + } + + @override + void visitFractionTerm(FractionTerm node) { + emit('${node.text}fr'); + } + + @override + void visitUriTerm(UriTerm node) { + emit('url("${node.text}")'); + } + + @override + void visitResolutionTerm(ResolutionTerm node) { + emit(node.toString()); + } + + @override + void visitViewportTerm(ViewportTerm node) { + emit(node.toString()); + } + + @override + void visitLineHeightTerm(LineHeightTerm node) { + emit(node.toString()); + } + + @override + void visitFunctionTerm(FunctionTerm node) { + // TODO(terry): Optimize rgb to a hexcolor. + emit('${node.text}('); + node._params.visit(this); + emit(')'); + } + + @override + void visitGroupTerm(GroupTerm node) { + emit('('); + var terms = node._terms; + var termsLength = terms.length; + for (var i = 0; i < termsLength; i++) { + if (i > 0) emit(_sp); + terms[i].visit(this); + } + emit(')'); + } + + @override + void visitItemTerm(ItemTerm node) { + emit('[${node.text}]'); + } + + @override + void visitIE8Term(IE8Term node) { + visitLiteralTerm(node); + } + + @override + void visitOperatorSlash(OperatorSlash node) { + emit('/'); + } + + @override + void visitOperatorComma(OperatorComma node) { + emit(','); + } + + @override + void visitOperatorPlus(OperatorPlus node) { + emit('+'); + } + + @override + void visitOperatorMinus(OperatorMinus node) { + emit('-'); + } + + @override + void visitVarUsage(VarUsage node) { + emit('var(${node.name}'); + if (node.defaultValues.isNotEmpty) { + emit(','); + for (var defaultValue in node.defaultValues) { + emit(' '); + defaultValue.visit(this); + } + } + emit(')'); + } + + @override + void visitExpressions(Expressions node) { + var expressions = node.expressions; + var expressionsLength = expressions.length; + + for (var i = 0; i < expressionsLength; i++) { + // Add space seperator between terms without an operator. + // TODO(terry): Should have a BinaryExpression to solve this problem. + var expression = expressions[i]; + if (i > 0 && + !(expression is OperatorComma || expression is OperatorSlash)) { + // If the previous expression is an operator, use `_sp` so the space is + // collapsed when emitted in compact mode. If the previous expression + // isn't an operator, the space is significant to delimit the two + // expressions and can't be collapsed. + var previous = expressions[i - 1]; + if (previous is OperatorComma || previous is OperatorSlash) { + emit(_sp); + } else if (previous is PercentageTerm && + expression is PercentageTerm && + _isInKeyframes) { + emit(','); + emit(_sp); + } else { + emit(' '); + } + } + expression.visit(this); + } + } + + @override + void visitBinaryExpression(BinaryExpression node) { + // TODO(terry): TBD + throw UnimplementedError('visitBinaryExpression'); + } + + @override + void visitUnaryExpression(UnaryExpression node) { + // TODO(terry): TBD + throw UnimplementedError('visitUnaryExpression'); + } + + @override + void visitIdentifier(Identifier node) { + emit(node.name); + } + + @override + void visitWildcard(Wildcard node) { + emit('*'); + } + + @override + void visitDartStyleExpression(DartStyleExpression node) { + // TODO(terry): TBD + throw UnimplementedError('visitDartStyleExpression'); + } +} diff --git a/pkgs/csslib/lib/src/messages.dart b/pkgs/csslib/lib/src/messages.dart new file mode 100644 index 000000000..fb1516c1c --- /dev/null +++ b/pkgs/csslib/lib/src/messages.dart @@ -0,0 +1,131 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:source_span/source_span.dart'; + +import 'preprocessor_options.dart'; + +enum MessageLevel { info, warning, severe } + +// TODO(#159): Remove the global messages, use some object that tracks +// compilation state. + +/// The global [Messages] for tracking info/warnings/messages. +late Messages messages; + +// Color constants used for generating messages. +const _greenColor = '\u001b[32m'; +const _redColor = '\u001b[31m'; +const _magentaColor = '\u001b[35m'; +const _noColor = '\u001b[0m'; + +/// Map between error levels and their display color. +const Map _errorColors = { + MessageLevel.severe: _redColor, + MessageLevel.warning: _magentaColor, + MessageLevel.info: _greenColor, +}; + +/// Map between error levels and their friendly name. +const Map _errorLabel = { + MessageLevel.severe: 'error', + MessageLevel.warning: 'warning', + MessageLevel.info: 'info', +}; + +/// A single message from the compiler. +class Message { + final MessageLevel level; + final String message; + final SourceSpan? span; + final bool useColors; + + Message(this.level, this.message, {this.span, this.useColors = false}); + + String get describe { + var span = this.span; + if (span == null) { + return message; + } + + var start = span.start; + return '${start.line + 1}:${start.column + 1}:$message'; + } + + @override + String toString() { + var output = StringBuffer(); + var colors = useColors && _errorColors.containsKey(level); + var levelColor = colors ? _errorColors[level] : null; + if (colors) output.write(levelColor); + output + ..write(_errorLabel[level]) + ..write(' '); + if (colors) output.write(_noColor); + + if (span == null) { + output.write(message); + } else { + output.write('on '); + output.write(span!.message(message, color: levelColor)); + } + + return output.toString(); + } +} + +/// This class tracks and prints information, warnings, and errors emitted by +/// the compiler. +class Messages { + /// Called on every error. Set to blank function to suppress printing. + final void Function(Message obj) printHandler; + + final PreprocessorOptions options; + + final List messages = []; + + Messages({PreprocessorOptions? options, this.printHandler = print}) + : options = options ?? const PreprocessorOptions(); + + /// Report a compile-time CSS error. + void error(String message, SourceSpan? span) { + var msg = Message(MessageLevel.severe, message, + span: span, useColors: options.useColors); + + messages.add(msg); + + printHandler(msg); + } + + /// Report a compile-time CSS warning. + void warning(String message, SourceSpan? span) { + if (options.warningsAsErrors) { + error(message, span); + } else { + var msg = Message(MessageLevel.warning, message, + span: span, useColors: options.useColors); + + messages.add(msg); + } + } + + /// Report and informational message about what the compiler is doing. + void info(String message, SourceSpan span) { + var msg = Message(MessageLevel.info, message, + span: span, useColors: options.useColors); + + messages.add(msg); + + if (options.verbose) printHandler(msg); + } + + /// Merge [newMessages] to this message list. + void mergeMessages(Messages newMessages) { + messages.addAll(newMessages.messages); + newMessages.messages + .where((message) => + message.level == MessageLevel.severe || options.verbose) + .forEach(printHandler); + } +} diff --git a/pkgs/csslib/lib/src/polyfill.dart b/pkgs/csslib/lib/src/polyfill.dart new file mode 100644 index 000000000..b65ec61af --- /dev/null +++ b/pkgs/csslib/lib/src/polyfill.dart @@ -0,0 +1,258 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +part of '../parser.dart'; + +/// CSS polyfill emits CSS to be understood by older parsers that which do not +/// understand (var, calc, etc.). +class PolyFill { + final Messages _messages; + Map _allVarDefinitions = {}; + + Set allStyleSheets = {}; + + /// [_pseudoElements] list of known pseudo attributes found in HTML, any + /// CSS pseudo-elements 'name::custom-element' is mapped to the manged name + /// associated with the pseudo-element key. + PolyFill(this._messages); + + /// Run the analyzer on every file that is a style sheet or any component that + /// has a style tag. + void process(StyleSheet styleSheet, {List? includes}) { + if (includes != null) { + processVarDefinitions(includes); + } + processVars(styleSheet); + + // Remove all var definitions for this style sheet. + _RemoveVarDefinitions().visitTree(styleSheet); + } + + /// Process all includes looking for var definitions. + void processVarDefinitions(List includes) { + for (var include in includes) { + _allVarDefinitions = (_VarDefinitionsIncludes(_allVarDefinitions) + ..visitTree(include)) + .varDefs; + } + } + + void processVars(StyleSheet styleSheet) { + // Build list of all var definitions. + var mainStyleSheetVarDefs = (_VarDefAndUsage(_messages, _allVarDefinitions) + ..visitTree(styleSheet)) + .varDefs; + + // Resolve all definitions to a non-VarUsage (terminal expression). + mainStyleSheetVarDefs.forEach((key, value) { + for (var _ in (value.expression as Expressions).expressions) { + mainStyleSheetVarDefs[key] = + _findTerminalVarDefinition(_allVarDefinitions, value); + } + }); + } +} + +/// Build list of all var definitions in all includes. +class _VarDefinitionsIncludes extends Visitor { + final Map varDefs; + + _VarDefinitionsIncludes(this.varDefs); + + @override + void visitTree(StyleSheet tree) { + visitStyleSheet(tree); + } + + @override + void visitVarDefinition(VarDefinition node) { + // Replace with latest variable definition. + varDefs[node.definedName] = node; + super.visitVarDefinition(node); + } + + @override + void visitVarDefinitionDirective(VarDefinitionDirective node) { + visitVarDefinition(node.def); + } +} + +/// Find var- definitions in a style sheet. +/// [found] list of known definitions. +class _VarDefAndUsage extends Visitor { + final Messages _messages; + final Map _knownVarDefs; + final varDefs = {}; + + VarDefinition? currVarDefinition; + List? currentExpressions; + + _VarDefAndUsage(this._messages, this._knownVarDefs); + + @override + void visitTree(StyleSheet tree) { + visitStyleSheet(tree); + } + + @override + void visitVarDefinition(VarDefinition node) { + // Replace with latest variable definition. + currVarDefinition = node; + + _knownVarDefs[node.definedName] = node; + varDefs[node.definedName] = node; + + super.visitVarDefinition(node); + + currVarDefinition = null; + } + + @override + void visitVarDefinitionDirective(VarDefinitionDirective node) { + visitVarDefinition(node.def); + } + + @override + void visitExpressions(Expressions node) { + currentExpressions = node.expressions; + super.visitExpressions(node); + currentExpressions = null; + } + + @override + void visitVarUsage(VarUsage node) { + if (currVarDefinition != null && currVarDefinition!.badUsage) return; + + // Don't process other var() inside of a varUsage. That implies that the + // default is a var() too. Also, don't process any var() inside of a + // varDefinition (they're just place holders until we've resolved all real + // usages. + var expressions = currentExpressions; + var index = expressions!.indexOf(node); + assert(index >= 0); + var def = _knownVarDefs[node.name]; + if (def != null) { + if (def.badUsage) { + // Remove any expressions pointing to a bad var definition. + expressions.removeAt(index); + return; + } + _resolveVarUsage(currentExpressions!, index, + _findTerminalVarDefinition(_knownVarDefs, def)); + } else if (node.defaultValues.any((e) => e is VarUsage)) { + // Don't have a VarDefinition need to use default values resolve all + // default values. + var terminalDefaults = []; + for (var defaultValue in node.defaultValues) { + terminalDefaults.addAll(resolveUsageTerminal(defaultValue as VarUsage)); + } + expressions.replaceRange(index, index + 1, terminalDefaults); + } else if (node.defaultValues.isNotEmpty) { + // No VarDefinition but default value is a terminal expression; use it. + expressions.replaceRange(index, index + 1, node.defaultValues); + } else { + if (currVarDefinition != null) { + currVarDefinition!.badUsage = true; + var mainStyleSheetDef = varDefs[node.name]; + if (mainStyleSheetDef != null) { + varDefs.remove(currVarDefinition!.property); + } + } + // Remove var usage that points at an undefined definition. + expressions.removeAt(index); + _messages.warning('Variable is not defined.', node.span); + } + + var oldExpressions = currentExpressions; + currentExpressions = node.defaultValues; + super.visitVarUsage(node); + currentExpressions = oldExpressions; + } + + List resolveUsageTerminal(VarUsage usage) { + var result = []; + + var varDef = _knownVarDefs[usage.name]; + List expressions; + if (varDef == null) { + // VarDefinition not found try the defaultValues. + expressions = usage.defaultValues; + } else { + // Use the VarDefinition found. + expressions = (varDef.expression as Expressions).expressions; + } + + for (var expr in expressions) { + if (expr is VarUsage) { + // Get terminal value. + result.addAll(resolveUsageTerminal(expr)); + } + } + + // We're at a terminal just return the VarDefinition expression. + if (result.isEmpty && varDef != null) { + result = (varDef.expression as Expressions).expressions; + } + + return result; + } + + void _resolveVarUsage( + List expressions, int index, VarDefinition def) { + var defExpressions = (def.expression as Expressions).expressions; + expressions.replaceRange(index, index + 1, defExpressions); + } +} + +/// Remove all var definitions. +class _RemoveVarDefinitions extends Visitor { + @override + void visitTree(StyleSheet tree) { + visitStyleSheet(tree); + } + + @override + void visitStyleSheet(StyleSheet ss) { + ss.topLevels.removeWhere((e) => e is VarDefinitionDirective); + super.visitStyleSheet(ss); + } + + @override + void visitDeclarationGroup(DeclarationGroup node) { + node.declarations.removeWhere((e) => e is VarDefinition); + super.visitDeclarationGroup(node); + } +} + +/// Find terminal definition (non VarUsage implies real CSS value). +VarDefinition _findTerminalVarDefinition( + Map varDefs, VarDefinition varDef) { + var expressions = varDef.expression as Expressions; + for (var expr in expressions.expressions) { + if (expr is VarUsage) { + var usageName = expr.name; + var foundDef = varDefs[usageName]; + + // If foundDef is unknown check if defaultValues; if it exist then resolve + // to terminal value. + if (foundDef == null) { + // We're either a VarUsage or terminal definition if in varDefs; + // either way replace VarUsage with it's default value because the + // VarDefinition isn't found. + var defaultValues = expr.defaultValues; + var replaceExprs = expressions.expressions; + assert(replaceExprs.length == 1); + replaceExprs.replaceRange(0, 1, defaultValues); + return varDef; + } + return _findTerminalVarDefinition(varDefs, foundDef); + } else { + // Return real CSS property. + return varDef; + } + } + + // Didn't point to a var definition that existed. + return varDef; +} diff --git a/pkgs/csslib/lib/src/preprocessor_options.dart b/pkgs/csslib/lib/src/preprocessor_options.dart new file mode 100644 index 000000000..3879ead14 --- /dev/null +++ b/pkgs/csslib/lib/src/preprocessor_options.dart @@ -0,0 +1,50 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class PreprocessorOptions { + /// Generate polyfill code (e.g., var, etc.) + final bool polyfill; + + /// Report warnings as errors. + final bool warningsAsErrors; + + /// Throw an exception on warnings (not used by command line tool). + final bool throwOnWarnings; + + /// Throw an exception on errors (not used by command line tool). + final bool throwOnErrors; + + /// True to show informational messages. The `--verbose` flag. + final bool verbose; + + /// True to show warning messages for bad CSS. The '--checked' flag. + final bool checked; + + // TODO(terry): Add mixin support and nested rules. + /// Subset of Less commands enabled; disable with '--no-less'. + /// Less syntax supported: + /// - @name at root level statically defines variables resolved at compilation + /// time. Essentially a directive e.g., @var-name. + final bool lessSupport; + + /// Whether to use colors to print messages on the terminal. + final bool useColors; + + /// File to process by the compiler. + final String? inputFile; + + // TODO: Should less support really default to being enabled? + + const PreprocessorOptions({ + this.verbose = false, + this.checked = false, + this.lessSupport = true, + this.warningsAsErrors = false, + this.throwOnErrors = false, + this.throwOnWarnings = false, + this.useColors = true, + this.polyfill = false, + this.inputFile, + }); +} diff --git a/pkgs/csslib/lib/src/property.dart b/pkgs/csslib/lib/src/property.dart new file mode 100644 index 000000000..ec6b85416 --- /dev/null +++ b/pkgs/csslib/lib/src/property.dart @@ -0,0 +1,1183 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// Representations of CSS styles. + +part of '../parser.dart'; + +// TODO(terry): Prune down this file we do need some of the code in this file +// for darker, lighter, how to represent a Font, etc but alot of +// the complexity can be removed. +// See https://github.com/dart-lang/csslib/issues/7 + +/// Base for all style properties (e.g., Color, Font, Border, Margin, etc.) +abstract class _StyleProperty { + /// Returns the expression part of a CSS declaration. Declaration is: + /// + /// property:expression; + /// + /// E.g., if property is color then expression could be rgba(255,255,0) the + /// CSS declaration would be 'color:rgba(255,255,0);'. + /// + /// then _cssExpression would return 'rgba(255,255,0)'. See + /// + String? get cssExpression; +} + +/// Base interface for Color, HSL and RGB. +abstract class ColorBase { + /// Canonical form for color #rrggbb with alpha blending (0.0 == full + /// transparency and 1.0 == fully opaque). If _argb length is 6 it's an + /// rrggbb otherwise it's aarrggbb. + String toHexArgbString(); + + /// Return argb as a value (int). + int get argbValue; +} + +/// General purpose Color class. Represent a color as an ARGB value that can be +/// converted to and from num, hex string, hsl, hsla, rgb, rgba and SVG pre- +/// defined color constant. +class Color implements _StyleProperty, ColorBase { + // If _argb length is 6 it's an rrggbb otherwise it's aarrggbb. + final String _argb; + + // TODO(terry): Look at reducing Rgba and Hsla classes as factories for + // converting from Color to an Rgba or Hsla for reading only. + // Usefulness of creating an Rgba or Hsla is limited. + + /// Create a color with an integer representing the rgb value of red, green, + /// and blue. The value 0xffffff is the color white #ffffff (CSS style). + /// The [rgb] value of 0xffd700 would map to #ffd700 or the constant + /// Color.gold, where ff is red intensity, d7 is green intensity, and 00 is + /// blue intensity. + Color(int rgb, [num? alpha]) : _argb = Color._rgbToArgbString(rgb, alpha); + + /// RGB takes three values. The [red], [green], and [blue] parameters are + /// the intensity of those components where '0' is the least and '256' is the + /// greatest. + /// + /// If [alpha] is provided, it is the level of translucency which ranges from + /// '0' (completely transparent) to '1.0' (completely opaque). It will + /// internally be mapped to an int between '0' and '255' like the other color + /// components. + Color.createRgba(int red, int green, int blue, [num? alpha]) + : _argb = Color.convertToHexString( + Color._clamp(red, 0, 255), + Color._clamp(green, 0, 255), + Color._clamp(blue, 0, 255), + alpha != null ? Color._clamp(alpha, 0, 1) : alpha); + + /// Creates a new color from a CSS color string. For more information, see + /// . + Color.css(String color) : _argb = Color._convertCssToArgb(color)!; + + // TODO(jmesserly): I found the use of percents a bit suprising. + /// HSL takes three values. The [hueDegree] degree on the color wheel; '0' is + /// the least and '100' is the greatest. The value '0' or '360' is red, '120' + /// is green, '240' is blue. Numbers in between reflect different shades. + /// The [saturationPercent] percentage; where'0' is the least and '100' is the + /// greatest (100 represents full color). The [lightnessPercent] percentage; + /// where'0' is the least and '100' is the greatest. The value 0 is dark or + /// black, 100 is light or white and 50 is a medium lightness. + /// + /// If [alpha] is provided, it is the level of translucency which ranges from + /// '0' (completely transparent foreground) to '1.0' (completely opaque + /// foreground). + Color.createHsla(num hueDegree, num saturationPercent, num lightnessPercent, + [num? alpha]) + : _argb = Hsla( + Color._clamp(hueDegree, 0, 360) / 360, + Color._clamp(saturationPercent, 0, 100) / 100, + Color._clamp(lightnessPercent, 0, 100) / 100, + alpha != null ? Color._clamp(alpha, 0, 1) : alpha) + .toHexArgbString(); + + /// The hslaRaw takes three values. The [hue] degree on the color wheel; '0' + /// is the least and '1' is the greatest. The value '0' or '1' is red, the + /// ratio of 120/360 is green, and the ratio of 240/360 is blue. Numbers in + /// between reflect different shades. The [saturation] is a percentage; '0' + /// is the least and '1' is the greatest. The value of '1' is equivalent to + /// 100% (full colour). The [lightness] is a percentage; '0' is the least and + /// '1' is the greatest. The value of '0' is dark (black), the value of '1' + /// is light (white), and the value of '.50' is a medium lightness. + /// + /// The fourth optional parameter is: + /// [alpha] level of translucency range of values is 0..1, zero is a + /// completely transparent foreground and 1 is a completely + /// opaque foreground. + Color.hslaRaw(num hue, num saturation, num lightness, [num? alpha]) + : _argb = Hsla( + Color._clamp(hue, 0, 1), + Color._clamp(saturation, 0, 1), + Color._clamp(lightness, 0, 1), + alpha != null ? Color._clamp(alpha, 0, 1) : alpha) + .toHexArgbString(); + + /// Generate a real constant for pre-defined colors (no leading #). + const Color.hex(this._argb); + + // TODO(jmesserly): this is needed by the example so leave it exposed for now. + @override + String toString() => cssExpression; + + // TODO(terry): Regardless of how color is set (rgb, num, css or hsl) we'll + // always return a rgb or rgba loses fidelity when debugging in + // CSS if user uses hsl and would like to edit as hsl, etc. If + // this is an issue we should keep the original value and not re- + // create the CSS from the normalized value. + @override + String get cssExpression { + if (_argb.length == 6) { + return '#$_argb'; // RGB only, no alpha blending. + } else { + num alpha = Color.hexToInt(_argb.substring(0, 2)); + var a = (alpha / 255).toStringAsPrecision(2); + var r = Color.hexToInt(_argb.substring(2, 4)); + var g = Color.hexToInt(_argb.substring(4, 6)); + var b = Color.hexToInt(_argb.substring(6, 8)); + return 'rgba($r,$g,$b,$a)'; + } + } + + Rgba get rgba { + var nextIndex = 0; + num? a; + if (_argb.length == 8) { + // Get alpha blending value 0..255 + var alpha = Color.hexToInt(_argb.substring(nextIndex, nextIndex + 2)); + // Convert to value from 0..1 + a = double.parse((alpha / 255).toStringAsPrecision(2)); + nextIndex += 2; + } + var r = Color.hexToInt(_argb.substring(nextIndex, nextIndex + 2)); + nextIndex += 2; + var g = Color.hexToInt(_argb.substring(nextIndex, nextIndex + 2)); + nextIndex += 2; + var b = Color.hexToInt(_argb.substring(nextIndex, nextIndex + 2)); + return Rgba(r, g, b, a); + } + + Hsla get hsla => Hsla.fromRgba(rgba); + + @override + int get argbValue => Color.hexToInt(_argb); + + @override + bool operator ==(Object other) => Color.equal(this, other); + + @override + String toHexArgbString() => _argb; + + Color darker(num amount) { + var newRgba = Color._createNewTintShadeFromRgba(rgba, -amount); + return Color.hex(newRgba.toHexArgbString()); + } + + Color lighter(num amount) { + var newRgba = Color._createNewTintShadeFromRgba(rgba, amount); + return Color.hex(newRgba.toHexArgbString()); + } + + static bool equal(ColorBase curr, Object other) { + if (other is Color) { + var o = other; + return o.toHexArgbString() == curr.toHexArgbString(); + } else if (other is Rgba) { + var rgb = other; + return rgb.toHexArgbString() == curr.toHexArgbString(); + } else if (other is Hsla) { + var hsla = other; + return hsla.toHexArgbString() == curr.toHexArgbString(); + } else { + return false; + } + } + + @override + int get hashCode => _argb.hashCode; + + // Conversion routines: + + static String _rgbToArgbString(int rgba, num? alpha) { + num? a; + // If alpha is defined then adjust from 0..1 to 0..255 value, if not set + // then a is left as undefined and passed to convertToHexString. + if (alpha != null) { + a = (Color._clamp(alpha, 0, 1) * 255).round(); + } + + var r = (rgba & 0xff0000) >> 0x10; + var g = (rgba & 0xff00) >> 8; + var b = rgba & 0xff; + + return Color.convertToHexString(r, g, b, a); + } + + static const int _rgbCss = 1; + static const int _rgbaCss = 2; + static const int _hslCss = 3; + static const int _hslaCss = 4; + + /// Parse CSS expressions of the from #rgb, rgb(r,g,b), rgba(r,g,b,a), + /// hsl(h,s,l), hsla(h,s,l,a) and SVG colors (e.g., darkSlateblue, etc.) and + /// convert to argb. + static String? _convertCssToArgb(String value) { + // TODO(terry): Better parser/regex for converting CSS properties. + var color = value.trim().replaceAll('\\s', ''); + if (color[0] == '#') { + var v = color.substring(1); + Color.hexToInt(v); // Valid hexadecimal, throws if not. + return v; + } else if (color.isNotEmpty && color[color.length - 1] == ')') { + int type; + if (color.indexOf('rgb(') == 0 || color.indexOf('RGB(') == 0) { + color = color.substring(4); + type = _rgbCss; + } else if (color.indexOf('rgba(') == 0 || color.indexOf('RGBA(') == 0) { + type = _rgbaCss; + color = color.substring(5); + } else if (color.indexOf('hsl(') == 0 || color.indexOf('HSL(') == 0) { + type = _hslCss; + color = color.substring(4); + } else if (color.indexOf('hsla(') == 0 || color.indexOf('HSLA(') == 0) { + type = _hslaCss; + color = color.substring(5); + } else { + throw UnsupportedError('CSS property not implemented'); + } + + color = color.substring(0, color.length - 1); // Strip close paren. + + var args = []; + var params = color.split(','); + for (var param in params) { + args.add(double.parse(param)); + } + switch (type) { + case _rgbCss: + return Color.convertToHexString( + args[0].toInt(), args[1].toInt(), args[2].toInt()); + case _rgbaCss: + return Color.convertToHexString( + args[0].toInt(), args[1].toInt(), args[2].toInt(), args[3]); + case _hslCss: + return Hsla(args[0], args[1], args[2]).toHexArgbString(); + case _hslaCss: + return Hsla(args[0], args[1], args[2], args[3]).toHexArgbString(); + default: + // Type not defined UnsupportedOperationException should have thrown. + assert(false); + break; + } + } + return null; + } + + static int hexToInt(String hex) => int.parse(hex, radix: 16); + + static String convertToHexString(int r, int g, int b, [num? a]) { + var rHex = Color._numAs2DigitHex(Color._clamp(r, 0, 255)); + var gHex = Color._numAs2DigitHex(Color._clamp(g, 0, 255)); + var bHex = Color._numAs2DigitHex(Color._clamp(b, 0, 255)); + var aHex = (a != null) + ? Color._numAs2DigitHex((Color._clamp(a, 0, 1) * 255).round()) + : ''; + + // TODO(terry) 15.toRadixString(16) return 'F' on Dartium not f as in JS. + // bug: + return '$aHex$rHex$gHex$bHex'.toLowerCase(); + } + + static String _numAs2DigitHex(int v) => v.toRadixString(16).padLeft(2, '0'); + + static T _clamp(T value, T min, T max) => + math.max(math.min(max, value), min); + + /// Change the tint (make color lighter) or shade (make color darker) of all + /// parts of [rgba] (r, g and b). The [amount] is percentage darker between + /// -1 to 0 for darker and 0 to 1 for lighter; '0' is no change. The [amount] + /// will darken or lighten the rgb values; it will not change the alpha value. + /// If [amount] is outside of the value -1 to +1 then [amount] is changed to + /// either the min or max direction -1 or 1. + /// + /// Darker will approach the color #000000 (black) and lighter will approach + /// the color #ffffff (white). + static Rgba _createNewTintShadeFromRgba(Rgba rgba, num amount) { + int r, g, b; + var tintShade = Color._clamp(amount, -1, 1); + if (amount < 0 && rgba.r == 255 && rgba.g == 255 && rgba.b == 255) { + // TODO(terry): See TODO in _changeTintShadeColor; eliminate this test + // by converting to HSL and adjust lightness although this + // is fastest lighter/darker algorithm. + // Darkening white special handling. + r = Color._clamp((255 + (255 * tintShade)).round().toInt(), 0, 255); + g = Color._clamp((255 + (255 * tintShade)).round().toInt(), 0, 255); + b = Color._clamp((255 + (255 * tintShade)).round().toInt(), 0, 255); + } else { + // All other colors then darkening white go here. + r = Color._changeTintShadeColor(rgba.r, tintShade).round().toInt(); + g = Color._changeTintShadeColor(rgba.g, tintShade).round().toInt(); + b = Color._changeTintShadeColor(rgba.b, tintShade).round().toInt(); + } + return Rgba(r, g, b, rgba.a); + } + + // TODO(terry): This does an okay lighter/darker; better would be convert to + // HSL then change the lightness. + /// The parameter [v] is the color to change (r, g, or b) in the range '0' to + /// '255'. The parameter [delta] is a number between '-1' and '1'. A value + /// between '-1' and '0' is darker and a value between '0' and '1' is lighter + /// ('0' imples no change). + static num _changeTintShadeColor(num v, num delta) => + Color._clamp(((1 - delta) * v + (delta * 255)).round(), 0, 255); + + // Predefined CSS colors see + static final Color transparent = const Color.hex('00ffffff'); // Alpha 0.0 + static final Color aliceBlue = const Color.hex('0f08ff'); + static final Color antiqueWhite = const Color.hex('0faebd7'); + static final Color aqua = const Color.hex('00ffff'); + static final Color aquaMarine = const Color.hex('7fffd4'); + static final Color azure = const Color.hex('f0ffff'); + static final Color beige = const Color.hex('f5f5dc'); + static final Color bisque = const Color.hex('ffe4c4'); + static final Color black = const Color.hex('000000'); + static final Color blanchedAlmond = const Color.hex('ffebcd'); + static final Color blue = const Color.hex('0000ff'); + static final Color blueViolet = const Color.hex('8a2be2'); + static final Color brown = const Color.hex('a52a2a'); + static final Color burlyWood = const Color.hex('deb887'); + static final Color cadetBlue = const Color.hex('5f9ea0'); + static final Color chartreuse = const Color.hex('7fff00'); + static final Color chocolate = const Color.hex('d2691e'); + static final Color coral = const Color.hex('ff7f50'); + static final Color cornFlowerBlue = const Color.hex('6495ed'); + static final Color cornSilk = const Color.hex('fff8dc'); + static final Color crimson = const Color.hex('dc143c'); + static final Color cyan = const Color.hex('00ffff'); + static final Color darkBlue = const Color.hex('00008b'); + static final Color darkCyan = const Color.hex('008b8b'); + static final Color darkGoldenRod = const Color.hex('b8860b'); + static final Color darkGray = const Color.hex('a9a9a9'); + static final Color darkGreen = const Color.hex('006400'); + static final Color darkGrey = const Color.hex('a9a9a9'); + static final Color darkKhaki = const Color.hex('bdb76b'); + static final Color darkMagenta = const Color.hex('8b008b'); + static final Color darkOliveGreen = const Color.hex('556b2f'); + static final Color darkOrange = const Color.hex('ff8c00'); + static final Color darkOrchid = const Color.hex('9932cc'); + static final Color darkRed = const Color.hex('8b0000'); + static final Color darkSalmon = const Color.hex('e9967a'); + static final Color darkSeaGreen = const Color.hex('8fbc8f'); + static final Color darkSlateBlue = const Color.hex('483d8b'); + static final Color darkSlateGray = const Color.hex('2f4f4f'); + static final Color darkSlateGrey = const Color.hex('2f4f4f'); + static final Color darkTurquoise = const Color.hex('00ced1'); + static final Color darkViolet = const Color.hex('9400d3'); + static final Color deepPink = const Color.hex('ff1493'); + static final Color deepSkyBlue = const Color.hex('00bfff'); + static final Color dimGray = const Color.hex('696969'); + static final Color dimGrey = const Color.hex('696969'); + static final Color dodgerBlue = const Color.hex('1e90ff'); + static final Color fireBrick = const Color.hex('b22222'); + static final Color floralWhite = const Color.hex('fffaf0'); + static final Color forestGreen = const Color.hex('228b22'); + static final Color fuchsia = const Color.hex('ff00ff'); + static final Color gainsboro = const Color.hex('dcdcdc'); + static final Color ghostWhite = const Color.hex('f8f8ff'); + static final Color gold = const Color.hex('ffd700'); + static final Color goldenRod = const Color.hex('daa520'); + static final Color gray = const Color.hex('808080'); + static final Color green = const Color.hex('008000'); + static final Color greenYellow = const Color.hex('adff2f'); + static final Color grey = const Color.hex('808080'); + static final Color honeydew = const Color.hex('f0fff0'); + static final Color hotPink = const Color.hex('ff69b4'); + static final Color indianRed = const Color.hex('cd5c5c'); + static final Color indigo = const Color.hex('4b0082'); + static final Color ivory = const Color.hex('fffff0'); + static final Color khaki = const Color.hex('f0e68c'); + static final Color lavender = const Color.hex('e6e6fa'); + static final Color lavenderBlush = const Color.hex('fff0f5'); + static final Color lawnGreen = const Color.hex('7cfc00'); + static final Color lemonChiffon = const Color.hex('fffacd'); + static final Color lightBlue = const Color.hex('add8e6'); + static final Color lightCoral = const Color.hex('f08080'); + static final Color lightCyan = const Color.hex('e0ffff'); + static final Color lightGoldenRodYellow = const Color.hex('fafad2'); + static final Color lightGray = const Color.hex('d3d3d3'); + static final Color lightGreen = const Color.hex('90ee90'); + static final Color lightGrey = const Color.hex('d3d3d3'); + static final Color lightPink = const Color.hex('ffb6c1'); + static final Color lightSalmon = const Color.hex('ffa07a'); + static final Color lightSeaGreen = const Color.hex('20b2aa'); + static final Color lightSkyBlue = const Color.hex('87cefa'); + static final Color lightSlateGray = const Color.hex('778899'); + static final Color lightSlateGrey = const Color.hex('778899'); + static final Color lightSteelBlue = const Color.hex('b0c4de'); + static final Color lightYellow = const Color.hex('ffffe0'); + static final Color lime = const Color.hex('00ff00'); + static final Color limeGreen = const Color.hex('32cd32'); + static final Color linen = const Color.hex('faf0e6'); + static final Color magenta = const Color.hex('ff00ff'); + static final Color maroon = const Color.hex('800000'); + static final Color mediumAquaMarine = const Color.hex('66cdaa'); + static final Color mediumBlue = const Color.hex('0000cd'); + static final Color mediumOrchid = const Color.hex('ba55d3'); + static final Color mediumPurple = const Color.hex('9370db'); + static final Color mediumSeaGreen = const Color.hex('3cb371'); + static final Color mediumSlateBlue = const Color.hex('7b68ee'); + static final Color mediumSpringGreen = const Color.hex('00fa9a'); + static final Color mediumTurquoise = const Color.hex('48d1cc'); + static final Color mediumVioletRed = const Color.hex('c71585'); + static final Color midnightBlue = const Color.hex('191970'); + static final Color mintCream = const Color.hex('f5fffa'); + static final Color mistyRose = const Color.hex('ffe4e1'); + static final Color moccasin = const Color.hex('ffe4b5'); + static final Color navajoWhite = const Color.hex('ffdead'); + static final Color navy = const Color.hex('000080'); + static final Color oldLace = const Color.hex('fdf5e6'); + static final Color olive = const Color.hex('808000'); + static final Color oliveDrab = const Color.hex('6b8e23'); + static final Color orange = const Color.hex('ffa500'); + static final Color orangeRed = const Color.hex('ff4500'); + static final Color orchid = const Color.hex('da70d6'); + static final Color paleGoldenRod = const Color.hex('eee8aa'); + static final Color paleGreen = const Color.hex('98fb98'); + static final Color paleTurquoise = const Color.hex('afeeee'); + static final Color paleVioletRed = const Color.hex('db7093'); + static final Color papayaWhip = const Color.hex('ffefd5'); + static final Color peachPuff = const Color.hex('ffdab9'); + static final Color peru = const Color.hex('cd85ef'); + static final Color pink = const Color.hex('ffc0cb'); + static final Color plum = const Color.hex('dda0dd'); + static final Color powderBlue = const Color.hex('b0e0e6'); + static final Color purple = const Color.hex('800080'); + static final Color red = const Color.hex('ff0000'); + static final Color rosyBrown = const Color.hex('bc8f8f'); + static final Color royalBlue = const Color.hex('4169e1'); + static final Color saddleBrown = const Color.hex('8b4513'); + static final Color salmon = const Color.hex('fa8072'); + static final Color sandyBrown = const Color.hex('f4a460'); + static final Color seaGreen = const Color.hex('2e8b57'); + static final Color seashell = const Color.hex('fff5ee'); + static final Color sienna = const Color.hex('a0522d'); + static final Color silver = const Color.hex('c0c0c0'); + static final Color skyBlue = const Color.hex('87ceeb'); + static final Color slateBlue = const Color.hex('6a5acd'); + static final Color slateGray = const Color.hex('708090'); + static final Color slateGrey = const Color.hex('708090'); + static final Color snow = const Color.hex('fffafa'); + static final Color springGreen = const Color.hex('00ff7f'); + static final Color steelBlue = const Color.hex('4682b4'); + static final Color tan = const Color.hex('d2b48c'); + static final Color teal = const Color.hex('008080'); + static final Color thistle = const Color.hex('d8bfd8'); + static final Color tomato = const Color.hex('ff6347'); + static final Color turquoise = const Color.hex('40e0d0'); + static final Color violet = const Color.hex('ee82ee'); + static final Color wheat = const Color.hex('f5deb3'); + static final Color white = const Color.hex('ffffff'); + static final Color whiteSmoke = const Color.hex('f5f5f5'); + static final Color yellow = const Color.hex('ffff00'); + static final Color yellowGreen = const Color.hex('9acd32'); +} + +/// Rgba class for users that want to interact with a color as a RGBA value. +class Rgba implements _StyleProperty, ColorBase { + // TODO(terry): Consider consolidating rgba to a single 32-bit int, make sure + // it works under JS and Dart VM. + final int r; + final int g; + final int b; + final num? a; + + Rgba(int red, int green, int blue, [num? alpha]) + : r = Color._clamp(red, 0, 255), + g = Color._clamp(green, 0, 255), + b = Color._clamp(blue, 0, 255), + a = (alpha != null) ? Color._clamp(alpha, 0, 1) : alpha; + + factory Rgba.fromString(String hexValue) => + Color.css('#${Color._convertCssToArgb(hexValue)}').rgba; + + factory Rgba.fromColor(Color color) => color.rgba; + + factory Rgba.fromArgbValue(num value) => Rgba( + (value.toInt() & 0xff000000) >> 0x18, // a + (value.toInt() & 0xff0000) >> 0x10, // r + (value.toInt() & 0xff00) >> 8, // g + value.toInt() & 0xff, + ); // b + + factory Rgba.fromHsla(Hsla hsla) { + // Convert to Rgba. + // See site for good documentation + // and color conversion routines. + + var h = hsla.hue; + var s = hsla.saturation; + var l = hsla.lightness; + var a = hsla.alpha; + + int r; + int g; + int b; + + if (s == 0) { + r = (l * 255).round().toInt(); + g = r; + b = r; + } else { + num var2; + + if (l < 0.5) { + var2 = l * (1 + s); + } else { + var2 = (l + s) - (s * l); + } + var var1 = 2 * l - var2; + + r = (255 * Rgba._hueToRGB(var1, var2, h + (1 / 3))).round().toInt(); + g = (255 * Rgba._hueToRGB(var1, var2, h)).round().toInt(); + b = (255 * Rgba._hueToRGB(var1, var2, h - (1 / 3))).round().toInt(); + } + + return Rgba(r, g, b, a); + } + + static num _hueToRGB(num v1, num v2, num vH) { + if (vH < 0) { + vH += 1; + } + + if (vH > 1) { + vH -= 1; + } + + if ((6 * vH) < 1) { + return v1 + (v2 - v1) * 6 * vH; + } + + if ((2 * vH) < 1) { + return v2; + } + + if ((3 * vH) < 2) { + return v1 + (v2 - v1) * ((2 / 3 - vH) * 6); + } + + return v1; + } + + @override + bool operator ==(Object other) => Color.equal(this, other); + + @override + String get cssExpression { + if (a == null) { + return '#${Color.convertToHexString(r, g, b)}'; + } else { + return 'rgba($r,$g,$b,$a)'; + } + } + + @override + String toHexArgbString() => Color.convertToHexString(r, g, b, a); + + @override + int get argbValue { + var value = 0; + if (a != null) { + value = a!.toInt() << 0x18; + } + value += r << 0x10; + value += g << 0x08; + value += b; + return value; + } + + Color get color => Color.createRgba(r, g, b, a); + Hsla get hsla => Hsla.fromRgba(this); + + Rgba darker(num amount) => Color._createNewTintShadeFromRgba(this, -amount); + Rgba lighter(num amount) => Color._createNewTintShadeFromRgba(this, amount); + + @override + int get hashCode => toHexArgbString().hashCode; +} + +/// Hsl class support to interact with a color as a hsl with hue, saturation, +/// and lightness with optional alpha blending. The hue is a ratio of 360 +/// degrees 360° = 1 or 0, (1° == (1/360)), saturation and lightness is a 0..1 +/// fraction (1 == 100%) and alpha is a 0..1 fraction. +class Hsla implements _StyleProperty, ColorBase { + final num _h; // Value from 0..1 + final num _s; // Value from 0..1 + final num _l; // Value from 0..1 + final num? _a; // Value from 0..1 + + /// [hue] is a 0..1 fraction of 360 degrees (360 == 0). + /// [saturation] is a 0..1 fraction (100% == 1). + /// [lightness] is a 0..1 fraction (100% == 1). + /// [alpha] is a 0..1 fraction, alpha blending between 0..1, 1 == 100% opaque. + Hsla(num hue, num saturation, num lightness, [num? alpha]) + : _h = (hue == 1) ? 0 : Color._clamp(hue, 0, 1), + _s = Color._clamp(saturation, 0, 1), + _l = Color._clamp(lightness, 0, 1), + _a = (alpha != null) ? Color._clamp(alpha, 0, 1) : alpha; + + factory Hsla.fromString(String hexValue) { + var rgba = Color.css('#${Color._convertCssToArgb(hexValue)}').rgba; + return _createFromRgba(rgba.r, rgba.g, rgba.b, rgba.a); + } + + factory Hsla.fromColor(Color color) { + var rgba = color.rgba; + return _createFromRgba(rgba.r, rgba.g, rgba.b, rgba.a); + } + + factory Hsla.fromArgbValue(num value) { + num a = (value.toInt() & 0xff000000) >> 0x18; + var r = (value.toInt() & 0xff0000) >> 0x10; + var g = (value.toInt() & 0xff00) >> 8; + var b = value.toInt() & 0xff; + + // Convert alpha to 0..1 from (0..255). + a = double.parse((a / 255).toStringAsPrecision(2)); + + return _createFromRgba(r, g, b, a); + } + + factory Hsla.fromRgba(Rgba rgba) => + _createFromRgba(rgba.r, rgba.g, rgba.b, rgba.a); + + static Hsla _createFromRgba(num r, num g, num b, num? a) { + // Convert RGB to hsl. + // See site for good documentation + // and color conversion routines. + r /= 255; + g /= 255; + b /= 255; + + // Hue, saturation and lightness. + num h; + num s; + num l; + + var minRgb = math.min(r, math.min(g, b)); + var maxRgb = math.max(r, math.max(g, b)); + l = (maxRgb + minRgb) / 2; + if (l <= 0) { + return Hsla(0, 0, l); // Black; + } + + var vm = maxRgb - minRgb; + s = vm; + if (s > 0) { + s /= (l < 0.5) ? (maxRgb + minRgb) : (2 - maxRgb - minRgb); + } else { + return Hsla(0, 0, l); // White + } + + num r2, g2, b2; + r2 = (maxRgb - r) / vm; + g2 = (maxRgb - g) / vm; + b2 = (maxRgb - b) / vm; + if (r == maxRgb) { + h = (g == minRgb) ? 5.0 + b2 : 1 - g2; + } else if (g == maxRgb) { + h = (b == minRgb) ? 1 + r2 : 3 - b2; + } else { + h = (r == minRgb) ? 3 + g2 : 5 - r2; + } + h /= 6; + + return Hsla(h, s, l, a); + } + + /// Returns 0..1 fraction (ratio of 360°, e.g. 1° == 1/360). + num get hue => _h; + + /// Returns 0..1 fraction (1 == 100%) + num get saturation => _s; + + /// Returns 0..1 fraction (1 == 100%). + num get lightness => _l; + + /// Returns number as degrees 0..360. + num get hueDegrees => (_h * 360).round(); + + /// Returns number as percentage 0..100 + num get saturationPercentage => (_s * 100).round(); + + /// Returns number as percentage 0..100. + num get lightnessPercentage => (_l * 100).round(); + + /// Returns number as 0..1 + num? get alpha => _a; + + @override + bool operator ==(Object other) => Color.equal(this, other); + + @override + String get cssExpression => (_a == null) + ? 'hsl($hueDegrees,$saturationPercentage,$lightnessPercentage)' + : 'hsla($hueDegrees,$saturationPercentage,$lightnessPercentage,$_a)'; + + @override + String toHexArgbString() => Rgba.fromHsla(this).toHexArgbString(); + + @override + int get argbValue => Color.hexToInt(toHexArgbString()); + + Color get color => Color.createHsla(_h, _s, _l, _a); + Rgba get rgba => Rgba.fromHsla(this); + + Hsla darker(num amount) => Hsla.fromRgba(Rgba.fromHsla(this).darker(amount)); + + Hsla lighter(num amount) => + Hsla.fromRgba(Rgba.fromHsla(this).lighter(amount)); + + @override + int get hashCode => toHexArgbString().hashCode; +} + +/// X,Y position. +class PointXY implements _StyleProperty { + final num x, y; + const PointXY(this.x, this.y); + + @override + String? get cssExpression => + // TODO(terry): TBD + null; +} + +// TODO(terry): Implement style and color. +/// Supports border for measuring with layout. +class Border implements _StyleProperty { + final int? top, left, bottom, right; + + // TODO(terry): Just like CSS, 1-arg -> set all properties, 2-args -> top and + // bottom are first arg, left and right are second, 3-args, and + // 4-args -> tlbr or trbl. + const Border([this.top, this.left, this.bottom, this.right]); + + // TODO(terry): Consider using Size or width and height. + Border.uniform(int amount) + : top = amount, + left = amount, + bottom = amount, + right = amount; + + int get width => left! + right!; + int get height => top! + bottom!; + + @override + String get cssExpression => (top == left && bottom == right && top == right) + ? '${left}px' + : "${top != null ? '$top' : '0'}px " + "${right != null ? '$right' : '0'}px " + "${bottom != null ? '$bottom' : '0'}px " + "${left != null ? '$left' : '0'}px"; +} + +/// Font style constants. +class FontStyle { + /// Font style [normal] default. + static const String normal = 'normal'; + + /// Font style [italic] use explicity crafted italic font otherwise inclined + /// on the fly like oblique. + static const String italic = 'italic'; + + /// Font style [oblique] is rarely used. The normal style of a font is + /// inclined on the fly to the right by 8-12 degrees. + static const String oblique = 'oblique'; +} + +/// Font variant constants. +class FontVariant { + /// Font style [normal] default. + static const String normal = 'normal'; + + /// Font variant [smallCaps]. + static const String smallCaps = 'small-caps'; +} + +/// Font weight constants values 100, 200, 300, 400, 500, 600, 700, 800, 900. +class FontWeight { + /// Font weight normal [default] + static const int normal = 400; + + /// Font weight bold + static const int bold = 700; + + static const int wt100 = 100; + static const int wt200 = 200; + static const int wt300 = 300; + static const int wt400 = 400; + static const int wt500 = 500; + static const int wt600 = 600; + static const int wt700 = 700; + static const int wt800 = 800; + static const int wt900 = 900; +} + +/// Generic font family names. +class FontGeneric { + /// Generic family sans-serif font (w/o serifs). + static const String sansSerif = 'sans-serif'; + + /// Generic family serif font. + static const String serif = 'serif'; + + /// Generic family fixed-width font. + static const monospace = 'monospace'; + + /// Generic family emulate handwriting font. + static const String cursive = 'cursive'; + + /// Generic family decorative font. + static const String fantasy = 'fantasy'; +} + +/// List of most common font families across different platforms. Use the +/// collection names in the Font class (e.g., Font.SANS_SERIF, Font.FONT_SERIF, +/// Font.MONOSPACE, Font.CURSIVE or Font.FANTASY). These work best on all +/// platforms using the fonts that best match availability on each platform. +/// See for a good +/// description of fonts available between platforms and browsers. +class FontFamily { + /// Sans-Serif font for Windows similar to Helvetica on Mac bold/italic. + static const String arial = 'arial'; + + /// Sans-Serif font for Windows less common already bolded. + static const String arialBlack = 'arial black'; + + /// Sans-Serif font for Mac since 1984, similar to Arial/Helvetica. + static const String geneva = 'geneva'; + + /// Sans-Serif font for Windows most readable sans-serif font for displays. + static const String verdana = 'verdana'; + + /// Sans-Serif font for Mac since 1984 is identical to Arial. + static const String helvetica = 'helvetica'; + + /// Serif font for Windows traditional font with “old-style” numerals. + static const String georgia = 'georgia'; + + /// Serif font for Mac. PCs may have the non-scalable Times use Times New + /// Roman instead. Times is more compact than Times New Roman. + static const String times = 'times'; + + /// Serif font for Windows most common serif font and default serif font for + /// most browsers. + static const String timesNewRoman = 'times new roman'; + + /// Monospace font for Mac/Windows most common. Scalable on Mac not scalable + /// on Windows. + static const String courier = 'courier'; + + /// Monospace font for Mac/Windows scalable on both platforms. + static const String courierNew = 'courier new'; + + /// Cursive font for Windows and default cursive font for IE. + static const String comicSansMs = 'comic sans ms'; + + /// Cursive font for Mac on Macs 2000 and newer. + static const String textile = 'textile'; + + /// Cursive font for older Macs. + static const String appleChancery = 'apple chancery'; + + /// Cursive font for some PCs. + static const String zaphChancery = 'zaph chancery'; + + /// Fantasy font on most Mac/Windows/Linux platforms. + static const String impact = 'impact'; + + /// Fantasy font for Windows. + static const String webdings = 'webdings'; +} + +class LineHeight { + final num height; + final bool inPixels; + const LineHeight(this.height, {this.inPixels = true}); +} + +// TODO(terry): Support @font-face fule. +/// Font style support for size, family, weight, style, variant, and lineheight. +class Font implements _StyleProperty { + /// Collection of most common sans-serif fonts in order. + static const List sansSerif = [ + FontFamily.arial, + FontFamily.verdana, + FontFamily.geneva, + FontFamily.helvetica, + FontGeneric.sansSerif + ]; + + /// Collection of most common serif fonts in order. + static const List serif = [ + FontFamily.georgia, + FontFamily.timesNewRoman, + FontFamily.times, + FontGeneric.serif + ]; + + /// Collection of most common monospace fonts in order. + static const List monospace = [ + FontFamily.courierNew, + FontFamily.courier, + FontGeneric.monospace + ]; + + /// Collection of most common cursive fonts in order. + static const List cursive = [ + FontFamily.textile, + FontFamily.appleChancery, + FontFamily.zaphChancery, + FontGeneric.fantasy + ]; + + /// Collection of most common fantasy fonts in order. + static const List fantasy = [ + FontFamily.comicSansMs, + FontFamily.impact, + FontFamily.webdings, + FontGeneric.fantasy + ]; + + // TODO(terry): Should support the values xx-small, small, large, xx-large, + // etc. (mapped to a pixel sized font)? + /// Font size in pixels. + final num? size; + + // TODO(terry): _family should be an immutable list, wrapper class to do this + // should exist in Dart. + /// Family specifies a list of fonts, the browser will sequentially select the + /// the first known/supported font. There are two types of font families the + /// family-name (e.g., arial, times, courier, etc) or the generic-family + /// (e.g., serif, sans-seric, etc.) + final List? family; + + /// Font weight from 100, 200, 300, 400, 500, 600, 700, 800, 900 + final int? weight; + + /// Style of a font normal, italic, oblique. + final String? style; + + /// Font variant NORMAL (default) or SMALL_CAPS. Different set of font glyph + /// lower case letters designed to have to fit within the font-height and + /// weight of the corresponding lowercase letters. + final String? variant; + + final LineHeight? lineHeight; + + // TODO(terry): Size and computedLineHeight are in pixels. Need to figure out + // how to handle in other units (specified in other units) like + // points, inches, etc. Do we have helpers like Units.Points(12) + // where 12 is in points and that's converted to pixels? + // TODO(terry): lineHeight is computed as 1.2 although CSS_RESET is 1.0 we + // need to be consistent some browsers use 1 others 1.2. + // TODO(terry): There is a school of thought "Golden Ratio Typography". + // Where width to display the text is also important in computing the line + // height. Classic typography suggest the ratio be 1.5. See + // and + // . + /// Create a font using [size] of font in pixels, [family] name of font(s) + /// using [FontFamily], [style] of the font using [FontStyle], [variant] using + /// [FontVariant], and [lineHeight] extra space (leading) around the font in + /// pixels, if not specified it's 1.2 the font size. + const Font( + {this.size, + this.family, + this.weight, + this.style, + this.variant, + this.lineHeight}); + + /// Merge the two fonts and return the result. See [Style.merge] for + /// more information. + static Font? merge(Font? a, Font? b) { + if (a == null) return b; + if (b == null) return a; + return Font._merge(a, b); + } + + Font._merge(Font a, Font b) + : size = _mergeVal(a.size, b.size), + family = _mergeVal(a.family, b.family), + weight = _mergeVal(a.weight, b.weight), + style = _mergeVal(a.style, b.style), + variant = _mergeVal(a.variant, b.variant), + lineHeight = _mergeVal(a.lineHeight, b.lineHeight); + + /// Shorthand CSS format for font is: + /// + /// font-style font-variant font-weight font-size/line-height font-family + /// + /// The font-size and font-family values are required. If any of the other + /// values are missing the default value is used. + @override + String get cssExpression { + // TODO(jimhug): include variant, style, other options + if (weight != null) { + // TODO(jacobr): is this really correct for lineHeight? + if (lineHeight != null) { + return '$weight ${size}px/$lineHeightInPixels $_fontsAsString'; + } + return '$weight ${size}px $_fontsAsString'; + } + + return '${size}px $_fontsAsString'; + } + + Font scale(num ratio) => Font( + size: size! * ratio, + family: family, + weight: weight, + style: style, + variant: variant); + + /// The lineHeight, provides an indirect means to specify the leading. The + /// leading is the difference between the font-size height and the (used) + /// value of line height in pixels. If lineHeight is not specified it's + /// automatically computed as 1.2 of the font size. Firefox is 1.2, Safari is + /// ~1.2, and CSS suggest a ration from 1 to 1.2 of the font-size when + /// computing line-height. The Font class constructor has the computation for + /// _lineHeight. + num? get lineHeightInPixels { + if (lineHeight != null) { + if (lineHeight!.inPixels) { + return lineHeight!.height; + } else { + return (size != null) ? lineHeight!.height * size! : null; + } + } else { + return (size != null) ? size! * 1.2 : null; + } + } + + @override + int get hashCode => + // TODO(jimhug): Lot's of potential collisions here. List of fonts, etc. + size!.toInt() % family![0].hashCode; + + @override + bool operator ==(Object other) { + if (other is! Font) return false; + return other.size == size && + other.family == family && + other.weight == weight && + other.lineHeight == lineHeight && + other.style == style && + other.variant == variant; + } + + // TODO(terry): This is fragile should probably just iterate through the list + // of fonts construction the font-family string. + /// Return fonts as a comma seperated list sans the square brackets. + String get _fontsAsString { + var fonts = family.toString(); + return fonts.length > 2 ? fonts.substring(1, fonts.length - 1) : ''; + } +} + +/// This class stores the sizes of the box edges in the CSS [box model][]. Each +/// edge area is placed around the sides of the content box. The innermost area +/// is the [Style.padding] area which has a background and surrounds the +/// content. The content and padding area is surrounded by the [Style.border], +/// which itself is surrounded by the transparent [Style.margin]. This box +/// represents the eges of padding, border, or margin depending on which +/// accessor was used to retrieve it. +/// +/// [box model]: https://developer.mozilla.org/en/CSS/box_model +class BoxEdge { + /// The size of the left edge, or null if the style has no edge. + final num? left; + + /// The size of the top edge, or null if the style has no edge. + final num? top; + + /// The size of the right edge, or null if the style has no edge. + final num? right; + + /// The size of the bottom edge, or null if the style has no edge. + final num? bottom; + + /// Creates a box edge with the specified [left], [top], [right], and + /// [bottom] width. + const BoxEdge([this.left, this.top, this.right, this.bottom]); + + /// Creates a box edge with the specified [top], [right], [bottom], and + /// [left] width. This matches the typical CSS order: + /// + /// + /// . + const BoxEdge.clockwiseFromTop(this.top, this.right, this.bottom, this.left); + + /// This is a helper to creates a box edge with the same [left], [top] + /// [right], and [bottom] widths. + const BoxEdge.uniform(num size) + : top = size, + left = size, + bottom = size, + right = size; + + /// Takes a possibly null box edge, with possibly null metrics, and fills + /// them in with 0 instead. + factory BoxEdge.nonNull(BoxEdge? other) { + if (other == null) return const BoxEdge(0, 0, 0, 0); + var left = other.left; + var top = other.top; + var right = other.right; + var bottom = other.bottom; + var make = false; + if (left == null) { + make = true; + left = 0; + } + if (top == null) { + make = true; + top = 0; + } + if (right == null) { + make = true; + right = 0; + } + if (bottom == null) { + make = true; + bottom = 0; + } + return make ? BoxEdge(left, top, right, bottom) : other; + } + + /// Merge the two box edge sizes and return the result. See [Style.merge] for + /// more information. + static BoxEdge? merge(BoxEdge? x, BoxEdge? y) { + if (x == null) return y; + if (y == null) return x; + return BoxEdge._merge(x, y); + } + + BoxEdge._merge(BoxEdge x, BoxEdge y) + : left = _mergeVal(x.left, y.left), + top = _mergeVal(x.top, y.top), + right = _mergeVal(x.right, y.right), + bottom = _mergeVal(x.bottom, y.bottom); + + /// The total size of the horizontal edges. Equal to [left] + [right], where + /// null is interpreted as 0px. + num get width => (left ?? 0) + (right ?? 0); + + /// The total size of the vertical edges. Equal to [top] + [bottom], where + /// null is interpreted as 0px. + num get height => (top ?? 0) + (bottom ?? 0); +} + +T _mergeVal(T x, T y) => y ?? x; diff --git a/pkgs/csslib/lib/src/token.dart b/pkgs/csslib/lib/src/token.dart new file mode 100644 index 000000000..5a0753551 --- /dev/null +++ b/pkgs/csslib/lib/src/token.dart @@ -0,0 +1,63 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +part of '../parser.dart'; + +/// A single token in the Dart language. +class Token { + /// A member of [TokenKind] specifying what kind of token this is. + final int kind; + + /// The location where this token was parsed from. + final FileSpan span; + + /// The start offset of this token. + int get start => span.start.offset; + + /// The end offset of this token. + int get end => span.end.offset; + + /// Returns the source text corresponding to this [Token]. + String get text => span.text; + + Token(this.kind, this.span); + + /// Returns a pretty representation of this token for error messages. + @override + String toString() { + var kindText = TokenKind.kindToString(kind); + var actualText = text.trim(); + if (actualText.isNotEmpty && kindText != actualText) { + if (actualText.length > 10) { + actualText = '${actualText.substring(0, 8)}...'; + } + return '$kindText($actualText)'; + } else { + return kindText; + } + } +} + +/// A token containing a parsed literal value. +class LiteralToken extends Token { + dynamic value; + LiteralToken(super.kind, super.span, this.value); +} + +/// A token containing error information. +class ErrorToken extends Token { + String? message; + ErrorToken(super.kind, super.span, this.message); +} + +/// CSS ident-token. +/// +/// See and +/// . +class IdentifierToken extends Token { + @override + final String text; + + IdentifierToken(this.text, int kind, FileSpan span) : super(kind, span); +} diff --git a/pkgs/csslib/lib/src/token_kind.dart b/pkgs/csslib/lib/src/token_kind.dart new file mode 100644 index 000000000..3f50402b6 --- /dev/null +++ b/pkgs/csslib/lib/src/token_kind.dart @@ -0,0 +1,728 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// ignore_for_file: constant_identifier_names + +part of '../parser.dart'; + +// TODO(terry): Need to be consistent with tokens either they're ASCII tokens +// e.g., ASTERISK or they're CSS e.g., PSEUDO, COMBINATOR_*. +class TokenKind { + // Common shared tokens used in TokenizerBase. + static const int UNUSED = 0; // Unused place holder... + static const int END_OF_FILE = 1; // EOF + static const int LPAREN = 2; // ( + static const int RPAREN = 3; // ) + static const int LBRACK = 4; // [ + static const int RBRACK = 5; // ] + static const int LBRACE = 6; // { + static const int RBRACE = 7; // } + static const int DOT = 8; // . + static const int SEMICOLON = 9; // ; + + // Unique tokens for CSS. + static const int AT = 10; // @ + static const int HASH = 11; // # + static const int PLUS = 12; // + + static const int GREATER = 13; // > + static const int TILDE = 14; // ~ + static const int ASTERISK = 15; // * + static const int NAMESPACE = 16; // | + static const int COLON = 17; // : + static const int PRIVATE_NAME = 18; // _ prefix private class or id + static const int COMMA = 19; // , + static const int SPACE = 20; + static const int TAB = 21; // /t + static const int NEWLINE = 22; // /n + static const int RETURN = 23; // /r + static const int PERCENT = 24; // % + static const int SINGLE_QUOTE = 25; // ' + static const int DOUBLE_QUOTE = 26; // " + static const int SLASH = 27; // / + static const int EQUALS = 28; // = + static const int CARET = 30; // ^ + static const int DOLLAR = 31; // $ + static const int LESS = 32; // < + static const int BANG = 33; // ! + static const int MINUS = 34; // - + static const int BACKSLASH = 35; // \ + static const int AMPERSAND = 36; // & + + // WARNING: Tokens from this point and above must have the corresponding ASCII + // character in the TokenChar list at the bottom of this file. The + // order of the above tokens should be the same order as TokenChar. + + /// [TokenKind] representing integer tokens. + static const int INTEGER = 60; + + /// [TokenKind] representing hex integer tokens. + static const int HEX_INTEGER = 61; + + /// [TokenKind] representing double tokens. + static const int DOUBLE = 62; + + /// [TokenKind] representing whitespace tokens. + static const int WHITESPACE = 63; + + /// [TokenKind] representing comment tokens. + static const int COMMENT = 64; + + /// [TokenKind] representing error tokens. + static const int ERROR = 65; + + /// [TokenKind] representing incomplete string tokens. + static const int INCOMPLETE_STRING = 66; + + /// [TokenKind] representing incomplete comment tokens. + static const int INCOMPLETE_COMMENT = 67; + + static const int VAR_DEFINITION = 400; // var-NNN-NNN + static const int VAR_USAGE = 401; // var(NNN-NNN [,default]) + + // Synthesized Tokens (no character associated with TOKEN). + static const int STRING = 500; + static const int STRING_PART = 501; + static const int NUMBER = 502; + static const int HEX_NUMBER = 503; + static const int HTML_COMMENT = 504; // (CDC). */ + if (_maybeEatChar(TokenChar.MINUS)) { + if (_maybeEatChar(TokenChar.GREATER)) { + if (_inString) { + return next(); + } else { + return _finishToken(TokenKind.HTML_COMMENT); + } + } + } + } + } + } + + @override + Token finishMultiLineComment() { + while (true) { + var ch = _nextChar(); + if (ch == 0) { + return _finishToken(TokenKind.INCOMPLETE_COMMENT); + } else if (ch == 42 /*'*'*/) { + if (_maybeEatChar(47 /*'/'*/)) { + if (_inString) { + return next(); + } else { + return _finishToken(TokenKind.COMMENT); + } + } + } + } + } +} + +/// Static helper methods. +class TokenizerHelpers { + static bool isIdentifierStart(int c) => + isIdentifierStartExpr(c) || c == 45 /*-*/; + + static bool isDigit(int c) => c >= 48 /*0*/ && c <= 57 /*9*/; + + static bool isHexDigit(int c) => + isDigit(c) || + (c >= 97 /*a*/ && c <= 102 /*f*/) || + (c >= 65 /*A*/ && c <= 70 /*F*/); + + static bool isIdentifierPart(int c) => + isIdentifierPartExpr(c) || c == 45 /*-*/; + + /// Pseudo function expressions identifiers can't have a minus sign. + static bool isIdentifierStartExpr(int c) => + (c >= 97 /*a*/ && c <= 122 /*z*/) || + (c >= 65 /*A*/ && c <= 90 /*Z*/) || + // Note: Unicode 10646 chars U+00A0 or higher are allowed, see: + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + // http://www.w3.org/TR/CSS21/syndata.html#characters + // Also, escaped character should be allowed. + c == 95 /*_*/ || + c >= 0xA0 || + c == 92 /*\*/; + + /// Pseudo function expressions identifiers can't have a minus sign. + static bool isIdentifierPartExpr(int c) => + isIdentifierStartExpr(c) || isDigit(c); +} diff --git a/pkgs/csslib/lib/src/tokenizer_base.dart b/pkgs/csslib/lib/src/tokenizer_base.dart new file mode 100644 index 000000000..bcac7be8c --- /dev/null +++ b/pkgs/csslib/lib/src/tokenizer_base.dart @@ -0,0 +1,419 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Generated by scripts/tokenizer_gen.py. + +part of '../parser.dart'; + +/// Tokenizer state to support look ahead for Less' nested selectors. +class TokenizerState { + final int index; + final int startIndex; + final bool inSelectorExpression; + final bool inSelector; + + TokenizerState(TokenizerBase base) + : index = base._index, + startIndex = base._startIndex, + inSelectorExpression = base.inSelectorExpression, + inSelector = base.inSelector; +} + +/// The base class for our tokenizer. The hand coded parts are in this file, +/// with the generated parts in the subclass Tokenizer. +abstract class TokenizerBase { + final SourceFile _file; + final String _text; + + // TODO: this seems like a bug – this field *is* used + // ignore: prefer_final_fields + bool _inString; + + /// Changes tokenization when in a pseudo function expression. If true then + /// minus signs are handled as operators instead of identifiers. + bool inSelectorExpression = false; + + /// Changes tokenization when in selectors. If true, it prevents identifiers + /// from being treated as units. This would break things like ":lang(fr)" or + /// the HTML (unknown) tag name "px", which is legal to use in a selector. + // TODO(jmesserly): is this a problem elsewhere? "fr" for example will be + // processed as a "fraction" unit token, preventing it from working in + // places where an identifier is expected. This was breaking selectors like: + // :lang(fr) + // The assumption that "fr" always means fraction (and similar issue with + // other units) doesn't seem valid. We probably should defer this + // analysis until we reach places in the parser where units are expected. + // I'm not sure this is tokenizing as described in the specs: + // http://dev.w3.org/csswg/css-syntax/ + // http://dev.w3.org/csswg/selectors4/ + bool inSelector = false; + + int _index = 0; + int _startIndex = 0; + + TokenizerBase(this._file, this._text, this._inString, [this._index = 0]); + + Token next(); + int getIdentifierKind(); + + /// Snapshot of Tokenizer scanning state. + TokenizerState get mark => TokenizerState(this); + + /// Restore Tokenizer scanning state. + void restore(TokenizerState markedData) { + _index = markedData.index; + _startIndex = markedData.startIndex; + inSelectorExpression = markedData.inSelectorExpression; + inSelector = markedData.inSelector; + } + + int _nextChar() { + if (_index < _text.length) { + return _text.codeUnitAt(_index++); + } else { + return 0; + } + } + + int _peekChar([int offset = 0]) { + if (_index + offset < _text.length) { + return _text.codeUnitAt(_index + offset); + } else { + return 0; + } + } + + bool _maybeEatChar(int ch) { + if (_index < _text.length) { + if (_text.codeUnitAt(_index) == ch) { + _index++; + return true; + } else { + return false; + } + } else { + return false; + } + } + + bool _nextCharsAreNumber(int first) { + if (TokenizerHelpers.isDigit(first)) return true; + var second = _peekChar(); + if (first == TokenChar.DOT) return TokenizerHelpers.isDigit(second); + if (first == TokenChar.PLUS || first == TokenChar.MINUS) { + return TokenizerHelpers.isDigit(second) || + (second == TokenChar.DOT && TokenizerHelpers.isDigit(_peekChar(1))); + } + return false; + } + + Token _finishToken(int kind) => Token(kind, _file.span(_startIndex, _index)); + + Token _errorToken([String? message]) => + ErrorToken(TokenKind.ERROR, _file.span(_startIndex, _index), message); + + Token finishWhitespace() { + _index--; + while (_index < _text.length) { + final ch = _text.codeUnitAt(_index++); + if (ch == TokenChar.SPACE || + ch == TokenChar.TAB || + ch == TokenChar.RETURN) { + // do nothing + } else if (ch == TokenChar.NEWLINE) { + if (!_inString) { + return _finishToken(TokenKind.WHITESPACE); // note the newline? + } + } else { + _index--; + if (_inString) { + return next(); + } else { + return _finishToken(TokenKind.WHITESPACE); + } + } + } + return _finishToken(TokenKind.END_OF_FILE); + } + + Token finishMultiLineComment() { + var nesting = 1; + do { + var ch = _nextChar(); + if (ch == 0) { + return _errorToken(); + } else if (ch == TokenChar.ASTERISK) { + if (_maybeEatChar(TokenChar.SLASH)) { + nesting--; + } + } else if (ch == TokenChar.SLASH) { + if (_maybeEatChar(TokenChar.ASTERISK)) { + nesting++; + } + } + } while (nesting > 0); + + if (_inString) { + return next(); + } else { + return _finishToken(TokenKind.COMMENT); + } + } + + void eatDigits() { + while (_index < _text.length) { + if (TokenizerHelpers.isDigit(_text.codeUnitAt(_index))) { + _index++; + } else { + return; + } + } + } + + static int _hexDigit(int c) { + if (c >= 48 /*0*/ && c <= 57 /*9*/) { + return c - 48; + } else if (c >= 97 /*a*/ && c <= 102 /*f*/) { + return c - 87; + } else if (c >= 65 /*A*/ && c <= 70 /*F*/) { + return c - 55; + } else { + return -1; + } + } + + int readHex([int? hexLength]) { + int maxIndex; + if (hexLength == null) { + maxIndex = _text.length - 1; + } else { + // TODO(jimhug): What if this is too long? + maxIndex = _index + hexLength; + if (maxIndex >= _text.length) return -1; + } + var result = 0; + while (_index < maxIndex) { + final digit = _hexDigit(_text.codeUnitAt(_index)); + if (digit == -1) { + if (hexLength == null) { + return result; + } else { + return -1; + } + } + _hexDigit(_text.codeUnitAt(_index)); + // Multiply by 16 rather than shift by 4 since that will result in a + // correct value for numbers that exceed the 32 bit precision of JS + // 'integers'. + // TODO: Figure out a better solution to integer truncation. Issue 638. + result = (result * 16) + digit; + _index++; + } + + return result; + } + + Token finishNumber() { + eatDigits(); + + if (_peekChar() == TokenChar.DOT) { + // Handle the case of 1.toString(). + _nextChar(); + if (TokenizerHelpers.isDigit(_peekChar())) { + eatDigits(); + return finishNumberExtra(TokenKind.DOUBLE); + } else { + _index--; + } + } + + return finishNumberExtra(TokenKind.INTEGER); + } + + Token finishNumberExtra(int kind) { + if (_maybeEatChar(101 /*e*/) || _maybeEatChar(69 /*E*/)) { + kind = TokenKind.DOUBLE; + _maybeEatChar(TokenKind.MINUS); + _maybeEatChar(TokenKind.PLUS); + eatDigits(); + } + if (_peekChar() != 0 && TokenizerHelpers.isIdentifierStart(_peekChar())) { + _nextChar(); + return _errorToken('illegal character in number'); + } + + return _finishToken(kind); + } + + Token _makeStringToken(List buf, bool isPart) { + final s = String.fromCharCodes(buf); + final kind = isPart ? TokenKind.STRING_PART : TokenKind.STRING; + return LiteralToken(kind, _file.span(_startIndex, _index), s); + } + + Token makeIEFilter(int start, int end) { + var filter = _text.substring(start, end); + return LiteralToken(TokenKind.STRING, _file.span(start, end), filter); + } + + Token _makeRawStringToken(bool isMultiline) { + String s; + if (isMultiline) { + // Skip initial newline in multiline strings + var start = _startIndex + 4; + if (_text[start] == '\n') start++; + s = _text.substring(start, _index - 3); + } else { + s = _text.substring(_startIndex + 2, _index - 1); + } + return LiteralToken(TokenKind.STRING, _file.span(_startIndex, _index), s); + } + + Token finishMultilineString(int quote) { + var buf = []; + while (true) { + var ch = _nextChar(); + if (ch == 0) { + return _errorToken(); + } else if (ch == quote) { + if (_maybeEatChar(quote)) { + if (_maybeEatChar(quote)) { + return _makeStringToken(buf, false); + } + buf.add(quote); + } + buf.add(quote); + } else if (ch == TokenChar.BACKSLASH) { + var escapeVal = readEscapeSequence(); + if (escapeVal == -1) { + return _errorToken('invalid hex escape sequence'); + } else { + buf.add(escapeVal); + } + } else { + buf.add(ch); + } + } + } + + Token finishString(int quote) { + if (_maybeEatChar(quote)) { + if (_maybeEatChar(quote)) { + // skip an initial newline + _maybeEatChar(TokenChar.NEWLINE); + return finishMultilineString(quote); + } else { + return _makeStringToken([], false); + } + } + return finishStringBody(quote); + } + + Token finishRawString(int quote) { + if (_maybeEatChar(quote)) { + if (_maybeEatChar(quote)) { + return finishMultilineRawString(quote); + } else { + return _makeStringToken([], false); + } + } + while (true) { + var ch = _nextChar(); + if (ch == quote) { + return _makeRawStringToken(false); + } else if (ch == 0) { + return _errorToken(); + } + } + } + + Token finishMultilineRawString(int quote) { + while (true) { + var ch = _nextChar(); + if (ch == 0) { + return _errorToken(); + } else if (ch == quote && _maybeEatChar(quote) && _maybeEatChar(quote)) { + return _makeRawStringToken(true); + } + } + } + + Token finishStringBody(int quote) { + var buf = []; + while (true) { + var ch = _nextChar(); + if (ch == quote) { + return _makeStringToken(buf, false); + } else if (ch == 0) { + return _errorToken(); + } else if (ch == TokenChar.BACKSLASH) { + var escapeVal = readEscapeSequence(); + if (escapeVal == -1) { + return _errorToken('invalid hex escape sequence'); + } else { + buf.add(escapeVal); + } + } else { + buf.add(ch); + } + } + } + + int readEscapeSequence() { + final ch = _nextChar(); + int hexValue; + switch (ch) { + case 110 /*n*/ : + return TokenChar.NEWLINE; + case 114 /*r*/ : + return TokenChar.RETURN; + case 102 /*f*/ : + return TokenChar.FF; + case 98 /*b*/ : + return TokenChar.BACKSPACE; + case 116 /*t*/ : + return TokenChar.TAB; + case 118 /*v*/ : + return TokenChar.FF; + case 120 /*x*/ : + hexValue = readHex(2); + break; + case 117 /*u*/ : + if (_maybeEatChar(TokenChar.LBRACE)) { + hexValue = readHex(); + if (!_maybeEatChar(TokenChar.RBRACE)) { + return -1; + } + } else { + hexValue = readHex(4); + } + break; + default: + return ch; + } + + if (hexValue == -1) return -1; + + // According to the Unicode standard the high and low surrogate halves + // used by UTF-16 (U+D800 through U+DFFF) and values above U+10FFFF + // are not legal Unicode values. + if (hexValue < 0xD800 || hexValue > 0xDFFF && hexValue <= 0xFFFF) { + return hexValue; + } else if (hexValue <= 0x10FFFF) { + messages.error('unicode values greater than 2 bytes not implemented yet', + _file.span(_startIndex, _startIndex + 1)); + return -1; + } else { + return -1; + } + } + + Token finishDot() { + if (TokenizerHelpers.isDigit(_peekChar())) { + eatDigits(); + return finishNumberExtra(TokenKind.DOUBLE); + } else { + return _finishToken(TokenKind.DOT); + } + } +} diff --git a/pkgs/csslib/lib/src/tree.dart b/pkgs/csslib/lib/src/tree.dart new file mode 100644 index 000000000..94655cf89 --- /dev/null +++ b/pkgs/csslib/lib/src/tree.dart @@ -0,0 +1,1775 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// ignore_for_file: prefer_asserts_in_initializer_lists + +part of '../visitor.dart'; + +///////////////////////////////////////////////////////////////////////// +// CSS specific types: +///////////////////////////////////////////////////////////////////////// + +class Identifier extends TreeNode { + String name; + + Identifier(this.name, SourceSpan? span) : super(span); + + @override + Identifier clone() => Identifier(name, span); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitIdentifier(this); + + @override + String toString() => + // Try to use the identifier's original lexeme to preserve any escape + // codes as authored. The name, which may include escaped values, may no + // longer be a valid identifier. + span?.text ?? name; +} + +class Wildcard extends TreeNode { + Wildcard(super.span); + @override + Wildcard clone() => Wildcard(span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitWildcard(this); + + String get name => '*'; +} + +class ThisOperator extends TreeNode { + ThisOperator(super.span); + @override + ThisOperator clone() => ThisOperator(span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitThisOperator(this); + + String get name => '&'; +} + +class Negation extends TreeNode { + Negation(super.span); + @override + Negation clone() => Negation(span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitNegation(this); + + String get name => 'not'; +} + +// calc(...) +// TODO(terry): Hack to handle calc however the expressions should be fully +// parsed and in the AST. +class CalcTerm extends LiteralTerm { + final LiteralTerm expr; + + CalcTerm(Object value, String text, this.expr, SourceSpan? span) + : super(value, text, span); + + @override + CalcTerm clone() => CalcTerm(value, text, expr.clone(), span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitCalcTerm(this); + + @override + String toString() => '$text($expr)'; +} + +// /* .... */ +class CssComment extends TreeNode { + final String comment; + + CssComment(this.comment, SourceSpan? span) : super(span); + @override + CssComment clone() => CssComment(comment, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitCssComment(this); +} + +// CDO/CDC (Comment Definition Open ). +class CommentDefinition extends CssComment { + CommentDefinition(super.comment, super.span); + @override + CommentDefinition clone() => CommentDefinition(comment, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitCommentDefinition(this); +} + +class SelectorGroup extends TreeNode { + final List selectors; + + SelectorGroup(this.selectors, SourceSpan? span) : super(span); + + @override + SelectorGroup clone() => SelectorGroup(selectors, span); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitSelectorGroup(this); +} + +class Selector extends TreeNode { + final List simpleSelectorSequences; + + Selector(this.simpleSelectorSequences, SourceSpan? span) : super(span); + + void add(SimpleSelectorSequence seq) => simpleSelectorSequences.add(seq); + + int get length => simpleSelectorSequences.length; + + @override + Selector clone() { + var simpleSequences = + simpleSelectorSequences.map((ss) => ss.clone()).toList(); + + return Selector(simpleSequences, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitSelector(this); +} + +class SimpleSelectorSequence extends TreeNode { + /// +, >, ~, NONE + int combinator; + final SimpleSelector simpleSelector; + + SimpleSelectorSequence(this.simpleSelector, SourceSpan? span, + [this.combinator = TokenKind.COMBINATOR_NONE]) + : super(span); + + bool get isCombinatorNone => combinator == TokenKind.COMBINATOR_NONE; + bool get isCombinatorPlus => combinator == TokenKind.COMBINATOR_PLUS; + bool get isCombinatorGreater => combinator == TokenKind.COMBINATOR_GREATER; + bool get isCombinatorTilde => combinator == TokenKind.COMBINATOR_TILDE; + bool get isCombinatorDescendant => + combinator == TokenKind.COMBINATOR_DESCENDANT; + + String get _combinatorToString => switch (combinator) { + TokenKind.COMBINATOR_DESCENDANT => ' ', + TokenKind.COMBINATOR_GREATER => ' > ', + TokenKind.COMBINATOR_PLUS => ' + ', + TokenKind.COMBINATOR_TILDE => ' ~ ', + _ => '' + }; + + @override + SimpleSelectorSequence clone() => + SimpleSelectorSequence(simpleSelector, span, combinator); + + @override + dynamic visit(VisitorBase visitor) => + visitor.visitSimpleSelectorSequence(this); + + @override + String toString() => simpleSelector.name; +} + +// All other selectors (element, #id, .class, attribute, pseudo, negation, +// namespace, *) are derived from this selector. +abstract class SimpleSelector extends TreeNode { + final dynamic _name; // Wildcard, ThisOperator, Identifier, Negation, others? + + SimpleSelector(this._name, SourceSpan? span) : super(span); + + // TOOD(srawlins): Figure this one out. + // ignore: avoid_dynamic_calls + String get name => _name.name as String; + + bool get isWildcard => _name is Wildcard; + + bool get isThis => _name is ThisOperator; + + @override + dynamic visit(VisitorBase visitor) => visitor.visitSimpleSelector(this); +} + +// element name +class ElementSelector extends SimpleSelector { + ElementSelector(super.name, super.span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitElementSelector(this); + + @override + ElementSelector clone() => ElementSelector(_name, span); + + @override + String toString() => name; +} + +// namespace|element +class NamespaceSelector extends SimpleSelector { + final dynamic _namespace; // null, Wildcard or Identifier + + NamespaceSelector(this._namespace, Object name, SourceSpan? span) + : super(name, span); + + String get namespace => _namespace is Wildcard + ? '*' + : _namespace == null + ? '' + : (_namespace as Identifier).name; + + bool get isNamespaceWildcard => _namespace is Wildcard; + + SimpleSelector? get nameAsSimpleSelector => _name as SimpleSelector?; + + @override + NamespaceSelector clone() => NamespaceSelector(_namespace, '', span); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitNamespaceSelector(this); + + @override + String toString() => '$namespace|${nameAsSimpleSelector!.name}'; +} + +// [attr op value] +class AttributeSelector extends SimpleSelector { + final int _op; + final dynamic value; + + AttributeSelector(Identifier name, this._op, this.value, SourceSpan? span) + : super(name, span); + + int get operatorKind => _op; + + String? matchOperator() => switch (_op) { + TokenKind.EQUALS => '=', + TokenKind.INCLUDES => '~=', + TokenKind.DASH_MATCH => '|=', + TokenKind.PREFIX_MATCH => '^=', + TokenKind.SUFFIX_MATCH => '\$=', + TokenKind.SUBSTRING_MATCH => '*=', + TokenKind.NO_MATCH => '', + _ => null + }; + + // Return the TokenKind for operator used by visitAttributeSelector. + String? matchOperatorAsTokenString() => switch (_op) { + TokenKind.EQUALS => 'EQUALS', + TokenKind.INCLUDES => 'INCLUDES', + TokenKind.DASH_MATCH => 'DASH_MATCH', + TokenKind.PREFIX_MATCH => 'PREFIX_MATCH', + TokenKind.SUFFIX_MATCH => 'SUFFIX_MATCH', + TokenKind.SUBSTRING_MATCH => 'SUBSTRING_MATCH', + _ => null + }; + + String valueToString() { + if (value != null) { + if (value is Identifier) { + return value.toString(); + } else { + return '"$value"'; + } + } else { + return ''; + } + } + + @override + AttributeSelector clone() => + AttributeSelector(_name as Identifier, _op, value, span); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitAttributeSelector(this); + + @override + String toString() => '[$name${matchOperator()}${valueToString()}]'; +} + +// #id +class IdSelector extends SimpleSelector { + IdSelector(Identifier super.name, super.span); + @override + IdSelector clone() => IdSelector(_name as Identifier, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitIdSelector(this); + + @override + String toString() => '#$_name'; +} + +// .class +class ClassSelector extends SimpleSelector { + ClassSelector(Identifier super.name, super.span); + @override + ClassSelector clone() => ClassSelector(_name as Identifier, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitClassSelector(this); + + @override + String toString() => '.$_name'; +} + +// :pseudoClass +class PseudoClassSelector extends SimpleSelector { + PseudoClassSelector(Identifier super.name, super.span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitPseudoClassSelector(this); + + @override + PseudoClassSelector clone() => PseudoClassSelector(_name as Identifier, span); + + @override + String toString() => ':$name'; +} + +// ::pseudoElement +class PseudoElementSelector extends SimpleSelector { + // If true, this is a CSS2.1 pseudo-element with only a single ':'. + final bool isLegacy; + + PseudoElementSelector(Identifier super.name, super.span, + {this.isLegacy = false}); + @override + dynamic visit(VisitorBase visitor) => + visitor.visitPseudoElementSelector(this); + + @override + PseudoElementSelector clone() => + PseudoElementSelector(_name as Identifier, span); + + @override + String toString() => "${isLegacy ? ':' : '::'}$name"; +} + +// :pseudoClassFunction(argument) +class PseudoClassFunctionSelector extends PseudoClassSelector { + final TreeNode argument; // Selector, SelectorExpression + + PseudoClassFunctionSelector(Identifier name, this.argument, SourceSpan? span) + : super(name, span); + + @override + PseudoClassFunctionSelector clone() => + PseudoClassFunctionSelector(_name as Identifier, argument, span); + + Selector get selector => argument as Selector; + SelectorExpression get expression => argument as SelectorExpression; + + @override + dynamic visit(VisitorBase visitor) => + visitor.visitPseudoClassFunctionSelector(this); +} + +// ::pseudoElementFunction(expression) +class PseudoElementFunctionSelector extends PseudoElementSelector { + final SelectorExpression expression; + + PseudoElementFunctionSelector( + Identifier name, this.expression, SourceSpan? span) + : super(name, span); + + @override + PseudoElementFunctionSelector clone() => + PseudoElementFunctionSelector(_name as Identifier, expression, span); + + @override + dynamic visit(VisitorBase visitor) => + visitor.visitPseudoElementFunctionSelector(this); +} + +class SelectorExpression extends TreeNode { + final List expressions; + + SelectorExpression(this.expressions, SourceSpan? span) : super(span); + + @override + SourceSpan get span => super.span!; + + @override + SelectorExpression clone() => + SelectorExpression(expressions.map((e) => e.clone()).toList(), span); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitSelectorExpression(this); +} + +// :NOT(negation_arg) +class NegationSelector extends SimpleSelector { + final SimpleSelector? negationArg; + + NegationSelector(this.negationArg, SourceSpan? span) + : super(Negation(span), span); + + @override + NegationSelector clone() => NegationSelector(negationArg, span); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitNegationSelector(this); +} + +class NoOp extends TreeNode { + NoOp() : super(null); + + @override + NoOp clone() => NoOp(); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitNoOp(this); +} + +class StyleSheet extends TreeNode { + /// Contains charset, ruleset, directives (media, page, etc.), and selectors. + final List topLevels; + + StyleSheet(this.topLevels, SourceSpan? span) : super(span) { + for (final node in topLevels) { + assert(node is TopLevelProduction || node is Directive); + } + } + + /// Selectors only in this tree. + StyleSheet.selector(this.topLevels, SourceSpan? span) : super(span); + + @override + SourceSpan get span => super.span!; + + @override + StyleSheet clone() { + var clonedTopLevels = topLevels.map((e) => e.clone()).toList(); + return StyleSheet(clonedTopLevels, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitStyleSheet(this); +} + +class TopLevelProduction extends TreeNode { + TopLevelProduction(super.span); + @override + SourceSpan get span => super.span!; + @override + TopLevelProduction clone() => TopLevelProduction(span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitTopLevelProduction(this); +} + +class RuleSet extends TopLevelProduction { + final SelectorGroup? selectorGroup; + final DeclarationGroup declarationGroup; + + RuleSet(this.selectorGroup, this.declarationGroup, SourceSpan? span) + : super(span); + + @override + RuleSet clone() { + var cloneSelectorGroup = selectorGroup!.clone(); + var cloneDeclarationGroup = declarationGroup.clone(); + return RuleSet(cloneSelectorGroup, cloneDeclarationGroup, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitRuleSet(this); +} + +class Directive extends TreeNode { + Directive(super.span); + + bool get isBuiltIn => true; // Known CSS directive? + bool get isExtension => false; // SCSS extension? + + @override + SourceSpan get span => super.span!; + + @override + Directive clone() => Directive(span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitDirective(this); +} + +class DocumentDirective extends Directive { + final List functions; + final List groupRuleBody; + + DocumentDirective(this.functions, this.groupRuleBody, SourceSpan? span) + : super(span); + + @override + DocumentDirective clone() { + var clonedFunctions = []; + for (var function in functions) { + clonedFunctions.add(function.clone()); + } + var clonedGroupRuleBody = []; + for (var rule in groupRuleBody) { + clonedGroupRuleBody.add(rule.clone()); + } + return DocumentDirective(clonedFunctions, clonedGroupRuleBody, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitDocumentDirective(this); +} + +class SupportsDirective extends Directive { + final SupportsCondition? condition; + final List groupRuleBody; + + SupportsDirective(this.condition, this.groupRuleBody, SourceSpan? span) + : super(span); + + @override + SupportsDirective clone() { + var clonedCondition = condition!.clone() as SupportsCondition; + var clonedGroupRuleBody = []; + for (var rule in groupRuleBody) { + clonedGroupRuleBody.add(rule.clone()); + } + return SupportsDirective(clonedCondition, clonedGroupRuleBody, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitSupportsDirective(this); +} + +abstract class SupportsCondition extends TreeNode { + SupportsCondition(super.span); + @override + SourceSpan get span => super.span!; +} + +class SupportsConditionInParens extends SupportsCondition { + /// A [Declaration] or nested [SupportsCondition]. + final TreeNode? condition; + + SupportsConditionInParens(Declaration? declaration, super.span) + : condition = declaration; + + SupportsConditionInParens.nested(this.condition, SourceSpan? span) + : super(span); + + @override + SupportsConditionInParens clone() => + SupportsConditionInParens(condition!.clone() as Declaration, span); + + @override + dynamic visit(VisitorBase visitor) => + visitor.visitSupportsConditionInParens(this); +} + +class SupportsNegation extends SupportsCondition { + final SupportsConditionInParens condition; + + SupportsNegation(this.condition, SourceSpan? span) : super(span); + + @override + SupportsNegation clone() => SupportsNegation(condition.clone(), span); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitSupportsNegation(this); +} + +class SupportsConjunction extends SupportsCondition { + final List conditions; + + SupportsConjunction(this.conditions, SourceSpan? span) : super(span); + + @override + SupportsConjunction clone() { + var clonedConditions = []; + for (var condition in conditions) { + clonedConditions.add(condition.clone()); + } + return SupportsConjunction(clonedConditions, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitSupportsConjunction(this); +} + +class SupportsDisjunction extends SupportsCondition { + final List conditions; + + SupportsDisjunction(this.conditions, SourceSpan? span) : super(span); + + @override + SupportsDisjunction clone() { + var clonedConditions = []; + for (var condition in conditions) { + clonedConditions.add(condition.clone()); + } + return SupportsDisjunction(clonedConditions, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitSupportsDisjunction(this); +} + +class ViewportDirective extends Directive { + final String name; + final DeclarationGroup declarations; + + ViewportDirective(this.name, this.declarations, SourceSpan? span) + : super(span); + + @override + ViewportDirective clone() => + ViewportDirective(name, declarations.clone(), span); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitViewportDirective(this); +} + +class ImportDirective extends Directive { + /// import name specified. + final String import; + + /// Any media queries for this import. + final List mediaQueries; + + ImportDirective(this.import, this.mediaQueries, SourceSpan? span) + : super(span); + + @override + ImportDirective clone() { + var cloneMediaQueries = []; + for (var mediaQuery in mediaQueries) { + cloneMediaQueries.add(mediaQuery.clone()); + } + return ImportDirective(import, cloneMediaQueries, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitImportDirective(this); +} + +/// MediaExpression grammar: +/// +/// '(' S* media_feature S* [ ':' S* expr ]? ')' S* +class MediaExpression extends TreeNode { + final bool andOperator; + final Identifier _mediaFeature; + final Expressions exprs; + + MediaExpression( + this.andOperator, this._mediaFeature, this.exprs, SourceSpan? span) + : super(span); + + String get mediaFeature => _mediaFeature.name; + + @override + SourceSpan get span => super.span!; + + @override + MediaExpression clone() { + var clonedExprs = exprs.clone(); + return MediaExpression(andOperator, _mediaFeature, clonedExprs, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitMediaExpression(this); +} + +/// MediaQuery grammar: +/// +/// : [ONLY | NOT]? S* media_type S* [ AND S* media_expression ]* +/// | media_expression [ AND S* media_expression ]* +/// media_type +/// : IDENT +/// media_expression +/// : '(' S* media_feature S* [ ':' S* expr ]? ')' S* +/// media_feature +/// : IDENT +class MediaQuery extends TreeNode { + /// not, only or no operator. + final int _mediaUnary; + final Identifier? _mediaType; + final List expressions; + + MediaQuery( + this._mediaUnary, this._mediaType, this.expressions, SourceSpan? span) + : super(span); + + bool get hasMediaType => _mediaType != null; + String get mediaType => _mediaType!.name; + + bool get hasUnary => _mediaUnary != -1; + String get unary => + TokenKind.idToValue(TokenKind.MEDIA_OPERATORS, _mediaUnary)! + .toUpperCase(); + + @override + SourceSpan get span => super.span!; + + @override + MediaQuery clone() { + var cloneExpressions = []; + for (var expr in expressions) { + cloneExpressions.add(expr.clone()); + } + return MediaQuery(_mediaUnary, _mediaType, cloneExpressions, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitMediaQuery(this); +} + +class MediaDirective extends Directive { + final List mediaQueries; + final List rules; + + MediaDirective(this.mediaQueries, this.rules, SourceSpan? span) : super(span); + + @override + MediaDirective clone() { + var cloneQueries = []; + for (var mediaQuery in mediaQueries) { + cloneQueries.add(mediaQuery.clone()); + } + var cloneRules = []; + for (var rule in rules) { + cloneRules.add(rule.clone()); + } + return MediaDirective(cloneQueries, cloneRules, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitMediaDirective(this); +} + +class HostDirective extends Directive { + final List rules; + + HostDirective(this.rules, SourceSpan? span) : super(span); + + @override + HostDirective clone() { + var cloneRules = []; + for (var rule in rules) { + cloneRules.add(rule.clone()); + } + return HostDirective(cloneRules, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitHostDirective(this); +} + +class PageDirective extends Directive { + final String? _ident; + final String? _pseudoPage; + final List _declsMargin; + + PageDirective( + this._ident, this._pseudoPage, this._declsMargin, SourceSpan? span) + : super(span); + + @override + PageDirective clone() { + var cloneDeclsMargin = []; + for (var declMargin in _declsMargin) { + cloneDeclsMargin.add(declMargin.clone()); + } + return PageDirective(_ident, _pseudoPage, cloneDeclsMargin, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitPageDirective(this); + + bool get hasIdent => _ident?.isNotEmpty ?? false; + bool get hasPseudoPage => _pseudoPage?.isNotEmpty ?? false; +} + +class CharsetDirective extends Directive { + final String charEncoding; + + CharsetDirective(this.charEncoding, SourceSpan? span) : super(span); + @override + CharsetDirective clone() => CharsetDirective(charEncoding, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitCharsetDirective(this); +} + +class KeyFrameDirective extends Directive { + // Either @keyframe or keyframe prefixed with @-webkit-, @-moz-, @-ms-, @-o-. + final int _keyframeName; + final Identifier? name; + final List _blocks; + + KeyFrameDirective(this._keyframeName, this.name, SourceSpan? span) + : _blocks = [], + super(span); + + void add(KeyFrameBlock block) { + _blocks.add(block); + } + + String? get keyFrameName => switch (_keyframeName) { + TokenKind.DIRECTIVE_KEYFRAMES || + TokenKind.DIRECTIVE_MS_KEYFRAMES => + '@keyframes', + TokenKind.DIRECTIVE_WEB_KIT_KEYFRAMES => '@-webkit-keyframes', + TokenKind.DIRECTIVE_MOZ_KEYFRAMES => '@-moz-keyframes', + TokenKind.DIRECTIVE_O_KEYFRAMES => '@-o-keyframes', + _ => null + }; + + @override + KeyFrameDirective clone() { + var directive = KeyFrameDirective(_keyframeName, name!.clone(), span); + for (var block in _blocks) { + directive.add(block.clone()); + } + return directive; + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitKeyFrameDirective(this); +} + +class KeyFrameBlock extends Expression { + final Expressions _blockSelectors; + final DeclarationGroup _declarations; + + KeyFrameBlock(this._blockSelectors, this._declarations, SourceSpan? span) + : super(span); + + @override + KeyFrameBlock clone() => + KeyFrameBlock(_blockSelectors.clone(), _declarations.clone(), span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitKeyFrameBlock(this); +} + +class FontFaceDirective extends Directive { + final DeclarationGroup _declarations; + + FontFaceDirective(this._declarations, SourceSpan? span) : super(span); + + @override + FontFaceDirective clone() => FontFaceDirective(_declarations.clone(), span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitFontFaceDirective(this); +} + +class StyletDirective extends Directive { + final String dartClassName; + final List rules; + + StyletDirective(this.dartClassName, this.rules, SourceSpan? span) + : super(span); + + @override + bool get isBuiltIn => false; + @override + bool get isExtension => true; + + @override + StyletDirective clone() { + var cloneRules = []; + for (var rule in rules) { + cloneRules.add(rule.clone()); + } + return StyletDirective(dartClassName, cloneRules, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitStyletDirective(this); +} + +class NamespaceDirective extends Directive { + /// Namespace prefix. + final String _prefix; + + /// URI associated with this namespace. + final String? _uri; + + NamespaceDirective(this._prefix, this._uri, SourceSpan? span) : super(span); + + @override + NamespaceDirective clone() => NamespaceDirective(_prefix, _uri, span); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitNamespaceDirective(this); + + String get prefix => _prefix.isNotEmpty ? '$_prefix ' : ''; +} + +/// To support Less syntax @name: expression +class VarDefinitionDirective extends Directive { + final VarDefinition def; + + VarDefinitionDirective(this.def, SourceSpan? span) : super(span); + + @override + VarDefinitionDirective clone() => VarDefinitionDirective(def.clone(), span); + + @override + dynamic visit(VisitorBase visitor) => + visitor.visitVarDefinitionDirective(this); +} + +class MixinDefinition extends Directive { + final String name; + final List definedArgs; + final bool varArgs; + + MixinDefinition(this.name, this.definedArgs, this.varArgs, SourceSpan? span) + : super(span); + + @override + MixinDefinition clone() { + var cloneDefinedArgs = []; + for (var definedArg in definedArgs) { + cloneDefinedArgs.add(definedArg.clone()); + } + return MixinDefinition(name, cloneDefinedArgs, varArgs, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitMixinDefinition(this); +} + +/// Support a Sass @mixin. See http://sass-lang.com for description. +class MixinRulesetDirective extends MixinDefinition { + final List rulesets; + + MixinRulesetDirective(String name, List args, bool varArgs, + this.rulesets, SourceSpan? span) + : super(name, args, varArgs, span); + + @override + MixinRulesetDirective clone() { + var clonedArgs = []; + for (var arg in definedArgs) { + clonedArgs.add(arg.clone() as VarDefinition); + } + var clonedRulesets = []; + for (var ruleset in rulesets) { + clonedRulesets.add(ruleset.clone()); + } + return MixinRulesetDirective( + name, clonedArgs, varArgs, clonedRulesets, span); + } + + @override + dynamic visit(VisitorBase visitor) => + visitor.visitMixinRulesetDirective(this); +} + +class MixinDeclarationDirective extends MixinDefinition { + final DeclarationGroup declarations; + + MixinDeclarationDirective(String name, List args, bool varArgs, + this.declarations, SourceSpan? span) + : super(name, args, varArgs, span); + + @override + MixinDeclarationDirective clone() { + var clonedArgs = []; + for (var arg in definedArgs) { + clonedArgs.add(arg.clone()); + } + return MixinDeclarationDirective( + name, clonedArgs, varArgs, declarations.clone(), span); + } + + @override + dynamic visit(VisitorBase visitor) => + visitor.visitMixinDeclarationDirective(this); +} + +/// To support consuming a Sass mixin @include. +class IncludeDirective extends Directive { + final String name; + final List> args; + + IncludeDirective(this.name, this.args, SourceSpan? span) : super(span); + + @override + IncludeDirective clone() { + var cloneArgs = >[]; + for (var arg in args) { + cloneArgs.add(arg.map((term) => term.clone()).toList()); + } + return IncludeDirective(name, cloneArgs, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitIncludeDirective(this); +} + +/// To support Sass @content. +class ContentDirective extends Directive { + ContentDirective(super.span); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitContentDirective(this); +} + +class Declaration extends TreeNode { + final Identifier? _property; + final Expression? expression; + + /// Style exposed to Dart. + DartStyleExpression? dartStyle; + final bool important; + + /// IE CSS hacks that can only be read by a particular IE version. + /// 7 implies IE 7 or older property (e.g., `*background: blue;`) + /// + /// * Note: IE 8 or older property (e.g., `background: green\9;`) is handled + /// by IE8Term in declaration expression handling. + /// * Note: IE 6 only property with a leading underscore is a valid IDENT + /// since an ident can start with underscore (e.g., `_background: red;`) + final bool isIE7; + + Declaration(this._property, this.expression, this.dartStyle, SourceSpan? span, + {this.important = false, bool ie7 = false}) + : isIE7 = ie7, + super(span); + + String get property => isIE7 ? '*${_property!.name}' : _property!.name; + + bool get hasDartStyle => dartStyle != null; + + @override + SourceSpan get span => super.span!; + + @override + Declaration clone() => + Declaration(_property!.clone(), expression!.clone(), dartStyle, span, + important: important); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitDeclaration(this); +} + +// TODO(terry): Consider 2 kinds of VarDefinitions static at top-level and +// dynamic when in a declaration. Currently, Less syntax +// '@foo: expression' and 'var-foo: expression' in a declaration +// are statically resolved. Better solution, if @foo or var-foo +// are top-level are then statically resolved and var-foo in a +// declaration group (surrounded by a selector) would be dynamic. +class VarDefinition extends Declaration { + bool badUsage = false; + + VarDefinition(Identifier? definedName, Expression? expr, SourceSpan? span) + : super(definedName, expr, null, span); + + String get definedName => _property!.name; + + @override + VarDefinition clone() => + VarDefinition(_property!.clone(), expression?.clone(), span); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitVarDefinition(this); +} + +/// Node for usage of @include mixin[(args,...)] found in a declaration group +/// instead of at a ruleset (toplevel) e.g., +/// +/// div { +/// @include mixin1; +/// } +class IncludeMixinAtDeclaration extends Declaration { + final IncludeDirective include; + + IncludeMixinAtDeclaration(this.include, SourceSpan? span) + : super(null, null, null, span); + + @override + IncludeMixinAtDeclaration clone() => + IncludeMixinAtDeclaration(include.clone(), span); + + @override + dynamic visit(VisitorBase visitor) => + visitor.visitIncludeMixinAtDeclaration(this); +} + +class ExtendDeclaration extends Declaration { + final List selectors; + + ExtendDeclaration(this.selectors, SourceSpan? span) + : super(null, null, null, span); + + @override + ExtendDeclaration clone() { + var newSelector = selectors.map((s) => s.clone()).toList(); + return ExtendDeclaration(newSelector, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitExtendDeclaration(this); +} + +class DeclarationGroup extends TreeNode { + /// Can be either Declaration or RuleSet (if nested selector). + final List declarations; + + DeclarationGroup(this.declarations, SourceSpan? span) : super(span); + + @override + SourceSpan get span => super.span!; + + @override + DeclarationGroup clone() { + var clonedDecls = declarations.map((d) => d.clone()).toList(); + return DeclarationGroup(clonedDecls, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitDeclarationGroup(this); +} + +class MarginGroup extends DeclarationGroup { + // ignore: non_constant_identifier_names + final int margin_sym; // TokenType for for @margin sym. + + MarginGroup(this.margin_sym, List decls, SourceSpan? span) + : super(decls, span); + @override + MarginGroup clone() => + MarginGroup(margin_sym, super.clone().declarations, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitMarginGroup(this); +} + +class VarUsage extends Expression { + final String name; + final List defaultValues; + + VarUsage(this.name, this.defaultValues, SourceSpan? span) : super(span); + + @override + VarUsage clone() { + var clonedValues = []; + for (var expr in defaultValues) { + clonedValues.add(expr.clone()); + } + return VarUsage(name, clonedValues, span); + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitVarUsage(this); +} + +class OperatorSlash extends Expression { + OperatorSlash(super.span); + @override + OperatorSlash clone() => OperatorSlash(span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitOperatorSlash(this); +} + +class OperatorComma extends Expression { + OperatorComma(super.span); + @override + OperatorComma clone() => OperatorComma(span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitOperatorComma(this); +} + +class OperatorPlus extends Expression { + OperatorPlus(super.span); + @override + OperatorPlus clone() => OperatorPlus(span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitOperatorPlus(this); +} + +class OperatorMinus extends Expression { + OperatorMinus(super.span); + @override + OperatorMinus clone() => OperatorMinus(span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitOperatorMinus(this); +} + +class UnicodeRangeTerm extends Expression { + final String? first; + final String? second; + + UnicodeRangeTerm(this.first, this.second, SourceSpan? span) : super(span); + + bool get hasSecond => second != null; + + @override + UnicodeRangeTerm clone() => UnicodeRangeTerm(first, second, span); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitUnicodeRangeTerm(this); +} + +class LiteralTerm extends Expression { + // TODO(terry): value and text fields can be made final once all CSS resources + // are copied/symlink'd in the build tool and UriVisitor in + // web_ui is removed. + Object value; + String text; + + LiteralTerm(this.value, this.text, SourceSpan? span) : super(span); + + @override + LiteralTerm clone() => LiteralTerm(value, text, span); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitLiteralTerm(this); +} + +class NumberTerm extends LiteralTerm { + NumberTerm(super.value, super.text, super.span); + @override + NumberTerm clone() => NumberTerm(value, text, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitNumberTerm(this); +} + +class UnitTerm extends LiteralTerm { + final int unit; + + UnitTerm(super.value, super.text, super.span, this.unit); + + @override + UnitTerm clone() => UnitTerm(value, text, span, unit); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitUnitTerm(this); + + String? unitToString() => TokenKind.unitToString(unit); + + @override + String toString() => '$text${unitToString()}'; +} + +class LengthTerm extends UnitTerm { + LengthTerm(super.value, super.text, super.span, + [super.unit = TokenKind.UNIT_LENGTH_PX]) { + assert(unit == TokenKind.UNIT_LENGTH_PX || + unit == TokenKind.UNIT_LENGTH_CM || + unit == TokenKind.UNIT_LENGTH_MM || + unit == TokenKind.UNIT_LENGTH_IN || + unit == TokenKind.UNIT_LENGTH_PT || + unit == TokenKind.UNIT_LENGTH_PC); + } + @override + LengthTerm clone() => LengthTerm(value, text, span, unit); + @override + dynamic visit(VisitorBase visitor) => visitor.visitLengthTerm(this); +} + +class PercentageTerm extends LiteralTerm { + PercentageTerm(super.value, super.text, super.span); + @override + PercentageTerm clone() => PercentageTerm(value, text, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitPercentageTerm(this); +} + +class EmTerm extends LiteralTerm { + EmTerm(super.value, super.text, super.span); + @override + EmTerm clone() => EmTerm(value, text, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitEmTerm(this); +} + +class ExTerm extends LiteralTerm { + ExTerm(super.value, super.text, super.span); + @override + ExTerm clone() => ExTerm(value, text, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitExTerm(this); +} + +class AngleTerm extends UnitTerm { + AngleTerm(super.value, super.text, super.span, + [super.unit = TokenKind.UNIT_LENGTH_PX]) { + assert(unit == TokenKind.UNIT_ANGLE_DEG || + unit == TokenKind.UNIT_ANGLE_RAD || + unit == TokenKind.UNIT_ANGLE_GRAD || + unit == TokenKind.UNIT_ANGLE_TURN); + } + + @override + AngleTerm clone() => AngleTerm(value, text, span, unit); + @override + dynamic visit(VisitorBase visitor) => visitor.visitAngleTerm(this); +} + +class TimeTerm extends UnitTerm { + TimeTerm(super.value, super.text, super.span, + [super.unit = TokenKind.UNIT_LENGTH_PX]) { + assert(unit == TokenKind.UNIT_ANGLE_DEG || + unit == TokenKind.UNIT_TIME_MS || + unit == TokenKind.UNIT_TIME_S); + } + + @override + TimeTerm clone() => TimeTerm(value, text, span, unit); + @override + dynamic visit(VisitorBase visitor) => visitor.visitTimeTerm(this); +} + +class FreqTerm extends UnitTerm { + FreqTerm(Object value, String text, SourceSpan? span, + [int unit = TokenKind.UNIT_LENGTH_PX]) + : super(value, text, span, unit) { + assert(unit == TokenKind.UNIT_FREQ_HZ || unit == TokenKind.UNIT_FREQ_KHZ); + } + + @override + FreqTerm clone() => FreqTerm(value, text, span, unit); + @override + dynamic visit(VisitorBase visitor) => visitor.visitFreqTerm(this); +} + +class FractionTerm extends LiteralTerm { + FractionTerm(super.value, super.text, super.span); + + @override + FractionTerm clone() => FractionTerm(value, text, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitFractionTerm(this); +} + +class UriTerm extends LiteralTerm { + UriTerm(String value, SourceSpan? span) : super(value, value, span); + + @override + UriTerm clone() => UriTerm(value as String, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitUriTerm(this); +} + +class ResolutionTerm extends UnitTerm { + ResolutionTerm(Object value, String text, SourceSpan? span, + [int unit = TokenKind.UNIT_LENGTH_PX]) + : super(value, text, span, unit) { + assert(unit == TokenKind.UNIT_RESOLUTION_DPI || + unit == TokenKind.UNIT_RESOLUTION_DPCM || + unit == TokenKind.UNIT_RESOLUTION_DPPX); + } + + @override + ResolutionTerm clone() => ResolutionTerm(value, text, span, unit); + @override + dynamic visit(VisitorBase visitor) => visitor.visitResolutionTerm(this); +} + +class ChTerm extends UnitTerm { + ChTerm(Object value, String text, SourceSpan? span, + [int unit = TokenKind.UNIT_LENGTH_PX]) + : super(value, text, span, unit) { + assert(unit == TokenKind.UNIT_CH); + } + + @override + ChTerm clone() => ChTerm(value, text, span, unit); + @override + dynamic visit(VisitorBase visitor) => visitor.visitChTerm(this); +} + +class RemTerm extends UnitTerm { + RemTerm(Object value, String text, SourceSpan? span, + [int unit = TokenKind.UNIT_LENGTH_PX]) + : super(value, text, span, unit) { + assert(unit == TokenKind.UNIT_REM); + } + + @override + RemTerm clone() => RemTerm(value, text, span, unit); + @override + dynamic visit(VisitorBase visitor) => visitor.visitRemTerm(this); +} + +class LineHeightTerm extends UnitTerm { + LineHeightTerm(Object value, String text, SourceSpan? span, int unit) + : super(value, text, span, unit) { + assert(unit == TokenKind.UNIT_LH || unit == TokenKind.UNIT_RLH); + } + @override + LineHeightTerm clone() => LineHeightTerm(value, text, span, unit); + @override + dynamic visit(VisitorBase visitor) => visitor.visitLineHeightTerm(this); +} + +class ViewportTerm extends UnitTerm { + ViewportTerm(Object value, String text, SourceSpan? span, + [int unit = TokenKind.UNIT_LENGTH_PX]) + : super(value, text, span, unit) { + assert(unit == TokenKind.UNIT_VIEWPORT_VW || + unit == TokenKind.UNIT_VIEWPORT_VH || + unit == TokenKind.UNIT_VIEWPORT_VMIN || + unit == TokenKind.UNIT_VIEWPORT_VMAX); + } + + @override + ViewportTerm clone() => ViewportTerm(value, text, span, unit); + @override + dynamic visit(VisitorBase visitor) => visitor.visitViewportTerm(this); +} + +/// Type to signal a bad hex value for HexColorTerm.value. +// ignore: camel_case_types +class BAD_HEX_VALUE {} + +class HexColorTerm extends LiteralTerm { + HexColorTerm(super.value, super.text, super.span); + + @override + HexColorTerm clone() => HexColorTerm(value, text, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitHexColorTerm(this); +} + +class FunctionTerm extends LiteralTerm { + final Expressions _params; + + FunctionTerm(Object value, String text, this._params, SourceSpan? span) + : super(value, text, span); + + @override + FunctionTerm clone() => FunctionTerm(value, text, _params.clone(), span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitFunctionTerm(this); +} + +/// A "\9" was encountered at the end of the expression and before a semi-colon. +/// This is an IE trick to ignore a property or value except by IE 8 and older +/// browsers. +class IE8Term extends LiteralTerm { + IE8Term(SourceSpan? span) : super('\\9', '\\9', span); + @override + IE8Term clone() => IE8Term(span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitIE8Term(this); +} + +class GroupTerm extends Expression { + final List _terms; + + GroupTerm(super.span) : _terms = []; + + void add(LiteralTerm term) { + _terms.add(term); + } + + @override + GroupTerm clone() => GroupTerm(span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitGroupTerm(this); +} + +class ItemTerm extends NumberTerm { + ItemTerm(super.value, super.text, super.span); + + @override + ItemTerm clone() => ItemTerm(value, text, span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitItemTerm(this); +} + +class Expressions extends Expression { + final List expressions = []; + + Expressions(super.span); + + void add(Expression expression) { + expressions.add(expression); + } + + @override + Expressions clone() { + var clonedExprs = Expressions(span); + for (var expr in expressions) { + clonedExprs.add(expr.clone()); + } + return clonedExprs; + } + + @override + dynamic visit(VisitorBase visitor) => visitor.visitExpressions(this); +} + +class BinaryExpression extends Expression { + final Token op; + final Expression x; + final Expression y; + + BinaryExpression(this.op, this.x, this.y, SourceSpan? span) : super(span); + + @override + BinaryExpression clone() => BinaryExpression(op, x.clone(), y.clone(), span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitBinaryExpression(this); +} + +class UnaryExpression extends Expression { + final Token op; + final Expression self; + + UnaryExpression(this.op, this.self, SourceSpan? span) : super(span); + + @override + UnaryExpression clone() => UnaryExpression(op, self.clone(), span); + @override + dynamic visit(VisitorBase visitor) => visitor.visitUnaryExpression(this); +} + +abstract class DartStyleExpression extends TreeNode { + static const int unknownType = 0; + static const int fontStyle = 1; + static const int marginStyle = 2; + static const int borderStyle = 3; + static const int paddingStyle = 4; + static const int heightStyle = 5; + static const int widthStyle = 6; + + final int? _styleType; + int? priority; + + DartStyleExpression(this._styleType, SourceSpan? span) : super(span); + + // Merges give 2 DartStyleExpression (or derived from DartStyleExpression, + // e.g., FontExpression, etc.) will merge if the two expressions are of the + // same property name (implies same exact type e.g, FontExpression). + DartStyleExpression? merged(DartStyleExpression newDartExpr); + + bool get isUnknown => _styleType == 0 || _styleType == null; + bool get isFont => _styleType == fontStyle; + bool get isMargin => _styleType == marginStyle; + bool get isBorder => _styleType == borderStyle; + bool get isPadding => _styleType == paddingStyle; + bool get isHeight => _styleType == heightStyle; + bool get isWidth => _styleType == widthStyle; + bool get isBoxExpression => isMargin || isBorder || isPadding; + + bool isSame(DartStyleExpression other) => _styleType == other._styleType; + + @override + SourceSpan get span => super.span!; + + @override + dynamic visit(VisitorBase visitor) => visitor.visitDartStyleExpression(this); +} + +class FontExpression extends DartStyleExpression { + final Font font; + + // font-style font-variant font-weight font-size/line-height font-family + // TODO(terry): Only px/pt for now need to handle all possible units to + // support calc expressions on units. + FontExpression(SourceSpan? span, + {Object? /* LengthTerm | num */ size, + List? family, + int? weight, + String? style, + String? variant, + LineHeight? lineHeight}) + : font = Font( + size: (size is LengthTerm ? size.value : size) as num?, + family: family, + weight: weight, + style: style, + variant: variant, + lineHeight: lineHeight), + super(DartStyleExpression.fontStyle, span); + + @override + FontExpression? merged(DartStyleExpression newDartExpr) { + if (newDartExpr is FontExpression && isFont && newDartExpr.isFont) { + return FontExpression.merge(this, newDartExpr); + } + return null; + } + + /// Merge the two FontExpression and return the result. + factory FontExpression.merge(FontExpression x, FontExpression y) => + FontExpression._merge(x, y, y.span); + + FontExpression._merge(FontExpression x, FontExpression y, SourceSpan? span) + : font = Font.merge(x.font, y.font)!, + super(DartStyleExpression.fontStyle, span); + + @override + FontExpression clone() => FontExpression(span, + size: font.size, + family: font.family, + weight: font.weight, + style: font.style, + variant: font.variant, + lineHeight: font.lineHeight); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitFontExpression(this); +} + +abstract class BoxExpression extends DartStyleExpression { + final BoxEdge? box; + + BoxExpression(super.styleType, super.span, this.box); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitBoxExpression(this); + + String get formattedBoxEdge { + if (box!.top == box!.left && + box!.top == box!.bottom && + box!.top == box!.right) { + return '.uniform(${box!.top})'; + } else { + var left = box!.left ?? 0; + var top = box!.top ?? 0; + var right = box!.right ?? 0; + var bottom = box!.bottom ?? 0; + return '.clockwiseFromTop($top,$right,$bottom,$left)'; + } + } +} + +class MarginExpression extends BoxExpression { + // TODO(terry): Does auto for margin need to be exposed to Dart UI framework? + /// Margin expression ripped apart. + MarginExpression(SourceSpan? span, + {num? top, num? right, num? bottom, num? left}) + : super(DartStyleExpression.marginStyle, span, + BoxEdge(left, top, right, bottom)); + + MarginExpression.boxEdge(SourceSpan? span, BoxEdge? box) + : super(DartStyleExpression.marginStyle, span, box); + + @override + MarginExpression? merged(DartStyleExpression newDartExpr) { + if (newDartExpr is MarginExpression && isMargin && newDartExpr.isMargin) { + return MarginExpression.merge(this, newDartExpr); + } + + return null; + } + + /// Merge the two MarginExpressions and return the result. + factory MarginExpression.merge(MarginExpression x, MarginExpression y) => + MarginExpression._merge(x, y, y.span); + + MarginExpression._merge( + MarginExpression x, MarginExpression y, SourceSpan? span) + : super(x._styleType, span, BoxEdge.merge(x.box, y.box)); + + @override + MarginExpression clone() => MarginExpression(span, + top: box!.top, right: box!.right, bottom: box!.bottom, left: box!.left); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitMarginExpression(this); +} + +class BorderExpression extends BoxExpression { + /// Border expression ripped apart. + BorderExpression(SourceSpan? span, + {num? top, num? right, num? bottom, num? left}) + : super(DartStyleExpression.borderStyle, span, + BoxEdge(left, top, right, bottom)); + + BorderExpression.boxEdge(SourceSpan? span, BoxEdge box) + : super(DartStyleExpression.borderStyle, span, box); + + @override + BorderExpression? merged(DartStyleExpression newDartExpr) { + if (newDartExpr is BorderExpression && isBorder && newDartExpr.isBorder) { + return BorderExpression.merge(this, newDartExpr); + } + + return null; + } + + /// Merge the two BorderExpression and return the result. + factory BorderExpression.merge(BorderExpression x, BorderExpression y) => + BorderExpression._merge(x, y, y.span); + + BorderExpression._merge( + BorderExpression x, BorderExpression y, SourceSpan? span) + : super( + DartStyleExpression.borderStyle, span, BoxEdge.merge(x.box, y.box)); + + @override + BorderExpression clone() => BorderExpression(span, + top: box!.top, right: box!.right, bottom: box!.bottom, left: box!.left); + + @override + dynamic visit(VisitorBase visitor) => visitor.visitBorderExpression(this); +} + +class HeightExpression extends DartStyleExpression { + final dynamic height; + + HeightExpression(SourceSpan? span, this.height) + : super(DartStyleExpression.heightStyle, span); + + @override + HeightExpression? merged(DartStyleExpression newDartExpr) { + if (isHeight && newDartExpr.isHeight) { + return newDartExpr as HeightExpression; + } + + return null; + } + + @override + HeightExpression clone() => HeightExpression(span, height); + @override + dynamic visit(VisitorBase visitor) => visitor.visitHeightExpression(this); +} + +class WidthExpression extends DartStyleExpression { + final dynamic width; + + WidthExpression(SourceSpan? span, this.width) + : super(DartStyleExpression.widthStyle, span); + + @override + WidthExpression? merged(DartStyleExpression newDartExpr) { + if (newDartExpr is WidthExpression && isWidth && newDartExpr.isWidth) { + return newDartExpr; + } + + return null; + } + + @override + WidthExpression clone() => WidthExpression(span, width); + @override + dynamic visit(VisitorBase visitor) => visitor.visitWidthExpression(this); +} + +class PaddingExpression extends BoxExpression { + /// Padding expression ripped apart. + PaddingExpression(SourceSpan? span, + {num? top, num? right, num? bottom, num? left}) + : super(DartStyleExpression.paddingStyle, span, + BoxEdge(left, top, right, bottom)); + + PaddingExpression.boxEdge(SourceSpan? span, BoxEdge? box) + : super(DartStyleExpression.paddingStyle, span, box); + + @override + PaddingExpression? merged(DartStyleExpression newDartExpr) { + if (newDartExpr is PaddingExpression && + isPadding && + newDartExpr.isPadding) { + return PaddingExpression.merge(this, newDartExpr); + } + + return null; + } + + /// Merge the two PaddingExpression and return the result. + factory PaddingExpression.merge(PaddingExpression x, PaddingExpression y) => + PaddingExpression._merge(x, y, y.span); + + PaddingExpression._merge( + PaddingExpression x, PaddingExpression y, SourceSpan? span) + : super(DartStyleExpression.paddingStyle, span, + BoxEdge.merge(x.box, y.box)); + + @override + PaddingExpression clone() => PaddingExpression(span, + top: box!.top, right: box!.right, bottom: box!.bottom, left: box!.left); + @override + dynamic visit(VisitorBase visitor) => visitor.visitPaddingExpression(this); +} diff --git a/pkgs/csslib/lib/src/tree_base.dart b/pkgs/csslib/lib/src/tree_base.dart new file mode 100644 index 000000000..af55fdd3d --- /dev/null +++ b/pkgs/csslib/lib/src/tree_base.dart @@ -0,0 +1,101 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +part of '../visitor.dart'; + +/// The base type for all nodes in a CSS abstract syntax tree. +abstract class TreeNode { + /// The source code this [TreeNode] represents. + final SourceSpan? span; + + TreeNode(this.span); + + TreeNode clone(); + + /// Classic double-dispatch visitor for implementing passes. + dynamic visit(VisitorBase visitor); + + /// A multiline string showing the node and its children. + String toDebugString() { + var to = TreeOutput(); + var tp = _TreePrinter(to, true); + visit(tp); + return to.buf.toString(); + } +} + +/// The base type for expressions. +abstract class Expression extends TreeNode { + Expression(super.span); + @override + Expression clone(); +} + +/// Simple class to provide a textual dump of trees for debugging. +class TreeOutput { + int depth = 0; + final StringBuffer buf = StringBuffer(); + VisitorBase? printer; + + void write(String s) { + for (var i = 0; i < depth; i++) { + buf.write(' '); + } + buf.write(s); + } + + void writeln(String s) { + write(s); + buf.write('\n'); + } + + void heading(String name, [SourceSpan? span]) { + write(name); + if (span != null) { + buf.write(' (${span.message('')})'); + } + buf.write('\n'); + } + + String toValue(dynamic value) { + if (value == null) { + return 'null'; + } else if (value is Identifier) { + return value.name; + } else { + return value.toString(); + } + } + + void writeNode(String label, TreeNode? node) { + write('$label: '); + depth += 1; + if (node != null) { + node.visit(printer!); + } else { + writeln('null'); + } + depth -= 1; + } + + void writeValue(String label, dynamic value) { + var v = toValue(value); + writeln('$label: $v'); + } + + void writeNodeList(String label, List? list) { + writeln('$label ['); + if (list != null) { + depth += 1; + for (var node in list) { + node.visit(printer!); + } + depth -= 1; + writeln(']'); + } + } + + @override + String toString() => buf.toString(); +} diff --git a/pkgs/csslib/lib/src/tree_printer.dart b/pkgs/csslib/lib/src/tree_printer.dart new file mode 100644 index 000000000..2e11e9e04 --- /dev/null +++ b/pkgs/csslib/lib/src/tree_printer.dart @@ -0,0 +1,700 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +part of '../visitor.dart'; + +// TODO(terry): Enable class for debug only; when conditional imports enabled. + +/// Helper function to dump the CSS AST. +String treeToDebugString(StyleSheet styleSheet, [bool useSpan = false]) { + var to = TreeOutput(); + _TreePrinter(to, useSpan).visitTree(styleSheet); + return to.toString(); +} + +/// Tree dump for debug output of the CSS AST. +class _TreePrinter extends Visitor { + final TreeOutput output; + final bool useSpan; + + _TreePrinter(this.output, this.useSpan) { + output.printer = this; + } + + @override + void visitTree(StyleSheet tree) => visitStylesheet(tree); + + void heading(String heading, TreeNode node) { + if (useSpan) { + output.heading(heading, node.span); + } else { + output.heading(heading); + } + } + + void visitStylesheet(StyleSheet node) { + heading('Stylesheet', node); + output.depth++; + super.visitStyleSheet(node); + output.depth--; + } + + @override + void visitTopLevelProduction(TopLevelProduction node) { + heading('TopLevelProduction', node); + } + + @override + void visitDirective(Directive node) { + heading('Directive', node); + } + + @override + void visitCalcTerm(CalcTerm node) { + heading('CalcTerm', node); + output.depth++; + super.visitCalcTerm(node); + output.depth--; + } + + @override + void visitCssComment(CssComment node) { + heading('Comment', node); + output.depth++; + output.writeValue('comment value', node.comment); + output.depth--; + } + + @override + void visitCommentDefinition(CommentDefinition node) { + heading('CommentDefinition (CDO/CDC)', node); + output.depth++; + output.writeValue('comment value', node.comment); + output.depth--; + } + + @override + void visitMediaExpression(MediaExpression node) { + heading('MediaExpression', node); + output.writeValue('feature', node.mediaFeature); + if (node.andOperator) output.writeValue('AND operator', ''); + visitExpressions(node.exprs); + } + + void visitMediaQueries(MediaQuery query) { + output.heading('MediaQueries'); + output.writeValue('unary', query.unary); + output.writeValue('media type', query.mediaType); + output.writeNodeList('media expressions', query.expressions); + } + + @override + void visitMediaDirective(MediaDirective node) { + heading('MediaDirective', node); + output.depth++; + output.writeNodeList('media queries', node.mediaQueries); + output.writeNodeList('rule sets', node.rules); + super.visitMediaDirective(node); + output.depth--; + } + + @override + void visitDocumentDirective(DocumentDirective node) { + heading('DocumentDirective', node); + output.depth++; + output.writeNodeList('functions', node.functions); + output.writeNodeList('group rule body', node.groupRuleBody); + output.depth--; + } + + @override + void visitSupportsDirective(SupportsDirective node) { + heading('SupportsDirective', node); + output.depth++; + output.writeNode('condition', node.condition); + output.writeNodeList('group rule body', node.groupRuleBody); + output.depth--; + } + + @override + void visitSupportsConditionInParens(SupportsConditionInParens node) { + heading('SupportsConditionInParens', node); + output.depth++; + output.writeNode('condition', node.condition); + output.depth--; + } + + @override + void visitSupportsNegation(SupportsNegation node) { + heading('SupportsNegation', node); + output.depth++; + output.writeNode('condition', node.condition); + output.depth--; + } + + @override + void visitSupportsConjunction(SupportsConjunction node) { + heading('SupportsConjunction', node); + output.depth++; + output.writeNodeList('conditions', node.conditions); + output.depth--; + } + + @override + void visitSupportsDisjunction(SupportsDisjunction node) { + heading('SupportsDisjunction', node); + output.depth++; + output.writeNodeList('conditions', node.conditions); + output.depth--; + } + + @override + void visitViewportDirective(ViewportDirective node) { + heading('ViewportDirective', node); + output.depth++; + super.visitViewportDirective(node); + output.depth--; + } + + @override + void visitPageDirective(PageDirective node) { + heading('PageDirective', node); + output.depth++; + output.writeValue('pseudo page', node._pseudoPage); + super.visitPageDirective(node); + output.depth--; + } + + @override + void visitCharsetDirective(CharsetDirective node) { + heading('Charset Directive', node); + output.writeValue('charset encoding', node.charEncoding); + } + + @override + void visitImportDirective(ImportDirective node) { + heading('ImportDirective', node); + output.depth++; + output.writeValue('import', node.import); + super.visitImportDirective(node); + output.writeNodeList('media', node.mediaQueries); + output.depth--; + } + + @override + void visitContentDirective(ContentDirective node) { + print('ContentDirective not implemented'); + } + + @override + void visitKeyFrameDirective(KeyFrameDirective node) { + heading('KeyFrameDirective', node); + output.depth++; + output.writeValue('keyframe', node.keyFrameName); + output.writeValue('name', node.name); + output.writeNodeList('blocks', node._blocks); + output.depth--; + } + + @override + void visitKeyFrameBlock(KeyFrameBlock node) { + heading('KeyFrameBlock', node); + output.depth++; + super.visitKeyFrameBlock(node); + output.depth--; + } + + @override + void visitFontFaceDirective(FontFaceDirective node) { + // TODO(terry): To Be Implemented + } + + @override + void visitStyletDirective(StyletDirective node) { + heading('StyletDirective', node); + output.writeValue('dartClassName', node.dartClassName); + output.depth++; + output.writeNodeList('rulesets', node.rules); + output.depth--; + } + + @override + void visitNamespaceDirective(NamespaceDirective node) { + heading('NamespaceDirective', node); + output.depth++; + output.writeValue('prefix', node._prefix); + output.writeValue('uri', node._uri); + output.depth--; + } + + @override + void visitVarDefinitionDirective(VarDefinitionDirective node) { + heading('Less variable definition', node); + output.depth++; + visitVarDefinition(node.def); + output.depth--; + } + + @override + void visitMixinRulesetDirective(MixinRulesetDirective node) { + heading('Mixin top-level ${node.name}', node); + output.writeNodeList('parameters', node.definedArgs); + output.depth++; + _visitNodeList(node.rulesets); + output.depth--; + } + + @override + void visitMixinDeclarationDirective(MixinDeclarationDirective node) { + heading('Mixin declaration ${node.name}', node); + output.writeNodeList('parameters', node.definedArgs); + output.depth++; + visitDeclarationGroup(node.declarations); + output.depth--; + } + + /// Added optional newLine for handling @include at top-level vs/ inside of + /// a declaration group. + @override + void visitIncludeDirective(IncludeDirective node) { + heading('IncludeDirective ${node.name}', node); + var flattened = node.args.expand((e) => e).toList(); + output.writeNodeList('parameters', flattened); + } + + @override + void visitIncludeMixinAtDeclaration(IncludeMixinAtDeclaration node) { + heading('IncludeMixinAtDeclaration ${node.include.name}', node); + output.depth++; + visitIncludeDirective(node.include); + output.depth--; + } + + @override + void visitExtendDeclaration(ExtendDeclaration node) { + heading('ExtendDeclaration', node); + output.depth++; + _visitNodeList(node.selectors); + output.depth--; + } + + @override + void visitRuleSet(RuleSet node) { + heading('Ruleset', node); + output.depth++; + super.visitRuleSet(node); + output.depth--; + } + + @override + void visitDeclarationGroup(DeclarationGroup node) { + heading('DeclarationGroup', node); + output.depth++; + output.writeNodeList('declarations', node.declarations); + output.depth--; + } + + @override + void visitMarginGroup(MarginGroup node) { + heading('MarginGroup', node); + output.depth++; + output.writeValue('@directive', node.margin_sym); + output.writeNodeList('declarations', node.declarations); + output.depth--; + } + + @override + void visitDeclaration(Declaration node) { + heading('Declaration', node); + output.depth++; + if (node.isIE7) output.write('IE7 property'); + output.write('property'); + super.visitDeclaration(node); + output.writeNode('expression', node.expression); + if (node.important) { + output.writeValue('!important', 'true'); + } + output.depth--; + } + + @override + void visitVarDefinition(VarDefinition node) { + heading('Var', node); + output.depth++; + output.write('definition'); + super.visitVarDefinition(node); + output.writeNode('expression', node.expression); + output.depth--; + } + + @override + void visitSelectorGroup(SelectorGroup node) { + heading('Selector Group', node); + output.depth++; + output.writeNodeList('selectors', node.selectors); + output.depth--; + } + + @override + void visitSelector(Selector node) { + heading('Selector', node); + output.depth++; + output.writeNodeList( + 'simpleSelectorsSequences', node.simpleSelectorSequences); + output.depth--; + } + + @override + void visitSimpleSelectorSequence(SimpleSelectorSequence node) { + heading('SimpleSelectorSequence', node); + output.depth++; + if (node.isCombinatorNone) { + output.writeValue('combinator', 'NONE'); + } else if (node.isCombinatorDescendant) { + output.writeValue('combinator', 'descendant'); + } else if (node.isCombinatorPlus) { + output.writeValue('combinator', '+'); + } else if (node.isCombinatorGreater) { + output.writeValue('combinator', '>'); + } else if (node.isCombinatorTilde) { + output.writeValue('combinator', '~'); + } else { + output.writeValue('combinator', 'ERROR UNKNOWN'); + } + + super.visitSimpleSelectorSequence(node); + + output.depth--; + } + + @override + void visitNamespaceSelector(NamespaceSelector node) { + heading('Namespace Selector', node); + output.depth++; + + super.visitNamespaceSelector(node); + + visitSimpleSelector(node.nameAsSimpleSelector!); + output.depth--; + } + + @override + void visitElementSelector(ElementSelector node) { + heading('Element Selector', node); + output.depth++; + super.visitElementSelector(node); + output.depth--; + } + + @override + void visitAttributeSelector(AttributeSelector node) { + heading('AttributeSelector', node); + output.depth++; + super.visitAttributeSelector(node); + var tokenStr = node.matchOperatorAsTokenString(); + output.writeValue('operator', '${node.matchOperator()} ($tokenStr)'); + output.writeValue('value', node.valueToString()); + output.depth--; + } + + @override + void visitIdSelector(IdSelector node) { + heading('Id Selector', node); + output.depth++; + super.visitIdSelector(node); + output.depth--; + } + + @override + void visitClassSelector(ClassSelector node) { + heading('Class Selector', node); + output.depth++; + super.visitClassSelector(node); + output.depth--; + } + + @override + void visitPseudoClassSelector(PseudoClassSelector node) { + heading('Pseudo Class Selector', node); + output.depth++; + super.visitPseudoClassSelector(node); + output.depth--; + } + + @override + void visitPseudoElementSelector(PseudoElementSelector node) { + heading('Pseudo Element Selector', node); + output.depth++; + super.visitPseudoElementSelector(node); + output.depth--; + } + + @override + void visitPseudoClassFunctionSelector(PseudoClassFunctionSelector node) { + heading('Pseudo Class Function Selector', node); + output.depth++; + node.argument.visit(this); + super.visitPseudoClassFunctionSelector(node); + output.depth--; + } + + @override + void visitPseudoElementFunctionSelector(PseudoElementFunctionSelector node) { + heading('Pseudo Element Function Selector', node); + output.depth++; + visitSelectorExpression(node.expression); + super.visitPseudoElementFunctionSelector(node); + output.depth--; + } + + @override + void visitSelectorExpression(SelectorExpression node) { + heading('Selector Expression', node); + output.depth++; + output.writeNodeList('expressions', node.expressions); + output.depth--; + } + + @override + void visitNegationSelector(NegationSelector node) { + super.visitNegationSelector(node); + output.depth++; + heading('Negation Selector', node); + output.writeNode('Negation arg', node.negationArg); + output.depth--; + } + + @override + void visitUnicodeRangeTerm(UnicodeRangeTerm node) { + heading('UnicodeRangeTerm', node); + output.depth++; + output.writeValue('1st value', node.first); + output.writeValue('2nd value', node.second); + output.depth--; + } + + @override + void visitLiteralTerm(LiteralTerm node) { + heading('LiteralTerm', node); + output.depth++; + output.writeValue('value', node.text); + output.depth--; + } + + @override + void visitHexColorTerm(HexColorTerm node) { + heading('HexColorTerm', node); + output.depth++; + output.writeValue('hex value', node.text); + output.writeValue('decimal value', node.value); + output.depth--; + } + + @override + void visitNumberTerm(NumberTerm node) { + heading('NumberTerm', node); + output.depth++; + output.writeValue('value', node.text); + output.depth--; + } + + @override + void visitUnitTerm(UnitTerm node) { + output.depth++; + output.writeValue('value', node.text); + output.writeValue('unit', node.unitToString()); + output.depth--; + } + + @override + void visitLengthTerm(LengthTerm node) { + heading('LengthTerm', node); + super.visitLengthTerm(node); + } + + @override + void visitPercentageTerm(PercentageTerm node) { + heading('PercentageTerm', node); + output.depth++; + super.visitPercentageTerm(node); + output.depth--; + } + + @override + void visitEmTerm(EmTerm node) { + heading('EmTerm', node); + output.depth++; + super.visitEmTerm(node); + output.depth--; + } + + @override + void visitExTerm(ExTerm node) { + heading('ExTerm', node); + output.depth++; + super.visitExTerm(node); + output.depth--; + } + + @override + void visitAngleTerm(AngleTerm node) { + heading('AngleTerm', node); + super.visitAngleTerm(node); + } + + @override + void visitTimeTerm(TimeTerm node) { + heading('TimeTerm', node); + super.visitTimeTerm(node); + } + + @override + void visitFreqTerm(FreqTerm node) { + heading('FreqTerm', node); + super.visitFreqTerm(node); + } + + @override + void visitFractionTerm(FractionTerm node) { + heading('FractionTerm', node); + output.depth++; + super.visitFractionTerm(node); + output.depth--; + } + + @override + void visitUriTerm(UriTerm node) { + heading('UriTerm', node); + output.depth++; + super.visitUriTerm(node); + output.depth--; + } + + @override + void visitFunctionTerm(FunctionTerm node) { + heading('FunctionTerm', node); + output.depth++; + super.visitFunctionTerm(node); + output.depth--; + } + + @override + void visitGroupTerm(GroupTerm node) { + heading('GroupTerm', node); + output.depth++; + output.writeNodeList('grouped terms', node._terms); + output.depth--; + } + + @override + void visitItemTerm(ItemTerm node) { + heading('ItemTerm', node); + super.visitItemTerm(node); + } + + @override + void visitIE8Term(IE8Term node) { + heading('IE8Term', node); + visitLiteralTerm(node); + } + + @override + void visitOperatorSlash(OperatorSlash node) { + heading('OperatorSlash', node); + } + + @override + void visitOperatorComma(OperatorComma node) { + heading('OperatorComma', node); + } + + @override + void visitOperatorPlus(OperatorPlus node) { + heading('OperatorPlus', node); + } + + @override + void visitOperatorMinus(OperatorMinus node) { + heading('OperatorMinus', node); + } + + @override + void visitVarUsage(VarUsage node) { + heading('Var', node); + output.depth++; + output.write('usage ${node.name}'); + output.writeNodeList('default values', node.defaultValues); + output.depth--; + } + + @override + void visitExpressions(Expressions node) { + heading('Expressions', node); + output.depth++; + output.writeNodeList('expressions', node.expressions); + output.depth--; + } + + @override + void visitBinaryExpression(BinaryExpression node) { + heading('BinaryExpression', node); + // TODO(terry): TBD + } + + @override + void visitUnaryExpression(UnaryExpression node) { + heading('UnaryExpression', node); + // TODO(terry): TBD + } + + @override + void visitIdentifier(Identifier node) { + heading('Identifier(${output.toValue(node.name)})', node); + } + + @override + void visitWildcard(Wildcard node) { + heading('Wildcard(*)', node); + } + + @override + void visitDartStyleExpression(DartStyleExpression node) { + heading('DartStyleExpression', node); + } + + @override + void visitFontExpression(FontExpression node) { + heading('Dart Style FontExpression', node); + } + + @override + void visitBoxExpression(BoxExpression node) { + heading('Dart Style BoxExpression', node); + } + + @override + void visitMarginExpression(MarginExpression node) { + heading('Dart Style MarginExpression', node); + } + + @override + void visitBorderExpression(BorderExpression node) { + heading('Dart Style BorderExpression', node); + } + + @override + void visitHeightExpression(HeightExpression node) { + heading('Dart Style HeightExpression', node); + } + + @override + void visitPaddingExpression(PaddingExpression node) { + heading('Dart Style PaddingExpression', node); + } + + @override + void visitWidthExpression(WidthExpression node) { + heading('Dart Style WidthExpression', node); + } +} diff --git a/pkgs/csslib/lib/src/validate.dart b/pkgs/csslib/lib/src/validate.dart new file mode 100644 index 000000000..608c09387 --- /dev/null +++ b/pkgs/csslib/lib/src/validate.dart @@ -0,0 +1,121 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:source_span/source_span.dart'; + +import '../visitor.dart'; + +/// Can be thrown on any Css runtime problem includes source location. +class CssSelectorException extends SourceSpanException { + CssSelectorException(super.message, [super.span]); +} + +List classes = []; +List ids = []; + +class Validate { + static int _classNameCheck(SimpleSelectorSequence selector, int matches) { + if (selector.isCombinatorDescendant || + (selector.isCombinatorNone && matches == 0)) { + if (matches < 0) { + var tooMany = selector.simpleSelector.toString(); + throw CssSelectorException( + 'Can not mix Id selector with class selector(s). Id ' + 'selector must be singleton too many starting at $tooMany'); + } + + return matches + 1; + } else { + var error = selector.toString(); + throw CssSelectorException( + 'Selectors can not have combinators (>, +, or ~) before $error'); + } + } + + static int _elementIdCheck(SimpleSelectorSequence selector, int matches) { + if (selector.isCombinatorNone && matches == 0) { + // Perfect just one element id returns matches of -1. + return -1; + } else if (selector.isCombinatorDescendant) { + var tooMany = selector.simpleSelector.toString(); + throw CssSelectorException( + 'Use of Id selector must be singleton starting at $tooMany'); + } else { + var error = selector.simpleSelector.toString(); + throw CssSelectorException( + 'Selectors can not have combinators (>, +, or ~) before $error'); + } + } + + // Validate the @{css expression} only .class and #elementId are valid inside + // of @{...}. + static void template(List selectors) { + var found = false; // signal if a selector is matched. + var matches = 0; // < 0 IdSelectors, > 0 ClassSelector + + // At most one selector group (any number of simple selector sequences). + assert(selectors.length <= 1); + + for (final sels in selectors) { + for (final selector in sels.simpleSelectorSequences) { + found = false; + var simpleSelector = selector.simpleSelector; + if (simpleSelector is ClassSelector) { + // Any class name starting with an underscore is a private class name + // that doesn't have to match the world of known classes. + if (!simpleSelector.name.startsWith('_')) { + // TODO(terry): For now iterate through all classes look for faster + // mechanism hash map, etc. + for (final className in classes) { + if (selector.simpleSelector.name == className) { + matches = _classNameCheck(selector, matches); + found = true; // .class found. + break; + } + for (final className2 in classes) { + print(className2); + } + } + } else { + // Don't check any class name that is prefixed with an underscore. + // However, signal as found and bump up matches; it's a valid class + // name. + matches = _classNameCheck(selector, matches); + found = true; // ._class are always okay. + } + } else if (simpleSelector is IdSelector) { + // Any element id starting with an underscore is a private element id + // that doesn't have to match the world of known element ids. + if (!simpleSelector.name.startsWith('_')) { + for (final id in ids) { + if (simpleSelector.name == id) { + matches = _elementIdCheck(selector, matches); + found = true; // #id found. + break; + } + } + } else { + // Don't check any element ID that is prefixed with an underscore. + // Signal as found and bump up matches; it's a valid element ID. + matches = _elementIdCheck(selector, matches); + found = true; // #_id are always okay + } + } else { + var badSelector = simpleSelector.toString(); + throw CssSelectorException('Invalid template selector $badSelector'); + } + + if (!found) { + var unknownName = simpleSelector.toString(); + throw CssSelectorException('Unknown selector name $unknownName'); + } + } + } + + // Every selector must match. + var selector = selectors[0]; + assert((matches >= 0 ? matches : -matches) == + selector.simpleSelectorSequences.length); + } +} diff --git a/pkgs/csslib/lib/visitor.dart b/pkgs/csslib/lib/visitor.dart new file mode 100644 index 000000000..4cfd9f048 --- /dev/null +++ b/pkgs/csslib/lib/visitor.dart @@ -0,0 +1,596 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:source_span/source_span.dart'; +import 'parser.dart'; + +part 'src/css_printer.dart'; +part 'src/tree.dart'; +part 'src/tree_base.dart'; +part 'src/tree_printer.dart'; + +abstract class VisitorBase { + dynamic visitCalcTerm(CalcTerm node); + dynamic visitCssComment(CssComment node); + dynamic visitCommentDefinition(CommentDefinition node); + dynamic visitStyleSheet(StyleSheet node); + dynamic visitNoOp(NoOp node); + dynamic visitTopLevelProduction(TopLevelProduction node); + dynamic visitDirective(Directive node); + dynamic visitDocumentDirective(DocumentDirective node); + dynamic visitSupportsDirective(SupportsDirective node); + dynamic visitSupportsConditionInParens(SupportsConditionInParens node); + dynamic visitSupportsNegation(SupportsNegation node); + dynamic visitSupportsConjunction(SupportsConjunction node); + dynamic visitSupportsDisjunction(SupportsDisjunction node); + dynamic visitViewportDirective(ViewportDirective node); + dynamic visitMediaExpression(MediaExpression node); + dynamic visitMediaQuery(MediaQuery node); + dynamic visitMediaDirective(MediaDirective node); + dynamic visitHostDirective(HostDirective node); + dynamic visitPageDirective(PageDirective node); + dynamic visitCharsetDirective(CharsetDirective node); + dynamic visitImportDirective(ImportDirective node); + dynamic visitKeyFrameDirective(KeyFrameDirective node); + dynamic visitKeyFrameBlock(KeyFrameBlock node); + dynamic visitFontFaceDirective(FontFaceDirective node); + dynamic visitStyletDirective(StyletDirective node); + dynamic visitNamespaceDirective(NamespaceDirective node); + dynamic visitVarDefinitionDirective(VarDefinitionDirective node); + dynamic visitMixinDefinition(MixinDefinition node); + dynamic visitMixinRulesetDirective(MixinRulesetDirective node); + dynamic visitMixinDeclarationDirective(MixinDeclarationDirective node); + dynamic visitIncludeDirective(IncludeDirective node); + dynamic visitContentDirective(ContentDirective node); + + dynamic visitRuleSet(RuleSet node); + dynamic visitDeclarationGroup(DeclarationGroup node); + dynamic visitMarginGroup(MarginGroup node); + dynamic visitDeclaration(Declaration node); + dynamic visitVarDefinition(VarDefinition node); + dynamic visitIncludeMixinAtDeclaration(IncludeMixinAtDeclaration node); + dynamic visitExtendDeclaration(ExtendDeclaration node); + dynamic visitSelectorGroup(SelectorGroup node); + dynamic visitSelector(Selector node); + dynamic visitSimpleSelectorSequence(SimpleSelectorSequence node); + dynamic visitSimpleSelector(SimpleSelector node); + dynamic visitElementSelector(ElementSelector node); + dynamic visitNamespaceSelector(NamespaceSelector node); + dynamic visitAttributeSelector(AttributeSelector node); + dynamic visitIdSelector(IdSelector node); + dynamic visitClassSelector(ClassSelector node); + dynamic visitPseudoClassSelector(PseudoClassSelector node); + dynamic visitPseudoElementSelector(PseudoElementSelector node); + dynamic visitPseudoClassFunctionSelector(PseudoClassFunctionSelector node); + dynamic visitPseudoElementFunctionSelector( + PseudoElementFunctionSelector node); + dynamic visitNegationSelector(NegationSelector node); + dynamic visitSelectorExpression(SelectorExpression node); + + dynamic visitUnicodeRangeTerm(UnicodeRangeTerm node); + dynamic visitLiteralTerm(LiteralTerm node); + dynamic visitHexColorTerm(HexColorTerm node); + dynamic visitNumberTerm(NumberTerm node); + dynamic visitUnitTerm(UnitTerm node); + dynamic visitLengthTerm(LengthTerm node); + dynamic visitPercentageTerm(PercentageTerm node); + dynamic visitEmTerm(EmTerm node); + dynamic visitExTerm(ExTerm node); + dynamic visitAngleTerm(AngleTerm node); + dynamic visitTimeTerm(TimeTerm node); + dynamic visitFreqTerm(FreqTerm node); + dynamic visitFractionTerm(FractionTerm node); + dynamic visitUriTerm(UriTerm node); + dynamic visitResolutionTerm(ResolutionTerm node); + dynamic visitChTerm(ChTerm node); + dynamic visitRemTerm(RemTerm node); + dynamic visitViewportTerm(ViewportTerm node); + dynamic visitLineHeightTerm(LineHeightTerm node); + dynamic visitFunctionTerm(FunctionTerm node); + dynamic visitGroupTerm(GroupTerm node); + dynamic visitItemTerm(ItemTerm node); + dynamic visitIE8Term(IE8Term node); + dynamic visitOperatorSlash(OperatorSlash node); + dynamic visitOperatorComma(OperatorComma node); + dynamic visitOperatorPlus(OperatorPlus node); + dynamic visitOperatorMinus(OperatorMinus node); + dynamic visitVarUsage(VarUsage node); + + dynamic visitExpressions(Expressions node); + dynamic visitBinaryExpression(BinaryExpression node); + dynamic visitUnaryExpression(UnaryExpression node); + + dynamic visitIdentifier(Identifier node); + dynamic visitWildcard(Wildcard node); + dynamic visitThisOperator(ThisOperator node); + dynamic visitNegation(Negation node); + + dynamic visitDartStyleExpression(DartStyleExpression node); + dynamic visitFontExpression(FontExpression node); + dynamic visitBoxExpression(BoxExpression node); + dynamic visitMarginExpression(MarginExpression node); + dynamic visitBorderExpression(BorderExpression node); + dynamic visitHeightExpression(HeightExpression node); + dynamic visitPaddingExpression(PaddingExpression node); + dynamic visitWidthExpression(WidthExpression node); +} + +/// Base vistor class for the style sheet AST. +class Visitor implements VisitorBase { + /// Helper function to walk a list of nodes. + void _visitNodeList(List list) { + // Don't use iterable otherwise the list can't grow while using Visitor. + // It certainly can't have items deleted before the index being iterated + // but items could be added after the index. + for (var index = 0; index < list.length; index++) { + list[index].visit(this); + } + } + + dynamic visitTree(StyleSheet tree) => visitStyleSheet(tree); + + @override + dynamic visitStyleSheet(StyleSheet ss) { + _visitNodeList(ss.topLevels); + } + + @override + dynamic visitNoOp(NoOp node) {} + + @override + dynamic visitTopLevelProduction(TopLevelProduction node) {} + + @override + dynamic visitDirective(Directive node) {} + + @override + dynamic visitCalcTerm(CalcTerm node) { + visitLiteralTerm(node); + visitLiteralTerm(node.expr); + } + + @override + dynamic visitCssComment(CssComment node) {} + + @override + dynamic visitCommentDefinition(CommentDefinition node) {} + + @override + dynamic visitMediaExpression(MediaExpression node) { + visitExpressions(node.exprs); + } + + @override + dynamic visitMediaQuery(MediaQuery node) { + for (var mediaExpr in node.expressions) { + visitMediaExpression(mediaExpr); + } + } + + @override + dynamic visitDocumentDirective(DocumentDirective node) { + _visitNodeList(node.functions); + _visitNodeList(node.groupRuleBody); + } + + @override + dynamic visitSupportsDirective(SupportsDirective node) { + node.condition!.visit(this); + _visitNodeList(node.groupRuleBody); + } + + @override + dynamic visitSupportsConditionInParens(SupportsConditionInParens node) { + node.condition!.visit(this); + } + + @override + dynamic visitSupportsNegation(SupportsNegation node) { + node.condition.visit(this); + } + + @override + dynamic visitSupportsConjunction(SupportsConjunction node) { + _visitNodeList(node.conditions); + } + + @override + dynamic visitSupportsDisjunction(SupportsDisjunction node) { + _visitNodeList(node.conditions); + } + + @override + dynamic visitViewportDirective(ViewportDirective node) { + node.declarations.visit(this); + } + + @override + dynamic visitMediaDirective(MediaDirective node) { + _visitNodeList(node.mediaQueries); + _visitNodeList(node.rules); + } + + @override + dynamic visitHostDirective(HostDirective node) { + _visitNodeList(node.rules); + } + + @override + dynamic visitPageDirective(PageDirective node) { + for (var declGroup in node._declsMargin) { + if (declGroup is MarginGroup) { + visitMarginGroup(declGroup); + } else { + visitDeclarationGroup(declGroup); + } + } + } + + @override + dynamic visitCharsetDirective(CharsetDirective node) {} + + @override + dynamic visitImportDirective(ImportDirective node) { + for (var mediaQuery in node.mediaQueries) { + visitMediaQuery(mediaQuery); + } + } + + @override + dynamic visitKeyFrameDirective(KeyFrameDirective node) { + visitIdentifier(node.name!); + _visitNodeList(node._blocks); + } + + @override + dynamic visitKeyFrameBlock(KeyFrameBlock node) { + visitExpressions(node._blockSelectors); + visitDeclarationGroup(node._declarations); + } + + @override + dynamic visitFontFaceDirective(FontFaceDirective node) { + visitDeclarationGroup(node._declarations); + } + + @override + dynamic visitStyletDirective(StyletDirective node) { + _visitNodeList(node.rules); + } + + @override + dynamic visitNamespaceDirective(NamespaceDirective node) {} + + @override + dynamic visitVarDefinitionDirective(VarDefinitionDirective node) { + visitVarDefinition(node.def); + } + + @override + dynamic visitMixinRulesetDirective(MixinRulesetDirective node) { + _visitNodeList(node.rulesets); + } + + @override + dynamic visitMixinDefinition(MixinDefinition node) {} + + @override + dynamic visitMixinDeclarationDirective(MixinDeclarationDirective node) { + visitDeclarationGroup(node.declarations); + } + + @override + dynamic visitIncludeDirective(IncludeDirective node) { + for (var index = 0; index < node.args.length; index++) { + var param = node.args[index]; + _visitNodeList(param); + } + } + + @override + dynamic visitContentDirective(ContentDirective node) { + // TODO(terry): TBD + } + + @override + dynamic visitRuleSet(RuleSet node) { + visitSelectorGroup(node.selectorGroup!); + visitDeclarationGroup(node.declarationGroup); + } + + @override + dynamic visitDeclarationGroup(DeclarationGroup node) { + _visitNodeList(node.declarations); + } + + @override + dynamic visitMarginGroup(MarginGroup node) => visitDeclarationGroup(node); + + @override + dynamic visitDeclaration(Declaration node) { + visitIdentifier(node._property!); + if (node.expression != null) node.expression!.visit(this); + } + + @override + dynamic visitVarDefinition(VarDefinition node) { + visitIdentifier(node._property!); + if (node.expression != null) node.expression!.visit(this); + } + + @override + dynamic visitIncludeMixinAtDeclaration(IncludeMixinAtDeclaration node) { + visitIncludeDirective(node.include); + } + + @override + dynamic visitExtendDeclaration(ExtendDeclaration node) { + _visitNodeList(node.selectors); + } + + @override + dynamic visitSelectorGroup(SelectorGroup node) { + _visitNodeList(node.selectors); + } + + @override + dynamic visitSelector(Selector node) { + _visitNodeList(node.simpleSelectorSequences); + } + + @override + dynamic visitSimpleSelectorSequence(SimpleSelectorSequence node) { + node.simpleSelector.visit(this); + } + + @override + dynamic visitSimpleSelector(SimpleSelector node) => + (node._name as TreeNode).visit(this); + + @override + dynamic visitNamespaceSelector(NamespaceSelector node) { + if (node._namespace != null) (node._namespace as TreeNode).visit(this); + if (node.nameAsSimpleSelector != null) { + node.nameAsSimpleSelector!.visit(this); + } + } + + @override + dynamic visitElementSelector(ElementSelector node) => + visitSimpleSelector(node); + + @override + dynamic visitAttributeSelector(AttributeSelector node) { + visitSimpleSelector(node); + } + + @override + dynamic visitIdSelector(IdSelector node) => visitSimpleSelector(node); + + @override + dynamic visitClassSelector(ClassSelector node) => visitSimpleSelector(node); + + @override + dynamic visitPseudoClassSelector(PseudoClassSelector node) => + visitSimpleSelector(node); + + @override + dynamic visitPseudoElementSelector(PseudoElementSelector node) => + visitSimpleSelector(node); + + @override + dynamic visitPseudoClassFunctionSelector(PseudoClassFunctionSelector node) => + visitSimpleSelector(node); + + @override + dynamic visitPseudoElementFunctionSelector( + PseudoElementFunctionSelector node) => + visitSimpleSelector(node); + + @override + dynamic visitNegationSelector(NegationSelector node) => + visitSimpleSelector(node); + + @override + dynamic visitSelectorExpression(SelectorExpression node) { + _visitNodeList(node.expressions); + } + + @override + dynamic visitUnicodeRangeTerm(UnicodeRangeTerm node) {} + + @override + dynamic visitLiteralTerm(LiteralTerm node) {} + + @override + dynamic visitHexColorTerm(HexColorTerm node) {} + + @override + dynamic visitNumberTerm(NumberTerm node) {} + + @override + dynamic visitUnitTerm(UnitTerm node) {} + + @override + dynamic visitLengthTerm(LengthTerm node) { + visitUnitTerm(node); + } + + @override + dynamic visitPercentageTerm(PercentageTerm node) { + visitLiteralTerm(node); + } + + @override + dynamic visitEmTerm(EmTerm node) { + visitLiteralTerm(node); + } + + @override + dynamic visitExTerm(ExTerm node) { + visitLiteralTerm(node); + } + + @override + dynamic visitAngleTerm(AngleTerm node) { + visitUnitTerm(node); + } + + @override + dynamic visitTimeTerm(TimeTerm node) { + visitUnitTerm(node); + } + + @override + dynamic visitFreqTerm(FreqTerm node) { + visitUnitTerm(node); + } + + @override + dynamic visitFractionTerm(FractionTerm node) { + visitLiteralTerm(node); + } + + @override + dynamic visitUriTerm(UriTerm node) { + visitLiteralTerm(node); + } + + @override + dynamic visitResolutionTerm(ResolutionTerm node) { + visitUnitTerm(node); + } + + @override + dynamic visitChTerm(ChTerm node) { + visitUnitTerm(node); + } + + @override + dynamic visitRemTerm(RemTerm node) { + visitUnitTerm(node); + } + + @override + dynamic visitViewportTerm(ViewportTerm node) { + visitUnitTerm(node); + } + + @override + dynamic visitLineHeightTerm(LineHeightTerm node) { + visitUnitTerm(node); + } + + @override + dynamic visitFunctionTerm(FunctionTerm node) { + visitLiteralTerm(node); + visitExpressions(node._params); + } + + @override + dynamic visitGroupTerm(GroupTerm node) { + for (var term in node._terms) { + term.visit(this); + } + } + + @override + dynamic visitItemTerm(ItemTerm node) { + visitNumberTerm(node); + } + + @override + dynamic visitIE8Term(IE8Term node) {} + + @override + dynamic visitOperatorSlash(OperatorSlash node) {} + + @override + dynamic visitOperatorComma(OperatorComma node) {} + + @override + dynamic visitOperatorPlus(OperatorPlus node) {} + + @override + dynamic visitOperatorMinus(OperatorMinus node) {} + + @override + dynamic visitVarUsage(VarUsage node) { + _visitNodeList(node.defaultValues); + } + + @override + dynamic visitExpressions(Expressions node) { + _visitNodeList(node.expressions); + } + + @override + dynamic visitBinaryExpression(BinaryExpression node) { + // TODO(terry): TBD + throw UnimplementedError(); + } + + @override + dynamic visitUnaryExpression(UnaryExpression node) { + // TODO(terry): TBD + throw UnimplementedError(); + } + + @override + dynamic visitIdentifier(Identifier node) {} + + @override + dynamic visitWildcard(Wildcard node) {} + + @override + dynamic visitThisOperator(ThisOperator node) {} + + @override + dynamic visitNegation(Negation node) {} + + @override + dynamic visitDartStyleExpression(DartStyleExpression node) {} + + @override + dynamic visitFontExpression(FontExpression node) { + // TODO(terry): TBD + throw UnimplementedError(); + } + + @override + dynamic visitBoxExpression(BoxExpression node) { + // TODO(terry): TBD + throw UnimplementedError(); + } + + @override + dynamic visitMarginExpression(MarginExpression node) { + // TODO(terry): TBD + throw UnimplementedError(); + } + + @override + dynamic visitBorderExpression(BorderExpression node) { + // TODO(terry): TBD + throw UnimplementedError(); + } + + @override + dynamic visitHeightExpression(HeightExpression node) { + // TODO(terry): TB + throw UnimplementedError(); + } + + @override + dynamic visitPaddingExpression(PaddingExpression node) { + // TODO(terry): TBD + throw UnimplementedError(); + } + + @override + dynamic visitWidthExpression(WidthExpression node) { + // TODO(terry): TBD + throw UnimplementedError(); + } +} diff --git a/pkgs/csslib/pubspec.yaml b/pkgs/csslib/pubspec.yaml new file mode 100644 index 000000000..7f7e1fa85 --- /dev/null +++ b/pkgs/csslib/pubspec.yaml @@ -0,0 +1,19 @@ +name: csslib +version: 1.0.2 +description: A library for parsing and analyzing CSS (Cascading Style Sheets). +repository: https://github.com/dart-lang/tools/tree/main/pkgs/csslib + +topics: + - css + +environment: + sdk: ^3.1.0 + +dependencies: + source_span: ^1.8.0 + +dev_dependencies: + dart_flutter_team_lints: ^3.0.0 + path: ^1.8.0 + term_glyph: ^1.2.0 + test: ^1.16.0 diff --git a/pkgs/csslib/test/big_1_test.dart b/pkgs/csslib/test/big_1_test.dart new file mode 100644 index 000000000..6db79800d --- /dev/null +++ b/pkgs/csslib/test/big_1_test.dart @@ -0,0 +1,1165 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:csslib/src/messages.dart'; +import 'package:test/test.dart'; + +import 'testing.dart'; + +void compilePolyfillAndValidate(String input, String generated) { + var errors = []; + var stylesheet = polyFillCompileCss(input, errors: errors, opts: options); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void bigTest() { + var input = r''' +/******************************************************************** + * Kennedy colors + ********************************************************************/ +@kennedy-red: #dd4b39; +@kennedy-blue: #4d90fe; +@kennedy-green: #3d9400; + +/******************************************************************** + * link colors + ********************************************************************/ +@link-color-1: #1155cc; +@link-color-2: #666666; + +/******************************************************************** + * text and header colors + ********************************************************************/ +@text-color-emphasized-1: #222222; +@text-color-emphasized-2: #333333; +@text-color-regular: #666666; +@text-color-deemphasized-1: #777777; +@text-color-deemphasized-2: #999999; + +/******************************************************************** + * icon colors + ********************************************************************/ +@zippy-icon-color: #b2b2b2; +@zippy-icon-color-hover: #666666; + +@mutate-icon-color: #b2b2b2; + +@silhouette-color: #8bb7fe; + +/******************************************************************** + * Panel and Card colors + ********************************************************************/ +@panel-header-color: #f7f7f7; +@panel-body-color: #ffffff; +@panel-border-color: #dcdcdc; + +/******************************************************************** + * App area colors + ********************************************************************/ + @apparea-background-color: #f2f2f2; + +/******************************************************************** + * Table colors + ********************************************************************/ +@table-row-numbers: #666666; +@table-row-item-links: #1155cc; +@table-row-item: #666666; + +/* Borders */ +@table-border-color: #dcdcdc; +@table-header-border-color: #dcdcdc; +@table-row-data-border-color: #eaeaea; + +/* General column - USED: We are not currently spec'ing different colors + * for the currently sorted/unsorted on column. + */ +@table-header-label-color: #666666; +@table-header-background-color: #f8f8f8; +@table-column-background-color: #ffffff; + + +/* Sorted column - UNUSED: We are not currently spec'ing different colors + * for the currently sorted/unsorted on column. + */ +@table-sorted-header-label-color: #666666; +@table-sorted-header-background-color: #e6e6e6; +@table-sorted-column-background-color: #f8f8f8; + +/* Unsorted column - UNUSED: We are not currently spec'ing different colors + * for the currently sorted/unsorted on column. + */ +@table-unsorted-header-label-color: #999999; +@table-unsorted-header-background-color: #f8f8f8; +@table-unsorted-column-background-color: #ffffff; + +@acux-border-color-1: #e5e5e5; +@acux-border-color-2: #3b7bea; +@acux-link-color: #3b7bea; +@acux-shell-background-color: #f2f2f2; + +/******************************************************************** + * Tooltip and popup colors + ********************************************************************/ +@tooltip-border-color: #333; +@tooltip-color: #fff; +@popup-border-color: #fff; + +/* Border radii */ +@button-radius: 2px; + +@mixin button-gradient(@from, @to) { + background-color: @from; + background-image: -webkit-linear-gradient(top, @from, @to); + background-image: linear-gradient(top, @from, @to); +} + +@mixin button-transition(@property, @time) { + -webkit-transition: @property @time; + transition: @property @time; +} + +@mixin text-not-selectable() { + -webkit-user-select: none; + user-select: none; +} + +/* + * Buttons and their states + */ +@mixin btn-base { + display: inline-block; + min-width: 62px; + text-align: center; + font-size: 11px; + font-weight: bold; + height: 28px; + padding: 0 8px; + line-height: 27px; + border-radius: @button-radius; + cursor: default; + + color: #444; + border: 1px solid rgba(0,0,0,0.1); + @include button-transition(all, 0.218s); + @include button-gradient(#f5f5f5, #f1f1f1); + + &:hover { + border: 1px solid #C6C6C6; + color: #222; + box-shadow: 0px 1px 1px rgba(0,0,0,0.1); + @include button-transition(all, 0s); + @include button-gradient(#f8f8f8, #f1f1f1); + } + + &:active { + border: 1px solid #C6C6C6; + color: #666; + box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); + @include button-gradient(#f6f6f6, #f1f1f1); + } + + &:focus { + outline: none; + border: 1px solid #4D90FE; + z-index: 4 !important; + } + + &.selected, &.popup-open { + border: 1px solid #CCC; + color: #666; + box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); + @include button-gradient(#EEEEEE, #E0E0E0); + } + + &.disabled, &.disabled:hover, &.disabled:active, + &[disabled], &[disabled]:hover, &[disabled]:active { + background: none; + color: #b8b8b8; + border: 1px solid rgba(0,0,0,0.05); + cursor: default; + pointer-events: none; + } + + &.flat { + background: none; + border-color: transparent; + padding: 0; + box-shadow: none; + } + + &.invalid { + outline: none; + border: 1px solid @kennedy-red; + box-shadow: inset 0px 1px 2px rgba(0,0,0,0.3); + } +} + +.btn-container { + padding: 10px; +} + +.btn { + @include btn-base; +} + +.btn-small { + /* TODO(prsd): Implement using a mix-in. */ + min-width: 30px; +} + +.btn-left { + @include btn-base; + border-radius: @button-radius 0 0 @button-radius; + margin-right: 0; + padding: 0; + min-width: 30px; +} + +.btn-right { + @include btn-base; + border-radius: 0 @button-radius @button-radius 0; + border-left: none; + margin-left: 0; + padding: 0; + min-width: 30px; +} + +.btn + .btn { + margin-left: 5px; +} + +/* Primary Button and it's states */ +.btn-primary { + color: #FFF !important; + width: 94px; + border-color: #3079ed; + @include button-gradient(#4d90fe, #4787ed); + + &:hover, &:active { + border-color: #2f5bb7; + @include button-gradient(#4d90fe, #357ae8); + } + + &:focus { + border-color: #4D90FE; + box-shadow:inset 0 0 0 1px rgba(255,255,255,0.5); + } + + &:focus:hover { + box-shadow:inset 0 0 0 1px #fff, 0px 1px 1px rgba(0,0,0,0.1); + } + + &.disabled, &.disabled:hover, &.disabled:active, + &[disabled], &[disabled]:hover, &[disabled]:active { + border-color:#3079ed; + background-color: #4d90fe; + opacity: 0.7; + } +} + +/* Checkbox displayed as a toggled button + * Invisible checkbox followed by a label with 'for' set to checkbox */ +input[type="checkbox"].toggle-button { + display: none; + + & + label { + @extend .btn; + } + + &:checked + label, + & + label.popup-open { + border: 1px solid #CCC; + color: #666; + box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); + @include button-gradient(#EEEEEE, #E0E0E0); + } +} + +.txt-input { + display:inline-block; + *display:inline; + *zoom:1; + padding:4px 12px; + margin-bottom:0; + font-size:14px; + line-height:20px; + vertical-align:middle; + color:#333333; + border-color:#e6e6e6 #e6e6e6 #bfbfbf; + border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border:1px solid #cccccc; + *border:0; + border-bottom-color:#b3b3b3; + -webkit-border-radius:4px; + -moz-border-radius:4px; + border-radius:4px; + *margin-left:.3em; + -webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px + rgba(0,0,0,.05); + -moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); +} + +input[type="text"], input:not([type]), .txt-input { + height: 29px; + background-color: white; + padding: 4px 0 4px 8px; + color: 333; + border: 1px solid #d9d9d9; + border-top: 1px solid #c0c0c0; + display: inline-block; + vertical-align: top; + box-sizing: border-box; + border-radius: 1px; + + &:hover { + border: 1px solid #b9b9b9; + border-top: 1px solid #a0a0a0; + box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); + } + + &:focus { + outline: none; + border: 1px solid @kennedy-blue; + box-shadow: inset 0px 1px 2px rgba(0,0,0,0.3); + } + + &.disabled, &.disabled:hover, &.disabled:active, &:disabled { + background: #fff; + border: 1px solid #f3f3f3; + border: 1px solid rgba(0,0,0,0.05); + color: #b8b8b8; + cursor: default; + pointer-events: none; + } + + &.invalid, &:focus:invalid, &:required:invalid { + outline: none; + border: 1px solid @kennedy-red; + box-shadow: inset 0px 1px 2px rgba(0,0,0,0.3); + } +} + +/* Text area */ +textarea { + @extend .txt-input; + height: 3em; +} + +/* Hide the spin button in datepickers */ +input[type="date"]::-webkit-inner-spin-button, +input[type="datetime"]::-webkit-inner-spin-button, +input[type="datetime-local"]::-webkit-inner-spin-button, +input[type="month"]::-webkit-inner-spin-button, +input[type="time"]::-webkit-inner-spin-button, +input[type="week"]::-webkit-inner-spin-button { + display: none; +} + + +/* + * Selects & Dropdowns + */ +.dropdown-menu, +.popup { + width: auto; + padding: 0; + margin: 0 0 0 1px; + background: white; + text-align: left; + z-index: 1000; + outline: 1px solid rgba(0,0,0,0.2); + white-space: nowrap; + list-style: none; + box-shadow: 0px 2px 4px rgba(0,0,0,0.2); + @include button-transition(opacity, 0.218s); +} + +.popup { + padding: 0 0 6px; +} +.dropdown-menu, +.popup { + pointer-events: all; +} + +.popup ul { + margin: 0; + padding: 0; +} +.popup li { + list-style-type: none; + padding: 5px 10px; + cursor: default; +} +.popup .header { + padding: 5px 10px; +} + + /* existing styles defined here */ +.popup .divider, +.dropdown-menu .divider { + width:100%; + height:1px; + padding: 0; + overflow:hidden; + background-color:#c0c0c0; + border-bottom:1px solid @popup-border-color; +} + +.dropdown-menu { + max-height: 600px; + overflow-x: hidden; + overflow-y: auto; +} +.popup { + overflow: hidden; +} + +.dropdown-menuitem, +.dropdown-menu > li { + display: block; + padding: 6px 44px 6px 16px; + color: #666; + font-size:13px; + font-weight: normal; + cursor: default; + margin: 0; + text-decoration: none; + @include text-not-selectable(); + + &.disabled { + color: #CCC; + background-color: #FFF; + } + + &:hover, &.selected { + color: #222; + background-color: #F1F1F1; + } +} + +.dropdown-menuheader { + padding: 6px 44px 6px 16px; + color: #666; + font-size:11px; + font-weight: bold; + cursor: default; + margin: 0; + text-decoration: none; + background-color: #F1F1F1; + @include text-not-selectable(); +} + +li.dropdown-menudivider { + width:100%; + height:1px; + padding: 0; + overflow:hidden; + background-color:#D0D0D0; + border-bottom:1px solid #ffffff; +} + +.btn-container { + padding: 10px; +} + +/* + * Modal dialogs + */ + +.modal-frame { + position: relative; + background-color: white; + outline: 1px solid rgba(0, 0, 0, 0.2); + padding: 30px 42px; + min-width: 480px; + z-index: 9000; + pointer-events: auto; + box-shadow: 0 4px 16px 0 rgba(0,0,0,0.2); + + @include button-transition(all, 0.218s); + + &.medium { + padding: 28px 32px; + min-width: 280px; + } + + &.small { + padding: 16px 20px; + } + +} + +.modal-backdrop { + background-color: rgba(0,0,0,0.1); + position: fixed; + height: 100%; + width: 100%; + left: 0; + right: 0; + top: 0; + bottom: 0; + z-index: 99; + margin: 0; + + display: none; + opacity: 0; + @include button-transition(all, 0.218s); + + &.visible { + display: -webkit-flex; + display: flex; + -webkit-align-items: center; + align-items: center; + -webkit-justify-content: space-around; + justify-content: space-around; + opacity: 1; + } +} + +/* + * Scrollbars + */ + +::-webkit-scrollbar { + width: 10px; + height: 10px; + background: white; +} + +::-webkit-scrollbar-button { + height: 0px; + width: 0px; + + &:start:decrement, + &:end:increment { + display: block; + } + + &:vertical:start:increment, + &:vertical:end:decrement { + display: none; + } +} + +::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, .2); + background-clip: padding-box; + border: solid transparent; + border-width: 1px 1px 1px 2px; + min-height: 28px; + padding: 100px 0 0; + box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1), + inset 0 -1px 0 rgba(0, 0, 0, .07); + + &:hover { + background-color: rgba(0,0,0,0.4); + -webkit-box-shadow: inset 1px 1px 1px rgba(0,0,0,0.25); + } + + &:active { + -webkit-box-shadow: inset 1px 1px 3px rgba(0,0,0,0.35); + background-color: rgba(0,0,0,0.5); + } + + &:vertical { + border-top: 0px solid transparent; + border-bottom: 0px solid transparent; + border-right: 0px solid transparent; + border-left: 1px solid transparent; + } + + &:horizontal { + border-top: 1px solid transparent; + border-bottom: 0px solid transparent; + border-right: 0px solid transparent; + border-left: 0px solid transparent; + } +} + +::-webkit-scrollbar-track { + background-clip: padding-box; + background-color: white; + + &:hover { + background-color: rgba(0,0,0,0.05); + -webkit-box-shadow: inset 1px 0px 0px rgba(0,0,0,0.10); + } + + &:active { + background-color: rgba(0,0,0,0.05); + -webkit-box-shadow: inset 1px 0px 0px rgba(0,0,0,0.14), + inset -1px -1px 0px rgba(0,0,0,0.07); + } + + &:vertical { + border-right: 0px solid transparent; + border-left: 1px solid transparent; + } + + &:horizontal { + border-bottom: 0px solid transparent; + border-top: 1px solid transparent; + } +} + +/* Tooltips */ +.tooltip { + background: @tooltip-border-color; + border-radius: 2px; + color: @tooltip-color; + padding: 4px 8px; + font-size: 10px; +} + +.tooltip a, +.tooltip div, +.tooltip span { + color: @tooltip-color; +} +'''; + + var generated = r'''.btn-container { + padding: 10px; +} +.btn, input[type="checkbox"].toggle-button + label { + display: inline-block; + min-width: 62px; + text-align: center; + font-size: 11px; + font-weight: bold; + height: 28px; + padding: 0 8px; + line-height: 27px; + border-radius: 2px; + cursor: default; + color: #444; + border: 1px solid rgba(0, 0, 0, 0.1); + -webkit-transition: all 0.218s; + transition: all 0.218s; + background-color: #f5f5f5; + background-image: -webkit-linear-gradient(top, #f5f5f5, #f1f1f1); + background-image: linear-gradient(top, #f5f5f5, #f1f1f1); +} +.btn:hover, input[type="checkbox"].toggle-button + label:hover { + border: 1px solid #C6C6C6; + color: #222; + box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1); + -webkit-transition: all 0s; + transition: all 0s; + background-color: #f8f8f8; + background-image: -webkit-linear-gradient(top, #f8f8f8, #f1f1f1); + background-image: linear-gradient(top, #f8f8f8, #f1f1f1); +} +.btn:active, input[type="checkbox"].toggle-button + label:active { + border: 1px solid #C6C6C6; + color: #666; + box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.1); + background-color: #f6f6f6; + background-image: -webkit-linear-gradient(top, #f6f6f6, #f1f1f1); + background-image: linear-gradient(top, #f6f6f6, #f1f1f1); +} +.btn:focus, input[type="checkbox"].toggle-button + label:focus { + outline: none; + border: 1px solid #4D90FE; + z-index: 4 !important; +} +.btn.selected, .btn.popup-open, input[type="checkbox"].toggle-button + label.selected, input[type="checkbox"].toggle-button + label.popup-open { + border: 1px solid #CCC; + color: #666; + box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.1); + background-color: #EEE; + background-image: -webkit-linear-gradient(top, #EEE, #E0E0E0); + background-image: linear-gradient(top, #EEE, #E0E0E0); +} +.btn.disabled, .btn.disabled:hover, .btn.disabled:active, .btn[disabled], .btn[disabled]:hover, .btn[disabled]:active, input[type="checkbox"].toggle-button + label.disabled, input[type="checkbox"].toggle-button + label.disabled:hover, input[type="checkbox"].toggle-button + label.disabled:active, input[type="checkbox"].toggle-button + label[disabled], input[type="checkbox"].toggle-button + label[disabled]:hover, input[type="checkbox"].toggle-button + label[disabled]:active { + background: none; + color: #b8b8b8; + border: 1px solid rgba(0, 0, 0, 0.05); + cursor: default; + pointer-events: none; +} +.btn.flat, input[type="checkbox"].toggle-button + label.flat { + background: none; + border-color: transparent; + padding: 0; + box-shadow: none; +} +.btn.invalid, input[type="checkbox"].toggle-button + label.invalid { + outline: none; + border: 1px solid #dd4b39; + box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.3); +} +.btn-small { + min-width: 30px; +} +.btn-left { + display: inline-block; + min-width: 62px; + text-align: center; + font-size: 11px; + font-weight: bold; + height: 28px; + padding: 0 8px; + line-height: 27px; + border-radius: 2px; + cursor: default; + color: #444; + border: 1px solid rgba(0, 0, 0, 0.1); + -webkit-transition: all 0.218s; + transition: all 0.218s; + background-color: #f5f5f5; + background-image: -webkit-linear-gradient(top, #f5f5f5, #f1f1f1); + background-image: linear-gradient(top, #f5f5f5, #f1f1f1); + border-radius: 2px 0 0 2px; + margin-right: 0; + padding: 0; + min-width: 30px; +} +.btn-left:hover { + border: 1px solid #C6C6C6; + color: #222; + box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1); + -webkit-transition: all 0s; + transition: all 0s; + background-color: #f8f8f8; + background-image: -webkit-linear-gradient(top, #f8f8f8, #f1f1f1); + background-image: linear-gradient(top, #f8f8f8, #f1f1f1); +} +.btn-left:active { + border: 1px solid #C6C6C6; + color: #666; + box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.1); + background-color: #f6f6f6; + background-image: -webkit-linear-gradient(top, #f6f6f6, #f1f1f1); + background-image: linear-gradient(top, #f6f6f6, #f1f1f1); +} +.btn-left:focus { + outline: none; + border: 1px solid #4D90FE; + z-index: 4 !important; +} +.btn-left.selected, .btn-left.popup-open { + border: 1px solid #CCC; + color: #666; + box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.1); + background-color: #EEE; + background-image: -webkit-linear-gradient(top, #EEE, #E0E0E0); + background-image: linear-gradient(top, #EEE, #E0E0E0); +} +.btn-left.disabled, .btn-left.disabled:hover, .btn-left.disabled:active, .btn-left[disabled], .btn-left[disabled]:hover, .btn-left[disabled]:active { + background: none; + color: #b8b8b8; + border: 1px solid rgba(0, 0, 0, 0.05); + cursor: default; + pointer-events: none; +} +.btn-left.flat { + background: none; + border-color: transparent; + padding: 0; + box-shadow: none; +} +.btn-left.invalid { + outline: none; + border: 1px solid #dd4b39; + box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.3); +} +.btn-right { + display: inline-block; + min-width: 62px; + text-align: center; + font-size: 11px; + font-weight: bold; + height: 28px; + padding: 0 8px; + line-height: 27px; + border-radius: 2px; + cursor: default; + color: #444; + border: 1px solid rgba(0, 0, 0, 0.1); + -webkit-transition: all 0.218s; + transition: all 0.218s; + background-color: #f5f5f5; + background-image: -webkit-linear-gradient(top, #f5f5f5, #f1f1f1); + background-image: linear-gradient(top, #f5f5f5, #f1f1f1); + border-radius: 0 2px 2px 0; + border-left: none; + margin-left: 0; + padding: 0; + min-width: 30px; +} +.btn-right:hover { + border: 1px solid #C6C6C6; + color: #222; + box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1); + -webkit-transition: all 0s; + transition: all 0s; + background-color: #f8f8f8; + background-image: -webkit-linear-gradient(top, #f8f8f8, #f1f1f1); + background-image: linear-gradient(top, #f8f8f8, #f1f1f1); +} +.btn-right:active { + border: 1px solid #C6C6C6; + color: #666; + box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.1); + background-color: #f6f6f6; + background-image: -webkit-linear-gradient(top, #f6f6f6, #f1f1f1); + background-image: linear-gradient(top, #f6f6f6, #f1f1f1); +} +.btn-right:focus { + outline: none; + border: 1px solid #4D90FE; + z-index: 4 !important; +} +.btn-right.selected, .btn-right.popup-open { + border: 1px solid #CCC; + color: #666; + box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.1); + background-color: #EEE; + background-image: -webkit-linear-gradient(top, #EEE, #E0E0E0); + background-image: linear-gradient(top, #EEE, #E0E0E0); +} +.btn-right.disabled, .btn-right.disabled:hover, .btn-right.disabled:active, .btn-right[disabled], .btn-right[disabled]:hover, .btn-right[disabled]:active { + background: none; + color: #b8b8b8; + border: 1px solid rgba(0, 0, 0, 0.05); + cursor: default; + pointer-events: none; +} +.btn-right.flat { + background: none; + border-color: transparent; + padding: 0; + box-shadow: none; +} +.btn-right.invalid { + outline: none; + border: 1px solid #dd4b39; + box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.3); +} +.btn + .btn, input[type="checkbox"].toggle-button + label + .btn, .btn + input[type="checkbox"].toggle-button + label, input[type="checkbox"].toggle-button + label + input[type="checkbox"].toggle-button + label, input[type="checkbox"].toggle-button + label + input[type="checkbox"].toggle-button + label { + margin-left: 5px; +} +.btn-primary { + color: #FFF !important; + width: 94px; + border-color: #3079ed; + background-color: #4d90fe; + background-image: -webkit-linear-gradient(top, #4d90fe, #4787ed); + background-image: linear-gradient(top, #4d90fe, #4787ed); +} +.btn-primary:hover, .btn-primary:active { + border-color: #2f5bb7; + background-color: #4d90fe; + background-image: -webkit-linear-gradient(top, #4d90fe, #357ae8); + background-image: linear-gradient(top, #4d90fe, #357ae8); +} +.btn-primary:focus { + border-color: #4D90FE; + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.5); +} +.btn-primary:focus:hover { + box-shadow: inset 0 0 0 1px #fff, 0px 1px 1px rgba(0, 0, 0, 0.1); +} +.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:active { + border-color: #3079ed; + background-color: #4d90fe; + opacity: 0.7; +} +input[type="checkbox"].toggle-button { + display: none; +} +input[type="checkbox"].toggle-button + label { +} +input[type="checkbox"].toggle-button:checked + label, input[type="checkbox"].toggle-button + label.popup-open { + border: 1px solid #CCC; + color: #666; + box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.1); + background-color: #EEE; + background-image: -webkit-linear-gradient(top, #EEE, #E0E0E0); + background-image: linear-gradient(top, #EEE, #E0E0E0); +} +.txt-input, textarea { + display: inline-block; + *display: inline; + *zoom: 1; + padding: 4px 12px; + margin-bottom: 0; + font-size: 14px; + line-height: 20px; + vertical-align: middle; + color: #333; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border: 1px solid #ccc; + *border: 0; + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *margin-left: .3em; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); +} +input[type="text"], input:not([type]), .txt-input, textarea { + height: 29px; + background-color: #fff; + padding: 4px 0 4px 8px; + color: 333; + border: 1px solid #d9d9d9; + border-top: 1px solid #c0c0c0; + display: inline-block; + vertical-align: top; + box-sizing: border-box; + border-radius: 1px; +} +input[type="text"]:hover, input:not([type]):hover, .txt-input:hover, textarea:hover { + border: 1px solid #b9b9b9; + border-top: 1px solid #a0a0a0; + box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.1); +} +input[type="text"]:focus, input:not([type]):focus, .txt-input:focus, textarea:focus { + outline: none; + border: 1px solid #4d90fe; + box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.3); +} +input[type="text"].disabled, input:not([type]).disabled, .txt-input.disabled, input[type="text"].disabled:hover, input:not([type]).disabled:hover, .txt-input.disabled:hover, input[type="text"].disabled:active, input:not([type]).disabled:active, .txt-input.disabled:active, input[type="text"]:disabled, input:not([type]):disabled, .txt-input:disabled, textarea.disabled, textarea.disabled:hover, textarea.disabled:active, textarea:disabled { + background: #fff; + border: 1px solid #f3f3f3; + border: 1px solid rgba(0, 0, 0, 0.05); + color: #b8b8b8; + cursor: default; + pointer-events: none; +} +input[type="text"].invalid, input:not([type]).invalid, .txt-input.invalid, input[type="text"]:focus:invalid, input:not([type]):focus:invalid, .txt-input:focus:invalid, input[type="text"]:required:invalid, input:not([type]):required:invalid, .txt-input:required:invalid, textarea.invalid, textarea:focus:invalid, textarea:required:invalid { + outline: none; + border: 1px solid #dd4b39; + box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.3); +} +textarea { + height: 3em; +} +input[type="date"]::-webkit-inner-spin-button, input[type="datetime"]::-webkit-inner-spin-button, input[type="datetime-local"]::-webkit-inner-spin-button, input[type="month"]::-webkit-inner-spin-button, input[type="time"]::-webkit-inner-spin-button, input[type="week"]::-webkit-inner-spin-button { + display: none; +} +.dropdown-menu, .popup { + width: auto; + padding: 0; + margin: 0 0 0 1px; + background: #fff; + text-align: left; + z-index: 1000; + outline: 1px solid rgba(0, 0, 0, 0.2); + white-space: nowrap; + list-style: none; + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2); + -webkit-transition: opacity 0.218s; + transition: opacity 0.218s; +} +.popup { + padding: 0 0 6px; +} +.dropdown-menu, .popup { + pointer-events: all; +} +.popup ul { + margin: 0; + padding: 0; +} +.popup li { + list-style-type: none; + padding: 5px 10px; + cursor: default; +} +.popup .header { + padding: 5px 10px; +} +.popup .divider, .dropdown-menu .divider { + width: 100%; + height: 1px; + padding: 0; + overflow: hidden; + background-color: #c0c0c0; + border-bottom: 1px solid #fff; +} +.dropdown-menu { + max-height: 600px; + overflow-x: hidden; + overflow-y: auto; +} +.popup { + overflow: hidden; +} +.dropdown-menuitem, .dropdown-menu > li { + display: block; + padding: 6px 44px 6px 16px; + color: #666; + font-size: 13px; + font-weight: normal; + cursor: default; + margin: 0; + text-decoration: none; + -webkit-user-select: none; + user-select: none; +} +.dropdown-menuitem.disabled, .dropdown-menu > li.disabled { + color: #CCC; + background-color: #FFF; +} +.dropdown-menuitem:hover, .dropdown-menu > li:hover, .dropdown-menuitem.selected, .dropdown-menu > li.selected { + color: #222; + background-color: #F1F1F1; +} +.dropdown-menuheader { + padding: 6px 44px 6px 16px; + color: #666; + font-size: 11px; + font-weight: bold; + cursor: default; + margin: 0; + text-decoration: none; + background-color: #F1F1F1; + -webkit-user-select: none; + user-select: none; +} +li.dropdown-menudivider { + width: 100%; + height: 1px; + padding: 0; + overflow: hidden; + background-color: #D0D0D0; + border-bottom: 1px solid #fff; +} +.btn-container { + padding: 10px; +} +.modal-frame { + position: relative; + background-color: #fff; + outline: 1px solid rgba(0, 0, 0, 0.2); + padding: 30px 42px; + min-width: 480px; + z-index: 9000; + pointer-events: auto; + box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.2); + -webkit-transition: all 0.218s; + transition: all 0.218s; +} +.modal-frame.medium { + padding: 28px 32px; + min-width: 280px; +} +.modal-frame.small { + padding: 16px 20px; +} +.modal-backdrop { + background-color: rgba(0, 0, 0, 0.1); + position: fixed; + height: 100%; + width: 100%; + left: 0; + right: 0; + top: 0; + bottom: 0; + z-index: 99; + margin: 0; + display: none; + opacity: 0; + -webkit-transition: all 0.218s; + transition: all 0.218s; +} +.modal-backdrop.visible { + display: -webkit-flex; + display: flex; + -webkit-align-items: center; + align-items: center; + -webkit-justify-content: space-around; + justify-content: space-around; + opacity: 1; +} +::-webkit-scrollbar { + width: 10px; + height: 10px; + background: #fff; +} +::-webkit-scrollbar-button { + height: 0px; + width: 0px; +} +::-webkit-scrollbar-button:start:decrement, ::-webkit-scrollbar-button:end:increment { + display: block; +} +::-webkit-scrollbar-button:vertical:start:increment, ::-webkit-scrollbar-button:vertical:end:decrement { + display: none; +} +::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, .2); + background-clip: padding-box; + border: solid transparent; + border-width: 1px 1px 1px 2px; + min-height: 28px; + padding: 100px 0 0; + box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1), inset 0 -1px 0 rgba(0, 0, 0, .07); +} +::-webkit-scrollbar-thumb:hover { + background-color: rgba(0, 0, 0, 0.4); + -webkit-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25); +} +::-webkit-scrollbar-thumb:active { + -webkit-box-shadow: inset 1px 1px 3px rgba(0, 0, 0, 0.35); + background-color: rgba(0, 0, 0, 0.5); +} +::-webkit-scrollbar-thumb:vertical { + border-top: 0px solid transparent; + border-bottom: 0px solid transparent; + border-right: 0px solid transparent; + border-left: 1px solid transparent; +} +::-webkit-scrollbar-thumb:horizontal { + border-top: 1px solid transparent; + border-bottom: 0px solid transparent; + border-right: 0px solid transparent; + border-left: 0px solid transparent; +} +::-webkit-scrollbar-track { + background-clip: padding-box; + background-color: #fff; +} +::-webkit-scrollbar-track:hover { + background-color: rgba(0, 0, 0, 0.05); + -webkit-box-shadow: inset 1px 0px 0px rgba(0, 0, 0, 0.10); +} +::-webkit-scrollbar-track:active { + background-color: rgba(0, 0, 0, 0.05); + -webkit-box-shadow: inset 1px 0px 0px rgba(0, 0, 0, 0.14), inset -1px -1px 0px rgba(0, 0, 0, 0.07); +} +::-webkit-scrollbar-track:vertical { + border-right: 0px solid transparent; + border-left: 1px solid transparent; +} +::-webkit-scrollbar-track:horizontal { + border-bottom: 0px solid transparent; + border-top: 1px solid transparent; +} +.tooltip { + background: #333; + border-radius: 2px; + color: #fff; + padding: 4px 8px; + font-size: 10px; +} +.tooltip a, .tooltip div, .tooltip span { + color: #fff; +}'''; + + compilePolyfillAndValidate(input, generated); +} + +void main() { + test('big #1', bigTest); +} diff --git a/pkgs/csslib/test/color_test.dart b/pkgs/csslib/test/color_test.dart new file mode 100644 index 000000000..923184873 --- /dev/null +++ b/pkgs/csslib/test/color_test.dart @@ -0,0 +1,20 @@ +// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:csslib/parser.dart'; +import 'package:test/test.dart'; + +void main() { + group('css', () { + test('rgb', () { + final color = Color.css('rgb(0, 0, 255)'); + expect(color, equals(Color(0x0000FF))); + }); + + test('rgba', () { + final color = Color.css('rgba(0, 0, 255, 1.0)'); + expect(color, equals(Color.createRgba(0, 0, 255, 1.0))); + }); + }); +} diff --git a/pkgs/csslib/test/compiler_test.dart b/pkgs/csslib/test/compiler_test.dart new file mode 100644 index 000000000..ba0c71e00 --- /dev/null +++ b/pkgs/csslib/test/compiler_test.dart @@ -0,0 +1,750 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:convert'; + +import 'package:csslib/parser.dart'; +import 'package:csslib/visitor.dart'; +import 'package:test/test.dart'; + +import 'testing.dart'; + +void testClass() { + var errors = []; + var input = '.foobar {}'; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(stylesheet.topLevels.length, 1); + + expect(stylesheet.topLevels[0] is RuleSet, true); + + var ruleset = stylesheet.topLevels[0] as RuleSet; + expect(ruleset.selectorGroup!.selectors.length, 1); + expect(ruleset.declarationGroup.declarations.length, 0); + + var selectorSeqs = + ruleset.selectorGroup!.selectors[0].simpleSelectorSequences; + expect(selectorSeqs.length, 1); + final simpSelector = selectorSeqs[0].simpleSelector; + expect(simpSelector is ClassSelector, true); + expect(selectorSeqs[0].isCombinatorNone, true); + expect(simpSelector.name, 'foobar'); +} + +void testClass2() { + var errors = []; + var input = '.foobar .bar .no-story {}'; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(stylesheet.topLevels.length, 1); + + expect(stylesheet.topLevels[0] is RuleSet, true); + var ruleset = stylesheet.topLevels[0] as RuleSet; + expect(ruleset.selectorGroup!.selectors.length, 1); + expect(ruleset.declarationGroup.declarations.length, 0); + + var simpleSeqs = ruleset.selectorGroup!.selectors[0].simpleSelectorSequences; + expect(simpleSeqs.length, 3); + + var simpSelector0 = simpleSeqs[0].simpleSelector; + expect(simpSelector0 is ClassSelector, true); + expect(simpleSeqs[0].isCombinatorNone, true); + expect(simpSelector0.name, 'foobar'); + + var simpSelector1 = simpleSeqs[1].simpleSelector; + expect(simpSelector1 is ClassSelector, true); + expect(simpleSeqs[1].isCombinatorDescendant, true); + expect(simpSelector1.name, 'bar'); + + var simpSelector2 = simpleSeqs[2].simpleSelector; + expect(simpSelector2 is ClassSelector, true); + expect(simpleSeqs[2].isCombinatorDescendant, true); + expect(simpSelector2.name, 'no-story'); +} + +void testId() { + var errors = []; + var input = '#elemId {}'; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(stylesheet.topLevels.length, 1); + + expect(stylesheet.topLevels[0] is RuleSet, true); + var ruleset = stylesheet.topLevels[0] as RuleSet; + expect(ruleset.selectorGroup!.selectors.length, 1); + expect(ruleset.declarationGroup.declarations.length, 0); + + var simpleSeqs = ruleset.selectorGroup!.selectors[0].simpleSelectorSequences; + + expect(simpleSeqs.length, 1); + var simpSelector = simpleSeqs[0].simpleSelector; + expect(simpSelector is IdSelector, true); + expect(simpleSeqs[0].isCombinatorNone, true); + expect(simpSelector.name, 'elemId'); +} + +void testElement() { + var errors = []; + var input = 'div {}'; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(stylesheet.topLevels.length, 1); + + expect(stylesheet.topLevels[0] is RuleSet, true); + var ruleset = stylesheet.topLevels[0] as RuleSet; + expect(ruleset.selectorGroup!.selectors.length, 1); + expect(ruleset.declarationGroup.declarations.length, 0); + + var simpleSeqs = ruleset.selectorGroup!.selectors[0].simpleSelectorSequences; + + expect(simpleSeqs.length, 1); + + final simpSelector = simpleSeqs[0].simpleSelector; + expect(simpSelector is ElementSelector, true); + expect(simpleSeqs[0].isCombinatorNone, true); + expect(simpSelector.name, 'div'); + + input = 'div div span {}'; + stylesheet = parseCss(input, errors: errors..clear()); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(stylesheet.topLevels.length, 1); + + expect(stylesheet.topLevels[0] is RuleSet, true); + ruleset = stylesheet.topLevels[0] as RuleSet; + expect(ruleset.selectorGroup!.selectors.length, 1); + expect(ruleset.declarationGroup.declarations.length, 0); + + simpleSeqs = ruleset.selectorGroup!.selectors[0].simpleSelectorSequences; + + expect(simpleSeqs.length, 3); + + var simpSelector0 = simpleSeqs[0].simpleSelector; + expect(simpSelector0 is ElementSelector, true); + expect(simpleSeqs[0].isCombinatorNone, true); + expect(simpSelector0.name, 'div'); + + var simpSelector1 = simpleSeqs[1].simpleSelector; + expect(simpSelector1 is ElementSelector, true); + expect(simpleSeqs[1].isCombinatorDescendant, true); + expect(simpSelector1.name, 'div'); + + var simpSelector2 = simpleSeqs[2].simpleSelector; + expect(simpSelector2 is ElementSelector, true); + expect(simpleSeqs[2].isCombinatorDescendant, true); + expect(simpSelector2.name, 'span'); +} + +void testNamespace() { + var errors = []; + var input = 'ns1|div {}'; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(stylesheet.topLevels.length, 1); + + expect(stylesheet.topLevels[0] is RuleSet, true); + var ruleset = stylesheet.topLevels[0] as RuleSet; + expect(ruleset.selectorGroup!.selectors.length, 1); + expect(ruleset.declarationGroup.declarations.length, 0); + + var simpleSeqs = ruleset.selectorGroup!.selectors[0].simpleSelectorSequences; + + expect(simpleSeqs.length, 1); + expect(simpleSeqs[0].simpleSelector is NamespaceSelector, true); + var simpSelector = simpleSeqs[0].simpleSelector as NamespaceSelector; + expect(simpleSeqs[0].isCombinatorNone, true); + expect(simpSelector.isNamespaceWildcard, false); + expect(simpSelector.namespace, 'ns1'); + var elementSelector = simpSelector.nameAsSimpleSelector; + expect(elementSelector is ElementSelector, true); + expect(elementSelector!.isWildcard, false); + expect(elementSelector.name, 'div'); +} + +void testNamespace2() { + var errors = []; + var input = 'ns1|div div ns2|span .foobar {}'; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(stylesheet.topLevels.length, 1); + + expect(stylesheet.topLevels[0] is RuleSet, true); + var ruleset = stylesheet.topLevels[0] as RuleSet; + expect(ruleset.selectorGroup!.selectors.length, 1); + expect(ruleset.declarationGroup.declarations.length, 0); + + var simpleSeqs = ruleset.selectorGroup!.selectors[0].simpleSelectorSequences; + + expect(simpleSeqs.length, 4); + + expect(simpleSeqs[0].simpleSelector is NamespaceSelector, true); + var simpSelector0 = simpleSeqs[0].simpleSelector as NamespaceSelector; + expect(simpleSeqs[0].isCombinatorNone, true); + expect(simpSelector0.namespace, 'ns1'); + var elementSelector0 = simpSelector0.nameAsSimpleSelector; + expect(elementSelector0 is ElementSelector, true); + expect(elementSelector0!.isWildcard, false); + expect(elementSelector0.name, 'div'); + + var simpSelector1 = simpleSeqs[1].simpleSelector; + expect(simpSelector1 is ElementSelector, true); + expect(simpleSeqs[1].isCombinatorDescendant, true); + expect(simpSelector1.name, 'div'); + + expect(simpleSeqs[2].simpleSelector is NamespaceSelector, true); + var simpSelector2 = simpleSeqs[2].simpleSelector as NamespaceSelector; + expect(simpleSeqs[2].isCombinatorDescendant, true); + expect(simpSelector2.namespace, 'ns2'); + var elementSelector2 = simpSelector2.nameAsSimpleSelector; + expect(elementSelector2 is ElementSelector, true); + expect(elementSelector2!.isWildcard, false); + expect(elementSelector2.name, 'span'); + + var simpSelector3 = simpleSeqs[3].simpleSelector; + expect(simpSelector3 is ClassSelector, true); + expect(simpleSeqs[3].isCombinatorDescendant, true); + expect(simpSelector3.name, 'foobar'); +} + +void testSelectorGroups() { + var errors = []; + var input = + 'div, .foobar ,#elemId, .xyzzy .test, ns1|div div #elemId .foobar {}'; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(stylesheet.topLevels.length, 1); + + expect(stylesheet.topLevels[0] is RuleSet, true); + var ruleset = stylesheet.topLevels[0] as RuleSet; + expect(ruleset.selectorGroup!.selectors.length, 5); + expect(ruleset.declarationGroup.declarations.length, 0); + + var groupSelector0 = ruleset.selectorGroup!.selectors[0]; + expect(groupSelector0.simpleSelectorSequences.length, 1); + var selector0 = groupSelector0.simpleSelectorSequences[0]; + var simpleSelector0 = selector0.simpleSelector; + expect(simpleSelector0 is ElementSelector, true); + expect(selector0.isCombinatorNone, true); + expect(simpleSelector0.name, 'div'); + + var groupSelector1 = ruleset.selectorGroup!.selectors[1]; + expect(groupSelector1.simpleSelectorSequences.length, 1); + var selector1 = groupSelector1.simpleSelectorSequences[0]; + var simpleSelector1 = selector1.simpleSelector; + expect(simpleSelector1 is ClassSelector, true); + expect(selector1.isCombinatorNone, true); + expect(simpleSelector1.name, 'foobar'); + + var groupSelector2 = ruleset.selectorGroup!.selectors[2]; + expect(groupSelector2.simpleSelectorSequences.length, 1); + var selector2 = groupSelector2.simpleSelectorSequences[0]; + var simpleSelector2 = selector2.simpleSelector; + expect(simpleSelector2 is IdSelector, true); + expect(selector2.isCombinatorNone, true); + expect(simpleSelector2.name, 'elemId'); + + var groupSelector3 = ruleset.selectorGroup!.selectors[3]; + expect(groupSelector3.simpleSelectorSequences.length, 2); + + var selector30 = groupSelector3.simpleSelectorSequences[0]; + var simpleSelector30 = selector30.simpleSelector; + expect(simpleSelector30 is ClassSelector, true); + expect(selector30.isCombinatorNone, true); + expect(simpleSelector30.name, 'xyzzy'); + + var selector31 = groupSelector3.simpleSelectorSequences[1]; + var simpleSelector31 = selector31.simpleSelector; + expect(simpleSelector31 is ClassSelector, true); + expect(selector31.isCombinatorDescendant, true); + expect(simpleSelector31.name, 'test'); + + var groupSelector4 = ruleset.selectorGroup!.selectors[4]; + expect(groupSelector4.simpleSelectorSequences.length, 4); + + var selector40 = groupSelector4.simpleSelectorSequences[0]; + expect(selector40.simpleSelector is NamespaceSelector, true); + var simpleSelector40 = selector40.simpleSelector as NamespaceSelector; + expect(selector40.isCombinatorNone, true); + expect(simpleSelector40.namespace, 'ns1'); + var elementSelector = simpleSelector40.nameAsSimpleSelector; + expect(elementSelector is ElementSelector, true); + expect(elementSelector!.isWildcard, false); + expect(elementSelector.name, 'div'); + + var selector41 = groupSelector4.simpleSelectorSequences[1]; + var simpleSelector41 = selector41.simpleSelector; + expect(simpleSelector41 is ElementSelector, true); + expect(selector41.isCombinatorDescendant, true); + expect(simpleSelector41.name, 'div'); + + var selector42 = groupSelector4.simpleSelectorSequences[2]; + var simpleSelector42 = selector42.simpleSelector; + expect(simpleSelector42 is IdSelector, true); + expect(selector42.isCombinatorDescendant, true); + expect(simpleSelector42.name, 'elemId'); + + var selector43 = groupSelector4.simpleSelectorSequences[3]; + var simpleSelector43 = selector43.simpleSelector; + expect(selector43.isCombinatorDescendant, true); + expect(simpleSelector43.name, 'foobar'); +} + +void testCombinator() { + var errors = []; + var input = '.foobar > .bar + .no-story ~ myNs|div #elemId {}'; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(stylesheet.topLevels.length, 1); + + expect(stylesheet.topLevels[0] is RuleSet, true); + var ruleset = stylesheet.topLevels[0] as RuleSet; + expect(ruleset.selectorGroup!.selectors.length, 1); + expect(ruleset.declarationGroup.declarations.length, 0); + + var simpleSeqs = ruleset.selectorGroup!.selectors[0].simpleSelectorSequences; + + expect(simpleSeqs.length, 5); + + var selector0 = simpleSeqs[0]; + var simpleSelector0 = selector0.simpleSelector; + expect(simpleSelector0 is ClassSelector, true); + expect(selector0.isCombinatorNone, true); + expect(simpleSelector0.name, 'foobar'); + + var selector1 = simpleSeqs[1]; + var simpleSelector1 = selector1.simpleSelector; + expect(simpleSelector1 is ClassSelector, true); + expect(selector1.isCombinatorGreater, true); + expect(simpleSelector1.name, 'bar'); + + var selector2 = simpleSeqs[2]; + var simpleSelector2 = selector2.simpleSelector; + expect(simpleSelector2 is ClassSelector, true); + expect(selector2.isCombinatorPlus, true); + expect(simpleSelector2.name, 'no-story'); + + var selector3 = simpleSeqs[3]; + expect(selector3.simpleSelector is NamespaceSelector, true); + var simpleSelector3 = selector3.simpleSelector as NamespaceSelector; + expect(selector3.isCombinatorTilde, true); + expect(simpleSelector3.namespace, 'myNs'); + var elementSelector = simpleSelector3.nameAsSimpleSelector; + expect(elementSelector is ElementSelector, true); + expect(elementSelector!.isWildcard, false); + expect(elementSelector.name, 'div'); + + var selector4 = simpleSeqs[4]; + var simpleSelector4 = selector4.simpleSelector; + expect(simpleSelector4 is IdSelector, true); + expect(selector4.isCombinatorDescendant, true); + expect(simpleSelector4.name, 'elemId'); +} + +void testWildcard() { + var errors = []; + var input = '* {}'; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(stylesheet.topLevels.length, 1); + + expect(stylesheet.topLevels[0] is RuleSet, true); + var ruleset = stylesheet.topLevels[0] as RuleSet; + expect(ruleset.selectorGroup!.selectors.length, 1); + expect(ruleset.declarationGroup.declarations.length, 0); + + var simpleSeqs = ruleset.selectorGroup!.selectors[0].simpleSelectorSequences; + + expect(simpleSeqs.length, 1); + var simpSelector = simpleSeqs[0].simpleSelector; + expect(simpSelector is ElementSelector, true); + expect(simpleSeqs[0].isCombinatorNone, true); + expect(simpSelector.isWildcard, true); + expect(simpSelector.name, '*'); + + input = '*.foobar {}'; + stylesheet = parseCss(input, errors: errors..clear()); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(stylesheet.topLevels.length, 1); + + expect(stylesheet.topLevels[0] is RuleSet, true); + ruleset = stylesheet.topLevels[0] as RuleSet; + expect(ruleset.selectorGroup!.selectors.length, 1); + expect(ruleset.declarationGroup.declarations.length, 0); + + simpleSeqs = ruleset.selectorGroup!.selectors[0].simpleSelectorSequences; + + expect(simpleSeqs.length, 2); + + { + var selector0 = simpleSeqs[0]; + var simpleSelector0 = selector0.simpleSelector; + expect(simpleSelector0 is ElementSelector, true); + expect(selector0.isCombinatorNone, true); + expect(simpleSelector0.isWildcard, true); + expect(simpleSelector0.name, '*'); + } + + var selector1 = simpleSeqs[1]; + var simpleSelector1 = selector1.simpleSelector; + expect(simpleSelector1 is ClassSelector, true); + expect(selector1.isCombinatorNone, true); + expect(simpleSelector1.name, 'foobar'); + + input = 'myNs|*.foobar {}'; + stylesheet = parseCss(input, errors: errors..clear()); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(stylesheet.topLevels.length, 1); + + expect(stylesheet.topLevels[0] is RuleSet, true); + ruleset = stylesheet.topLevels[0] as RuleSet; + expect(ruleset.selectorGroup!.selectors.length, 1); + expect(ruleset.declarationGroup.declarations.length, 0); + + simpleSeqs = ruleset.selectorGroup!.selectors[0].simpleSelectorSequences; + + expect(simpleSeqs.length, 2); + + { + var selector0 = simpleSeqs[0]; + expect(selector0.simpleSelector is NamespaceSelector, true); + var simpleSelector0 = selector0.simpleSelector as NamespaceSelector; + expect(selector0.isCombinatorNone, true); + expect(simpleSelector0.isNamespaceWildcard, false); + var elementSelector = simpleSelector0.nameAsSimpleSelector; + expect('myNs', simpleSelector0.namespace); + expect(elementSelector!.isWildcard, true); + expect('*', elementSelector.name); + } + + selector1 = simpleSeqs[1]; + simpleSelector1 = selector1.simpleSelector; + expect(simpleSelector1 is ClassSelector, true); + expect(selector1.isCombinatorNone, true); + expect('foobar', simpleSelector1.name); + + input = '*|*.foobar {}'; + stylesheet = parseCss(input, errors: errors..clear()); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(stylesheet.topLevels[0] is RuleSet, true); + ruleset = stylesheet.topLevels[0] as RuleSet; + expect(ruleset.selectorGroup!.selectors.length, 1); + expect(ruleset.declarationGroup.declarations.length, 0); + + simpleSeqs = ruleset.selectorGroup!.selectors[0].simpleSelectorSequences; + + expect(simpleSeqs.length, 2); + + { + var selector0 = simpleSeqs[0]; + expect(selector0.simpleSelector is NamespaceSelector, true); + var simpleSelector0 = selector0.simpleSelector as NamespaceSelector; + expect(selector0.isCombinatorNone, true); + expect(simpleSelector0.isNamespaceWildcard, true); + expect('*', simpleSelector0.namespace); + var elementSelector = simpleSelector0.nameAsSimpleSelector; + expect(elementSelector!.isWildcard, true); + expect('*', elementSelector.name); + } + + selector1 = simpleSeqs[1]; + simpleSelector1 = selector1.simpleSelector; + expect(simpleSelector1 is ClassSelector, true); + expect(selector1.isCombinatorNone, true); + expect('foobar', simpleSelector1.name); +} + +// Test List as input to parser. +void testArrayOfChars() { + var errors = []; + var input = ''; + + var stylesheet = parse(utf8.encode(input), errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + + expect(prettyPrint(stylesheet), r''' +.foo { + color: #f00; + left: 20px; + top: 20px; + width: 100px; + height: 200px; +} +#div { + color: #00F578; + border-color: #878787; +}'''); +} + +void testPseudo() { + var errors = []; + + final input = r''' +html:lang(fr-ca) { quotes: '" ' ' "' } +zoom: { } + +a:link { color: red } +:link { color: blue } + +a:focus { background: yellow } +a:focus:hover { background: white } + +p.special:first-letter {color: #ffd800} + +p:not(#example){ + background-color: yellow; +} + +input:not([DISABLED]){ + background-color: yellow; +} + +html|*:not(:link):not(:visited) { + border: 1px solid black; +} + +*:not(FOO) { + height: 20px; +} + +*|*:not(*) { + color: orange; +} + +*|*:not(:hover) { + color: magenta; +} + +p:nth-child(3n-3) { } + +div:nth-child(2n) { color : red; } +'''; + + var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), r''' +html:lang(fr-ca) { + quotes: '" ' ' "'; +} +zoom { +} +a:link { + color: #f00; +} +:link { + color: #00f; +} +a:focus { + background: #ff0; +} +a:focus:hover { + background: #fff; +} +p.special:first-letter { + color: #ffd800; +} +p:not(#example) { + background-color: #ff0; +} +input:not([DISABLED]) { + background-color: #ff0; +} +html|*:not(:link):not(:visited) { + border: 1px solid #000; +} +*:not(FOO) { + height: 20px; +} +*|*:not(*) { + color: #ffa500; +} +*|*:not(:hover) { + color: #f0f; +} +p:nth-child(3n-3) { +} +div:nth-child(2n) { + color: #f00; +}'''); +} + +void testAttribute() { + // TODO(terry): Implement +} + +void testNegation() { + // TODO(terry): Implement +} + +void testHost() { + var errors = []; + var input = '@host { ' + ':scope {' + 'white-space: nowrap;' + 'overflow-style: marquee-line;' + 'overflow-x: marquee;' + '}' + '* { color: red; }' + '*:hover { font-weight: bold; }' + ':nth-child(odd) { color: blue; }' + '}'; + var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), r''' +@host { + :scope { + white-space: nowrap; + overflow-style: marquee-line; + overflow-x: marquee; + } + * { + color: #f00; + } + *:hover { + font-weight: bold; + } + :nth-child(odd) { + color: #00f; + } +}'''); +} + +void testStringEscape() { + var errors = []; + var input = r'''a { foo: '{"text" : "a\\\""}' }'''; + var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); + expect(errors.isEmpty, true, reason: errors.toString()); + + expect(prettyPrint(stylesheet), r''' +a { + foo: '{"text" : "a\\\""}'; +}'''); +} + +// TODO(terry): Move to emitter_test.dart when real emitter exist. +void testEmitter() { + var errors = []; + var input = '.foo { ' + 'color: red; left: 20px; top: 20px; width: 100px; height:200px' + '}' + '#div {' + 'color : #00F578; border-color: #878787;' + '}'; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(prettyPrint(stylesheet), r''' +.foo { + color: #f00; + left: 20px; + top: 20px; + width: 100px; + height: 200px; +} +#div { + color: #00F578; + border-color: #878787; +}'''); +} + +void testExpressionParsing() { + var errors = []; + var input = r''' +.foobar { + border-radius: calc(0 - 1px); + border-width: calc(0 + 1px); +}'''; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + + walkTree(stylesheet); + + expect(prettyPrint(stylesheet), r''' +.foobar { + border-radius: calc(0 - 1px); + border-width: calc(0 + 1px); +}'''); +} + +void main() { + test('Classes', testClass); + test('Classes 2', testClass2); + test('Ids', testId); + test('Elements', testElement); + test('Namespace', testNamespace); + test('Namespace 2', testNamespace2); + test('Selector Groups', testSelectorGroups); + test('Combinator', testCombinator); + test('Wildcards', testWildcard); + test('Pseudo', testPseudo); + test('Attributes', testAttribute); + test('Negation', testNegation); + test('@host', testHost); + test('stringEscape', testStringEscape); + test('Parse List as input', testArrayOfChars); + test('Simple Emitter', testEmitter); + test('Expression parsing', testExpressionParsing); +} diff --git a/pkgs/csslib/test/debug_test.dart b/pkgs/csslib/test/debug_test.dart new file mode 100644 index 000000000..878493b05 --- /dev/null +++ b/pkgs/csslib/test/debug_test.dart @@ -0,0 +1,33 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:test/test.dart'; + +import 'testing.dart'; + +void main() { + test('exercise debug', () { + var style = parseCss(_input); + + var debugValue = style.toDebugString(); + expect(debugValue, isNotNull); + + var style2 = style.clone(); + + expect(style2.toDebugString(), debugValue); + }); +} + +const String _input = r''' +.foo { +background-color: #191919; +width: 10PX; +height: 22mM !important; +border-width: 20cm; +margin-width: 33%; +border-height: 30EM; +width: .6in; +length: 1.2in; +-web-stuff: -10Px; +}'''; diff --git a/pkgs/csslib/test/declaration_test.dart b/pkgs/csslib/test/declaration_test.dart new file mode 100644 index 000000000..6406efdd9 --- /dev/null +++ b/pkgs/csslib/test/declaration_test.dart @@ -0,0 +1,1489 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// ignore_for_file: lines_longer_than_80_chars + +import 'package:csslib/src/messages.dart'; +import 'package:csslib/visitor.dart'; +import 'package:test/test.dart'; + +import 'testing.dart'; + +void expectCss(String css, String expected) { + var errors = []; + var styleSheet = parseCss(css, errors: errors, opts: simpleOptions); + expect(styleSheet, isNotNull); + expect(errors, isEmpty); + expect(prettyPrint(styleSheet), expected); +} + +void testSimpleTerms() { + var errors = []; + final input = r''' +@ import url("test.css"); +.foo { + background-color: #191919; + content: "u+0041"; + width: 10PX; + height: 22mM !important; + border-width: 20cm; + margin-width: 33%; + border-height: 30EM; + width: .6in; + length: 1.2in; + -web-stuff: -10Px; +}'''; + final generated = r''' +@import "test.css"; +.foo { + background-color: #191919; + content: "u+0041"; + width: 10px; + height: 22mm !important; + border-width: 20cm; + margin-width: 33%; + border-height: 30em; + width: .6in; + length: 1.2in; + -web-stuff: -10px; +}'''; + + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); + + final input2 = r''' +* { + border-color: green; +}'''; + final generated2 = r''' +* { + border-color: #008000; +}'''; + + stylesheet = parseCss(input2, errors: errors..clear()); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated2); + + // Regression test to ensure invalid percentages don't throw an exception and + // instead print a useful error message when not in checked mode. + var css = ''' +.foo { + width: Infinity%; +}'''; + stylesheet = parseCss(css, errors: errors..clear(), opts: simpleOptions); + expect(errors, isNotEmpty); + expect(errors.first.message, 'expected }, but found %'); + expect(errors.first.span!.text, '%'); +} + +/// Declarations with comments, references with single-quotes, double-quotes, +/// no quotes. Hex values with # and letters, and functions (rgba, url, etc.) +void testDeclarations() { + var errors = []; + final input = r''' +.more { + color: white; + color: black; + color: cyan; + color: red; + color: #aabbcc; /* test -- 3 */ + color: blue; + background-image: url(http://test.jpeg); + background-image: url("http://double_quote.html"); + background-image: url('http://single_quote.html'); + color: rgba(10,20,255); + color: #123aef; /* hex # part integer and part identifier */ +}'''; + final generated = r''' +.more { + color: #fff; + color: #000; + color: #0ff; + color: #f00; + color: #abc; + color: #00f; + background-image: url("http://test.jpeg"); + background-image: url("http://double_quote.html"); + background-image: url("http://single_quote.html"); + color: rgba(10, 20, 255); + color: #123aef; +}'''; + + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void testIdentifiers() { + var errors = []; + final input = r''' +#da { + height: 100px; +} +#foo { + width: 10px; + color: #ff00cc; +} +'''; + final generated = r''' +#da { + height: 100px; +} +#foo { + width: 10px; + color: #f0c; +}'''; + + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void testComposites() { + var errors = []; + final input = r''' +.xyzzy { + border: 10px 80px 90px 100px; + width: 99%; +} +@-webkit-keyframes pulsate { + 0% { + -webkit-transform: translate3d(0, 0, 0) scale(1.0); + } +}'''; + final generated = r''' +.xyzzy { + border: 10px 80px 90px 100px; + width: 99%; +} +@-webkit-keyframes pulsate { + 0% { + -webkit-transform: translate3d(0, 0, 0) scale(1.0); + } +}'''; + + var stylesheet = parseCss(input, errors: errors); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void testUnits() { + var errors = []; + final input = r''' +#id-1 { + transition: color 0.4s; + animation-duration: 500ms; + top: 1em; + left: 200ex; + right: 300px; + bottom: 400cm; + border-width: 2.5mm; + margin-top: -.5in; + margin-left: +5pc; + margin-right: 5ex; + margin-bottom: 5ch; + font-size: 10pt; + padding-top: 22rem; + padding-left: 33vw; + padding-right: 34vh; + padding-bottom: 3vmin; + transform: rotate(20deg); + voice-pitch: 10hz; + height: 4lh; + width: 40rlh; +} +#id-2 { + left: 2fr; + font-size: 10vmax; + transform: rotatex(20rad); + voice-pitch: 10khz; + -web-kit-resolution: 2dpi; /* Bogus property name testing dpi unit. */ +} +#id-3 { + -web-kit-resolution: 3dpcm; /* Bogus property name testing dpi unit. */ + transform: rotatey(20grad); +} +#id-4 { + -web-kit-resolution: 4dppx; /* Bogus property name testing dpi unit. */ + transform: rotatez(20turn); +} +'''; + + final generated = r''' +#id-1 { + transition: color 0.4s; + animation-duration: 500ms; + top: 1em; + left: 200ex; + right: 300px; + bottom: 400cm; + border-width: 2.5mm; + margin-top: -.5in; + margin-left: +5pc; + margin-right: 5ex; + margin-bottom: 5ch; + font-size: 10pt; + padding-top: 22rem; + padding-left: 33vw; + padding-right: 34vh; + padding-bottom: 3vmin; + transform: rotate(20deg); + voice-pitch: 10hz; + height: 4lh; + width: 40rlh; +} +#id-2 { + left: 2fr; + font-size: 10vmax; + transform: rotatex(20rad); + voice-pitch: 10khz; + -web-kit-resolution: 2dpi; +} +#id-3 { + -web-kit-resolution: 3dpcm; + transform: rotatey(20grad); +} +#id-4 { + -web-kit-resolution: 4dppx; + transform: rotatez(20turn); +}'''; + + var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void testNoValues() { + var errors = []; + final input = r''' +.foo { + color: ; +} +.bar { + font:; + color: blue; +} +'''; + + final generated = r''' +.foo { + color: ; +} +.bar { + font: ; + color: #00f; +}'''; + + var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void testUnicode() { + var errors = []; + final input = r''' +.toggle:after { + content: '✔'; + line-height: 43px; + font-size: 20px; + color: #d9d9d9; + text-shadow: 0 -1px 0 #bfbfbf; +} +'''; + + final generated = r''' +.toggle:after { + content: '✔'; + line-height: 43px; + font-size: 20px; + color: #d9d9d9; + text-shadow: 0 -1px 0 #bfbfbf; +}'''; + + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void testNewerCss() { + var errors = []; + final input = r''' +@media screen,print { + .foobar_screen { + width: 10px; + } +} +@page { + height: 22px; + size: 3in 3in; +} +@page : left { + width: 10px; +} +@page bar : left { @top-left { margin: 8px; } } +@page { @top-left { margin: 8px; } width: 10px; } +@charset "ISO-8859-1"; +@charset 'ASCII';'''; + + final generated = r''' +@media screen, print { + .foobar_screen { + width: 10px; + } +} +@page { + height: 22px; + size: 3in 3in; +} +@page:left { + width: 10px; +} +@page bar:left { + @top-left { + margin: 8px; + } +} +@page { + @top-left { + margin: 8px; + } + width: 10px; +} +@charset "ISO-8859-1"; +@charset "ASCII";'''; + + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void testMediaQueries() { + var errors = []; + var input = ''' +@media screen and (-webkit-min-device-pixel-ratio:0) { + .todo-item .toggle { + background: none; + } + #todo-item .toggle { + height: 40px; + } +}'''; + var generated = ''' +@media screen AND (-webkit-min-device-pixel-ratio:0) { + .todo-item .toggle { + background: none; + } + #todo-item .toggle { + height: 40px; + } +}'''; + + var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); + + input = ''' + @media handheld and (min-width: 20em), + screen and (min-width: 20em) { + #id { color: red; } + .myclass { height: 20px; } + } + @media print and (min-resolution: 300dpi) { + #anotherId { + color: #fff; + } + } + @media print and (min-resolution: 280dpcm) { + #finalId { + color: #aaa; + } + .class2 { + border: 20px; + } + }'''; + generated = ''' +@media handheld AND (min-width:20em), screen AND (min-width:20em) { + #id { + color: #f00; + } + .myclass { + height: 20px; + } +} +@media print AND (min-resolution:300dpi) { + #anotherId { + color: #fff; + } +} +@media print AND (min-resolution:280dpcm) { + #finalId { + color: #aaa; + } + .class2 { + border: 20px; + } +}'''; + + stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); + + input = ''' +@media only screen and (min-device-width: 4000px) and + (min-device-height: 2000px), screen AND (another: 100px) { + html { + font-size: 10em; + } + }'''; + generated = ''' +@media ONLY screen AND (min-device-width:4000px) AND (min-device-height:2000px), screen AND (another:100px) { + html { + font-size: 10em; + } +}'''; + + stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); + + input = ''' +@media screen,print AND (min-device-width: 4000px) and + (min-device-height: 2000px), screen AND (another: 100px) { + html { + font-size: 10em; + } + }'''; + generated = '@media screen, print AND (min-device-width:4000px) AND ' + '(min-device-height:2000px), screen AND (another:100px) {\n' + ' html {\n font-size: 10em;\n }\n}'; + + stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); + + input = ''' +@import "test.css" ONLY screen, NOT print AND (min-device-width: 4000px);'''; + generated = '@import "test.css" ONLY screen, ' + 'NOT print AND (min-device-width:4000px);'; + + stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); + + var css = '@media (min-device-width:400px) {\n}'; + expectCss(css, css); + + css = '@media all AND (tranform-3d), (-webkit-transform-3d) {\n}'; + expectCss(css, css); + + // Test that AND operator is required between media type and expressions. + css = '@media screen (min-device-width:400px'; + stylesheet = parseCss(css, errors: errors..clear(), opts: simpleOptions); + expect(errors, isNotEmpty); + expect( + errors.first.message, contains('expected { after media before ruleset')); + expect(errors.first.span!.text, '('); + + // Test nested at-rules. + input = ''' +@media (min-width: 840px) { + .cell { + width: calc(33% - 16px); + } + @supports (display: grid) { + .cell { + grid-column-end: span 4; + } + } +}'''; + generated = ''' +@media (min-width:840px) { + .cell { + width: calc(33% - 16px); + } + @supports (display: grid) { + .cell { + grid-column-end: span 4; + } + } +}'''; + expectCss(input, generated); +} + +void testMozDocument() { + var errors = []; + // Test empty url-prefix, commonly used for browser detection. + var css = ''' +@-moz-document url-prefix() { + div { + color: #000; + } +}'''; + var expected = ''' +@-moz-document url-prefix() { + div { + color: #000; + } +}'''; + var styleSheet = parseCss(css, errors: errors); + expect(styleSheet, isNotNull); + expect(errors, isEmpty); + expect(prettyPrint(styleSheet), expected); + + // Test url-prefix with unquoted parameter + css = ''' +@-moz-document url-prefix(http://www.w3.org/Style/) { + div { + color: #000; + } +}'''; + expected = ''' +@-moz-document url-prefix("http://www.w3.org/Style/") { + div { + color: #000; + } +}'''; + styleSheet = parseCss(css, errors: errors); + expect(styleSheet, isNotNull); + expect(errors, isEmpty); + expect(prettyPrint(styleSheet), expected); + + // Test domain with unquoted parameter + css = ''' +@-moz-document domain(google.com) { + div { + color: #000; + } +}'''; + expected = ''' +@-moz-document domain("google.com") { + div { + color: #000; + } +}'''; + styleSheet = parseCss(css, errors: errors); + expect(styleSheet, isNotNull); + expect(errors, isEmpty); + expect(prettyPrint(styleSheet), expected); + + // Test all document functions combined. + css = '@-moz-document ' + 'url(http://www.w3.org/), ' + "url-prefix('http://www.w3.org/Style/'), " + 'domain("google.com"), ' + 'regexp("https:.*") { div { color: #000; } }'; + expected = '@-moz-document ' + 'url("http://www.w3.org/"), ' + 'url-prefix("http://www.w3.org/Style/"), ' + 'domain("google.com"), ' + 'regexp("https:.*") {\n div {\n color: #000;\n }\n}'; + styleSheet = parseCss(css, errors: errors); + expect(styleSheet, isNotNull); + expect(errors, isEmpty); + expect(prettyPrint(styleSheet), expected); +} + +void testSupports() { + // Test single declaration condition. + var css = ''' +@supports (-webkit-appearance: none) { + div { + -webkit-appearance: none; + } +}'''; + var expected = ''' +@supports (-webkit-appearance: none) { + div { + -webkit-appearance: none; + } +}'''; + expectCss(css, expected); + + // Test negation. + css = ''' +@supports not ( display: flex ) { + body { width: 100%; } +}'''; + expected = ''' +@supports not (display: flex) { + body { + width: 100%; + } +}'''; + expectCss(css, expected); + + // Test clause with multiple conditions. + css = ''' +@supports (box-shadow: 0 0 2px black inset) or + (-moz-box-shadow: 0 0 2px black inset) or + (-webkit-box-shadow: 0 0 2px black inset) or + (-o-box-shadow: 0 0 2px black inset) { + .box { + box-shadow: 0 0 2px black inset; + } +}'''; + expected = '@supports (box-shadow: 0 0 2px #000 inset) or ' + '(-moz-box-shadow: 0 0 2px #000 inset) or ' + '(-webkit-box-shadow: 0 0 2px #000 inset) or ' + '(-o-box-shadow: 0 0 2px #000 inset) {\n' + ' .box {\n' + ' box-shadow: 0 0 2px #000 inset;\n' + ' }\n' + '}'; + expectCss(css, expected); + + // Test conjunction and disjunction together. + css = ''' +@supports ((transition-property: color) or (animation-name: foo)) and + (transform: rotate(10deg)) { + div { + transition-property: color; + transform: rotate(10deg); + } +}'''; + + expected = '@supports ' + '((transition-property: color) or (animation-name: foo)) and ' + '(transform: rotate(10deg)) {\n' + ' div {\n' + ' transition-property: color;\n' + ' transform: rotate(10deg);\n' + ' }\n' + '}'; + expectCss(css, expected); + + // Test that operators can't be mixed without parentheses. + css = '@supports (a: 1) and (b: 2) or (c: 3) {}'; + var errors = []; + var styleSheet = parseCss(css, errors: errors, opts: simpleOptions); + expect(styleSheet, isNotNull); + expect(errors, isNotEmpty); + expect(errors.first.message, + "Operators can't be mixed without a layer of parentheses"); + expect(errors.first.span!.text, 'or'); +} + +void testViewport() { + // No declarations. + var css = '@viewport {\n}'; + expectCss(css, css); + + // All declarations. + css = ''' +@viewport { + min-width: auto; + max-width: 800px; + width: 400px; + min-height: 50%; + max-height: 200px; + height: 100px 200px; + zoom: auto; + min-zoom: 0.75; + max-zoom: 40%; + user-zoom: fixed; + orientation: landscape; +}'''; + expectCss(css, css); + + // Vendor specific. + css = ''' +@-ms-viewport { + width: device-width; +}'''; + expectCss(css, css); +} + +void testFontFace() { + var errors = []; + + final input = ''' +@font-face { + font-family: BBCBengali; + src: url(fonts/BBCBengali.ttf) format("opentype"); + unicode-range: U+0A-FF, U+980-9FF, U+????, U+3???; +}'''; + final generated = '''@font-face { + font-family: BBCBengali; + src: url("fonts/BBCBengali.ttf") format("opentype"); + unicode-range: U+0A-FF, U+980-9FF, U+????, U+3???; +}'''; + var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); + + final input1 = ''' +@font-face { + font-family: Gentium; + src: url(http://example.com/fonts/Gentium.ttf); + src: url(http://example.com/fonts/Gentium.ttf); +}'''; + final generated1 = '''@font-face { + font-family: Gentium; + src: url("http://example.com/fonts/Gentium.ttf"); + src: url("http://example.com/fonts/Gentium.ttf"); +}'''; + + stylesheet = parseCss(input1, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated1); + + final input2 = ''' +@font-face { +src: url(ideal-sans-serif.woff) format("woff"), + url(basic-sans-serif.ttf) format("opentype"), + local(Gentium Bold); +}'''; + final generated2 = '@font-face {\n' + ' src: url("ideal-sans-serif.woff") ' + 'format("woff"), url("basic-sans-serif.ttf") ' + 'format("opentype"), local(Gentium Bold);\n}'; + + stylesheet = parseCss(input2, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated2); + + final input3 = ''' +@font-face { + font-family: MyGentium Text Ornaments; + src: local(Gentium Bold), /* full font name */ + local(Gentium-Bold), /* Postscript name */ + url(GentiumBold.ttf); /* otherwise, download it */ + font-weight: bold; +}'''; + final generated3 = ''' +@font-face { + font-family: MyGentium Text Ornaments; + src: local(Gentium Bold), local(Gentium-Bold), url("GentiumBold.ttf"); + font-weight: bold; +}'''; + + stylesheet = parseCss(input3, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated3); + + final input4 = ''' +@font-face { + font-family: STIXGeneral; + src: local(STIXGeneral), url(/stixfonts/STIXGeneral.otf); + unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF; +}'''; + final generated4 = '''@font-face { + font-family: STIXGeneral; + src: local(STIXGeneral), url("/stixfonts/STIXGeneral.otf"); + unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF; +}'''; + stylesheet = parseCss(input4, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated4); +} + +void testFontFamily() { + test('quoted', () { + var errors = []; + var stylesheet = parseCss(''' +body { + font-family: "Arial Narrow"; +}''', errors: errors..clear(), opts: simpleOptions); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), ''' +body { + font-family: "Arial Narrow"; +}'''); + var ruleSet = stylesheet.topLevels.first as RuleSet; + var declaration = + ruleSet.declarationGroup.declarations.first as Declaration; + var expressions = declaration.expression as Expressions; + expect(declaration.property, 'font-family'); + expect(printExpressions(expressions), '"Arial Narrow"'); + }); + + test('without quotes', () { + var errors = []; + var stylesheet = parseCss(''' +body { + font-family: Arial Narrow; +}''', errors: errors..clear(), opts: simpleOptions); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), ''' +body { + font-family: Arial Narrow; +}'''); + var ruleSet = stylesheet.topLevels.first as RuleSet; + var declaration = + ruleSet.declarationGroup.declarations.first as Declaration; + var expressions = declaration.expression as Expressions; + expect(declaration.property, 'font-family'); + expect(printExpressions(expressions), 'Arial Narrow'); + }); + + test('starts with identifier', () { + var errors = []; + var stylesheet = parseCss(''' +body { + font-family: PT Sans; +}''', errors: errors..clear(), opts: simpleOptions); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), ''' +body { + font-family: PT Sans; +}'''); + var ruleSet = stylesheet.topLevels.first as RuleSet; + var declaration = + ruleSet.declarationGroup.declarations.first as Declaration; + var expressions = declaration.expression as Expressions; + expect(declaration.property, 'font-family'); + expect(printExpressions(expressions), 'PT Sans'); + }); +} + +void testCssFile() { + var errors = []; + final input = r''' +@import 'simple.css' +@import "test.css" print +@import url(test.css) screen, print +@import url(http://google.com/maps/maps.css); + +div[href^='test'] { + height: 10px; +} + +@-webkit-keyframes pulsate { + from { + -webkit-transform: translate3d(0, 0, 0) scale(1.0); + } + 10% { + -webkit-transform: translate3d(0, 0, 0) scale(1.0); + } + 30% { + -webkit-transform: translate3d(0, 2, 0) scale(1.0); + } +} + +.foobar { + grid-columns: 10px ("content" 1fr 10px)[4]; +} + +.test-background { + background: url(http://www.foo.com/bar.png); +} + +.test-background-with-multiple-properties { + background: #000 url(http://www.foo.com/bar.png); +} +'''; + + final generated = ''' +@import "simple.css"; +@import "test.css" print; +@import "test.css" screen, print; +@import "http://google.com/maps/maps.css"; +div[href^="test"] { + height: 10px; +} +@-webkit-keyframes pulsate { + from { + -webkit-transform: translate3d(0, 0, 0) scale(1.0); + } + 10% { + -webkit-transform: translate3d(0, 0, 0) scale(1.0); + } + 30% { + -webkit-transform: translate3d(0, 2, 0) scale(1.0); + } +} +.foobar { + grid-columns: 10px ("content" 1fr 10px) [4]; +} +.test-background { + background: url("http://www.foo.com/bar.png"); +} +.test-background-with-multiple-properties { + background: #000 url("http://www.foo.com/bar.png"); +}'''; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void testCompactEmitter() { + var errors = []; + + // Check !import compactly emitted. + final input = r''' +div { + color: green !important; + background: red blue green; +} +.foo p[bar] { + color: blue; +} +@page { + @top-left { + color: red; + } +} +@page : first{} +@page foo : first {} +@media screen AND (max-width: 800px) { + div { + font-size: 24px; + } +} +@keyframes foo { + 0% { + transform: scaleX(0); + } +} +div { + color: rgba(0, 0, 0, 0.2); +} +'''; + final generated = ''' +div{color:green!important;background:red blue green}.foo p[bar]{color:blue}@page{@top-left{color:red}}@page:first{}@page foo:first{}@media screen AND (max-width:800px){div{font-size:24px}}@keyframes foo{0%{transform:scaleX(0)}}div{color:rgba(0,0,0,0.2)}'''; + + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(compactOutput(stylesheet), generated); + + // Check namespace directive compactly emitted. + final input2 = '@namespace a url(http://www.example.org/a);'; + final generated2 = '@namespace a url(http://www.example.org/a);'; + + var stylesheet2 = parseCss(input2, errors: errors..clear()); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(compactOutput(stylesheet2), generated2); +} + +void testNotSelectors() { + var errors = []; + + final input = r''' +.details:not(.open-details) x-element, +.details:not(.open-details) .summary { + overflow: hidden; +} + +.details:not(.open-details) x-icon { + margin-left: 99px; +} + +.kind-class .details:not(.open-details) x-icon { + margin-left: 0px; +} + +.name { + margin-left: 0px; +} + +.details:not(.open-details) .the-class { + width: 80px; +} + +*:focus +{ + outline: none; +} + +body > h2:not(:first-of-type):not(:last-of-type) { + color: red; +} + +.details-1:not([DISABLED]) { + outline: none; +} + +html|*:not(:link):not(:visited) { + width: 92%; +} + +*|*:not(*) { + font-weight: bold; +} + +*:not(:not([disabled])) { color: blue; } +'''; + final generated = r''' +.details:not(.open-details) x-element, .details:not(.open-details) .summary { + overflow: hidden; +} +.details:not(.open-details) x-icon { + margin-left: 99px; +} +.kind-class .details:not(.open-details) x-icon { + margin-left: 0px; +} +.name { + margin-left: 0px; +} +.details:not(.open-details) .the-class { + width: 80px; +} +*:focus { + outline: none; +} +body > h2:not(:first-of-type):not(:last-of-type) { + color: #f00; +} +.details-1:not([DISABLED]) { + outline: none; +} +html|*:not(:link):not(:visited) { + width: 92%; +} +*|*:not(*) { + font-weight: bold; +} +*:not(:not([disabled])) { + color: #00f; +}'''; + + var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void testIE() { + var errors = []; + final input = '.test {\n' + ' filter: progid:DXImageTransform.Microsoft.gradient' + "(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670');\n" + '}'; + final generated = '.test {\n' + ' filter: progid:DXImageTransform.Microsoft.gradient' + "(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670');\n" + '}'; + + var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); + + final input2 = '.test {\n' + ' filter: progid:DXImageTransform.Microsoft.gradient' + "(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670')\n" + ' progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);\n' + '}'; + + final generated2 = '.test {\n' + ' filter: progid:DXImageTransform.Microsoft.gradient' + "(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670')\n" + ' progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);\n' + '}'; + + stylesheet = parseCss(input2, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated2); + + final input3 = ''' +div { + filter: alpha(opacity=80); /* IE7 and under */ + -ms-filter: "Alpha(Opacity=40)"; /* IE8 and newer */ + + Filter: Blur(Add = 0, Direction = 225, Strength = 10); + Filter: FlipV; + Filter: Gray; + FILTER: Chroma(Color = #000000) Mask(Color=#00FF00); + Filter: Alpha(Opacity=100, FinishOpacity=0, Style=2, StartX=20, StartY=40, + FinishX=0, FinishY=0) Wave(Add=0, Freq=5, LightStrength=20, + Phase=220, Strength=10); +} +'''; + final generated3 = 'div {\n filter: alpha(opacity=80);\n' + ' -ms-filter: "Alpha(Opacity=40)";\n' + ' Filter: Blur(Add = 0, Direction = 225, Strength = 10);\n' + ' Filter: FlipV;\n Filter: Gray;\n' + ' FILTER: Chroma(Color = #000000) Mask(Color=#00FF00);\n' + ' Filter: Alpha(Opacity=100, FinishOpacity=0, Style=2, ' + 'StartX=20, StartY=40,\n' + ' FinishX=0, FinishY=0) Wave(Add=0, Freq=5, LightStrength=20,\n' + ' Phase=220, Strength=10);\n}'; + + stylesheet = parseCss(input3, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated3); + + final input4 = ''' +div { + filter: FlipH; +}'''; + + stylesheet = parseCss(input4, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), input4); +} + +/// Test IE specific declaration syntax: +/// IE6 property name prefixed with _ (normal CSS property name can start +/// with an underscore). +/// +/// IE7 or below property add asterisk before the CSS property. +/// +/// IE8 or below add \9 at end of declaration expression e.g., +/// background: red\9; +void testIEDeclaration() { + var errors = []; + + final input = ''' +.testIE-6 { + _zoom : 5; +} +.clearfix { + *zoom: 1; +} +audio, video { + display: inline-block; + *display: inline; + *zoom: 1; +} +input { + *overflow: visible; + line-height: normal; +} +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \\9; /* IE6-9 */ +} + +input[type="radio"], input[type="checkbox"] { + margin-top: 1px \\9; + *margin-top: 0; +} + +input.search-query { + padding-right: 14px; + padding-right: 4px \\9; + padding-left: 14px; + padding-left: 4px \\9; /* IE7-8 no border-radius, don't indent padding. */ +} + +.btn.active { + background-color: #cccccc \\9; +} + +@-webkit-keyframes progress-bar-stripes { +from { +background-position: 40px 0; +} +to { +background-position: 0 0; +} +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +}'''; + + final generated = ''' +.testIE-6 { + _zoom: 5; +} +.clearfix { + *zoom: 1; +} +audio, video { + display: inline-block; + *display: inline; + *zoom: 1; +} +input { + *overflow: visible; + line-height: normal; +} +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \\9; +} +input[type="radio"], input[type="checkbox"] { + margin-top: 1px \\9; + *margin-top: 0; +} +input.search-query { + padding-right: 14px; + padding-right: 4px \\9; + padding-left: 14px; + padding-left: 4px \\9; +} +.btn.active { + background-color: #ccc \\9; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +}'''; + + var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void testHangs() { + var errors = []; + + // Bad hexvalue had caused a hang in processTerm. + final input = r'''#a { color: #ebebeburl(0/IE8+9+); }'''; + parseCss(input, errors: errors, opts: options); + + expect(errors.length, 3, reason: errors.toString()); + + var errorMessage = errors[0]; + expect(errorMessage.message, contains('Bad hex number')); + expect(errorMessage.span, isNotNull); + expect(errorMessage.span!.start.line, 0); + expect(errorMessage.span!.start.column, 12); + expect(errorMessage.span!.text, '#ebebeburl'); + + errorMessage = errors[1]; + expect(errorMessage.message, contains('expected }, but found +')); + expect(errorMessage.span, isNotNull); + expect(errorMessage.span!.start.line, 0); + expect(errorMessage.span!.start.column, 30); + expect(errorMessage.span!.text, '+'); + + errorMessage = errors[2]; + expect(errorMessage.message, contains('premature end of file unknown CSS')); + expect(errorMessage.span, isNotNull); + expect(errorMessage.span!.start.line, 0); + expect(errorMessage.span!.start.column, 31); + expect(errorMessage.span!.text, ')'); + + // Missing closing parenthesis for keyframes. + final input2 = r'''@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +'''; + + parseCss(input2, errors: errors..clear(), opts: options); + + expect(errors.length, 1, reason: errors.toString()); + + errorMessage = errors[0]; + expect(errorMessage.message, contains('unexpected end of file')); + expect(errorMessage.span, isNotNull); + expect(errorMessage.span!.start.line, 7); + expect(errorMessage.span!.start.column, 0); + expect(errorMessage.span!.text.trim(), ''); +} + +void testExpressionSpans() { + final input = r'''.foo { width: 50px; }'''; + + var stylesheet = parseCss(input); + var ruleSet = stylesheet.topLevels.single as RuleSet; + + var declaration = ruleSet.declarationGroup.declarations.single as Declaration; + expect(declaration.span.text, 'width: 50px'); + + var expressions = declaration.expression as Expressions; + expect(expressions.expressions.first.span!.text, '50px'); +} + +void testComments() { + final css = '''/* This comment has a nested HTML comment... +* +* +*
+* +*/'''; + expectCss(css, ''); +} + +void simpleCalc() { + final input = r'''.foo { height: calc(100% - 55px); }'''; + var stylesheet = parseCss(input); + var decl = (stylesheet.topLevels.single as RuleSet) + .declarationGroup + .declarations + .single; + expect(decl.span!.text, 'height: calc(100% - 55px)'); +} + +void complexCalc() { + final input = r'''.foo { left: calc((100%/3 - 2) * 1em - 2 * 1px); }'''; + var stylesheet = parseCss(input); + var decl = (stylesheet.topLevels.single as RuleSet) + .declarationGroup + .declarations + .single; + expect(decl.span!.text, 'left: calc((100%/3 - 2) * 1em - 2 * 1px)'); +} + +void twoCalcs() { + final input = r'''.foo { margin: calc(1rem - 2px) calc(1rem - 1px); }'''; + var stylesheet = parseCss(input); + var decl = (stylesheet.topLevels.single as RuleSet) + .declarationGroup + .declarations + .single; + expect(decl.span!.text, 'margin: calc(1rem - 2px) calc(1rem - 1px)'); +} + +void selectorWithCalcs() { + var errors = []; + final input = r''' +.foo { + width: calc(1em + 5 * 2em); + height: calc(1px + 2%) !important; + border: 5px calc(1pt + 2cm) 6px calc(1em + 1in + 2px) red; + border: calc(5px + 1em) 0px 1px calc(10 + 20 + 1px); + margin: 25px calc(50px + (100% / (3 - 1em) - 20%)) calc(10px + 10 * 20) calc(100% - 10px); +}'''; + final generated = r''' +.foo { + width: calc(1em + 5 * 2em); + height: calc(1px + 2%) !important; + border: 5px calc(1pt + 2cm) 6px calc(1em + 1in + 2px) #f00; + border: calc(5px + 1em) 0px 1px calc(10 + 20 + 1px); + margin: 25px calc(50px + (100% / (3 - 1em) - 20%)) calc(10px + 10 * 20) calc(100% - 10px); +}'''; + + var stylesheet = parseCss(input, errors: errors); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void vendorPrefixedCalc() { + var css = ''' +.foo { + width: -webkit-calc((100% - 15px*1) / 1); +}'''; + expectCss(css, css); + + css = ''' +.foo { + width: -moz-calc((100% - 15px*1) / 1); +}'''; + expectCss(css, css); +} + +void main() { + test('Simple Terms', testSimpleTerms); + test('Declarations', testDeclarations); + test('Identifiers', testIdentifiers); + test('Composites', testComposites); + test('Units', testUnits); + test('No Values', testNoValues); + test('Unicode', testUnicode); + test('Newer CSS', testNewerCss); + test('Media Queries', testMediaQueries); + test('Document', testMozDocument); + test('Supports', testSupports); + test('Viewport', testViewport); + test('Font-Face', testFontFace); + group('font-family', testFontFamily); + test('CSS file', testCssFile); + test('Compact Emitter', testCompactEmitter); + test('Selector Negation', testNotSelectors); + test('IE stuff', testIE); + test('IE declaration syntax', testIEDeclaration); + test('Hanging bugs', testHangs); + test('Expression spans', testExpressionSpans); + test('Comments', testComments); + group('calc function', () { + test('simple calc', simpleCalc); + test('single complex', complexCalc); + test('two calc terms for same declaration', twoCalcs); + test('selector with many calc declarations', selectorWithCalcs); + test('vendor prefixed calc', vendorPrefixedCalc); + }); +} diff --git a/pkgs/csslib/test/error_test.dart b/pkgs/csslib/test/error_test.dart new file mode 100644 index 000000000..030fc2429 --- /dev/null +++ b/pkgs/csslib/test/error_test.dart @@ -0,0 +1,359 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:csslib/src/messages.dart'; +import 'package:term_glyph/term_glyph.dart' as glyph; +import 'package:test/test.dart'; + +import 'testing.dart'; + +/// Test for unsupported font-weights values of bolder, lighter and inherit. +void testUnsupportedFontWeights() { + var errors = []; + + // TODO(terry): Need to support bolder. + // font-weight value bolder. + var input = '.foobar { font-weight: bolder; }'; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, false); + expect(errors[0].toString(), ''' +error on line 1, column 24: Unknown property value bolder + , +1 | .foobar { font-weight: bolder; } + | ^^^^^^ + \''''); + + expect(prettyPrint(stylesheet), r''' +.foobar { + font-weight: bolder; +}'''); + + // TODO(terry): Need to support lighter. + // font-weight value lighter. + input = '.foobar { font-weight: lighter; }'; + stylesheet = parseCss(input, errors: errors..clear()); + + expect(errors.isEmpty, false); + expect(errors[0].toString(), ''' +error on line 1, column 24: Unknown property value lighter + , +1 | .foobar { font-weight: lighter; } + | ^^^^^^^ + \''''); + expect(prettyPrint(stylesheet), r''' +.foobar { + font-weight: lighter; +}'''); + + // TODO(terry): Need to support inherit. + // font-weight value inherit. + input = '.foobar { font-weight: inherit; }'; + stylesheet = parseCss(input, errors: errors..clear()); + + expect(errors.isEmpty, false); + expect(errors[0].toString(), ''' +error on line 1, column 24: Unknown property value inherit + , +1 | .foobar { font-weight: inherit; } + | ^^^^^^^ + \''''); + expect(prettyPrint(stylesheet), r''' +.foobar { + font-weight: inherit; +}'''); +} + +/// Test for unsupported line-height values of units other than px, pt and +/// inherit. +void testUnsupportedLineHeights() { + var errors = []; + + // line-height value in percentage unit. + var input = '.foobar { line-height: 120%; }'; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, false); + expect(errors[0].toString(), ''' +error on line 1, column 24: Unexpected value for line-height + , +1 | .foobar { line-height: 120%; } + | ^^^^ + \''''); + expect(prettyPrint(stylesheet), r''' +.foobar { + line-height: 120%; +}'''); + + // TODO(terry): Need to support all units. + // line-height value in cm unit. + input = '.foobar { line-height: 20cm; }'; + stylesheet = parseCss(input, errors: errors..clear()); + + expect(errors.isEmpty, false); + expect(errors[0].toString(), ''' +error on line 1, column 24: Unexpected unit for line-height + , +1 | .foobar { line-height: 20cm; } + | ^^^^ + \''''); + expect(prettyPrint(stylesheet), r''' +.foobar { + line-height: 20cm; +}'''); + + // TODO(terry): Need to support inherit. + // line-height value inherit. + input = '.foobar { line-height: inherit; }'; + stylesheet = parseCss(input, errors: errors..clear()); + + expect(errors.isEmpty, false); + expect(errors[0].toString(), ''' +error on line 1, column 24: Unknown property value inherit + , +1 | .foobar { line-height: inherit; } + | ^^^^^^^ + \''''); + expect(prettyPrint(stylesheet), r''' +.foobar { + line-height: inherit; +}'''); +} + +/// Test for bad selectors. +void testBadSelectors() { + var errors = []; + + // Invalid id selector. + var input = '# foo { color: #ff00ff; }'; + parseCss(input, errors: errors); + + expect(errors, isNotEmpty); + expect(errors[0].toString(), ''' +error on line 1, column 1: Not a valid ID selector expected #id + , +1 | # foo { color: #ff00ff; } + | ^ + \''''); + + // Invalid class selector. + input = '. foo { color: #ff00ff; }'; + parseCss(input, errors: errors..clear()); + + expect(errors, isNotEmpty); + expect(errors[0].toString(), ''' +error on line 1, column 1: Not a valid class selector expected .className + , +1 | . foo { color: #ff00ff; } + | ^ + \''''); +} + +/// Test for bad hex values. +void testBadHexValues() { + var errors = []; + + // Invalid hex value. + var input = '.foobar { color: #AH787; }'; + var stylesheet = parseCss(input, errors: errors); + + expect(errors.isEmpty, false); + expect(errors[0].toString(), ''' +error on line 1, column 18: Bad hex number + , +1 | .foobar { color: #AH787; } + | ^^^^^^ + \''''); + expect(prettyPrint(stylesheet), r''' +.foobar { + color: #AH787; +}'''); + + // Bad color constant. + input = '.foobar { color: redder; }'; + stylesheet = parseCss(input, errors: errors..clear()); + + expect(errors.isEmpty, false); + expect(errors[0].toString(), ''' +error on line 1, column 18: Unknown property value redder + , +1 | .foobar { color: redder; } + | ^^^^^^ + \''''); + + expect(prettyPrint(stylesheet), r''' +.foobar { + color: redder; +}'''); + + // Bad hex color #ffffff. + input = '.foobar { color: # ffffff; }'; + stylesheet = parseCss(input, errors: errors..clear()); + + expect(errors.isEmpty, false); + expect(errors[0].toString(), ''' +error on line 1, column 18: Expected hex number + , +1 | .foobar { color: # ffffff; } + | ^ + \''''); + + expect(prettyPrint(stylesheet), r''' +.foobar { + color: # ffffff; +}'''); + + // Bad hex color #123fff. + input = '.foobar { color: # 123fff; }'; + stylesheet = parseCss(input, errors: errors..clear()); + + expect(errors.isEmpty, false); + expect(errors[0].toString(), ''' +error on line 1, column 18: Expected hex number + , +1 | .foobar { color: # 123fff; } + | ^ + \''''); + + // Formating is off with an extra space. However, the entire value is bad + // and isn't processed anyway. + expect(prettyPrint(stylesheet), r''' +.foobar { + color: # 123 fff; +}'''); +} + +void testBadUnicode() { + var errors = []; + final input = ''' +@font-face { + src: url(fonts/BBCBengali.ttf) format("opentype"); + unicode-range: U+400-200; +}'''; + + parseCss(input, errors: errors); + + expect(errors.isEmpty, false); + expect( + errors[0].toString(), + 'error on line 3, column 20: unicode first range can not be greater than ' + 'last\n' + ' ,\n' + '3 | unicode-range: U+400-200;\n' + ' | ^^^^^^^\n' + ' \''); + + final input2 = ''' +@font-face { + src: url(fonts/BBCBengali.ttf) format("opentype"); + unicode-range: U+12FFFF; +}'''; + + parseCss(input2, errors: errors..clear()); + + expect(errors.isEmpty, false); + expect( + errors[0].toString(), + 'error on line 3, column 20: unicode range must be less than 10FFFF\n' + ' ,\n' + '3 | unicode-range: U+12FFFF;\n' + ' | ^^^^^^\n' + ' \''); +} + +void testBadNesting() { + var errors = []; + + // Test for bad declaration in a nested rule. + final input = ''' +div { + width: 20px; + span + ul { color: blue; } + span + ul > #aaaa { + color: #ffghghgh; + } + background-color: red; +} +'''; + + parseCss(input, errors: errors); + expect(errors.length, 1); + var errorMessage = messages.messages[0]; + expect(errorMessage.message, contains('Bad hex number')); + expect(errorMessage.span, isNotNull); + expect(errorMessage.span!.start.line, 4); + expect(errorMessage.span!.start.column, 11); + expect(errorMessage.span!.text, '#ffghghgh'); + + // Test for bad selector syntax. + final input2 = ''' +div { + span + ul #aaaa > (3333) { + color: #ffghghgh; + } +} +'''; + parseCss(input2, errors: errors..clear()); + expect(errors.length, 4); + errorMessage = messages.messages[0]; + expect(errorMessage.message, contains(':, but found +')); + expect(errorMessage.span, isNotNull); + expect(errorMessage.span!.start.line, 1); + expect(errorMessage.span!.start.column, 7); + expect(errorMessage.span!.text, '+'); + + errorMessage = messages.messages[1]; + expect(errorMessage.message, contains('Unknown property value ul')); + expect(errorMessage.span, isNotNull); + expect(errorMessage.span!.start.line, 1); + expect(errorMessage.span!.start.column, 9); + expect(errorMessage.span!.text, 'ul'); + + errorMessage = messages.messages[2]; + expect(errorMessage.message, contains('expected }, but found >')); + expect(errorMessage.span, isNotNull); + expect(errorMessage.span!.start.line, 1); + expect(errorMessage.span!.start.column, 18); + expect(errorMessage.span!.text, '>'); + + errorMessage = messages.messages[3]; + expect(errorMessage.message, contains('premature end of file unknown CSS')); + expect(errorMessage.span, isNotNull); + expect(errorMessage.span!.start.line, 1); + expect(errorMessage.span!.start.column, 20); + expect(errorMessage.span!.text, '('); + + // Test for missing close braces and bad declaration. + final input3 = ''' +div { + span { + color: #green; +} +'''; + parseCss(input3, errors: errors..clear()); + expect(errors.length, 2); + errorMessage = messages.messages[0]; + expect(errorMessage.message, contains('Bad hex number')); + expect(errorMessage.span, isNotNull); + expect(errorMessage.span!.start.line, 2); + expect(errorMessage.span!.start.column, 11); + expect(errorMessage.span!.text, '#green'); + + errorMessage = messages.messages[1]; + expect(errorMessage.message, contains('expected }, but found end of file')); + expect(errorMessage.span, isNotNull); + expect(errorMessage.span!.start.line, 3); + expect(errorMessage.span!.start.column, 1); + expect(errorMessage.span!.text, '\n'); +} + +void main() { + glyph.ascii = true; + test('font-weight value errors', testUnsupportedFontWeights); + test('line-height value errors', testUnsupportedLineHeights); + test('bad selectors', testBadSelectors); + test('bad Hex values', testBadHexValues); + test('bad unicode ranges', testBadUnicode); + test('nested rules', testBadNesting); +} diff --git a/pkgs/csslib/test/escape_codes_test.dart b/pkgs/csslib/test/escape_codes_test.dart new file mode 100644 index 000000000..09730214c --- /dev/null +++ b/pkgs/csslib/test/escape_codes_test.dart @@ -0,0 +1,30 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:csslib/parser.dart'; +import 'package:test/test.dart'; + +import 'testing.dart'; + +void main() { + final errors = []; + + tearDown(errors.clear); + + group('handles escape codes', () { + group('in an identifier', () { + test('with trailing space', () { + final selectorAst = selector(r'.\35 00px', errors: errors); + expect(errors, isEmpty); + expect(compactOutput(selectorAst), r'.\35 00px'); + }); + + test('in an attribute selector value', () { + final selectorAst = selector(r'[elevation=\31]', errors: errors); + expect(errors, isEmpty); + expect(compactOutput(selectorAst), r'[elevation=\31]'); + }); + }); + }); +} diff --git a/pkgs/csslib/test/extend_test.dart b/pkgs/csslib/test/extend_test.dart new file mode 100644 index 000000000..0990490f7 --- /dev/null +++ b/pkgs/csslib/test/extend_test.dart @@ -0,0 +1,243 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:csslib/src/messages.dart'; +import 'package:test/test.dart'; + +import 'testing.dart'; + +void compileAndValidate(String input, String generated) { + var errors = []; + var stylesheet = compileCss(input, errors: errors, opts: options); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void simpleExtend() { + compileAndValidate(r''' +.error { + border: 1px red; + background-color: #fdd; +} +.seriousError { + @extend .error; + border-width: 3px; +} +''', r''' +.error, .seriousError { + border: 1px #f00; + background-color: #fdd; +} +.seriousError { + border-width: 3px; +}'''); +} + +void complexSelectors() { + compileAndValidate(r''' +.error { + border: 1px #f00; + background-color: #fdd; +} +.error.intrusion { + background-image: url("/image/hacked.png"); +} +.seriousError { + @extend .error; + border-width: 3px; +} +''', r''' +.error, .seriousError { + border: 1px #f00; + background-color: #fdd; +} +.error.intrusion, .seriousError.intrusion { + background-image: url("/image/hacked.png"); +} +.seriousError { + border-width: 3px; +}'''); + + compileAndValidate(r''' +a:hover { + text-decoration: underline; +} +.hoverlink { + @extend a:hover; +} +''', r''' +a:hover, .hoverlink { + text-decoration: underline; +} +.hoverlink { +}'''); +} + +void multipleExtends() { + compileAndValidate(r''' +.error { + border: 1px #f00; + background-color: #fdd; +} +.attention { + font-size: 3em; + background-color: #ff0; +} +.seriousError { + @extend .error; + @extend .attention; + border-width: 3px; +} +''', r''' +.error, .seriousError { + border: 1px #f00; + background-color: #fdd; +} +.attention, .seriousError { + font-size: 3em; + background-color: #ff0; +} +.seriousError { + border-width: 3px; +}'''); +} + +void chaining() { + compileAndValidate(r''' +.error { + border: 1px #f00; + background-color: #fdd; +} +.seriousError { + @extend .error; + border-width: 3px; +} +.criticalError { + @extend .seriousError; + position: fixed; + top: 10%; + bottom: 10%; + left: 10%; + right: 10%; +} +''', r''' +.error, .seriousError, .criticalError { + border: 1px #f00; + background-color: #fdd; +} +.seriousError, .criticalError { + border-width: 3px; +} +.criticalError { + position: fixed; + top: 10%; + bottom: 10%; + left: 10%; + right: 10%; +}'''); +} + +void nestedSelectors() { + compileAndValidate(r''' +a { + color: blue; + &:hover { + text-decoration: underline; + } +} + +#fake-links .link { + @extend a; +} +''', r''' +a, #fake-links .link { + color: #00f; +} +a:hover, #fake-links .link:hover { + text-decoration: underline; +} +#fake-links .link { +}'''); +} + +void nestedMulty() { + compileAndValidate(r''' +.btn { + display: inline-block; +} + +input[type="checkbox"].toggle-button { + color: red; + + + label { + @extend .btn; + } +} +''', r''' +.btn, input[type="checkbox"].toggle-button label { + display: inline-block; +} +input[type="checkbox"].toggle-button { + color: #f00; +} +input[type="checkbox"].toggle-button label { +}'''); +} + +void nWayExtends() { + compileAndValidate( + r''' +.btn > .btn { + margin-left: 5px; +} +input.second + label { + @extend .btn; +} +''', + '.btn > .btn, ' + 'input.second + label > .btn, ' + '.btn > input.second + label, ' + 'input.second + label > input.second + label, ' + 'input.second + label > input.second + label {\n' + ' margin-left: 5px;\n}\n' + 'input.second + label {\n' + '}'); + + // TODO(terry): Optimize merge selectors would be: + // + // .btn + .btn, input.second + label + .btn, input.second.btn + label { + // margin-left: 5px; + // } + // input.second + label { + // color: blue; + // } + compileAndValidate( + r''' +.btn + .btn { + margin-left: 5px; +} +input.second + label { + @extend .btn; + color: blue; +} +''', + '.btn + .btn, ' + 'input.second + label + .btn, ' + '.btn + input.second + label, ' + 'input.second + label + input.second + label, ' + 'input.second + label + input.second + label {\n' + ' margin-left: 5px;\n}\n' + 'input.second + label {\n' + ' color: #00f;\n}'); +} + +void main() { + test('Simple Extend', simpleExtend); + test('complex', complexSelectors); + test('multiple', multipleExtends); + test('chaining', chaining); + test('nested selectors', nestedSelectors); + test('nested many selector sequences', nestedMulty); + test('N-way extends', nWayExtends); +} diff --git a/pkgs/csslib/test/keyframes_test.dart b/pkgs/csslib/test/keyframes_test.dart new file mode 100644 index 000000000..3560c0d48 --- /dev/null +++ b/pkgs/csslib/test/keyframes_test.dart @@ -0,0 +1,26 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:csslib/src/messages.dart'; +import 'package:test/test.dart'; + +import 'testing.dart'; + +void main() { + test('keyframes', () { + final input = + r'@keyframes ping { 75%, 100% { transform: scale(2); opacity: 0; } }'; + var errors = []; + var stylesheet = compileCss(input, errors: errors, opts: options); + expect(errors, isEmpty); + final expected = r''' +@keyframes ping { + 75%, 100% { + transform: scale(2); + opacity: 0; + } +}'''; + expect(prettyPrint(stylesheet), expected); + }); +} diff --git a/pkgs/csslib/test/mixin_test.dart b/pkgs/csslib/test/mixin_test.dart new file mode 100644 index 000000000..684f914ef --- /dev/null +++ b/pkgs/csslib/test/mixin_test.dart @@ -0,0 +1,644 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:csslib/src/messages.dart'; +import 'package:test/test.dart'; + +import 'testing.dart'; + +void compileAndValidate(String input, String generated) { + var errors = []; + var stylesheet = compileCss(input, errors: errors, opts: options); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void compilePolyfillAndValidate(String input, String generated) { + var errors = []; + var stylesheet = polyFillCompileCss(input, errors: errors, opts: options); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void topLevelMixin() { + compileAndValidate(r''' +@mixin silly-links { + a { + color: blue; + background-color: red; + } +} + +@include silly-links; +''', r''' +a { + color: #00f; + background-color: #f00; +}'''); +} + +void topLevelMixinTwoIncludes() { + compileAndValidate(r''' +@mixin a { + a { + color: blue; + background-color: red; + } +} +@mixin b { + span { + color: black; + background-color: orange; + } +} +@include a; +@include b; +''', r''' +a { + color: #00f; + background-color: #f00; +} +span { + color: #000; + background-color: #ffa500; +}'''); +} + +/// Tests top-level mixins that includes another mixin. +void topLevelMixinMultiRulesets() { + compileAndValidate(r''' +@mixin a { + a { + color: blue; + background-color: red; + } +} +@mixin b { + #foo-id { + border-top: 1px solid red; + border-bottom: 2px solid green; + } +} +@mixin c { + span { + color: black; + background-color: orange; + } + @include b; +} +@include a; +@include c; +''', r''' +a { + color: #00f; + background-color: #f00; +} +span { + color: #000; + background-color: #ffa500; +} +#foo-id { + border-top: 1px solid #f00; + border-bottom: 2px solid #008000; +}'''); +} + +void topLevelMixinDeeplyNestedRulesets() { + compileAndValidate(r''' +@mixin a { + a { + color: blue; + background-color: red; + } +} +@mixin b { + #foo-id { + border-top: 1px solid red; + border-bottom: 2px solid green; + } +} +@mixin f { + #split-bar div { + border: 1px solid lightgray; + } +} +@mixin e { + #split-bar:visited { + color: gray; + } + @include f; +} +@mixin d { + a:hover { + cursor: arrow; + } + @include e +} +@mixin c { + @include a; + span { + color: black; + background-color: orange; + } + @include b; + @include d; +} +@include c; +''', r''' +a { + color: #00f; + background-color: #f00; +} +span { + color: #000; + background-color: #ffa500; +} +#foo-id { + border-top: 1px solid #f00; + border-bottom: 2px solid #008000; +} +a:hover { + cursor: arrow; +} +#split-bar:visited { + color: #808080; +} +#split-bar div { + border: 1px solid #d3d3d3; +}'''); +} + +/// Tests selector groups and other combinators. +void topLevelMixinSelectors() { + compileAndValidate(r''' +@mixin a { + a, b { + color: blue; + background-color: red; + } + div > span { + color: black; + background-color: orange; + } +} + +@include a; +''', r''' +a, b { + color: #00f; + background-color: #f00; +} +div > span { + color: #000; + background-color: #ffa500; +}'''); +} + +void declSimpleMixin() { + compileAndValidate(r''' +@mixin div-border { + border: 2px dashed red; +} +div { + @include div-border; +} +''', r''' +div { + border: 2px dashed #f00; +}'''); +} + +void declMixinTwoIncludes() { + compileAndValidate(r''' +@mixin div-border { + border: 2px dashed red; +} +@mixin div-color { + color: blue; +} +div { + @include div-border; + @include div-color; +} +''', r''' +div { + border: 2px dashed #f00; + color: #00f; +}'''); +} + +void declMixinNestedIncludes() { + compileAndValidate(r''' +@mixin div-border { + border: 2px dashed red; +} +@mixin div-padding { + padding: .5em; +} +@mixin div-margin { + margin: 5px; +} +@mixin div-color { + @include div-padding; + color: blue; + @include div-margin; +} +div { + @include div-border; + @include div-color; +} +''', r''' +div { + border: 2px dashed #f00; + padding: .5em; + color: #00f; + margin: 5px; +}'''); +} + +void declMixinDeeperNestedIncludes() { + compileAndValidate(r''' +@mixin div-border { + border: 2px dashed red; +} +@mixin div-padding { + padding: .5em; +} +@mixin div-margin { + margin: 5px; +} +@mixin div-color { + @include div-padding; + @include div-margin; +} +div { + @include div-border; + @include div-color; +} +''', r''' +div { + border: 2px dashed #f00; + padding: .5em; + margin: 5px; +}'''); +} + +void mixinArg() { + compileAndValidate(r''' +@mixin div-border-1 { + border: 2px dashed red; +} +@mixin div-border-2() { + border: 22px solid blue; +} +@mixin div-left(@dist) { + margin-left: @dist; +} +@mixin div-right(var-margin) { + margin-right: var(margin); +} +div-1 { + @include div-left(10px); + @include div-right(100px); + @include div-border-1; +} +div-2 { + @include div-left(20em); + @include div-right(5in); + @include div-border-2(); +} +div-3 { + @include div-border-1(); +} +div-4 { + @include div-border-2; +} +''', r''' +div-1 { + margin-left: 10px; + margin-right: 100px; + border: 2px dashed #f00; +} +div-2 { + margin-left: 20em; + margin-right: 5in; + border: 22px solid #00f; +} +div-3 { + border: 2px dashed #f00; +} +div-4 { + border: 22px solid #00f; +}'''); +} + +void mixinArgs() { + compileAndValidate(r''' +@mixin box-shadow(@shadows...) { + -moz-box-shadow: @shadows; + -webkit-box-shadow: @shadows; + box-shadow: var(shadows); +} + +.shadows { + @include box-shadow(0px 4px 5px #666, 2px 6px 10px #999); +}''', r''' +.shadowed { + -moz-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999; + -webkit-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999; + box-shadow: 0px 4px 5px #666, 2px 6px 10px #999; +} +'''); +} + +void mixinManyArgs() { + compileAndValidate(r''' +@mixin border(@border-values) { + border: @border-values +} + +.primary { + @include border(3px solid green); +} +''', r''' +.primary { + border: 3px solid #008000; +}'''); + + compileAndValidate(r''' +@mixin setup(@border-color, @border-style, @border-size, @color) { + border: @border-size @border-style @border-color; + color: @color; +} + +.primary { + @include setup(red, solid, 5px, blue); +} +''', r''' +.primary { + border: 5px solid #f00; + color: #00f; +}'''); + + // Test passing a declaration that is multiple parameters. + compileAndValidate(r''' +@mixin colors(@text, @background, @border) { + color: @text; + background-color: @background; + border-color: @border; +} + +@values: #ff0000, #00ff00, #0000ff; +.primary { + @include colors(@values); +} +''', r''' +var-values: #f00, #0f0, #00f; +.primary { + color: #f00; + background-color: #0f0; + border-color: #00f; +}'''); + + compilePolyfillAndValidate(r''' +@mixin colors(@text, @background, @border) { + color: @text; + background-color: @background; + border-color: @border; +} + +@values: #ff0000, #00ff00, #0000ff; +.primary { + @include colors(@values); +} +''', r''' +.primary { + color: #f00; + background-color: #0f0; + border-color: #00f; +}'''); +} + +void badDeclarationInclude() { + final errors = []; + final input = r''' +@mixin a { + #foo-id { + color: red; + } +} +@mixin b { + span { + border: 2px dashed red; + @include a; + } +} +@include b; +'''; + + compileCss(input, errors: errors, opts: options); + + expect(errors.isNotEmpty, true); + expect(errors.length, 1, reason: errors.toString()); + var error = errors[0]; + expect(error.message, 'Using top-level mixin a as a declaration'); + expect(error.span!.start.line, 8); + expect(error.span!.end.offset, 105); +} + +void badTopInclude() { + final errors = []; + final input = r''' +@mixin b { + color: red; +} + +@mixin a { + span { + border: 2px dashed red; + } + @include b; +} + +@include a; + '''; + + compileCss(input, errors: errors, opts: options); + + expect(errors.length, 1, reason: errors.toString()); + var error = errors[0]; + expect(error.message, 'Using declaration mixin b as top-level mixin'); + expect(error.span!.start.line, 8); + expect(error.span!.end.offset, 90); +} + +void emptyMixin() { + final errors = []; + final input = r''' +@mixin a { +} +@mixin b { + border: 2px dashed red; + @include a; +} +div { + @include b; +} + '''; + + var generated = r''' +div { + border: 2px dashed #f00; +}'''; + + var stylesheet = compileCss(input, errors: errors, opts: options); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void undefinedTopLevel() { + final errors = []; + final input = r''' +@mixin a { + @include b; +} +@mixin b { + span { + border: 2px dashed red; + } + @include a; +} + +@include b; + + '''; + + compileCss(input, errors: errors, opts: options); + + expect(errors.isNotEmpty, true); + expect(errors.length, 1, reason: errors.toString()); + var error = errors[0]; + expect(error.message, 'Undefined mixin b'); + expect(error.span!.start.line, 1); + expect(error.span!.start.offset, 14); +} + +void undefinedDeclaration() { + final errors = []; + final input = r''' +@mixin a { + @include b; +} +@mixin b { + border: 2px dashed red; + @include a; +} +div { + @include b; +} + '''; + + compileCss(input, errors: errors, opts: options); + + expect(errors.isNotEmpty, true); + expect(errors.length, 1, reason: errors.toString()); + var error = errors[0]; + expect(error.message, 'Undefined mixin b'); + expect(error.span!.start.line, 1); + expect(error.span!.start.offset, 14); +} + +void includeGrammar() { + compileAndValidate(r''' +@mixin a { + foo { color: red } +} + +@mixin b { + @include a; + @include a; +} + +@include b; +''', r''' +foo { + color: #f00; +} +foo { + color: #f00; +}'''); + + compileAndValidate(r''' +@mixin a { + color: red +} + +foo { + @include a; + @include a +} +''', r''' +foo { + color: #f00; + color: #f00; +}'''); + + var errors = []; + var input = r''' +@mixin a { + foo { color: red } +} + +@mixin b { + @include a + @include a +} + +@include b +'''; + + compileCss(input, errors: errors, opts: options); + + expect(errors, hasLength(4)); + expect(errors[0].describe, '7:4:parsing error expected ;'); + expect(errors[1].describe, '8:1:expected :, but found }'); + expect(errors[2].describe, '10:11:expected }, but found end of file'); + expect(errors[3].describe, '6:4:Using top-level mixin a as a declaration'); +} + +void main() { + group('Basic mixin', () { + test('include grammar', includeGrammar); + test('empty mixin content', emptyMixin); + }); + + group('Top-level mixin', () { + test('simple mixin', topLevelMixin); + test('mixin with two @includes', topLevelMixinTwoIncludes); + test('multi rulesets', topLevelMixinMultiRulesets); + test('multi rulesets and nesting', topLevelMixinDeeplyNestedRulesets); + test('selector groups', topLevelMixinSelectors); + }); + + group('Declaration mixin', () { + test('simple', declSimpleMixin); + test('with two @includes', declMixinTwoIncludes); + test('with includes', declMixinNestedIncludes); + test('with deeper nesting', declMixinDeeperNestedIncludes); + }); + + group('Mixin arguments', () { + test('simple arg', mixinArg); + test('many args', mixinArgs, skip: 'hangs at runtime'); + test('multiple args and var decls as args', mixinManyArgs); + }); + + group('Mixin warnings', () { + test('undefined top-level', undefinedTopLevel); + test('undefined declaration', undefinedDeclaration); + test('detect bad top-level as declaration', badDeclarationInclude); + test('detect bad declaration as top-level', badTopInclude); + }); +} diff --git a/pkgs/csslib/test/nested_test.dart b/pkgs/csslib/test/nested_test.dart new file mode 100644 index 000000000..4ec72ea08 --- /dev/null +++ b/pkgs/csslib/test/nested_test.dart @@ -0,0 +1,630 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:csslib/src/messages.dart'; +import 'package:test/test.dart'; + +import 'testing.dart'; + +void compileAndValidate(String input, String generated) { + var errors = []; + var stylesheet = compileCss(input, errors: errors, opts: simpleOptions); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void selectorVariations() { + final input1 = r'''html { color: red; }'''; + final generated1 = r'''html { + color: #f00; +}'''; + compileAndValidate(input1, generated1); + + final input2 = r'''button { span { height: 200 } }'''; + final generated2 = r'''button { +} +button span { + height: 200; +}'''; + compileAndValidate(input2, generated2); + + final input3 = r'''div { color: red; } button { span { height: 200 } }'''; + final generated3 = r'''div { + color: #f00; +} +button { +} +button span { + height: 200; +}'''; + compileAndValidate(input3, generated3); + + final input4 = r'''#header { color: red; h1 { font-size: 26px; } }'''; + final generated4 = r'''#header { + color: #f00; +} +#header h1 { + font-size: 26px; +}'''; + compileAndValidate(input4, generated4); + + final input5 = r''' +#header { + color: red; + h1 { font-size: 26px; } + background-color: blue; +}'''; + final generated5 = r'''#header { + color: #f00; + background-color: #00f; +} +#header h1 { + font-size: 26px; +}'''; + compileAndValidate(input5, generated5); + + final input6 = r'''html { body {color: red; }}'''; + final generated6 = r'''html { +} +html body { + color: #f00; +}'''; + compileAndValidate(input6, generated6); + + final input7 = r'''html body {color: red; }'''; + final generated7 = r'''html body { + color: #f00; +}'''; + compileAndValidate(input7, generated7); + + final input8 = r''' +html, body { color: red; } +button { height: 200 } +body { width: 300px; }'''; + final generated8 = r'''html, body { + color: #f00; +} +button { + height: 200; +} +body { + width: 300px; +}'''; + compileAndValidate(input8, generated8); + + final input9 = ''' +html, body { + color: red; + button { height: 200 } + div { width: 300px; } +}'''; + final generated9 = r'''html, body { + color: #f00; +} +html button, body button { + height: 200; +} +html div, body div { + width: 300px; +}'''; + compileAndValidate(input9, generated9); + + final input10 = ''' +html { + color: red; + button, div { height: 200 } + body { width: 300px; } +}'''; + final generated10 = r'''html { + color: #f00; +} +html button, html div { + height: 200; +} +html body { + width: 300px; +}'''; + compileAndValidate(input10, generated10); + + final input11 = ''' +html, body { + color: red; + button, div { height: 200 } + table { width: 300px; } +}'''; + final generated11 = r'''html, body { + color: #f00; +} +html button, body button, html div, body div { + height: 200; +} +html table, body table { + width: 300px; +}'''; + compileAndValidate(input11, generated11); + + final input12 = ''' +html, body { + color: red; + button, div { + span, a, ul { height: 200 } + } + table { width: 300px; } +}'''; + final generated12 = r'''html, body { + color: #f00; +} +''' + 'html button span, body button span, html div span, body div span, ' + 'html button a, body button a, html div a, body div a, html button ul, ' + r'''body button ul, html div ul, body div ul { + height: 200; +} +html table, body table { + width: 300px; +}'''; + compileAndValidate(input12, generated12); + + final input13 = r''' +#header { + div { + width: 100px; + a { height: 200px; } + } + color: blue; +} +span { color: #1f1f1f; } +'''; + final generated13 = r'''#header { + color: #00f; +} +#header div { + width: 100px; +} +#header div a { + height: 200px; +} +span { + color: #1f1f1f; +}'''; + compileAndValidate(input13, generated13); +} + +void simpleNest() { + final input = ''' +div span { color: green; } +#header { + color: red; + h1 { + font-size: 26px; + font-weight: bold; + } + p { + font-size: 12px; + a { + text-decoration: none; + } + } + background-color: blue; +} +div > span[attr="foo"] { color: yellow; } +'''; + + final generated = r'''div span { + color: #008000; +} +#header { + color: #f00; + background-color: #00f; +} +#header h1 { + font-size: 26px; + font-weight: bold; +} +#header p { + font-size: 12px; +} +#header p a { + text-decoration: none; +} +div > span[attr="foo"] { + color: #ff0; +}'''; + compileAndValidate(input, generated); +} + +void complexNest() { + final input = ''' +@font-face { font-family: arial; } +div { color: #f0f0f0; } +#header + div { + color: url(abc.png); + *[attr="bar"] { + font-size: 26px; + font-weight: bold; + } + p~ul { + font-size: 12px; + :not(p) { + text-decoration: none; + div > span[attr="foo"] { color: yellow; } + } + } + background-color: blue; + span { + color: red; + .one { color: blue; } + .two { color: green; } + .three { color: yellow; } + .four { + .four-1 { background-color: #00000f; } + .four-2 { background-color: #0000ff; } + .four-3 { background-color: #000fff; } + .four-4 { + height: 44px; + .four-4-1 { height: 10px; } + .four-4-2 { height: 20px; } + .four-4-3 { height: 30px; } + width: 44px; + } + } + } +} +span { color: #1f1f2f; } +'''; + + final generated = r'''@font-face { + font-family: arial; +} +div { + color: #f0f0f0; +} +#header + div { + color: url("abc.png"); + background-color: #00f; +} +#header + div *[attr="bar"] { + font-size: 26px; + font-weight: bold; +} +#header + div p ~ ul { + font-size: 12px; +} +#header + div p ~ ul :not(p) { + text-decoration: none; +} +#header + div p ~ ul :not(p) div > span[attr="foo"] { + color: #ff0; +} +#header + div span { + color: #f00; +} +#header + div span .one { + color: #00f; +} +#header + div span .two { + color: #008000; +} +#header + div span .three { + color: #ff0; +} +#header + div span .four .four-1 { + background-color: #00000f; +} +#header + div span .four .four-2 { + background-color: #00f; +} +#header + div span .four .four-3 { + background-color: #000fff; +} +#header + div span .four .four-4 { + height: 44px; + width: 44px; +} +#header + div span .four .four-4 .four-4-1 { + height: 10px; +} +#header + div span .four .four-4 .four-4-2 { + height: 20px; +} +#header + div span .four .four-4 .four-4-3 { + height: 30px; +} +span { + color: #1f1f2f; +}'''; + + compileAndValidate(input, generated); +} + +void mediaNesting() { + final input = r''' +@media screen and (-webkit-min-device-pixel-ratio:0) { + #toggle-all { + image: url(test.jpb); + div, table { + background: none; + a { width: 100px; } + } + color: red; + } +} +'''; + final generated = r''' +@media screen AND (-webkit-min-device-pixel-ratio:0) { + #toggle-all { + image: url("test.jpb"); + color: #f00; + } + #toggle-all div, #toggle-all table { + background: none; + } + #toggle-all div a, #toggle-all table a { + width: 100px; + } +}'''; + + compileAndValidate(input, generated); +} + +void simpleThis() { + final input = '''#header { + h1 { + font-size: 26px; + font-weight: bold; + } + p { font-size: 12px; + a { text-decoration: none; + &:hover { border-width: 1px } + } + } +} +'''; + + final generated = r'''#header { +} +#header h1 { + font-size: 26px; + font-weight: bold; +} +#header p { + font-size: 12px; +} +#header p a { + text-decoration: none; +} +#header p a:hover { + border-width: 1px; +}'''; + + compileAndValidate(input, generated); +} + +void complexThis() { + final input1 = r''' +.light { + .leftCol { + .textLink { + color: fooL1; + &:hover { color: barL1;} + } + .picLink { + background-image: url(/fooL1.jpg); + &:hover { background-image: url(/barL1.jpg);} + } + .textWithIconLink { + color: fooL2; + background-image: url(/fooL2.jpg); + &:hover { color: barL2; background-image: url(/barL2.jpg);} + } + } +}'''; + + final generated1 = r'''.light { +} +.light .leftCol .textLink { + color: fooL1; +} +.light .leftCol .textLink:hover { + color: barL1; +} +.light .leftCol .picLink { + background-image: url("/fooL1.jpg"); +} +.light .leftCol .picLink:hover { + background-image: url("/barL1.jpg"); +} +.light .leftCol .textWithIconLink { + color: fooL2; + background-image: url("/fooL2.jpg"); +} +.light .leftCol .textWithIconLink:hover { + color: barL2; + background-image: url("/barL2.jpg"); +}'''; + + compileAndValidate(input1, generated1); + + final input2 = r''' +.textLink { + .light .leftCol & { + color: fooL1; + &:hover { color: barL1; } + } + .light .rightCol & { + color: fooL3; + &:hover { color: barL3; } + } +}'''; + + final generated2 = r''' +.textLink { +} +.light .leftCol .textLink { + color: fooL1; +} +.light .leftCol .textLink:hover { + color: barL1; +} +.light .rightCol .textLink { + color: fooL3; +} +.light .rightCol .textLink:hover { + color: barL3; +}'''; + + compileAndValidate(input2, generated2); +} + +void variationsThis() { + final input1 = r''' +.textLink { + a { + light .leftCol & { + color: red; + } + } +}'''; + final generated1 = r'''.textLink { +} +light .leftCol .textLink a { + color: #f00; +}'''; + + compileAndValidate(input1, generated1); + + final input2 = r'''.textLink { + a { + & light .leftCol & { + color: red; + } + } +}'''; + final generated2 = r'''.textLink { +} +.textLink a light .leftCol .textLink a { + color: #f00; +}'''; + compileAndValidate(input2, generated2); + + final input3 = r''' +.textLink { + a { + & light .leftCol { color: red; } + } +}'''; + final generated3 = r'''.textLink { +} +.textLink a light .leftCol { + color: #f00; +}'''; + compileAndValidate(input3, generated3); + + final input4 = r''' +.textLink { + a { + & light .leftCol { color: red; } + &:hover { width: 100px; } + } +}'''; + final generated4 = r'''.textLink { +} +.textLink a light .leftCol { + color: #f00; +} +.textLink a:hover { + width: 100px; +}'''; + compileAndValidate(input4, generated4); + + final input5 = r'''.textLink { a { &:hover { color: red; } } }'''; + final generated5 = r'''.textLink { +} +.textLink a:hover { + color: #f00; +}'''; + + compileAndValidate(input5, generated5); + + final input6 = r'''.textLink { &:hover { color: red; } }'''; + final generated6 = r'''.textLink { +} +.textLink:hover { + color: #f00; +}'''; + compileAndValidate(input6, generated6); + + final input7 = r'''.textLink { a { & + & { color: red; } } }'''; + final generated7 = r'''.textLink { +} +.textLink a + .textLink a { + color: #f00; +}'''; + compileAndValidate(input7, generated7); + + final input8 = r'''.textLink { a { & { color: red; } } }'''; + final generated8 = r'''.textLink { +} +.textLink a { + color: #f00; +}'''; + compileAndValidate(input8, generated8); + + final input9 = r'''.textLink { a { & ~ & { color: red; } } }'''; + final generated9 = r'''.textLink { +} +.textLink a ~ .textLink a { + color: #f00; +}'''; + compileAndValidate(input9, generated9); + + final input10 = r'''.textLink { a { & & { color: red; } } }'''; + final generated10 = r'''.textLink { +} +.textLink a .textLink a { + color: #f00; +}'''; + compileAndValidate(input10, generated10); +} + +void thisCombinator() { + var input = r''' +.btn { + color: red; +} +.btn + .btn { + margin-left: 5px; +} +input.second { + & + label { + color: blue; + } +} +'''; + + var generated = r'''.btn { + color: #f00; +} +.btn + .btn { + margin-left: 5px; +} +input.second { +} +input.second + label { + color: #00f; +}'''; + + compileAndValidate(input, generated); +} + +void main() { + test('Selector and Nested Variations', selectorVariations); + test('Simple nesting', simpleNest); + test('Complex nesting', complexNest); + test('@media nesting', mediaNesting); + test('Simple &', simpleThis); + test('Variations &', variationsThis); + test('Complex &', complexThis); + test('& with + selector', thisCombinator); +} diff --git a/pkgs/csslib/test/repros_test.dart b/pkgs/csslib/test/repros_test.dart new file mode 100644 index 000000000..ef359ca63 --- /dev/null +++ b/pkgs/csslib/test/repros_test.dart @@ -0,0 +1,61 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:csslib/parser.dart'; +import 'package:csslib/visitor.dart'; +import 'package:test/test.dart'; + +const options = PreprocessorOptions( + useColors: false, + warningsAsErrors: true, + inputFile: 'memory', +); + +void main() { + // Repro test for https://github.com/dart-lang/csslib/issues/136. + test('repro_136', () { + final errors = []; + + final css = ''' +.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), +.hero.is-white strong { + color: inherit; +} +'''; + final stylesheet = parse(css, errors: errors, options: options); + expect(stylesheet.topLevels, hasLength(1)); + var ruleset = stylesheet.topLevels.first as RuleSet; + + // This should be length 2. + expect(ruleset.selectorGroup!.selectors, hasLength(1)); + + // This test is expected to start to fail once we better support pseudo + // selectors. + // This should be empty. + expect(errors, hasLength(3)); + }); + + // Repro test for https://github.com/dart-lang/csslib/issues/171. + test('repro_171', () { + final errors = []; + var stylesheet = + parse('body { width: 1000 px; }', errors: errors, options: options); + expect(errors, isEmpty); + + expect(stylesheet.topLevels, hasLength(1)); + var ruleset = stylesheet.topLevels.first as RuleSet; + expect(ruleset.selectorGroup!.selectors, hasLength(1)); + expect(ruleset.declarationGroup.declarations, hasLength(1)); + + errors.clear(); + stylesheet = + parse('body { width: 1000px; }', errors: errors, options: options); + expect(errors, isEmpty); + + expect(stylesheet.topLevels, hasLength(1)); + ruleset = stylesheet.topLevels.first as RuleSet; + expect(ruleset.selectorGroup!.selectors, hasLength(1)); + expect(ruleset.declarationGroup.declarations, hasLength(1)); + }); +} diff --git a/pkgs/csslib/test/selector_test.dart b/pkgs/csslib/test/selector_test.dart new file mode 100644 index 000000000..6d63cf83f --- /dev/null +++ b/pkgs/csslib/test/selector_test.dart @@ -0,0 +1,92 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:csslib/parser.dart'; +import 'package:term_glyph/term_glyph.dart' as glyph; +import 'package:test/test.dart'; + +import 'testing.dart'; + +void testSelectorSuccesses() { + var errors = []; + var selectorAst = selector('#div .foo', errors: errors); + expect(errors.isEmpty, true, reason: errors.toString()); + expect('#div .foo', compactOutput(selectorAst)); + + // Valid selectors for class names. + selectorAst = selector('.foo', errors: errors..clear()); + expect(errors.isEmpty, true, reason: errors.toString()); + expect('.foo', compactOutput(selectorAst)); + + selectorAst = selector('.foobar .xyzzy', errors: errors..clear()); + expect(errors.isEmpty, true, reason: errors.toString()); + expect('.foobar .xyzzy', compactOutput(selectorAst)); + + selectorAst = selector('.foobar .a-story .xyzzy', errors: errors..clear()); + expect(errors.isEmpty, true, reason: errors.toString()); + expect('.foobar .a-story .xyzzy', compactOutput(selectorAst)); + + selectorAst = + selector('.foobar .xyzzy .a-story .b-story', errors: errors..clear()); + expect(errors.isEmpty, true, reason: errors.toString()); + expect('.foobar .xyzzy .a-story .b-story', compactOutput(selectorAst)); + + // Valid selectors for element IDs. + selectorAst = selector('#id1', errors: errors..clear()); + expect(errors.isEmpty, true, reason: errors.toString()); + expect('#id1', compactOutput(selectorAst)); + + selectorAst = selector('#id-number-3', errors: errors..clear()); + expect(errors.isEmpty, true, reason: errors.toString()); + expect('#id-number-3', compactOutput(selectorAst)); + + selectorAst = selector('#_privateId', errors: errors..clear()); + expect(errors.isEmpty, true, reason: errors.toString()); + expect('#_privateId', compactOutput(selectorAst)); + + selectorAst = selector(':host', errors: errors..clear()); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(compactOutput(selectorAst), ':host'); + + selectorAst = selector(':host(.foo)', errors: errors..clear()); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(compactOutput(selectorAst), ':host(.foo)'); + + selectorAst = selector(':host-context(.foo)', errors: errors..clear()); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(compactOutput(selectorAst), ':host-context(.foo)'); +} + +// TODO(terry): Move this failure case to a failure_test.dart when the analyzer +// and validator exit then they'll be a bunch more checks. +void testSelectorFailures() { + var errors = []; + + // Test for invalid class name (can't start with number). + selector('.foobar .1a-story .xyzzy', errors: errors); + expect(errors.isEmpty, false); + expect( + errors[0].toString(), + 'error on line 1, column 9: name must start with a alpha character, but ' + 'found a number\n' + ' ,\n' + '1 | .foobar .1a-story .xyzzy\n' + ' | ^^\n' + ' \''); + + selector(':host()', errors: errors..clear()); + expect( + errors.first.toString(), + 'error on line 1, column 7: expected a selector argument, but found )\n' + ' ,\n' + '1 | :host()\n' + ' | ^\n' + ' \''); +} + +void main() { + glyph.ascii = true; + test('Valid Selectors', testSelectorSuccesses); + test('Invalid Selectors', testSelectorFailures); +} diff --git a/pkgs/csslib/test/testing.dart b/pkgs/csslib/test/testing.dart new file mode 100644 index 000000000..2c76e58f1 --- /dev/null +++ b/pkgs/csslib/test/testing.dart @@ -0,0 +1,81 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// Common definitions used for setting up the test environment. +library; + +import 'package:csslib/parser.dart'; +import 'package:csslib/visitor.dart'; + +export 'package:csslib/src/preprocessor_options.dart'; + +const PreprocessorOptions simpleOptionsWithCheckedAndWarningsAsErrors = + PreprocessorOptions( + useColors: false, + checked: true, + warningsAsErrors: true, + inputFile: 'memory', +); + +const PreprocessorOptions simpleOptions = + PreprocessorOptions(useColors: false, inputFile: 'memory'); + +const PreprocessorOptions options = PreprocessorOptions( + useColors: false, warningsAsErrors: true, inputFile: 'memory'); + +/// Spin-up CSS parser in checked mode to detect any problematic CSS. Normally, +/// CSS will allow any property/value pairs regardless of validity; all of our +/// tests (by default) will ensure that the CSS is really valid. +StyleSheet parseCss(String cssInput, + {List? errors, PreprocessorOptions? opts}) => + parse(cssInput, + errors: errors, + options: opts ?? simpleOptionsWithCheckedAndWarningsAsErrors); + +/// Spin-up CSS parser in checked mode to detect any problematic CSS. Normally, +/// CSS will allow any property/value pairs regardless of validity; all of our +/// tests (by default) will ensure that the CSS is really valid. +StyleSheet compileCss(String cssInput, + {List? errors, + PreprocessorOptions? opts, + bool polyfill = false, + List? includes}) => + compile(cssInput, + errors: errors, + options: opts ?? simpleOptionsWithCheckedAndWarningsAsErrors, + polyfill: polyfill, + includes: includes); + +StyleSheet polyFillCompileCss(String input, + {List? errors, PreprocessorOptions? opts}) => + compileCss(input, errors: errors, polyfill: true, opts: opts); + +/// Pretty printer for CSS. +String prettyPrint(StyleSheet ss) { + // Walk the tree testing basic Visitor class. + walkTree(ss); + return (CssPrinter()..visitTree(ss, pretty: true)).toString(); +} + +/// Helper function to emit compact (non-pretty printed) CSS for suite test +/// comparisons. Spaces, new lines, etc. are reduced for easier comparisons of +/// expected suite test results. +String compactOutput(StyleSheet ss) { + walkTree(ss); + return (CssPrinter()..visitTree(ss, pretty: false)).toString(); +} + +String printExpressions(Expressions node) { + var printer = CssPrinter(); + // TODO: It would be nice if TreeNode had an `accept` method. + printer.visitExpressions(node); + return printer.toString(); +} + +/// Walks the style sheet tree does nothing; insures the basic walker works. +void walkTree(StyleSheet ss) { + Visitor().visitTree(ss); +} + +String dumpTree(StyleSheet ss) => treeToDebugString(ss); diff --git a/pkgs/csslib/test/third_party_samples_test.dart b/pkgs/csslib/test/third_party_samples_test.dart new file mode 100644 index 000000000..f4aee700d --- /dev/null +++ b/pkgs/csslib/test/third_party_samples_test.dart @@ -0,0 +1,43 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@TestOn('vm') +library; + +import 'dart:io'; + +import 'package:csslib/parser.dart'; +import 'package:path/path.dart' as path; +import 'package:test/test.dart'; + +const testOptions = PreprocessorOptions( + useColors: false, + checked: false, + warningsAsErrors: true, + inputFile: 'memory', +); + +void testCSSFile(File cssFile) { + final errors = []; + final css = cssFile.readAsStringSync(); + final stylesheet = parse(css, errors: errors, options: testOptions); + + expect(stylesheet, isNotNull); + expect(errors, isEmpty, reason: errors.toString()); +} + +void main() async { + // Iterate over all sub-folders of third_party, + // and then all css files in those. + final thirdParty = path.join(Directory.current.path, 'third_party'); + for (var entity in Directory(thirdParty).listSync()) { + if (await FileSystemEntity.isDirectory(entity.path)) { + for (var element in Directory(entity.path).listSync()) { + if (element is File && element.uri.pathSegments.last.endsWith('.css')) { + test(element.uri.pathSegments.last, () => testCSSFile(element)); + } + } + } + } +} diff --git a/pkgs/csslib/test/var_test.dart b/pkgs/csslib/test/var_test.dart new file mode 100644 index 000000000..b3b09333e --- /dev/null +++ b/pkgs/csslib/test/var_test.dart @@ -0,0 +1,952 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:csslib/src/messages.dart'; +import 'package:term_glyph/term_glyph.dart' as glyph; +import 'package:test/test.dart'; + +import 'testing.dart'; + +void compileAndValidate(String input, String generated) { + var errors = []; + var stylesheet = compileCss(input, errors: errors, opts: options); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void compilePolyfillAndValidate(String input, String generated) { + var errors = []; + var stylesheet = polyFillCompileCss(input, errors: errors, opts: options); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); +} + +void simpleVar() { + final input = ''' +:root { + var-color-background: red; + var-color-foreground: blue; + + var-c: #00ff00; + var-b: var(c); + var-a: var(b); + var-level-1-normal: 1px; +} +.testIt { + color: var(color-foreground); + background: var(color-background); + border-radius: var(level-1-normal); +} +'''; + + final generated = ''' +:root { + var-color-background: #f00; + var-color-foreground: #00f; + var-c: #0f0; + var-b: var(c); + var-a: var(b); + var-level-1-normal: 1px; +} +.testIt { + color: var(color-foreground); + background: var(color-background); + border-radius: var(level-1-normal); +}'''; + + final generatedPolyfill = ''' +:root { +} +.testIt { + color: #00f; + background: #f00; + border-radius: 1px; +}'''; + + compileAndValidate(input, generated); + compilePolyfillAndValidate(input, generatedPolyfill); +} + +void expressionsVar() { + final input = ''' +:root { + var-color-background: red; + var-color-foreground: blue; + + var-c: #00ff00; + var-b: var(c); + var-a: var(b); + + var-image: url(test.png); + + var-b-width: 20cm; + var-m-width: 33%; + var-b-height: 30EM; + var-width: .6in; + var-length: 1.2in; + var-web-stuff: -10Px; + var-rgba: rgba(10,20,255); + var-transition: color 0.4s; + var-transform: rotate(20deg); + var-content: "✔"; + var-text-shadow: 0 -1px 0 #bfbfbf; + var-font-family: Gentium; + var-src: url("http://example.com/fonts/Gentium.ttf"); + var-src-1: local(Gentium Bold), local(Gentium-Bold), url("GentiumBold.ttf"); + var-unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF; + var-unicode-range-1: U+0A-FF, U+980-9FF, U+????, U+3???; + var-grid-columns: 10px ("content" 1fr 10px) [4]; +} + +.testIt { + color: var(color-foreground); + background: var(c); + background-image: var(image); + + border-width: var(b-width); + margin-width: var(m-width); + border-height: var(b-height); + width: var(width); + length: var(length); + -web-stuff: var(web-stuff); + background-color: var(rgba); + + transition: var(transition); + transform: var(transform); + content: var(content); + text-shadow: var(text-shadow); +} + +@font-face { + font-family: var(font-family); + src: var(src); + unicode-range: var(unicode-range); +} + +@font-face { + font-family: var(font-family); + src: var(src-1); + unicode-range: var(unicode-range-1); +} + +.foobar { + grid-columns: var(grid-columns); +} +'''; + + final generated = ''' +:root { + var-color-background: #f00; + var-color-foreground: #00f; + var-c: #0f0; + var-b: var(c); + var-a: var(b); + var-image: url("test.png"); + var-b-width: 20cm; + var-m-width: 33%; + var-b-height: 30em; + var-width: .6in; + var-length: 1.2in; + var-web-stuff: -10px; + var-rgba: rgba(10, 20, 255); + var-transition: color 0.4s; + var-transform: rotate(20deg); + var-content: "✔"; + var-text-shadow: 0 -1px 0 #bfbfbf; + var-font-family: Gentium; + var-src: url("http://example.com/fonts/Gentium.ttf"); + var-src-1: local(Gentium Bold), local(Gentium-Bold), url("GentiumBold.ttf"); + var-unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF; + var-unicode-range-1: U+0A-FF, U+980-9FF, U+????, U+3???; + var-grid-columns: 10px ("content" 1fr 10px) [4]; +} +.testIt { + color: var(color-foreground); + background: var(c); + background-image: var(image); + border-width: var(b-width); + margin-width: var(m-width); + border-height: var(b-height); + width: var(width); + length: var(length); + -web-stuff: var(web-stuff); + background-color: var(rgba); + transition: var(transition); + transform: var(transform); + content: var(content); + text-shadow: var(text-shadow); +} +@font-face { + font-family: var(font-family); + src: var(src); + unicode-range: var(unicode-range); +} +@font-face { + font-family: var(font-family); + src: var(src-1); + unicode-range: var(unicode-range-1); +} +.foobar { + grid-columns: var(grid-columns); +}'''; + + compileAndValidate(input, generated); + + var generatedPolyfill = r''' +:root { +} +.testIt { + color: #00f; + background: #0f0; + background-image: url("test.png"); + border-width: 20cm; + margin-width: 33%; + border-height: 30em; + width: .6in; + length: 1.2in; + -web-stuff: -10px; + background-color: rgba(10, 20, 255); + transition: color 0.4s; + transform: rotate(20deg); + content: "✔"; + text-shadow: 0 -1px 0 #bfbfbf; +} +@font-face { + font-family: Gentium; + src: url("http://example.com/fonts/Gentium.ttf"); + unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF; +} +@font-face { + font-family: Gentium; + src: local(Gentium Bold), local(Gentium-Bold), url("GentiumBold.ttf"); + unicode-range: U+0A-FF, U+980-9FF, U+????, U+3???; +} +.foobar { + grid-columns: 10px ("content" 1fr 10px) [4]; +}'''; + + compilePolyfillAndValidate(input, generatedPolyfill); +} + +void defaultVar() { + final input = ''' +:root { + var-color-background: red; + var-color-foreground: blue; + + var-a: var(b, #0a0); + var-b: var(c, #0b0); + var-c: #00ff00; + + var-image: url(test.png); + + var-b-width: 20cm; + var-m-width: 33%; + var-b-height: 30EM; +} + +.test { + background-color: var(test, orange); +} + +body { + background: var(a) var(image) no-repeat right top; +} + +div { + background: var(color-background) url('img_tree.png') no-repeat right top; +} + +.test-2 { + background: var(color-background) var(image-2, url('img_1.png')) + no-repeat right top; +} + +.test-3 { + background: var(color-background) var(image) no-repeat right top; +} + +.test-4 { + background: #ffff00 var(image) no-repeat right top; +} + +.test-5 { + background: var(test-color, var(a)) var(image) no-repeat right top; +} + +.test-6 { + border: red var(a-1, solid 20px); +} +'''; + + final generated = ''' +:root { + var-color-background: #f00; + var-color-foreground: #00f; + var-a: var(b, #0a0); + var-b: var(c, #0b0); + var-c: #0f0; + var-image: url("test.png"); + var-b-width: 20cm; + var-m-width: 33%; + var-b-height: 30em; +} +.test { + background-color: var(test, #ffa500); +} +body { + background: var(a) var(image) no-repeat right top; +} +div { + background: var(color-background) url("img_tree.png") no-repeat right top; +} +.test-2 { + background: var(color-background) var(image-2, url("img_1.png")) no-repeat right top; +} +.test-3 { + background: var(color-background) var(image) no-repeat right top; +} +.test-4 { + background: #ff0 var(image) no-repeat right top; +} +.test-5 { + background: var(test-color, var(a)) var(image) no-repeat right top; +} +.test-6 { + border: #f00 var(a-1, solid 20px); +}'''; + + compileAndValidate(input, generated); + + var generatedPolyfill = r''' +:root { +} +.test { + background-color: #ffa500; +} +body { + background: #0a0 url("test.png") no-repeat right top; +} +div { + background: #f00 url("img_tree.png") no-repeat right top; +} +.test-2 { + background: #f00 url("img_1.png") no-repeat right top; +} +.test-3 { + background: #f00 url("test.png") no-repeat right top; +} +.test-4 { + background: #ff0 url("test.png") no-repeat right top; +} +.test-5 { + background: #0a0 url("test.png") no-repeat right top; +} +.test-6 { + border: #f00 solid 20px; +}'''; + + compilePolyfillAndValidate(input, generatedPolyfill); +} + +void undefinedVars() { + final errors = []; + final input = ''' +:root { + var-color-background: red; + var-color-foreground: blue; + + var-a: var(b); + var-b: var(c); + var-c: #00ff00; + + var-one: var(two); + var-two: var(one); + + var-four: var(five); + var-five: var(six); + var-six: var(four); + + var-def-1: var(def-2); + var-def-2: var(def-3); + var-def-3: var(def-2); +} + +.testIt { + color: var(color-foreground); + background: var(color-background); +} +.test-1 { + color: var(c); +} +.test-2 { + color: var(one); + background: var(six); +} +'''; + + final generatedPolyfill = ''' +:root { +} +.testIt { + color: #00f; + background: #f00; +} +.test-1 { + color: #0f0; +} +.test-2 { + color: ; + background: ; +}'''; + + var errorStrings = [ + 'error on line 5, column 14: Variable is not defined.\n' + ' ,\n' + '5 | var-a: var(b);\n' + ' | ^^\n' + ' \'', + 'error on line 6, column 14: Variable is not defined.\n' + ' ,\n' + '6 | var-b: var(c);\n' + ' | ^^\n' + ' \'', + 'error on line 9, column 16: Variable is not defined.\n' + ' ,\n' + '9 | var-one: var(two);\n' + ' | ^^^^\n' + ' \'', + 'error on line 12, column 17: Variable is not defined.\n' + ' ,\n' + '12 | var-four: var(five);\n' + ' | ^^^^^\n' + ' \'', + 'error on line 13, column 17: Variable is not defined.\n' + ' ,\n' + '13 | var-five: var(six);\n' + ' | ^^^^\n' + ' \'', + 'error on line 16, column 18: Variable is not defined.\n' + ' ,\n' + '16 | var-def-1: var(def-2);\n' + ' | ^^^^^^\n' + ' \'', + 'error on line 17, column 18: Variable is not defined.\n' + ' ,\n' + '17 | var-def-2: var(def-3);\n' + ' | ^^^^^^\n' + ' \'', + ]; + + var generated = r''' +:root { + var-color-background: #f00; + var-color-foreground: #00f; + var-a: var(b); + var-b: var(c); + var-c: #0f0; + var-one: var(two); + var-two: var(one); + var-four: var(five); + var-five: var(six); + var-six: var(four); + var-def-1: var(def-2); + var-def-2: var(def-3); + var-def-3: var(def-2); +} +.testIt { + color: var(color-foreground); + background: var(color-background); +} +.test-1 { + color: var(c); +} +.test-2 { + color: var(one); + background: var(six); +}'''; + var testBitMap = 0; + + compileAndValidate(input, generated); + + var stylesheet = + polyFillCompileCss(input, errors: errors..clear(), opts: options); + + expect(errors.length, errorStrings.length, reason: errors.toString()); + testBitMap = 0; + + outer: + for (var error in errors) { + var errorString = error.toString(); + for (var i = 0; i < errorStrings.length; i++) { + if (errorString == errorStrings[i]) { + testBitMap |= 1 << i; + continue outer; + } + } + fail('Unexpected error string: $errorString'); + } + expect(testBitMap, equals((1 << errorStrings.length) - 1)); + expect(prettyPrint(stylesheet), generatedPolyfill); +} + +void parserVar() { + final input = ''' +:root { + var-color-background: red; + var-color-foreground: blue; + + var-c: #00ff00; + var-b: var(c); + var-a: var(b); + + var-image: url(test.png); + + var-b-width: 20cm; + var-m-width: 33%; + var-b-height: 30EM; + var-width: .6in; + var-length: 1.2in; + var-web-stuff: -10Px; + var-rgba: rgba(10,20,255); + var-transition: color 0.4s; + var-transform: rotate(20deg); + var-content: "✔"; + var-text-shadow: 0 -1px 0 #bfbfbf; + var-font-family: Gentium; + var-src: url("http://example.com/fonts/Gentium.ttf"); + var-src-1: local(Gentium Bold), local(Gentium-Bold), url("GentiumBold.ttf"); + var-unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF; + var-unicode-range-1: U+0A-FF, U+980-9FF, U+????, U+3???; + var-grid-columns: 10px ("content" 1fr 10px) [4]; +} + +.testIt { + color: var(color-foreground); + background: var(c); + background-image: var(image); + + border-width: var(b-width); + margin-width: var(m-width); + border-height: var(b-height); + width: var(width); + length: var(length); + -web-stuff: var(web-stuff); + background-color: var(rgba); + + transition: var(transition); + transform: var(transform); + content: var(content); + text-shadow: var(text-shadow); +} + +@font-face { + font-family: var(font-family); + src: var(src); + unicode-range: var(unicode-range); +} + +@font-face { + font-family: var(font-family); + src: var(src-1); + unicode-range: var(unicode-range-1); +} + +.foobar { + grid-columns: var(grid-columns); +} +'''; + + final generated = ''' +:root { + var-color-background: #f00; + var-color-foreground: #00f; + var-c: #0f0; + var-b: var(c); + var-a: var(b); + var-image: url("test.png"); + var-b-width: 20cm; + var-m-width: 33%; + var-b-height: 30em; + var-width: .6in; + var-length: 1.2in; + var-web-stuff: -10px; + var-rgba: rgba(10, 20, 255); + var-transition: color 0.4s; + var-transform: rotate(20deg); + var-content: "✔"; + var-text-shadow: 0 -1px 0 #bfbfbf; + var-font-family: Gentium; + var-src: url("http://example.com/fonts/Gentium.ttf"); + var-src-1: local(Gentium Bold), local(Gentium-Bold), url("GentiumBold.ttf"); + var-unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF; + var-unicode-range-1: U+0A-FF, U+980-9FF, U+????, U+3???; + var-grid-columns: 10px ("content" 1fr 10px) [4]; +} +.testIt { + color: var(color-foreground); + background: var(c); + background-image: var(image); + border-width: var(b-width); + margin-width: var(m-width); + border-height: var(b-height); + width: var(width); + length: var(length); + -web-stuff: var(web-stuff); + background-color: var(rgba); + transition: var(transition); + transform: var(transform); + content: var(content); + text-shadow: var(text-shadow); +} +@font-face { + font-family: var(font-family); + src: var(src); + unicode-range: var(unicode-range); +} +@font-face { + font-family: var(font-family); + src: var(src-1); + unicode-range: var(unicode-range-1); +} +.foobar { + grid-columns: var(grid-columns); +}'''; + + compileAndValidate(input, generated); + + var generatedPolyfill = r''' +:root { +} +.testIt { + color: #00f; + background: #0f0; + background-image: url("test.png"); + border-width: 20cm; + margin-width: 33%; + border-height: 30em; + width: .6in; + length: 1.2in; + -web-stuff: -10px; + background-color: rgba(10, 20, 255); + transition: color 0.4s; + transform: rotate(20deg); + content: "✔"; + text-shadow: 0 -1px 0 #bfbfbf; +} +@font-face { + font-family: Gentium; + src: url("http://example.com/fonts/Gentium.ttf"); + unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF; +} +@font-face { + font-family: Gentium; + src: local(Gentium Bold), local(Gentium-Bold), url("GentiumBold.ttf"); + unicode-range: U+0A-FF, U+980-9FF, U+????, U+3???; +} +.foobar { + grid-columns: 10px ("content" 1fr 10px) [4]; +}'''; + compilePolyfillAndValidate(input, generatedPolyfill); +} + +void testVar() { + final errors = []; + final input = ''' +@color-background: red; +@color-foreground: blue; + +.test { + background-color: var(color-background); + color: var(color-foreground); +} +'''; + final generated = ''' +var-color-background: #f00; +var-color-foreground: #00f; +.test { + background-color: var(color-background); + color: var(color-foreground); +}'''; + + var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); + + compileAndValidate(input, generated); + + final input2 = ''' +@color-background: red; +@color-foreground: blue; + +.test { + background-color: @color-background; + color: @color-foreground; +} +'''; + final generated2 = ''' +var-color-background: #f00; +var-color-foreground: #00f; +.test { + background-color: var(color-background); + color: var(color-foreground); +}'''; + + stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated2); + + compileAndValidate(input2, generated2); +} + +void testLess() { + final errors = []; + final input = ''' +@color-background: red; +@color-foreground: blue; + +.test { + background-color: var(color-background); + color: var(color-foreground); +} +'''; + final generated = ''' +var-color-background: #f00; +var-color-foreground: #00f; +.test { + background-color: var(color-background); + color: var(color-foreground); +}'''; + + var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated); + + compileAndValidate(input, generated); + + final input2 = ''' +@color-background: red; +@color-foreground: blue; + +.test { + background-color: @color-background; + color: @color-foreground; +} +'''; + final generated2 = ''' +var-color-background: #f00; +var-color-foreground: #00f; +.test { + background-color: var(color-background); + color: var(color-foreground); +}'''; + + stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet), generated2); + + compileAndValidate(input2, generated2); +} + +void polyfill() { + compilePolyfillAndValidate(r''' +@color-background: red; +@color-foreground: blue; +.test { + background-color: @color-background; + color: @color-foreground; +}''', r''' +.test { + background-color: #f00; + color: #00f; +}'''); +} + +void testIndirects() { + compilePolyfillAndValidate(''' +:root { + var-redef: #0f0; + + var-a1: #fff; + var-a2: var(a1); + var-a3: var(a2); + + var-redef: #000; +} +.test { + background-color: @a1; + color: @a2; + border-color: @a3; +} +.test-1 { + color: @redef; +}''', r''' +:root { +} +.test { + background-color: #fff; + color: #fff; + border-color: #fff; +} +.test-1 { + color: #000; +}'''); +} + +void includes() { + var errors = []; + var file1Input = r''' +:root { + var-redef: #0f0; + + var-a1: #fff; + var-a2: var(a1); + var-a3: var(a2); + + var-redef: #000; +} +.test-1 { + background-color: @a1; + color: @a2; + border-color: @a3; +} +.test-1a { + color: @redef; +} +'''; + + var file2Input = r''' +:root { + var-redef: #0b0; + var-b3: var(a3); +} +.test-2 { + color: var(b3); + background-color: var(redef); + border-color: var(a3); +} +'''; + + var input = r''' +:root { + var-redef: #0c0; +} +.test-main { + color: var(b3); + background-color: var(redef); + border-color: var(a3); +} +'''; + + var generated1 = r''' +:root { + var-redef: #0f0; + var-a1: #fff; + var-a2: var(a1); + var-a3: var(a2); + var-redef: #000; +} +.test-1 { + background-color: var(a1); + color: var(a2); + border-color: var(a3); +} +.test-1a { + color: var(redef); +}'''; + + var stylesheet1 = compileCss(file1Input, errors: errors, opts: options); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet1), generated1); + + var generated2 = r''' +:root { + var-redef: #0b0; + var-b3: var(a3); +} +.test-2 { + color: var(b3); + background-color: var(redef); + border-color: var(a3); +}'''; + + var stylesheet2 = compileCss(file2Input, + includes: [stylesheet1], errors: errors..clear(), opts: options); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheet2), generated2); + + var generatedPolyfill1 = r''' +:root { +} +.test-1 { + background-color: #fff; + color: #fff; + border-color: #fff; +} +.test-1a { + color: #000; +}'''; + var styleSheet1Polyfill = compileCss(file1Input, + errors: errors..clear(), polyfill: true, opts: options); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(styleSheet1Polyfill), generatedPolyfill1); + + var generatedPolyfill2 = r''' +:root { +} +.test-2 { + color: #fff; + background-color: #0b0; + border-color: #fff; +}'''; + var styleSheet2Polyfill = compileCss(file2Input, + includes: [stylesheet1], + errors: errors..clear(), + polyfill: true, + opts: options); + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(styleSheet2Polyfill), generatedPolyfill2); + + // Make sure includes didn't change. + expect(prettyPrint(stylesheet1), generated1); + + var generatedPolyfill = r''' +:root { +} +.test-main { + color: #fff; + background-color: #0c0; + border-color: #fff; +}'''; + var stylesheetPolyfill = compileCss(input, + includes: [stylesheet1, stylesheet2], + errors: errors..clear(), + polyfill: true, + opts: options); + + expect(errors.isEmpty, true, reason: errors.toString()); + expect(prettyPrint(stylesheetPolyfill), generatedPolyfill); + + // Make sure includes didn't change. + expect(prettyPrint(stylesheet1), generated1); + expect(prettyPrint(stylesheet2), generated2); +} + +void main() { + glyph.ascii = true; + test('Simple var', simpleVar); + test('Expressions var', expressionsVar); + test('Default value in var()', defaultVar); + test('CSS Parser only var', parserVar); + test('Var syntax', testVar); + test('Indirects', testIndirects); + test('Forward Refs', undefinedVars); + test('Less syntax', testLess); + test('Polyfill', polyfill); + test('Multi-file', includes); +} diff --git a/pkgs/csslib/test/visitor_test.dart b/pkgs/csslib/test/visitor_test.dart new file mode 100644 index 000000000..54429034b --- /dev/null +++ b/pkgs/csslib/test/visitor_test.dart @@ -0,0 +1,136 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:csslib/src/messages.dart'; +import 'package:csslib/visitor.dart'; +import 'package:test/test.dart'; + +import 'testing.dart'; + +class ClassVisitor extends Visitor { + final List expectedClasses; + final foundClasses = {}; + + ClassVisitor(this.expectedClasses); + + @override + void visitClassSelector(ClassSelector node) { + foundClasses.add(node.name); + } + + bool get matches { + var match = true; + for (var value in foundClasses) { + match = match && expectedClasses.contains(value); + } + for (var value in expectedClasses) { + match = match && foundClasses.contains(value); + } + + return match; + } +} + +void testClassVisitors() { + var errors = []; + var in1 = '.foobar { }'; + + var s = parseCss(in1, errors: errors); + + expect(errors.isEmpty, true, reason: errors.toString()); + + var clsVisits = ClassVisitor(['foobar'])..visitTree(s); + expect(clsVisits.matches, true); + + in1 = ''' + .foobar1 { } + .xyzzy .foo #my-div { color: red; } + div.hello { font: arial; } + '''; + + s = parseCss(in1, errors: errors..clear(), opts: simpleOptions); + + expect(errors.isEmpty, true, reason: errors.toString()); + + clsVisits = ClassVisitor(['foobar1', 'xyzzy', 'foo', 'hello'])..visitTree(s); + expect(clsVisits.matches, true); + + expect(prettyPrint(s), r''' +.foobar1 { +} +.xyzzy .foo #my-div { + color: #f00; +} +div.hello { + font: arial; +}'''); +} + +class PolyfillEmitter extends CssPrinter { + final String _prefix; + + PolyfillEmitter(this._prefix); + + @override + void visitClassSelector(ClassSelector node) { + emit('.${_prefix}_${node.name}'); + } +} + +String polyfillPrint(String prefix, StyleSheet ss) => + (PolyfillEmitter(prefix)..visitTree(ss, pretty: true)).toString(); + +void testPolyFill() { + var errors = []; + final input = r''' +.foobar { } +div.xyzzy { } +#foo .foo .bar .foobar { } +'''; + + final generated = r''' +.myComponent_foobar { +} +div.myComponent_xyzzy { +} +#foo .myComponent_foo .myComponent_bar .myComponent_foobar { +}'''; + + var s = parseCss(input, errors: errors); + expect(errors.isEmpty, true, reason: errors.toString()); + + final emitted = polyfillPrint('myComponent', s); + expect(emitted, generated); +} + +void main() { + test('Class Visitors', testClassVisitors); + test('Polyfill', testPolyFill); + test('pretty-print', testPrettyPrint); +} + +void testPrettyPrint() { + final input = ''' +.good { color: red; }@media screen { .better { color: blue; } }.best { color: green }'''; + + var styleSheet = parseCss(input); + + // pretty print + expect(prettyPrint(styleSheet), ''' +.good { + color: #f00; +} +@media screen { + .better { + color: #00f; + } +} +.best { + color: #008000; +}'''); + + // compact output + expect(compactOutput(styleSheet), ''' +.good{color:red}@media screen{.better{color:blue}}.best{color:green}'''); +} diff --git a/pkgs/csslib/third_party/README.md b/pkgs/csslib/third_party/README.md new file mode 100644 index 000000000..a68a963fb --- /dev/null +++ b/pkgs/csslib/third_party/README.md @@ -0,0 +1,2 @@ +This folder contains resources from third parties. +See each subfolder for details. diff --git a/pkgs/csslib/third_party/base/README.md b/pkgs/csslib/third_party/base/README.md new file mode 100644 index 000000000..3e2b26198 --- /dev/null +++ b/pkgs/csslib/third_party/base/README.md @@ -0,0 +1,5 @@ +This folder contains a sample css file from the open-source project +https://github.com/getbase/base. + +This code was included under the +[MIT Open Source](https://opensource.org/licenses/MIT) license. \ No newline at end of file diff --git a/pkgs/csslib/third_party/base/index.css b/pkgs/csslib/third_party/base/index.css new file mode 100644 index 000000000..95156ce57 --- /dev/null +++ b/pkgs/csslib/third_party/base/index.css @@ -0,0 +1 @@ +*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}.sr{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1rem}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{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-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}table{text-align:left;border-collapse:collapse;border-spacing:0;width:100%;margin:0;border:1px solid #e9e9e9}table td,table th{padding:1rem;border-bottom:1px solid #e9e9e9;border-right:1px solid #e9e9e9}table tr:nth-child(2n){background-color:#f6f8fa}body{font-family:sans-serif;font-size:16px;line-height:22px;color:#232323;font-weight:400;background:#fff}details,main{display:block}a{background-color:rgba(0,0,0,0)}.b,.strong,b,strong{font-weight:700}.em,em{font-style:italic}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.small,small{font-size:.8125rem}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}[hidden],template{display:none}h1,h2,h3,h4,h5,h6{font-family:sans-serif;margin:.5rem 0}.h1,h1{font-size:32px;line-height:38px}.h2,h2{font-size:26px;line-height:32px}.h3,h3{font-size:22px;line-height:28px}.h4,h4{font-size:18px;line-height:24px}.h5,h5{font-size:16px;line-height:22px}.h6,h6{font-size:14px;line-height:20px}.container{max-width:1168px;padding-left:16px;padding-right:16px;margin-left:auto;margin-right:auto}@media only screen and (min-width:768px){.container-m{width:736px;max-width:auto;padding-left:16px;padding-right:16px;margin-left:auto;margin-right:auto}}@media only screen and (min-width:980px){.container-l{width:948px;max-width:auto;padding-left:16px;padding-right:16px;margin-left:auto;margin-right:auto}}@media only screen and (min-width:1200px){.container-xl{width:1168px;max-width:auto;padding-left:16px;padding-right:16px;margin-left:auto;margin-right:auto}}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;margin-left:-16px;margin-right:-16px}.col-1,.col-1-2,.col-1-3,.col-1-4,.col-1-5,.col-2,.col-2-3,.col-2-5,.col-3,.col-3-4,.col-3-5,.col-4,.col-4-5,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding-left:16px;padding-right:16px}.col-1{-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-1,.col-2{-webkit-box-flex:0}.col-2{-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-3,.col-4{-webkit-box-flex:0}.col-4{-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-5{-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-5,.col-6{-webkit-box-flex:0}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-7,.col-8{-webkit-box-flex:0}.col-8{-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-9,.col-10{-webkit-box-flex:0}.col-10{-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-11{-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-11,.col-12{-webkit-box-flex:0}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.col-1-2{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-1-2,.col-1-3{-webkit-box-flex:0}.col-1-3{-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-2-3{-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-1-4,.col-2-3{-webkit-box-flex:0}.col-1-4{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-3-4{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-1-5,.col-3-4{-webkit-box-flex:0}.col-1-5{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.col-2-5{-ms-flex:0 0 40%;flex:0 0 40%;max-width:40%}.col-2-5,.col-3-5{-webkit-box-flex:0}.col-3-5{-ms-flex:0 0 60%;flex:0 0 60%;max-width:60%}.col-4-5{-webkit-box-flex:0;-ms-flex:0 0 80%;flex:0 0 80%;max-width:80%}.col-full{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}@media only screen and (min-width:768px){.row-m{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;margin-left:-16px;margin-right:-16px}.col-1-2-m,.col-1-3-m,.col-1-4-m,.col-1-5-m,.col-1-m,.col-2-3-m,.col-2-5-m,.col-2-m,.col-3-4-m,.col-3-5-m,.col-3-m,.col-4-5-m,.col-4-m,.col-5-m,.col-6-m,.col-7-m,.col-8-m,.col-9-m,.col-10-m,.col-11-m,.col-12-m{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding-left:16px;padding-right:16px}.col-1-m{-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-1-m,.col-2-m{-webkit-box-flex:0}.col-2-m{-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-3-m{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-3-m,.col-4-m{-webkit-box-flex:0}.col-4-m{-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-5-m{-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-5-m,.col-6-m{-webkit-box-flex:0}.col-6-m{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7-m{-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-7-m,.col-8-m{-webkit-box-flex:0}.col-8-m{-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-9-m{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10-m{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-11-m{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-12-m{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.col-1-2-m{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-1-3-m{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-2-3-m{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-1-4-m{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-3-4-m{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-1-5-m{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.col-2-5-m{-webkit-box-flex:0;-ms-flex:0 0 40%;flex:0 0 40%;max-width:40%}.col-3-5-m{-webkit-box-flex:0;-ms-flex:0 0 60%;flex:0 0 60%;max-width:60%}.col-4-5-m{-webkit-box-flex:0;-ms-flex:0 0 80%;flex:0 0 80%;max-width:80%}.col-full-m{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}}@media only screen and (min-width:980px){.row-l{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;margin-left:-16px;margin-right:-16px}.col-1-2-l,.col-1-3-l,.col-1-4-l,.col-1-5-l,.col-1-l,.col-2-3-l,.col-2-5-l,.col-2-l,.col-3-4-l,.col-3-5-l,.col-3-l,.col-4-5-l,.col-4-l,.col-5-l,.col-6-l,.col-7-l,.col-8-l,.col-9-l,.col-10-l,.col-11-l,.col-12-l{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding-left:16px;padding-right:16px}.col-1-l{-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-1-l,.col-2-l{-webkit-box-flex:0}.col-2-l{-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-3-l{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-3-l,.col-4-l{-webkit-box-flex:0}.col-4-l{-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-5-l{-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-5-l,.col-6-l{-webkit-box-flex:0}.col-6-l{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7-l{-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-7-l,.col-8-l{-webkit-box-flex:0}.col-8-l{-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-9-l{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10-l{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-11-l{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-12-l{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.col-1-2-l{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-1-3-l{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-2-3-l{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-1-4-l{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-3-4-l{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-1-5-l{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.col-2-5-l{-webkit-box-flex:0;-ms-flex:0 0 40%;flex:0 0 40%;max-width:40%}.col-3-5-l{-webkit-box-flex:0;-ms-flex:0 0 60%;flex:0 0 60%;max-width:60%}.col-4-5-l{-webkit-box-flex:0;-ms-flex:0 0 80%;flex:0 0 80%;max-width:80%}.col-full-l{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}}@media only screen and (min-width:1200px){.row-xl{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;margin-left:-16px;margin-right:-16px}.col-1-2-xl,.col-1-3-xl,.col-1-4-xl,.col-1-5-xl,.col-1-xl,.col-2-3-xl,.col-2-5-xl,.col-2-xl,.col-3-4-xl,.col-3-5-xl,.col-3-xl,.col-4-5-xl,.col-4-xl,.col-5-xl,.col-6-xl,.col-7-xl,.col-8-xl,.col-9-xl,.col-10-xl,.col-11-xl,.col-12-xl{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding-left:16px;padding-right:16px}.col-1-xl{-webkit-box-flex:0;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.col-2-xl{-webkit-box-flex:0;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.col-3-xl{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4-xl{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-5-xl{-webkit-box-flex:0;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.col-6-xl{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7-xl{-webkit-box-flex:0;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.col-8-xl{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-9-xl{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10-xl{-webkit-box-flex:0;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.col-11-xl{-webkit-box-flex:0;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.col-12-xl{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.col-1-2-xl{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-1-3-xl{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.col-2-3-xl{-webkit-box-flex:0;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.col-1-4-xl{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-3-4-xl{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-1-5-xl{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.col-2-5-xl{-webkit-box-flex:0;-ms-flex:0 0 40%;flex:0 0 40%;max-width:40%}.col-3-5-xl{-webkit-box-flex:0;-ms-flex:0 0 60%;flex:0 0 60%;max-width:60%}.col-4-5-xl{-webkit-box-flex:0;-ms-flex:0 0 80%;flex:0 0 80%;max-width:80%}.col-full-xl{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}}.padding-left-0-25rem{padding-left:.25rem}.padding-left-0-5rem{padding-left:.5rem}.padding-left-1rem{padding-left:1rem}.padding-left-1-5rem{padding-left:1.5rem}.padding-left-2rem{padding-left:2rem}.padding-left-3rem{padding-left:3rem}.padding-left-4rem{padding-left:4rem}.padding-left-5rem{padding-left:5rem}.padding-right-0-25rem{padding-right:.25rem}.padding-right-0-5rem{padding-right:.5rem}.padding-right-1rem{padding-right:1rem}.padding-right-1-5rem{padding-right:1.5rem}.padding-right-2rem{padding-right:2rem}.padding-right-3rem{padding-right:3rem}.padding-right-4rem{padding-right:4rem}.padding-right-5rem{padding-right:5rem}@media only screen and (min-width:768px){.padding-left-0-m{padding-left:0}.padding-left-0-25rem-m{padding-left:.25rem}.padding-left-0-5rem-m{padding-left:.5rem}.padding-left-1rem-m{padding-left:1rem}.padding-left-1-5rem-m{padding-left:1.5rem}.padding-left-2rem-m{padding-left:2rem}.padding-left-3rem-m{padding-left:3rem}.padding-left-4rem-m{padding-left:4rem}.padding-left-5rem-m{padding-left:5rem}.padding-right-0-m{padding-right:0}.padding-right-0-25rem-m{padding-right:.25rem}.padding-right-0-5rem-m{padding-right:.5rem}.padding-right-1rem-m{padding-right:1rem}.padding-right-1-5rem-m{padding-right:1.5rem}.padding-right-2rem-m{padding-right:2rem}.padding-right-3rem-m{padding-right:3rem}.padding-right-4rem-m{padding-right:4rem}.padding-right-5rem-m{padding-right:5rem}}@media only screen and (min-width:980px){.padding-left-0-l{padding-left:0}.padding-left-0-25rem-l{padding-left:.25rem}.padding-left-0-5rem-l{padding-left:.5rem}.padding-left-1rem-l{padding-left:1rem}.padding-left-1-5rem-l{padding-left:1.5rem}.padding-left-2rem-l{padding-left:2rem}.padding-left-3rem-l{padding-left:3rem}.padding-left-4rem-l{padding-left:4rem}.padding-left-5rem-l{padding-left:5rem}.padding-right-0-l{padding-right:0}.padding-right-0-25rem-l{padding-right:.25rem}.padding-right-0-5rem-l{padding-right:.5rem}.padding-right-1rem-l{padding-right:1rem}.padding-right-1-5rem-l{padding-right:1.5rem}.padding-right-2rem-l{padding-right:2rem}.padding-right-3rem-l{padding-right:3rem}.padding-right-4rem-l{padding-right:4rem}.padding-right-5rem-l{padding-right:5rem}}@media only screen and (min-width:1200px){.padding-left-0-xl{padding-left:0}.padding-left-0-25rem-xl{padding-left:.25rem}.padding-left-0-5rem-xl{padding-left:.5rem}.padding-left-1rem-xl{padding-left:1rem}.padding-left-1-5rem-xl{padding-left:1.5rem}.padding-left-2rem-xl{padding-left:2rem}.padding-left-3rem-xl{padding-left:3rem}.padding-left-4rem-xl{padding-left:4rem}.padding-left-5rem-xl{padding-left:5rem}.padding-right-0-xl{padding-right:0}.padding-right-0-25rem-xl{padding-right:.25rem}.padding-right-0-5rem-xl{padding-right:.5rem}.padding-right-1rem-xl{padding-right:1rem}.padding-right-1-5rem-xl{padding-right:1.5rem}.padding-right-2rem-xl{padding-right:2rem}.padding-right-3rem-xl{padding-right:3rem}.padding-right-4rem-xl{padding-right:4rem}.padding-right-5rem-xl{padding-right:5rem}}.padding-top-0-25rem{padding-top:.25rem}.padding-top-0-5rem{padding-top:.5rem}.padding-top-1rem{padding-top:1rem}.padding-top-1-5rem{padding-top:1.5rem}.padding-top-2rem{padding-top:2rem}.padding-top-3rem{padding-top:3rem}.padding-top-4rem{padding-top:4rem}.padding-top-5rem{padding-top:5rem}.padding-bottom-0-25rem{padding-bottom:.25rem}.padding-bottom-0-5rem{padding-bottom:.5rem}.padding-bottom-1rem{padding-bottom:1rem}.padding-bottom-1-5rem{padding-bottom:1.5rem}.padding-bottom-2rem{padding-bottom:2rem}.padding-bottom-3rem{padding-bottom:3rem}.padding-bottom-4rem{padding-bottom:4rem}.padding-bottom-5rem{padding-bottom:5rem}@media only screen and (min-width:768px){.padding-top-0-m{padding-top:0}.padding-top-0-25rem-m{padding-top:.25rem}.padding-top-0-5rem-m{padding-top:.5rem}.padding-top-1rem-m{padding-top:1rem}.padding-top-1-5rem-m{padding-top:1.5rem}.padding-top-2rem-m{padding-top:2rem}.padding-top-3rem-m{padding-top:3rem}.padding-top-4rem-m{padding-top:4rem}.padding-top-5rem-m{padding-top:5rem}.padding-bottom-0-m{padding-bottom:0}.padding-bottom-0-25rem-m{padding-bottom:.25rem}.padding-bottom-0-5rem-m{padding-bottom:.5rem}.padding-bottom-1rem-m{padding-bottom:1rem}.padding-bottom-1-5rem-m{padding-bottom:1.5rem}.padding-bottom-2rem-m{padding-bottom:2rem}.padding-bottom-3rem-m{padding-bottom:3rem}.padding-bottom-4rem-m{padding-bottom:4rem}.padding-bottom-5rem-m{padding-bottom:5rem}}@media only screen and (min-width:980px){.padding-top-0-l{padding-top:0}.padding-top-0-25rem-l{padding-top:.25rem}.padding-top-0-5rem-l{padding-top:.5rem}.padding-top-1rem-l{padding-top:1rem}.padding-top-1-5rem-l{padding-top:1.5rem}.padding-top-2rem-l{padding-top:2rem}.padding-top-3rem-l{padding-top:3rem}.padding-top-4rem-l{padding-top:4rem}.padding-top-5rem-l{padding-top:5rem}.padding-bottom-0-l{padding-bottom:0}.padding-bottom-0-25rem-l{padding-bottom:.25rem}.padding-bottom-0-5rem-l{padding-bottom:.5rem}.padding-bottom-1rem-l{padding-bottom:1rem}.padding-bottom-1-5rem-l{padding-bottom:1.5rem}.padding-bottom-2rem-l{padding-bottom:2rem}.padding-bottom-3rem-l{padding-bottom:3rem}.padding-bottom-4rem-l{padding-bottom:4rem}.padding-bottom-5rem-l{padding-bottom:5rem}}@media only screen and (min-width:1200px){.padding-top-0-xl{padding-top:0}.padding-top-0-25rem-xl{padding-top:.25rem}.padding-top-0-5rem-xl{padding-top:.5rem}.padding-top-1rem-xl{padding-top:1rem}.padding-top-1-5rem-xl{padding-top:1.5rem}.padding-top-2rem-xl{padding-top:2rem}.padding-top-3rem-xl{padding-top:3rem}.padding-top-4rem-xl{padding-top:4rem}.padding-top-5rem-xl{padding-top:5rem}.padding-bottom-0-xl{padding-bottom:0}.padding-bottom-0-25rem-xl{padding-bottom:.25rem}.padding-bottom-0-5rem-xl{padding-bottom:.5rem}.padding-bottom-1rem-xl{padding-bottom:1rem}.padding-bottom-1-5rem-xl{padding-bottom:1.5rem}.padding-bottom-2rem-xl{padding-bottom:2rem}.padding-bottom-3rem-xl{padding-bottom:3rem}.padding-bottom-4rem-xl{padding-bottom:4rem}.padding-bottom-5rem-xl{padding-bottom:5rem}}.padding-0{padding:0}.padding-0-25rem{padding:.25rem}.padding-0-5rem{padding:.5rem}.padding-1rem{padding:1rem}.padding-1-5rem{padding:1.5rem}.padding-2rem{padding:2rem}.padding-3rem{padding:3rem}.padding-4rem{padding:4rem}.padding-5rem{padding:5rem}@media only screen and (min-width:768px){.padding-0-m{padding:0}.padding-0-25rem-m{padding:.25rem}.padding-0-5rem-m{padding:.5rem}.padding-1rem-m{padding:1rem}.padding-1-5rem-m{padding:1.5rem}.padding-2rem-m{padding:2rem}.padding-3rem-m{padding:3rem}.padding-4rem-m{padding:4rem}.padding-5rem-m{padding:5rem}}@media only screen and (min-width:980px){.padding-0-l{padding:0}.padding-0-25rem-l{padding:.25rem}.padding-0-5rem-l{padding:.5rem}.padding-1rem-l{padding:1rem}.padding-1-5rem-l{padding:1.5rem}.padding-2rem-l{padding:2rem}.padding-3rem-l{padding:3rem}.padding-4rem-l{padding:4rem}.padding-5rem-l{padding:5rem}}@media only screen and (min-width:1200px){.padding-0-xl{padding:0}.padding-0-25rem-xl{padding:.25rem}.padding-0-5rem-xl{padding:.5rem}.padding-1rem-xl{padding:1rem}.padding-1-5rem-xl{padding:1.5rem}.padding-2rem-xl{padding:2rem}.padding-3rem-xl{padding:3rem}.padding-4rem-xl{padding:4rem}.padding-5rem-xl{padding:5rem}}.none{display:none}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}@media only screen and (min-width:768px){.none-m{display:none}.block-m{display:block}.inline-block-m{display:inline-block}.inline-m{display:inline}.flex-m{display:-webkit-box;display:-ms-flexbox;display:flex}}@media only screen and (min-width:980px){.none-l{display:none}.block-l{display:block}.inline-block-l{display:inline-block}.inline-l{display:inline}.flex-l{display:-webkit-box;display:-ms-flexbox;display:flex}}@media only screen and (min-width:1200px){.block-xl,.none-xl{display:block}.inline-block-xl{display:inline-block}.inline-xl{display:inline}.flex-xl{display:-webkit-box;display:-ms-flexbox;display:flex}}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-nowrap{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.flex-align-items-bottom,.flex-align-items-center,.flex-align-items-top{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.flex-justify-left{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.flex-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.flex-justify-right{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.flex-space-around{-ms-flex-pack:distribute;justify-content:space-around}.flex-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flex-row{-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.flex-row,.flex-row-reverse{-webkit-box-orient:horizontal}.flex-row-reverse{-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.flex-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}@media only screen and (min-width:768px){.flex-wrap-m{-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-nowrap-m{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.flex-align-items-bottom-m,.flex-align-items-center-m,.flex-align-items-top-m{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.flex-justify-left-m{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.flex-justify-center-m{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.flex-justify-right-m{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.flex-space-around-m{-ms-flex-pack:distribute;justify-content:space-around}.flex-space-between-m{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flex-row-m{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.flex-row-reverse-m{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.flex-column-m{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex-column-reverse-m{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}@media only screen and (min-width:980px){.flex-wrap-l{-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-nowrap-l{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.flex-align-items-bottom-l,.flex-align-items-center-l,.flex-align-items-top-l{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.flex-justify-left-l{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.flex-justify-center-l{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.flex-justify-right-l{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.flex-space-around-l{-ms-flex-pack:distribute;justify-content:space-around}.flex-space-between-l{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flex-row-l{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.flex-row-reverse-l{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.flex-column-l{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex-column-reverse-l{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}@media only screen and (min-width:1200px){.flex-wrap-xl{-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-nowrap-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.flex-align-items-bottom-xl,.flex-align-items-center-xl,.flex-align-items-top-xl{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.flex-justify-left-xl{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.flex-justify-center-xl{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.flex-justify-right-xl{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.flex-space-around-xl{-ms-flex-pack:distribute;justify-content:space-around}.flex-space-between-xl{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flex-row-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.flex-row-reverse-xl{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.flex-column-xl{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex-column-reverse-xl{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}.relative{position:relative}.absolute{position:absolute}.static{position:static}.fixed{position:fixed}.sticky{position:-webkit-sticky;position:sticky}@media only screen and (min-width:768px){.relative-m{position:relative}.absolute-m{position:absolute}.static-m{position:static}.fixed-m{position:fixed}.sticky-m{position:-webkit-sticky;position:sticky}}@media only screen and (min-width:980px){.relative-l{position:relative}.absolute-l{position:absolute}.static-l{position:static}.fixed-l{position:fixed}.sticky-l{position:-webkit-sticky;position:sticky}}@media only screen and (min-width:1200px){.relative-xl{position:relative}.absolute-xl{position:absolute}.static-xl{position:static}.fixed-xl{position:fixed}.sticky-xl{position:-webkit-sticky;position:sticky}}.no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.font-100{font-weight:100}.font-200{font-weight:200}.font-300{font-weight:300}.font-400{font-weight:400}.font-500{font-weight:500}.font-600{font-weight:600}.font-700{font-weight:700}.font-800{font-weight:800}.font-900{font-weight:900}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}@media only screen and (min-width:768px){.text-left-m{text-align:left}.text-right-m{text-align:right}.text-center-m{text-align:center}}@media only screen and (min-width:980px){.text-left-l{text-align:left}.text-right-l{text-align:right}.text-center-l{text-align:center}}@media only screen and (min-width:1200px){.text-left-xl{text-align:left}.text-right-xl{text-align:right}.text-center-xl{text-align:center}} \ No newline at end of file diff --git a/pkgs/csslib/third_party/bootstrap/LICENSE b/pkgs/csslib/third_party/bootstrap/LICENSE new file mode 100644 index 000000000..72dda234e --- /dev/null +++ b/pkgs/csslib/third_party/bootstrap/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2011-2021 Twitter, Inc. +Copyright (c) 2011-2021 The Bootstrap Authors + +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/pkgs/csslib/third_party/bootstrap/README.md b/pkgs/csslib/third_party/bootstrap/README.md new file mode 100644 index 000000000..bb1d3bba4 --- /dev/null +++ b/pkgs/csslib/third_party/bootstrap/README.md @@ -0,0 +1,4 @@ +This folder contains sample css files from the open-source project +https://github.com/twbs/bootstrap. + +This code was included under the terms in the `LICENSE` file. \ No newline at end of file diff --git a/pkgs/csslib/third_party/bootstrap/bootstrap-grid.css b/pkgs/csslib/third_party/bootstrap/bootstrap-grid.css new file mode 100644 index 000000000..e6af9ab8f --- /dev/null +++ b/pkgs/csslib/third_party/bootstrap/bootstrap-grid.css @@ -0,0 +1,5051 @@ +/*! + * Bootstrap Grid v5.1.1 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; +} + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + width: 100%; + padding-right: var(--bs-gutter-x, 0.75rem); + padding-left: var(--bs-gutter-x, 0.75rem); + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; + } +} +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; + } +} +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; + } +} +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; + } +} +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; + } +} +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(var(--bs-gutter-y) * -1); + margin-right: calc(var(--bs-gutter-x) * -.5); + margin-left: calc(var(--bs-gutter-x) * -.5); +} +.row > * { + box-sizing: border-box; + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * .5); + padding-left: calc(var(--bs-gutter-x) * .5); + margin-top: var(--bs-gutter-y); +} + +.col { + flex: 1 0 0%; +} + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; +} + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; +} + +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.col-3 { + flex: 0 0 auto; + width: 25%; +} + +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.col-6 { + flex: 0 0 auto; + width: 50%; +} + +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.col-9 { + flex: 0 0 auto; + width: 75%; +} + +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.col-12 { + flex: 0 0 auto; + width: 100%; +} + +.offset-1 { + margin-left: 8.33333333%; +} + +.offset-2 { + margin-left: 16.66666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.33333333%; +} + +.offset-5 { + margin-left: 41.66666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.33333333%; +} + +.offset-8 { + margin-left: 66.66666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.33333333%; +} + +.offset-11 { + margin-left: 91.66666667%; +} + +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} + +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; + } + + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-sm-0 { + margin-left: 0; + } + + .offset-sm-1 { + margin-left: 8.33333333%; + } + + .offset-sm-2 { + margin-left: 16.66666667%; + } + + .offset-sm-3 { + margin-left: 25%; + } + + .offset-sm-4 { + margin-left: 33.33333333%; + } + + .offset-sm-5 { + margin-left: 41.66666667%; + } + + .offset-sm-6 { + margin-left: 50%; + } + + .offset-sm-7 { + margin-left: 58.33333333%; + } + + .offset-sm-8 { + margin-left: 66.66666667%; + } + + .offset-sm-9 { + margin-left: 75%; + } + + .offset-sm-10 { + margin-left: 83.33333333%; + } + + .offset-sm-11 { + margin-left: 91.66666667%; + } + + .g-sm-0, +.gx-sm-0 { + --bs-gutter-x: 0; + } + + .g-sm-0, +.gy-sm-0 { + --bs-gutter-y: 0; + } + + .g-sm-1, +.gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + + .g-sm-1, +.gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + + .g-sm-2, +.gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + + .g-sm-2, +.gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + + .g-sm-3, +.gx-sm-3 { + --bs-gutter-x: 1rem; + } + + .g-sm-3, +.gy-sm-3 { + --bs-gutter-y: 1rem; + } + + .g-sm-4, +.gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + + .g-sm-4, +.gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + + .g-sm-5, +.gx-sm-5 { + --bs-gutter-x: 3rem; + } + + .g-sm-5, +.gy-sm-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; + } + + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-md-auto { + flex: 0 0 auto; + width: auto; + } + + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-md-0 { + margin-left: 0; + } + + .offset-md-1 { + margin-left: 8.33333333%; + } + + .offset-md-2 { + margin-left: 16.66666667%; + } + + .offset-md-3 { + margin-left: 25%; + } + + .offset-md-4 { + margin-left: 33.33333333%; + } + + .offset-md-5 { + margin-left: 41.66666667%; + } + + .offset-md-6 { + margin-left: 50%; + } + + .offset-md-7 { + margin-left: 58.33333333%; + } + + .offset-md-8 { + margin-left: 66.66666667%; + } + + .offset-md-9 { + margin-left: 75%; + } + + .offset-md-10 { + margin-left: 83.33333333%; + } + + .offset-md-11 { + margin-left: 91.66666667%; + } + + .g-md-0, +.gx-md-0 { + --bs-gutter-x: 0; + } + + .g-md-0, +.gy-md-0 { + --bs-gutter-y: 0; + } + + .g-md-1, +.gx-md-1 { + --bs-gutter-x: 0.25rem; + } + + .g-md-1, +.gy-md-1 { + --bs-gutter-y: 0.25rem; + } + + .g-md-2, +.gx-md-2 { + --bs-gutter-x: 0.5rem; + } + + .g-md-2, +.gy-md-2 { + --bs-gutter-y: 0.5rem; + } + + .g-md-3, +.gx-md-3 { + --bs-gutter-x: 1rem; + } + + .g-md-3, +.gy-md-3 { + --bs-gutter-y: 1rem; + } + + .g-md-4, +.gx-md-4 { + --bs-gutter-x: 1.5rem; + } + + .g-md-4, +.gy-md-4 { + --bs-gutter-y: 1.5rem; + } + + .g-md-5, +.gx-md-5 { + --bs-gutter-x: 3rem; + } + + .g-md-5, +.gy-md-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; + } + + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-lg-0 { + margin-left: 0; + } + + .offset-lg-1 { + margin-left: 8.33333333%; + } + + .offset-lg-2 { + margin-left: 16.66666667%; + } + + .offset-lg-3 { + margin-left: 25%; + } + + .offset-lg-4 { + margin-left: 33.33333333%; + } + + .offset-lg-5 { + margin-left: 41.66666667%; + } + + .offset-lg-6 { + margin-left: 50%; + } + + .offset-lg-7 { + margin-left: 58.33333333%; + } + + .offset-lg-8 { + margin-left: 66.66666667%; + } + + .offset-lg-9 { + margin-left: 75%; + } + + .offset-lg-10 { + margin-left: 83.33333333%; + } + + .offset-lg-11 { + margin-left: 91.66666667%; + } + + .g-lg-0, +.gx-lg-0 { + --bs-gutter-x: 0; + } + + .g-lg-0, +.gy-lg-0 { + --bs-gutter-y: 0; + } + + .g-lg-1, +.gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + + .g-lg-1, +.gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + + .g-lg-2, +.gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + + .g-lg-2, +.gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + + .g-lg-3, +.gx-lg-3 { + --bs-gutter-x: 1rem; + } + + .g-lg-3, +.gy-lg-3 { + --bs-gutter-y: 1rem; + } + + .g-lg-4, +.gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + + .g-lg-4, +.gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + + .g-lg-5, +.gx-lg-5 { + --bs-gutter-x: 3rem; + } + + .g-lg-5, +.gy-lg-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; + } + + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-xl-0 { + margin-left: 0; + } + + .offset-xl-1 { + margin-left: 8.33333333%; + } + + .offset-xl-2 { + margin-left: 16.66666667%; + } + + .offset-xl-3 { + margin-left: 25%; + } + + .offset-xl-4 { + margin-left: 33.33333333%; + } + + .offset-xl-5 { + margin-left: 41.66666667%; + } + + .offset-xl-6 { + margin-left: 50%; + } + + .offset-xl-7 { + margin-left: 58.33333333%; + } + + .offset-xl-8 { + margin-left: 66.66666667%; + } + + .offset-xl-9 { + margin-left: 75%; + } + + .offset-xl-10 { + margin-left: 83.33333333%; + } + + .offset-xl-11 { + margin-left: 91.66666667%; + } + + .g-xl-0, +.gx-xl-0 { + --bs-gutter-x: 0; + } + + .g-xl-0, +.gy-xl-0 { + --bs-gutter-y: 0; + } + + .g-xl-1, +.gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + + .g-xl-1, +.gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + + .g-xl-2, +.gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + + .g-xl-2, +.gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + + .g-xl-3, +.gx-xl-3 { + --bs-gutter-x: 1rem; + } + + .g-xl-3, +.gy-xl-3 { + --bs-gutter-y: 1rem; + } + + .g-xl-4, +.gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + + .g-xl-4, +.gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + + .g-xl-5, +.gx-xl-5 { + --bs-gutter-x: 3rem; + } + + .g-xl-5, +.gy-xl-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; + } + + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-xxl-0 { + margin-left: 0; + } + + .offset-xxl-1 { + margin-left: 8.33333333%; + } + + .offset-xxl-2 { + margin-left: 16.66666667%; + } + + .offset-xxl-3 { + margin-left: 25%; + } + + .offset-xxl-4 { + margin-left: 33.33333333%; + } + + .offset-xxl-5 { + margin-left: 41.66666667%; + } + + .offset-xxl-6 { + margin-left: 50%; + } + + .offset-xxl-7 { + margin-left: 58.33333333%; + } + + .offset-xxl-8 { + margin-left: 66.66666667%; + } + + .offset-xxl-9 { + margin-left: 75%; + } + + .offset-xxl-10 { + margin-left: 83.33333333%; + } + + .offset-xxl-11 { + margin-left: 91.66666667%; + } + + .g-xxl-0, +.gx-xxl-0 { + --bs-gutter-x: 0; + } + + .g-xxl-0, +.gy-xxl-0 { + --bs-gutter-y: 0; + } + + .g-xxl-1, +.gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + + .g-xxl-1, +.gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + + .g-xxl-2, +.gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + + .g-xxl-2, +.gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + + .g-xxl-3, +.gx-xxl-3 { + --bs-gutter-x: 1rem; + } + + .g-xxl-3, +.gy-xxl-3 { + --bs-gutter-y: 1rem; + } + + .g-xxl-4, +.gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + + .g-xxl-4, +.gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + + .g-xxl-5, +.gx-xxl-5 { + --bs-gutter-x: 3rem; + } + + .g-xxl-5, +.gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-grid { + display: grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.justify-content-evenly { + justify-content: space-evenly !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +.order-first { + order: -1 !important; +} + +.order-0 { + order: 0 !important; +} + +.order-1 { + order: 1 !important; +} + +.order-2 { + order: 2 !important; +} + +.order-3 { + order: 3 !important; +} + +.order-4 { + order: 4 !important; +} + +.order-5 { + order: 5 !important; +} + +.order-last { + order: 6 !important; +} + +.m-0 { + margin: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.me-0 { + margin-right: 0 !important; +} + +.me-1 { + margin-right: 0.25rem !important; +} + +.me-2 { + margin-right: 0.5rem !important; +} + +.me-3 { + margin-right: 1rem !important; +} + +.me-4 { + margin-right: 1.5rem !important; +} + +.me-5 { + margin-right: 3rem !important; +} + +.me-auto { + margin-right: auto !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ms-0 { + margin-left: 0 !important; +} + +.ms-1 { + margin-left: 0.25rem !important; +} + +.ms-2 { + margin-left: 0.5rem !important; +} + +.ms-3 { + margin-left: 1rem !important; +} + +.ms-4 { + margin-left: 1.5rem !important; +} + +.ms-5 { + margin-left: 3rem !important; +} + +.ms-auto { + margin-left: auto !important; +} + +.p-0 { + padding: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pe-0 { + padding-right: 0 !important; +} + +.pe-1 { + padding-right: 0.25rem !important; +} + +.pe-2 { + padding-right: 0.5rem !important; +} + +.pe-3 { + padding-right: 1rem !important; +} + +.pe-4 { + padding-right: 1.5rem !important; +} + +.pe-5 { + padding-right: 3rem !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.ps-0 { + padding-left: 0 !important; +} + +.ps-1 { + padding-left: 0.25rem !important; +} + +.ps-2 { + padding-left: 0.5rem !important; +} + +.ps-3 { + padding-left: 1rem !important; +} + +.ps-4 { + padding-left: 1.5rem !important; +} + +.ps-5 { + padding-left: 3rem !important; +} + +@media (min-width: 576px) { + .d-sm-inline { + display: inline !important; + } + + .d-sm-inline-block { + display: inline-block !important; + } + + .d-sm-block { + display: block !important; + } + + .d-sm-grid { + display: grid !important; + } + + .d-sm-table { + display: table !important; + } + + .d-sm-table-row { + display: table-row !important; + } + + .d-sm-table-cell { + display: table-cell !important; + } + + .d-sm-flex { + display: flex !important; + } + + .d-sm-inline-flex { + display: inline-flex !important; + } + + .d-sm-none { + display: none !important; + } + + .flex-sm-fill { + flex: 1 1 auto !important; + } + + .flex-sm-row { + flex-direction: row !important; + } + + .flex-sm-column { + flex-direction: column !important; + } + + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-sm-wrap { + flex-wrap: wrap !important; + } + + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-sm-start { + justify-content: flex-start !important; + } + + .justify-content-sm-end { + justify-content: flex-end !important; + } + + .justify-content-sm-center { + justify-content: center !important; + } + + .justify-content-sm-between { + justify-content: space-between !important; + } + + .justify-content-sm-around { + justify-content: space-around !important; + } + + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + + .align-items-sm-start { + align-items: flex-start !important; + } + + .align-items-sm-end { + align-items: flex-end !important; + } + + .align-items-sm-center { + align-items: center !important; + } + + .align-items-sm-baseline { + align-items: baseline !important; + } + + .align-items-sm-stretch { + align-items: stretch !important; + } + + .align-content-sm-start { + align-content: flex-start !important; + } + + .align-content-sm-end { + align-content: flex-end !important; + } + + .align-content-sm-center { + align-content: center !important; + } + + .align-content-sm-between { + align-content: space-between !important; + } + + .align-content-sm-around { + align-content: space-around !important; + } + + .align-content-sm-stretch { + align-content: stretch !important; + } + + .align-self-sm-auto { + align-self: auto !important; + } + + .align-self-sm-start { + align-self: flex-start !important; + } + + .align-self-sm-end { + align-self: flex-end !important; + } + + .align-self-sm-center { + align-self: center !important; + } + + .align-self-sm-baseline { + align-self: baseline !important; + } + + .align-self-sm-stretch { + align-self: stretch !important; + } + + .order-sm-first { + order: -1 !important; + } + + .order-sm-0 { + order: 0 !important; + } + + .order-sm-1 { + order: 1 !important; + } + + .order-sm-2 { + order: 2 !important; + } + + .order-sm-3 { + order: 3 !important; + } + + .order-sm-4 { + order: 4 !important; + } + + .order-sm-5 { + order: 5 !important; + } + + .order-sm-last { + order: 6 !important; + } + + .m-sm-0 { + margin: 0 !important; + } + + .m-sm-1 { + margin: 0.25rem !important; + } + + .m-sm-2 { + margin: 0.5rem !important; + } + + .m-sm-3 { + margin: 1rem !important; + } + + .m-sm-4 { + margin: 1.5rem !important; + } + + .m-sm-5 { + margin: 3rem !important; + } + + .m-sm-auto { + margin: auto !important; + } + + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-sm-0 { + margin-top: 0 !important; + } + + .mt-sm-1 { + margin-top: 0.25rem !important; + } + + .mt-sm-2 { + margin-top: 0.5rem !important; + } + + .mt-sm-3 { + margin-top: 1rem !important; + } + + .mt-sm-4 { + margin-top: 1.5rem !important; + } + + .mt-sm-5 { + margin-top: 3rem !important; + } + + .mt-sm-auto { + margin-top: auto !important; + } + + .me-sm-0 { + margin-right: 0 !important; + } + + .me-sm-1 { + margin-right: 0.25rem !important; + } + + .me-sm-2 { + margin-right: 0.5rem !important; + } + + .me-sm-3 { + margin-right: 1rem !important; + } + + .me-sm-4 { + margin-right: 1.5rem !important; + } + + .me-sm-5 { + margin-right: 3rem !important; + } + + .me-sm-auto { + margin-right: auto !important; + } + + .mb-sm-0 { + margin-bottom: 0 !important; + } + + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + + .mb-sm-3 { + margin-bottom: 1rem !important; + } + + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + + .mb-sm-5 { + margin-bottom: 3rem !important; + } + + .mb-sm-auto { + margin-bottom: auto !important; + } + + .ms-sm-0 { + margin-left: 0 !important; + } + + .ms-sm-1 { + margin-left: 0.25rem !important; + } + + .ms-sm-2 { + margin-left: 0.5rem !important; + } + + .ms-sm-3 { + margin-left: 1rem !important; + } + + .ms-sm-4 { + margin-left: 1.5rem !important; + } + + .ms-sm-5 { + margin-left: 3rem !important; + } + + .ms-sm-auto { + margin-left: auto !important; + } + + .p-sm-0 { + padding: 0 !important; + } + + .p-sm-1 { + padding: 0.25rem !important; + } + + .p-sm-2 { + padding: 0.5rem !important; + } + + .p-sm-3 { + padding: 1rem !important; + } + + .p-sm-4 { + padding: 1.5rem !important; + } + + .p-sm-5 { + padding: 3rem !important; + } + + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-sm-0 { + padding-top: 0 !important; + } + + .pt-sm-1 { + padding-top: 0.25rem !important; + } + + .pt-sm-2 { + padding-top: 0.5rem !important; + } + + .pt-sm-3 { + padding-top: 1rem !important; + } + + .pt-sm-4 { + padding-top: 1.5rem !important; + } + + .pt-sm-5 { + padding-top: 3rem !important; + } + + .pe-sm-0 { + padding-right: 0 !important; + } + + .pe-sm-1 { + padding-right: 0.25rem !important; + } + + .pe-sm-2 { + padding-right: 0.5rem !important; + } + + .pe-sm-3 { + padding-right: 1rem !important; + } + + .pe-sm-4 { + padding-right: 1.5rem !important; + } + + .pe-sm-5 { + padding-right: 3rem !important; + } + + .pb-sm-0 { + padding-bottom: 0 !important; + } + + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + + .pb-sm-3 { + padding-bottom: 1rem !important; + } + + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + + .pb-sm-5 { + padding-bottom: 3rem !important; + } + + .ps-sm-0 { + padding-left: 0 !important; + } + + .ps-sm-1 { + padding-left: 0.25rem !important; + } + + .ps-sm-2 { + padding-left: 0.5rem !important; + } + + .ps-sm-3 { + padding-left: 1rem !important; + } + + .ps-sm-4 { + padding-left: 1.5rem !important; + } + + .ps-sm-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 768px) { + .d-md-inline { + display: inline !important; + } + + .d-md-inline-block { + display: inline-block !important; + } + + .d-md-block { + display: block !important; + } + + .d-md-grid { + display: grid !important; + } + + .d-md-table { + display: table !important; + } + + .d-md-table-row { + display: table-row !important; + } + + .d-md-table-cell { + display: table-cell !important; + } + + .d-md-flex { + display: flex !important; + } + + .d-md-inline-flex { + display: inline-flex !important; + } + + .d-md-none { + display: none !important; + } + + .flex-md-fill { + flex: 1 1 auto !important; + } + + .flex-md-row { + flex-direction: row !important; + } + + .flex-md-column { + flex-direction: column !important; + } + + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-md-grow-0 { + flex-grow: 0 !important; + } + + .flex-md-grow-1 { + flex-grow: 1 !important; + } + + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-md-wrap { + flex-wrap: wrap !important; + } + + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-md-start { + justify-content: flex-start !important; + } + + .justify-content-md-end { + justify-content: flex-end !important; + } + + .justify-content-md-center { + justify-content: center !important; + } + + .justify-content-md-between { + justify-content: space-between !important; + } + + .justify-content-md-around { + justify-content: space-around !important; + } + + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + + .align-items-md-start { + align-items: flex-start !important; + } + + .align-items-md-end { + align-items: flex-end !important; + } + + .align-items-md-center { + align-items: center !important; + } + + .align-items-md-baseline { + align-items: baseline !important; + } + + .align-items-md-stretch { + align-items: stretch !important; + } + + .align-content-md-start { + align-content: flex-start !important; + } + + .align-content-md-end { + align-content: flex-end !important; + } + + .align-content-md-center { + align-content: center !important; + } + + .align-content-md-between { + align-content: space-between !important; + } + + .align-content-md-around { + align-content: space-around !important; + } + + .align-content-md-stretch { + align-content: stretch !important; + } + + .align-self-md-auto { + align-self: auto !important; + } + + .align-self-md-start { + align-self: flex-start !important; + } + + .align-self-md-end { + align-self: flex-end !important; + } + + .align-self-md-center { + align-self: center !important; + } + + .align-self-md-baseline { + align-self: baseline !important; + } + + .align-self-md-stretch { + align-self: stretch !important; + } + + .order-md-first { + order: -1 !important; + } + + .order-md-0 { + order: 0 !important; + } + + .order-md-1 { + order: 1 !important; + } + + .order-md-2 { + order: 2 !important; + } + + .order-md-3 { + order: 3 !important; + } + + .order-md-4 { + order: 4 !important; + } + + .order-md-5 { + order: 5 !important; + } + + .order-md-last { + order: 6 !important; + } + + .m-md-0 { + margin: 0 !important; + } + + .m-md-1 { + margin: 0.25rem !important; + } + + .m-md-2 { + margin: 0.5rem !important; + } + + .m-md-3 { + margin: 1rem !important; + } + + .m-md-4 { + margin: 1.5rem !important; + } + + .m-md-5 { + margin: 3rem !important; + } + + .m-md-auto { + margin: auto !important; + } + + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-md-0 { + margin-top: 0 !important; + } + + .mt-md-1 { + margin-top: 0.25rem !important; + } + + .mt-md-2 { + margin-top: 0.5rem !important; + } + + .mt-md-3 { + margin-top: 1rem !important; + } + + .mt-md-4 { + margin-top: 1.5rem !important; + } + + .mt-md-5 { + margin-top: 3rem !important; + } + + .mt-md-auto { + margin-top: auto !important; + } + + .me-md-0 { + margin-right: 0 !important; + } + + .me-md-1 { + margin-right: 0.25rem !important; + } + + .me-md-2 { + margin-right: 0.5rem !important; + } + + .me-md-3 { + margin-right: 1rem !important; + } + + .me-md-4 { + margin-right: 1.5rem !important; + } + + .me-md-5 { + margin-right: 3rem !important; + } + + .me-md-auto { + margin-right: auto !important; + } + + .mb-md-0 { + margin-bottom: 0 !important; + } + + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + + .mb-md-3 { + margin-bottom: 1rem !important; + } + + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + + .mb-md-5 { + margin-bottom: 3rem !important; + } + + .mb-md-auto { + margin-bottom: auto !important; + } + + .ms-md-0 { + margin-left: 0 !important; + } + + .ms-md-1 { + margin-left: 0.25rem !important; + } + + .ms-md-2 { + margin-left: 0.5rem !important; + } + + .ms-md-3 { + margin-left: 1rem !important; + } + + .ms-md-4 { + margin-left: 1.5rem !important; + } + + .ms-md-5 { + margin-left: 3rem !important; + } + + .ms-md-auto { + margin-left: auto !important; + } + + .p-md-0 { + padding: 0 !important; + } + + .p-md-1 { + padding: 0.25rem !important; + } + + .p-md-2 { + padding: 0.5rem !important; + } + + .p-md-3 { + padding: 1rem !important; + } + + .p-md-4 { + padding: 1.5rem !important; + } + + .p-md-5 { + padding: 3rem !important; + } + + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-md-0 { + padding-top: 0 !important; + } + + .pt-md-1 { + padding-top: 0.25rem !important; + } + + .pt-md-2 { + padding-top: 0.5rem !important; + } + + .pt-md-3 { + padding-top: 1rem !important; + } + + .pt-md-4 { + padding-top: 1.5rem !important; + } + + .pt-md-5 { + padding-top: 3rem !important; + } + + .pe-md-0 { + padding-right: 0 !important; + } + + .pe-md-1 { + padding-right: 0.25rem !important; + } + + .pe-md-2 { + padding-right: 0.5rem !important; + } + + .pe-md-3 { + padding-right: 1rem !important; + } + + .pe-md-4 { + padding-right: 1.5rem !important; + } + + .pe-md-5 { + padding-right: 3rem !important; + } + + .pb-md-0 { + padding-bottom: 0 !important; + } + + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + + .pb-md-3 { + padding-bottom: 1rem !important; + } + + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + + .pb-md-5 { + padding-bottom: 3rem !important; + } + + .ps-md-0 { + padding-left: 0 !important; + } + + .ps-md-1 { + padding-left: 0.25rem !important; + } + + .ps-md-2 { + padding-left: 0.5rem !important; + } + + .ps-md-3 { + padding-left: 1rem !important; + } + + .ps-md-4 { + padding-left: 1.5rem !important; + } + + .ps-md-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 992px) { + .d-lg-inline { + display: inline !important; + } + + .d-lg-inline-block { + display: inline-block !important; + } + + .d-lg-block { + display: block !important; + } + + .d-lg-grid { + display: grid !important; + } + + .d-lg-table { + display: table !important; + } + + .d-lg-table-row { + display: table-row !important; + } + + .d-lg-table-cell { + display: table-cell !important; + } + + .d-lg-flex { + display: flex !important; + } + + .d-lg-inline-flex { + display: inline-flex !important; + } + + .d-lg-none { + display: none !important; + } + + .flex-lg-fill { + flex: 1 1 auto !important; + } + + .flex-lg-row { + flex-direction: row !important; + } + + .flex-lg-column { + flex-direction: column !important; + } + + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-lg-wrap { + flex-wrap: wrap !important; + } + + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-lg-start { + justify-content: flex-start !important; + } + + .justify-content-lg-end { + justify-content: flex-end !important; + } + + .justify-content-lg-center { + justify-content: center !important; + } + + .justify-content-lg-between { + justify-content: space-between !important; + } + + .justify-content-lg-around { + justify-content: space-around !important; + } + + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + + .align-items-lg-start { + align-items: flex-start !important; + } + + .align-items-lg-end { + align-items: flex-end !important; + } + + .align-items-lg-center { + align-items: center !important; + } + + .align-items-lg-baseline { + align-items: baseline !important; + } + + .align-items-lg-stretch { + align-items: stretch !important; + } + + .align-content-lg-start { + align-content: flex-start !important; + } + + .align-content-lg-end { + align-content: flex-end !important; + } + + .align-content-lg-center { + align-content: center !important; + } + + .align-content-lg-between { + align-content: space-between !important; + } + + .align-content-lg-around { + align-content: space-around !important; + } + + .align-content-lg-stretch { + align-content: stretch !important; + } + + .align-self-lg-auto { + align-self: auto !important; + } + + .align-self-lg-start { + align-self: flex-start !important; + } + + .align-self-lg-end { + align-self: flex-end !important; + } + + .align-self-lg-center { + align-self: center !important; + } + + .align-self-lg-baseline { + align-self: baseline !important; + } + + .align-self-lg-stretch { + align-self: stretch !important; + } + + .order-lg-first { + order: -1 !important; + } + + .order-lg-0 { + order: 0 !important; + } + + .order-lg-1 { + order: 1 !important; + } + + .order-lg-2 { + order: 2 !important; + } + + .order-lg-3 { + order: 3 !important; + } + + .order-lg-4 { + order: 4 !important; + } + + .order-lg-5 { + order: 5 !important; + } + + .order-lg-last { + order: 6 !important; + } + + .m-lg-0 { + margin: 0 !important; + } + + .m-lg-1 { + margin: 0.25rem !important; + } + + .m-lg-2 { + margin: 0.5rem !important; + } + + .m-lg-3 { + margin: 1rem !important; + } + + .m-lg-4 { + margin: 1.5rem !important; + } + + .m-lg-5 { + margin: 3rem !important; + } + + .m-lg-auto { + margin: auto !important; + } + + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-lg-0 { + margin-top: 0 !important; + } + + .mt-lg-1 { + margin-top: 0.25rem !important; + } + + .mt-lg-2 { + margin-top: 0.5rem !important; + } + + .mt-lg-3 { + margin-top: 1rem !important; + } + + .mt-lg-4 { + margin-top: 1.5rem !important; + } + + .mt-lg-5 { + margin-top: 3rem !important; + } + + .mt-lg-auto { + margin-top: auto !important; + } + + .me-lg-0 { + margin-right: 0 !important; + } + + .me-lg-1 { + margin-right: 0.25rem !important; + } + + .me-lg-2 { + margin-right: 0.5rem !important; + } + + .me-lg-3 { + margin-right: 1rem !important; + } + + .me-lg-4 { + margin-right: 1.5rem !important; + } + + .me-lg-5 { + margin-right: 3rem !important; + } + + .me-lg-auto { + margin-right: auto !important; + } + + .mb-lg-0 { + margin-bottom: 0 !important; + } + + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + + .mb-lg-3 { + margin-bottom: 1rem !important; + } + + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + + .mb-lg-5 { + margin-bottom: 3rem !important; + } + + .mb-lg-auto { + margin-bottom: auto !important; + } + + .ms-lg-0 { + margin-left: 0 !important; + } + + .ms-lg-1 { + margin-left: 0.25rem !important; + } + + .ms-lg-2 { + margin-left: 0.5rem !important; + } + + .ms-lg-3 { + margin-left: 1rem !important; + } + + .ms-lg-4 { + margin-left: 1.5rem !important; + } + + .ms-lg-5 { + margin-left: 3rem !important; + } + + .ms-lg-auto { + margin-left: auto !important; + } + + .p-lg-0 { + padding: 0 !important; + } + + .p-lg-1 { + padding: 0.25rem !important; + } + + .p-lg-2 { + padding: 0.5rem !important; + } + + .p-lg-3 { + padding: 1rem !important; + } + + .p-lg-4 { + padding: 1.5rem !important; + } + + .p-lg-5 { + padding: 3rem !important; + } + + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-lg-0 { + padding-top: 0 !important; + } + + .pt-lg-1 { + padding-top: 0.25rem !important; + } + + .pt-lg-2 { + padding-top: 0.5rem !important; + } + + .pt-lg-3 { + padding-top: 1rem !important; + } + + .pt-lg-4 { + padding-top: 1.5rem !important; + } + + .pt-lg-5 { + padding-top: 3rem !important; + } + + .pe-lg-0 { + padding-right: 0 !important; + } + + .pe-lg-1 { + padding-right: 0.25rem !important; + } + + .pe-lg-2 { + padding-right: 0.5rem !important; + } + + .pe-lg-3 { + padding-right: 1rem !important; + } + + .pe-lg-4 { + padding-right: 1.5rem !important; + } + + .pe-lg-5 { + padding-right: 3rem !important; + } + + .pb-lg-0 { + padding-bottom: 0 !important; + } + + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + + .pb-lg-3 { + padding-bottom: 1rem !important; + } + + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + + .pb-lg-5 { + padding-bottom: 3rem !important; + } + + .ps-lg-0 { + padding-left: 0 !important; + } + + .ps-lg-1 { + padding-left: 0.25rem !important; + } + + .ps-lg-2 { + padding-left: 0.5rem !important; + } + + .ps-lg-3 { + padding-left: 1rem !important; + } + + .ps-lg-4 { + padding-left: 1.5rem !important; + } + + .ps-lg-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 1200px) { + .d-xl-inline { + display: inline !important; + } + + .d-xl-inline-block { + display: inline-block !important; + } + + .d-xl-block { + display: block !important; + } + + .d-xl-grid { + display: grid !important; + } + + .d-xl-table { + display: table !important; + } + + .d-xl-table-row { + display: table-row !important; + } + + .d-xl-table-cell { + display: table-cell !important; + } + + .d-xl-flex { + display: flex !important; + } + + .d-xl-inline-flex { + display: inline-flex !important; + } + + .d-xl-none { + display: none !important; + } + + .flex-xl-fill { + flex: 1 1 auto !important; + } + + .flex-xl-row { + flex-direction: row !important; + } + + .flex-xl-column { + flex-direction: column !important; + } + + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-xl-wrap { + flex-wrap: wrap !important; + } + + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-xl-start { + justify-content: flex-start !important; + } + + .justify-content-xl-end { + justify-content: flex-end !important; + } + + .justify-content-xl-center { + justify-content: center !important; + } + + .justify-content-xl-between { + justify-content: space-between !important; + } + + .justify-content-xl-around { + justify-content: space-around !important; + } + + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + + .align-items-xl-start { + align-items: flex-start !important; + } + + .align-items-xl-end { + align-items: flex-end !important; + } + + .align-items-xl-center { + align-items: center !important; + } + + .align-items-xl-baseline { + align-items: baseline !important; + } + + .align-items-xl-stretch { + align-items: stretch !important; + } + + .align-content-xl-start { + align-content: flex-start !important; + } + + .align-content-xl-end { + align-content: flex-end !important; + } + + .align-content-xl-center { + align-content: center !important; + } + + .align-content-xl-between { + align-content: space-between !important; + } + + .align-content-xl-around { + align-content: space-around !important; + } + + .align-content-xl-stretch { + align-content: stretch !important; + } + + .align-self-xl-auto { + align-self: auto !important; + } + + .align-self-xl-start { + align-self: flex-start !important; + } + + .align-self-xl-end { + align-self: flex-end !important; + } + + .align-self-xl-center { + align-self: center !important; + } + + .align-self-xl-baseline { + align-self: baseline !important; + } + + .align-self-xl-stretch { + align-self: stretch !important; + } + + .order-xl-first { + order: -1 !important; + } + + .order-xl-0 { + order: 0 !important; + } + + .order-xl-1 { + order: 1 !important; + } + + .order-xl-2 { + order: 2 !important; + } + + .order-xl-3 { + order: 3 !important; + } + + .order-xl-4 { + order: 4 !important; + } + + .order-xl-5 { + order: 5 !important; + } + + .order-xl-last { + order: 6 !important; + } + + .m-xl-0 { + margin: 0 !important; + } + + .m-xl-1 { + margin: 0.25rem !important; + } + + .m-xl-2 { + margin: 0.5rem !important; + } + + .m-xl-3 { + margin: 1rem !important; + } + + .m-xl-4 { + margin: 1.5rem !important; + } + + .m-xl-5 { + margin: 3rem !important; + } + + .m-xl-auto { + margin: auto !important; + } + + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xl-0 { + margin-top: 0 !important; + } + + .mt-xl-1 { + margin-top: 0.25rem !important; + } + + .mt-xl-2 { + margin-top: 0.5rem !important; + } + + .mt-xl-3 { + margin-top: 1rem !important; + } + + .mt-xl-4 { + margin-top: 1.5rem !important; + } + + .mt-xl-5 { + margin-top: 3rem !important; + } + + .mt-xl-auto { + margin-top: auto !important; + } + + .me-xl-0 { + margin-right: 0 !important; + } + + .me-xl-1 { + margin-right: 0.25rem !important; + } + + .me-xl-2 { + margin-right: 0.5rem !important; + } + + .me-xl-3 { + margin-right: 1rem !important; + } + + .me-xl-4 { + margin-right: 1.5rem !important; + } + + .me-xl-5 { + margin-right: 3rem !important; + } + + .me-xl-auto { + margin-right: auto !important; + } + + .mb-xl-0 { + margin-bottom: 0 !important; + } + + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + + .mb-xl-3 { + margin-bottom: 1rem !important; + } + + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + + .mb-xl-5 { + margin-bottom: 3rem !important; + } + + .mb-xl-auto { + margin-bottom: auto !important; + } + + .ms-xl-0 { + margin-left: 0 !important; + } + + .ms-xl-1 { + margin-left: 0.25rem !important; + } + + .ms-xl-2 { + margin-left: 0.5rem !important; + } + + .ms-xl-3 { + margin-left: 1rem !important; + } + + .ms-xl-4 { + margin-left: 1.5rem !important; + } + + .ms-xl-5 { + margin-left: 3rem !important; + } + + .ms-xl-auto { + margin-left: auto !important; + } + + .p-xl-0 { + padding: 0 !important; + } + + .p-xl-1 { + padding: 0.25rem !important; + } + + .p-xl-2 { + padding: 0.5rem !important; + } + + .p-xl-3 { + padding: 1rem !important; + } + + .p-xl-4 { + padding: 1.5rem !important; + } + + .p-xl-5 { + padding: 3rem !important; + } + + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xl-0 { + padding-top: 0 !important; + } + + .pt-xl-1 { + padding-top: 0.25rem !important; + } + + .pt-xl-2 { + padding-top: 0.5rem !important; + } + + .pt-xl-3 { + padding-top: 1rem !important; + } + + .pt-xl-4 { + padding-top: 1.5rem !important; + } + + .pt-xl-5 { + padding-top: 3rem !important; + } + + .pe-xl-0 { + padding-right: 0 !important; + } + + .pe-xl-1 { + padding-right: 0.25rem !important; + } + + .pe-xl-2 { + padding-right: 0.5rem !important; + } + + .pe-xl-3 { + padding-right: 1rem !important; + } + + .pe-xl-4 { + padding-right: 1.5rem !important; + } + + .pe-xl-5 { + padding-right: 3rem !important; + } + + .pb-xl-0 { + padding-bottom: 0 !important; + } + + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + + .pb-xl-3 { + padding-bottom: 1rem !important; + } + + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + + .pb-xl-5 { + padding-bottom: 3rem !important; + } + + .ps-xl-0 { + padding-left: 0 !important; + } + + .ps-xl-1 { + padding-left: 0.25rem !important; + } + + .ps-xl-2 { + padding-left: 0.5rem !important; + } + + .ps-xl-3 { + padding-left: 1rem !important; + } + + .ps-xl-4 { + padding-left: 1.5rem !important; + } + + .ps-xl-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 1400px) { + .d-xxl-inline { + display: inline !important; + } + + .d-xxl-inline-block { + display: inline-block !important; + } + + .d-xxl-block { + display: block !important; + } + + .d-xxl-grid { + display: grid !important; + } + + .d-xxl-table { + display: table !important; + } + + .d-xxl-table-row { + display: table-row !important; + } + + .d-xxl-table-cell { + display: table-cell !important; + } + + .d-xxl-flex { + display: flex !important; + } + + .d-xxl-inline-flex { + display: inline-flex !important; + } + + .d-xxl-none { + display: none !important; + } + + .flex-xxl-fill { + flex: 1 1 auto !important; + } + + .flex-xxl-row { + flex-direction: row !important; + } + + .flex-xxl-column { + flex-direction: column !important; + } + + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-xxl-start { + justify-content: flex-start !important; + } + + .justify-content-xxl-end { + justify-content: flex-end !important; + } + + .justify-content-xxl-center { + justify-content: center !important; + } + + .justify-content-xxl-between { + justify-content: space-between !important; + } + + .justify-content-xxl-around { + justify-content: space-around !important; + } + + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + + .align-items-xxl-start { + align-items: flex-start !important; + } + + .align-items-xxl-end { + align-items: flex-end !important; + } + + .align-items-xxl-center { + align-items: center !important; + } + + .align-items-xxl-baseline { + align-items: baseline !important; + } + + .align-items-xxl-stretch { + align-items: stretch !important; + } + + .align-content-xxl-start { + align-content: flex-start !important; + } + + .align-content-xxl-end { + align-content: flex-end !important; + } + + .align-content-xxl-center { + align-content: center !important; + } + + .align-content-xxl-between { + align-content: space-between !important; + } + + .align-content-xxl-around { + align-content: space-around !important; + } + + .align-content-xxl-stretch { + align-content: stretch !important; + } + + .align-self-xxl-auto { + align-self: auto !important; + } + + .align-self-xxl-start { + align-self: flex-start !important; + } + + .align-self-xxl-end { + align-self: flex-end !important; + } + + .align-self-xxl-center { + align-self: center !important; + } + + .align-self-xxl-baseline { + align-self: baseline !important; + } + + .align-self-xxl-stretch { + align-self: stretch !important; + } + + .order-xxl-first { + order: -1 !important; + } + + .order-xxl-0 { + order: 0 !important; + } + + .order-xxl-1 { + order: 1 !important; + } + + .order-xxl-2 { + order: 2 !important; + } + + .order-xxl-3 { + order: 3 !important; + } + + .order-xxl-4 { + order: 4 !important; + } + + .order-xxl-5 { + order: 5 !important; + } + + .order-xxl-last { + order: 6 !important; + } + + .m-xxl-0 { + margin: 0 !important; + } + + .m-xxl-1 { + margin: 0.25rem !important; + } + + .m-xxl-2 { + margin: 0.5rem !important; + } + + .m-xxl-3 { + margin: 1rem !important; + } + + .m-xxl-4 { + margin: 1.5rem !important; + } + + .m-xxl-5 { + margin: 3rem !important; + } + + .m-xxl-auto { + margin: auto !important; + } + + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xxl-0 { + margin-top: 0 !important; + } + + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + + .mt-xxl-3 { + margin-top: 1rem !important; + } + + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + + .mt-xxl-5 { + margin-top: 3rem !important; + } + + .mt-xxl-auto { + margin-top: auto !important; + } + + .me-xxl-0 { + margin-right: 0 !important; + } + + .me-xxl-1 { + margin-right: 0.25rem !important; + } + + .me-xxl-2 { + margin-right: 0.5rem !important; + } + + .me-xxl-3 { + margin-right: 1rem !important; + } + + .me-xxl-4 { + margin-right: 1.5rem !important; + } + + .me-xxl-5 { + margin-right: 3rem !important; + } + + .me-xxl-auto { + margin-right: auto !important; + } + + .mb-xxl-0 { + margin-bottom: 0 !important; + } + + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + + .mb-xxl-auto { + margin-bottom: auto !important; + } + + .ms-xxl-0 { + margin-left: 0 !important; + } + + .ms-xxl-1 { + margin-left: 0.25rem !important; + } + + .ms-xxl-2 { + margin-left: 0.5rem !important; + } + + .ms-xxl-3 { + margin-left: 1rem !important; + } + + .ms-xxl-4 { + margin-left: 1.5rem !important; + } + + .ms-xxl-5 { + margin-left: 3rem !important; + } + + .ms-xxl-auto { + margin-left: auto !important; + } + + .p-xxl-0 { + padding: 0 !important; + } + + .p-xxl-1 { + padding: 0.25rem !important; + } + + .p-xxl-2 { + padding: 0.5rem !important; + } + + .p-xxl-3 { + padding: 1rem !important; + } + + .p-xxl-4 { + padding: 1.5rem !important; + } + + .p-xxl-5 { + padding: 3rem !important; + } + + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xxl-0 { + padding-top: 0 !important; + } + + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + + .pt-xxl-3 { + padding-top: 1rem !important; + } + + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + + .pt-xxl-5 { + padding-top: 3rem !important; + } + + .pe-xxl-0 { + padding-right: 0 !important; + } + + .pe-xxl-1 { + padding-right: 0.25rem !important; + } + + .pe-xxl-2 { + padding-right: 0.5rem !important; + } + + .pe-xxl-3 { + padding-right: 1rem !important; + } + + .pe-xxl-4 { + padding-right: 1.5rem !important; + } + + .pe-xxl-5 { + padding-right: 3rem !important; + } + + .pb-xxl-0 { + padding-bottom: 0 !important; + } + + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + + .ps-xxl-0 { + padding-left: 0 !important; + } + + .ps-xxl-1 { + padding-left: 0.25rem !important; + } + + .ps-xxl-2 { + padding-left: 0.5rem !important; + } + + .ps-xxl-3 { + padding-left: 1rem !important; + } + + .ps-xxl-4 { + padding-left: 1.5rem !important; + } + + .ps-xxl-5 { + padding-left: 3rem !important; + } +} +@media print { + .d-print-inline { + display: inline !important; + } + + .d-print-inline-block { + display: inline-block !important; + } + + .d-print-block { + display: block !important; + } + + .d-print-grid { + display: grid !important; + } + + .d-print-table { + display: table !important; + } + + .d-print-table-row { + display: table-row !important; + } + + .d-print-table-cell { + display: table-cell !important; + } + + .d-print-flex { + display: flex !important; + } + + .d-print-inline-flex { + display: inline-flex !important; + } + + .d-print-none { + display: none !important; + } +} + +/*# sourceMappingURL=bootstrap-grid.css.map */ \ No newline at end of file diff --git a/pkgs/csslib/third_party/bootstrap/bootstrap.css b/pkgs/csslib/third_party/bootstrap/bootstrap.css new file mode 100644 index 000000000..f78e17718 --- /dev/null +++ b/pkgs/csslib/third_party/bootstrap/bootstrap.css @@ -0,0 +1,11222 @@ +@charset "UTF-8"; +/*! + * Bootstrap v5.1.1 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +@media (prefers-reduced-motion: no-preference) { + :root { + scroll-behavior: smooth; + } +} + +body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +hr { + margin: 1rem 0; + color: inherit; + background-color: currentColor; + border: 0; + opacity: 0.25; +} + +hr:not([size]) { + height: 1px; +} + +h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +h1, .h1 { + font-size: calc(1.375rem + 1.5vw); +} +@media (min-width: 1200px) { + h1, .h1 { + font-size: 2.5rem; + } +} + +h2, .h2 { + font-size: calc(1.325rem + 0.9vw); +} +@media (min-width: 1200px) { + h2, .h2 { + font-size: 2rem; + } +} + +h3, .h3 { + font-size: calc(1.3rem + 0.6vw); +} +@media (min-width: 1200px) { + h3, .h3 { + font-size: 1.75rem; + } +} + +h4, .h4 { + font-size: calc(1.275rem + 0.3vw); +} +@media (min-width: 1200px) { + h4, .h4 { + font-size: 1.5rem; + } +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-bs-original-title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul { + padding-left: 2rem; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: 0.5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small, .small { + font-size: 0.875em; +} + +mark, .mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +sub, +sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #0d6efd; + text-decoration: underline; +} +a:hover { + color: #0a58ca; +} + +a:not([href]):not([class]), a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +pre, +code, +kbd, +samp { + font-family: var(--bs-font-monospace); + font-size: 1em; + direction: ltr /* rtl:ignore */; + unicode-bidi: bidi-override; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; +} +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +code { + font-size: 0.875em; + color: #d63384; + word-wrap: break-word; +} +a > code { + color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 0.875em; + color: #fff; + background-color: #212529; + border-radius: 0.2rem; +} +kbd kbd { + padding: 0; + font-size: 1em; + font-weight: 700; +} + +figure { + margin: 0 0 1rem; +} + +img, +svg { + vertical-align: middle; +} + +table { + caption-side: bottom; + border-collapse: collapse; +} + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: #6c757d; + text-align: left; +} + +th { + text-align: inherit; + text-align: -webkit-match-parent; +} + +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; +} + +label { + display: inline-block; +} + +button { + border-radius: 0; +} + +button:focus:not(:focus-visible) { + outline: 0; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +select { + text-transform: none; +} + +[role=button] { + cursor: pointer; +} + +select { + word-wrap: normal; +} +select:disabled { + opacity: 1; +} + +[list]::-webkit-calendar-picker-indicator { + display: none; +} + +button, +[type=button], +[type=reset], +[type=submit] { + -webkit-appearance: button; +} +button:not(:disabled), +[type=button]:not(:disabled), +[type=reset]:not(:disabled), +[type=submit]:not(:disabled) { + cursor: pointer; +} + +::-moz-focus-inner { + padding: 0; + border-style: none; +} + +textarea { + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} +@media (min-width: 1200px) { + legend { + font-size: 1.5rem; + } +} +legend + * { + clear: left; +} + +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-year-field { + padding: 0; +} + +::-webkit-inner-spin-button { + height: auto; +} + +[type=search] { + outline-offset: -2px; + -webkit-appearance: textfield; +} + +/* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ +::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-color-swatch-wrapper { + padding: 0; +} + +::file-selector-button { + font: inherit; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +iframe { + border: 0; +} + +summary { + display: list-item; + cursor: pointer; +} + +progress { + vertical-align: baseline; +} + +[hidden] { + display: none !important; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-1 { + font-size: 5rem; + } +} + +.display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-2 { + font-size: 4.5rem; + } +} + +.display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-3 { + font-size: 4rem; + } +} + +.display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-4 { + font-size: 3.5rem; + } +} + +.display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-5 { + font-size: 3rem; + } +} + +.display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-6 { + font-size: 2.5rem; + } +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 0.875em; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} +.blockquote > :last-child { + margin-bottom: 0; +} + +.blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; +} +.blockquote-footer::before { + content: "— "; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 0.875em; + color: #6c757d; +} + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + width: 100%; + padding-right: var(--bs-gutter-x, 0.75rem); + padding-left: var(--bs-gutter-x, 0.75rem); + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; + } +} +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; + } +} +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; + } +} +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; + } +} +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; + } +} +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(var(--bs-gutter-y) * -1); + margin-right: calc(var(--bs-gutter-x) * -.5); + margin-left: calc(var(--bs-gutter-x) * -.5); +} +.row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * .5); + padding-left: calc(var(--bs-gutter-x) * .5); + margin-top: var(--bs-gutter-y); +} + +.col { + flex: 1 0 0%; +} + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; +} + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; +} + +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.col-3 { + flex: 0 0 auto; + width: 25%; +} + +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.col-6 { + flex: 0 0 auto; + width: 50%; +} + +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.col-9 { + flex: 0 0 auto; + width: 75%; +} + +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.col-12 { + flex: 0 0 auto; + width: 100%; +} + +.offset-1 { + margin-left: 8.33333333%; +} + +.offset-2 { + margin-left: 16.66666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.33333333%; +} + +.offset-5 { + margin-left: 41.66666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.33333333%; +} + +.offset-8 { + margin-left: 66.66666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.33333333%; +} + +.offset-11 { + margin-left: 91.66666667%; +} + +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} + +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; + } + + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-sm-0 { + margin-left: 0; + } + + .offset-sm-1 { + margin-left: 8.33333333%; + } + + .offset-sm-2 { + margin-left: 16.66666667%; + } + + .offset-sm-3 { + margin-left: 25%; + } + + .offset-sm-4 { + margin-left: 33.33333333%; + } + + .offset-sm-5 { + margin-left: 41.66666667%; + } + + .offset-sm-6 { + margin-left: 50%; + } + + .offset-sm-7 { + margin-left: 58.33333333%; + } + + .offset-sm-8 { + margin-left: 66.66666667%; + } + + .offset-sm-9 { + margin-left: 75%; + } + + .offset-sm-10 { + margin-left: 83.33333333%; + } + + .offset-sm-11 { + margin-left: 91.66666667%; + } + + .g-sm-0, +.gx-sm-0 { + --bs-gutter-x: 0; + } + + .g-sm-0, +.gy-sm-0 { + --bs-gutter-y: 0; + } + + .g-sm-1, +.gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + + .g-sm-1, +.gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + + .g-sm-2, +.gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + + .g-sm-2, +.gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + + .g-sm-3, +.gx-sm-3 { + --bs-gutter-x: 1rem; + } + + .g-sm-3, +.gy-sm-3 { + --bs-gutter-y: 1rem; + } + + .g-sm-4, +.gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + + .g-sm-4, +.gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + + .g-sm-5, +.gx-sm-5 { + --bs-gutter-x: 3rem; + } + + .g-sm-5, +.gy-sm-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; + } + + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-md-auto { + flex: 0 0 auto; + width: auto; + } + + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-md-0 { + margin-left: 0; + } + + .offset-md-1 { + margin-left: 8.33333333%; + } + + .offset-md-2 { + margin-left: 16.66666667%; + } + + .offset-md-3 { + margin-left: 25%; + } + + .offset-md-4 { + margin-left: 33.33333333%; + } + + .offset-md-5 { + margin-left: 41.66666667%; + } + + .offset-md-6 { + margin-left: 50%; + } + + .offset-md-7 { + margin-left: 58.33333333%; + } + + .offset-md-8 { + margin-left: 66.66666667%; + } + + .offset-md-9 { + margin-left: 75%; + } + + .offset-md-10 { + margin-left: 83.33333333%; + } + + .offset-md-11 { + margin-left: 91.66666667%; + } + + .g-md-0, +.gx-md-0 { + --bs-gutter-x: 0; + } + + .g-md-0, +.gy-md-0 { + --bs-gutter-y: 0; + } + + .g-md-1, +.gx-md-1 { + --bs-gutter-x: 0.25rem; + } + + .g-md-1, +.gy-md-1 { + --bs-gutter-y: 0.25rem; + } + + .g-md-2, +.gx-md-2 { + --bs-gutter-x: 0.5rem; + } + + .g-md-2, +.gy-md-2 { + --bs-gutter-y: 0.5rem; + } + + .g-md-3, +.gx-md-3 { + --bs-gutter-x: 1rem; + } + + .g-md-3, +.gy-md-3 { + --bs-gutter-y: 1rem; + } + + .g-md-4, +.gx-md-4 { + --bs-gutter-x: 1.5rem; + } + + .g-md-4, +.gy-md-4 { + --bs-gutter-y: 1.5rem; + } + + .g-md-5, +.gx-md-5 { + --bs-gutter-x: 3rem; + } + + .g-md-5, +.gy-md-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; + } + + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-lg-0 { + margin-left: 0; + } + + .offset-lg-1 { + margin-left: 8.33333333%; + } + + .offset-lg-2 { + margin-left: 16.66666667%; + } + + .offset-lg-3 { + margin-left: 25%; + } + + .offset-lg-4 { + margin-left: 33.33333333%; + } + + .offset-lg-5 { + margin-left: 41.66666667%; + } + + .offset-lg-6 { + margin-left: 50%; + } + + .offset-lg-7 { + margin-left: 58.33333333%; + } + + .offset-lg-8 { + margin-left: 66.66666667%; + } + + .offset-lg-9 { + margin-left: 75%; + } + + .offset-lg-10 { + margin-left: 83.33333333%; + } + + .offset-lg-11 { + margin-left: 91.66666667%; + } + + .g-lg-0, +.gx-lg-0 { + --bs-gutter-x: 0; + } + + .g-lg-0, +.gy-lg-0 { + --bs-gutter-y: 0; + } + + .g-lg-1, +.gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + + .g-lg-1, +.gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + + .g-lg-2, +.gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + + .g-lg-2, +.gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + + .g-lg-3, +.gx-lg-3 { + --bs-gutter-x: 1rem; + } + + .g-lg-3, +.gy-lg-3 { + --bs-gutter-y: 1rem; + } + + .g-lg-4, +.gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + + .g-lg-4, +.gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + + .g-lg-5, +.gx-lg-5 { + --bs-gutter-x: 3rem; + } + + .g-lg-5, +.gy-lg-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; + } + + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-xl-0 { + margin-left: 0; + } + + .offset-xl-1 { + margin-left: 8.33333333%; + } + + .offset-xl-2 { + margin-left: 16.66666667%; + } + + .offset-xl-3 { + margin-left: 25%; + } + + .offset-xl-4 { + margin-left: 33.33333333%; + } + + .offset-xl-5 { + margin-left: 41.66666667%; + } + + .offset-xl-6 { + margin-left: 50%; + } + + .offset-xl-7 { + margin-left: 58.33333333%; + } + + .offset-xl-8 { + margin-left: 66.66666667%; + } + + .offset-xl-9 { + margin-left: 75%; + } + + .offset-xl-10 { + margin-left: 83.33333333%; + } + + .offset-xl-11 { + margin-left: 91.66666667%; + } + + .g-xl-0, +.gx-xl-0 { + --bs-gutter-x: 0; + } + + .g-xl-0, +.gy-xl-0 { + --bs-gutter-y: 0; + } + + .g-xl-1, +.gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + + .g-xl-1, +.gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + + .g-xl-2, +.gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + + .g-xl-2, +.gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + + .g-xl-3, +.gx-xl-3 { + --bs-gutter-x: 1rem; + } + + .g-xl-3, +.gy-xl-3 { + --bs-gutter-y: 1rem; + } + + .g-xl-4, +.gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + + .g-xl-4, +.gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + + .g-xl-5, +.gx-xl-5 { + --bs-gutter-x: 3rem; + } + + .g-xl-5, +.gy-xl-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; + } + + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-xxl-0 { + margin-left: 0; + } + + .offset-xxl-1 { + margin-left: 8.33333333%; + } + + .offset-xxl-2 { + margin-left: 16.66666667%; + } + + .offset-xxl-3 { + margin-left: 25%; + } + + .offset-xxl-4 { + margin-left: 33.33333333%; + } + + .offset-xxl-5 { + margin-left: 41.66666667%; + } + + .offset-xxl-6 { + margin-left: 50%; + } + + .offset-xxl-7 { + margin-left: 58.33333333%; + } + + .offset-xxl-8 { + margin-left: 66.66666667%; + } + + .offset-xxl-9 { + margin-left: 75%; + } + + .offset-xxl-10 { + margin-left: 83.33333333%; + } + + .offset-xxl-11 { + margin-left: 91.66666667%; + } + + .g-xxl-0, +.gx-xxl-0 { + --bs-gutter-x: 0; + } + + .g-xxl-0, +.gy-xxl-0 { + --bs-gutter-y: 0; + } + + .g-xxl-1, +.gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + + .g-xxl-1, +.gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + + .g-xxl-2, +.gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + + .g-xxl-2, +.gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + + .g-xxl-3, +.gx-xxl-3 { + --bs-gutter-x: 1rem; + } + + .g-xxl-3, +.gy-xxl-3 { + --bs-gutter-y: 1rem; + } + + .g-xxl-4, +.gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + + .g-xxl-4, +.gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + + .g-xxl-5, +.gx-xxl-5 { + --bs-gutter-x: 3rem; + } + + .g-xxl-5, +.gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} +.table { + --bs-table-bg: transparent; + --bs-table-accent-bg: transparent; + --bs-table-striped-color: #212529; + --bs-table-striped-bg: rgba(0, 0, 0, 0.05); + --bs-table-active-color: #212529; + --bs-table-active-bg: rgba(0, 0, 0, 0.1); + --bs-table-hover-color: #212529; + --bs-table-hover-bg: rgba(0, 0, 0, 0.075); + width: 100%; + margin-bottom: 1rem; + color: #212529; + vertical-align: top; + border-color: #dee2e6; +} +.table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + background-color: var(--bs-table-bg); + border-bottom-width: 1px; + box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); +} +.table > tbody { + vertical-align: inherit; +} +.table > thead { + vertical-align: bottom; +} +.table > :not(:last-child) > :last-child > * { + border-bottom-color: currentColor; +} + +.caption-top { + caption-side: top; +} + +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} + +.table-bordered > :not(caption) > * { + border-width: 1px 0; +} +.table-bordered > :not(caption) > * > * { + border-width: 0 1px; +} + +.table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} + +.table-striped > tbody > tr:nth-of-type(odd) { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.table-active { + --bs-table-accent-bg: var(--bs-table-active-bg); + color: var(--bs-table-active-color); +} + +.table-hover > tbody > tr:hover { + --bs-table-accent-bg: var(--bs-table-hover-bg); + color: var(--bs-table-hover-color); +} + +.table-primary { + --bs-table-bg: #cfe2ff; + --bs-table-striped-bg: #c5d7f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bacbe6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfd1ec; + --bs-table-hover-color: #000; + color: #000; + border-color: #bacbe6; +} + +.table-secondary { + --bs-table-bg: #e2e3e5; + --bs-table-striped-bg: #d7d8da; + --bs-table-striped-color: #000; + --bs-table-active-bg: #cbccce; + --bs-table-active-color: #000; + --bs-table-hover-bg: #d1d2d4; + --bs-table-hover-color: #000; + color: #000; + border-color: #cbccce; +} + +.table-success { + --bs-table-bg: #d1e7dd; + --bs-table-striped-bg: #c7dbd2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bcd0c7; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c1d6cc; + --bs-table-hover-color: #000; + color: #000; + border-color: #bcd0c7; +} + +.table-info { + --bs-table-bg: #cff4fc; + --bs-table-striped-bg: #c5e8ef; + --bs-table-striped-color: #000; + --bs-table-active-bg: #badce3; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfe2e9; + --bs-table-hover-color: #000; + color: #000; + border-color: #badce3; +} + +.table-warning { + --bs-table-bg: #fff3cd; + --bs-table-striped-bg: #f2e7c3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6dbb9; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ece1be; + --bs-table-hover-color: #000; + color: #000; + border-color: #e6dbb9; +} + +.table-danger { + --bs-table-bg: #f8d7da; + --bs-table-striped-bg: #eccccf; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfc2c4; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5c7ca; + --bs-table-hover-color: #000; + color: #000; + border-color: #dfc2c4; +} + +.table-light { + --bs-table-bg: #f8f9fa; + --bs-table-striped-bg: #ecedee; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfe0e1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5e6e7; + --bs-table-hover-color: #000; + color: #000; + border-color: #dfe0e1; +} + +.table-dark { + --bs-table-bg: #212529; + --bs-table-striped-bg: #2c3034; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #373b3e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #323539; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #373b3e; +} + +.table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +.form-label { + margin-bottom: 0.5rem; +} + +.col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; +} + +.col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; +} + +.form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: #6c757d; +} + +.form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} +.form-control[type=file] { + overflow: hidden; +} +.form-control[type=file]:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control:focus { + color: #212529; + background-color: #fff; + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-control::-webkit-date-and-time-value { + height: 1.5em; +} +.form-control::-moz-placeholder { + color: #6c757d; + opacity: 1; +} +.form-control::placeholder { + color: #6c757d; + opacity: 1; +} +.form-control:disabled, .form-control[readonly] { + background-color: #e9ecef; + opacity: 1; +} +.form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control::file-selector-button { + transition: none; + } +} +.form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: #dde0e3; +} +.form-control::-webkit-file-upload-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control::-webkit-file-upload-button { + -webkit-transition: none; + transition: none; + } +} +.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: #dde0e3; +} + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} +.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} +.form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} +.form-control-sm::-webkit-file-upload-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} + +.form-control-lg { + min-height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} +.form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} +.form-control-lg::-webkit-file-upload-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} + +textarea.form-control { + min-height: calc(1.5em + 0.75rem + 2px); +} +textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); +} +textarea.form-control-lg { + min-height: calc(1.5em + 1rem + 2px); +} + +.form-control-color { + width: 3rem; + height: auto; + padding: 0.375rem; +} +.form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control-color::-moz-color-swatch { + height: 1.5em; + border-radius: 0.25rem; +} +.form-control-color::-webkit-color-swatch { + height: 1.5em; + border-radius: 0.25rem; +} + +.form-select { + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + -moz-padding-start: calc(0.75rem - 3px); + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: 1px solid #ced4da; + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-select { + transition: none; + } +} +.form-select:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-select[multiple], .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; +} +.form-select:disabled { + background-color: #e9ecef; +} +.form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #212529; +} + +.form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; +} + +.form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; +} + +.form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; +} +.form-check .form-check-input { + float: left; + margin-left: -1.5em; +} + +.form-check-input { + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + background-color: #fff; + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: 1px solid rgba(0, 0, 0, 0.25); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + -webkit-print-color-adjust: exact; + color-adjust: exact; +} +.form-check-input[type=checkbox] { + border-radius: 0.25em; +} +.form-check-input[type=radio] { + border-radius: 50%; +} +.form-check-input:active { + filter: brightness(90%); +} +.form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; +} +.form-check-input:checked[type=checkbox] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e"); +} +.form-check-input:checked[type=radio] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} +.form-check-input[type=checkbox]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} +.form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; +} +.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { + opacity: 0.5; +} + +.form-switch { + padding-left: 2.5em; +} +.form-switch .form-check-input { + width: 2em; + margin-left: -2.5em; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-switch .form-check-input { + transition: none; + } +} +.form-switch .form-check-input:focus { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); +} +.form-switch .form-check-input:checked { + background-position: right center; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.form-check-inline { + display: inline-block; + margin-right: 1rem; +} + +.btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.btn-check[disabled] + .btn, .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; +} + +.form-range { + width: 100%; + height: 1.5rem; + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +.form-range:focus { + outline: 0; +} +.form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-range::-moz-focus-outer { + border: 0; +} +.form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } +} +.form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; +} +.form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} +.form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } +} +.form-range::-moz-range-thumb:active { + background-color: #b6d4fe; +} +.form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} +.form-range:disabled { + pointer-events: none; +} +.form-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} +.form-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} + +.form-floating { + position: relative; +} +.form-floating > .form-control, +.form-floating > .form-select { + height: calc(3.5rem + 2px); + line-height: 1.25; +} +.form-floating > label { + position: absolute; + top: 0; + left: 0; + height: 100%; + padding: 1rem 0.75rem; + pointer-events: none; + border: 1px solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-floating > label { + transition: none; + } +} +.form-floating > .form-control { + padding: 1rem 0.75rem; +} +.form-floating > .form-control::-moz-placeholder { + color: transparent; +} +.form-floating > .form-control::placeholder { + color: transparent; +} +.form-floating > .form-control:not(:-moz-placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control:focus ~ label, +.form-floating > .form-control:not(:placeholder-shown) ~ label, +.form-floating > .form-select ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control:-webkit-autofill ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} +.input-group > .form-control, +.input-group > .form-select { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; +} +.input-group > .form-control:focus, +.input-group > .form-select:focus { + z-index: 3; +} +.input-group .btn { + position: relative; + z-index: 2; +} +.input-group .btn:focus { + z-index: 3; +} + +.input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.input-group-lg > .form-control, +.input-group-lg > .form-select, +.input-group-lg > .input-group-text, +.input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +.input-group-sm > .form-control, +.input-group-sm > .form-select, +.input-group-sm > .input-group-text, +.input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +.input-group-lg > .form-select, +.input-group-sm > .form-select { + padding-right: 3rem; +} + +.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu), +.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu), +.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #198754; +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(25, 135, 84, 0.9); + border-radius: 0.25rem; +} + +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip, +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: #198754; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .form-select:valid, .form-select.is-valid { + border-color: #198754; +} +.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-select:valid:focus, .form-select.is-valid:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.was-validated .form-check-input:valid, .form-check-input.is-valid { + border-color: #198754; +} +.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { + background-color: #198754; +} +.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #198754; +} + +.form-check-inline .form-check-input ~ .valid-feedback { + margin-left: 0.5em; +} + +.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, +.was-validated .input-group .form-select:valid, +.input-group .form-select.is-valid { + z-index: 1; +} +.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, +.was-validated .input-group .form-select:valid:focus, +.input-group .form-select.is-valid:focus { + z-index: 3; +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #dc3545; +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.25rem; +} + +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip, +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .form-select:invalid, .form-select.is-invalid { + border-color: #dc3545; +} +.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.was-validated .form-check-input:invalid, .form-check-input.is-invalid { + border-color: #dc3545; +} +.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { + background-color: #dc3545; +} +.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; +} + +.form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: 0.5em; +} + +.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, +.was-validated .input-group .form-select:invalid, +.input-group .form-select.is-invalid { + z-index: 2; +} +.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, +.was-validated .input-group .form-select:invalid:focus, +.input-group .form-select.is-invalid:focus { + z-index: 3; +} + +.btn { + display: inline-block; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} +.btn:hover { + color: #212529; +} +.btn-check:focus + .btn, .btn:focus { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.btn:disabled, .btn.disabled, fieldset:disabled .btn { + pointer-events: none; + opacity: 0.65; +} + +.btn-primary { + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.btn-primary:hover { + color: #fff; + background-color: #0b5ed7; + border-color: #0a58ca; +} +.btn-check:focus + .btn-primary, .btn-primary:focus { + color: #fff; + background-color: #0b5ed7; + border-color: #0a58ca; + box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); +} +.btn-check:checked + .btn-primary, .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #0a58ca; + border-color: #0a53be; +} +.btn-check:checked + .btn-primary:focus, .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, .show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); +} +.btn-primary:disabled, .btn-primary.disabled { + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} + +.btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} +.btn-secondary:hover { + color: #fff; + background-color: #5c636a; + border-color: #565e64; +} +.btn-check:focus + .btn-secondary, .btn-secondary:focus { + color: #fff; + background-color: #5c636a; + border-color: #565e64; + box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); +} +.btn-check:checked + .btn-secondary, .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #565e64; + border-color: #51585e; +} +.btn-check:checked + .btn-secondary:focus, .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, .show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); +} +.btn-secondary:disabled, .btn-secondary.disabled { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-success { + color: #fff; + background-color: #198754; + border-color: #198754; +} +.btn-success:hover { + color: #fff; + background-color: #157347; + border-color: #146c43; +} +.btn-check:focus + .btn-success, .btn-success:focus { + color: #fff; + background-color: #157347; + border-color: #146c43; + box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); +} +.btn-check:checked + .btn-success, .btn-check:active + .btn-success, .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #146c43; + border-color: #13653f; +} +.btn-check:checked + .btn-success:focus, .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, .show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); +} +.btn-success:disabled, .btn-success.disabled { + color: #fff; + background-color: #198754; + border-color: #198754; +} + +.btn-info { + color: #000; + background-color: #0dcaf0; + border-color: #0dcaf0; +} +.btn-info:hover { + color: #000; + background-color: #31d2f2; + border-color: #25cff2; +} +.btn-check:focus + .btn-info, .btn-info:focus { + color: #000; + background-color: #31d2f2; + border-color: #25cff2; + box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); +} +.btn-check:checked + .btn-info, .btn-check:active + .btn-info, .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle { + color: #000; + background-color: #3dd5f3; + border-color: #25cff2; +} +.btn-check:checked + .btn-info:focus, .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, .show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); +} +.btn-info:disabled, .btn-info.disabled { + color: #000; + background-color: #0dcaf0; + border-color: #0dcaf0; +} + +.btn-warning { + color: #000; + background-color: #ffc107; + border-color: #ffc107; +} +.btn-warning:hover { + color: #000; + background-color: #ffca2c; + border-color: #ffc720; +} +.btn-check:focus + .btn-warning, .btn-warning:focus { + color: #000; + background-color: #ffca2c; + border-color: #ffc720; + box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); +} +.btn-check:checked + .btn-warning, .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle { + color: #000; + background-color: #ffcd39; + border-color: #ffc720; +} +.btn-check:checked + .btn-warning:focus, .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, .show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); +} +.btn-warning:disabled, .btn-warning.disabled { + color: #000; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.btn-danger:hover { + color: #fff; + background-color: #bb2d3b; + border-color: #b02a37; +} +.btn-check:focus + .btn-danger, .btn-danger:focus { + color: #fff; + background-color: #bb2d3b; + border-color: #b02a37; + box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); +} +.btn-check:checked + .btn-danger, .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #b02a37; + border-color: #a52834; +} +.btn-check:checked + .btn-danger:focus, .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, .show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); +} +.btn-danger:disabled, .btn-danger.disabled { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-light { + color: #000; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.btn-light:hover { + color: #000; + background-color: #f9fafb; + border-color: #f9fafb; +} +.btn-check:focus + .btn-light, .btn-light:focus { + color: #000; + background-color: #f9fafb; + border-color: #f9fafb; + box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); +} +.btn-check:checked + .btn-light, .btn-check:active + .btn-light, .btn-light:active, .btn-light.active, .show > .btn-light.dropdown-toggle { + color: #000; + background-color: #f9fafb; + border-color: #f9fafb; +} +.btn-check:checked + .btn-light:focus, .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); +} +.btn-light:disabled, .btn-light.disabled { + color: #000; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-dark { + color: #fff; + background-color: #212529; + border-color: #212529; +} +.btn-dark:hover { + color: #fff; + background-color: #1c1f23; + border-color: #1a1e21; +} +.btn-check:focus + .btn-dark, .btn-dark:focus { + color: #fff; + background-color: #1c1f23; + border-color: #1a1e21; + box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); +} +.btn-check:checked + .btn-dark, .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, .show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #1a1e21; + border-color: #191c1f; +} +.btn-check:checked + .btn-dark:focus, .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, .show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); +} +.btn-dark:disabled, .btn-dark.disabled { + color: #fff; + background-color: #212529; + border-color: #212529; +} + +.btn-outline-primary { + color: #0d6efd; + border-color: #0d6efd; +} +.btn-outline-primary:hover { + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus { + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); +} +.btn-check:checked + .btn-outline-primary, .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show { + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.btn-check:checked + .btn-outline-primary:focus, .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); +} +.btn-outline-primary:disabled, .btn-outline-primary.disabled { + color: #0d6efd; + background-color: transparent; +} + +.btn-outline-secondary { + color: #6c757d; + border-color: #6c757d; +} +.btn-outline-secondary:hover { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} +.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus { + box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); +} +.btn-check:checked + .btn-outline-secondary, .btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} +.btn-check:checked + .btn-outline-secondary:focus, .btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); +} +.btn-outline-secondary:disabled, .btn-outline-secondary.disabled { + color: #6c757d; + background-color: transparent; +} + +.btn-outline-success { + color: #198754; + border-color: #198754; +} +.btn-outline-success:hover { + color: #fff; + background-color: #198754; + border-color: #198754; +} +.btn-check:focus + .btn-outline-success, .btn-outline-success:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); +} +.btn-check:checked + .btn-outline-success, .btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show { + color: #fff; + background-color: #198754; + border-color: #198754; +} +.btn-check:checked + .btn-outline-success:focus, .btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); +} +.btn-outline-success:disabled, .btn-outline-success.disabled { + color: #198754; + background-color: transparent; +} + +.btn-outline-info { + color: #0dcaf0; + border-color: #0dcaf0; +} +.btn-outline-info:hover { + color: #000; + background-color: #0dcaf0; + border-color: #0dcaf0; +} +.btn-check:focus + .btn-outline-info, .btn-outline-info:focus { + box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); +} +.btn-check:checked + .btn-outline-info, .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show { + color: #000; + background-color: #0dcaf0; + border-color: #0dcaf0; +} +.btn-check:checked + .btn-outline-info:focus, .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); +} +.btn-outline-info:disabled, .btn-outline-info.disabled { + color: #0dcaf0; + background-color: transparent; +} + +.btn-outline-warning { + color: #ffc107; + border-color: #ffc107; +} +.btn-outline-warning:hover { + color: #000; + background-color: #ffc107; + border-color: #ffc107; +} +.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus { + box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); +} +.btn-check:checked + .btn-outline-warning, .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show { + color: #000; + background-color: #ffc107; + border-color: #ffc107; +} +.btn-check:checked + .btn-outline-warning:focus, .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); +} +.btn-outline-warning:disabled, .btn-outline-warning.disabled { + color: #ffc107; + background-color: transparent; +} + +.btn-outline-danger { + color: #dc3545; + border-color: #dc3545; +} +.btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); +} +.btn-check:checked + .btn-outline-danger, .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.btn-check:checked + .btn-outline-danger:focus, .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); +} +.btn-outline-danger:disabled, .btn-outline-danger.disabled { + color: #dc3545; + background-color: transparent; +} + +.btn-outline-light { + color: #f8f9fa; + border-color: #f8f9fa; +} +.btn-outline-light:hover { + color: #000; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.btn-check:focus + .btn-outline-light, .btn-outline-light:focus { + box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); +} +.btn-check:checked + .btn-outline-light, .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show { + color: #000; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.btn-check:checked + .btn-outline-light:focus, .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); +} +.btn-outline-light:disabled, .btn-outline-light.disabled { + color: #f8f9fa; + background-color: transparent; +} + +.btn-outline-dark { + color: #212529; + border-color: #212529; +} +.btn-outline-dark:hover { + color: #fff; + background-color: #212529; + border-color: #212529; +} +.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus { + box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); +} +.btn-check:checked + .btn-outline-dark, .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show { + color: #fff; + background-color: #212529; + border-color: #212529; +} +.btn-check:checked + .btn-outline-dark:focus, .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus { + box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); +} +.btn-outline-dark:disabled, .btn-outline-dark.disabled { + color: #212529; + background-color: transparent; +} + +.btn-link { + font-weight: 400; + color: #0d6efd; + text-decoration: underline; +} +.btn-link:hover { + color: #0a58ca; +} +.btn-link:disabled, .btn-link.disabled { + color: #6c757d; +} + +.btn-lg, .btn-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +.fade { + transition: opacity 0.15s linear; +} +@media (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} +.collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .collapsing.collapse-horizontal { + transition: none; + } +} + +.dropup, +.dropend, +.dropdown, +.dropstart { + position: relative; +} + +.dropdown-toggle { + white-space: nowrap; +} +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} +.dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropdown-menu { + position: absolute; + z-index: 1000; + display: none; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} +.dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: 0.125rem; +} + +.dropdown-menu-start { + --bs-position: start; +} +.dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} + +.dropdown-menu-end { + --bs-position: end; +} +.dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .dropdown-menu-sm-start { + --bs-position: start; + } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-sm-end { + --bs-position: end; + } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 768px) { + .dropdown-menu-md-start { + --bs-position: start; + } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-md-end { + --bs-position: end; + } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 992px) { + .dropdown-menu-lg-start { + --bs-position: start; + } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-lg-end { + --bs-position: end; + } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1200px) { + .dropdown-menu-xl-start { + --bs-position: start; + } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-xl-end { + --bs-position: end; + } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1400px) { + .dropdown-menu-xxl-start { + --bs-position: start; + } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-xxl-end { + --bs-position: end; + } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; +} +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} +.dropend .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropend .dropdown-toggle::after { + vertical-align: 0; +} + +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} +.dropstart .dropdown-toggle::after { + display: none; +} +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropstart .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid rgba(0, 0, 0, 0.15); +} + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; +} +.dropdown-item:hover, .dropdown-item:focus { + color: #1e2125; + background-color: #e9ecef; +} +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #0d6efd; +} +.dropdown-item.disabled, .dropdown-item:disabled { + color: #adb5bd; + pointer-events: none; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #6c757d; + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: 0.25rem 1rem; + color: #212529; +} + +.dropdown-menu-dark { + color: #dee2e6; + background-color: #343a40; + border-color: rgba(0, 0, 0, 0.15); +} +.dropdown-menu-dark .dropdown-item { + color: #dee2e6; +} +.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus { + color: #fff; + background-color: rgba(255, 255, 255, 0.15); +} +.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active { + color: #fff; + background-color: #0d6efd; +} +.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled { + color: #adb5bd; +} +.dropdown-menu-dark .dropdown-divider { + border-color: rgba(0, 0, 0, 0.15); +} +.dropdown-menu-dark .dropdown-item-text { + color: #dee2e6; +} +.dropdown-menu-dark .dropdown-header { + color: #adb5bd; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} +.btn-group > .btn-check:checked + .btn, +.btn-group > .btn-check:focus + .btn, +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn-check:checked + .btn, +.btn-group-vertical > .btn-check:focus + .btn, +.btn-group-vertical > .btn:hover, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} +.btn-toolbar .input-group { + width: auto; +} + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:nth-child(n+3), +.btn-group > :not(.btn-check) + .btn, +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} +.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { + margin-left: 0; +} +.dropstart .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn ~ .btn, +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav { + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 0.5rem 1rem; + color: #0d6efd; + text-decoration: none; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .nav-link { + transition: none; + } +} +.nav-link:hover, .nav-link:focus { + color: #0a58ca; +} +.nav-link.disabled { + color: #6c757d; + pointer-events: none; + cursor: default; +} + +.nav-tabs { + border-bottom: 1px solid #dee2e6; +} +.nav-tabs .nav-link { + margin-bottom: -1px; + background: none; + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #e9ecef #e9ecef #dee2e6; + isolation: isolate; +} +.nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent; +} +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav-pills .nav-link { + background: none; + border: 0; + border-radius: 0.25rem; +} +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #0d6efd; +} + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; +} + +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} +.navbar > .container, +.navbar > .container-fluid, +.navbar > .container-sm, +.navbar > .container-md, +.navbar > .container-lg, +.navbar > .container-xl, +.navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; +} +.navbar-brand { + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 1rem; + font-size: 1.25rem; + text-decoration: none; + white-space: nowrap; +} +.navbar-nav { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} +.navbar-nav .dropdown-menu { + position: static; +} + +.navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; + transition: box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .navbar-toggler { + transition: none; + } +} +.navbar-toggler:hover { + text-decoration: none; +} +.navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 0.25rem; +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-repeat: no-repeat; + background-position: center; + background-size: 100%; +} + +.navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; +} + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } + .navbar-expand-sm .offcanvas-header { + display: none; + } + .navbar-expand-sm .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + transform: none; + } + .navbar-expand-sm .offcanvas-top, +.navbar-expand-sm .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 768px) { + .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } + .navbar-expand-md .offcanvas-header { + display: none; + } + .navbar-expand-md .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + transform: none; + } + .navbar-expand-md .offcanvas-top, +.navbar-expand-md .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 992px) { + .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } + .navbar-expand-lg .offcanvas-header { + display: none; + } + .navbar-expand-lg .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + transform: none; + } + .navbar-expand-lg .offcanvas-top, +.navbar-expand-lg .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } + .navbar-expand-xl .offcanvas-header { + display: none; + } + .navbar-expand-xl .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + transform: none; + } + .navbar-expand-xl .offcanvas-top, +.navbar-expand-xl .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1400px) { + .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xxl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xxl .navbar-toggler { + display: none; + } + .navbar-expand-xxl .offcanvas-header { + display: none; + } + .navbar-expand-xxl .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + transform: none; + } + .navbar-expand-xxl .offcanvas-top, +.navbar-expand-xxl .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +.navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; +} +.navbar-expand .navbar-nav { + flex-direction: row; +} +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} +.navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; +} +.navbar-expand .navbar-nav-scroll { + overflow: visible; +} +.navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} +.navbar-expand .navbar-toggler { + display: none; +} +.navbar-expand .offcanvas-header { + display: none; +} +.navbar-expand .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + transform: none; +} +.navbar-expand .offcanvas-top, +.navbar-expand .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; +} +.navbar-expand .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, 0.9); +} +.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { + color: rgba(0, 0, 0, 0.9); +} +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.55); +} +.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { + color: rgba(0, 0, 0, 0.7); +} +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} +.navbar-light .navbar-nav .show > .nav-link, +.navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.55); + border-color: rgba(0, 0, 0, 0.1); +} +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.55); +} +.navbar-light .navbar-text a, +.navbar-light .navbar-text a:hover, +.navbar-light .navbar-text a:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-dark .navbar-brand { + color: #fff; +} +.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: #fff; +} +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.55); +} +.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { + color: rgba(255, 255, 255, 0.75); +} +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} +.navbar-dark .navbar-nav .show > .nav-link, +.navbar-dark .navbar-nav .nav-link.active { + color: #fff; +} +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.55); + border-color: rgba(255, 255, 255, 0.1); +} +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.55); +} +.navbar-dark .navbar-text a, +.navbar-dark .navbar-text a:hover, +.navbar-dark .navbar-text a:focus { + color: #fff; +} + +.card { + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; +} +.card > hr { + margin-right: 0; + margin-left: 0; +} +.card > .list-group { + border-top: inherit; + border-bottom: inherit; +} +.card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} +.card > .card-header + .list-group, +.card > .list-group + .card-footer { + border-top: 0; +} + +.card-body { + flex: 1 1 auto; + padding: 1rem 1rem; +} + +.card-title { + margin-bottom: 0.5rem; +} + +.card-subtitle { + margin-top: -0.25rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link + .card-link { + margin-left: 1rem; +} + +.card-header { + padding: 0.5rem 1rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} +.card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} + +.card-footer { + padding: 0.5rem 1rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(0, 0, 0, 0.125); +} +.card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); +} + +.card-header-tabs { + margin-right: -0.5rem; + margin-bottom: -0.5rem; + margin-left: -0.5rem; + border-bottom: 0; +} + +.card-header-pills { + margin-right: -0.5rem; + margin-left: -0.5rem; +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1rem; + border-radius: calc(0.25rem - 1px); +} + +.card-img, +.card-img-top, +.card-img-bottom { + width: 100%; +} + +.card-img, +.card-img-top { + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} + +.card-img, +.card-img-bottom { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} + +.card-group > .card { + margin-bottom: 0.75rem; +} +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; + } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-top, +.card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-bottom, +.card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-top, +.card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-bottom, +.card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: 1rem 1.25rem; + font-size: 1rem; + color: #212529; + text-align: left; + background-color: #fff; + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; +} +@media (prefers-reduced-motion: reduce) { + .accordion-button { + transition: none; + } +} +.accordion-button:not(.collapsed) { + color: #0c63e4; + background-color: #e7f1ff; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125); +} +.accordion-button:not(.collapsed)::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + transform: rotate(-180deg); +} +.accordion-button::after { + flex-shrink: 0; + width: 1.25rem; + height: 1.25rem; + margin-left: auto; + content: ""; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-size: 1.25rem; + transition: transform 0.2s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .accordion-button::after { + transition: none; + } +} +.accordion-button:hover { + z-index: 2; +} +.accordion-button:focus { + z-index: 3; + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.accordion-header { + margin-bottom: 0; +} + +.accordion-item { + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} +.accordion-item:first-of-type { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.accordion-item:first-of-type .accordion-button { + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.accordion-item:not(:first-of-type) { + border-top: 0; +} +.accordion-item:last-of-type { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} +.accordion-item:last-of-type .accordion-button.collapsed { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} +.accordion-item:last-of-type .accordion-collapse { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.accordion-body { + padding: 1rem 1.25rem; +} + +.accordion-flush .accordion-collapse { + border-width: 0; +} +.accordion-flush .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} +.accordion-flush .accordion-item:first-child { + border-top: 0; +} +.accordion-flush .accordion-item:last-child { + border-bottom: 0; +} +.accordion-flush .accordion-item .accordion-button { + border-radius: 0; +} + +.breadcrumb { + display: flex; + flex-wrap: wrap; + padding: 0 0; + margin-bottom: 1rem; + list-style: none; +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; +} +.breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: 0.5rem; + color: #6c757d; + content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; +} +.breadcrumb-item.active { + color: #6c757d; +} + +.pagination { + display: flex; + padding-left: 0; + list-style: none; +} + +.page-link { + position: relative; + display: block; + color: #0d6efd; + text-decoration: none; + background-color: #fff; + border: 1px solid #dee2e6; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .page-link { + transition: none; + } +} +.page-link:hover { + z-index: 2; + color: #0a58ca; + background-color: #e9ecef; + border-color: #dee2e6; +} +.page-link:focus { + z-index: 3; + color: #0a58ca; + background-color: #e9ecef; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} + +.page-item:not(:first-child) .page-link { + margin-left: -1px; +} +.page-item.active .page-link { + z-index: 3; + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + background-color: #fff; + border-color: #dee2e6; +} + +.page-link { + padding: 0.375rem 0.75rem; +} + +.page-item:first-child .page-link { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} +.page-item:last-child .page-link { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; +} + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; +} +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; +} + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; +} +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; +} +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: 0.2rem; + border-bottom-right-radius: 0.2rem; +} + +.badge { + display: inline-block; + padding: 0.35em 0.65em; + font-size: 0.75em; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; +} +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.alert { + position: relative; + padding: 1rem 1rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: 700; +} + +.alert-dismissible { + padding-right: 3rem; +} +.alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; +} + +.alert-primary { + color: #084298; + background-color: #cfe2ff; + border-color: #b6d4fe; +} +.alert-primary .alert-link { + color: #06357a; +} + +.alert-secondary { + color: #41464b; + background-color: #e2e3e5; + border-color: #d3d6d8; +} +.alert-secondary .alert-link { + color: #34383c; +} + +.alert-success { + color: #0f5132; + background-color: #d1e7dd; + border-color: #badbcc; +} +.alert-success .alert-link { + color: #0c4128; +} + +.alert-info { + color: #055160; + background-color: #cff4fc; + border-color: #b6effb; +} +.alert-info .alert-link { + color: #04414d; +} + +.alert-warning { + color: #664d03; + background-color: #fff3cd; + border-color: #ffecb5; +} +.alert-warning .alert-link { + color: #523e02; +} + +.alert-danger { + color: #842029; + background-color: #f8d7da; + border-color: #f5c2c7; +} +.alert-danger .alert-link { + color: #6a1a21; +} + +.alert-light { + color: #636464; + background-color: #fefefe; + border-color: #fdfdfe; +} +.alert-light .alert-link { + color: #4f5050; +} + +.alert-dark { + color: #141619; + background-color: #d3d3d4; + border-color: #bcbebf; +} +.alert-dark .alert-link { + color: #101214; +} + +@-webkit-keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} + +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} +.progress { + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.75rem; + background-color: #e9ecef; + border-radius: 0.25rem; +} + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #0d6efd; + transition: width 0.6s ease; +} +@media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} + +.progress-bar-animated { + -webkit-animation: 1s linear infinite progress-bar-stripes; + animation: 1s linear infinite progress-bar-stripes; +} +@media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + -webkit-animation: none; + animation: none; + } +} + +.list-group { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: 0.25rem; +} + +.list-group-numbered { + list-style-type: none; + counter-reset: section; +} +.list-group-numbered > li::before { + content: counters(section, ".") ". "; + counter-increment: section; +} + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; +} +.list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: #495057; + text-decoration: none; + background-color: #f8f9fa; +} +.list-group-item-action:active { + color: #212529; + background-color: #e9ecef; +} + +.list-group-item { + position: relative; + display: block; + padding: 0.5rem 1rem; + color: #212529; + text-decoration: none; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} +.list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} +.list-group-item.disabled, .list-group-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: #fff; +} +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #0d6efd; + border-color: #0d6efd; +} +.list-group-item + .list-group-item { + border-top-width: 0; +} +.list-group-item + .list-group-item.active { + margin-top: -1px; + border-top-width: 1px; +} + +.list-group-horizontal { + flex-direction: row; +} +.list-group-horizontal > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; +} +.list-group-horizontal > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; +} +.list-group-horizontal > .list-group-item.active { + margin-top: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; +} + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; + } + .list-group-horizontal-sm > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-sm > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; + } + .list-group-horizontal-md > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-md > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; + } + .list-group-horizontal-lg > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-lg > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; + } + .list-group-horizontal-xl > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-xl > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + flex-direction: row; + } + .list-group-horizontal-xxl > .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} +.list-group-flush { + border-radius: 0; +} +.list-group-flush > .list-group-item { + border-width: 0 0 1px; +} +.list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.list-group-item-primary { + color: #084298; + background-color: #cfe2ff; +} +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #084298; + background-color: #bacbe6; +} +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #084298; + border-color: #084298; +} + +.list-group-item-secondary { + color: #41464b; + background-color: #e2e3e5; +} +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #41464b; + background-color: #cbccce; +} +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #41464b; + border-color: #41464b; +} + +.list-group-item-success { + color: #0f5132; + background-color: #d1e7dd; +} +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #0f5132; + background-color: #bcd0c7; +} +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #0f5132; + border-color: #0f5132; +} + +.list-group-item-info { + color: #055160; + background-color: #cff4fc; +} +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #055160; + background-color: #badce3; +} +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #055160; + border-color: #055160; +} + +.list-group-item-warning { + color: #664d03; + background-color: #fff3cd; +} +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #664d03; + background-color: #e6dbb9; +} +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #664d03; + border-color: #664d03; +} + +.list-group-item-danger { + color: #842029; + background-color: #f8d7da; +} +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #842029; + background-color: #dfc2c4; +} +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #842029; + border-color: #842029; +} + +.list-group-item-light { + color: #636464; + background-color: #fefefe; +} +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #636464; + background-color: #e5e5e5; +} +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #636464; + border-color: #636464; +} + +.list-group-item-dark { + color: #141619; + background-color: #d3d3d4; +} +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #141619; + background-color: #bebebf; +} +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #141619; + border-color: #141619; +} + +.btn-close { + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: #000; + background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat; + border: 0; + border-radius: 0.25rem; + opacity: 0.5; +} +.btn-close:hover { + color: #000; + text-decoration: none; + opacity: 0.75; +} +.btn-close:focus { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + opacity: 1; +} +.btn-close:disabled, .btn-close.disabled { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + opacity: 0.25; +} + +.btn-close-white { + filter: invert(1) grayscale(100%) brightness(200%); +} + +.toast { + width: 350px; + max-width: 100%; + font-size: 0.875rem; + pointer-events: auto; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} +.toast.showing { + opacity: 0; +} +.toast:not(.show) { + display: none; +} + +.toast-container { + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; + max-width: 100%; + pointer-events: none; +} +.toast-container > :not(:last-child) { + margin-bottom: 0.75rem; +} + +.toast-header { + display: flex; + align-items: center; + padding: 0.5rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.toast-header .btn-close { + margin-right: -0.375rem; + margin-left: 0.75rem; +} + +.toast-body { + padding: 0.75rem; + word-wrap: break-word; +} + +.modal { + position: fixed; + top: 0; + left: 0; + z-index: 1055; + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} +.modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} +@media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} +.modal.show .modal-dialog { + transform: none; +} +.modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.modal-dialog-scrollable { + height: calc(100% - 1rem); +} +.modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - 1rem); +} + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + width: 100vw; + height: 100vh; + background-color: #000; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop.show { + opacity: 0.5; +} + +.modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: space-between; + padding: 1rem 1rem; + border-bottom: 1px solid #dee2e6; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} +.modal-header .btn-close { + padding: 0.5rem 0.5rem; + margin: -0.5rem -0.5rem -0.5rem auto; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: 1rem; +} + +.modal-footer { + display: flex; + flex-wrap: wrap; + flex-shrink: 0; + align-items: center; + justify-content: flex-end; + padding: 0.75rem; + border-top: 1px solid #dee2e6; + border-bottom-right-radius: calc(0.3rem - 1px); + border-bottom-left-radius: calc(0.3rem - 1px); +} +.modal-footer > * { + margin: 0.25rem; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + + .modal-dialog-scrollable { + height: calc(100% - 3.5rem); + } + + .modal-dialog-centered { + min-height: calc(100% - 3.5rem); + } + + .modal-sm { + max-width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg, +.modal-xl { + max-width: 800px; + } +} +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; + } +} +.modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; +} +.modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; +} +.modal-fullscreen .modal-header { + border-radius: 0; +} +.modal-fullscreen .modal-body { + overflow-y: auto; +} +.modal-fullscreen .modal-footer { + border-radius: 0; +} + +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-md-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } +} +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } +} +.tooltip { + position: absolute; + z-index: 1080; + display: block; + margin: 0; + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} +.tooltip.show { + opacity: 0.9; +} +.tooltip .tooltip-arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} +.tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=top] { + padding: 0.4rem 0; +} +.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: 0; +} +.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + top: -1px; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} + +.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=right] { + padding: 0 0.4rem; +} +.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} +.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + right: -1px; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} + +.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=bottom] { + padding: 0.4rem 0; +} +.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: 0; +} +.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} + +.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=left] { + padding: 0 0.4rem; +} +.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} +.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + left: -1px; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; +} + +.popover { + position: absolute; + top: 0; + left: 0 /* rtl:ignore */; + z-index: 1070; + display: block; + max-width: 276px; + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; +} +.popover .popover-arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; +} +.popover .popover-arrow::before, .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { + bottom: calc(-0.5rem - 1px); +} +.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; +} + +.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { + left: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} +.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; +} + +.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { + top: calc(-0.5rem - 1px); +} +.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; +} +.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f0f0f0; +} + +.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { + right: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} +.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); +} +.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; +} + +.popover-header { + padding: 0.5rem 1rem; + margin-bottom: 0; + font-size: 1rem; + background-color: #f0f0f0; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} +.popover-header:empty { + display: none; +} + +.popover-body { + padding: 1rem 1rem; + color: #212529; +} + +.carousel { + position: relative; +} + +.carousel.pointer-event { + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +/* rtl:begin:ignore */ +.carousel-item-next:not(.carousel-item-start), +.active.carousel-item-end { + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-end), +.active.carousel-item-start { + transform: translateX(-100%); +} + +/* rtl:end:ignore */ +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; +} +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-start, +.carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; +} +.carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} +@media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + transition: none; + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-control-prev, +.carousel-control-next { + transition: none; + } +} +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} + +/* rtl:options: { + "autoRename": true, + "stringMap":[ { + "name" : "prev-next", + "search" : "prev", + "replace" : "next" + } ] +} */ +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; + list-style: none; +} +.carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-indicators [data-bs-target] { + transition: none; + } +} +.carousel-indicators .active { + opacity: 1; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; +} + +.carousel-dark .carousel-control-prev-icon, +.carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} +.carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; +} +.carousel-dark .carousel-caption { + color: #000; +} + +@-webkit-keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; + } +} + +@keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; + } +} +.spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: -0.125em; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + -webkit-animation: 0.75s linear infinite spinner-border; + animation: 0.75s linear infinite spinner-border; +} + +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; +} + +@-webkit-keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: -0.125em; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + -webkit-animation: 0.75s linear infinite spinner-grow; + animation: 0.75s linear infinite spinner-grow; +} + +.spinner-grow-sm { + width: 1rem; + height: 1rem; +} + +@media (prefers-reduced-motion: reduce) { + .spinner-border, +.spinner-grow { + -webkit-animation-duration: 1.5s; + animation-duration: 1.5s; + } +} +.offcanvas { + position: fixed; + bottom: 0; + z-index: 1045; + display: flex; + flex-direction: column; + max-width: 100%; + visibility: hidden; + background-color: #fff; + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .offcanvas { + transition: none; + } +} + +.offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} +.offcanvas-backdrop.fade { + opacity: 0; +} +.offcanvas-backdrop.show { + opacity: 0.5; +} + +.offcanvas-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 1rem 1rem; +} +.offcanvas-header .btn-close { + padding: 0.5rem 0.5rem; + margin-top: -0.5rem; + margin-right: -0.5rem; + margin-bottom: -0.5rem; +} + +.offcanvas-title { + margin-bottom: 0; + line-height: 1.5; +} + +.offcanvas-body { + flex-grow: 1; + padding: 1rem 1rem; + overflow-y: auto; +} + +.offcanvas-start { + top: 0; + left: 0; + width: 400px; + border-right: 1px solid rgba(0, 0, 0, 0.2); + transform: translateX(-100%); +} + +.offcanvas-end { + top: 0; + right: 0; + width: 400px; + border-left: 1px solid rgba(0, 0, 0, 0.2); + transform: translateX(100%); +} + +.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: 30vh; + max-height: 100%; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + transform: translateY(-100%); +} + +.offcanvas-bottom { + right: 0; + left: 0; + height: 30vh; + max-height: 100%; + border-top: 1px solid rgba(0, 0, 0, 0.2); + transform: translateY(100%); +} + +.offcanvas.show { + transform: none; +} + +.placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentColor; + opacity: 0.5; +} +.placeholder.btn::before { + display: inline-block; + content: ""; +} + +.placeholder-xs { + min-height: 0.6em; +} + +.placeholder-sm { + min-height: 0.8em; +} + +.placeholder-lg { + min-height: 1.2em; +} + +.placeholder-glow .placeholder { + -webkit-animation: placeholder-glow 2s ease-in-out infinite; + animation: placeholder-glow 2s ease-in-out infinite; +} + +@-webkit-keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} +.placeholder-wave { + -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + -webkit-mask-size: 200% 100%; + mask-size: 200% 100%; + -webkit-animation: placeholder-wave 2s linear infinite; + animation: placeholder-wave 2s linear infinite; +} + +@-webkit-keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} + +@keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.link-primary { + color: #0d6efd; +} +.link-primary:hover, .link-primary:focus { + color: #0a58ca; +} + +.link-secondary { + color: #6c757d; +} +.link-secondary:hover, .link-secondary:focus { + color: #565e64; +} + +.link-success { + color: #198754; +} +.link-success:hover, .link-success:focus { + color: #146c43; +} + +.link-info { + color: #0dcaf0; +} +.link-info:hover, .link-info:focus { + color: #3dd5f3; +} + +.link-warning { + color: #ffc107; +} +.link-warning:hover, .link-warning:focus { + color: #ffcd39; +} + +.link-danger { + color: #dc3545; +} +.link-danger:hover, .link-danger:focus { + color: #b02a37; +} + +.link-light { + color: #f8f9fa; +} +.link-light:hover, .link-light:focus { + color: #f9fafb; +} + +.link-dark { + color: #212529; +} +.link-dark:hover, .link-dark:focus { + color: #1a1e21; +} + +.ratio { + position: relative; + width: 100%; +} +.ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ""; +} +.ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.ratio-1x1 { + --bs-aspect-ratio: 100%; +} + +.ratio-4x3 { + --bs-aspect-ratio: calc(3 / 4 * 100%); +} + +.ratio-16x9 { + --bs-aspect-ratio: calc(9 / 16 * 100%); +} + +.ratio-21x9 { + --bs-aspect-ratio: calc(9 / 21 * 100%); +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +.sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; +} + +@media (min-width: 576px) { + .sticky-sm-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +@media (min-width: 768px) { + .sticky-md-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +@media (min-width: 992px) { + .sticky-lg-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +@media (min-width: 1200px) { + .sticky-xl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +@media (min-width: 1400px) { + .sticky-xxl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} +.hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; +} + +.vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; +} + +.visually-hidden, +.visually-hidden-focusable:not(:focus):not(:focus-within) { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.vr { + display: inline-block; + align-self: stretch; + width: 1px; + min-height: 1em; + background-color: currentColor; + opacity: 0.25; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.float-start { + float: left !important; +} + +.float-end { + float: right !important; +} + +.float-none { + float: none !important; +} + +.opacity-0 { + opacity: 0 !important; +} + +.opacity-25 { + opacity: 0.25 !important; +} + +.opacity-50 { + opacity: 0.5 !important; +} + +.opacity-75 { + opacity: 0.75 !important; +} + +.opacity-100 { + opacity: 1 !important; +} + +.overflow-auto { + overflow: auto !important; +} + +.overflow-hidden { + overflow: hidden !important; +} + +.overflow-visible { + overflow: visible !important; +} + +.overflow-scroll { + overflow: scroll !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-grid { + display: grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.shadow-none { + box-shadow: none !important; +} + +.position-static { + position: static !important; +} + +.position-relative { + position: relative !important; +} + +.position-absolute { + position: absolute !important; +} + +.position-fixed { + position: fixed !important; +} + +.position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.top-0 { + top: 0 !important; +} + +.top-50 { + top: 50% !important; +} + +.top-100 { + top: 100% !important; +} + +.bottom-0 { + bottom: 0 !important; +} + +.bottom-50 { + bottom: 50% !important; +} + +.bottom-100 { + bottom: 100% !important; +} + +.start-0 { + left: 0 !important; +} + +.start-50 { + left: 50% !important; +} + +.start-100 { + left: 100% !important; +} + +.end-0 { + right: 0 !important; +} + +.end-50 { + right: 50% !important; +} + +.end-100 { + right: 100% !important; +} + +.translate-middle { + transform: translate(-50%, -50%) !important; +} + +.translate-middle-x { + transform: translateX(-50%) !important; +} + +.translate-middle-y { + transform: translateY(-50%) !important; +} + +.border { + border: 1px solid #dee2e6 !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top { + border-top: 1px solid #dee2e6 !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-end { + border-right: 1px solid #dee2e6 !important; +} + +.border-end-0 { + border-right: 0 !important; +} + +.border-bottom { + border-bottom: 1px solid #dee2e6 !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-start { + border-left: 1px solid #dee2e6 !important; +} + +.border-start-0 { + border-left: 0 !important; +} + +.border-primary { + border-color: #0d6efd !important; +} + +.border-secondary { + border-color: #6c757d !important; +} + +.border-success { + border-color: #198754 !important; +} + +.border-info { + border-color: #0dcaf0 !important; +} + +.border-warning { + border-color: #ffc107 !important; +} + +.border-danger { + border-color: #dc3545 !important; +} + +.border-light { + border-color: #f8f9fa !important; +} + +.border-dark { + border-color: #212529 !important; +} + +.border-white { + border-color: #fff !important; +} + +.border-1 { + border-width: 1px !important; +} + +.border-2 { + border-width: 2px !important; +} + +.border-3 { + border-width: 3px !important; +} + +.border-4 { + border-width: 4px !important; +} + +.border-5 { + border-width: 5px !important; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.w-auto { + width: auto !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.vw-100 { + width: 100vw !important; +} + +.min-vw-100 { + min-width: 100vw !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.h-auto { + height: auto !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.vh-100 { + height: 100vh !important; +} + +.min-vh-100 { + min-height: 100vh !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.gap-0 { + gap: 0 !important; +} + +.gap-1 { + gap: 0.25rem !important; +} + +.gap-2 { + gap: 0.5rem !important; +} + +.gap-3 { + gap: 1rem !important; +} + +.gap-4 { + gap: 1.5rem !important; +} + +.gap-5 { + gap: 3rem !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.justify-content-evenly { + justify-content: space-evenly !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +.order-first { + order: -1 !important; +} + +.order-0 { + order: 0 !important; +} + +.order-1 { + order: 1 !important; +} + +.order-2 { + order: 2 !important; +} + +.order-3 { + order: 3 !important; +} + +.order-4 { + order: 4 !important; +} + +.order-5 { + order: 5 !important; +} + +.order-last { + order: 6 !important; +} + +.m-0 { + margin: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.me-0 { + margin-right: 0 !important; +} + +.me-1 { + margin-right: 0.25rem !important; +} + +.me-2 { + margin-right: 0.5rem !important; +} + +.me-3 { + margin-right: 1rem !important; +} + +.me-4 { + margin-right: 1.5rem !important; +} + +.me-5 { + margin-right: 3rem !important; +} + +.me-auto { + margin-right: auto !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ms-0 { + margin-left: 0 !important; +} + +.ms-1 { + margin-left: 0.25rem !important; +} + +.ms-2 { + margin-left: 0.5rem !important; +} + +.ms-3 { + margin-left: 1rem !important; +} + +.ms-4 { + margin-left: 1.5rem !important; +} + +.ms-5 { + margin-left: 3rem !important; +} + +.ms-auto { + margin-left: auto !important; +} + +.p-0 { + padding: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pe-0 { + padding-right: 0 !important; +} + +.pe-1 { + padding-right: 0.25rem !important; +} + +.pe-2 { + padding-right: 0.5rem !important; +} + +.pe-3 { + padding-right: 1rem !important; +} + +.pe-4 { + padding-right: 1.5rem !important; +} + +.pe-5 { + padding-right: 3rem !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.ps-0 { + padding-left: 0 !important; +} + +.ps-1 { + padding-left: 0.25rem !important; +} + +.ps-2 { + padding-left: 0.5rem !important; +} + +.ps-3 { + padding-left: 1rem !important; +} + +.ps-4 { + padding-left: 1.5rem !important; +} + +.ps-5 { + padding-left: 3rem !important; +} + +.font-monospace { + font-family: var(--bs-font-monospace) !important; +} + +.fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; +} + +.fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; +} + +.fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; +} + +.fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; +} + +.fs-5 { + font-size: 1.25rem !important; +} + +.fs-6 { + font-size: 1rem !important; +} + +.fst-italic { + font-style: italic !important; +} + +.fst-normal { + font-style: normal !important; +} + +.fw-light { + font-weight: 300 !important; +} + +.fw-lighter { + font-weight: lighter !important; +} + +.fw-normal { + font-weight: 400 !important; +} + +.fw-bold { + font-weight: 700 !important; +} + +.fw-bolder { + font-weight: bolder !important; +} + +.lh-1 { + line-height: 1 !important; +} + +.lh-sm { + line-height: 1.25 !important; +} + +.lh-base { + line-height: 1.5 !important; +} + +.lh-lg { + line-height: 2 !important; +} + +.text-start { + text-align: left !important; +} + +.text-end { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +.text-decoration-none { + text-decoration: none !important; +} + +.text-decoration-underline { + text-decoration: underline !important; +} + +.text-decoration-line-through { + text-decoration: line-through !important; +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.text-wrap { + white-space: normal !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +/* rtl:begin:remove */ +.text-break { + word-wrap: break-word !important; + word-break: break-word !important; +} + +/* rtl:end:remove */ +.text-primary { + --bs-text-opacity: 1; + color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important; +} + +.text-secondary { + --bs-text-opacity: 1; + color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important; +} + +.text-success { + --bs-text-opacity: 1; + color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important; +} + +.text-info { + --bs-text-opacity: 1; + color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important; +} + +.text-warning { + --bs-text-opacity: 1; + color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important; +} + +.text-danger { + --bs-text-opacity: 1; + color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important; +} + +.text-light { + --bs-text-opacity: 1; + color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important; +} + +.text-dark { + --bs-text-opacity: 1; + color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important; +} + +.text-black { + --bs-text-opacity: 1; + color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important; +} + +.text-white { + --bs-text-opacity: 1; + color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important; +} + +.text-body { + --bs-text-opacity: 1; + color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important; +} + +.text-muted { + --bs-text-opacity: 1; + color: #6c757d !important; +} + +.text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; +} + +.text-reset { + --bs-text-opacity: 1; + color: inherit !important; +} + +.text-opacity-25 { + --bs-text-opacity: 0.25; +} + +.text-opacity-50 { + --bs-text-opacity: 0.5; +} + +.text-opacity-75 { + --bs-text-opacity: 0.75; +} + +.text-opacity-100 { + --bs-text-opacity: 1; +} + +.bg-primary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-success { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-info { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-warning { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-danger { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-light { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-dark { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-black { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-white { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-body { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-transparent { + --bs-bg-opacity: 1; + background-color: transparent !important; +} + +.bg-opacity-10 { + --bs-bg-opacity: 0.1; +} + +.bg-opacity-25 { + --bs-bg-opacity: 0.25; +} + +.bg-opacity-50 { + --bs-bg-opacity: 0.5; +} + +.bg-opacity-75 { + --bs-bg-opacity: 0.75; +} + +.bg-opacity-100 { + --bs-bg-opacity: 1; +} + +.bg-gradient { + background-image: var(--bs-gradient) !important; +} + +.user-select-all { + -webkit-user-select: all !important; + -moz-user-select: all !important; + user-select: all !important; +} + +.user-select-auto { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + user-select: auto !important; +} + +.user-select-none { + -webkit-user-select: none !important; + -moz-user-select: none !important; + user-select: none !important; +} + +.pe-none { + pointer-events: none !important; +} + +.pe-auto { + pointer-events: auto !important; +} + +.rounded { + border-radius: 0.25rem !important; +} + +.rounded-0 { + border-radius: 0 !important; +} + +.rounded-1 { + border-radius: 0.2rem !important; +} + +.rounded-2 { + border-radius: 0.25rem !important; +} + +.rounded-3 { + border-radius: 0.3rem !important; +} + +.rounded-circle { + border-radius: 50% !important; +} + +.rounded-pill { + border-radius: 50rem !important; +} + +.rounded-top { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; +} + +.rounded-end { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; +} + +.rounded-bottom { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-start { + border-bottom-left-radius: 0.25rem !important; + border-top-left-radius: 0.25rem !important; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} + +@media (min-width: 576px) { + .float-sm-start { + float: left !important; + } + + .float-sm-end { + float: right !important; + } + + .float-sm-none { + float: none !important; + } + + .d-sm-inline { + display: inline !important; + } + + .d-sm-inline-block { + display: inline-block !important; + } + + .d-sm-block { + display: block !important; + } + + .d-sm-grid { + display: grid !important; + } + + .d-sm-table { + display: table !important; + } + + .d-sm-table-row { + display: table-row !important; + } + + .d-sm-table-cell { + display: table-cell !important; + } + + .d-sm-flex { + display: flex !important; + } + + .d-sm-inline-flex { + display: inline-flex !important; + } + + .d-sm-none { + display: none !important; + } + + .flex-sm-fill { + flex: 1 1 auto !important; + } + + .flex-sm-row { + flex-direction: row !important; + } + + .flex-sm-column { + flex-direction: column !important; + } + + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-sm-wrap { + flex-wrap: wrap !important; + } + + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .gap-sm-0 { + gap: 0 !important; + } + + .gap-sm-1 { + gap: 0.25rem !important; + } + + .gap-sm-2 { + gap: 0.5rem !important; + } + + .gap-sm-3 { + gap: 1rem !important; + } + + .gap-sm-4 { + gap: 1.5rem !important; + } + + .gap-sm-5 { + gap: 3rem !important; + } + + .justify-content-sm-start { + justify-content: flex-start !important; + } + + .justify-content-sm-end { + justify-content: flex-end !important; + } + + .justify-content-sm-center { + justify-content: center !important; + } + + .justify-content-sm-between { + justify-content: space-between !important; + } + + .justify-content-sm-around { + justify-content: space-around !important; + } + + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + + .align-items-sm-start { + align-items: flex-start !important; + } + + .align-items-sm-end { + align-items: flex-end !important; + } + + .align-items-sm-center { + align-items: center !important; + } + + .align-items-sm-baseline { + align-items: baseline !important; + } + + .align-items-sm-stretch { + align-items: stretch !important; + } + + .align-content-sm-start { + align-content: flex-start !important; + } + + .align-content-sm-end { + align-content: flex-end !important; + } + + .align-content-sm-center { + align-content: center !important; + } + + .align-content-sm-between { + align-content: space-between !important; + } + + .align-content-sm-around { + align-content: space-around !important; + } + + .align-content-sm-stretch { + align-content: stretch !important; + } + + .align-self-sm-auto { + align-self: auto !important; + } + + .align-self-sm-start { + align-self: flex-start !important; + } + + .align-self-sm-end { + align-self: flex-end !important; + } + + .align-self-sm-center { + align-self: center !important; + } + + .align-self-sm-baseline { + align-self: baseline !important; + } + + .align-self-sm-stretch { + align-self: stretch !important; + } + + .order-sm-first { + order: -1 !important; + } + + .order-sm-0 { + order: 0 !important; + } + + .order-sm-1 { + order: 1 !important; + } + + .order-sm-2 { + order: 2 !important; + } + + .order-sm-3 { + order: 3 !important; + } + + .order-sm-4 { + order: 4 !important; + } + + .order-sm-5 { + order: 5 !important; + } + + .order-sm-last { + order: 6 !important; + } + + .m-sm-0 { + margin: 0 !important; + } + + .m-sm-1 { + margin: 0.25rem !important; + } + + .m-sm-2 { + margin: 0.5rem !important; + } + + .m-sm-3 { + margin: 1rem !important; + } + + .m-sm-4 { + margin: 1.5rem !important; + } + + .m-sm-5 { + margin: 3rem !important; + } + + .m-sm-auto { + margin: auto !important; + } + + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-sm-0 { + margin-top: 0 !important; + } + + .mt-sm-1 { + margin-top: 0.25rem !important; + } + + .mt-sm-2 { + margin-top: 0.5rem !important; + } + + .mt-sm-3 { + margin-top: 1rem !important; + } + + .mt-sm-4 { + margin-top: 1.5rem !important; + } + + .mt-sm-5 { + margin-top: 3rem !important; + } + + .mt-sm-auto { + margin-top: auto !important; + } + + .me-sm-0 { + margin-right: 0 !important; + } + + .me-sm-1 { + margin-right: 0.25rem !important; + } + + .me-sm-2 { + margin-right: 0.5rem !important; + } + + .me-sm-3 { + margin-right: 1rem !important; + } + + .me-sm-4 { + margin-right: 1.5rem !important; + } + + .me-sm-5 { + margin-right: 3rem !important; + } + + .me-sm-auto { + margin-right: auto !important; + } + + .mb-sm-0 { + margin-bottom: 0 !important; + } + + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + + .mb-sm-3 { + margin-bottom: 1rem !important; + } + + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + + .mb-sm-5 { + margin-bottom: 3rem !important; + } + + .mb-sm-auto { + margin-bottom: auto !important; + } + + .ms-sm-0 { + margin-left: 0 !important; + } + + .ms-sm-1 { + margin-left: 0.25rem !important; + } + + .ms-sm-2 { + margin-left: 0.5rem !important; + } + + .ms-sm-3 { + margin-left: 1rem !important; + } + + .ms-sm-4 { + margin-left: 1.5rem !important; + } + + .ms-sm-5 { + margin-left: 3rem !important; + } + + .ms-sm-auto { + margin-left: auto !important; + } + + .p-sm-0 { + padding: 0 !important; + } + + .p-sm-1 { + padding: 0.25rem !important; + } + + .p-sm-2 { + padding: 0.5rem !important; + } + + .p-sm-3 { + padding: 1rem !important; + } + + .p-sm-4 { + padding: 1.5rem !important; + } + + .p-sm-5 { + padding: 3rem !important; + } + + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-sm-0 { + padding-top: 0 !important; + } + + .pt-sm-1 { + padding-top: 0.25rem !important; + } + + .pt-sm-2 { + padding-top: 0.5rem !important; + } + + .pt-sm-3 { + padding-top: 1rem !important; + } + + .pt-sm-4 { + padding-top: 1.5rem !important; + } + + .pt-sm-5 { + padding-top: 3rem !important; + } + + .pe-sm-0 { + padding-right: 0 !important; + } + + .pe-sm-1 { + padding-right: 0.25rem !important; + } + + .pe-sm-2 { + padding-right: 0.5rem !important; + } + + .pe-sm-3 { + padding-right: 1rem !important; + } + + .pe-sm-4 { + padding-right: 1.5rem !important; + } + + .pe-sm-5 { + padding-right: 3rem !important; + } + + .pb-sm-0 { + padding-bottom: 0 !important; + } + + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + + .pb-sm-3 { + padding-bottom: 1rem !important; + } + + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + + .pb-sm-5 { + padding-bottom: 3rem !important; + } + + .ps-sm-0 { + padding-left: 0 !important; + } + + .ps-sm-1 { + padding-left: 0.25rem !important; + } + + .ps-sm-2 { + padding-left: 0.5rem !important; + } + + .ps-sm-3 { + padding-left: 1rem !important; + } + + .ps-sm-4 { + padding-left: 1.5rem !important; + } + + .ps-sm-5 { + padding-left: 3rem !important; + } + + .text-sm-start { + text-align: left !important; + } + + .text-sm-end { + text-align: right !important; + } + + .text-sm-center { + text-align: center !important; + } +} +@media (min-width: 768px) { + .float-md-start { + float: left !important; + } + + .float-md-end { + float: right !important; + } + + .float-md-none { + float: none !important; + } + + .d-md-inline { + display: inline !important; + } + + .d-md-inline-block { + display: inline-block !important; + } + + .d-md-block { + display: block !important; + } + + .d-md-grid { + display: grid !important; + } + + .d-md-table { + display: table !important; + } + + .d-md-table-row { + display: table-row !important; + } + + .d-md-table-cell { + display: table-cell !important; + } + + .d-md-flex { + display: flex !important; + } + + .d-md-inline-flex { + display: inline-flex !important; + } + + .d-md-none { + display: none !important; + } + + .flex-md-fill { + flex: 1 1 auto !important; + } + + .flex-md-row { + flex-direction: row !important; + } + + .flex-md-column { + flex-direction: column !important; + } + + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-md-grow-0 { + flex-grow: 0 !important; + } + + .flex-md-grow-1 { + flex-grow: 1 !important; + } + + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-md-wrap { + flex-wrap: wrap !important; + } + + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .gap-md-0 { + gap: 0 !important; + } + + .gap-md-1 { + gap: 0.25rem !important; + } + + .gap-md-2 { + gap: 0.5rem !important; + } + + .gap-md-3 { + gap: 1rem !important; + } + + .gap-md-4 { + gap: 1.5rem !important; + } + + .gap-md-5 { + gap: 3rem !important; + } + + .justify-content-md-start { + justify-content: flex-start !important; + } + + .justify-content-md-end { + justify-content: flex-end !important; + } + + .justify-content-md-center { + justify-content: center !important; + } + + .justify-content-md-between { + justify-content: space-between !important; + } + + .justify-content-md-around { + justify-content: space-around !important; + } + + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + + .align-items-md-start { + align-items: flex-start !important; + } + + .align-items-md-end { + align-items: flex-end !important; + } + + .align-items-md-center { + align-items: center !important; + } + + .align-items-md-baseline { + align-items: baseline !important; + } + + .align-items-md-stretch { + align-items: stretch !important; + } + + .align-content-md-start { + align-content: flex-start !important; + } + + .align-content-md-end { + align-content: flex-end !important; + } + + .align-content-md-center { + align-content: center !important; + } + + .align-content-md-between { + align-content: space-between !important; + } + + .align-content-md-around { + align-content: space-around !important; + } + + .align-content-md-stretch { + align-content: stretch !important; + } + + .align-self-md-auto { + align-self: auto !important; + } + + .align-self-md-start { + align-self: flex-start !important; + } + + .align-self-md-end { + align-self: flex-end !important; + } + + .align-self-md-center { + align-self: center !important; + } + + .align-self-md-baseline { + align-self: baseline !important; + } + + .align-self-md-stretch { + align-self: stretch !important; + } + + .order-md-first { + order: -1 !important; + } + + .order-md-0 { + order: 0 !important; + } + + .order-md-1 { + order: 1 !important; + } + + .order-md-2 { + order: 2 !important; + } + + .order-md-3 { + order: 3 !important; + } + + .order-md-4 { + order: 4 !important; + } + + .order-md-5 { + order: 5 !important; + } + + .order-md-last { + order: 6 !important; + } + + .m-md-0 { + margin: 0 !important; + } + + .m-md-1 { + margin: 0.25rem !important; + } + + .m-md-2 { + margin: 0.5rem !important; + } + + .m-md-3 { + margin: 1rem !important; + } + + .m-md-4 { + margin: 1.5rem !important; + } + + .m-md-5 { + margin: 3rem !important; + } + + .m-md-auto { + margin: auto !important; + } + + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-md-0 { + margin-top: 0 !important; + } + + .mt-md-1 { + margin-top: 0.25rem !important; + } + + .mt-md-2 { + margin-top: 0.5rem !important; + } + + .mt-md-3 { + margin-top: 1rem !important; + } + + .mt-md-4 { + margin-top: 1.5rem !important; + } + + .mt-md-5 { + margin-top: 3rem !important; + } + + .mt-md-auto { + margin-top: auto !important; + } + + .me-md-0 { + margin-right: 0 !important; + } + + .me-md-1 { + margin-right: 0.25rem !important; + } + + .me-md-2 { + margin-right: 0.5rem !important; + } + + .me-md-3 { + margin-right: 1rem !important; + } + + .me-md-4 { + margin-right: 1.5rem !important; + } + + .me-md-5 { + margin-right: 3rem !important; + } + + .me-md-auto { + margin-right: auto !important; + } + + .mb-md-0 { + margin-bottom: 0 !important; + } + + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + + .mb-md-3 { + margin-bottom: 1rem !important; + } + + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + + .mb-md-5 { + margin-bottom: 3rem !important; + } + + .mb-md-auto { + margin-bottom: auto !important; + } + + .ms-md-0 { + margin-left: 0 !important; + } + + .ms-md-1 { + margin-left: 0.25rem !important; + } + + .ms-md-2 { + margin-left: 0.5rem !important; + } + + .ms-md-3 { + margin-left: 1rem !important; + } + + .ms-md-4 { + margin-left: 1.5rem !important; + } + + .ms-md-5 { + margin-left: 3rem !important; + } + + .ms-md-auto { + margin-left: auto !important; + } + + .p-md-0 { + padding: 0 !important; + } + + .p-md-1 { + padding: 0.25rem !important; + } + + .p-md-2 { + padding: 0.5rem !important; + } + + .p-md-3 { + padding: 1rem !important; + } + + .p-md-4 { + padding: 1.5rem !important; + } + + .p-md-5 { + padding: 3rem !important; + } + + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-md-0 { + padding-top: 0 !important; + } + + .pt-md-1 { + padding-top: 0.25rem !important; + } + + .pt-md-2 { + padding-top: 0.5rem !important; + } + + .pt-md-3 { + padding-top: 1rem !important; + } + + .pt-md-4 { + padding-top: 1.5rem !important; + } + + .pt-md-5 { + padding-top: 3rem !important; + } + + .pe-md-0 { + padding-right: 0 !important; + } + + .pe-md-1 { + padding-right: 0.25rem !important; + } + + .pe-md-2 { + padding-right: 0.5rem !important; + } + + .pe-md-3 { + padding-right: 1rem !important; + } + + .pe-md-4 { + padding-right: 1.5rem !important; + } + + .pe-md-5 { + padding-right: 3rem !important; + } + + .pb-md-0 { + padding-bottom: 0 !important; + } + + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + + .pb-md-3 { + padding-bottom: 1rem !important; + } + + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + + .pb-md-5 { + padding-bottom: 3rem !important; + } + + .ps-md-0 { + padding-left: 0 !important; + } + + .ps-md-1 { + padding-left: 0.25rem !important; + } + + .ps-md-2 { + padding-left: 0.5rem !important; + } + + .ps-md-3 { + padding-left: 1rem !important; + } + + .ps-md-4 { + padding-left: 1.5rem !important; + } + + .ps-md-5 { + padding-left: 3rem !important; + } + + .text-md-start { + text-align: left !important; + } + + .text-md-end { + text-align: right !important; + } + + .text-md-center { + text-align: center !important; + } +} +@media (min-width: 992px) { + .float-lg-start { + float: left !important; + } + + .float-lg-end { + float: right !important; + } + + .float-lg-none { + float: none !important; + } + + .d-lg-inline { + display: inline !important; + } + + .d-lg-inline-block { + display: inline-block !important; + } + + .d-lg-block { + display: block !important; + } + + .d-lg-grid { + display: grid !important; + } + + .d-lg-table { + display: table !important; + } + + .d-lg-table-row { + display: table-row !important; + } + + .d-lg-table-cell { + display: table-cell !important; + } + + .d-lg-flex { + display: flex !important; + } + + .d-lg-inline-flex { + display: inline-flex !important; + } + + .d-lg-none { + display: none !important; + } + + .flex-lg-fill { + flex: 1 1 auto !important; + } + + .flex-lg-row { + flex-direction: row !important; + } + + .flex-lg-column { + flex-direction: column !important; + } + + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-lg-wrap { + flex-wrap: wrap !important; + } + + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .gap-lg-0 { + gap: 0 !important; + } + + .gap-lg-1 { + gap: 0.25rem !important; + } + + .gap-lg-2 { + gap: 0.5rem !important; + } + + .gap-lg-3 { + gap: 1rem !important; + } + + .gap-lg-4 { + gap: 1.5rem !important; + } + + .gap-lg-5 { + gap: 3rem !important; + } + + .justify-content-lg-start { + justify-content: flex-start !important; + } + + .justify-content-lg-end { + justify-content: flex-end !important; + } + + .justify-content-lg-center { + justify-content: center !important; + } + + .justify-content-lg-between { + justify-content: space-between !important; + } + + .justify-content-lg-around { + justify-content: space-around !important; + } + + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + + .align-items-lg-start { + align-items: flex-start !important; + } + + .align-items-lg-end { + align-items: flex-end !important; + } + + .align-items-lg-center { + align-items: center !important; + } + + .align-items-lg-baseline { + align-items: baseline !important; + } + + .align-items-lg-stretch { + align-items: stretch !important; + } + + .align-content-lg-start { + align-content: flex-start !important; + } + + .align-content-lg-end { + align-content: flex-end !important; + } + + .align-content-lg-center { + align-content: center !important; + } + + .align-content-lg-between { + align-content: space-between !important; + } + + .align-content-lg-around { + align-content: space-around !important; + } + + .align-content-lg-stretch { + align-content: stretch !important; + } + + .align-self-lg-auto { + align-self: auto !important; + } + + .align-self-lg-start { + align-self: flex-start !important; + } + + .align-self-lg-end { + align-self: flex-end !important; + } + + .align-self-lg-center { + align-self: center !important; + } + + .align-self-lg-baseline { + align-self: baseline !important; + } + + .align-self-lg-stretch { + align-self: stretch !important; + } + + .order-lg-first { + order: -1 !important; + } + + .order-lg-0 { + order: 0 !important; + } + + .order-lg-1 { + order: 1 !important; + } + + .order-lg-2 { + order: 2 !important; + } + + .order-lg-3 { + order: 3 !important; + } + + .order-lg-4 { + order: 4 !important; + } + + .order-lg-5 { + order: 5 !important; + } + + .order-lg-last { + order: 6 !important; + } + + .m-lg-0 { + margin: 0 !important; + } + + .m-lg-1 { + margin: 0.25rem !important; + } + + .m-lg-2 { + margin: 0.5rem !important; + } + + .m-lg-3 { + margin: 1rem !important; + } + + .m-lg-4 { + margin: 1.5rem !important; + } + + .m-lg-5 { + margin: 3rem !important; + } + + .m-lg-auto { + margin: auto !important; + } + + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-lg-0 { + margin-top: 0 !important; + } + + .mt-lg-1 { + margin-top: 0.25rem !important; + } + + .mt-lg-2 { + margin-top: 0.5rem !important; + } + + .mt-lg-3 { + margin-top: 1rem !important; + } + + .mt-lg-4 { + margin-top: 1.5rem !important; + } + + .mt-lg-5 { + margin-top: 3rem !important; + } + + .mt-lg-auto { + margin-top: auto !important; + } + + .me-lg-0 { + margin-right: 0 !important; + } + + .me-lg-1 { + margin-right: 0.25rem !important; + } + + .me-lg-2 { + margin-right: 0.5rem !important; + } + + .me-lg-3 { + margin-right: 1rem !important; + } + + .me-lg-4 { + margin-right: 1.5rem !important; + } + + .me-lg-5 { + margin-right: 3rem !important; + } + + .me-lg-auto { + margin-right: auto !important; + } + + .mb-lg-0 { + margin-bottom: 0 !important; + } + + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + + .mb-lg-3 { + margin-bottom: 1rem !important; + } + + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + + .mb-lg-5 { + margin-bottom: 3rem !important; + } + + .mb-lg-auto { + margin-bottom: auto !important; + } + + .ms-lg-0 { + margin-left: 0 !important; + } + + .ms-lg-1 { + margin-left: 0.25rem !important; + } + + .ms-lg-2 { + margin-left: 0.5rem !important; + } + + .ms-lg-3 { + margin-left: 1rem !important; + } + + .ms-lg-4 { + margin-left: 1.5rem !important; + } + + .ms-lg-5 { + margin-left: 3rem !important; + } + + .ms-lg-auto { + margin-left: auto !important; + } + + .p-lg-0 { + padding: 0 !important; + } + + .p-lg-1 { + padding: 0.25rem !important; + } + + .p-lg-2 { + padding: 0.5rem !important; + } + + .p-lg-3 { + padding: 1rem !important; + } + + .p-lg-4 { + padding: 1.5rem !important; + } + + .p-lg-5 { + padding: 3rem !important; + } + + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-lg-0 { + padding-top: 0 !important; + } + + .pt-lg-1 { + padding-top: 0.25rem !important; + } + + .pt-lg-2 { + padding-top: 0.5rem !important; + } + + .pt-lg-3 { + padding-top: 1rem !important; + } + + .pt-lg-4 { + padding-top: 1.5rem !important; + } + + .pt-lg-5 { + padding-top: 3rem !important; + } + + .pe-lg-0 { + padding-right: 0 !important; + } + + .pe-lg-1 { + padding-right: 0.25rem !important; + } + + .pe-lg-2 { + padding-right: 0.5rem !important; + } + + .pe-lg-3 { + padding-right: 1rem !important; + } + + .pe-lg-4 { + padding-right: 1.5rem !important; + } + + .pe-lg-5 { + padding-right: 3rem !important; + } + + .pb-lg-0 { + padding-bottom: 0 !important; + } + + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + + .pb-lg-3 { + padding-bottom: 1rem !important; + } + + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + + .pb-lg-5 { + padding-bottom: 3rem !important; + } + + .ps-lg-0 { + padding-left: 0 !important; + } + + .ps-lg-1 { + padding-left: 0.25rem !important; + } + + .ps-lg-2 { + padding-left: 0.5rem !important; + } + + .ps-lg-3 { + padding-left: 1rem !important; + } + + .ps-lg-4 { + padding-left: 1.5rem !important; + } + + .ps-lg-5 { + padding-left: 3rem !important; + } + + .text-lg-start { + text-align: left !important; + } + + .text-lg-end { + text-align: right !important; + } + + .text-lg-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .float-xl-start { + float: left !important; + } + + .float-xl-end { + float: right !important; + } + + .float-xl-none { + float: none !important; + } + + .d-xl-inline { + display: inline !important; + } + + .d-xl-inline-block { + display: inline-block !important; + } + + .d-xl-block { + display: block !important; + } + + .d-xl-grid { + display: grid !important; + } + + .d-xl-table { + display: table !important; + } + + .d-xl-table-row { + display: table-row !important; + } + + .d-xl-table-cell { + display: table-cell !important; + } + + .d-xl-flex { + display: flex !important; + } + + .d-xl-inline-flex { + display: inline-flex !important; + } + + .d-xl-none { + display: none !important; + } + + .flex-xl-fill { + flex: 1 1 auto !important; + } + + .flex-xl-row { + flex-direction: row !important; + } + + .flex-xl-column { + flex-direction: column !important; + } + + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-xl-wrap { + flex-wrap: wrap !important; + } + + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .gap-xl-0 { + gap: 0 !important; + } + + .gap-xl-1 { + gap: 0.25rem !important; + } + + .gap-xl-2 { + gap: 0.5rem !important; + } + + .gap-xl-3 { + gap: 1rem !important; + } + + .gap-xl-4 { + gap: 1.5rem !important; + } + + .gap-xl-5 { + gap: 3rem !important; + } + + .justify-content-xl-start { + justify-content: flex-start !important; + } + + .justify-content-xl-end { + justify-content: flex-end !important; + } + + .justify-content-xl-center { + justify-content: center !important; + } + + .justify-content-xl-between { + justify-content: space-between !important; + } + + .justify-content-xl-around { + justify-content: space-around !important; + } + + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + + .align-items-xl-start { + align-items: flex-start !important; + } + + .align-items-xl-end { + align-items: flex-end !important; + } + + .align-items-xl-center { + align-items: center !important; + } + + .align-items-xl-baseline { + align-items: baseline !important; + } + + .align-items-xl-stretch { + align-items: stretch !important; + } + + .align-content-xl-start { + align-content: flex-start !important; + } + + .align-content-xl-end { + align-content: flex-end !important; + } + + .align-content-xl-center { + align-content: center !important; + } + + .align-content-xl-between { + align-content: space-between !important; + } + + .align-content-xl-around { + align-content: space-around !important; + } + + .align-content-xl-stretch { + align-content: stretch !important; + } + + .align-self-xl-auto { + align-self: auto !important; + } + + .align-self-xl-start { + align-self: flex-start !important; + } + + .align-self-xl-end { + align-self: flex-end !important; + } + + .align-self-xl-center { + align-self: center !important; + } + + .align-self-xl-baseline { + align-self: baseline !important; + } + + .align-self-xl-stretch { + align-self: stretch !important; + } + + .order-xl-first { + order: -1 !important; + } + + .order-xl-0 { + order: 0 !important; + } + + .order-xl-1 { + order: 1 !important; + } + + .order-xl-2 { + order: 2 !important; + } + + .order-xl-3 { + order: 3 !important; + } + + .order-xl-4 { + order: 4 !important; + } + + .order-xl-5 { + order: 5 !important; + } + + .order-xl-last { + order: 6 !important; + } + + .m-xl-0 { + margin: 0 !important; + } + + .m-xl-1 { + margin: 0.25rem !important; + } + + .m-xl-2 { + margin: 0.5rem !important; + } + + .m-xl-3 { + margin: 1rem !important; + } + + .m-xl-4 { + margin: 1.5rem !important; + } + + .m-xl-5 { + margin: 3rem !important; + } + + .m-xl-auto { + margin: auto !important; + } + + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xl-0 { + margin-top: 0 !important; + } + + .mt-xl-1 { + margin-top: 0.25rem !important; + } + + .mt-xl-2 { + margin-top: 0.5rem !important; + } + + .mt-xl-3 { + margin-top: 1rem !important; + } + + .mt-xl-4 { + margin-top: 1.5rem !important; + } + + .mt-xl-5 { + margin-top: 3rem !important; + } + + .mt-xl-auto { + margin-top: auto !important; + } + + .me-xl-0 { + margin-right: 0 !important; + } + + .me-xl-1 { + margin-right: 0.25rem !important; + } + + .me-xl-2 { + margin-right: 0.5rem !important; + } + + .me-xl-3 { + margin-right: 1rem !important; + } + + .me-xl-4 { + margin-right: 1.5rem !important; + } + + .me-xl-5 { + margin-right: 3rem !important; + } + + .me-xl-auto { + margin-right: auto !important; + } + + .mb-xl-0 { + margin-bottom: 0 !important; + } + + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + + .mb-xl-3 { + margin-bottom: 1rem !important; + } + + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + + .mb-xl-5 { + margin-bottom: 3rem !important; + } + + .mb-xl-auto { + margin-bottom: auto !important; + } + + .ms-xl-0 { + margin-left: 0 !important; + } + + .ms-xl-1 { + margin-left: 0.25rem !important; + } + + .ms-xl-2 { + margin-left: 0.5rem !important; + } + + .ms-xl-3 { + margin-left: 1rem !important; + } + + .ms-xl-4 { + margin-left: 1.5rem !important; + } + + .ms-xl-5 { + margin-left: 3rem !important; + } + + .ms-xl-auto { + margin-left: auto !important; + } + + .p-xl-0 { + padding: 0 !important; + } + + .p-xl-1 { + padding: 0.25rem !important; + } + + .p-xl-2 { + padding: 0.5rem !important; + } + + .p-xl-3 { + padding: 1rem !important; + } + + .p-xl-4 { + padding: 1.5rem !important; + } + + .p-xl-5 { + padding: 3rem !important; + } + + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xl-0 { + padding-top: 0 !important; + } + + .pt-xl-1 { + padding-top: 0.25rem !important; + } + + .pt-xl-2 { + padding-top: 0.5rem !important; + } + + .pt-xl-3 { + padding-top: 1rem !important; + } + + .pt-xl-4 { + padding-top: 1.5rem !important; + } + + .pt-xl-5 { + padding-top: 3rem !important; + } + + .pe-xl-0 { + padding-right: 0 !important; + } + + .pe-xl-1 { + padding-right: 0.25rem !important; + } + + .pe-xl-2 { + padding-right: 0.5rem !important; + } + + .pe-xl-3 { + padding-right: 1rem !important; + } + + .pe-xl-4 { + padding-right: 1.5rem !important; + } + + .pe-xl-5 { + padding-right: 3rem !important; + } + + .pb-xl-0 { + padding-bottom: 0 !important; + } + + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + + .pb-xl-3 { + padding-bottom: 1rem !important; + } + + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + + .pb-xl-5 { + padding-bottom: 3rem !important; + } + + .ps-xl-0 { + padding-left: 0 !important; + } + + .ps-xl-1 { + padding-left: 0.25rem !important; + } + + .ps-xl-2 { + padding-left: 0.5rem !important; + } + + .ps-xl-3 { + padding-left: 1rem !important; + } + + .ps-xl-4 { + padding-left: 1.5rem !important; + } + + .ps-xl-5 { + padding-left: 3rem !important; + } + + .text-xl-start { + text-align: left !important; + } + + .text-xl-end { + text-align: right !important; + } + + .text-xl-center { + text-align: center !important; + } +} +@media (min-width: 1400px) { + .float-xxl-start { + float: left !important; + } + + .float-xxl-end { + float: right !important; + } + + .float-xxl-none { + float: none !important; + } + + .d-xxl-inline { + display: inline !important; + } + + .d-xxl-inline-block { + display: inline-block !important; + } + + .d-xxl-block { + display: block !important; + } + + .d-xxl-grid { + display: grid !important; + } + + .d-xxl-table { + display: table !important; + } + + .d-xxl-table-row { + display: table-row !important; + } + + .d-xxl-table-cell { + display: table-cell !important; + } + + .d-xxl-flex { + display: flex !important; + } + + .d-xxl-inline-flex { + display: inline-flex !important; + } + + .d-xxl-none { + display: none !important; + } + + .flex-xxl-fill { + flex: 1 1 auto !important; + } + + .flex-xxl-row { + flex-direction: row !important; + } + + .flex-xxl-column { + flex-direction: column !important; + } + + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .gap-xxl-0 { + gap: 0 !important; + } + + .gap-xxl-1 { + gap: 0.25rem !important; + } + + .gap-xxl-2 { + gap: 0.5rem !important; + } + + .gap-xxl-3 { + gap: 1rem !important; + } + + .gap-xxl-4 { + gap: 1.5rem !important; + } + + .gap-xxl-5 { + gap: 3rem !important; + } + + .justify-content-xxl-start { + justify-content: flex-start !important; + } + + .justify-content-xxl-end { + justify-content: flex-end !important; + } + + .justify-content-xxl-center { + justify-content: center !important; + } + + .justify-content-xxl-between { + justify-content: space-between !important; + } + + .justify-content-xxl-around { + justify-content: space-around !important; + } + + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + + .align-items-xxl-start { + align-items: flex-start !important; + } + + .align-items-xxl-end { + align-items: flex-end !important; + } + + .align-items-xxl-center { + align-items: center !important; + } + + .align-items-xxl-baseline { + align-items: baseline !important; + } + + .align-items-xxl-stretch { + align-items: stretch !important; + } + + .align-content-xxl-start { + align-content: flex-start !important; + } + + .align-content-xxl-end { + align-content: flex-end !important; + } + + .align-content-xxl-center { + align-content: center !important; + } + + .align-content-xxl-between { + align-content: space-between !important; + } + + .align-content-xxl-around { + align-content: space-around !important; + } + + .align-content-xxl-stretch { + align-content: stretch !important; + } + + .align-self-xxl-auto { + align-self: auto !important; + } + + .align-self-xxl-start { + align-self: flex-start !important; + } + + .align-self-xxl-end { + align-self: flex-end !important; + } + + .align-self-xxl-center { + align-self: center !important; + } + + .align-self-xxl-baseline { + align-self: baseline !important; + } + + .align-self-xxl-stretch { + align-self: stretch !important; + } + + .order-xxl-first { + order: -1 !important; + } + + .order-xxl-0 { + order: 0 !important; + } + + .order-xxl-1 { + order: 1 !important; + } + + .order-xxl-2 { + order: 2 !important; + } + + .order-xxl-3 { + order: 3 !important; + } + + .order-xxl-4 { + order: 4 !important; + } + + .order-xxl-5 { + order: 5 !important; + } + + .order-xxl-last { + order: 6 !important; + } + + .m-xxl-0 { + margin: 0 !important; + } + + .m-xxl-1 { + margin: 0.25rem !important; + } + + .m-xxl-2 { + margin: 0.5rem !important; + } + + .m-xxl-3 { + margin: 1rem !important; + } + + .m-xxl-4 { + margin: 1.5rem !important; + } + + .m-xxl-5 { + margin: 3rem !important; + } + + .m-xxl-auto { + margin: auto !important; + } + + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xxl-0 { + margin-top: 0 !important; + } + + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + + .mt-xxl-3 { + margin-top: 1rem !important; + } + + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + + .mt-xxl-5 { + margin-top: 3rem !important; + } + + .mt-xxl-auto { + margin-top: auto !important; + } + + .me-xxl-0 { + margin-right: 0 !important; + } + + .me-xxl-1 { + margin-right: 0.25rem !important; + } + + .me-xxl-2 { + margin-right: 0.5rem !important; + } + + .me-xxl-3 { + margin-right: 1rem !important; + } + + .me-xxl-4 { + margin-right: 1.5rem !important; + } + + .me-xxl-5 { + margin-right: 3rem !important; + } + + .me-xxl-auto { + margin-right: auto !important; + } + + .mb-xxl-0 { + margin-bottom: 0 !important; + } + + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + + .mb-xxl-auto { + margin-bottom: auto !important; + } + + .ms-xxl-0 { + margin-left: 0 !important; + } + + .ms-xxl-1 { + margin-left: 0.25rem !important; + } + + .ms-xxl-2 { + margin-left: 0.5rem !important; + } + + .ms-xxl-3 { + margin-left: 1rem !important; + } + + .ms-xxl-4 { + margin-left: 1.5rem !important; + } + + .ms-xxl-5 { + margin-left: 3rem !important; + } + + .ms-xxl-auto { + margin-left: auto !important; + } + + .p-xxl-0 { + padding: 0 !important; + } + + .p-xxl-1 { + padding: 0.25rem !important; + } + + .p-xxl-2 { + padding: 0.5rem !important; + } + + .p-xxl-3 { + padding: 1rem !important; + } + + .p-xxl-4 { + padding: 1.5rem !important; + } + + .p-xxl-5 { + padding: 3rem !important; + } + + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xxl-0 { + padding-top: 0 !important; + } + + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + + .pt-xxl-3 { + padding-top: 1rem !important; + } + + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + + .pt-xxl-5 { + padding-top: 3rem !important; + } + + .pe-xxl-0 { + padding-right: 0 !important; + } + + .pe-xxl-1 { + padding-right: 0.25rem !important; + } + + .pe-xxl-2 { + padding-right: 0.5rem !important; + } + + .pe-xxl-3 { + padding-right: 1rem !important; + } + + .pe-xxl-4 { + padding-right: 1.5rem !important; + } + + .pe-xxl-5 { + padding-right: 3rem !important; + } + + .pb-xxl-0 { + padding-bottom: 0 !important; + } + + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + + .ps-xxl-0 { + padding-left: 0 !important; + } + + .ps-xxl-1 { + padding-left: 0.25rem !important; + } + + .ps-xxl-2 { + padding-left: 0.5rem !important; + } + + .ps-xxl-3 { + padding-left: 1rem !important; + } + + .ps-xxl-4 { + padding-left: 1.5rem !important; + } + + .ps-xxl-5 { + padding-left: 3rem !important; + } + + .text-xxl-start { + text-align: left !important; + } + + .text-xxl-end { + text-align: right !important; + } + + .text-xxl-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .fs-1 { + font-size: 2.5rem !important; + } + + .fs-2 { + font-size: 2rem !important; + } + + .fs-3 { + font-size: 1.75rem !important; + } + + .fs-4 { + font-size: 1.5rem !important; + } +} +@media print { + .d-print-inline { + display: inline !important; + } + + .d-print-inline-block { + display: inline-block !important; + } + + .d-print-block { + display: block !important; + } + + .d-print-grid { + display: grid !important; + } + + .d-print-table { + display: table !important; + } + + .d-print-table-row { + display: table-row !important; + } + + .d-print-table-cell { + display: table-cell !important; + } + + .d-print-flex { + display: flex !important; + } + + .d-print-inline-flex { + display: inline-flex !important; + } + + .d-print-none { + display: none !important; + } +} + +/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/pkgs/csslib/third_party/foundation/LICENSE b/pkgs/csslib/third_party/foundation/LICENSE new file mode 100644 index 000000000..cfa9e0582 --- /dev/null +++ b/pkgs/csslib/third_party/foundation/LICENSE @@ -0,0 +1,22 @@ +Copyright © 2011-2020 ZURB, Inc. + +MIT License + +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/pkgs/csslib/third_party/foundation/README.md b/pkgs/csslib/third_party/foundation/README.md new file mode 100644 index 000000000..a79a2a8ac --- /dev/null +++ b/pkgs/csslib/third_party/foundation/README.md @@ -0,0 +1,4 @@ +This folder contains sample css files from the open-source project +https://github.com/foundation/foundation-sites. + +This code was included under the terms in the `LICENSE` file. \ No newline at end of file diff --git a/pkgs/csslib/third_party/foundation/foundation.css b/pkgs/csslib/third_party/foundation/foundation.css new file mode 100644 index 000000000..eb68cfdce --- /dev/null +++ b/pkgs/csslib/third_party/foundation/foundation.css @@ -0,0 +1,5616 @@ +@charset "UTF-8"; +/** + * Foundation for Sites + * Version 6.7.2 + * https://get.foundation + * Licensed under MIT Open Source + */ +@media print, screen and (min-width: 40em) { + .reveal, .reveal.tiny, .reveal.small, .reveal.large { + right: auto; + left: auto; + margin: 0 auto; } } + +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ +html { + line-height: 1.15; + -webkit-text-size-adjust: 100%; } + +body { + margin: 0; } + +h1 { + font-size: 2em; + margin: 0.67em 0; } + +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; } + +abbr[title] { + border-bottom: none; + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; } + +b, +strong { + font-weight: bolder; } + +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; } + +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; } + +img { + border-style: none; } + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; } + +button, +input { + overflow: visible; } + +button, +select { + text-transform: none; } + +button, +[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 { + 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-decoration { + -webkit-appearance: none; } + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; } + +details { + display: block; } + +summary { + display: list-item; } + +template { + display: none; } + +[hidden] { + display: none; } + +.foundation-mq { + font-family: "small=0em&medium=40em&large=64em&xlarge=75em&xxlarge=90em"; } + +html { + -webkit-box-sizing: border-box; + box-sizing: border-box; + font-size: 100%; } + +*, +*::before, +*::after { + -webkit-box-sizing: inherit; + box-sizing: inherit; } + +body { + margin: 0; + padding: 0; + background: #fefefe; + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-weight: normal; + line-height: 1.5; + color: #0a0a0a; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +img { + display: inline-block; + vertical-align: middle; + max-width: 100%; + height: auto; + -ms-interpolation-mode: bicubic; } + +textarea { + height: auto; + min-height: 50px; + border-radius: 0; } + +select { + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + border-radius: 0; } + +.map_canvas img, +.map_canvas embed, +.map_canvas object, +.mqa-display img, +.mqa-display embed, +.mqa-display object { + max-width: none !important; } + +button { + padding: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: 0; + border-radius: 0; + background: transparent; + line-height: 1; + cursor: auto; } + [data-whatinput='mouse'] button { + outline: 0; } + +pre { + overflow: auto; } + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; } + +.is-visible { + display: block !important; } + +.is-hidden { + display: none !important; } + +[type='text'], [type='password'], [type='date'], [type='datetime'], [type='datetime-local'], [type='month'], [type='week'], [type='email'], [type='number'], [type='search'], [type='tel'], [type='time'], [type='url'], [type='color'], +textarea { + display: block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + height: 2.4375rem; + margin: 0 0 1rem; + padding: 0.5rem; + border: 1px solid #cacaca; + border-radius: 0; + background-color: #fefefe; + -webkit-box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + font-family: inherit; + font-size: 1rem; + font-weight: normal; + line-height: 1.5; + color: #0a0a0a; + -webkit-transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; } + [type='text']:focus, [type='password']:focus, [type='date']:focus, [type='datetime']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='week']:focus, [type='email']:focus, [type='number']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='url']:focus, [type='color']:focus, + textarea:focus { + outline: none; + border: 1px solid #8a8a8a; + background-color: #fefefe; + -webkit-box-shadow: 0 0 5px #cacaca; + box-shadow: 0 0 5px #cacaca; + -webkit-transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; } + +textarea { + max-width: 100%; } + textarea[rows] { + height: auto; } + +input:disabled, input[readonly], +textarea:disabled, +textarea[readonly] { + background-color: #e6e6e6; + cursor: not-allowed; } + +[type='submit'], +[type='button'] { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0; } + +input[type='search'] { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +::-webkit-input-placeholder { + color: #cacaca; } + +::-moz-placeholder { + color: #cacaca; } + +:-ms-input-placeholder { + color: #cacaca; } + +::-ms-input-placeholder { + color: #cacaca; } + +::placeholder { + color: #cacaca; } + +[type='file'], +[type='checkbox'], +[type='radio'] { + margin: 0 0 1rem; } + +[type='checkbox'] + label, +[type='radio'] + label { + display: inline-block; + vertical-align: baseline; + margin-left: 0.5rem; + margin-right: 1rem; + margin-bottom: 0; } + [type='checkbox'] + label[for], + [type='radio'] + label[for] { + cursor: pointer; } + +label > [type='checkbox'], +label > [type='radio'] { + margin-right: 0.5rem; } + +[type='file'] { + width: 100%; } + +label { + display: block; + margin: 0; + font-size: 0.875rem; + font-weight: normal; + line-height: 1.8; + color: #0a0a0a; } + label.middle { + margin: 0 0 1rem; + line-height: 1.5; + padding: 0.5625rem 0; } + +.help-text { + margin-top: -0.5rem; + font-size: 0.8125rem; + font-style: italic; + color: #0a0a0a; } + +.input-group { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 100%; + margin-bottom: 1rem; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; } + .input-group > :first-child, .input-group > :first-child.input-group-button > * { + border-radius: 0 0 0 0; } + .input-group > :last-child, .input-group > :last-child.input-group-button > * { + border-radius: 0 0 0 0; } + +.input-group-label, .input-group-field, .input-group-button, .input-group-button a, +.input-group-button input, +.input-group-button button, +.input-group-button label { + margin: 0; + white-space: nowrap; } + +.input-group-label { + padding: 0 1rem; + border: 1px solid #cacaca; + background: #e6e6e6; + color: #0a0a0a; + text-align: center; + white-space: nowrap; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .input-group-label:first-child { + border-right: 0; } + .input-group-label:last-child { + border-left: 0; } + +.input-group-field { + border-radius: 0; + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; + min-width: 0; } + +.input-group-button { + padding-top: 0; + padding-bottom: 0; + text-align: center; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + .input-group-button a, + .input-group-button input, + .input-group-button button, + .input-group-button label { + -webkit-align-self: stretch; + -ms-flex-item-align: stretch; + align-self: stretch; + height: auto; + padding-top: 0; + padding-bottom: 0; + font-size: 1rem; } + +fieldset { + margin: 0; + padding: 0; + border: 0; } + +legend { + max-width: 100%; + margin-bottom: 0.5rem; } + +.fieldset { + margin: 1.125rem 0; + padding: 1.25rem; + border: 1px solid #cacaca; } + .fieldset legend { + margin: 0; + margin-left: -0.1875rem; + padding: 0 0.1875rem; } + +select { + height: 2.4375rem; + margin: 0 0 1rem; + padding: 0.5rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border: 1px solid #cacaca; + border-radius: 0; + background-color: #fefefe; + font-family: inherit; + font-size: 1rem; + font-weight: normal; + line-height: 1.5; + color: #0a0a0a; + background-image: url("data:image/svg+xml;utf8,"); + background-origin: content-box; + background-position: right -1rem center; + background-repeat: no-repeat; + background-size: 9px 6px; + padding-right: 1.5rem; + -webkit-transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; } + @media screen and (min-width: 0\0) { + select { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg=="); } } + select:focus { + outline: none; + border: 1px solid #8a8a8a; + background-color: #fefefe; + -webkit-box-shadow: 0 0 5px #cacaca; + box-shadow: 0 0 5px #cacaca; + -webkit-transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out; + transition: box-shadow 0.5s, border-color 0.25s ease-in-out, -webkit-box-shadow 0.5s; } + select:disabled { + background-color: #e6e6e6; + cursor: not-allowed; } + select::-ms-expand { + display: none; } + select[multiple] { + height: auto; + background-image: none; } + select:not([multiple]) { + padding-top: 0; + padding-bottom: 0; } + +.is-invalid-input:not(:focus) { + border-color: #cc4b37; + background-color: #f9ecea; } + .is-invalid-input:not(:focus)::-webkit-input-placeholder { + color: #cc4b37; } + .is-invalid-input:not(:focus)::-moz-placeholder { + color: #cc4b37; } + .is-invalid-input:not(:focus):-ms-input-placeholder { + color: #cc4b37; } + .is-invalid-input:not(:focus)::-ms-input-placeholder { + color: #cc4b37; } + .is-invalid-input:not(:focus)::placeholder { + color: #cc4b37; } + +.is-invalid-label { + color: #cc4b37; } + +.form-error { + display: none; + margin-top: -0.5rem; + margin-bottom: 1rem; + font-size: 0.75rem; + font-weight: bold; + color: #cc4b37; } + .form-error.is-visible { + display: block; } + +div, +dl, +dt, +dd, +ul, +ol, +li, +h1, +h2, +h3, +h4, +h5, +h6, +pre, +form, +p, +blockquote, +th, +td { + margin: 0; + padding: 0; } + +p { + margin-bottom: 1rem; + font-size: inherit; + line-height: 1.6; + text-rendering: optimizeLegibility; } + +em, +i { + font-style: italic; + line-height: inherit; } + +strong, +b { + font-weight: bold; + line-height: inherit; } + +small { + font-size: 80%; + line-height: inherit; } + +h1, .h1, +h2, .h2, +h3, .h3, +h4, .h4, +h5, .h5, +h6, .h6 { + font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-style: normal; + font-weight: normal; + color: inherit; + text-rendering: optimizeLegibility; } + h1 small, .h1 small, + h2 small, .h2 small, + h3 small, .h3 small, + h4 small, .h4 small, + h5 small, .h5 small, + h6 small, .h6 small { + line-height: 0; + color: #cacaca; } + +h1, .h1 { + font-size: 1.5rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } + +h2, .h2 { + font-size: 1.25rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } + +h3, .h3 { + font-size: 1.1875rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } + +h4, .h4 { + font-size: 1.125rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } + +h5, .h5 { + font-size: 1.0625rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } + +h6, .h6 { + font-size: 1rem; + line-height: 1.4; + margin-top: 0; + margin-bottom: 0.5rem; } + +@media print, screen and (min-width: 40em) { + h1, .h1 { + font-size: 3rem; } + h2, .h2 { + font-size: 2.5rem; } + h3, .h3 { + font-size: 1.9375rem; } + h4, .h4 { + font-size: 1.5625rem; } + h5, .h5 { + font-size: 1.25rem; } + h6, .h6 { + font-size: 1rem; } } + +a { + line-height: inherit; + color: #1779ba; + text-decoration: none; + cursor: pointer; } + a:hover, a:focus { + color: #1468a0; } + a img { + border: 0; } + +hr { + clear: both; + max-width: 75rem; + height: 0; + margin: 1.25rem auto; + border-top: 0; + border-right: 0; + border-bottom: 1px solid #cacaca; + border-left: 0; } + +ul, +ol, +dl { + margin-bottom: 1rem; + list-style-position: outside; + line-height: 1.6; } + +li { + font-size: inherit; } + +ul { + margin-left: 1.25rem; + list-style-type: disc; } + +ol { + margin-left: 1.25rem; } + +ul ul, ol ul, ul ol, ol ol { + margin-left: 1.25rem; + margin-bottom: 0; } + +dl { + margin-bottom: 1rem; } + dl dt { + margin-bottom: 0.3rem; + font-weight: bold; } + +blockquote { + margin: 0 0 1rem; + padding: 0.5625rem 1.25rem 0 1.1875rem; + border-left: 1px solid #cacaca; } + blockquote, blockquote p { + line-height: 1.6; + color: #8a8a8a; } + +abbr, abbr[title] { + border-bottom: 1px dotted #0a0a0a; + cursor: help; + text-decoration: none; } + +figure { + margin: 0; } + +kbd { + margin: 0; + padding: 0.125rem 0.25rem 0; + background-color: #e6e6e6; + font-family: Consolas, "Liberation Mono", Courier, monospace; + color: #0a0a0a; } + +.subheader { + margin-top: 0.2rem; + margin-bottom: 0.5rem; + font-weight: normal; + line-height: 1.4; + color: #8a8a8a; } + +.lead { + font-size: 125%; + line-height: 1.6; } + +.stat { + font-size: 2.5rem; + line-height: 1; } + p + .stat { + margin-top: -1rem; } + +ul.no-bullet, ol.no-bullet { + margin-left: 0; + list-style: none; } + +.cite-block, cite { + display: block; + color: #8a8a8a; + font-size: 0.8125rem; } + .cite-block:before, cite:before { + content: "— "; } + +.code-inline, code { + border: 1px solid #cacaca; + background-color: #e6e6e6; + font-family: Consolas, "Liberation Mono", Courier, monospace; + font-weight: normal; + color: #0a0a0a; + display: inline; + max-width: 100%; + word-wrap: break-word; + padding: 0.125rem 0.3125rem 0.0625rem; } + +.code-block { + border: 1px solid #cacaca; + background-color: #e6e6e6; + font-family: Consolas, "Liberation Mono", Courier, monospace; + font-weight: normal; + color: #0a0a0a; + display: block; + overflow: auto; + white-space: pre; + padding: 1rem; + margin-bottom: 1.5rem; } + +.text-left { + text-align: left; } + +.text-right { + text-align: right; } + +.text-center { + text-align: center; } + +.text-justify { + text-align: justify; } + +@media print, screen and (min-width: 40em) { + .medium-text-left { + text-align: left; } + .medium-text-right { + text-align: right; } + .medium-text-center { + text-align: center; } + .medium-text-justify { + text-align: justify; } } + +@media print, screen and (min-width: 64em) { + .large-text-left { + text-align: left; } + .large-text-right { + text-align: right; } + .large-text-center { + text-align: center; } + .large-text-justify { + text-align: justify; } } + +.show-for-print { + display: none !important; } + +@media print { + * { + background: transparent !important; + color: black !important; + -webkit-print-color-adjust: economy; + color-adjust: economy; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: none !important; } + .show-for-print { + display: block !important; } + .hide-for-print { + display: none !important; } + table.show-for-print { + display: table !important; } + thead.show-for-print { + display: table-header-group !important; } + tbody.show-for-print { + display: table-row-group !important; } + tr.show-for-print { + display: table-row !important; } + td.show-for-print { + display: table-cell !important; } + th.show-for-print { + display: table-cell !important; } + a, + a:visited { + text-decoration: underline; } + a[href]:after { + content: " (" attr(href) ")"; } + .ir a:after, + a[href^='javascript:']:after, + a[href^='#']:after { + content: ''; } + abbr[title]:after { + content: " (" attr(title) ")"; } + pre, + blockquote { + border: 1px solid #8a8a8a; + page-break-inside: avoid; } + thead { + display: table-header-group; } + tr, + img { + page-break-inside: avoid; } + img { + max-width: 100% !important; } + @page { + margin: 0.5cm; } + p, + h2, + h3 { + orphans: 3; + widows: 3; } + h2, + h3 { + page-break-after: avoid; } + .print-break-inside { + page-break-inside: auto; } } + +.grid-container { + padding-right: 0.625rem; + padding-left: 0.625rem; + max-width: 75rem; + margin-left: auto; + margin-right: auto; } + @media print, screen and (min-width: 40em) { + .grid-container { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + .grid-container.fluid { + padding-right: 0.625rem; + padding-left: 0.625rem; + max-width: 100%; + margin-left: auto; + margin-right: auto; } + @media print, screen and (min-width: 40em) { + .grid-container.fluid { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + .grid-container.full { + padding-right: 0; + padding-left: 0; + max-width: 100%; + margin-left: auto; + margin-right: auto; } + +.grid-x { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; } + +.cell { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + min-height: 0px; + min-width: 0px; + width: 100%; } + .cell.auto { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + .cell.shrink { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + +.grid-x > .auto { + width: auto; } + +.grid-x > .shrink { + width: auto; } + +.grid-x > .small-shrink, .grid-x > .small-full, .grid-x > .small-1, .grid-x > .small-2, .grid-x > .small-3, .grid-x > .small-4, .grid-x > .small-5, .grid-x > .small-6, .grid-x > .small-7, .grid-x > .small-8, .grid-x > .small-9, .grid-x > .small-10, .grid-x > .small-11, .grid-x > .small-12 { + -webkit-flex-basis: auto; + -ms-flex-preferred-size: auto; + flex-basis: auto; } + +@media print, screen and (min-width: 40em) { + .grid-x > .medium-shrink, .grid-x > .medium-full, .grid-x > .medium-1, .grid-x > .medium-2, .grid-x > .medium-3, .grid-x > .medium-4, .grid-x > .medium-5, .grid-x > .medium-6, .grid-x > .medium-7, .grid-x > .medium-8, .grid-x > .medium-9, .grid-x > .medium-10, .grid-x > .medium-11, .grid-x > .medium-12 { + -webkit-flex-basis: auto; + -ms-flex-preferred-size: auto; + flex-basis: auto; } } + +@media print, screen and (min-width: 64em) { + .grid-x > .large-shrink, .grid-x > .large-full, .grid-x > .large-1, .grid-x > .large-2, .grid-x > .large-3, .grid-x > .large-4, .grid-x > .large-5, .grid-x > .large-6, .grid-x > .large-7, .grid-x > .large-8, .grid-x > .large-9, .grid-x > .large-10, .grid-x > .large-11, .grid-x > .large-12 { + -webkit-flex-basis: auto; + -ms-flex-preferred-size: auto; + flex-basis: auto; } } + +.grid-x > .small-1, .grid-x > .small-2, .grid-x > .small-3, .grid-x > .small-4, .grid-x > .small-5, .grid-x > .small-6, .grid-x > .small-7, .grid-x > .small-8, .grid-x > .small-9, .grid-x > .small-10, .grid-x > .small-11, .grid-x > .small-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + +.grid-x > .small-1 { + width: 8.33333%; } + +.grid-x > .small-2 { + width: 16.66667%; } + +.grid-x > .small-3 { + width: 25%; } + +.grid-x > .small-4 { + width: 33.33333%; } + +.grid-x > .small-5 { + width: 41.66667%; } + +.grid-x > .small-6 { + width: 50%; } + +.grid-x > .small-7 { + width: 58.33333%; } + +.grid-x > .small-8 { + width: 66.66667%; } + +.grid-x > .small-9 { + width: 75%; } + +.grid-x > .small-10 { + width: 83.33333%; } + +.grid-x > .small-11 { + width: 91.66667%; } + +.grid-x > .small-12 { + width: 100%; } + +@media print, screen and (min-width: 40em) { + .grid-x > .medium-auto { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; + width: auto; } + .grid-x > .medium-shrink, .grid-x > .medium-1, .grid-x > .medium-2, .grid-x > .medium-3, .grid-x > .medium-4, .grid-x > .medium-5, .grid-x > .medium-6, .grid-x > .medium-7, .grid-x > .medium-8, .grid-x > .medium-9, .grid-x > .medium-10, .grid-x > .medium-11, .grid-x > .medium-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + .grid-x > .medium-shrink { + width: auto; } + .grid-x > .medium-1 { + width: 8.33333%; } + .grid-x > .medium-2 { + width: 16.66667%; } + .grid-x > .medium-3 { + width: 25%; } + .grid-x > .medium-4 { + width: 33.33333%; } + .grid-x > .medium-5 { + width: 41.66667%; } + .grid-x > .medium-6 { + width: 50%; } + .grid-x > .medium-7 { + width: 58.33333%; } + .grid-x > .medium-8 { + width: 66.66667%; } + .grid-x > .medium-9 { + width: 75%; } + .grid-x > .medium-10 { + width: 83.33333%; } + .grid-x > .medium-11 { + width: 91.66667%; } + .grid-x > .medium-12 { + width: 100%; } } + +@media print, screen and (min-width: 64em) { + .grid-x > .large-auto { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; + width: auto; } + .grid-x > .large-shrink, .grid-x > .large-1, .grid-x > .large-2, .grid-x > .large-3, .grid-x > .large-4, .grid-x > .large-5, .grid-x > .large-6, .grid-x > .large-7, .grid-x > .large-8, .grid-x > .large-9, .grid-x > .large-10, .grid-x > .large-11, .grid-x > .large-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + .grid-x > .large-shrink { + width: auto; } + .grid-x > .large-1 { + width: 8.33333%; } + .grid-x > .large-2 { + width: 16.66667%; } + .grid-x > .large-3 { + width: 25%; } + .grid-x > .large-4 { + width: 33.33333%; } + .grid-x > .large-5 { + width: 41.66667%; } + .grid-x > .large-6 { + width: 50%; } + .grid-x > .large-7 { + width: 58.33333%; } + .grid-x > .large-8 { + width: 66.66667%; } + .grid-x > .large-9 { + width: 75%; } + .grid-x > .large-10 { + width: 83.33333%; } + .grid-x > .large-11 { + width: 91.66667%; } + .grid-x > .large-12 { + width: 100%; } } + +.grid-margin-x:not(.grid-x) > .cell { + width: auto; } + +.grid-margin-y:not(.grid-y) > .cell { + height: auto; } + +.grid-margin-x { + margin-left: -0.625rem; + margin-right: -0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-margin-x { + margin-left: -0.9375rem; + margin-right: -0.9375rem; } } + .grid-margin-x > .cell { + width: calc(100% - 1.25rem); + margin-left: 0.625rem; + margin-right: 0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-margin-x > .cell { + width: calc(100% - 1.875rem); + margin-left: 0.9375rem; + margin-right: 0.9375rem; } } + .grid-margin-x > .auto { + width: auto; } + .grid-margin-x > .shrink { + width: auto; } + .grid-margin-x > .small-1 { + width: calc(8.33333% - 1.25rem); } + .grid-margin-x > .small-2 { + width: calc(16.66667% - 1.25rem); } + .grid-margin-x > .small-3 { + width: calc(25% - 1.25rem); } + .grid-margin-x > .small-4 { + width: calc(33.33333% - 1.25rem); } + .grid-margin-x > .small-5 { + width: calc(41.66667% - 1.25rem); } + .grid-margin-x > .small-6 { + width: calc(50% - 1.25rem); } + .grid-margin-x > .small-7 { + width: calc(58.33333% - 1.25rem); } + .grid-margin-x > .small-8 { + width: calc(66.66667% - 1.25rem); } + .grid-margin-x > .small-9 { + width: calc(75% - 1.25rem); } + .grid-margin-x > .small-10 { + width: calc(83.33333% - 1.25rem); } + .grid-margin-x > .small-11 { + width: calc(91.66667% - 1.25rem); } + .grid-margin-x > .small-12 { + width: calc(100% - 1.25rem); } + @media print, screen and (min-width: 40em) { + .grid-margin-x > .auto { + width: auto; } + .grid-margin-x > .shrink { + width: auto; } + .grid-margin-x > .small-1 { + width: calc(8.33333% - 1.875rem); } + .grid-margin-x > .small-2 { + width: calc(16.66667% - 1.875rem); } + .grid-margin-x > .small-3 { + width: calc(25% - 1.875rem); } + .grid-margin-x > .small-4 { + width: calc(33.33333% - 1.875rem); } + .grid-margin-x > .small-5 { + width: calc(41.66667% - 1.875rem); } + .grid-margin-x > .small-6 { + width: calc(50% - 1.875rem); } + .grid-margin-x > .small-7 { + width: calc(58.33333% - 1.875rem); } + .grid-margin-x > .small-8 { + width: calc(66.66667% - 1.875rem); } + .grid-margin-x > .small-9 { + width: calc(75% - 1.875rem); } + .grid-margin-x > .small-10 { + width: calc(83.33333% - 1.875rem); } + .grid-margin-x > .small-11 { + width: calc(91.66667% - 1.875rem); } + .grid-margin-x > .small-12 { + width: calc(100% - 1.875rem); } + .grid-margin-x > .medium-auto { + width: auto; } + .grid-margin-x > .medium-shrink { + width: auto; } + .grid-margin-x > .medium-1 { + width: calc(8.33333% - 1.875rem); } + .grid-margin-x > .medium-2 { + width: calc(16.66667% - 1.875rem); } + .grid-margin-x > .medium-3 { + width: calc(25% - 1.875rem); } + .grid-margin-x > .medium-4 { + width: calc(33.33333% - 1.875rem); } + .grid-margin-x > .medium-5 { + width: calc(41.66667% - 1.875rem); } + .grid-margin-x > .medium-6 { + width: calc(50% - 1.875rem); } + .grid-margin-x > .medium-7 { + width: calc(58.33333% - 1.875rem); } + .grid-margin-x > .medium-8 { + width: calc(66.66667% - 1.875rem); } + .grid-margin-x > .medium-9 { + width: calc(75% - 1.875rem); } + .grid-margin-x > .medium-10 { + width: calc(83.33333% - 1.875rem); } + .grid-margin-x > .medium-11 { + width: calc(91.66667% - 1.875rem); } + .grid-margin-x > .medium-12 { + width: calc(100% - 1.875rem); } } + @media print, screen and (min-width: 64em) { + .grid-margin-x > .large-auto { + width: auto; } + .grid-margin-x > .large-shrink { + width: auto; } + .grid-margin-x > .large-1 { + width: calc(8.33333% - 1.875rem); } + .grid-margin-x > .large-2 { + width: calc(16.66667% - 1.875rem); } + .grid-margin-x > .large-3 { + width: calc(25% - 1.875rem); } + .grid-margin-x > .large-4 { + width: calc(33.33333% - 1.875rem); } + .grid-margin-x > .large-5 { + width: calc(41.66667% - 1.875rem); } + .grid-margin-x > .large-6 { + width: calc(50% - 1.875rem); } + .grid-margin-x > .large-7 { + width: calc(58.33333% - 1.875rem); } + .grid-margin-x > .large-8 { + width: calc(66.66667% - 1.875rem); } + .grid-margin-x > .large-9 { + width: calc(75% - 1.875rem); } + .grid-margin-x > .large-10 { + width: calc(83.33333% - 1.875rem); } + .grid-margin-x > .large-11 { + width: calc(91.66667% - 1.875rem); } + .grid-margin-x > .large-12 { + width: calc(100% - 1.875rem); } } + +.grid-padding-x .grid-padding-x { + margin-right: -0.625rem; + margin-left: -0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-padding-x .grid-padding-x { + margin-right: -0.9375rem; + margin-left: -0.9375rem; } } + +.grid-container:not(.full) > .grid-padding-x { + margin-right: -0.625rem; + margin-left: -0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-container:not(.full) > .grid-padding-x { + margin-right: -0.9375rem; + margin-left: -0.9375rem; } } + +.grid-padding-x > .cell { + padding-right: 0.625rem; + padding-left: 0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-padding-x > .cell { + padding-right: 0.9375rem; + padding-left: 0.9375rem; } } + +.small-up-1 > .cell { + width: 100%; } + +.small-up-2 > .cell { + width: 50%; } + +.small-up-3 > .cell { + width: 33.33333%; } + +.small-up-4 > .cell { + width: 25%; } + +.small-up-5 > .cell { + width: 20%; } + +.small-up-6 > .cell { + width: 16.66667%; } + +.small-up-7 > .cell { + width: 14.28571%; } + +.small-up-8 > .cell { + width: 12.5%; } + +@media print, screen and (min-width: 40em) { + .medium-up-1 > .cell { + width: 100%; } + .medium-up-2 > .cell { + width: 50%; } + .medium-up-3 > .cell { + width: 33.33333%; } + .medium-up-4 > .cell { + width: 25%; } + .medium-up-5 > .cell { + width: 20%; } + .medium-up-6 > .cell { + width: 16.66667%; } + .medium-up-7 > .cell { + width: 14.28571%; } + .medium-up-8 > .cell { + width: 12.5%; } } + +@media print, screen and (min-width: 64em) { + .large-up-1 > .cell { + width: 100%; } + .large-up-2 > .cell { + width: 50%; } + .large-up-3 > .cell { + width: 33.33333%; } + .large-up-4 > .cell { + width: 25%; } + .large-up-5 > .cell { + width: 20%; } + .large-up-6 > .cell { + width: 16.66667%; } + .large-up-7 > .cell { + width: 14.28571%; } + .large-up-8 > .cell { + width: 12.5%; } } + +.grid-margin-x.small-up-1 > .cell { + width: calc(100% - 1.25rem); } + +.grid-margin-x.small-up-2 > .cell { + width: calc(50% - 1.25rem); } + +.grid-margin-x.small-up-3 > .cell { + width: calc(33.33333% - 1.25rem); } + +.grid-margin-x.small-up-4 > .cell { + width: calc(25% - 1.25rem); } + +.grid-margin-x.small-up-5 > .cell { + width: calc(20% - 1.25rem); } + +.grid-margin-x.small-up-6 > .cell { + width: calc(16.66667% - 1.25rem); } + +.grid-margin-x.small-up-7 > .cell { + width: calc(14.28571% - 1.25rem); } + +.grid-margin-x.small-up-8 > .cell { + width: calc(12.5% - 1.25rem); } + +@media print, screen and (min-width: 40em) { + .grid-margin-x.small-up-1 > .cell { + width: calc(100% - 1.875rem); } + .grid-margin-x.small-up-2 > .cell { + width: calc(50% - 1.875rem); } + .grid-margin-x.small-up-3 > .cell { + width: calc(33.33333% - 1.875rem); } + .grid-margin-x.small-up-4 > .cell { + width: calc(25% - 1.875rem); } + .grid-margin-x.small-up-5 > .cell { + width: calc(20% - 1.875rem); } + .grid-margin-x.small-up-6 > .cell { + width: calc(16.66667% - 1.875rem); } + .grid-margin-x.small-up-7 > .cell { + width: calc(14.28571% - 1.875rem); } + .grid-margin-x.small-up-8 > .cell { + width: calc(12.5% - 1.875rem); } + .grid-margin-x.medium-up-1 > .cell { + width: calc(100% - 1.875rem); } + .grid-margin-x.medium-up-2 > .cell { + width: calc(50% - 1.875rem); } + .grid-margin-x.medium-up-3 > .cell { + width: calc(33.33333% - 1.875rem); } + .grid-margin-x.medium-up-4 > .cell { + width: calc(25% - 1.875rem); } + .grid-margin-x.medium-up-5 > .cell { + width: calc(20% - 1.875rem); } + .grid-margin-x.medium-up-6 > .cell { + width: calc(16.66667% - 1.875rem); } + .grid-margin-x.medium-up-7 > .cell { + width: calc(14.28571% - 1.875rem); } + .grid-margin-x.medium-up-8 > .cell { + width: calc(12.5% - 1.875rem); } } + +@media print, screen and (min-width: 64em) { + .grid-margin-x.large-up-1 > .cell { + width: calc(100% - 1.875rem); } + .grid-margin-x.large-up-2 > .cell { + width: calc(50% - 1.875rem); } + .grid-margin-x.large-up-3 > .cell { + width: calc(33.33333% - 1.875rem); } + .grid-margin-x.large-up-4 > .cell { + width: calc(25% - 1.875rem); } + .grid-margin-x.large-up-5 > .cell { + width: calc(20% - 1.875rem); } + .grid-margin-x.large-up-6 > .cell { + width: calc(16.66667% - 1.875rem); } + .grid-margin-x.large-up-7 > .cell { + width: calc(14.28571% - 1.875rem); } + .grid-margin-x.large-up-8 > .cell { + width: calc(12.5% - 1.875rem); } } + +.small-margin-collapse { + margin-right: 0; + margin-left: 0; } + .small-margin-collapse > .cell { + margin-right: 0; + margin-left: 0; } + .small-margin-collapse > .small-1 { + width: 8.33333%; } + .small-margin-collapse > .small-2 { + width: 16.66667%; } + .small-margin-collapse > .small-3 { + width: 25%; } + .small-margin-collapse > .small-4 { + width: 33.33333%; } + .small-margin-collapse > .small-5 { + width: 41.66667%; } + .small-margin-collapse > .small-6 { + width: 50%; } + .small-margin-collapse > .small-7 { + width: 58.33333%; } + .small-margin-collapse > .small-8 { + width: 66.66667%; } + .small-margin-collapse > .small-9 { + width: 75%; } + .small-margin-collapse > .small-10 { + width: 83.33333%; } + .small-margin-collapse > .small-11 { + width: 91.66667%; } + .small-margin-collapse > .small-12 { + width: 100%; } + @media print, screen and (min-width: 40em) { + .small-margin-collapse > .medium-1 { + width: 8.33333%; } + .small-margin-collapse > .medium-2 { + width: 16.66667%; } + .small-margin-collapse > .medium-3 { + width: 25%; } + .small-margin-collapse > .medium-4 { + width: 33.33333%; } + .small-margin-collapse > .medium-5 { + width: 41.66667%; } + .small-margin-collapse > .medium-6 { + width: 50%; } + .small-margin-collapse > .medium-7 { + width: 58.33333%; } + .small-margin-collapse > .medium-8 { + width: 66.66667%; } + .small-margin-collapse > .medium-9 { + width: 75%; } + .small-margin-collapse > .medium-10 { + width: 83.33333%; } + .small-margin-collapse > .medium-11 { + width: 91.66667%; } + .small-margin-collapse > .medium-12 { + width: 100%; } } + @media print, screen and (min-width: 64em) { + .small-margin-collapse > .large-1 { + width: 8.33333%; } + .small-margin-collapse > .large-2 { + width: 16.66667%; } + .small-margin-collapse > .large-3 { + width: 25%; } + .small-margin-collapse > .large-4 { + width: 33.33333%; } + .small-margin-collapse > .large-5 { + width: 41.66667%; } + .small-margin-collapse > .large-6 { + width: 50%; } + .small-margin-collapse > .large-7 { + width: 58.33333%; } + .small-margin-collapse > .large-8 { + width: 66.66667%; } + .small-margin-collapse > .large-9 { + width: 75%; } + .small-margin-collapse > .large-10 { + width: 83.33333%; } + .small-margin-collapse > .large-11 { + width: 91.66667%; } + .small-margin-collapse > .large-12 { + width: 100%; } } + +.small-padding-collapse { + margin-right: 0; + margin-left: 0; } + .small-padding-collapse > .cell { + padding-right: 0; + padding-left: 0; } + +@media print, screen and (min-width: 40em) { + .medium-margin-collapse { + margin-right: 0; + margin-left: 0; } + .medium-margin-collapse > .cell { + margin-right: 0; + margin-left: 0; } } + +@media print, screen and (min-width: 40em) { + .medium-margin-collapse > .small-1 { + width: 8.33333%; } + .medium-margin-collapse > .small-2 { + width: 16.66667%; } + .medium-margin-collapse > .small-3 { + width: 25%; } + .medium-margin-collapse > .small-4 { + width: 33.33333%; } + .medium-margin-collapse > .small-5 { + width: 41.66667%; } + .medium-margin-collapse > .small-6 { + width: 50%; } + .medium-margin-collapse > .small-7 { + width: 58.33333%; } + .medium-margin-collapse > .small-8 { + width: 66.66667%; } + .medium-margin-collapse > .small-9 { + width: 75%; } + .medium-margin-collapse > .small-10 { + width: 83.33333%; } + .medium-margin-collapse > .small-11 { + width: 91.66667%; } + .medium-margin-collapse > .small-12 { + width: 100%; } } + +@media print, screen and (min-width: 40em) { + .medium-margin-collapse > .medium-1 { + width: 8.33333%; } + .medium-margin-collapse > .medium-2 { + width: 16.66667%; } + .medium-margin-collapse > .medium-3 { + width: 25%; } + .medium-margin-collapse > .medium-4 { + width: 33.33333%; } + .medium-margin-collapse > .medium-5 { + width: 41.66667%; } + .medium-margin-collapse > .medium-6 { + width: 50%; } + .medium-margin-collapse > .medium-7 { + width: 58.33333%; } + .medium-margin-collapse > .medium-8 { + width: 66.66667%; } + .medium-margin-collapse > .medium-9 { + width: 75%; } + .medium-margin-collapse > .medium-10 { + width: 83.33333%; } + .medium-margin-collapse > .medium-11 { + width: 91.66667%; } + .medium-margin-collapse > .medium-12 { + width: 100%; } } + +@media print, screen and (min-width: 64em) { + .medium-margin-collapse > .large-1 { + width: 8.33333%; } + .medium-margin-collapse > .large-2 { + width: 16.66667%; } + .medium-margin-collapse > .large-3 { + width: 25%; } + .medium-margin-collapse > .large-4 { + width: 33.33333%; } + .medium-margin-collapse > .large-5 { + width: 41.66667%; } + .medium-margin-collapse > .large-6 { + width: 50%; } + .medium-margin-collapse > .large-7 { + width: 58.33333%; } + .medium-margin-collapse > .large-8 { + width: 66.66667%; } + .medium-margin-collapse > .large-9 { + width: 75%; } + .medium-margin-collapse > .large-10 { + width: 83.33333%; } + .medium-margin-collapse > .large-11 { + width: 91.66667%; } + .medium-margin-collapse > .large-12 { + width: 100%; } } + +@media print, screen and (min-width: 40em) { + .medium-padding-collapse { + margin-right: 0; + margin-left: 0; } + .medium-padding-collapse > .cell { + padding-right: 0; + padding-left: 0; } } + +@media print, screen and (min-width: 64em) { + .large-margin-collapse { + margin-right: 0; + margin-left: 0; } + .large-margin-collapse > .cell { + margin-right: 0; + margin-left: 0; } } + +@media print, screen and (min-width: 64em) { + .large-margin-collapse > .small-1 { + width: 8.33333%; } + .large-margin-collapse > .small-2 { + width: 16.66667%; } + .large-margin-collapse > .small-3 { + width: 25%; } + .large-margin-collapse > .small-4 { + width: 33.33333%; } + .large-margin-collapse > .small-5 { + width: 41.66667%; } + .large-margin-collapse > .small-6 { + width: 50%; } + .large-margin-collapse > .small-7 { + width: 58.33333%; } + .large-margin-collapse > .small-8 { + width: 66.66667%; } + .large-margin-collapse > .small-9 { + width: 75%; } + .large-margin-collapse > .small-10 { + width: 83.33333%; } + .large-margin-collapse > .small-11 { + width: 91.66667%; } + .large-margin-collapse > .small-12 { + width: 100%; } } + +@media print, screen and (min-width: 64em) { + .large-margin-collapse > .medium-1 { + width: 8.33333%; } + .large-margin-collapse > .medium-2 { + width: 16.66667%; } + .large-margin-collapse > .medium-3 { + width: 25%; } + .large-margin-collapse > .medium-4 { + width: 33.33333%; } + .large-margin-collapse > .medium-5 { + width: 41.66667%; } + .large-margin-collapse > .medium-6 { + width: 50%; } + .large-margin-collapse > .medium-7 { + width: 58.33333%; } + .large-margin-collapse > .medium-8 { + width: 66.66667%; } + .large-margin-collapse > .medium-9 { + width: 75%; } + .large-margin-collapse > .medium-10 { + width: 83.33333%; } + .large-margin-collapse > .medium-11 { + width: 91.66667%; } + .large-margin-collapse > .medium-12 { + width: 100%; } } + +@media print, screen and (min-width: 64em) { + .large-margin-collapse > .large-1 { + width: 8.33333%; } + .large-margin-collapse > .large-2 { + width: 16.66667%; } + .large-margin-collapse > .large-3 { + width: 25%; } + .large-margin-collapse > .large-4 { + width: 33.33333%; } + .large-margin-collapse > .large-5 { + width: 41.66667%; } + .large-margin-collapse > .large-6 { + width: 50%; } + .large-margin-collapse > .large-7 { + width: 58.33333%; } + .large-margin-collapse > .large-8 { + width: 66.66667%; } + .large-margin-collapse > .large-9 { + width: 75%; } + .large-margin-collapse > .large-10 { + width: 83.33333%; } + .large-margin-collapse > .large-11 { + width: 91.66667%; } + .large-margin-collapse > .large-12 { + width: 100%; } } + +@media print, screen and (min-width: 64em) { + .large-padding-collapse { + margin-right: 0; + margin-left: 0; } + .large-padding-collapse > .cell { + padding-right: 0; + padding-left: 0; } } + +.small-offset-0 { + margin-left: 0%; } + +.grid-margin-x > .small-offset-0 { + margin-left: calc(0% + 1.25rem / 2); } + +.small-offset-1 { + margin-left: 8.33333%; } + +.grid-margin-x > .small-offset-1 { + margin-left: calc(8.33333% + 1.25rem / 2); } + +.small-offset-2 { + margin-left: 16.66667%; } + +.grid-margin-x > .small-offset-2 { + margin-left: calc(16.66667% + 1.25rem / 2); } + +.small-offset-3 { + margin-left: 25%; } + +.grid-margin-x > .small-offset-3 { + margin-left: calc(25% + 1.25rem / 2); } + +.small-offset-4 { + margin-left: 33.33333%; } + +.grid-margin-x > .small-offset-4 { + margin-left: calc(33.33333% + 1.25rem / 2); } + +.small-offset-5 { + margin-left: 41.66667%; } + +.grid-margin-x > .small-offset-5 { + margin-left: calc(41.66667% + 1.25rem / 2); } + +.small-offset-6 { + margin-left: 50%; } + +.grid-margin-x > .small-offset-6 { + margin-left: calc(50% + 1.25rem / 2); } + +.small-offset-7 { + margin-left: 58.33333%; } + +.grid-margin-x > .small-offset-7 { + margin-left: calc(58.33333% + 1.25rem / 2); } + +.small-offset-8 { + margin-left: 66.66667%; } + +.grid-margin-x > .small-offset-8 { + margin-left: calc(66.66667% + 1.25rem / 2); } + +.small-offset-9 { + margin-left: 75%; } + +.grid-margin-x > .small-offset-9 { + margin-left: calc(75% + 1.25rem / 2); } + +.small-offset-10 { + margin-left: 83.33333%; } + +.grid-margin-x > .small-offset-10 { + margin-left: calc(83.33333% + 1.25rem / 2); } + +.small-offset-11 { + margin-left: 91.66667%; } + +.grid-margin-x > .small-offset-11 { + margin-left: calc(91.66667% + 1.25rem / 2); } + +@media print, screen and (min-width: 40em) { + .medium-offset-0 { + margin-left: 0%; } + .grid-margin-x > .medium-offset-0 { + margin-left: calc(0% + 1.875rem / 2); } + .medium-offset-1 { + margin-left: 8.33333%; } + .grid-margin-x > .medium-offset-1 { + margin-left: calc(8.33333% + 1.875rem / 2); } + .medium-offset-2 { + margin-left: 16.66667%; } + .grid-margin-x > .medium-offset-2 { + margin-left: calc(16.66667% + 1.875rem / 2); } + .medium-offset-3 { + margin-left: 25%; } + .grid-margin-x > .medium-offset-3 { + margin-left: calc(25% + 1.875rem / 2); } + .medium-offset-4 { + margin-left: 33.33333%; } + .grid-margin-x > .medium-offset-4 { + margin-left: calc(33.33333% + 1.875rem / 2); } + .medium-offset-5 { + margin-left: 41.66667%; } + .grid-margin-x > .medium-offset-5 { + margin-left: calc(41.66667% + 1.875rem / 2); } + .medium-offset-6 { + margin-left: 50%; } + .grid-margin-x > .medium-offset-6 { + margin-left: calc(50% + 1.875rem / 2); } + .medium-offset-7 { + margin-left: 58.33333%; } + .grid-margin-x > .medium-offset-7 { + margin-left: calc(58.33333% + 1.875rem / 2); } + .medium-offset-8 { + margin-left: 66.66667%; } + .grid-margin-x > .medium-offset-8 { + margin-left: calc(66.66667% + 1.875rem / 2); } + .medium-offset-9 { + margin-left: 75%; } + .grid-margin-x > .medium-offset-9 { + margin-left: calc(75% + 1.875rem / 2); } + .medium-offset-10 { + margin-left: 83.33333%; } + .grid-margin-x > .medium-offset-10 { + margin-left: calc(83.33333% + 1.875rem / 2); } + .medium-offset-11 { + margin-left: 91.66667%; } + .grid-margin-x > .medium-offset-11 { + margin-left: calc(91.66667% + 1.875rem / 2); } } + +@media print, screen and (min-width: 64em) { + .large-offset-0 { + margin-left: 0%; } + .grid-margin-x > .large-offset-0 { + margin-left: calc(0% + 1.875rem / 2); } + .large-offset-1 { + margin-left: 8.33333%; } + .grid-margin-x > .large-offset-1 { + margin-left: calc(8.33333% + 1.875rem / 2); } + .large-offset-2 { + margin-left: 16.66667%; } + .grid-margin-x > .large-offset-2 { + margin-left: calc(16.66667% + 1.875rem / 2); } + .large-offset-3 { + margin-left: 25%; } + .grid-margin-x > .large-offset-3 { + margin-left: calc(25% + 1.875rem / 2); } + .large-offset-4 { + margin-left: 33.33333%; } + .grid-margin-x > .large-offset-4 { + margin-left: calc(33.33333% + 1.875rem / 2); } + .large-offset-5 { + margin-left: 41.66667%; } + .grid-margin-x > .large-offset-5 { + margin-left: calc(41.66667% + 1.875rem / 2); } + .large-offset-6 { + margin-left: 50%; } + .grid-margin-x > .large-offset-6 { + margin-left: calc(50% + 1.875rem / 2); } + .large-offset-7 { + margin-left: 58.33333%; } + .grid-margin-x > .large-offset-7 { + margin-left: calc(58.33333% + 1.875rem / 2); } + .large-offset-8 { + margin-left: 66.66667%; } + .grid-margin-x > .large-offset-8 { + margin-left: calc(66.66667% + 1.875rem / 2); } + .large-offset-9 { + margin-left: 75%; } + .grid-margin-x > .large-offset-9 { + margin-left: calc(75% + 1.875rem / 2); } + .large-offset-10 { + margin-left: 83.33333%; } + .grid-margin-x > .large-offset-10 { + margin-left: calc(83.33333% + 1.875rem / 2); } + .large-offset-11 { + margin-left: 91.66667%; } + .grid-margin-x > .large-offset-11 { + margin-left: calc(91.66667% + 1.875rem / 2); } } + +.grid-y { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-flow: column nowrap; + -ms-flex-flow: column nowrap; + flex-flow: column nowrap; } + .grid-y > .cell { + height: auto; + max-height: none; } + .grid-y > .auto { + height: auto; } + .grid-y > .shrink { + height: auto; } + .grid-y > .small-shrink, .grid-y > .small-full, .grid-y > .small-1, .grid-y > .small-2, .grid-y > .small-3, .grid-y > .small-4, .grid-y > .small-5, .grid-y > .small-6, .grid-y > .small-7, .grid-y > .small-8, .grid-y > .small-9, .grid-y > .small-10, .grid-y > .small-11, .grid-y > .small-12 { + -webkit-flex-basis: auto; + -ms-flex-preferred-size: auto; + flex-basis: auto; } + @media print, screen and (min-width: 40em) { + .grid-y > .medium-shrink, .grid-y > .medium-full, .grid-y > .medium-1, .grid-y > .medium-2, .grid-y > .medium-3, .grid-y > .medium-4, .grid-y > .medium-5, .grid-y > .medium-6, .grid-y > .medium-7, .grid-y > .medium-8, .grid-y > .medium-9, .grid-y > .medium-10, .grid-y > .medium-11, .grid-y > .medium-12 { + -webkit-flex-basis: auto; + -ms-flex-preferred-size: auto; + flex-basis: auto; } } + @media print, screen and (min-width: 64em) { + .grid-y > .large-shrink, .grid-y > .large-full, .grid-y > .large-1, .grid-y > .large-2, .grid-y > .large-3, .grid-y > .large-4, .grid-y > .large-5, .grid-y > .large-6, .grid-y > .large-7, .grid-y > .large-8, .grid-y > .large-9, .grid-y > .large-10, .grid-y > .large-11, .grid-y > .large-12 { + -webkit-flex-basis: auto; + -ms-flex-preferred-size: auto; + flex-basis: auto; } } + .grid-y > .small-1, .grid-y > .small-2, .grid-y > .small-3, .grid-y > .small-4, .grid-y > .small-5, .grid-y > .small-6, .grid-y > .small-7, .grid-y > .small-8, .grid-y > .small-9, .grid-y > .small-10, .grid-y > .small-11, .grid-y > .small-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + .grid-y > .small-1 { + height: 8.33333%; } + .grid-y > .small-2 { + height: 16.66667%; } + .grid-y > .small-3 { + height: 25%; } + .grid-y > .small-4 { + height: 33.33333%; } + .grid-y > .small-5 { + height: 41.66667%; } + .grid-y > .small-6 { + height: 50%; } + .grid-y > .small-7 { + height: 58.33333%; } + .grid-y > .small-8 { + height: 66.66667%; } + .grid-y > .small-9 { + height: 75%; } + .grid-y > .small-10 { + height: 83.33333%; } + .grid-y > .small-11 { + height: 91.66667%; } + .grid-y > .small-12 { + height: 100%; } + @media print, screen and (min-width: 40em) { + .grid-y > .medium-auto { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; + height: auto; } + .grid-y > .medium-shrink, .grid-y > .medium-1, .grid-y > .medium-2, .grid-y > .medium-3, .grid-y > .medium-4, .grid-y > .medium-5, .grid-y > .medium-6, .grid-y > .medium-7, .grid-y > .medium-8, .grid-y > .medium-9, .grid-y > .medium-10, .grid-y > .medium-11, .grid-y > .medium-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + .grid-y > .medium-shrink { + height: auto; } + .grid-y > .medium-1 { + height: 8.33333%; } + .grid-y > .medium-2 { + height: 16.66667%; } + .grid-y > .medium-3 { + height: 25%; } + .grid-y > .medium-4 { + height: 33.33333%; } + .grid-y > .medium-5 { + height: 41.66667%; } + .grid-y > .medium-6 { + height: 50%; } + .grid-y > .medium-7 { + height: 58.33333%; } + .grid-y > .medium-8 { + height: 66.66667%; } + .grid-y > .medium-9 { + height: 75%; } + .grid-y > .medium-10 { + height: 83.33333%; } + .grid-y > .medium-11 { + height: 91.66667%; } + .grid-y > .medium-12 { + height: 100%; } } + @media print, screen and (min-width: 64em) { + .grid-y > .large-auto { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; + height: auto; } + .grid-y > .large-shrink, .grid-y > .large-1, .grid-y > .large-2, .grid-y > .large-3, .grid-y > .large-4, .grid-y > .large-5, .grid-y > .large-6, .grid-y > .large-7, .grid-y > .large-8, .grid-y > .large-9, .grid-y > .large-10, .grid-y > .large-11, .grid-y > .large-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + .grid-y > .large-shrink { + height: auto; } + .grid-y > .large-1 { + height: 8.33333%; } + .grid-y > .large-2 { + height: 16.66667%; } + .grid-y > .large-3 { + height: 25%; } + .grid-y > .large-4 { + height: 33.33333%; } + .grid-y > .large-5 { + height: 41.66667%; } + .grid-y > .large-6 { + height: 50%; } + .grid-y > .large-7 { + height: 58.33333%; } + .grid-y > .large-8 { + height: 66.66667%; } + .grid-y > .large-9 { + height: 75%; } + .grid-y > .large-10 { + height: 83.33333%; } + .grid-y > .large-11 { + height: 91.66667%; } + .grid-y > .large-12 { + height: 100%; } } + +.grid-padding-y .grid-padding-y { + margin-top: -0.625rem; + margin-bottom: -0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-padding-y .grid-padding-y { + margin-top: -0.9375rem; + margin-bottom: -0.9375rem; } } + +.grid-padding-y > .cell { + padding-top: 0.625rem; + padding-bottom: 0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-padding-y > .cell { + padding-top: 0.9375rem; + padding-bottom: 0.9375rem; } } + +.grid-margin-y { + margin-top: -0.625rem; + margin-bottom: -0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-margin-y { + margin-top: -0.9375rem; + margin-bottom: -0.9375rem; } } + .grid-margin-y > .cell { + height: calc(100% - 1.25rem); + margin-top: 0.625rem; + margin-bottom: 0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-margin-y > .cell { + height: calc(100% - 1.875rem); + margin-top: 0.9375rem; + margin-bottom: 0.9375rem; } } + .grid-margin-y > .auto { + height: auto; } + .grid-margin-y > .shrink { + height: auto; } + .grid-margin-y > .small-1 { + height: calc(8.33333% - 1.25rem); } + .grid-margin-y > .small-2 { + height: calc(16.66667% - 1.25rem); } + .grid-margin-y > .small-3 { + height: calc(25% - 1.25rem); } + .grid-margin-y > .small-4 { + height: calc(33.33333% - 1.25rem); } + .grid-margin-y > .small-5 { + height: calc(41.66667% - 1.25rem); } + .grid-margin-y > .small-6 { + height: calc(50% - 1.25rem); } + .grid-margin-y > .small-7 { + height: calc(58.33333% - 1.25rem); } + .grid-margin-y > .small-8 { + height: calc(66.66667% - 1.25rem); } + .grid-margin-y > .small-9 { + height: calc(75% - 1.25rem); } + .grid-margin-y > .small-10 { + height: calc(83.33333% - 1.25rem); } + .grid-margin-y > .small-11 { + height: calc(91.66667% - 1.25rem); } + .grid-margin-y > .small-12 { + height: calc(100% - 1.25rem); } + @media print, screen and (min-width: 40em) { + .grid-margin-y > .auto { + height: auto; } + .grid-margin-y > .shrink { + height: auto; } + .grid-margin-y > .small-1 { + height: calc(8.33333% - 1.875rem); } + .grid-margin-y > .small-2 { + height: calc(16.66667% - 1.875rem); } + .grid-margin-y > .small-3 { + height: calc(25% - 1.875rem); } + .grid-margin-y > .small-4 { + height: calc(33.33333% - 1.875rem); } + .grid-margin-y > .small-5 { + height: calc(41.66667% - 1.875rem); } + .grid-margin-y > .small-6 { + height: calc(50% - 1.875rem); } + .grid-margin-y > .small-7 { + height: calc(58.33333% - 1.875rem); } + .grid-margin-y > .small-8 { + height: calc(66.66667% - 1.875rem); } + .grid-margin-y > .small-9 { + height: calc(75% - 1.875rem); } + .grid-margin-y > .small-10 { + height: calc(83.33333% - 1.875rem); } + .grid-margin-y > .small-11 { + height: calc(91.66667% - 1.875rem); } + .grid-margin-y > .small-12 { + height: calc(100% - 1.875rem); } + .grid-margin-y > .medium-auto { + height: auto; } + .grid-margin-y > .medium-shrink { + height: auto; } + .grid-margin-y > .medium-1 { + height: calc(8.33333% - 1.875rem); } + .grid-margin-y > .medium-2 { + height: calc(16.66667% - 1.875rem); } + .grid-margin-y > .medium-3 { + height: calc(25% - 1.875rem); } + .grid-margin-y > .medium-4 { + height: calc(33.33333% - 1.875rem); } + .grid-margin-y > .medium-5 { + height: calc(41.66667% - 1.875rem); } + .grid-margin-y > .medium-6 { + height: calc(50% - 1.875rem); } + .grid-margin-y > .medium-7 { + height: calc(58.33333% - 1.875rem); } + .grid-margin-y > .medium-8 { + height: calc(66.66667% - 1.875rem); } + .grid-margin-y > .medium-9 { + height: calc(75% - 1.875rem); } + .grid-margin-y > .medium-10 { + height: calc(83.33333% - 1.875rem); } + .grid-margin-y > .medium-11 { + height: calc(91.66667% - 1.875rem); } + .grid-margin-y > .medium-12 { + height: calc(100% - 1.875rem); } } + @media print, screen and (min-width: 64em) { + .grid-margin-y > .large-auto { + height: auto; } + .grid-margin-y > .large-shrink { + height: auto; } + .grid-margin-y > .large-1 { + height: calc(8.33333% - 1.875rem); } + .grid-margin-y > .large-2 { + height: calc(16.66667% - 1.875rem); } + .grid-margin-y > .large-3 { + height: calc(25% - 1.875rem); } + .grid-margin-y > .large-4 { + height: calc(33.33333% - 1.875rem); } + .grid-margin-y > .large-5 { + height: calc(41.66667% - 1.875rem); } + .grid-margin-y > .large-6 { + height: calc(50% - 1.875rem); } + .grid-margin-y > .large-7 { + height: calc(58.33333% - 1.875rem); } + .grid-margin-y > .large-8 { + height: calc(66.66667% - 1.875rem); } + .grid-margin-y > .large-9 { + height: calc(75% - 1.875rem); } + .grid-margin-y > .large-10 { + height: calc(83.33333% - 1.875rem); } + .grid-margin-y > .large-11 { + height: calc(91.66667% - 1.875rem); } + .grid-margin-y > .large-12 { + height: calc(100% - 1.875rem); } } + +.grid-frame { + overflow: hidden; + position: relative; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + width: 100vw; } + +.cell .grid-frame { + width: 100%; } + +.cell-block { + overflow-x: auto; + max-width: 100%; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + +.cell-block-y { + overflow-y: auto; + max-height: 100%; + min-height: 100%; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + +.cell-block-container { + 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; + max-height: 100%; } + .cell-block-container > .grid-x { + max-height: 100%; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + +@media print, screen and (min-width: 40em) { + .medium-grid-frame { + overflow: hidden; + position: relative; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + width: 100vw; } + .cell .medium-grid-frame { + width: 100%; } + .medium-cell-block { + overflow-x: auto; + max-width: 100%; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + .medium-cell-block-container { + 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; + max-height: 100%; } + .medium-cell-block-container > .grid-x { + max-height: 100%; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .medium-cell-block-y { + overflow-y: auto; + max-height: 100%; + min-height: 100%; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } } + +@media print, screen and (min-width: 64em) { + .large-grid-frame { + overflow: hidden; + position: relative; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + width: 100vw; } + .cell .large-grid-frame { + width: 100%; } + .large-cell-block { + overflow-x: auto; + max-width: 100%; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + .large-cell-block-container { + 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; + max-height: 100%; } + .large-cell-block-container > .grid-x { + max-height: 100%; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .large-cell-block-y { + overflow-y: auto; + max-height: 100%; + min-height: 100%; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } } + +.grid-y.grid-frame { + width: auto; + overflow: hidden; + position: relative; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + height: 100vh; } + +@media print, screen and (min-width: 40em) { + .grid-y.medium-grid-frame { + width: auto; + overflow: hidden; + position: relative; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + height: 100vh; } } + +@media print, screen and (min-width: 64em) { + .grid-y.large-grid-frame { + width: auto; + overflow: hidden; + position: relative; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + height: 100vh; } } + +.cell .grid-y.grid-frame { + height: 100%; } + +@media print, screen and (min-width: 40em) { + .cell .grid-y.medium-grid-frame { + height: 100%; } } + +@media print, screen and (min-width: 64em) { + .cell .grid-y.large-grid-frame { + height: 100%; } } + +.grid-margin-y { + margin-top: -0.625rem; + margin-bottom: -0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-margin-y { + margin-top: -0.9375rem; + margin-bottom: -0.9375rem; } } + .grid-margin-y > .cell { + height: calc(100% - 1.25rem); + margin-top: 0.625rem; + margin-bottom: 0.625rem; } + @media print, screen and (min-width: 40em) { + .grid-margin-y > .cell { + height: calc(100% - 1.875rem); + margin-top: 0.9375rem; + margin-bottom: 0.9375rem; } } + .grid-margin-y > .auto { + height: auto; } + .grid-margin-y > .shrink { + height: auto; } + .grid-margin-y > .small-1 { + height: calc(8.33333% - 1.25rem); } + .grid-margin-y > .small-2 { + height: calc(16.66667% - 1.25rem); } + .grid-margin-y > .small-3 { + height: calc(25% - 1.25rem); } + .grid-margin-y > .small-4 { + height: calc(33.33333% - 1.25rem); } + .grid-margin-y > .small-5 { + height: calc(41.66667% - 1.25rem); } + .grid-margin-y > .small-6 { + height: calc(50% - 1.25rem); } + .grid-margin-y > .small-7 { + height: calc(58.33333% - 1.25rem); } + .grid-margin-y > .small-8 { + height: calc(66.66667% - 1.25rem); } + .grid-margin-y > .small-9 { + height: calc(75% - 1.25rem); } + .grid-margin-y > .small-10 { + height: calc(83.33333% - 1.25rem); } + .grid-margin-y > .small-11 { + height: calc(91.66667% - 1.25rem); } + .grid-margin-y > .small-12 { + height: calc(100% - 1.25rem); } + @media print, screen and (min-width: 40em) { + .grid-margin-y > .auto { + height: auto; } + .grid-margin-y > .shrink { + height: auto; } + .grid-margin-y > .small-1 { + height: calc(8.33333% - 1.875rem); } + .grid-margin-y > .small-2 { + height: calc(16.66667% - 1.875rem); } + .grid-margin-y > .small-3 { + height: calc(25% - 1.875rem); } + .grid-margin-y > .small-4 { + height: calc(33.33333% - 1.875rem); } + .grid-margin-y > .small-5 { + height: calc(41.66667% - 1.875rem); } + .grid-margin-y > .small-6 { + height: calc(50% - 1.875rem); } + .grid-margin-y > .small-7 { + height: calc(58.33333% - 1.875rem); } + .grid-margin-y > .small-8 { + height: calc(66.66667% - 1.875rem); } + .grid-margin-y > .small-9 { + height: calc(75% - 1.875rem); } + .grid-margin-y > .small-10 { + height: calc(83.33333% - 1.875rem); } + .grid-margin-y > .small-11 { + height: calc(91.66667% - 1.875rem); } + .grid-margin-y > .small-12 { + height: calc(100% - 1.875rem); } + .grid-margin-y > .medium-auto { + height: auto; } + .grid-margin-y > .medium-shrink { + height: auto; } + .grid-margin-y > .medium-1 { + height: calc(8.33333% - 1.875rem); } + .grid-margin-y > .medium-2 { + height: calc(16.66667% - 1.875rem); } + .grid-margin-y > .medium-3 { + height: calc(25% - 1.875rem); } + .grid-margin-y > .medium-4 { + height: calc(33.33333% - 1.875rem); } + .grid-margin-y > .medium-5 { + height: calc(41.66667% - 1.875rem); } + .grid-margin-y > .medium-6 { + height: calc(50% - 1.875rem); } + .grid-margin-y > .medium-7 { + height: calc(58.33333% - 1.875rem); } + .grid-margin-y > .medium-8 { + height: calc(66.66667% - 1.875rem); } + .grid-margin-y > .medium-9 { + height: calc(75% - 1.875rem); } + .grid-margin-y > .medium-10 { + height: calc(83.33333% - 1.875rem); } + .grid-margin-y > .medium-11 { + height: calc(91.66667% - 1.875rem); } + .grid-margin-y > .medium-12 { + height: calc(100% - 1.875rem); } } + @media print, screen and (min-width: 64em) { + .grid-margin-y > .large-auto { + height: auto; } + .grid-margin-y > .large-shrink { + height: auto; } + .grid-margin-y > .large-1 { + height: calc(8.33333% - 1.875rem); } + .grid-margin-y > .large-2 { + height: calc(16.66667% - 1.875rem); } + .grid-margin-y > .large-3 { + height: calc(25% - 1.875rem); } + .grid-margin-y > .large-4 { + height: calc(33.33333% - 1.875rem); } + .grid-margin-y > .large-5 { + height: calc(41.66667% - 1.875rem); } + .grid-margin-y > .large-6 { + height: calc(50% - 1.875rem); } + .grid-margin-y > .large-7 { + height: calc(58.33333% - 1.875rem); } + .grid-margin-y > .large-8 { + height: calc(66.66667% - 1.875rem); } + .grid-margin-y > .large-9 { + height: calc(75% - 1.875rem); } + .grid-margin-y > .large-10 { + height: calc(83.33333% - 1.875rem); } + .grid-margin-y > .large-11 { + height: calc(91.66667% - 1.875rem); } + .grid-margin-y > .large-12 { + height: calc(100% - 1.875rem); } } + +.grid-frame.grid-margin-y { + height: calc(100vh + 1.25rem); } + @media print, screen and (min-width: 40em) { + .grid-frame.grid-margin-y { + height: calc(100vh + 1.875rem); } } + @media print, screen and (min-width: 64em) { + .grid-frame.grid-margin-y { + height: calc(100vh + 1.875rem); } } + +@media print, screen and (min-width: 40em) { + .grid-margin-y.medium-grid-frame { + height: calc(100vh + 1.875rem); } } + +@media print, screen and (min-width: 64em) { + .grid-margin-y.large-grid-frame { + height: calc(100vh + 1.875rem); } } + +.button { + display: inline-block; + vertical-align: middle; + margin: 0 0 1rem 0; + padding: 0.85em 1em; + border: 1px solid transparent; + border-radius: 0; + -webkit-transition: background-color 0.25s ease-out, color 0.25s ease-out; + transition: background-color 0.25s ease-out, color 0.25s ease-out; + font-family: inherit; + font-size: 0.9rem; + -webkit-appearance: none; + line-height: 1; + text-align: center; + cursor: pointer; } + [data-whatinput='mouse'] .button { + outline: 0; } + .button.tiny { + font-size: 0.6rem; } + .button.small { + font-size: 0.75rem; } + .button.large { + font-size: 1.25rem; } + .button.expanded { + display: block; + width: 100%; + margin-right: 0; + margin-left: 0; } + .button, .button.disabled, .button[disabled], .button.disabled:hover, .button[disabled]:hover, .button.disabled:focus, .button[disabled]:focus { + background-color: #1779ba; + color: #fefefe; } + .button:hover, .button:focus { + background-color: #14679e; + color: #fefefe; } + .button.primary, .button.primary.disabled, .button.primary[disabled], .button.primary.disabled:hover, .button.primary[disabled]:hover, .button.primary.disabled:focus, .button.primary[disabled]:focus { + background-color: #1779ba; + color: #fefefe; } + .button.primary:hover, .button.primary:focus { + background-color: #126195; + color: #fefefe; } + .button.secondary, .button.secondary.disabled, .button.secondary[disabled], .button.secondary.disabled:hover, .button.secondary[disabled]:hover, .button.secondary.disabled:focus, .button.secondary[disabled]:focus { + background-color: #767676; + color: #fefefe; } + .button.secondary:hover, .button.secondary:focus { + background-color: #5e5e5e; + color: #fefefe; } + .button.success, .button.success.disabled, .button.success[disabled], .button.success.disabled:hover, .button.success[disabled]:hover, .button.success.disabled:focus, .button.success[disabled]:focus { + background-color: #3adb76; + color: #0a0a0a; } + .button.success:hover, .button.success:focus { + background-color: #22bb5b; + color: #0a0a0a; } + .button.warning, .button.warning.disabled, .button.warning[disabled], .button.warning.disabled:hover, .button.warning[disabled]:hover, .button.warning.disabled:focus, .button.warning[disabled]:focus { + background-color: #ffae00; + color: #0a0a0a; } + .button.warning:hover, .button.warning:focus { + background-color: #cc8b00; + color: #0a0a0a; } + .button.alert, .button.alert.disabled, .button.alert[disabled], .button.alert.disabled:hover, .button.alert[disabled]:hover, .button.alert.disabled:focus, .button.alert[disabled]:focus { + background-color: #cc4b37; + color: #fefefe; } + .button.alert:hover, .button.alert:focus { + background-color: #a53b2a; + color: #fefefe; } + .button.hollow, .button.hollow:hover, .button.hollow:focus, .button.hollow.disabled, .button.hollow.disabled:hover, .button.hollow.disabled:focus, .button.hollow[disabled], .button.hollow[disabled]:hover, .button.hollow[disabled]:focus { + background-color: transparent; } + .button.hollow, .button.hollow.disabled, .button.hollow[disabled], .button.hollow.disabled:hover, .button.hollow[disabled]:hover, .button.hollow.disabled:focus, .button.hollow[disabled]:focus { + border: 1px solid #1779ba; + color: #1779ba; } + .button.hollow:hover, .button.hollow:focus { + border-color: #0c3d5d; + color: #0c3d5d; } + .button.hollow.primary, .button.hollow.primary.disabled, .button.hollow.primary[disabled], .button.hollow.primary.disabled:hover, .button.hollow.primary[disabled]:hover, .button.hollow.primary.disabled:focus, .button.hollow.primary[disabled]:focus { + border: 1px solid #1779ba; + color: #1779ba; } + .button.hollow.primary:hover, .button.hollow.primary:focus { + border-color: #0c3d5d; + color: #0c3d5d; } + .button.hollow.secondary, .button.hollow.secondary.disabled, .button.hollow.secondary[disabled], .button.hollow.secondary.disabled:hover, .button.hollow.secondary[disabled]:hover, .button.hollow.secondary.disabled:focus, .button.hollow.secondary[disabled]:focus { + border: 1px solid #767676; + color: #767676; } + .button.hollow.secondary:hover, .button.hollow.secondary:focus { + border-color: #3b3b3b; + color: #3b3b3b; } + .button.hollow.success, .button.hollow.success.disabled, .button.hollow.success[disabled], .button.hollow.success.disabled:hover, .button.hollow.success[disabled]:hover, .button.hollow.success.disabled:focus, .button.hollow.success[disabled]:focus { + border: 1px solid #3adb76; + color: #3adb76; } + .button.hollow.success:hover, .button.hollow.success:focus { + border-color: #157539; + color: #157539; } + .button.hollow.warning, .button.hollow.warning.disabled, .button.hollow.warning[disabled], .button.hollow.warning.disabled:hover, .button.hollow.warning[disabled]:hover, .button.hollow.warning.disabled:focus, .button.hollow.warning[disabled]:focus { + border: 1px solid #ffae00; + color: #ffae00; } + .button.hollow.warning:hover, .button.hollow.warning:focus { + border-color: #805700; + color: #805700; } + .button.hollow.alert, .button.hollow.alert.disabled, .button.hollow.alert[disabled], .button.hollow.alert.disabled:hover, .button.hollow.alert[disabled]:hover, .button.hollow.alert.disabled:focus, .button.hollow.alert[disabled]:focus { + border: 1px solid #cc4b37; + color: #cc4b37; } + .button.hollow.alert:hover, .button.hollow.alert:focus { + border-color: #67251a; + color: #67251a; } + .button.clear, .button.clear:hover, .button.clear:focus, .button.clear.disabled, .button.clear.disabled:hover, .button.clear.disabled:focus, .button.clear[disabled], .button.clear[disabled]:hover, .button.clear[disabled]:focus { + border-color: transparent; + background-color: transparent; } + .button.clear, .button.clear.disabled, .button.clear[disabled], .button.clear.disabled:hover, .button.clear[disabled]:hover, .button.clear.disabled:focus, .button.clear[disabled]:focus { + color: #1779ba; } + .button.clear:hover, .button.clear:focus { + color: #0c3d5d; } + .button.clear.primary, .button.clear.primary.disabled, .button.clear.primary[disabled], .button.clear.primary.disabled:hover, .button.clear.primary[disabled]:hover, .button.clear.primary.disabled:focus, .button.clear.primary[disabled]:focus { + color: #1779ba; } + .button.clear.primary:hover, .button.clear.primary:focus { + color: #0c3d5d; } + .button.clear.secondary, .button.clear.secondary.disabled, .button.clear.secondary[disabled], .button.clear.secondary.disabled:hover, .button.clear.secondary[disabled]:hover, .button.clear.secondary.disabled:focus, .button.clear.secondary[disabled]:focus { + color: #767676; } + .button.clear.secondary:hover, .button.clear.secondary:focus { + color: #3b3b3b; } + .button.clear.success, .button.clear.success.disabled, .button.clear.success[disabled], .button.clear.success.disabled:hover, .button.clear.success[disabled]:hover, .button.clear.success.disabled:focus, .button.clear.success[disabled]:focus { + color: #3adb76; } + .button.clear.success:hover, .button.clear.success:focus { + color: #157539; } + .button.clear.warning, .button.clear.warning.disabled, .button.clear.warning[disabled], .button.clear.warning.disabled:hover, .button.clear.warning[disabled]:hover, .button.clear.warning.disabled:focus, .button.clear.warning[disabled]:focus { + color: #ffae00; } + .button.clear.warning:hover, .button.clear.warning:focus { + color: #805700; } + .button.clear.alert, .button.clear.alert.disabled, .button.clear.alert[disabled], .button.clear.alert.disabled:hover, .button.clear.alert[disabled]:hover, .button.clear.alert.disabled:focus, .button.clear.alert[disabled]:focus { + color: #cc4b37; } + .button.clear.alert:hover, .button.clear.alert:focus { + color: #67251a; } + .button.disabled, .button[disabled] { + opacity: 0.25; + cursor: not-allowed; } + .button.dropdown::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 0.4em; + content: ''; + border-bottom-width: 0; + border-color: #fefefe transparent transparent; + position: relative; + top: 0.4em; + display: inline-block; + float: right; + margin-left: 1em; } + .button.dropdown.hollow::after, .button.dropdown.clear::after { + border-top-color: #1779ba; } + .button.dropdown.hollow.primary::after, .button.dropdown.clear.primary::after { + border-top-color: #1779ba; } + .button.dropdown.hollow.secondary::after, .button.dropdown.clear.secondary::after { + border-top-color: #767676; } + .button.dropdown.hollow.success::after, .button.dropdown.clear.success::after { + border-top-color: #3adb76; } + .button.dropdown.hollow.warning::after, .button.dropdown.clear.warning::after { + border-top-color: #ffae00; } + .button.dropdown.hollow.alert::after, .button.dropdown.clear.alert::after { + border-top-color: #cc4b37; } + .button.arrow-only::after { + top: -0.1em; + float: none; + margin-left: 0; } + +a.button:hover, a.button:focus { + text-decoration: none; } + +.button-group { + margin-bottom: 1rem; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + .button-group::before, .button-group::after { + display: table; + content: ' '; + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + .button-group::after { + clear: both; } + .button-group::before, .button-group::after { + display: none; } + .button-group .button { + margin: 0; + margin-right: 1px; + margin-bottom: 1px; + font-size: 0.9rem; + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + .button-group .button:last-child { + margin-right: 0; } + .button-group.tiny .button { + font-size: 0.6rem; } + .button-group.small .button { + font-size: 0.75rem; } + .button-group.large .button { + font-size: 1.25rem; } + .button-group.expanded .button { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + .button-group.primary .button, .button-group.primary .button.disabled, .button-group.primary .button[disabled], .button-group.primary .button.disabled:hover, .button-group.primary .button[disabled]:hover, .button-group.primary .button.disabled:focus, .button-group.primary .button[disabled]:focus { + background-color: #1779ba; + color: #fefefe; } + .button-group.primary .button:hover, .button-group.primary .button:focus { + background-color: #126195; + color: #fefefe; } + .button-group.secondary .button, .button-group.secondary .button.disabled, .button-group.secondary .button[disabled], .button-group.secondary .button.disabled:hover, .button-group.secondary .button[disabled]:hover, .button-group.secondary .button.disabled:focus, .button-group.secondary .button[disabled]:focus { + background-color: #767676; + color: #fefefe; } + .button-group.secondary .button:hover, .button-group.secondary .button:focus { + background-color: #5e5e5e; + color: #fefefe; } + .button-group.success .button, .button-group.success .button.disabled, .button-group.success .button[disabled], .button-group.success .button.disabled:hover, .button-group.success .button[disabled]:hover, .button-group.success .button.disabled:focus, .button-group.success .button[disabled]:focus { + background-color: #3adb76; + color: #0a0a0a; } + .button-group.success .button:hover, .button-group.success .button:focus { + background-color: #22bb5b; + color: #0a0a0a; } + .button-group.warning .button, .button-group.warning .button.disabled, .button-group.warning .button[disabled], .button-group.warning .button.disabled:hover, .button-group.warning .button[disabled]:hover, .button-group.warning .button.disabled:focus, .button-group.warning .button[disabled]:focus { + background-color: #ffae00; + color: #0a0a0a; } + .button-group.warning .button:hover, .button-group.warning .button:focus { + background-color: #cc8b00; + color: #0a0a0a; } + .button-group.alert .button, .button-group.alert .button.disabled, .button-group.alert .button[disabled], .button-group.alert .button.disabled:hover, .button-group.alert .button[disabled]:hover, .button-group.alert .button.disabled:focus, .button-group.alert .button[disabled]:focus { + background-color: #cc4b37; + color: #fefefe; } + .button-group.alert .button:hover, .button-group.alert .button:focus { + background-color: #a53b2a; + color: #fefefe; } + .button-group.hollow .button, .button-group.hollow .button:hover, .button-group.hollow .button:focus, .button-group.hollow .button.disabled, .button-group.hollow .button.disabled:hover, .button-group.hollow .button.disabled:focus, .button-group.hollow .button[disabled], .button-group.hollow .button[disabled]:hover, .button-group.hollow .button[disabled]:focus { + background-color: transparent; } + .button-group.hollow .button, .button-group.hollow .button.disabled, .button-group.hollow .button[disabled], .button-group.hollow .button.disabled:hover, .button-group.hollow .button[disabled]:hover, .button-group.hollow .button.disabled:focus, .button-group.hollow .button[disabled]:focus { + border: 1px solid #1779ba; + color: #1779ba; } + .button-group.hollow .button:hover, .button-group.hollow .button:focus { + border-color: #0c3d5d; + color: #0c3d5d; } + .button-group.hollow.primary .button, .button-group.hollow.primary .button.disabled, .button-group.hollow.primary .button[disabled], .button-group.hollow.primary .button.disabled:hover, .button-group.hollow.primary .button[disabled]:hover, .button-group.hollow.primary .button.disabled:focus, .button-group.hollow.primary .button[disabled]:focus, .button-group.hollow .button.primary, .button-group.hollow .button.primary.disabled, .button-group.hollow .button.primary[disabled], .button-group.hollow .button.primary.disabled:hover, .button-group.hollow .button.primary[disabled]:hover, .button-group.hollow .button.primary.disabled:focus, .button-group.hollow .button.primary[disabled]:focus { + border: 1px solid #1779ba; + color: #1779ba; } + .button-group.hollow.primary .button:hover, .button-group.hollow.primary .button:focus, .button-group.hollow .button.primary:hover, .button-group.hollow .button.primary:focus { + border-color: #0c3d5d; + color: #0c3d5d; } + .button-group.hollow.secondary .button, .button-group.hollow.secondary .button.disabled, .button-group.hollow.secondary .button[disabled], .button-group.hollow.secondary .button.disabled:hover, .button-group.hollow.secondary .button[disabled]:hover, .button-group.hollow.secondary .button.disabled:focus, .button-group.hollow.secondary .button[disabled]:focus, .button-group.hollow .button.secondary, .button-group.hollow .button.secondary.disabled, .button-group.hollow .button.secondary[disabled], .button-group.hollow .button.secondary.disabled:hover, .button-group.hollow .button.secondary[disabled]:hover, .button-group.hollow .button.secondary.disabled:focus, .button-group.hollow .button.secondary[disabled]:focus { + border: 1px solid #767676; + color: #767676; } + .button-group.hollow.secondary .button:hover, .button-group.hollow.secondary .button:focus, .button-group.hollow .button.secondary:hover, .button-group.hollow .button.secondary:focus { + border-color: #3b3b3b; + color: #3b3b3b; } + .button-group.hollow.success .button, .button-group.hollow.success .button.disabled, .button-group.hollow.success .button[disabled], .button-group.hollow.success .button.disabled:hover, .button-group.hollow.success .button[disabled]:hover, .button-group.hollow.success .button.disabled:focus, .button-group.hollow.success .button[disabled]:focus, .button-group.hollow .button.success, .button-group.hollow .button.success.disabled, .button-group.hollow .button.success[disabled], .button-group.hollow .button.success.disabled:hover, .button-group.hollow .button.success[disabled]:hover, .button-group.hollow .button.success.disabled:focus, .button-group.hollow .button.success[disabled]:focus { + border: 1px solid #3adb76; + color: #3adb76; } + .button-group.hollow.success .button:hover, .button-group.hollow.success .button:focus, .button-group.hollow .button.success:hover, .button-group.hollow .button.success:focus { + border-color: #157539; + color: #157539; } + .button-group.hollow.warning .button, .button-group.hollow.warning .button.disabled, .button-group.hollow.warning .button[disabled], .button-group.hollow.warning .button.disabled:hover, .button-group.hollow.warning .button[disabled]:hover, .button-group.hollow.warning .button.disabled:focus, .button-group.hollow.warning .button[disabled]:focus, .button-group.hollow .button.warning, .button-group.hollow .button.warning.disabled, .button-group.hollow .button.warning[disabled], .button-group.hollow .button.warning.disabled:hover, .button-group.hollow .button.warning[disabled]:hover, .button-group.hollow .button.warning.disabled:focus, .button-group.hollow .button.warning[disabled]:focus { + border: 1px solid #ffae00; + color: #ffae00; } + .button-group.hollow.warning .button:hover, .button-group.hollow.warning .button:focus, .button-group.hollow .button.warning:hover, .button-group.hollow .button.warning:focus { + border-color: #805700; + color: #805700; } + .button-group.hollow.alert .button, .button-group.hollow.alert .button.disabled, .button-group.hollow.alert .button[disabled], .button-group.hollow.alert .button.disabled:hover, .button-group.hollow.alert .button[disabled]:hover, .button-group.hollow.alert .button.disabled:focus, .button-group.hollow.alert .button[disabled]:focus, .button-group.hollow .button.alert, .button-group.hollow .button.alert.disabled, .button-group.hollow .button.alert[disabled], .button-group.hollow .button.alert.disabled:hover, .button-group.hollow .button.alert[disabled]:hover, .button-group.hollow .button.alert.disabled:focus, .button-group.hollow .button.alert[disabled]:focus { + border: 1px solid #cc4b37; + color: #cc4b37; } + .button-group.hollow.alert .button:hover, .button-group.hollow.alert .button:focus, .button-group.hollow .button.alert:hover, .button-group.hollow .button.alert:focus { + border-color: #67251a; + color: #67251a; } + .button-group.clear .button, .button-group.clear .button:hover, .button-group.clear .button:focus, .button-group.clear .button.disabled, .button-group.clear .button.disabled:hover, .button-group.clear .button.disabled:focus, .button-group.clear .button[disabled], .button-group.clear .button[disabled]:hover, .button-group.clear .button[disabled]:focus { + border-color: transparent; + background-color: transparent; } + .button-group.clear .button, .button-group.clear .button.disabled, .button-group.clear .button[disabled], .button-group.clear .button.disabled:hover, .button-group.clear .button[disabled]:hover, .button-group.clear .button.disabled:focus, .button-group.clear .button[disabled]:focus { + color: #1779ba; } + .button-group.clear .button:hover, .button-group.clear .button:focus { + color: #0c3d5d; } + .button-group.clear.primary .button, .button-group.clear.primary .button.disabled, .button-group.clear.primary .button[disabled], .button-group.clear.primary .button.disabled:hover, .button-group.clear.primary .button[disabled]:hover, .button-group.clear.primary .button.disabled:focus, .button-group.clear.primary .button[disabled]:focus, .button-group.clear .button.primary, .button-group.clear .button.primary.disabled, .button-group.clear .button.primary[disabled], .button-group.clear .button.primary.disabled:hover, .button-group.clear .button.primary[disabled]:hover, .button-group.clear .button.primary.disabled:focus, .button-group.clear .button.primary[disabled]:focus { + color: #1779ba; } + .button-group.clear.primary .button:hover, .button-group.clear.primary .button:focus, .button-group.clear .button.primary:hover, .button-group.clear .button.primary:focus { + color: #0c3d5d; } + .button-group.clear.secondary .button, .button-group.clear.secondary .button.disabled, .button-group.clear.secondary .button[disabled], .button-group.clear.secondary .button.disabled:hover, .button-group.clear.secondary .button[disabled]:hover, .button-group.clear.secondary .button.disabled:focus, .button-group.clear.secondary .button[disabled]:focus, .button-group.clear .button.secondary, .button-group.clear .button.secondary.disabled, .button-group.clear .button.secondary[disabled], .button-group.clear .button.secondary.disabled:hover, .button-group.clear .button.secondary[disabled]:hover, .button-group.clear .button.secondary.disabled:focus, .button-group.clear .button.secondary[disabled]:focus { + color: #767676; } + .button-group.clear.secondary .button:hover, .button-group.clear.secondary .button:focus, .button-group.clear .button.secondary:hover, .button-group.clear .button.secondary:focus { + color: #3b3b3b; } + .button-group.clear.success .button, .button-group.clear.success .button.disabled, .button-group.clear.success .button[disabled], .button-group.clear.success .button.disabled:hover, .button-group.clear.success .button[disabled]:hover, .button-group.clear.success .button.disabled:focus, .button-group.clear.success .button[disabled]:focus, .button-group.clear .button.success, .button-group.clear .button.success.disabled, .button-group.clear .button.success[disabled], .button-group.clear .button.success.disabled:hover, .button-group.clear .button.success[disabled]:hover, .button-group.clear .button.success.disabled:focus, .button-group.clear .button.success[disabled]:focus { + color: #3adb76; } + .button-group.clear.success .button:hover, .button-group.clear.success .button:focus, .button-group.clear .button.success:hover, .button-group.clear .button.success:focus { + color: #157539; } + .button-group.clear.warning .button, .button-group.clear.warning .button.disabled, .button-group.clear.warning .button[disabled], .button-group.clear.warning .button.disabled:hover, .button-group.clear.warning .button[disabled]:hover, .button-group.clear.warning .button.disabled:focus, .button-group.clear.warning .button[disabled]:focus, .button-group.clear .button.warning, .button-group.clear .button.warning.disabled, .button-group.clear .button.warning[disabled], .button-group.clear .button.warning.disabled:hover, .button-group.clear .button.warning[disabled]:hover, .button-group.clear .button.warning.disabled:focus, .button-group.clear .button.warning[disabled]:focus { + color: #ffae00; } + .button-group.clear.warning .button:hover, .button-group.clear.warning .button:focus, .button-group.clear .button.warning:hover, .button-group.clear .button.warning:focus { + color: #805700; } + .button-group.clear.alert .button, .button-group.clear.alert .button.disabled, .button-group.clear.alert .button[disabled], .button-group.clear.alert .button.disabled:hover, .button-group.clear.alert .button[disabled]:hover, .button-group.clear.alert .button.disabled:focus, .button-group.clear.alert .button[disabled]:focus, .button-group.clear .button.alert, .button-group.clear .button.alert.disabled, .button-group.clear .button.alert[disabled], .button-group.clear .button.alert.disabled:hover, .button-group.clear .button.alert[disabled]:hover, .button-group.clear .button.alert.disabled:focus, .button-group.clear .button.alert[disabled]:focus { + color: #cc4b37; } + .button-group.clear.alert .button:hover, .button-group.clear.alert .button:focus, .button-group.clear .button.alert:hover, .button-group.clear .button.alert:focus { + color: #67251a; } + .button-group.no-gaps .button { + margin-right: -0.0625rem; } + .button-group.no-gaps .button + .button { + border-left-color: transparent; } + .button-group.stacked, .button-group.stacked-for-small, .button-group.stacked-for-medium { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .button-group.stacked .button, .button-group.stacked-for-small .button, .button-group.stacked-for-medium .button { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + .button-group.stacked .button:last-child, .button-group.stacked-for-small .button:last-child, .button-group.stacked-for-medium .button:last-child { + margin-bottom: 0; } + .button-group.stacked.expanded .button, .button-group.stacked-for-small.expanded .button, .button-group.stacked-for-medium.expanded .button { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + @media print, screen and (min-width: 40em) { + .button-group.stacked-for-small .button { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + margin-bottom: 0; } } + @media print, screen and (min-width: 64em) { + .button-group.stacked-for-medium .button { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + margin-bottom: 0; } } + @media print, screen and (max-width: 39.99875em) { + .button-group.stacked-for-small.expanded { + display: block; } + .button-group.stacked-for-small.expanded .button { + display: block; + margin-right: 0; } } + @media print, screen and (max-width: 63.99875em) { + .button-group.stacked-for-medium.expanded { + display: block; } + .button-group.stacked-for-medium.expanded .button { + display: block; + margin-right: 0; } } + +.close-button { + position: absolute; + z-index: 10; + color: #8a8a8a; + cursor: pointer; } + [data-whatinput='mouse'] .close-button { + outline: 0; } + .close-button:hover, .close-button:focus { + color: #0a0a0a; } + .close-button.small { + right: 0.66rem; + top: 0.33em; + font-size: 1.5em; + line-height: 1; } + .close-button.medium, .close-button { + right: 1rem; + top: 0.5rem; + font-size: 2em; + line-height: 1; } + +.label { + display: inline-block; + padding: 0.33333rem 0.5rem; + border-radius: 0; + font-size: 0.8rem; + line-height: 1; + white-space: nowrap; + cursor: default; + background: #1779ba; + color: #fefefe; } + .label.primary { + background: #1779ba; + color: #fefefe; } + .label.secondary { + background: #767676; + color: #fefefe; } + .label.success { + background: #3adb76; + color: #0a0a0a; } + .label.warning { + background: #ffae00; + color: #0a0a0a; } + .label.alert { + background: #cc4b37; + color: #fefefe; } + +.progress { + height: 1rem; + margin-bottom: 1rem; + border-radius: 0; + background-color: #cacaca; } + .progress.primary .progress-meter { + background-color: #1779ba; } + .progress.secondary .progress-meter { + background-color: #767676; } + .progress.success .progress-meter { + background-color: #3adb76; } + .progress.warning .progress-meter { + background-color: #ffae00; } + .progress.alert .progress-meter { + background-color: #cc4b37; } + +.progress-meter { + position: relative; + display: block; + width: 0%; + height: 100%; + background-color: #1779ba; } + +.progress-meter-text { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + margin: 0; + font-size: 0.75rem; + font-weight: bold; + color: #fefefe; + white-space: nowrap; } + +.slider { + position: relative; + height: 0.5rem; + margin-top: 1.25rem; + margin-bottom: 2.25rem; + background-color: #e6e6e6; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -ms-touch-action: none; + touch-action: none; } + +.slider-fill { + position: absolute; + top: 0; + left: 0; + display: inline-block; + max-width: 100%; + height: 0.5rem; + background-color: #cacaca; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; } + .slider-fill.is-dragging { + -webkit-transition: all 0s linear; + transition: all 0s linear; } + +.slider-handle { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + left: 0; + z-index: 1; + display: inline-block; + width: 1.4rem; + height: 1.4rem; + border-radius: 0; + background-color: #1779ba; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + -ms-touch-action: manipulation; + touch-action: manipulation; } + [data-whatinput='mouse'] .slider-handle { + outline: 0; } + .slider-handle:hover { + background-color: #14679e; } + .slider-handle.is-dragging { + -webkit-transition: all 0s linear; + transition: all 0s linear; } + +.slider.disabled, +.slider[disabled] { + opacity: 0.25; + cursor: not-allowed; } + +.slider.vertical { + display: inline-block; + width: 0.5rem; + height: 12.5rem; + margin: 0 1.25rem; + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); } + .slider.vertical .slider-fill { + top: 0; + width: 0.5rem; + max-height: 100%; } + .slider.vertical .slider-handle { + position: absolute; + top: 0; + left: 50%; + width: 1.4rem; + height: 1.4rem; + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); } + +.switch { + height: 2rem; + position: relative; + margin-bottom: 1rem; + outline: 0; + font-size: 0.875rem; + font-weight: bold; + color: #fefefe; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.switch-input { + position: absolute; + margin-bottom: 0; + opacity: 0; } + +.switch-paddle { + position: relative; + display: block; + width: 4rem; + height: 2rem; + border-radius: 0; + background: #cacaca; + -webkit-transition: all 0.25s ease-out; + transition: all 0.25s ease-out; + font-weight: inherit; + color: inherit; + cursor: pointer; } + input + .switch-paddle { + margin: 0; } + .switch-paddle::after { + position: absolute; + top: 0.25rem; + left: 0.25rem; + display: block; + width: 1.5rem; + height: 1.5rem; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + border-radius: 0; + background: #fefefe; + -webkit-transition: all 0.25s ease-out; + transition: all 0.25s ease-out; + content: ''; } + input:checked ~ .switch-paddle { + background: #1779ba; } + input:checked ~ .switch-paddle::after { + left: 2.25rem; } + input:disabled ~ .switch-paddle { + cursor: not-allowed; + opacity: 0.5; } + [data-whatinput='mouse'] input:focus ~ .switch-paddle { + outline: 0; } + +.switch-active, .switch-inactive { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); } + +.switch-active { + left: 8%; + display: none; } + input:checked + label > .switch-active { + display: block; } + +.switch-inactive { + right: 15%; } + input:checked + label > .switch-inactive { + display: none; } + +.switch.tiny { + height: 1.5rem; } + .switch.tiny .switch-paddle { + width: 3rem; + height: 1.5rem; + font-size: 0.625rem; } + .switch.tiny .switch-paddle::after { + top: 0.25rem; + left: 0.25rem; + width: 1rem; + height: 1rem; } + .switch.tiny input:checked ~ .switch-paddle::after { + left: 1.75rem; } + +.switch.small { + height: 1.75rem; } + .switch.small .switch-paddle { + width: 3.5rem; + height: 1.75rem; + font-size: 0.75rem; } + .switch.small .switch-paddle::after { + top: 0.25rem; + left: 0.25rem; + width: 1.25rem; + height: 1.25rem; } + .switch.small input:checked ~ .switch-paddle::after { + left: 2rem; } + +.switch.large { + height: 2.5rem; } + .switch.large .switch-paddle { + width: 5rem; + height: 2.5rem; + font-size: 1rem; } + .switch.large .switch-paddle::after { + top: 0.25rem; + left: 0.25rem; + width: 2rem; + height: 2rem; } + .switch.large input:checked ~ .switch-paddle::after { + left: 2.75rem; } + +table { + border-collapse: collapse; + width: 100%; + margin-bottom: 1rem; + border-radius: 0; } + thead, + tbody, + tfoot { + border: 1px solid #f1f1f1; + background-color: #fefefe; } + caption { + padding: 0.5rem 0.625rem 0.625rem; + font-weight: bold; } + thead { + background: #f8f8f8; + color: #0a0a0a; } + tfoot { + background: #f1f1f1; + color: #0a0a0a; } + thead tr, + tfoot tr { + background: transparent; } + thead th, + thead td, + tfoot th, + tfoot td { + padding: 0.5rem 0.625rem 0.625rem; + font-weight: bold; + text-align: left; } + tbody th, + tbody td { + padding: 0.5rem 0.625rem 0.625rem; } + tbody tr:nth-child(even) { + border-bottom: 0; + background-color: #f1f1f1; } + table.unstriped tbody { + background-color: #fefefe; } + table.unstriped tbody tr { + border-bottom: 0; + border-bottom: 1px solid #f1f1f1; + background-color: #fefefe; } + +@media print, screen and (max-width: 63.99875em) { + table.stack thead { + display: none; } + table.stack tfoot { + display: none; } + table.stack tr, + table.stack th, + table.stack td { + display: block; } + table.stack td { + border-top: 0; } } + +table.scroll { + display: block; + width: 100%; + overflow-x: auto; } + +table.hover thead tr:hover { + background-color: #f3f3f3; } + +table.hover tfoot tr:hover { + background-color: #ececec; } + +table.hover tbody tr:hover { + background-color: #f9f9f9; } + +table.hover:not(.unstriped) tr:nth-of-type(even):hover { + background-color: #ececec; } + +.table-scroll { + overflow-x: auto; } + +.badge { + display: inline-block; + min-width: 2.1em; + padding: 0.3em; + border-radius: 50%; + font-size: 0.6rem; + text-align: center; + background: #1779ba; + color: #fefefe; } + .badge.primary { + background: #1779ba; + color: #fefefe; } + .badge.secondary { + background: #767676; + color: #fefefe; } + .badge.success { + background: #3adb76; + color: #0a0a0a; } + .badge.warning { + background: #ffae00; + color: #0a0a0a; } + .badge.alert { + background: #cc4b37; + color: #fefefe; } + +.breadcrumbs { + margin: 0 0 1rem 0; + list-style: none; } + .breadcrumbs::before, .breadcrumbs::after { + display: table; + content: ' '; + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + .breadcrumbs::after { + clear: both; } + .breadcrumbs li { + float: left; + font-size: 0.6875rem; + color: #0a0a0a; + cursor: default; + text-transform: uppercase; } + .breadcrumbs li:not(:last-child)::after { + position: relative; + margin: 0 0.75rem; + opacity: 1; + content: "/"; + color: #cacaca; } + .breadcrumbs a { + color: #1779ba; } + .breadcrumbs a:hover { + text-decoration: underline; } + .breadcrumbs .disabled { + color: #cacaca; + cursor: not-allowed; } + +.callout { + position: relative; + margin: 0 0 1rem 0; + padding: 1rem; + border: 1px solid rgba(10, 10, 10, 0.25); + border-radius: 0; + background-color: white; + color: #0a0a0a; } + .callout > :first-child { + margin-top: 0; } + .callout > :last-child { + margin-bottom: 0; } + .callout.primary { + background-color: #d7ecfa; + color: #0a0a0a; } + .callout.secondary { + background-color: #eaeaea; + color: #0a0a0a; } + .callout.success { + background-color: #e1faea; + color: #0a0a0a; } + .callout.warning { + background-color: #fff3d9; + color: #0a0a0a; } + .callout.alert { + background-color: #f7e4e1; + color: #0a0a0a; } + .callout.small { + padding-top: 0.5rem; + padding-right: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 0.5rem; } + .callout.large { + padding-top: 3rem; + padding-right: 3rem; + padding-bottom: 3rem; + padding-left: 3rem; } + +.card { + 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-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + margin-bottom: 1rem; + border: 1px solid #e6e6e6; + border-radius: 0; + background: #fefefe; + -webkit-box-shadow: none; + box-shadow: none; + overflow: hidden; + color: #0a0a0a; } + .card > :last-child { + margin-bottom: 0; } + +.card-divider { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + padding: 1rem; + background: #e6e6e6; } + .card-divider > :last-child { + margin-bottom: 0; } + +.card-section { + -webkit-box-flex: 1; + -webkit-flex: 1 0 auto; + -ms-flex: 1 0 auto; + flex: 1 0 auto; + padding: 1rem; } + .card-section > :last-child { + margin-bottom: 0; } + +.card-image { + min-height: 1px; } + +.dropdown-pane { + position: absolute; + z-index: 10; + display: none; + width: 300px; + padding: 1rem; + visibility: hidden; + border: 1px solid #cacaca; + border-radius: 0; + background-color: #fefefe; + font-size: 1rem; } + .dropdown-pane.is-opening { + display: block; } + .dropdown-pane.is-open { + display: block; + visibility: visible; } + +.dropdown-pane.tiny { + width: 100px; } + +.dropdown-pane.small { + width: 200px; } + +.dropdown-pane.large { + width: 400px; } + +.pagination { + margin-left: 0; + margin-bottom: 1rem; } + .pagination::before, .pagination::after { + display: table; + content: ' '; + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + .pagination::after { + clear: both; } + .pagination li { + margin-right: 0.0625rem; + border-radius: 0; + font-size: 0.875rem; + display: none; } + .pagination li:last-child, .pagination li:first-child { + display: inline-block; } + @media print, screen and (min-width: 40em) { + .pagination li { + display: inline-block; } } + .pagination a, + .pagination button { + display: block; + padding: 0.1875rem 0.625rem; + border-radius: 0; + color: #0a0a0a; } + .pagination a:hover, + .pagination button:hover { + background: #e6e6e6; } + .pagination .current { + padding: 0.1875rem 0.625rem; + background: #1779ba; + color: #fefefe; + cursor: default; } + .pagination .disabled { + padding: 0.1875rem 0.625rem; + color: #cacaca; + cursor: not-allowed; } + .pagination .disabled:hover { + background: transparent; } + .pagination .ellipsis::after { + padding: 0.1875rem 0.625rem; + content: '\2026'; + color: #0a0a0a; } + +.pagination-previous a::before, +.pagination-previous.disabled::before { + display: inline-block; + margin-right: 0.5rem; + content: "«"; } + +.pagination-next a::after, +.pagination-next.disabled::after { + display: inline-block; + margin-left: 0.5rem; + content: "»"; } + +.has-tip { + position: relative; + display: inline-block; + border-bottom: dotted 1px #8a8a8a; + font-weight: bold; + cursor: help; } + +.tooltip { + position: absolute; + top: calc(100% + 0.6495rem); + z-index: 1200; + max-width: 10rem; + padding: 0.75rem; + border-radius: 0; + background-color: #0a0a0a; + font-size: 80%; + color: #fefefe; } + .tooltip::before { + position: absolute; } + .tooltip.bottom::before { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 0.75rem; + content: ''; + border-top-width: 0; + border-color: transparent transparent #0a0a0a; + bottom: 100%; } + .tooltip.bottom.align-center::before { + left: 50%; + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); } + .tooltip.top::before { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 0.75rem; + content: ''; + border-bottom-width: 0; + border-color: #0a0a0a transparent transparent; + top: 100%; + bottom: auto; } + .tooltip.top.align-center::before { + left: 50%; + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); } + .tooltip.left::before { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 0.75rem; + content: ''; + border-right-width: 0; + border-color: transparent transparent transparent #0a0a0a; + left: 100%; } + .tooltip.left.align-center::before { + bottom: auto; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); } + .tooltip.right::before { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 0.75rem; + content: ''; + border-left-width: 0; + border-color: transparent #0a0a0a transparent transparent; + right: 100%; + left: auto; } + .tooltip.right.align-center::before { + bottom: auto; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); } + .tooltip.align-top::before { + bottom: auto; + top: 10%; } + .tooltip.align-bottom::before { + bottom: 10%; + top: auto; } + .tooltip.align-left::before { + left: 10%; + right: auto; } + .tooltip.align-right::before { + left: auto; + right: 10%; } + +.accordion { + margin-left: 0; + background: #fefefe; + list-style-type: none; } + .accordion[disabled] .accordion-title { + cursor: not-allowed; } + +.accordion-item:first-child > :first-child { + border-radius: 0 0 0 0; } + +.accordion-item:last-child > :last-child { + border-radius: 0 0 0 0; } + +.accordion-title { + position: relative; + display: block; + padding: 1.25rem 1rem; + border: 1px solid #e6e6e6; + border-bottom: 0; + font-size: 0.75rem; + line-height: 1; + color: #1779ba; } + :last-child:not(.is-active) > .accordion-title { + border-bottom: 1px solid #e6e6e6; + border-radius: 0 0 0 0; } + .accordion-title:hover, .accordion-title:focus { + background-color: #e6e6e6; } + .accordion-title::before { + position: absolute; + top: 50%; + right: 1rem; + margin-top: -0.5rem; + content: "+"; } + .is-active > .accordion-title::before { + content: "–"; } + +.accordion-content { + display: none; + padding: 1rem; + border: 1px solid #e6e6e6; + border-bottom: 0; + background-color: #fefefe; + color: #0a0a0a; } + :last-child > .accordion-content:last-child { + border-bottom: 1px solid #e6e6e6; } + +.media-object { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + margin-bottom: 1rem; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .media-object img { + max-width: none; } + @media print, screen and (max-width: 39.99875em) { + .media-object.stack-for-small { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } } + +.media-object-section { + -webkit-box-flex: 0; + -webkit-flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; } + .media-object-section:first-child { + padding-right: 1rem; } + .media-object-section:last-child:not(:nth-child(2)) { + padding-left: 1rem; } + .media-object-section > :last-child { + margin-bottom: 0; } + @media print, screen and (max-width: 39.99875em) { + .stack-for-small .media-object-section { + padding: 0; + padding-bottom: 1rem; + -webkit-flex-basis: 100%; + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + max-width: 100%; } + .stack-for-small .media-object-section img { + width: 100%; } } + .media-object-section.main-section { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + +.orbit { + position: relative; } + +.orbit-container { + position: relative; + height: 0; + margin: 0; + list-style: none; + overflow: hidden; } + +.orbit-slide { + width: 100%; + position: absolute; } + .orbit-slide.no-motionui.is-active { + top: 0; + left: 0; } + +.orbit-figure { + margin: 0; } + +.orbit-image { + width: 100%; + max-width: 100%; + margin: 0; } + +.orbit-caption { + position: absolute; + bottom: 0; + width: 100%; + margin-bottom: 0; + padding: 1rem; + background-color: rgba(10, 10, 10, 0.5); + color: #fefefe; } + +.orbit-previous, .orbit-next { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + z-index: 10; + padding: 1rem; + color: #fefefe; } + [data-whatinput='mouse'] .orbit-previous, [data-whatinput='mouse'] .orbit-next { + outline: 0; } + .orbit-previous:hover, .orbit-next:hover, .orbit-previous:active, .orbit-next:active, .orbit-previous:focus, .orbit-next:focus { + background-color: rgba(10, 10, 10, 0.5); } + +.orbit-previous { + left: 0; } + +.orbit-next { + left: auto; + right: 0; } + +.orbit-bullets { + position: relative; + margin-top: 0.8rem; + margin-bottom: 0.8rem; + text-align: center; } + [data-whatinput='mouse'] .orbit-bullets { + outline: 0; } + .orbit-bullets button { + width: 1.2rem; + height: 1.2rem; + margin: 0.1rem; + border-radius: 50%; + background-color: #cacaca; } + .orbit-bullets button:hover { + background-color: #8a8a8a; } + .orbit-bullets button.is-active { + background-color: #8a8a8a; } + +.responsive-embed, +.flex-video { + position: relative; + height: 0; + margin-bottom: 1rem; + padding-bottom: 75%; + overflow: hidden; } + .responsive-embed iframe, + .responsive-embed object, + .responsive-embed embed, + .responsive-embed video, + .flex-video iframe, + .flex-video object, + .flex-video embed, + .flex-video video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; } + .responsive-embed.widescreen, + .flex-video.widescreen { + padding-bottom: 56.25%; } + +.tabs { + margin: 0; + border: 1px solid #e6e6e6; + background: #fefefe; + list-style-type: none; } + .tabs::before, .tabs::after { + display: table; + content: ' '; + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + .tabs::after { + clear: both; } + +.tabs.vertical > li { + display: block; + float: none; + width: auto; } + +.tabs.simple > li > a { + padding: 0; } + .tabs.simple > li > a:hover { + background: transparent; } + +.tabs.primary { + background: #1779ba; } + .tabs.primary > li > a { + color: #fefefe; } + .tabs.primary > li > a:hover, .tabs.primary > li > a:focus { + background: #1673b1; } + +.tabs-title { + float: left; } + .tabs-title > a { + display: block; + padding: 1.25rem 1.5rem; + font-size: 0.75rem; + line-height: 1; + color: #1779ba; } + [data-whatinput='mouse'] .tabs-title > a { + outline: 0; } + .tabs-title > a:hover { + background: #fefefe; + color: #1468a0; } + .tabs-title > a:focus, .tabs-title > a[aria-selected='true'] { + background: #e6e6e6; + color: #1779ba; } + +.tabs-content { + border: 1px solid #e6e6e6; + border-top: 0; + background: #fefefe; + color: #0a0a0a; + -webkit-transition: all 0.5s ease; + transition: all 0.5s ease; } + +.tabs-content.vertical { + border: 1px solid #e6e6e6; + border-left: 0; } + +.tabs-panel { + display: none; + padding: 1rem; } + .tabs-panel.is-active { + display: block; } + +.thumbnail { + display: inline-block; + max-width: 100%; + margin-bottom: 1rem; + border: 4px solid #fefefe; + border-radius: 0; + -webkit-box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2); + box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2); + line-height: 0; } + +a.thumbnail { + -webkit-transition: -webkit-box-shadow 200ms ease-out; + transition: -webkit-box-shadow 200ms ease-out; + transition: box-shadow 200ms ease-out; + transition: box-shadow 200ms ease-out, -webkit-box-shadow 200ms ease-out; } + a.thumbnail:hover, a.thumbnail:focus { + -webkit-box-shadow: 0 0 6px 1px rgba(23, 121, 186, 0.5); + box-shadow: 0 0 6px 1px rgba(23, 121, 186, 0.5); } + a.thumbnail image { + -webkit-box-shadow: none; + box-shadow: none; } + +.menu { + padding: 0; + margin: 0; + list-style: none; + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + [data-whatinput='mouse'] .menu li { + outline: 0; } + .menu a, + .menu .button { + line-height: 1; + text-decoration: none; + display: block; + padding: 0.7rem 1rem; } + .menu input, + .menu select, + .menu a, + .menu button { + margin-bottom: 0; } + .menu input { + display: inline-block; } + .menu, .menu.horizontal { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + .menu.vertical { + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + .menu.vertical.icon-top li a img, + .menu.vertical.icon-top li a i, + .menu.vertical.icon-top li a svg, .menu.vertical.icon-bottom li a img, + .menu.vertical.icon-bottom li a i, + .menu.vertical.icon-bottom li a svg { + text-align: left; } + .menu.expanded li { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + .menu.expanded.icon-top li a img, + .menu.expanded.icon-top li a i, + .menu.expanded.icon-top li a svg, .menu.expanded.icon-bottom li a img, + .menu.expanded.icon-bottom li a i, + .menu.expanded.icon-bottom li a svg { + text-align: left; } + .menu.simple { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .menu.simple li + li { + margin-left: 1rem; } + .menu.simple a { + padding: 0; } + @media print, screen and (min-width: 40em) { + .menu.medium-horizontal { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + .menu.medium-vertical { + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + .menu.medium-expanded li { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + .menu.medium-simple li { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; } } + @media print, screen and (min-width: 64em) { + .menu.large-horizontal { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + .menu.large-vertical { + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + .menu.large-expanded li { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + .menu.large-simple li { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; } } + .menu.nested { + margin-right: 0; + margin-left: 1rem; } + .menu.icons a { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + .menu.icon-top a, .menu.icon-right a, .menu.icon-bottom a, .menu.icon-left a { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + .menu.icon-left li a, .menu.nested.icon-left li a { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-flow: row nowrap; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; } + .menu.icon-left li a img, + .menu.icon-left li a i, + .menu.icon-left li a svg, .menu.nested.icon-left li a img, + .menu.nested.icon-left li a i, + .menu.nested.icon-left li a svg { + margin-right: 0.25rem; } + .menu.icon-right li a, .menu.nested.icon-right li a { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-flow: row nowrap; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; } + .menu.icon-right li a img, + .menu.icon-right li a i, + .menu.icon-right li a svg, .menu.nested.icon-right li a img, + .menu.nested.icon-right li a i, + .menu.nested.icon-right li a svg { + margin-left: 0.25rem; } + .menu.icon-top li a, .menu.nested.icon-top li a { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-flow: column nowrap; + -ms-flex-flow: column nowrap; + flex-flow: column nowrap; } + .menu.icon-top li a img, + .menu.icon-top li a i, + .menu.icon-top li a svg, .menu.nested.icon-top li a img, + .menu.nested.icon-top li a i, + .menu.nested.icon-top li a svg { + -webkit-align-self: stretch; + -ms-flex-item-align: stretch; + align-self: stretch; + margin-bottom: 0.25rem; + text-align: center; } + .menu.icon-bottom li a, .menu.nested.icon-bottom li a { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-flow: column nowrap; + -ms-flex-flow: column nowrap; + flex-flow: column nowrap; } + .menu.icon-bottom li a img, + .menu.icon-bottom li a i, + .menu.icon-bottom li a svg, .menu.nested.icon-bottom li a img, + .menu.nested.icon-bottom li a i, + .menu.nested.icon-bottom li a svg { + -webkit-align-self: stretch; + -ms-flex-item-align: stretch; + align-self: stretch; + margin-bottom: 0.25rem; + text-align: center; } + .menu .is-active > a { + background: #1779ba; + color: #fefefe; } + .menu .active > a { + background: #1779ba; + color: #fefefe; } + .menu.align-left { + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; } + .menu.align-right li { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + .menu.align-right li .submenu li { + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; } + .menu.align-right.vertical li { + display: block; + text-align: right; } + .menu.align-right.vertical li .submenu li { + text-align: right; } + .menu.align-right.icon-top li a img, + .menu.align-right.icon-top li a i, + .menu.align-right.icon-top li a svg, .menu.align-right.icon-bottom li a img, + .menu.align-right.icon-bottom li a i, + .menu.align-right.icon-bottom li a svg { + text-align: right; } + .menu.align-right .nested { + margin-right: 1rem; + margin-left: 0; } + .menu.align-center li { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + .menu.align-center li .submenu li { + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; } + .menu .menu-text { + padding: 0.7rem 1rem; + font-weight: bold; + line-height: 1; + color: inherit; } + +.menu-centered > .menu { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + .menu-centered > .menu li { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + .menu-centered > .menu li .submenu li { + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; } + +.no-js [data-responsive-menu] ul { + display: none; } + +.menu-icon { + position: relative; + display: inline-block; + vertical-align: middle; + width: 20px; + height: 16px; + cursor: pointer; } + .menu-icon::after { + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + height: 2px; + background: #fefefe; + -webkit-box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe; + box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe; + content: ''; } + .menu-icon:hover::after { + background: #cacaca; + -webkit-box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca; + box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca; } + +.menu-icon.dark { + position: relative; + display: inline-block; + vertical-align: middle; + width: 20px; + height: 16px; + cursor: pointer; } + .menu-icon.dark::after { + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + height: 2px; + background: #0a0a0a; + -webkit-box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a; + box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a; + content: ''; } + .menu-icon.dark:hover::after { + background: #8a8a8a; + -webkit-box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; + box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; } + +.accordion-menu li { + width: 100%; } + +.accordion-menu a { + padding: 0.7rem 1rem; } + +.accordion-menu .is-accordion-submenu a { + padding: 0.7rem 1rem; } + +.accordion-menu .nested.is-accordion-submenu { + margin-right: 0; + margin-left: 1rem; } + +.accordion-menu.align-right .nested.is-accordion-submenu { + margin-right: 1rem; + margin-left: 0; } + +.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) > a { + position: relative; } + .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-bottom-width: 0; + border-color: #1779ba transparent transparent; + position: absolute; + top: 50%; + margin-top: -3px; + right: 1rem; } + +.accordion-menu.align-left .is-accordion-submenu-parent > a::after { + right: 1rem; + left: auto; } + +.accordion-menu.align-right .is-accordion-submenu-parent > a::after { + right: auto; + left: 1rem; } + +.accordion-menu .is-accordion-submenu-parent[aria-expanded='true'] > a::after { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; } + +.is-accordion-submenu-parent { + position: relative; } + +.has-submenu-toggle > a { + margin-right: 40px; } + +.submenu-toggle { + position: absolute; + top: 0; + right: 0; + width: 40px; + height: 40px; + cursor: pointer; } + .submenu-toggle::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-bottom-width: 0; + border-color: #1779ba transparent transparent; + top: 0; + bottom: 0; + margin: auto; } + +.submenu-toggle[aria-expanded='true']::after { + -webkit-transform: scaleY(-1); + -ms-transform: scaleY(-1); + transform: scaleY(-1); + -webkit-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; } + +.submenu-toggle-text { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; } + +.is-drilldown { + position: relative; + overflow: hidden; } + .is-drilldown li { + display: block; } + .is-drilldown.animate-height { + -webkit-transition: height 0.5s; + transition: height 0.5s; } + +.drilldown a { + padding: 0.7rem 1rem; + background: #fefefe; } + +.drilldown .is-drilldown-submenu { + position: absolute; + top: 0; + left: 100%; + z-index: -1; + width: 100%; + background: #fefefe; + -webkit-transition: -webkit-transform 0.15s linear; + transition: -webkit-transform 0.15s linear; + transition: transform 0.15s linear; + transition: transform 0.15s linear, -webkit-transform 0.15s linear; } + .drilldown .is-drilldown-submenu.is-active { + z-index: 1; + display: block; + -webkit-transform: translateX(-100%); + -ms-transform: translateX(-100%); + transform: translateX(-100%); } + .drilldown .is-drilldown-submenu.is-closing { + -webkit-transform: translateX(100%); + -ms-transform: translateX(100%); + transform: translateX(100%); } + .drilldown .is-drilldown-submenu a { + padding: 0.7rem 1rem; } + +.drilldown .nested.is-drilldown-submenu { + margin-right: 0; + margin-left: 0; } + +.drilldown .drilldown-submenu-cover-previous { + min-height: 100%; } + +.drilldown .is-drilldown-submenu-parent > a { + position: relative; } + .drilldown .is-drilldown-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-right-width: 0; + border-color: transparent transparent transparent #1779ba; + position: absolute; + top: 50%; + margin-top: -6px; + right: 1rem; } + +.drilldown.align-left .is-drilldown-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-right-width: 0; + border-color: transparent transparent transparent #1779ba; + right: 1rem; + left: auto; } + +.drilldown.align-right .is-drilldown-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-left-width: 0; + border-color: transparent #1779ba transparent transparent; + right: auto; + left: 1rem; } + +.drilldown .js-drilldown-back > a::before { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-left-width: 0; + border-color: transparent #1779ba transparent transparent; + display: inline-block; + vertical-align: middle; + margin-right: 0.75rem; } + +.dropdown.menu > li.opens-left > .is-dropdown-submenu { + top: 100%; + right: 0; + left: auto; } + +.dropdown.menu > li.opens-right > .is-dropdown-submenu { + top: 100%; + right: auto; + left: 0; } + +.dropdown.menu > li.is-dropdown-submenu-parent > a { + position: relative; + padding-right: 1.5rem; } + +.dropdown.menu > li.is-dropdown-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-bottom-width: 0; + border-color: #1779ba transparent transparent; + right: 5px; + left: auto; + margin-top: -3px; } + +[data-whatinput='mouse'] .dropdown.menu a { + outline: 0; } + +.dropdown.menu > li > a { + padding: 0.7rem 1rem; } + +.dropdown.menu > li.is-active > a { + background: transparent; + color: #1779ba; } + +.no-js .dropdown.menu ul { + display: none; } + +.dropdown.menu .nested.is-dropdown-submenu { + margin-right: 0; + margin-left: 0; } + +.dropdown.menu.vertical > li .is-dropdown-submenu { + top: 0; } + +.dropdown.menu.vertical > li.opens-left > .is-dropdown-submenu { + top: 0; + right: 100%; + left: auto; } + +.dropdown.menu.vertical > li.opens-right > .is-dropdown-submenu { + right: auto; + left: 100%; } + +.dropdown.menu.vertical > li > a::after { + right: 14px; } + +.dropdown.menu.vertical > li.opens-left > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-left-width: 0; + border-color: transparent #1779ba transparent transparent; + right: auto; + left: 5px; } + +.dropdown.menu.vertical > li.opens-right > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-right-width: 0; + border-color: transparent transparent transparent #1779ba; } + +@media print, screen and (min-width: 40em) { + .dropdown.menu.medium-horizontal > li.opens-left > .is-dropdown-submenu { + top: 100%; + right: 0; + left: auto; } + .dropdown.menu.medium-horizontal > li.opens-right > .is-dropdown-submenu { + top: 100%; + right: auto; + left: 0; } + .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a { + position: relative; + padding-right: 1.5rem; } + .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-bottom-width: 0; + border-color: #1779ba transparent transparent; + right: 5px; + left: auto; + margin-top: -3px; } + .dropdown.menu.medium-vertical > li .is-dropdown-submenu { + top: 0; } + .dropdown.menu.medium-vertical > li.opens-left > .is-dropdown-submenu { + top: 0; + right: 100%; + left: auto; } + .dropdown.menu.medium-vertical > li.opens-right > .is-dropdown-submenu { + right: auto; + left: 100%; } + .dropdown.menu.medium-vertical > li > a::after { + right: 14px; } + .dropdown.menu.medium-vertical > li.opens-left > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-left-width: 0; + border-color: transparent #1779ba transparent transparent; + right: auto; + left: 5px; } + .dropdown.menu.medium-vertical > li.opens-right > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-right-width: 0; + border-color: transparent transparent transparent #1779ba; } } + +@media print, screen and (min-width: 64em) { + .dropdown.menu.large-horizontal > li.opens-left > .is-dropdown-submenu { + top: 100%; + right: 0; + left: auto; } + .dropdown.menu.large-horizontal > li.opens-right > .is-dropdown-submenu { + top: 100%; + right: auto; + left: 0; } + .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a { + position: relative; + padding-right: 1.5rem; } + .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-bottom-width: 0; + border-color: #1779ba transparent transparent; + right: 5px; + left: auto; + margin-top: -3px; } + .dropdown.menu.large-vertical > li .is-dropdown-submenu { + top: 0; } + .dropdown.menu.large-vertical > li.opens-left > .is-dropdown-submenu { + top: 0; + right: 100%; + left: auto; } + .dropdown.menu.large-vertical > li.opens-right > .is-dropdown-submenu { + right: auto; + left: 100%; } + .dropdown.menu.large-vertical > li > a::after { + right: 14px; } + .dropdown.menu.large-vertical > li.opens-left > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-left-width: 0; + border-color: transparent #1779ba transparent transparent; + right: auto; + left: 5px; } + .dropdown.menu.large-vertical > li.opens-right > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-right-width: 0; + border-color: transparent transparent transparent #1779ba; } } + +.dropdown.menu.align-right .is-dropdown-submenu.first-sub { + top: 100%; + right: 0; + left: auto; } + +.is-dropdown-menu.vertical { + width: 100px; } + .is-dropdown-menu.vertical.align-right { + float: right; } + +.is-dropdown-submenu-parent { + position: relative; } + .is-dropdown-submenu-parent a::after { + position: absolute; + top: 50%; + right: 5px; + left: auto; + margin-top: -6px; } + .is-dropdown-submenu-parent.opens-inner > .is-dropdown-submenu { + top: 100%; + left: auto; } + .is-dropdown-submenu-parent.opens-left > .is-dropdown-submenu { + right: 100%; + left: auto; } + .is-dropdown-submenu-parent.opens-right > .is-dropdown-submenu { + right: auto; + left: 100%; } + +.is-dropdown-submenu { + position: absolute; + top: 0; + left: 100%; + z-index: 1; + display: none; + min-width: 200px; + border: 1px solid #cacaca; + background: #fefefe; } + .dropdown .is-dropdown-submenu a { + padding: 0.7rem 1rem; } + .is-dropdown-submenu .is-dropdown-submenu-parent > a::after { + right: 14px; } + .is-dropdown-submenu .is-dropdown-submenu-parent.opens-left > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-left-width: 0; + border-color: transparent #1779ba transparent transparent; + right: auto; + left: 5px; } + .is-dropdown-submenu .is-dropdown-submenu-parent.opens-right > a::after { + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 6px; + content: ''; + border-right-width: 0; + border-color: transparent transparent transparent #1779ba; } + .is-dropdown-submenu .is-dropdown-submenu { + margin-top: -1px; } + .is-dropdown-submenu > li { + width: 100%; } + .is-dropdown-submenu.js-dropdown-active { + display: block; } + +.is-off-canvas-open { + overflow: hidden; } + +.js-off-canvas-overlay { + position: absolute; + top: 0; + left: 0; + z-index: 11; + width: 100%; + height: 100%; + -webkit-transition: opacity 0.5s ease, visibility 0.5s ease; + transition: opacity 0.5s ease, visibility 0.5s ease; + background: rgba(254, 254, 254, 0.25); + opacity: 0; + visibility: hidden; + overflow: hidden; } + .js-off-canvas-overlay.is-visible { + opacity: 1; + visibility: visible; } + .js-off-canvas-overlay.is-closable { + cursor: pointer; } + .js-off-canvas-overlay.is-overlay-absolute { + position: absolute; } + .js-off-canvas-overlay.is-overlay-fixed { + position: fixed; } + +.off-canvas-wrapper { + position: relative; + overflow: hidden; } + +.off-canvas { + position: fixed; + z-index: 12; + -webkit-transition: -webkit-transform 0.5s ease; + transition: -webkit-transform 0.5s ease; + transition: transform 0.5s ease; + transition: transform 0.5s ease, -webkit-transform 0.5s ease; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + background: #e6e6e6; } + [data-whatinput='mouse'] .off-canvas { + outline: 0; } + .off-canvas.is-transition-push { + z-index: 12; } + .off-canvas.is-closed { + visibility: hidden; } + .off-canvas.is-transition-overlap { + z-index: 13; } + .off-canvas.is-transition-overlap.is-open { + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); } + .off-canvas.is-open { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + +.off-canvas-absolute { + position: absolute; + z-index: 12; + -webkit-transition: -webkit-transform 0.5s ease; + transition: -webkit-transform 0.5s ease; + transition: transform 0.5s ease; + transition: transform 0.5s ease, -webkit-transform 0.5s ease; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + background: #e6e6e6; } + [data-whatinput='mouse'] .off-canvas-absolute { + outline: 0; } + .off-canvas-absolute.is-transition-push { + z-index: 12; } + .off-canvas-absolute.is-closed { + visibility: hidden; } + .off-canvas-absolute.is-transition-overlap { + z-index: 13; } + .off-canvas-absolute.is-transition-overlap.is-open { + -webkit-box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); + box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); } + .off-canvas-absolute.is-open { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + +.position-left { + top: 0; + left: 0; + height: 100%; + overflow-y: auto; + width: 250px; + -webkit-transform: translateX(-250px); + -ms-transform: translateX(-250px); + transform: translateX(-250px); } + .off-canvas-content .off-canvas.position-left { + -webkit-transform: translateX(-250px); + -ms-transform: translateX(-250px); + transform: translateX(-250px); } + .off-canvas-content .off-canvas.position-left.is-transition-overlap.is-open { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + .off-canvas-content.is-open-left.has-transition-push { + -webkit-transform: translateX(250px); + -ms-transform: translateX(250px); + transform: translateX(250px); } + .position-left.is-transition-push { + -webkit-box-shadow: inset -13px 0 20px -13px rgba(10, 10, 10, 0.25); + box-shadow: inset -13px 0 20px -13px rgba(10, 10, 10, 0.25); } + +.position-right { + top: 0; + right: 0; + height: 100%; + overflow-y: auto; + width: 250px; + -webkit-transform: translateX(250px); + -ms-transform: translateX(250px); + transform: translateX(250px); } + .off-canvas-content .off-canvas.position-right { + -webkit-transform: translateX(250px); + -ms-transform: translateX(250px); + transform: translateX(250px); } + .off-canvas-content .off-canvas.position-right.is-transition-overlap.is-open { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + .off-canvas-content.is-open-right.has-transition-push { + -webkit-transform: translateX(-250px); + -ms-transform: translateX(-250px); + transform: translateX(-250px); } + .position-right.is-transition-push { + -webkit-box-shadow: inset 13px 0 20px -13px rgba(10, 10, 10, 0.25); + box-shadow: inset 13px 0 20px -13px rgba(10, 10, 10, 0.25); } + +.position-top { + top: 0; + left: 0; + width: 100%; + overflow-x: auto; + height: 250px; + -webkit-transform: translateY(-250px); + -ms-transform: translateY(-250px); + transform: translateY(-250px); } + .off-canvas-content .off-canvas.position-top { + -webkit-transform: translateY(-250px); + -ms-transform: translateY(-250px); + transform: translateY(-250px); } + .off-canvas-content .off-canvas.position-top.is-transition-overlap.is-open { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + .off-canvas-content.is-open-top.has-transition-push { + -webkit-transform: translateY(250px); + -ms-transform: translateY(250px); + transform: translateY(250px); } + .position-top.is-transition-push { + -webkit-box-shadow: inset 0 -13px 20px -13px rgba(10, 10, 10, 0.25); + box-shadow: inset 0 -13px 20px -13px rgba(10, 10, 10, 0.25); } + +.position-bottom { + bottom: 0; + left: 0; + width: 100%; + overflow-x: auto; + height: 250px; + -webkit-transform: translateY(250px); + -ms-transform: translateY(250px); + transform: translateY(250px); } + .off-canvas-content .off-canvas.position-bottom { + -webkit-transform: translateY(250px); + -ms-transform: translateY(250px); + transform: translateY(250px); } + .off-canvas-content .off-canvas.position-bottom.is-transition-overlap.is-open { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + .off-canvas-content.is-open-bottom.has-transition-push { + -webkit-transform: translateY(-250px); + -ms-transform: translateY(-250px); + transform: translateY(-250px); } + .position-bottom.is-transition-push { + -webkit-box-shadow: inset 0 13px 20px -13px rgba(10, 10, 10, 0.25); + box-shadow: inset 0 13px 20px -13px rgba(10, 10, 10, 0.25); } + +.off-canvas-content { + -webkit-transform: none; + -ms-transform: none; + transform: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + .off-canvas-content.has-transition-overlap, .off-canvas-content.has-transition-push { + -webkit-transition: -webkit-transform 0.5s ease; + transition: -webkit-transform 0.5s ease; + transition: transform 0.5s ease; + transition: transform 0.5s ease, -webkit-transform 0.5s ease; } + .off-canvas-content.has-transition-push { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + .off-canvas-content .off-canvas.is-open { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + +@media print, screen and (min-width: 40em) { + .position-left.reveal-for-medium { + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 12; + -webkit-transition: none; + transition: none; + visibility: visible; } + .position-left.reveal-for-medium .close-button { + display: none; } + .off-canvas-content .position-left.reveal-for-medium { + -webkit-transform: none; + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-left { + margin-left: 250px; } + .position-left.reveal-for-medium ~ .off-canvas-content { + margin-left: 250px; } + .position-right.reveal-for-medium { + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 12; + -webkit-transition: none; + transition: none; + visibility: visible; } + .position-right.reveal-for-medium .close-button { + display: none; } + .off-canvas-content .position-right.reveal-for-medium { + -webkit-transform: none; + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-right { + margin-right: 250px; } + .position-right.reveal-for-medium ~ .off-canvas-content { + margin-right: 250px; } + .position-top.reveal-for-medium { + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 12; + -webkit-transition: none; + transition: none; + visibility: visible; } + .position-top.reveal-for-medium .close-button { + display: none; } + .off-canvas-content .position-top.reveal-for-medium { + -webkit-transform: none; + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-top { + margin-top: 250px; } + .position-top.reveal-for-medium ~ .off-canvas-content { + margin-top: 250px; } + .position-bottom.reveal-for-medium { + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 12; + -webkit-transition: none; + transition: none; + visibility: visible; } + .position-bottom.reveal-for-medium .close-button { + display: none; } + .off-canvas-content .position-bottom.reveal-for-medium { + -webkit-transform: none; + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-bottom { + margin-bottom: 250px; } + .position-bottom.reveal-for-medium ~ .off-canvas-content { + margin-bottom: 250px; } } + +@media print, screen and (min-width: 64em) { + .position-left.reveal-for-large { + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 12; + -webkit-transition: none; + transition: none; + visibility: visible; } + .position-left.reveal-for-large .close-button { + display: none; } + .off-canvas-content .position-left.reveal-for-large { + -webkit-transform: none; + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-left { + margin-left: 250px; } + .position-left.reveal-for-large ~ .off-canvas-content { + margin-left: 250px; } + .position-right.reveal-for-large { + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 12; + -webkit-transition: none; + transition: none; + visibility: visible; } + .position-right.reveal-for-large .close-button { + display: none; } + .off-canvas-content .position-right.reveal-for-large { + -webkit-transform: none; + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-right { + margin-right: 250px; } + .position-right.reveal-for-large ~ .off-canvas-content { + margin-right: 250px; } + .position-top.reveal-for-large { + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 12; + -webkit-transition: none; + transition: none; + visibility: visible; } + .position-top.reveal-for-large .close-button { + display: none; } + .off-canvas-content .position-top.reveal-for-large { + -webkit-transform: none; + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-top { + margin-top: 250px; } + .position-top.reveal-for-large ~ .off-canvas-content { + margin-top: 250px; } + .position-bottom.reveal-for-large { + -webkit-transform: none; + -ms-transform: none; + transform: none; + z-index: 12; + -webkit-transition: none; + transition: none; + visibility: visible; } + .position-bottom.reveal-for-large .close-button { + display: none; } + .off-canvas-content .position-bottom.reveal-for-large { + -webkit-transform: none; + -ms-transform: none; + transform: none; } + .off-canvas-content.has-reveal-bottom { + margin-bottom: 250px; } + .position-bottom.reveal-for-large ~ .off-canvas-content { + margin-bottom: 250px; } } + +@media print, screen and (min-width: 40em) { + .off-canvas.in-canvas-for-medium { + visibility: visible; + height: auto; + position: static; + background: none; + width: auto; + overflow: visible; + -webkit-transition: none; + transition: none; } + .off-canvas.in-canvas-for-medium.position-left, .off-canvas.in-canvas-for-medium.position-right, .off-canvas.in-canvas-for-medium.position-top, .off-canvas.in-canvas-for-medium.position-bottom { + -webkit-box-shadow: none; + box-shadow: none; + -webkit-transform: none; + -ms-transform: none; + transform: none; } + .off-canvas.in-canvas-for-medium .close-button { + display: none; } } + +@media print, screen and (min-width: 64em) { + .off-canvas.in-canvas-for-large { + visibility: visible; + height: auto; + position: static; + background: none; + width: auto; + overflow: visible; + -webkit-transition: none; + transition: none; } + .off-canvas.in-canvas-for-large.position-left, .off-canvas.in-canvas-for-large.position-right, .off-canvas.in-canvas-for-large.position-top, .off-canvas.in-canvas-for-large.position-bottom { + -webkit-box-shadow: none; + box-shadow: none; + -webkit-transform: none; + -ms-transform: none; + transform: none; } + .off-canvas.in-canvas-for-large .close-button { + display: none; } } + +html.is-reveal-open { + position: fixed; + width: 100%; + overflow-y: hidden; } + html.is-reveal-open.zf-has-scroll { + overflow-y: scroll; } + html.is-reveal-open body { + overflow-y: hidden; } + +.reveal-overlay { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1005; + display: none; + background-color: rgba(10, 10, 10, 0.45); + overflow-y: auto; } + +.reveal { + z-index: 1006; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + display: none; + padding: 1rem; + border: 1px solid #cacaca; + border-radius: 0; + background-color: #fefefe; + position: relative; + top: 100px; + margin-right: auto; + margin-left: auto; + overflow-y: auto; } + [data-whatinput='mouse'] .reveal { + outline: 0; } + @media print, screen and (min-width: 40em) { + .reveal { + min-height: 0; } } + .reveal .column { + min-width: 0; } + .reveal > :last-child { + margin-bottom: 0; } + @media print, screen and (min-width: 40em) { + .reveal { + width: 600px; + max-width: 75rem; } } + .reveal.collapse { + padding: 0; } + @media print, screen and (min-width: 40em) { + .reveal.tiny { + width: 30%; + max-width: 75rem; } } + @media print, screen and (min-width: 40em) { + .reveal.small { + width: 50%; + max-width: 75rem; } } + @media print, screen and (min-width: 40em) { + .reveal.large { + width: 90%; + max-width: 75rem; } } + .reveal.full { + top: 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + max-width: none; + height: 100%; + min-height: 100%; + margin-left: 0; + border: 0; + border-radius: 0; } + @media print, screen and (max-width: 39.99875em) { + .reveal { + top: 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + max-width: none; + height: 100%; + min-height: 100%; + margin-left: 0; + border: 0; + border-radius: 0; } } + .reveal.without-overlay { + position: fixed; } + +.sticky-container { + position: relative; } + +.sticky { + position: relative; + z-index: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + +.sticky.is-stuck { + position: fixed; + z-index: 5; + width: 100%; } + .sticky.is-stuck.is-at-top { + top: 0; } + .sticky.is-stuck.is-at-bottom { + bottom: 0; } + +.sticky.is-anchored { + position: relative; + right: auto; + left: auto; } + .sticky.is-anchored.is-at-bottom { + bottom: 0; } + +.title-bar { + padding: 0.5rem; + background: #0a0a0a; + color: #fefefe; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + .title-bar .menu-icon { + margin-left: 0.25rem; + margin-right: 0.25rem; } + +.title-bar-left, +.title-bar-right { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0px; + -ms-flex: 1 1 0px; + flex: 1 1 0px; } + +.title-bar-right { + text-align: right; } + +.title-bar-title { + display: inline-block; + vertical-align: middle; + font-weight: bold; } + +.top-bar { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + padding: 0.5rem; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .top-bar, + .top-bar ul { + background-color: #e6e6e6; } + .top-bar input { + max-width: 200px; + margin-right: 1rem; } + .top-bar .input-group-field { + width: 100%; + margin-right: 0; } + .top-bar input.button { + width: auto; } + .top-bar .top-bar-left, + .top-bar .top-bar-right { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + @media print, screen and (min-width: 40em) { + .top-bar { + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .top-bar .top-bar-left { + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + margin-right: auto; } + .top-bar .top-bar-right { + -webkit-box-flex: 0; + -webkit-flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + margin-left: auto; } } + @media print, screen and (max-width: 63.99875em) { + .top-bar.stacked-for-medium { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .top-bar.stacked-for-medium .top-bar-left, + .top-bar.stacked-for-medium .top-bar-right { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } } + @media print, screen and (max-width: 74.99875em) { + .top-bar.stacked-for-large { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + .top-bar.stacked-for-large .top-bar-left, + .top-bar.stacked-for-large .top-bar-right { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } } + +.top-bar-title { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + margin: 0.5rem 1rem 0.5rem 0; } + +.top-bar-left, +.top-bar-right { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; } + +.float-left { + float: left !important; } + +.float-right { + float: right !important; } + +.float-center { + display: block; + margin-right: auto; + margin-left: auto; } + +.clearfix::before, .clearfix::after { + display: table; + content: ' '; + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + +.clearfix::after { + clear: both; } + +.align-left { + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; } + +.align-right { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + +.align-center { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + +.align-justify { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; } + +.align-spaced { + -webkit-justify-content: space-around; + -ms-flex-pack: distribute; + justify-content: space-around; } + +.align-left.vertical.menu > li > a { + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; } + +.align-right.vertical.menu > li > a { + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; } + +.align-center.vertical.menu > li > a { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; } + +.align-top { + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; } + +.align-self-top { + -webkit-align-self: flex-start; + -ms-flex-item-align: start; + align-self: flex-start; } + +.align-bottom { + -webkit-box-align: end; + -webkit-align-items: flex-end; + -ms-flex-align: end; + align-items: flex-end; } + +.align-self-bottom { + -webkit-align-self: flex-end; + -ms-flex-item-align: end; + align-self: flex-end; } + +.align-middle { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + +.align-self-middle { + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; } + +.align-stretch { + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; } + +.align-self-stretch { + -webkit-align-self: stretch; + -ms-flex-item-align: stretch; + align-self: stretch; } + +.align-center-middle { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-align-content: center; + -ms-flex-line-pack: center; + align-content: center; } + +.small-order-1 { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + +.small-order-2 { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + +.small-order-3 { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + +.small-order-4 { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + +.small-order-5 { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + +.small-order-6 { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } + +@media print, screen and (min-width: 40em) { + .medium-order-1 { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + .medium-order-2 { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + .medium-order-3 { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + .medium-order-4 { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + .medium-order-5 { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + .medium-order-6 { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } } + +@media print, screen and (min-width: 64em) { + .large-order-1 { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + .large-order-2 { + -webkit-box-ordinal-group: 3; + -webkit-order: 2; + -ms-flex-order: 2; + order: 2; } + .large-order-3 { + -webkit-box-ordinal-group: 4; + -webkit-order: 3; + -ms-flex-order: 3; + order: 3; } + .large-order-4 { + -webkit-box-ordinal-group: 5; + -webkit-order: 4; + -ms-flex-order: 4; + order: 4; } + .large-order-5 { + -webkit-box-ordinal-group: 6; + -webkit-order: 5; + -ms-flex-order: 5; + order: 5; } + .large-order-6 { + -webkit-box-ordinal-group: 7; + -webkit-order: 6; + -ms-flex-order: 6; + order: 6; } } + +.flex-container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + +.flex-child-auto { + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; } + +.flex-child-grow { + -webkit-box-flex: 1; + -webkit-flex: 1 0 auto; + -ms-flex: 1 0 auto; + flex: 1 0 auto; } + +.flex-child-shrink { + -webkit-box-flex: 0; + -webkit-flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; } + +.flex-dir-row { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + +.flex-dir-row-reverse { + -webkit-box-orient: horizontal; + -webkit-box-direction: reverse; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + +.flex-dir-column { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + +.flex-dir-column-reverse { + -webkit-box-orient: vertical; + -webkit-box-direction: reverse; + -webkit-flex-direction: column-reverse; + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; } + +@media print, screen and (min-width: 40em) { + .medium-flex-container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + .medium-flex-child-auto { + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; } + .medium-flex-child-grow { + -webkit-box-flex: 1; + -webkit-flex: 1 0 auto; + -ms-flex: 1 0 auto; + flex: 1 0 auto; } + .medium-flex-child-shrink { + -webkit-box-flex: 0; + -webkit-flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; } + .medium-flex-dir-row { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + .medium-flex-dir-row-reverse { + -webkit-box-orient: horizontal; + -webkit-box-direction: reverse; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + .medium-flex-dir-column { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + .medium-flex-dir-column-reverse { + -webkit-box-orient: vertical; + -webkit-box-direction: reverse; + -webkit-flex-direction: column-reverse; + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; } } + +@media print, screen and (min-width: 64em) { + .large-flex-container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + .large-flex-child-auto { + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; } + .large-flex-child-grow { + -webkit-box-flex: 1; + -webkit-flex: 1 0 auto; + -ms-flex: 1 0 auto; + flex: 1 0 auto; } + .large-flex-child-shrink { + -webkit-box-flex: 0; + -webkit-flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; } + .large-flex-dir-row { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + .large-flex-dir-row-reverse { + -webkit-box-orient: horizontal; + -webkit-box-direction: reverse; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + .large-flex-dir-column { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; } + .large-flex-dir-column-reverse { + -webkit-box-orient: vertical; + -webkit-box-direction: reverse; + -webkit-flex-direction: column-reverse; + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; } } + +.hide { + display: none !important; } + +.invisible { + visibility: hidden; } + +.visible { + visibility: visible; } + +@media print, screen and (max-width: 39.99875em) { + .hide-for-small-only { + display: none !important; } } + +@media screen and (max-width: 0em), screen and (min-width: 40em) { + .show-for-small-only { + display: none !important; } } + +@media print, screen and (min-width: 40em) { + .hide-for-medium { + display: none !important; } } + +@media screen and (max-width: 39.99875em) { + .show-for-medium { + display: none !important; } } + +@media print, screen and (min-width: 40em) and (max-width: 63.99875em) { + .hide-for-medium-only { + display: none !important; } } + +@media screen and (max-width: 39.99875em), screen and (min-width: 64em) { + .show-for-medium-only { + display: none !important; } } + +@media print, screen and (min-width: 64em) { + .hide-for-large { + display: none !important; } } + +@media screen and (max-width: 63.99875em) { + .show-for-large { + display: none !important; } } + +@media print, screen and (min-width: 64em) and (max-width: 74.99875em) { + .hide-for-large-only { + display: none !important; } } + +@media screen and (max-width: 63.99875em), screen and (min-width: 75em) { + .show-for-large-only { + display: none !important; } } + +.show-for-sr, +.show-on-focus { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; } + +.show-on-focus:active, .show-on-focus:focus { + position: static !important; + width: auto !important; + height: auto !important; + overflow: visible !important; + clip: auto !important; + white-space: normal !important; } + +.show-for-landscape, +.hide-for-portrait { + display: block !important; } + @media screen and (orientation: landscape) { + .show-for-landscape, + .hide-for-portrait { + display: block !important; } } + @media screen and (orientation: portrait) { + .show-for-landscape, + .hide-for-portrait { + display: none !important; } } + +.hide-for-landscape, +.show-for-portrait { + display: none !important; } + @media screen and (orientation: landscape) { + .hide-for-landscape, + .show-for-portrait { + display: none !important; } } + @media screen and (orientation: portrait) { + .hide-for-landscape, + .show-for-portrait { + display: block !important; } } + +/*# sourceMappingURL=foundation.css.map */ diff --git a/pkgs/csslib/third_party/foundation/foundation.min.css b/pkgs/csslib/third_party/foundation/foundation.min.css new file mode 100644 index 000000000..dec4fbf63 --- /dev/null +++ b/pkgs/csslib/third_party/foundation/foundation.min.css @@ -0,0 +1,2 @@ +@charset "UTF-8";@media print,screen and (min-width:40em){.reveal,.reveal.large,.reveal.small,.reveal.tiny{right:auto;left:auto;margin:0 auto}}/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:.67em 0}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}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{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-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.foundation-mq{font-family:"small=0em&medium=40em&large=64em&xlarge=75em&xxlarge=90em"}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:100%}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;padding:0;background:#fefefe;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:400;line-height:1.5;color:#0a0a0a;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle;max-width:100%;height:auto;-ms-interpolation-mode:bicubic}textarea{height:auto;min-height:50px;border-radius:0}select{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;border-radius:0}.map_canvas embed,.map_canvas img,.map_canvas object,.mqa-display embed,.mqa-display img,.mqa-display object{max-width:none!important}button{padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;border-radius:0;background:0 0;line-height:1;cursor:auto}[data-whatinput=mouse] button{outline:0}pre{overflow:auto}button,input,optgroup,select,textarea{font-family:inherit}.is-visible{display:block!important}.is-hidden{display:none!important}[type=color],[type=date],[type=datetime-local],[type=datetime],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],textarea{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:2.4375rem;margin:0 0 1rem;padding:.5rem;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;-webkit-box-shadow:inset 0 1px 2px rgba(10,10,10,.1);box-shadow:inset 0 1px 2px rgba(10,10,10,.1);font-family:inherit;font-size:1rem;font-weight:400;line-height:1.5;color:#0a0a0a;-webkit-transition:border-color .25s ease-in-out,-webkit-box-shadow .5s;transition:border-color .25s ease-in-out,-webkit-box-shadow .5s;transition:box-shadow .5s,border-color .25s ease-in-out;transition:box-shadow .5s,border-color .25s ease-in-out,-webkit-box-shadow .5s;-webkit-appearance:none;-moz-appearance:none;appearance:none}[type=color]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=datetime]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,textarea:focus{outline:0;border:1px solid #8a8a8a;background-color:#fefefe;-webkit-box-shadow:0 0 5px #cacaca;box-shadow:0 0 5px #cacaca;-webkit-transition:border-color .25s ease-in-out,-webkit-box-shadow .5s;transition:border-color .25s ease-in-out,-webkit-box-shadow .5s;transition:box-shadow .5s,border-color .25s ease-in-out;transition:box-shadow .5s,border-color .25s ease-in-out,-webkit-box-shadow .5s}textarea{max-width:100%}textarea[rows]{height:auto}input:disabled,input[readonly],textarea:disabled,textarea[readonly]{background-color:#e6e6e6;cursor:not-allowed}[type=button],[type=submit]{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0}input[type=search]{-webkit-box-sizing:border-box;box-sizing:border-box}::-webkit-input-placeholder{color:#cacaca}::-moz-placeholder{color:#cacaca}:-ms-input-placeholder{color:#cacaca}::-ms-input-placeholder{color:#cacaca}::placeholder{color:#cacaca}[type=checkbox],[type=file],[type=radio]{margin:0 0 1rem}[type=checkbox]+label,[type=radio]+label{display:inline-block;vertical-align:baseline;margin-left:.5rem;margin-right:1rem;margin-bottom:0}[type=checkbox]+label[for],[type=radio]+label[for]{cursor:pointer}label>[type=checkbox],label>[type=radio]{margin-right:.5rem}[type=file]{width:100%}label{display:block;margin:0;font-size:.875rem;font-weight:400;line-height:1.8;color:#0a0a0a}label.middle{margin:0 0 1rem;line-height:1.5;padding:.5625rem 0}.help-text{margin-top:-.5rem;font-size:.8125rem;font-style:italic;color:#0a0a0a}.input-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;margin-bottom:1rem;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.input-group>:first-child,.input-group>:first-child.input-group-button>*{border-radius:0}.input-group>:last-child,.input-group>:last-child.input-group-button>*{border-radius:0}.input-group-button,.input-group-button a,.input-group-button button,.input-group-button input,.input-group-button label,.input-group-field,.input-group-label{margin:0;white-space:nowrap}.input-group-label{padding:0 1rem;border:1px solid #cacaca;background:#e6e6e6;color:#0a0a0a;text-align:center;white-space:nowrap;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.input-group-label:first-child{border-right:0}.input-group-label:last-child{border-left:0}.input-group-field{border-radius:0;-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;min-width:0}.input-group-button{padding-top:0;padding-bottom:0;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.input-group-button a,.input-group-button button,.input-group-button input,.input-group-button label{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;height:auto;padding-top:0;padding-bottom:0;font-size:1rem}fieldset{margin:0;padding:0;border:0}legend{max-width:100%;margin-bottom:.5rem}.fieldset{margin:1.125rem 0;padding:1.25rem;border:1px solid #cacaca}.fieldset legend{margin:0;margin-left:-.1875rem;padding:0 .1875rem}select{height:2.4375rem;margin:0 0 1rem;padding:.5rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;font-family:inherit;font-size:1rem;font-weight:400;line-height:1.5;color:#0a0a0a;background-image:url("data:image/svg+xml;utf8,");background-origin:content-box;background-position:right -1rem center;background-repeat:no-repeat;background-size:9px 6px;padding-right:1.5rem;-webkit-transition:border-color .25s ease-in-out,-webkit-box-shadow .5s;transition:border-color .25s ease-in-out,-webkit-box-shadow .5s;transition:box-shadow .5s,border-color .25s ease-in-out;transition:box-shadow .5s,border-color .25s ease-in-out,-webkit-box-shadow .5s}@media screen and (min-width:0\0){select{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg==)}}select:focus{outline:0;border:1px solid #8a8a8a;background-color:#fefefe;-webkit-box-shadow:0 0 5px #cacaca;box-shadow:0 0 5px #cacaca;-webkit-transition:border-color .25s ease-in-out,-webkit-box-shadow .5s;transition:border-color .25s ease-in-out,-webkit-box-shadow .5s;transition:box-shadow .5s,border-color .25s ease-in-out;transition:box-shadow .5s,border-color .25s ease-in-out,-webkit-box-shadow .5s}select:disabled{background-color:#e6e6e6;cursor:not-allowed}select::-ms-expand{display:none}select[multiple]{height:auto;background-image:none}select:not([multiple]){padding-top:0;padding-bottom:0}.is-invalid-input:not(:focus){border-color:#cc4b37;background-color:#f9ecea}.is-invalid-input:not(:focus)::-webkit-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::-moz-placeholder{color:#cc4b37}.is-invalid-input:not(:focus):-ms-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::-ms-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::placeholder{color:#cc4b37}.is-invalid-label{color:#cc4b37}.form-error{display:none;margin-top:-.5rem;margin-bottom:1rem;font-size:.75rem;font-weight:700;color:#cc4b37}.form-error.is-visible{display:block}blockquote,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,li,ol,p,pre,td,th,ul{margin:0;padding:0}p{margin-bottom:1rem;font-size:inherit;line-height:1.6;text-rendering:optimizeLegibility}em,i{font-style:italic;line-height:inherit}b,strong{font-weight:700;line-height:inherit}small{font-size:80%;line-height:inherit}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:400;color:inherit;text-rendering:optimizeLegibility}.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{line-height:0;color:#cacaca}.h1,h1{font-size:1.5rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}.h2,h2{font-size:1.25rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}.h3,h3{font-size:1.1875rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}.h4,h4{font-size:1.125rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}.h5,h5{font-size:1.0625rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}.h6,h6{font-size:1rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}@media print,screen and (min-width:40em){.h1,h1{font-size:3rem}.h2,h2{font-size:2.5rem}.h3,h3{font-size:1.9375rem}.h4,h4{font-size:1.5625rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}}a{line-height:inherit;color:#1779ba;text-decoration:none;cursor:pointer}a:focus,a:hover{color:#1468a0}a img{border:0}hr{clear:both;max-width:75rem;height:0;margin:1.25rem auto;border-top:0;border-right:0;border-bottom:1px solid #cacaca;border-left:0}dl,ol,ul{margin-bottom:1rem;list-style-position:outside;line-height:1.6}li{font-size:inherit}ul{margin-left:1.25rem;list-style-type:disc}ol{margin-left:1.25rem}ol ol,ol ul,ul ol,ul ul{margin-left:1.25rem;margin-bottom:0}dl{margin-bottom:1rem}dl dt{margin-bottom:.3rem;font-weight:700}blockquote{margin:0 0 1rem;padding:.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #cacaca}blockquote,blockquote p{line-height:1.6;color:#8a8a8a}abbr,abbr[title]{border-bottom:1px dotted #0a0a0a;cursor:help;text-decoration:none}figure{margin:0}kbd{margin:0;padding:.125rem .25rem 0;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;color:#0a0a0a}.subheader{margin-top:.2rem;margin-bottom:.5rem;font-weight:400;line-height:1.4;color:#8a8a8a}.lead{font-size:125%;line-height:1.6}.stat{font-size:2.5rem;line-height:1}p+.stat{margin-top:-1rem}ol.no-bullet,ul.no-bullet{margin-left:0;list-style:none}.cite-block,cite{display:block;color:#8a8a8a;font-size:.8125rem}.cite-block:before,cite:before{content:"— "}.code-inline,code{border:1px solid #cacaca;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:400;color:#0a0a0a;display:inline;max-width:100%;word-wrap:break-word;padding:.125rem .3125rem .0625rem}.code-block{border:1px solid #cacaca;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:400;color:#0a0a0a;display:block;overflow:auto;white-space:pre;padding:1rem;margin-bottom:1.5rem}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}@media print,screen and (min-width:40em){.medium-text-left{text-align:left}.medium-text-right{text-align:right}.medium-text-center{text-align:center}.medium-text-justify{text-align:justify}}@media print,screen and (min-width:64em){.large-text-left{text-align:left}.large-text-right{text-align:right}.large-text-center{text-align:center}.large-text-justify{text-align:justify}}.show-for-print{display:none!important}@media print{*{background:0 0!important;color:#000!important;-webkit-print-color-adjust:economy;color-adjust:economy;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}.show-for-print{display:block!important}.hide-for-print{display:none!important}table.show-for-print{display:table!important}thead.show-for-print{display:table-header-group!important}tbody.show-for-print{display:table-row-group!important}tr.show-for-print{display:table-row!important}td.show-for-print{display:table-cell!important}th.show-for-print{display:table-cell!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}.ir a:after,a[href^='#']:after,a[href^='javascript:']:after{content:''}abbr[title]:after{content:" (" attr(title) ")"}blockquote,pre{border:1px solid #8a8a8a;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.print-break-inside{page-break-inside:auto}}.grid-container{padding-right:.625rem;padding-left:.625rem;max-width:75rem;margin-left:auto;margin-right:auto}@media print,screen and (min-width:40em){.grid-container{padding-right:.9375rem;padding-left:.9375rem}}.grid-container.fluid{padding-right:.625rem;padding-left:.625rem;max-width:100%;margin-left:auto;margin-right:auto}@media print,screen and (min-width:40em){.grid-container.fluid{padding-right:.9375rem;padding-left:.9375rem}}.grid-container.full{padding-right:0;padding-left:0;max-width:100%;margin-left:auto;margin-right:auto}.grid-x{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.cell{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;min-height:0;min-width:0;width:100%}.cell.auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.cell.shrink{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.auto{width:auto}.grid-x>.shrink{width:auto}.grid-x>.small-1,.grid-x>.small-10,.grid-x>.small-11,.grid-x>.small-12,.grid-x>.small-2,.grid-x>.small-3,.grid-x>.small-4,.grid-x>.small-5,.grid-x>.small-6,.grid-x>.small-7,.grid-x>.small-8,.grid-x>.small-9,.grid-x>.small-full,.grid-x>.small-shrink{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}@media print,screen and (min-width:40em){.grid-x>.medium-1,.grid-x>.medium-10,.grid-x>.medium-11,.grid-x>.medium-12,.grid-x>.medium-2,.grid-x>.medium-3,.grid-x>.medium-4,.grid-x>.medium-5,.grid-x>.medium-6,.grid-x>.medium-7,.grid-x>.medium-8,.grid-x>.medium-9,.grid-x>.medium-full,.grid-x>.medium-shrink{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print,screen and (min-width:64em){.grid-x>.large-1,.grid-x>.large-10,.grid-x>.large-11,.grid-x>.large-12,.grid-x>.large-2,.grid-x>.large-3,.grid-x>.large-4,.grid-x>.large-5,.grid-x>.large-6,.grid-x>.large-7,.grid-x>.large-8,.grid-x>.large-9,.grid-x>.large-full,.grid-x>.large-shrink{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}.grid-x>.small-1,.grid-x>.small-10,.grid-x>.small-11,.grid-x>.small-12,.grid-x>.small-2,.grid-x>.small-3,.grid-x>.small-4,.grid-x>.small-5,.grid-x>.small-6,.grid-x>.small-7,.grid-x>.small-8,.grid-x>.small-9{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.small-1{width:8.33333%}.grid-x>.small-2{width:16.66667%}.grid-x>.small-3{width:25%}.grid-x>.small-4{width:33.33333%}.grid-x>.small-5{width:41.66667%}.grid-x>.small-6{width:50%}.grid-x>.small-7{width:58.33333%}.grid-x>.small-8{width:66.66667%}.grid-x>.small-9{width:75%}.grid-x>.small-10{width:83.33333%}.grid-x>.small-11{width:91.66667%}.grid-x>.small-12{width:100%}@media print,screen and (min-width:40em){.grid-x>.medium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.medium-1,.grid-x>.medium-10,.grid-x>.medium-11,.grid-x>.medium-12,.grid-x>.medium-2,.grid-x>.medium-3,.grid-x>.medium-4,.grid-x>.medium-5,.grid-x>.medium-6,.grid-x>.medium-7,.grid-x>.medium-8,.grid-x>.medium-9,.grid-x>.medium-shrink{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.medium-shrink{width:auto}.grid-x>.medium-1{width:8.33333%}.grid-x>.medium-2{width:16.66667%}.grid-x>.medium-3{width:25%}.grid-x>.medium-4{width:33.33333%}.grid-x>.medium-5{width:41.66667%}.grid-x>.medium-6{width:50%}.grid-x>.medium-7{width:58.33333%}.grid-x>.medium-8{width:66.66667%}.grid-x>.medium-9{width:75%}.grid-x>.medium-10{width:83.33333%}.grid-x>.medium-11{width:91.66667%}.grid-x>.medium-12{width:100%}}@media print,screen and (min-width:64em){.grid-x>.large-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.large-1,.grid-x>.large-10,.grid-x>.large-11,.grid-x>.large-12,.grid-x>.large-2,.grid-x>.large-3,.grid-x>.large-4,.grid-x>.large-5,.grid-x>.large-6,.grid-x>.large-7,.grid-x>.large-8,.grid-x>.large-9,.grid-x>.large-shrink{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.large-shrink{width:auto}.grid-x>.large-1{width:8.33333%}.grid-x>.large-2{width:16.66667%}.grid-x>.large-3{width:25%}.grid-x>.large-4{width:33.33333%}.grid-x>.large-5{width:41.66667%}.grid-x>.large-6{width:50%}.grid-x>.large-7{width:58.33333%}.grid-x>.large-8{width:66.66667%}.grid-x>.large-9{width:75%}.grid-x>.large-10{width:83.33333%}.grid-x>.large-11{width:91.66667%}.grid-x>.large-12{width:100%}}.grid-margin-x:not(.grid-x)>.cell{width:auto}.grid-margin-y:not(.grid-y)>.cell{height:auto}.grid-margin-x{margin-left:-.625rem;margin-right:-.625rem}@media print,screen and (min-width:40em){.grid-margin-x{margin-left:-.9375rem;margin-right:-.9375rem}}.grid-margin-x>.cell{width:calc(100% - 1.25rem);margin-left:.625rem;margin-right:.625rem}@media print,screen and (min-width:40em){.grid-margin-x>.cell{width:calc(100% - 1.875rem);margin-left:.9375rem;margin-right:.9375rem}}.grid-margin-x>.auto{width:auto}.grid-margin-x>.shrink{width:auto}.grid-margin-x>.small-1{width:calc(8.33333% - 1.25rem)}.grid-margin-x>.small-2{width:calc(16.66667% - 1.25rem)}.grid-margin-x>.small-3{width:calc(25% - 1.25rem)}.grid-margin-x>.small-4{width:calc(33.33333% - 1.25rem)}.grid-margin-x>.small-5{width:calc(41.66667% - 1.25rem)}.grid-margin-x>.small-6{width:calc(50% - 1.25rem)}.grid-margin-x>.small-7{width:calc(58.33333% - 1.25rem)}.grid-margin-x>.small-8{width:calc(66.66667% - 1.25rem)}.grid-margin-x>.small-9{width:calc(75% - 1.25rem)}.grid-margin-x>.small-10{width:calc(83.33333% - 1.25rem)}.grid-margin-x>.small-11{width:calc(91.66667% - 1.25rem)}.grid-margin-x>.small-12{width:calc(100% - 1.25rem)}@media print,screen and (min-width:40em){.grid-margin-x>.auto{width:auto}.grid-margin-x>.shrink{width:auto}.grid-margin-x>.small-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.small-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.small-3{width:calc(25% - 1.875rem)}.grid-margin-x>.small-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.small-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.small-6{width:calc(50% - 1.875rem)}.grid-margin-x>.small-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.small-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.small-9{width:calc(75% - 1.875rem)}.grid-margin-x>.small-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.small-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.small-12{width:calc(100% - 1.875rem)}.grid-margin-x>.medium-auto{width:auto}.grid-margin-x>.medium-shrink{width:auto}.grid-margin-x>.medium-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.medium-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.medium-3{width:calc(25% - 1.875rem)}.grid-margin-x>.medium-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.medium-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.medium-6{width:calc(50% - 1.875rem)}.grid-margin-x>.medium-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.medium-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.medium-9{width:calc(75% - 1.875rem)}.grid-margin-x>.medium-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.medium-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.medium-12{width:calc(100% - 1.875rem)}}@media print,screen and (min-width:64em){.grid-margin-x>.large-auto{width:auto}.grid-margin-x>.large-shrink{width:auto}.grid-margin-x>.large-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.large-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.large-3{width:calc(25% - 1.875rem)}.grid-margin-x>.large-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.large-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.large-6{width:calc(50% - 1.875rem)}.grid-margin-x>.large-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.large-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.large-9{width:calc(75% - 1.875rem)}.grid-margin-x>.large-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.large-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.large-12{width:calc(100% - 1.875rem)}}.grid-padding-x .grid-padding-x{margin-right:-.625rem;margin-left:-.625rem}@media print,screen and (min-width:40em){.grid-padding-x .grid-padding-x{margin-right:-.9375rem;margin-left:-.9375rem}}.grid-container:not(.full)>.grid-padding-x{margin-right:-.625rem;margin-left:-.625rem}@media print,screen and (min-width:40em){.grid-container:not(.full)>.grid-padding-x{margin-right:-.9375rem;margin-left:-.9375rem}}.grid-padding-x>.cell{padding-right:.625rem;padding-left:.625rem}@media print,screen and (min-width:40em){.grid-padding-x>.cell{padding-right:.9375rem;padding-left:.9375rem}}.small-up-1>.cell{width:100%}.small-up-2>.cell{width:50%}.small-up-3>.cell{width:33.33333%}.small-up-4>.cell{width:25%}.small-up-5>.cell{width:20%}.small-up-6>.cell{width:16.66667%}.small-up-7>.cell{width:14.28571%}.small-up-8>.cell{width:12.5%}@media print,screen and (min-width:40em){.medium-up-1>.cell{width:100%}.medium-up-2>.cell{width:50%}.medium-up-3>.cell{width:33.33333%}.medium-up-4>.cell{width:25%}.medium-up-5>.cell{width:20%}.medium-up-6>.cell{width:16.66667%}.medium-up-7>.cell{width:14.28571%}.medium-up-8>.cell{width:12.5%}}@media print,screen and (min-width:64em){.large-up-1>.cell{width:100%}.large-up-2>.cell{width:50%}.large-up-3>.cell{width:33.33333%}.large-up-4>.cell{width:25%}.large-up-5>.cell{width:20%}.large-up-6>.cell{width:16.66667%}.large-up-7>.cell{width:14.28571%}.large-up-8>.cell{width:12.5%}}.grid-margin-x.small-up-1>.cell{width:calc(100% - 1.25rem)}.grid-margin-x.small-up-2>.cell{width:calc(50% - 1.25rem)}.grid-margin-x.small-up-3>.cell{width:calc(33.33333% - 1.25rem)}.grid-margin-x.small-up-4>.cell{width:calc(25% - 1.25rem)}.grid-margin-x.small-up-5>.cell{width:calc(20% - 1.25rem)}.grid-margin-x.small-up-6>.cell{width:calc(16.66667% - 1.25rem)}.grid-margin-x.small-up-7>.cell{width:calc(14.28571% - 1.25rem)}.grid-margin-x.small-up-8>.cell{width:calc(12.5% - 1.25rem)}@media print,screen and (min-width:40em){.grid-margin-x.small-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.small-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.small-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.small-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.small-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.small-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.small-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.small-up-8>.cell{width:calc(12.5% - 1.875rem)}.grid-margin-x.medium-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.medium-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.medium-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.medium-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.medium-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.medium-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.medium-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.medium-up-8>.cell{width:calc(12.5% - 1.875rem)}}@media print,screen and (min-width:64em){.grid-margin-x.large-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.large-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.large-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.large-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.large-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.large-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.large-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.large-up-8>.cell{width:calc(12.5% - 1.875rem)}}.small-margin-collapse{margin-right:0;margin-left:0}.small-margin-collapse>.cell{margin-right:0;margin-left:0}.small-margin-collapse>.small-1{width:8.33333%}.small-margin-collapse>.small-2{width:16.66667%}.small-margin-collapse>.small-3{width:25%}.small-margin-collapse>.small-4{width:33.33333%}.small-margin-collapse>.small-5{width:41.66667%}.small-margin-collapse>.small-6{width:50%}.small-margin-collapse>.small-7{width:58.33333%}.small-margin-collapse>.small-8{width:66.66667%}.small-margin-collapse>.small-9{width:75%}.small-margin-collapse>.small-10{width:83.33333%}.small-margin-collapse>.small-11{width:91.66667%}.small-margin-collapse>.small-12{width:100%}@media print,screen and (min-width:40em){.small-margin-collapse>.medium-1{width:8.33333%}.small-margin-collapse>.medium-2{width:16.66667%}.small-margin-collapse>.medium-3{width:25%}.small-margin-collapse>.medium-4{width:33.33333%}.small-margin-collapse>.medium-5{width:41.66667%}.small-margin-collapse>.medium-6{width:50%}.small-margin-collapse>.medium-7{width:58.33333%}.small-margin-collapse>.medium-8{width:66.66667%}.small-margin-collapse>.medium-9{width:75%}.small-margin-collapse>.medium-10{width:83.33333%}.small-margin-collapse>.medium-11{width:91.66667%}.small-margin-collapse>.medium-12{width:100%}}@media print,screen and (min-width:64em){.small-margin-collapse>.large-1{width:8.33333%}.small-margin-collapse>.large-2{width:16.66667%}.small-margin-collapse>.large-3{width:25%}.small-margin-collapse>.large-4{width:33.33333%}.small-margin-collapse>.large-5{width:41.66667%}.small-margin-collapse>.large-6{width:50%}.small-margin-collapse>.large-7{width:58.33333%}.small-margin-collapse>.large-8{width:66.66667%}.small-margin-collapse>.large-9{width:75%}.small-margin-collapse>.large-10{width:83.33333%}.small-margin-collapse>.large-11{width:91.66667%}.small-margin-collapse>.large-12{width:100%}}.small-padding-collapse{margin-right:0;margin-left:0}.small-padding-collapse>.cell{padding-right:0;padding-left:0}@media print,screen and (min-width:40em){.medium-margin-collapse{margin-right:0;margin-left:0}.medium-margin-collapse>.cell{margin-right:0;margin-left:0}}@media print,screen and (min-width:40em){.medium-margin-collapse>.small-1{width:8.33333%}.medium-margin-collapse>.small-2{width:16.66667%}.medium-margin-collapse>.small-3{width:25%}.medium-margin-collapse>.small-4{width:33.33333%}.medium-margin-collapse>.small-5{width:41.66667%}.medium-margin-collapse>.small-6{width:50%}.medium-margin-collapse>.small-7{width:58.33333%}.medium-margin-collapse>.small-8{width:66.66667%}.medium-margin-collapse>.small-9{width:75%}.medium-margin-collapse>.small-10{width:83.33333%}.medium-margin-collapse>.small-11{width:91.66667%}.medium-margin-collapse>.small-12{width:100%}}@media print,screen and (min-width:40em){.medium-margin-collapse>.medium-1{width:8.33333%}.medium-margin-collapse>.medium-2{width:16.66667%}.medium-margin-collapse>.medium-3{width:25%}.medium-margin-collapse>.medium-4{width:33.33333%}.medium-margin-collapse>.medium-5{width:41.66667%}.medium-margin-collapse>.medium-6{width:50%}.medium-margin-collapse>.medium-7{width:58.33333%}.medium-margin-collapse>.medium-8{width:66.66667%}.medium-margin-collapse>.medium-9{width:75%}.medium-margin-collapse>.medium-10{width:83.33333%}.medium-margin-collapse>.medium-11{width:91.66667%}.medium-margin-collapse>.medium-12{width:100%}}@media print,screen and (min-width:64em){.medium-margin-collapse>.large-1{width:8.33333%}.medium-margin-collapse>.large-2{width:16.66667%}.medium-margin-collapse>.large-3{width:25%}.medium-margin-collapse>.large-4{width:33.33333%}.medium-margin-collapse>.large-5{width:41.66667%}.medium-margin-collapse>.large-6{width:50%}.medium-margin-collapse>.large-7{width:58.33333%}.medium-margin-collapse>.large-8{width:66.66667%}.medium-margin-collapse>.large-9{width:75%}.medium-margin-collapse>.large-10{width:83.33333%}.medium-margin-collapse>.large-11{width:91.66667%}.medium-margin-collapse>.large-12{width:100%}}@media print,screen and (min-width:40em){.medium-padding-collapse{margin-right:0;margin-left:0}.medium-padding-collapse>.cell{padding-right:0;padding-left:0}}@media print,screen and (min-width:64em){.large-margin-collapse{margin-right:0;margin-left:0}.large-margin-collapse>.cell{margin-right:0;margin-left:0}}@media print,screen and (min-width:64em){.large-margin-collapse>.small-1{width:8.33333%}.large-margin-collapse>.small-2{width:16.66667%}.large-margin-collapse>.small-3{width:25%}.large-margin-collapse>.small-4{width:33.33333%}.large-margin-collapse>.small-5{width:41.66667%}.large-margin-collapse>.small-6{width:50%}.large-margin-collapse>.small-7{width:58.33333%}.large-margin-collapse>.small-8{width:66.66667%}.large-margin-collapse>.small-9{width:75%}.large-margin-collapse>.small-10{width:83.33333%}.large-margin-collapse>.small-11{width:91.66667%}.large-margin-collapse>.small-12{width:100%}}@media print,screen and (min-width:64em){.large-margin-collapse>.medium-1{width:8.33333%}.large-margin-collapse>.medium-2{width:16.66667%}.large-margin-collapse>.medium-3{width:25%}.large-margin-collapse>.medium-4{width:33.33333%}.large-margin-collapse>.medium-5{width:41.66667%}.large-margin-collapse>.medium-6{width:50%}.large-margin-collapse>.medium-7{width:58.33333%}.large-margin-collapse>.medium-8{width:66.66667%}.large-margin-collapse>.medium-9{width:75%}.large-margin-collapse>.medium-10{width:83.33333%}.large-margin-collapse>.medium-11{width:91.66667%}.large-margin-collapse>.medium-12{width:100%}}@media print,screen and (min-width:64em){.large-margin-collapse>.large-1{width:8.33333%}.large-margin-collapse>.large-2{width:16.66667%}.large-margin-collapse>.large-3{width:25%}.large-margin-collapse>.large-4{width:33.33333%}.large-margin-collapse>.large-5{width:41.66667%}.large-margin-collapse>.large-6{width:50%}.large-margin-collapse>.large-7{width:58.33333%}.large-margin-collapse>.large-8{width:66.66667%}.large-margin-collapse>.large-9{width:75%}.large-margin-collapse>.large-10{width:83.33333%}.large-margin-collapse>.large-11{width:91.66667%}.large-margin-collapse>.large-12{width:100%}}@media print,screen and (min-width:64em){.large-padding-collapse{margin-right:0;margin-left:0}.large-padding-collapse>.cell{padding-right:0;padding-left:0}}.small-offset-0{margin-left:0}.grid-margin-x>.small-offset-0{margin-left:calc(0% + 1.25rem / 2)}.small-offset-1{margin-left:8.33333%}.grid-margin-x>.small-offset-1{margin-left:calc(8.33333% + 1.25rem / 2)}.small-offset-2{margin-left:16.66667%}.grid-margin-x>.small-offset-2{margin-left:calc(16.66667% + 1.25rem / 2)}.small-offset-3{margin-left:25%}.grid-margin-x>.small-offset-3{margin-left:calc(25% + 1.25rem / 2)}.small-offset-4{margin-left:33.33333%}.grid-margin-x>.small-offset-4{margin-left:calc(33.33333% + 1.25rem / 2)}.small-offset-5{margin-left:41.66667%}.grid-margin-x>.small-offset-5{margin-left:calc(41.66667% + 1.25rem / 2)}.small-offset-6{margin-left:50%}.grid-margin-x>.small-offset-6{margin-left:calc(50% + 1.25rem / 2)}.small-offset-7{margin-left:58.33333%}.grid-margin-x>.small-offset-7{margin-left:calc(58.33333% + 1.25rem / 2)}.small-offset-8{margin-left:66.66667%}.grid-margin-x>.small-offset-8{margin-left:calc(66.66667% + 1.25rem / 2)}.small-offset-9{margin-left:75%}.grid-margin-x>.small-offset-9{margin-left:calc(75% + 1.25rem / 2)}.small-offset-10{margin-left:83.33333%}.grid-margin-x>.small-offset-10{margin-left:calc(83.33333% + 1.25rem / 2)}.small-offset-11{margin-left:91.66667%}.grid-margin-x>.small-offset-11{margin-left:calc(91.66667% + 1.25rem / 2)}@media print,screen and (min-width:40em){.medium-offset-0{margin-left:0}.grid-margin-x>.medium-offset-0{margin-left:calc(0% + 1.875rem / 2)}.medium-offset-1{margin-left:8.33333%}.grid-margin-x>.medium-offset-1{margin-left:calc(8.33333% + 1.875rem / 2)}.medium-offset-2{margin-left:16.66667%}.grid-margin-x>.medium-offset-2{margin-left:calc(16.66667% + 1.875rem / 2)}.medium-offset-3{margin-left:25%}.grid-margin-x>.medium-offset-3{margin-left:calc(25% + 1.875rem / 2)}.medium-offset-4{margin-left:33.33333%}.grid-margin-x>.medium-offset-4{margin-left:calc(33.33333% + 1.875rem / 2)}.medium-offset-5{margin-left:41.66667%}.grid-margin-x>.medium-offset-5{margin-left:calc(41.66667% + 1.875rem / 2)}.medium-offset-6{margin-left:50%}.grid-margin-x>.medium-offset-6{margin-left:calc(50% + 1.875rem / 2)}.medium-offset-7{margin-left:58.33333%}.grid-margin-x>.medium-offset-7{margin-left:calc(58.33333% + 1.875rem / 2)}.medium-offset-8{margin-left:66.66667%}.grid-margin-x>.medium-offset-8{margin-left:calc(66.66667% + 1.875rem / 2)}.medium-offset-9{margin-left:75%}.grid-margin-x>.medium-offset-9{margin-left:calc(75% + 1.875rem / 2)}.medium-offset-10{margin-left:83.33333%}.grid-margin-x>.medium-offset-10{margin-left:calc(83.33333% + 1.875rem / 2)}.medium-offset-11{margin-left:91.66667%}.grid-margin-x>.medium-offset-11{margin-left:calc(91.66667% + 1.875rem / 2)}}@media print,screen and (min-width:64em){.large-offset-0{margin-left:0}.grid-margin-x>.large-offset-0{margin-left:calc(0% + 1.875rem / 2)}.large-offset-1{margin-left:8.33333%}.grid-margin-x>.large-offset-1{margin-left:calc(8.33333% + 1.875rem / 2)}.large-offset-2{margin-left:16.66667%}.grid-margin-x>.large-offset-2{margin-left:calc(16.66667% + 1.875rem / 2)}.large-offset-3{margin-left:25%}.grid-margin-x>.large-offset-3{margin-left:calc(25% + 1.875rem / 2)}.large-offset-4{margin-left:33.33333%}.grid-margin-x>.large-offset-4{margin-left:calc(33.33333% + 1.875rem / 2)}.large-offset-5{margin-left:41.66667%}.grid-margin-x>.large-offset-5{margin-left:calc(41.66667% + 1.875rem / 2)}.large-offset-6{margin-left:50%}.grid-margin-x>.large-offset-6{margin-left:calc(50% + 1.875rem / 2)}.large-offset-7{margin-left:58.33333%}.grid-margin-x>.large-offset-7{margin-left:calc(58.33333% + 1.875rem / 2)}.large-offset-8{margin-left:66.66667%}.grid-margin-x>.large-offset-8{margin-left:calc(66.66667% + 1.875rem / 2)}.large-offset-9{margin-left:75%}.grid-margin-x>.large-offset-9{margin-left:calc(75% + 1.875rem / 2)}.large-offset-10{margin-left:83.33333%}.grid-margin-x>.large-offset-10{margin-left:calc(83.33333% + 1.875rem / 2)}.large-offset-11{margin-left:91.66667%}.grid-margin-x>.large-offset-11{margin-left:calc(91.66667% + 1.875rem / 2)}}.grid-y{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.grid-y>.cell{height:auto;max-height:none}.grid-y>.auto{height:auto}.grid-y>.shrink{height:auto}.grid-y>.small-1,.grid-y>.small-10,.grid-y>.small-11,.grid-y>.small-12,.grid-y>.small-2,.grid-y>.small-3,.grid-y>.small-4,.grid-y>.small-5,.grid-y>.small-6,.grid-y>.small-7,.grid-y>.small-8,.grid-y>.small-9,.grid-y>.small-full,.grid-y>.small-shrink{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}@media print,screen and (min-width:40em){.grid-y>.medium-1,.grid-y>.medium-10,.grid-y>.medium-11,.grid-y>.medium-12,.grid-y>.medium-2,.grid-y>.medium-3,.grid-y>.medium-4,.grid-y>.medium-5,.grid-y>.medium-6,.grid-y>.medium-7,.grid-y>.medium-8,.grid-y>.medium-9,.grid-y>.medium-full,.grid-y>.medium-shrink{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print,screen and (min-width:64em){.grid-y>.large-1,.grid-y>.large-10,.grid-y>.large-11,.grid-y>.large-12,.grid-y>.large-2,.grid-y>.large-3,.grid-y>.large-4,.grid-y>.large-5,.grid-y>.large-6,.grid-y>.large-7,.grid-y>.large-8,.grid-y>.large-9,.grid-y>.large-full,.grid-y>.large-shrink{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}.grid-y>.small-1,.grid-y>.small-10,.grid-y>.small-11,.grid-y>.small-12,.grid-y>.small-2,.grid-y>.small-3,.grid-y>.small-4,.grid-y>.small-5,.grid-y>.small-6,.grid-y>.small-7,.grid-y>.small-8,.grid-y>.small-9{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.small-1{height:8.33333%}.grid-y>.small-2{height:16.66667%}.grid-y>.small-3{height:25%}.grid-y>.small-4{height:33.33333%}.grid-y>.small-5{height:41.66667%}.grid-y>.small-6{height:50%}.grid-y>.small-7{height:58.33333%}.grid-y>.small-8{height:66.66667%}.grid-y>.small-9{height:75%}.grid-y>.small-10{height:83.33333%}.grid-y>.small-11{height:91.66667%}.grid-y>.small-12{height:100%}@media print,screen and (min-width:40em){.grid-y>.medium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.medium-1,.grid-y>.medium-10,.grid-y>.medium-11,.grid-y>.medium-12,.grid-y>.medium-2,.grid-y>.medium-3,.grid-y>.medium-4,.grid-y>.medium-5,.grid-y>.medium-6,.grid-y>.medium-7,.grid-y>.medium-8,.grid-y>.medium-9,.grid-y>.medium-shrink{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.medium-shrink{height:auto}.grid-y>.medium-1{height:8.33333%}.grid-y>.medium-2{height:16.66667%}.grid-y>.medium-3{height:25%}.grid-y>.medium-4{height:33.33333%}.grid-y>.medium-5{height:41.66667%}.grid-y>.medium-6{height:50%}.grid-y>.medium-7{height:58.33333%}.grid-y>.medium-8{height:66.66667%}.grid-y>.medium-9{height:75%}.grid-y>.medium-10{height:83.33333%}.grid-y>.medium-11{height:91.66667%}.grid-y>.medium-12{height:100%}}@media print,screen and (min-width:64em){.grid-y>.large-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.large-1,.grid-y>.large-10,.grid-y>.large-11,.grid-y>.large-12,.grid-y>.large-2,.grid-y>.large-3,.grid-y>.large-4,.grid-y>.large-5,.grid-y>.large-6,.grid-y>.large-7,.grid-y>.large-8,.grid-y>.large-9,.grid-y>.large-shrink{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.large-shrink{height:auto}.grid-y>.large-1{height:8.33333%}.grid-y>.large-2{height:16.66667%}.grid-y>.large-3{height:25%}.grid-y>.large-4{height:33.33333%}.grid-y>.large-5{height:41.66667%}.grid-y>.large-6{height:50%}.grid-y>.large-7{height:58.33333%}.grid-y>.large-8{height:66.66667%}.grid-y>.large-9{height:75%}.grid-y>.large-10{height:83.33333%}.grid-y>.large-11{height:91.66667%}.grid-y>.large-12{height:100%}}.grid-padding-y .grid-padding-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print,screen and (min-width:40em){.grid-padding-y .grid-padding-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-padding-y>.cell{padding-top:.625rem;padding-bottom:.625rem}@media print,screen and (min-width:40em){.grid-padding-y>.cell{padding-top:.9375rem;padding-bottom:.9375rem}}.grid-margin-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print,screen and (min-width:40em){.grid-margin-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-margin-y>.cell{height:calc(100% - 1.25rem);margin-top:.625rem;margin-bottom:.625rem}@media print,screen and (min-width:40em){.grid-margin-y>.cell{height:calc(100% - 1.875rem);margin-top:.9375rem;margin-bottom:.9375rem}}.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.small-3{height:calc(25% - 1.25rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.small-6{height:calc(50% - 1.25rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.small-9{height:calc(75% - 1.25rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.small-12{height:calc(100% - 1.25rem)}@media print,screen and (min-width:40em){.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.small-3{height:calc(25% - 1.875rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.small-6{height:calc(50% - 1.875rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.small-9{height:calc(75% - 1.875rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.small-12{height:calc(100% - 1.875rem)}.grid-margin-y>.medium-auto{height:auto}.grid-margin-y>.medium-shrink{height:auto}.grid-margin-y>.medium-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.medium-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.medium-3{height:calc(25% - 1.875rem)}.grid-margin-y>.medium-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.medium-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.medium-6{height:calc(50% - 1.875rem)}.grid-margin-y>.medium-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.medium-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.medium-9{height:calc(75% - 1.875rem)}.grid-margin-y>.medium-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.medium-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.medium-12{height:calc(100% - 1.875rem)}}@media print,screen and (min-width:64em){.grid-margin-y>.large-auto{height:auto}.grid-margin-y>.large-shrink{height:auto}.grid-margin-y>.large-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.large-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.large-3{height:calc(25% - 1.875rem)}.grid-margin-y>.large-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.large-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.large-6{height:calc(50% - 1.875rem)}.grid-margin-y>.large-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.large-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.large-9{height:calc(75% - 1.875rem)}.grid-margin-y>.large-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.large-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.large-12{height:calc(100% - 1.875rem)}}.grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .grid-frame{width:100%}.cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.cell-block-container{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;max-height:100%}.cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media print,screen and (min-width:40em){.medium-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .medium-grid-frame{width:100%}.medium-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.medium-cell-block-container{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;max-height:100%}.medium-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.medium-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}@media print,screen and (min-width:64em){.large-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .large-grid-frame{width:100%}.large-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.large-cell-block-container{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;max-height:100%}.large-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.large-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}.grid-y.grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}@media print,screen and (min-width:40em){.grid-y.medium-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}@media print,screen and (min-width:64em){.grid-y.large-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}.cell .grid-y.grid-frame{height:100%}@media print,screen and (min-width:40em){.cell .grid-y.medium-grid-frame{height:100%}}@media print,screen and (min-width:64em){.cell .grid-y.large-grid-frame{height:100%}}.grid-margin-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print,screen and (min-width:40em){.grid-margin-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-margin-y>.cell{height:calc(100% - 1.25rem);margin-top:.625rem;margin-bottom:.625rem}@media print,screen and (min-width:40em){.grid-margin-y>.cell{height:calc(100% - 1.875rem);margin-top:.9375rem;margin-bottom:.9375rem}}.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.small-3{height:calc(25% - 1.25rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.small-6{height:calc(50% - 1.25rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.small-9{height:calc(75% - 1.25rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.small-12{height:calc(100% - 1.25rem)}@media print,screen and (min-width:40em){.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.small-3{height:calc(25% - 1.875rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.small-6{height:calc(50% - 1.875rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.small-9{height:calc(75% - 1.875rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.small-12{height:calc(100% - 1.875rem)}.grid-margin-y>.medium-auto{height:auto}.grid-margin-y>.medium-shrink{height:auto}.grid-margin-y>.medium-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.medium-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.medium-3{height:calc(25% - 1.875rem)}.grid-margin-y>.medium-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.medium-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.medium-6{height:calc(50% - 1.875rem)}.grid-margin-y>.medium-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.medium-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.medium-9{height:calc(75% - 1.875rem)}.grid-margin-y>.medium-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.medium-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.medium-12{height:calc(100% - 1.875rem)}}@media print,screen and (min-width:64em){.grid-margin-y>.large-auto{height:auto}.grid-margin-y>.large-shrink{height:auto}.grid-margin-y>.large-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.large-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.large-3{height:calc(25% - 1.875rem)}.grid-margin-y>.large-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.large-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.large-6{height:calc(50% - 1.875rem)}.grid-margin-y>.large-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.large-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.large-9{height:calc(75% - 1.875rem)}.grid-margin-y>.large-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.large-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.large-12{height:calc(100% - 1.875rem)}}.grid-frame.grid-margin-y{height:calc(100vh + 1.25rem)}@media print,screen and (min-width:40em){.grid-frame.grid-margin-y{height:calc(100vh + 1.875rem)}}@media print,screen and (min-width:64em){.grid-frame.grid-margin-y{height:calc(100vh + 1.875rem)}}@media print,screen and (min-width:40em){.grid-margin-y.medium-grid-frame{height:calc(100vh + 1.875rem)}}@media print,screen and (min-width:64em){.grid-margin-y.large-grid-frame{height:calc(100vh + 1.875rem)}}.button{display:inline-block;vertical-align:middle;margin:0 0 1rem 0;padding:.85em 1em;border:1px solid transparent;border-radius:0;-webkit-transition:background-color .25s ease-out,color .25s ease-out;transition:background-color .25s ease-out,color .25s ease-out;font-family:inherit;font-size:.9rem;-webkit-appearance:none;line-height:1;text-align:center;cursor:pointer}[data-whatinput=mouse] .button{outline:0}.button.tiny{font-size:.6rem}.button.small{font-size:.75rem}.button.large{font-size:1.25rem}.button.expanded{display:block;width:100%;margin-right:0;margin-left:0}.button,.button.disabled,.button.disabled:focus,.button.disabled:hover,.button[disabled],.button[disabled]:focus,.button[disabled]:hover{background-color:#1779ba;color:#fefefe}.button:focus,.button:hover{background-color:#14679e;color:#fefefe}.button.primary,.button.primary.disabled,.button.primary.disabled:focus,.button.primary.disabled:hover,.button.primary[disabled],.button.primary[disabled]:focus,.button.primary[disabled]:hover{background-color:#1779ba;color:#fefefe}.button.primary:focus,.button.primary:hover{background-color:#126195;color:#fefefe}.button.secondary,.button.secondary.disabled,.button.secondary.disabled:focus,.button.secondary.disabled:hover,.button.secondary[disabled],.button.secondary[disabled]:focus,.button.secondary[disabled]:hover{background-color:#767676;color:#fefefe}.button.secondary:focus,.button.secondary:hover{background-color:#5e5e5e;color:#fefefe}.button.success,.button.success.disabled,.button.success.disabled:focus,.button.success.disabled:hover,.button.success[disabled],.button.success[disabled]:focus,.button.success[disabled]:hover{background-color:#3adb76;color:#0a0a0a}.button.success:focus,.button.success:hover{background-color:#22bb5b;color:#0a0a0a}.button.warning,.button.warning.disabled,.button.warning.disabled:focus,.button.warning.disabled:hover,.button.warning[disabled],.button.warning[disabled]:focus,.button.warning[disabled]:hover{background-color:#ffae00;color:#0a0a0a}.button.warning:focus,.button.warning:hover{background-color:#cc8b00;color:#0a0a0a}.button.alert,.button.alert.disabled,.button.alert.disabled:focus,.button.alert.disabled:hover,.button.alert[disabled],.button.alert[disabled]:focus,.button.alert[disabled]:hover{background-color:#cc4b37;color:#fefefe}.button.alert:focus,.button.alert:hover{background-color:#a53b2a;color:#fefefe}.button.hollow,.button.hollow.disabled,.button.hollow.disabled:focus,.button.hollow.disabled:hover,.button.hollow:focus,.button.hollow:hover,.button.hollow[disabled],.button.hollow[disabled]:focus,.button.hollow[disabled]:hover{background-color:transparent}.button.hollow,.button.hollow.disabled,.button.hollow.disabled:focus,.button.hollow.disabled:hover,.button.hollow[disabled],.button.hollow[disabled]:focus,.button.hollow[disabled]:hover{border:1px solid #1779ba;color:#1779ba}.button.hollow:focus,.button.hollow:hover{border-color:#0c3d5d;color:#0c3d5d}.button.hollow.primary,.button.hollow.primary.disabled,.button.hollow.primary.disabled:focus,.button.hollow.primary.disabled:hover,.button.hollow.primary[disabled],.button.hollow.primary[disabled]:focus,.button.hollow.primary[disabled]:hover{border:1px solid #1779ba;color:#1779ba}.button.hollow.primary:focus,.button.hollow.primary:hover{border-color:#0c3d5d;color:#0c3d5d}.button.hollow.secondary,.button.hollow.secondary.disabled,.button.hollow.secondary.disabled:focus,.button.hollow.secondary.disabled:hover,.button.hollow.secondary[disabled],.button.hollow.secondary[disabled]:focus,.button.hollow.secondary[disabled]:hover{border:1px solid #767676;color:#767676}.button.hollow.secondary:focus,.button.hollow.secondary:hover{border-color:#3b3b3b;color:#3b3b3b}.button.hollow.success,.button.hollow.success.disabled,.button.hollow.success.disabled:focus,.button.hollow.success.disabled:hover,.button.hollow.success[disabled],.button.hollow.success[disabled]:focus,.button.hollow.success[disabled]:hover{border:1px solid #3adb76;color:#3adb76}.button.hollow.success:focus,.button.hollow.success:hover{border-color:#157539;color:#157539}.button.hollow.warning,.button.hollow.warning.disabled,.button.hollow.warning.disabled:focus,.button.hollow.warning.disabled:hover,.button.hollow.warning[disabled],.button.hollow.warning[disabled]:focus,.button.hollow.warning[disabled]:hover{border:1px solid #ffae00;color:#ffae00}.button.hollow.warning:focus,.button.hollow.warning:hover{border-color:#805700;color:#805700}.button.hollow.alert,.button.hollow.alert.disabled,.button.hollow.alert.disabled:focus,.button.hollow.alert.disabled:hover,.button.hollow.alert[disabled],.button.hollow.alert[disabled]:focus,.button.hollow.alert[disabled]:hover{border:1px solid #cc4b37;color:#cc4b37}.button.hollow.alert:focus,.button.hollow.alert:hover{border-color:#67251a;color:#67251a}.button.clear,.button.clear.disabled,.button.clear.disabled:focus,.button.clear.disabled:hover,.button.clear:focus,.button.clear:hover,.button.clear[disabled],.button.clear[disabled]:focus,.button.clear[disabled]:hover{border-color:transparent;background-color:transparent}.button.clear,.button.clear.disabled,.button.clear.disabled:focus,.button.clear.disabled:hover,.button.clear[disabled],.button.clear[disabled]:focus,.button.clear[disabled]:hover{color:#1779ba}.button.clear:focus,.button.clear:hover{color:#0c3d5d}.button.clear.primary,.button.clear.primary.disabled,.button.clear.primary.disabled:focus,.button.clear.primary.disabled:hover,.button.clear.primary[disabled],.button.clear.primary[disabled]:focus,.button.clear.primary[disabled]:hover{color:#1779ba}.button.clear.primary:focus,.button.clear.primary:hover{color:#0c3d5d}.button.clear.secondary,.button.clear.secondary.disabled,.button.clear.secondary.disabled:focus,.button.clear.secondary.disabled:hover,.button.clear.secondary[disabled],.button.clear.secondary[disabled]:focus,.button.clear.secondary[disabled]:hover{color:#767676}.button.clear.secondary:focus,.button.clear.secondary:hover{color:#3b3b3b}.button.clear.success,.button.clear.success.disabled,.button.clear.success.disabled:focus,.button.clear.success.disabled:hover,.button.clear.success[disabled],.button.clear.success[disabled]:focus,.button.clear.success[disabled]:hover{color:#3adb76}.button.clear.success:focus,.button.clear.success:hover{color:#157539}.button.clear.warning,.button.clear.warning.disabled,.button.clear.warning.disabled:focus,.button.clear.warning.disabled:hover,.button.clear.warning[disabled],.button.clear.warning[disabled]:focus,.button.clear.warning[disabled]:hover{color:#ffae00}.button.clear.warning:focus,.button.clear.warning:hover{color:#805700}.button.clear.alert,.button.clear.alert.disabled,.button.clear.alert.disabled:focus,.button.clear.alert.disabled:hover,.button.clear.alert[disabled],.button.clear.alert[disabled]:focus,.button.clear.alert[disabled]:hover{color:#cc4b37}.button.clear.alert:focus,.button.clear.alert:hover{color:#67251a}.button.disabled,.button[disabled]{opacity:.25;cursor:not-allowed}.button.dropdown::after{display:block;width:0;height:0;border-style:solid;border-width:.4em;content:'';border-bottom-width:0;border-color:#fefefe transparent transparent;position:relative;top:.4em;display:inline-block;float:right;margin-left:1em}.button.dropdown.clear::after,.button.dropdown.hollow::after{border-top-color:#1779ba}.button.dropdown.clear.primary::after,.button.dropdown.hollow.primary::after{border-top-color:#1779ba}.button.dropdown.clear.secondary::after,.button.dropdown.hollow.secondary::after{border-top-color:#767676}.button.dropdown.clear.success::after,.button.dropdown.hollow.success::after{border-top-color:#3adb76}.button.dropdown.clear.warning::after,.button.dropdown.hollow.warning::after{border-top-color:#ffae00}.button.dropdown.clear.alert::after,.button.dropdown.hollow.alert::after{border-top-color:#cc4b37}.button.arrow-only::after{top:-.1em;float:none;margin-left:0}a.button:focus,a.button:hover{text-decoration:none}.button-group{margin-bottom:1rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.button-group::after,.button-group::before{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.button-group::after{clear:both}.button-group::after,.button-group::before{display:none}.button-group .button{margin:0;margin-right:1px;margin-bottom:1px;font-size:.9rem;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.button-group .button:last-child{margin-right:0}.button-group.tiny .button{font-size:.6rem}.button-group.small .button{font-size:.75rem}.button-group.large .button{font-size:1.25rem}.button-group.expanded .button{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.button-group.primary .button,.button-group.primary .button.disabled,.button-group.primary .button.disabled:focus,.button-group.primary .button.disabled:hover,.button-group.primary .button[disabled],.button-group.primary .button[disabled]:focus,.button-group.primary .button[disabled]:hover{background-color:#1779ba;color:#fefefe}.button-group.primary .button:focus,.button-group.primary .button:hover{background-color:#126195;color:#fefefe}.button-group.secondary .button,.button-group.secondary .button.disabled,.button-group.secondary .button.disabled:focus,.button-group.secondary .button.disabled:hover,.button-group.secondary .button[disabled],.button-group.secondary .button[disabled]:focus,.button-group.secondary .button[disabled]:hover{background-color:#767676;color:#fefefe}.button-group.secondary .button:focus,.button-group.secondary .button:hover{background-color:#5e5e5e;color:#fefefe}.button-group.success .button,.button-group.success .button.disabled,.button-group.success .button.disabled:focus,.button-group.success .button.disabled:hover,.button-group.success .button[disabled],.button-group.success .button[disabled]:focus,.button-group.success .button[disabled]:hover{background-color:#3adb76;color:#0a0a0a}.button-group.success .button:focus,.button-group.success .button:hover{background-color:#22bb5b;color:#0a0a0a}.button-group.warning .button,.button-group.warning .button.disabled,.button-group.warning .button.disabled:focus,.button-group.warning .button.disabled:hover,.button-group.warning .button[disabled],.button-group.warning .button[disabled]:focus,.button-group.warning .button[disabled]:hover{background-color:#ffae00;color:#0a0a0a}.button-group.warning .button:focus,.button-group.warning .button:hover{background-color:#cc8b00;color:#0a0a0a}.button-group.alert .button,.button-group.alert .button.disabled,.button-group.alert .button.disabled:focus,.button-group.alert .button.disabled:hover,.button-group.alert .button[disabled],.button-group.alert .button[disabled]:focus,.button-group.alert .button[disabled]:hover{background-color:#cc4b37;color:#fefefe}.button-group.alert .button:focus,.button-group.alert .button:hover{background-color:#a53b2a;color:#fefefe}.button-group.hollow .button,.button-group.hollow .button.disabled,.button-group.hollow .button.disabled:focus,.button-group.hollow .button.disabled:hover,.button-group.hollow .button:focus,.button-group.hollow .button:hover,.button-group.hollow .button[disabled],.button-group.hollow .button[disabled]:focus,.button-group.hollow .button[disabled]:hover{background-color:transparent}.button-group.hollow .button,.button-group.hollow .button.disabled,.button-group.hollow .button.disabled:focus,.button-group.hollow .button.disabled:hover,.button-group.hollow .button[disabled],.button-group.hollow .button[disabled]:focus,.button-group.hollow .button[disabled]:hover{border:1px solid #1779ba;color:#1779ba}.button-group.hollow .button:focus,.button-group.hollow .button:hover{border-color:#0c3d5d;color:#0c3d5d}.button-group.hollow .button.primary,.button-group.hollow .button.primary.disabled,.button-group.hollow .button.primary.disabled:focus,.button-group.hollow .button.primary.disabled:hover,.button-group.hollow .button.primary[disabled],.button-group.hollow .button.primary[disabled]:focus,.button-group.hollow .button.primary[disabled]:hover,.button-group.hollow.primary .button,.button-group.hollow.primary .button.disabled,.button-group.hollow.primary .button.disabled:focus,.button-group.hollow.primary .button.disabled:hover,.button-group.hollow.primary .button[disabled],.button-group.hollow.primary .button[disabled]:focus,.button-group.hollow.primary .button[disabled]:hover{border:1px solid #1779ba;color:#1779ba}.button-group.hollow .button.primary:focus,.button-group.hollow .button.primary:hover,.button-group.hollow.primary .button:focus,.button-group.hollow.primary .button:hover{border-color:#0c3d5d;color:#0c3d5d}.button-group.hollow .button.secondary,.button-group.hollow .button.secondary.disabled,.button-group.hollow .button.secondary.disabled:focus,.button-group.hollow .button.secondary.disabled:hover,.button-group.hollow .button.secondary[disabled],.button-group.hollow .button.secondary[disabled]:focus,.button-group.hollow .button.secondary[disabled]:hover,.button-group.hollow.secondary .button,.button-group.hollow.secondary .button.disabled,.button-group.hollow.secondary .button.disabled:focus,.button-group.hollow.secondary .button.disabled:hover,.button-group.hollow.secondary .button[disabled],.button-group.hollow.secondary .button[disabled]:focus,.button-group.hollow.secondary .button[disabled]:hover{border:1px solid #767676;color:#767676}.button-group.hollow .button.secondary:focus,.button-group.hollow .button.secondary:hover,.button-group.hollow.secondary .button:focus,.button-group.hollow.secondary .button:hover{border-color:#3b3b3b;color:#3b3b3b}.button-group.hollow .button.success,.button-group.hollow .button.success.disabled,.button-group.hollow .button.success.disabled:focus,.button-group.hollow .button.success.disabled:hover,.button-group.hollow .button.success[disabled],.button-group.hollow .button.success[disabled]:focus,.button-group.hollow .button.success[disabled]:hover,.button-group.hollow.success .button,.button-group.hollow.success .button.disabled,.button-group.hollow.success .button.disabled:focus,.button-group.hollow.success .button.disabled:hover,.button-group.hollow.success .button[disabled],.button-group.hollow.success .button[disabled]:focus,.button-group.hollow.success .button[disabled]:hover{border:1px solid #3adb76;color:#3adb76}.button-group.hollow .button.success:focus,.button-group.hollow .button.success:hover,.button-group.hollow.success .button:focus,.button-group.hollow.success .button:hover{border-color:#157539;color:#157539}.button-group.hollow .button.warning,.button-group.hollow .button.warning.disabled,.button-group.hollow .button.warning.disabled:focus,.button-group.hollow .button.warning.disabled:hover,.button-group.hollow .button.warning[disabled],.button-group.hollow .button.warning[disabled]:focus,.button-group.hollow .button.warning[disabled]:hover,.button-group.hollow.warning .button,.button-group.hollow.warning .button.disabled,.button-group.hollow.warning .button.disabled:focus,.button-group.hollow.warning .button.disabled:hover,.button-group.hollow.warning .button[disabled],.button-group.hollow.warning .button[disabled]:focus,.button-group.hollow.warning .button[disabled]:hover{border:1px solid #ffae00;color:#ffae00}.button-group.hollow .button.warning:focus,.button-group.hollow .button.warning:hover,.button-group.hollow.warning .button:focus,.button-group.hollow.warning .button:hover{border-color:#805700;color:#805700}.button-group.hollow .button.alert,.button-group.hollow .button.alert.disabled,.button-group.hollow .button.alert.disabled:focus,.button-group.hollow .button.alert.disabled:hover,.button-group.hollow .button.alert[disabled],.button-group.hollow .button.alert[disabled]:focus,.button-group.hollow .button.alert[disabled]:hover,.button-group.hollow.alert .button,.button-group.hollow.alert .button.disabled,.button-group.hollow.alert .button.disabled:focus,.button-group.hollow.alert .button.disabled:hover,.button-group.hollow.alert .button[disabled],.button-group.hollow.alert .button[disabled]:focus,.button-group.hollow.alert .button[disabled]:hover{border:1px solid #cc4b37;color:#cc4b37}.button-group.hollow .button.alert:focus,.button-group.hollow .button.alert:hover,.button-group.hollow.alert .button:focus,.button-group.hollow.alert .button:hover{border-color:#67251a;color:#67251a}.button-group.clear .button,.button-group.clear .button.disabled,.button-group.clear .button.disabled:focus,.button-group.clear .button.disabled:hover,.button-group.clear .button:focus,.button-group.clear .button:hover,.button-group.clear .button[disabled],.button-group.clear .button[disabled]:focus,.button-group.clear .button[disabled]:hover{border-color:transparent;background-color:transparent}.button-group.clear .button,.button-group.clear .button.disabled,.button-group.clear .button.disabled:focus,.button-group.clear .button.disabled:hover,.button-group.clear .button[disabled],.button-group.clear .button[disabled]:focus,.button-group.clear .button[disabled]:hover{color:#1779ba}.button-group.clear .button:focus,.button-group.clear .button:hover{color:#0c3d5d}.button-group.clear .button.primary,.button-group.clear .button.primary.disabled,.button-group.clear .button.primary.disabled:focus,.button-group.clear .button.primary.disabled:hover,.button-group.clear .button.primary[disabled],.button-group.clear .button.primary[disabled]:focus,.button-group.clear .button.primary[disabled]:hover,.button-group.clear.primary .button,.button-group.clear.primary .button.disabled,.button-group.clear.primary .button.disabled:focus,.button-group.clear.primary .button.disabled:hover,.button-group.clear.primary .button[disabled],.button-group.clear.primary .button[disabled]:focus,.button-group.clear.primary .button[disabled]:hover{color:#1779ba}.button-group.clear .button.primary:focus,.button-group.clear .button.primary:hover,.button-group.clear.primary .button:focus,.button-group.clear.primary .button:hover{color:#0c3d5d}.button-group.clear .button.secondary,.button-group.clear .button.secondary.disabled,.button-group.clear .button.secondary.disabled:focus,.button-group.clear .button.secondary.disabled:hover,.button-group.clear .button.secondary[disabled],.button-group.clear .button.secondary[disabled]:focus,.button-group.clear .button.secondary[disabled]:hover,.button-group.clear.secondary .button,.button-group.clear.secondary .button.disabled,.button-group.clear.secondary .button.disabled:focus,.button-group.clear.secondary .button.disabled:hover,.button-group.clear.secondary .button[disabled],.button-group.clear.secondary .button[disabled]:focus,.button-group.clear.secondary .button[disabled]:hover{color:#767676}.button-group.clear .button.secondary:focus,.button-group.clear .button.secondary:hover,.button-group.clear.secondary .button:focus,.button-group.clear.secondary .button:hover{color:#3b3b3b}.button-group.clear .button.success,.button-group.clear .button.success.disabled,.button-group.clear .button.success.disabled:focus,.button-group.clear .button.success.disabled:hover,.button-group.clear .button.success[disabled],.button-group.clear .button.success[disabled]:focus,.button-group.clear .button.success[disabled]:hover,.button-group.clear.success .button,.button-group.clear.success .button.disabled,.button-group.clear.success .button.disabled:focus,.button-group.clear.success .button.disabled:hover,.button-group.clear.success .button[disabled],.button-group.clear.success .button[disabled]:focus,.button-group.clear.success .button[disabled]:hover{color:#3adb76}.button-group.clear .button.success:focus,.button-group.clear .button.success:hover,.button-group.clear.success .button:focus,.button-group.clear.success .button:hover{color:#157539}.button-group.clear .button.warning,.button-group.clear .button.warning.disabled,.button-group.clear .button.warning.disabled:focus,.button-group.clear .button.warning.disabled:hover,.button-group.clear .button.warning[disabled],.button-group.clear .button.warning[disabled]:focus,.button-group.clear .button.warning[disabled]:hover,.button-group.clear.warning .button,.button-group.clear.warning .button.disabled,.button-group.clear.warning .button.disabled:focus,.button-group.clear.warning .button.disabled:hover,.button-group.clear.warning .button[disabled],.button-group.clear.warning .button[disabled]:focus,.button-group.clear.warning .button[disabled]:hover{color:#ffae00}.button-group.clear .button.warning:focus,.button-group.clear .button.warning:hover,.button-group.clear.warning .button:focus,.button-group.clear.warning .button:hover{color:#805700}.button-group.clear .button.alert,.button-group.clear .button.alert.disabled,.button-group.clear .button.alert.disabled:focus,.button-group.clear .button.alert.disabled:hover,.button-group.clear .button.alert[disabled],.button-group.clear .button.alert[disabled]:focus,.button-group.clear .button.alert[disabled]:hover,.button-group.clear.alert .button,.button-group.clear.alert .button.disabled,.button-group.clear.alert .button.disabled:focus,.button-group.clear.alert .button.disabled:hover,.button-group.clear.alert .button[disabled],.button-group.clear.alert .button[disabled]:focus,.button-group.clear.alert .button[disabled]:hover{color:#cc4b37}.button-group.clear .button.alert:focus,.button-group.clear .button.alert:hover,.button-group.clear.alert .button:focus,.button-group.clear.alert .button:hover{color:#67251a}.button-group.no-gaps .button{margin-right:-.0625rem}.button-group.no-gaps .button+.button{border-left-color:transparent}.button-group.stacked,.button-group.stacked-for-medium,.button-group.stacked-for-small{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.button-group.stacked .button,.button-group.stacked-for-medium .button,.button-group.stacked-for-small .button{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%}.button-group.stacked .button:last-child,.button-group.stacked-for-medium .button:last-child,.button-group.stacked-for-small .button:last-child{margin-bottom:0}.button-group.stacked-for-medium.expanded .button,.button-group.stacked-for-small.expanded .button,.button-group.stacked.expanded .button{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}@media print,screen and (min-width:40em){.button-group.stacked-for-small .button{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:0}}@media print,screen and (min-width:64em){.button-group.stacked-for-medium .button{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:0}}@media print,screen and (max-width:39.99875em){.button-group.stacked-for-small.expanded{display:block}.button-group.stacked-for-small.expanded .button{display:block;margin-right:0}}@media print,screen and (max-width:63.99875em){.button-group.stacked-for-medium.expanded{display:block}.button-group.stacked-for-medium.expanded .button{display:block;margin-right:0}}.close-button{position:absolute;z-index:10;color:#8a8a8a;cursor:pointer}[data-whatinput=mouse] .close-button{outline:0}.close-button:focus,.close-button:hover{color:#0a0a0a}.close-button.small{right:.66rem;top:.33em;font-size:1.5em;line-height:1}.close-button,.close-button.medium{right:1rem;top:.5rem;font-size:2em;line-height:1}.label{display:inline-block;padding:.33333rem .5rem;border-radius:0;font-size:.8rem;line-height:1;white-space:nowrap;cursor:default;background:#1779ba;color:#fefefe}.label.primary{background:#1779ba;color:#fefefe}.label.secondary{background:#767676;color:#fefefe}.label.success{background:#3adb76;color:#0a0a0a}.label.warning{background:#ffae00;color:#0a0a0a}.label.alert{background:#cc4b37;color:#fefefe}.progress{height:1rem;margin-bottom:1rem;border-radius:0;background-color:#cacaca}.progress.primary .progress-meter{background-color:#1779ba}.progress.secondary .progress-meter{background-color:#767676}.progress.success .progress-meter{background-color:#3adb76}.progress.warning .progress-meter{background-color:#ffae00}.progress.alert .progress-meter{background-color:#cc4b37}.progress-meter{position:relative;display:block;width:0%;height:100%;background-color:#1779ba}.progress-meter-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);margin:0;font-size:.75rem;font-weight:700;color:#fefefe;white-space:nowrap}.slider{position:relative;height:.5rem;margin-top:1.25rem;margin-bottom:2.25rem;background-color:#e6e6e6;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:none;touch-action:none}.slider-fill{position:absolute;top:0;left:0;display:inline-block;max-width:100%;height:.5rem;background-color:#cacaca;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.slider-fill.is-dragging{-webkit-transition:all 0s linear;transition:all 0s linear}.slider-handle{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);left:0;z-index:1;display:inline-block;width:1.4rem;height:1.4rem;border-radius:0;background-color:#1779ba;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-ms-touch-action:manipulation;touch-action:manipulation}[data-whatinput=mouse] .slider-handle{outline:0}.slider-handle:hover{background-color:#14679e}.slider-handle.is-dragging{-webkit-transition:all 0s linear;transition:all 0s linear}.slider.disabled,.slider[disabled]{opacity:.25;cursor:not-allowed}.slider.vertical{display:inline-block;width:.5rem;height:12.5rem;margin:0 1.25rem;-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}.slider.vertical .slider-fill{top:0;width:.5rem;max-height:100%}.slider.vertical .slider-handle{position:absolute;top:0;left:50%;width:1.4rem;height:1.4rem;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.switch{height:2rem;position:relative;margin-bottom:1rem;outline:0;font-size:.875rem;font-weight:700;color:#fefefe;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch-input{position:absolute;margin-bottom:0;opacity:0}.switch-paddle{position:relative;display:block;width:4rem;height:2rem;border-radius:0;background:#cacaca;-webkit-transition:all .25s ease-out;transition:all .25s ease-out;font-weight:inherit;color:inherit;cursor:pointer}input+.switch-paddle{margin:0}.switch-paddle::after{position:absolute;top:.25rem;left:.25rem;display:block;width:1.5rem;height:1.5rem;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);border-radius:0;background:#fefefe;-webkit-transition:all .25s ease-out;transition:all .25s ease-out;content:''}input:checked~.switch-paddle{background:#1779ba}input:checked~.switch-paddle::after{left:2.25rem}input:disabled~.switch-paddle{cursor:not-allowed;opacity:.5}[data-whatinput=mouse] input:focus~.switch-paddle{outline:0}.switch-active,.switch-inactive{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.switch-active{left:8%;display:none}input:checked+label>.switch-active{display:block}.switch-inactive{right:15%}input:checked+label>.switch-inactive{display:none}.switch.tiny{height:1.5rem}.switch.tiny .switch-paddle{width:3rem;height:1.5rem;font-size:.625rem}.switch.tiny .switch-paddle::after{top:.25rem;left:.25rem;width:1rem;height:1rem}.switch.tiny input:checked~.switch-paddle::after{left:1.75rem}.switch.small{height:1.75rem}.switch.small .switch-paddle{width:3.5rem;height:1.75rem;font-size:.75rem}.switch.small .switch-paddle::after{top:.25rem;left:.25rem;width:1.25rem;height:1.25rem}.switch.small input:checked~.switch-paddle::after{left:2rem}.switch.large{height:2.5rem}.switch.large .switch-paddle{width:5rem;height:2.5rem;font-size:1rem}.switch.large .switch-paddle::after{top:.25rem;left:.25rem;width:2rem;height:2rem}.switch.large input:checked~.switch-paddle::after{left:2.75rem}table{border-collapse:collapse;width:100%;margin-bottom:1rem;border-radius:0}tbody,tfoot,thead{border:1px solid #f1f1f1;background-color:#fefefe}caption{padding:.5rem .625rem .625rem;font-weight:700}thead{background:#f8f8f8;color:#0a0a0a}tfoot{background:#f1f1f1;color:#0a0a0a}tfoot tr,thead tr{background:0 0}tfoot td,tfoot th,thead td,thead th{padding:.5rem .625rem .625rem;font-weight:700;text-align:left}tbody td,tbody th{padding:.5rem .625rem .625rem}tbody tr:nth-child(even){border-bottom:0;background-color:#f1f1f1}table.unstriped tbody{background-color:#fefefe}table.unstriped tbody tr{border-bottom:0;border-bottom:1px solid #f1f1f1;background-color:#fefefe}@media print,screen and (max-width:63.99875em){table.stack thead{display:none}table.stack tfoot{display:none}table.stack td,table.stack th,table.stack tr{display:block}table.stack td{border-top:0}}table.scroll{display:block;width:100%;overflow-x:auto}table.hover thead tr:hover{background-color:#f3f3f3}table.hover tfoot tr:hover{background-color:#ececec}table.hover tbody tr:hover{background-color:#f9f9f9}table.hover:not(.unstriped) tr:nth-of-type(even):hover{background-color:#ececec}.table-scroll{overflow-x:auto}.badge{display:inline-block;min-width:2.1em;padding:.3em;border-radius:50%;font-size:.6rem;text-align:center;background:#1779ba;color:#fefefe}.badge.primary{background:#1779ba;color:#fefefe}.badge.secondary{background:#767676;color:#fefefe}.badge.success{background:#3adb76;color:#0a0a0a}.badge.warning{background:#ffae00;color:#0a0a0a}.badge.alert{background:#cc4b37;color:#fefefe}.breadcrumbs{margin:0 0 1rem 0;list-style:none}.breadcrumbs::after,.breadcrumbs::before{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.breadcrumbs::after{clear:both}.breadcrumbs li{float:left;font-size:.6875rem;color:#0a0a0a;cursor:default;text-transform:uppercase}.breadcrumbs li:not(:last-child)::after{position:relative;margin:0 .75rem;opacity:1;content:"/";color:#cacaca}.breadcrumbs a{color:#1779ba}.breadcrumbs a:hover{text-decoration:underline}.breadcrumbs .disabled{color:#cacaca;cursor:not-allowed}.callout{position:relative;margin:0 0 1rem 0;padding:1rem;border:1px solid rgba(10,10,10,.25);border-radius:0;background-color:#fff;color:#0a0a0a}.callout>:first-child{margin-top:0}.callout>:last-child{margin-bottom:0}.callout.primary{background-color:#d7ecfa;color:#0a0a0a}.callout.secondary{background-color:#eaeaea;color:#0a0a0a}.callout.success{background-color:#e1faea;color:#0a0a0a}.callout.warning{background-color:#fff3d9;color:#0a0a0a}.callout.alert{background-color:#f7e4e1;color:#0a0a0a}.callout.small{padding-top:.5rem;padding-right:.5rem;padding-bottom:.5rem;padding-left:.5rem}.callout.large{padding-top:3rem;padding-right:3rem;padding-bottom:3rem;padding-left:3rem}.card{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-grow:1;-ms-flex-positive:1;flex-grow:1;margin-bottom:1rem;border:1px solid #e6e6e6;border-radius:0;background:#fefefe;-webkit-box-shadow:none;box-shadow:none;overflow:hidden;color:#0a0a0a}.card>:last-child{margin-bottom:0}.card-divider{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;padding:1rem;background:#e6e6e6}.card-divider>:last-child{margin-bottom:0}.card-section{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;padding:1rem}.card-section>:last-child{margin-bottom:0}.card-image{min-height:1px}.dropdown-pane{position:absolute;z-index:10;display:none;width:300px;padding:1rem;visibility:hidden;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;font-size:1rem}.dropdown-pane.is-opening{display:block}.dropdown-pane.is-open{display:block;visibility:visible}.dropdown-pane.tiny{width:100px}.dropdown-pane.small{width:200px}.dropdown-pane.large{width:400px}.pagination{margin-left:0;margin-bottom:1rem}.pagination::after,.pagination::before{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.pagination::after{clear:both}.pagination li{margin-right:.0625rem;border-radius:0;font-size:.875rem;display:none}.pagination li:first-child,.pagination li:last-child{display:inline-block}@media print,screen and (min-width:40em){.pagination li{display:inline-block}}.pagination a,.pagination button{display:block;padding:.1875rem .625rem;border-radius:0;color:#0a0a0a}.pagination a:hover,.pagination button:hover{background:#e6e6e6}.pagination .current{padding:.1875rem .625rem;background:#1779ba;color:#fefefe;cursor:default}.pagination .disabled{padding:.1875rem .625rem;color:#cacaca;cursor:not-allowed}.pagination .disabled:hover{background:0 0}.pagination .ellipsis::after{padding:.1875rem .625rem;content:'\2026';color:#0a0a0a}.pagination-previous a::before,.pagination-previous.disabled::before{display:inline-block;margin-right:.5rem;content:"«"}.pagination-next a::after,.pagination-next.disabled::after{display:inline-block;margin-left:.5rem;content:"»"}.has-tip{position:relative;display:inline-block;border-bottom:dotted 1px #8a8a8a;font-weight:700;cursor:help}.tooltip{position:absolute;top:calc(100% + .6495rem);z-index:1200;max-width:10rem;padding:.75rem;border-radius:0;background-color:#0a0a0a;font-size:80%;color:#fefefe}.tooltip::before{position:absolute}.tooltip.bottom::before{display:block;width:0;height:0;border-style:solid;border-width:.75rem;content:'';border-top-width:0;border-color:transparent transparent #0a0a0a;bottom:100%}.tooltip.bottom.align-center::before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.tooltip.top::before{display:block;width:0;height:0;border-style:solid;border-width:.75rem;content:'';border-bottom-width:0;border-color:#0a0a0a transparent transparent;top:100%;bottom:auto}.tooltip.top.align-center::before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.tooltip.left::before{display:block;width:0;height:0;border-style:solid;border-width:.75rem;content:'';border-right-width:0;border-color:transparent transparent transparent #0a0a0a;left:100%}.tooltip.left.align-center::before{bottom:auto;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.tooltip.right::before{display:block;width:0;height:0;border-style:solid;border-width:.75rem;content:'';border-left-width:0;border-color:transparent #0a0a0a transparent transparent;right:100%;left:auto}.tooltip.right.align-center::before{bottom:auto;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.tooltip.align-top::before{bottom:auto;top:10%}.tooltip.align-bottom::before{bottom:10%;top:auto}.tooltip.align-left::before{left:10%;right:auto}.tooltip.align-right::before{left:auto;right:10%}.accordion{margin-left:0;background:#fefefe;list-style-type:none}.accordion[disabled] .accordion-title{cursor:not-allowed}.accordion-item:first-child>:first-child{border-radius:0}.accordion-item:last-child>:last-child{border-radius:0}.accordion-title{position:relative;display:block;padding:1.25rem 1rem;border:1px solid #e6e6e6;border-bottom:0;font-size:.75rem;line-height:1;color:#1779ba}:last-child:not(.is-active)>.accordion-title{border-bottom:1px solid #e6e6e6;border-radius:0}.accordion-title:focus,.accordion-title:hover{background-color:#e6e6e6}.accordion-title::before{position:absolute;top:50%;right:1rem;margin-top:-.5rem;content:"+"}.is-active>.accordion-title::before{content:"–"}.accordion-content{display:none;padding:1rem;border:1px solid #e6e6e6;border-bottom:0;background-color:#fefefe;color:#0a0a0a}:last-child>.accordion-content:last-child{border-bottom:1px solid #e6e6e6}.media-object{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:1rem;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.media-object img{max-width:none}@media print,screen and (max-width:39.99875em){.media-object.stack-for-small{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.media-object-section{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.media-object-section:first-child{padding-right:1rem}.media-object-section:last-child:not(:nth-child(2)){padding-left:1rem}.media-object-section>:last-child{margin-bottom:0}@media print,screen and (max-width:39.99875em){.stack-for-small .media-object-section{padding:0;padding-bottom:1rem;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.stack-for-small .media-object-section img{width:100%}}.media-object-section.main-section{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.orbit{position:relative}.orbit-container{position:relative;height:0;margin:0;list-style:none;overflow:hidden}.orbit-slide{width:100%;position:absolute}.orbit-slide.no-motionui.is-active{top:0;left:0}.orbit-figure{margin:0}.orbit-image{width:100%;max-width:100%;margin:0}.orbit-caption{position:absolute;bottom:0;width:100%;margin-bottom:0;padding:1rem;background-color:rgba(10,10,10,.5);color:#fefefe}.orbit-next,.orbit-previous{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);z-index:10;padding:1rem;color:#fefefe}[data-whatinput=mouse] .orbit-next,[data-whatinput=mouse] .orbit-previous{outline:0}.orbit-next:active,.orbit-next:focus,.orbit-next:hover,.orbit-previous:active,.orbit-previous:focus,.orbit-previous:hover{background-color:rgba(10,10,10,.5)}.orbit-previous{left:0}.orbit-next{left:auto;right:0}.orbit-bullets{position:relative;margin-top:.8rem;margin-bottom:.8rem;text-align:center}[data-whatinput=mouse] .orbit-bullets{outline:0}.orbit-bullets button{width:1.2rem;height:1.2rem;margin:.1rem;border-radius:50%;background-color:#cacaca}.orbit-bullets button:hover{background-color:#8a8a8a}.orbit-bullets button.is-active{background-color:#8a8a8a}.flex-video,.responsive-embed{position:relative;height:0;margin-bottom:1rem;padding-bottom:75%;overflow:hidden}.flex-video embed,.flex-video iframe,.flex-video object,.flex-video video,.responsive-embed embed,.responsive-embed iframe,.responsive-embed object,.responsive-embed video{position:absolute;top:0;left:0;width:100%;height:100%}.flex-video.widescreen,.responsive-embed.widescreen{padding-bottom:56.25%}.tabs{margin:0;border:1px solid #e6e6e6;background:#fefefe;list-style-type:none}.tabs::after,.tabs::before{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.tabs::after{clear:both}.tabs.vertical>li{display:block;float:none;width:auto}.tabs.simple>li>a{padding:0}.tabs.simple>li>a:hover{background:0 0}.tabs.primary{background:#1779ba}.tabs.primary>li>a{color:#fefefe}.tabs.primary>li>a:focus,.tabs.primary>li>a:hover{background:#1673b1}.tabs-title{float:left}.tabs-title>a{display:block;padding:1.25rem 1.5rem;font-size:.75rem;line-height:1;color:#1779ba}[data-whatinput=mouse] .tabs-title>a{outline:0}.tabs-title>a:hover{background:#fefefe;color:#1468a0}.tabs-title>a:focus,.tabs-title>a[aria-selected=true]{background:#e6e6e6;color:#1779ba}.tabs-content{border:1px solid #e6e6e6;border-top:0;background:#fefefe;color:#0a0a0a;-webkit-transition:all .5s ease;transition:all .5s ease}.tabs-content.vertical{border:1px solid #e6e6e6;border-left:0}.tabs-panel{display:none;padding:1rem}.tabs-panel.is-active{display:block}.thumbnail{display:inline-block;max-width:100%;margin-bottom:1rem;border:4px solid #fefefe;border-radius:0;-webkit-box-shadow:0 0 0 1px rgba(10,10,10,.2);box-shadow:0 0 0 1px rgba(10,10,10,.2);line-height:0}a.thumbnail{-webkit-transition:-webkit-box-shadow .2s ease-out;transition:-webkit-box-shadow .2s ease-out;transition:box-shadow .2s ease-out;transition:box-shadow .2s ease-out,-webkit-box-shadow .2s ease-out}a.thumbnail:focus,a.thumbnail:hover{-webkit-box-shadow:0 0 6px 1px rgba(23,121,186,.5);box-shadow:0 0 6px 1px rgba(23,121,186,.5)}a.thumbnail image{-webkit-box-shadow:none;box-shadow:none}.menu{padding:0;margin:0;list-style:none;position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}[data-whatinput=mouse] .menu li{outline:0}.menu .button,.menu a{line-height:1;text-decoration:none;display:block;padding:.7rem 1rem}.menu a,.menu button,.menu input,.menu select{margin-bottom:0}.menu input{display:inline-block}.menu,.menu.horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.vertical.icon-bottom li a i,.menu.vertical.icon-bottom li a img,.menu.vertical.icon-bottom li a svg,.menu.vertical.icon-top li a i,.menu.vertical.icon-top li a img,.menu.vertical.icon-top li a svg{text-align:left}.menu.expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.expanded.icon-bottom li a i,.menu.expanded.icon-bottom li a img,.menu.expanded.icon-bottom li a svg,.menu.expanded.icon-top li a i,.menu.expanded.icon-top li a img,.menu.expanded.icon-top li a svg{text-align:left}.menu.simple{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.menu.simple li+li{margin-left:1rem}.menu.simple a{padding:0}@media print,screen and (min-width:40em){.menu.medium-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.medium-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.medium-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.medium-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}@media print,screen and (min-width:64em){.menu.large-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.large-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.large-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.large-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}.menu.nested{margin-right:0;margin-left:1rem}.menu.icons a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu.icon-bottom a,.menu.icon-left a,.menu.icon-right a,.menu.icon-top a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu.icon-left li a,.menu.nested.icon-left li a{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu.icon-left li a i,.menu.icon-left li a img,.menu.icon-left li a svg,.menu.nested.icon-left li a i,.menu.nested.icon-left li a img,.menu.nested.icon-left li a svg{margin-right:.25rem}.menu.icon-right li a,.menu.nested.icon-right li a{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu.icon-right li a i,.menu.icon-right li a img,.menu.icon-right li a svg,.menu.nested.icon-right li a i,.menu.nested.icon-right li a img,.menu.nested.icon-right li a svg{margin-left:.25rem}.menu.icon-top li a,.menu.nested.icon-top li a{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu.icon-top li a i,.menu.icon-top li a img,.menu.icon-top li a svg,.menu.nested.icon-top li a i,.menu.nested.icon-top li a img,.menu.nested.icon-top li a svg{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;margin-bottom:.25rem;text-align:center}.menu.icon-bottom li a,.menu.nested.icon-bottom li a{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu.icon-bottom li a i,.menu.icon-bottom li a img,.menu.icon-bottom li a svg,.menu.nested.icon-bottom li a i,.menu.nested.icon-bottom li a img,.menu.nested.icon-bottom li a svg{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;margin-bottom:.25rem;text-align:center}.menu .is-active>a{background:#1779ba;color:#fefefe}.menu .active>a{background:#1779ba;color:#fefefe}.menu.align-left{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu.align-right li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.menu.align-right li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu.align-right.vertical li{display:block;text-align:right}.menu.align-right.vertical li .submenu li{text-align:right}.menu.align-right.icon-bottom li a i,.menu.align-right.icon-bottom li a img,.menu.align-right.icon-bottom li a svg,.menu.align-right.icon-top li a i,.menu.align-right.icon-top li a img,.menu.align-right.icon-top li a svg{text-align:right}.menu.align-right .nested{margin-right:1rem;margin-left:0}.menu.align-center li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu.align-center li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu .menu-text{padding:.7rem 1rem;font-weight:700;line-height:1;color:inherit}.menu-centered>.menu{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-centered>.menu li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-centered>.menu li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.no-js [data-responsive-menu] ul{display:none}.menu-icon{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon::after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#fefefe;-webkit-box-shadow:0 7px 0 #fefefe,0 14px 0 #fefefe;box-shadow:0 7px 0 #fefefe,0 14px 0 #fefefe;content:''}.menu-icon:hover::after{background:#cacaca;-webkit-box-shadow:0 7px 0 #cacaca,0 14px 0 #cacaca;box-shadow:0 7px 0 #cacaca,0 14px 0 #cacaca}.menu-icon.dark{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon.dark::after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#0a0a0a;-webkit-box-shadow:0 7px 0 #0a0a0a,0 14px 0 #0a0a0a;box-shadow:0 7px 0 #0a0a0a,0 14px 0 #0a0a0a;content:''}.menu-icon.dark:hover::after{background:#8a8a8a;-webkit-box-shadow:0 7px 0 #8a8a8a,0 14px 0 #8a8a8a;box-shadow:0 7px 0 #8a8a8a,0 14px 0 #8a8a8a}.accordion-menu li{width:100%}.accordion-menu a{padding:.7rem 1rem}.accordion-menu .is-accordion-submenu a{padding:.7rem 1rem}.accordion-menu .nested.is-accordion-submenu{margin-right:0;margin-left:1rem}.accordion-menu.align-right .nested.is-accordion-submenu{margin-right:1rem;margin-left:0}.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a{position:relative}.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-bottom-width:0;border-color:#1779ba transparent transparent;position:absolute;top:50%;margin-top:-3px;right:1rem}.accordion-menu.align-left .is-accordion-submenu-parent>a::after{right:1rem;left:auto}.accordion-menu.align-right .is-accordion-submenu-parent>a::after{right:auto;left:1rem}.accordion-menu .is-accordion-submenu-parent[aria-expanded=true]>a::after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.is-accordion-submenu-parent{position:relative}.has-submenu-toggle>a{margin-right:40px}.submenu-toggle{position:absolute;top:0;right:0;width:40px;height:40px;cursor:pointer}.submenu-toggle::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-bottom-width:0;border-color:#1779ba transparent transparent;top:0;bottom:0;margin:auto}.submenu-toggle[aria-expanded=true]::after{-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1);-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.submenu-toggle-text{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.is-drilldown{position:relative;overflow:hidden}.is-drilldown li{display:block}.is-drilldown.animate-height{-webkit-transition:height .5s;transition:height .5s}.drilldown a{padding:.7rem 1rem;background:#fefefe}.drilldown .is-drilldown-submenu{position:absolute;top:0;left:100%;z-index:-1;width:100%;background:#fefefe;-webkit-transition:-webkit-transform .15s linear;transition:-webkit-transform .15s linear;transition:transform .15s linear;transition:transform .15s linear,-webkit-transform .15s linear}.drilldown .is-drilldown-submenu.is-active{z-index:1;display:block;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%)}.drilldown .is-drilldown-submenu.is-closing{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}.drilldown .is-drilldown-submenu a{padding:.7rem 1rem}.drilldown .nested.is-drilldown-submenu{margin-right:0;margin-left:0}.drilldown .drilldown-submenu-cover-previous{min-height:100%}.drilldown .is-drilldown-submenu-parent>a{position:relative}.drilldown .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-right-width:0;border-color:transparent transparent transparent #1779ba;position:absolute;top:50%;margin-top:-6px;right:1rem}.drilldown.align-left .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-right-width:0;border-color:transparent transparent transparent #1779ba;right:1rem;left:auto}.drilldown.align-right .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-left-width:0;border-color:transparent #1779ba transparent transparent;right:auto;left:1rem}.drilldown .js-drilldown-back>a::before{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-left-width:0;border-color:transparent #1779ba transparent transparent;display:inline-block;vertical-align:middle;margin-right:.75rem}.dropdown.menu>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-bottom-width:0;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}[data-whatinput=mouse] .dropdown.menu a{outline:0}.dropdown.menu>li>a{padding:.7rem 1rem}.dropdown.menu>li.is-active>a{background:0 0;color:#1779ba}.no-js .dropdown.menu ul{display:none}.dropdown.menu .nested.is-dropdown-submenu{margin-right:0;margin-left:0}.dropdown.menu.vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.vertical>li>a::after{right:14px}.dropdown.menu.vertical>li.opens-left>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-left-width:0;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.vertical>li.opens-right>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-right-width:0;border-color:transparent transparent transparent #1779ba}@media print,screen and (min-width:40em){.dropdown.menu.medium-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.medium-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-bottom-width:0;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.medium-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.medium-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.medium-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.medium-vertical>li>a::after{right:14px}.dropdown.menu.medium-vertical>li.opens-left>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-left-width:0;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.medium-vertical>li.opens-right>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-right-width:0;border-color:transparent transparent transparent #1779ba}}@media print,screen and (min-width:64em){.dropdown.menu.large-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.large-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-bottom-width:0;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.large-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.large-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.large-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.large-vertical>li>a::after{right:14px}.dropdown.menu.large-vertical>li.opens-left>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-left-width:0;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.large-vertical>li.opens-right>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-right-width:0;border-color:transparent transparent transparent #1779ba}}.dropdown.menu.align-right .is-dropdown-submenu.first-sub{top:100%;right:0;left:auto}.is-dropdown-menu.vertical{width:100px}.is-dropdown-menu.vertical.align-right{float:right}.is-dropdown-submenu-parent{position:relative}.is-dropdown-submenu-parent a::after{position:absolute;top:50%;right:5px;left:auto;margin-top:-6px}.is-dropdown-submenu-parent.opens-inner>.is-dropdown-submenu{top:100%;left:auto}.is-dropdown-submenu-parent.opens-left>.is-dropdown-submenu{right:100%;left:auto}.is-dropdown-submenu-parent.opens-right>.is-dropdown-submenu{right:auto;left:100%}.is-dropdown-submenu{position:absolute;top:0;left:100%;z-index:1;display:none;min-width:200px;border:1px solid #cacaca;background:#fefefe}.dropdown .is-dropdown-submenu a{padding:.7rem 1rem}.is-dropdown-submenu .is-dropdown-submenu-parent>a::after{right:14px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-left>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-left-width:0;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-right>a::after{display:block;width:0;height:0;border-style:solid;border-width:6px;content:'';border-right-width:0;border-color:transparent transparent transparent #1779ba}.is-dropdown-submenu .is-dropdown-submenu{margin-top:-1px}.is-dropdown-submenu>li{width:100%}.is-dropdown-submenu.js-dropdown-active{display:block}.is-off-canvas-open{overflow:hidden}.js-off-canvas-overlay{position:absolute;top:0;left:0;z-index:11;width:100%;height:100%;-webkit-transition:opacity .5s ease,visibility .5s ease;transition:opacity .5s ease,visibility .5s ease;background:rgba(254,254,254,.25);opacity:0;visibility:hidden;overflow:hidden}.js-off-canvas-overlay.is-visible{opacity:1;visibility:visible}.js-off-canvas-overlay.is-closable{cursor:pointer}.js-off-canvas-overlay.is-overlay-absolute{position:absolute}.js-off-canvas-overlay.is-overlay-fixed{position:fixed}.off-canvas-wrapper{position:relative;overflow:hidden}.off-canvas{position:fixed;z-index:12;-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease,-webkit-transform .5s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#e6e6e6}[data-whatinput=mouse] .off-canvas{outline:0}.off-canvas.is-transition-push{z-index:12}.off-canvas.is-closed{visibility:hidden}.off-canvas.is-transition-overlap{z-index:13}.off-canvas.is-transition-overlap.is-open{-webkit-box-shadow:0 0 10px rgba(10,10,10,.7);box-shadow:0 0 10px rgba(10,10,10,.7)}.off-canvas.is-open{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.off-canvas-absolute{position:absolute;z-index:12;-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease,-webkit-transform .5s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#e6e6e6}[data-whatinput=mouse] .off-canvas-absolute{outline:0}.off-canvas-absolute.is-transition-push{z-index:12}.off-canvas-absolute.is-closed{visibility:hidden}.off-canvas-absolute.is-transition-overlap{z-index:13}.off-canvas-absolute.is-transition-overlap.is-open{-webkit-box-shadow:0 0 10px rgba(10,10,10,.7);box-shadow:0 0 10px rgba(10,10,10,.7)}.off-canvas-absolute.is-open{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.position-left{top:0;left:0;height:100%;overflow-y:auto;width:250px;-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.off-canvas-content .off-canvas.position-left{-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.off-canvas-content .off-canvas.position-left.is-transition-overlap.is-open{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.off-canvas-content.is-open-left.has-transition-push{-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.position-left.is-transition-push{-webkit-box-shadow:inset -13px 0 20px -13px rgba(10,10,10,.25);box-shadow:inset -13px 0 20px -13px rgba(10,10,10,.25)}.position-right{top:0;right:0;height:100%;overflow-y:auto;width:250px;-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.off-canvas-content .off-canvas.position-right{-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.off-canvas-content .off-canvas.position-right.is-transition-overlap.is-open{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.off-canvas-content.is-open-right.has-transition-push{-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.position-right.is-transition-push{-webkit-box-shadow:inset 13px 0 20px -13px rgba(10,10,10,.25);box-shadow:inset 13px 0 20px -13px rgba(10,10,10,.25)}.position-top{top:0;left:0;width:100%;overflow-x:auto;height:250px;-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.off-canvas-content .off-canvas.position-top{-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.off-canvas-content .off-canvas.position-top.is-transition-overlap.is-open{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.off-canvas-content.is-open-top.has-transition-push{-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.position-top.is-transition-push{-webkit-box-shadow:inset 0 -13px 20px -13px rgba(10,10,10,.25);box-shadow:inset 0 -13px 20px -13px rgba(10,10,10,.25)}.position-bottom{bottom:0;left:0;width:100%;overflow-x:auto;height:250px;-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.off-canvas-content .off-canvas.position-bottom{-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.off-canvas-content .off-canvas.position-bottom.is-transition-overlap.is-open{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.off-canvas-content.is-open-bottom.has-transition-push{-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.position-bottom.is-transition-push{-webkit-box-shadow:inset 0 13px 20px -13px rgba(10,10,10,.25);box-shadow:inset 0 13px 20px -13px rgba(10,10,10,.25)}.off-canvas-content{-webkit-transform:none;-ms-transform:none;transform:none;-webkit-backface-visibility:hidden;backface-visibility:hidden}.off-canvas-content.has-transition-overlap,.off-canvas-content.has-transition-push{-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease,-webkit-transform .5s ease}.off-canvas-content.has-transition-push{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.off-canvas-content .off-canvas.is-open{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}@media print,screen and (min-width:40em){.position-left.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-medium .close-button{display:none}.off-canvas-content .position-left.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-medium~.off-canvas-content{margin-left:250px}.position-right.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-medium .close-button{display:none}.off-canvas-content .position-right.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-medium~.off-canvas-content{margin-right:250px}.position-top.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-medium .close-button{display:none}.off-canvas-content .position-top.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-medium~.off-canvas-content{margin-top:250px}.position-bottom.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-medium .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-medium~.off-canvas-content{margin-bottom:250px}}@media print,screen and (min-width:64em){.position-left.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-large .close-button{display:none}.off-canvas-content .position-left.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-large~.off-canvas-content{margin-left:250px}.position-right.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-large .close-button{display:none}.off-canvas-content .position-right.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-large~.off-canvas-content{margin-right:250px}.position-top.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-large .close-button{display:none}.off-canvas-content .position-top.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-large~.off-canvas-content{margin-top:250px}.position-bottom.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-large .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-large~.off-canvas-content{margin-bottom:250px}}@media print,screen and (min-width:40em){.off-canvas.in-canvas-for-medium{visibility:visible;height:auto;position:static;background:0 0;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-medium.position-bottom,.off-canvas.in-canvas-for-medium.position-left,.off-canvas.in-canvas-for-medium.position-right,.off-canvas.in-canvas-for-medium.position-top{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-medium .close-button{display:none}}@media print,screen and (min-width:64em){.off-canvas.in-canvas-for-large{visibility:visible;height:auto;position:static;background:0 0;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-large.position-bottom,.off-canvas.in-canvas-for-large.position-left,.off-canvas.in-canvas-for-large.position-right,.off-canvas.in-canvas-for-large.position-top{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-large .close-button{display:none}}html.is-reveal-open{position:fixed;width:100%;overflow-y:hidden}html.is-reveal-open.zf-has-scroll{overflow-y:scroll}html.is-reveal-open body{overflow-y:hidden}.reveal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1005;display:none;background-color:rgba(10,10,10,.45);overflow-y:auto}.reveal{z-index:1006;-webkit-backface-visibility:hidden;backface-visibility:hidden;display:none;padding:1rem;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;position:relative;top:100px;margin-right:auto;margin-left:auto;overflow-y:auto}[data-whatinput=mouse] .reveal{outline:0}@media print,screen and (min-width:40em){.reveal{min-height:0}}.reveal .column{min-width:0}.reveal>:last-child{margin-bottom:0}@media print,screen and (min-width:40em){.reveal{width:600px;max-width:75rem}}.reveal.collapse{padding:0}@media print,screen and (min-width:40em){.reveal.tiny{width:30%;max-width:75rem}}@media print,screen and (min-width:40em){.reveal.small{width:50%;max-width:75rem}}@media print,screen and (min-width:40em){.reveal.large{width:90%;max-width:75rem}}.reveal.full{top:0;right:0;bottom:0;left:0;width:100%;max-width:none;height:100%;min-height:100%;margin-left:0;border:0;border-radius:0}@media print,screen and (max-width:39.99875em){.reveal{top:0;right:0;bottom:0;left:0;width:100%;max-width:none;height:100%;min-height:100%;margin-left:0;border:0;border-radius:0}}.reveal.without-overlay{position:fixed}.sticky-container{position:relative}.sticky{position:relative;z-index:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.sticky.is-stuck{position:fixed;z-index:5;width:100%}.sticky.is-stuck.is-at-top{top:0}.sticky.is-stuck.is-at-bottom{bottom:0}.sticky.is-anchored{position:relative;right:auto;left:auto}.sticky.is-anchored.is-at-bottom{bottom:0}.title-bar{padding:.5rem;background:#0a0a0a;color:#fefefe;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.title-bar .menu-icon{margin-left:.25rem;margin-right:.25rem}.title-bar-left,.title-bar-right{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.title-bar-right{text-align:right}.title-bar-title{display:inline-block;vertical-align:middle;font-weight:700}.top-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:.5rem;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar,.top-bar ul{background-color:#e6e6e6}.top-bar input{max-width:200px;margin-right:1rem}.top-bar .input-group-field{width:100%;margin-right:0}.top-bar input.button{width:auto}.top-bar .top-bar-left,.top-bar .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}@media print,screen and (min-width:40em){.top-bar{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.top-bar .top-bar-left{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;margin-right:auto}.top-bar .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;margin-left:auto}}@media print,screen and (max-width:63.99875em){.top-bar.stacked-for-medium{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-medium .top-bar-left,.top-bar.stacked-for-medium .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}@media print,screen and (max-width:74.99875em){.top-bar.stacked-for-large{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-large .top-bar-left,.top-bar.stacked-for-large .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}.top-bar-title{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin:.5rem 1rem .5rem 0}.top-bar-left,.top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.float-left{float:left!important}.float-right{float:right!important}.float-center{display:block;margin-right:auto;margin-left:auto}.clearfix::after,.clearfix::before{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.clearfix::after{clear:both}.align-left{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.align-right{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.align-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.align-justify{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.align-spaced{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.align-left.vertical.menu>li>a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.align-right.vertical.menu>li>a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.align-center.vertical.menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.align-top{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.align-self-top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.align-bottom{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.align-self-bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.align-middle{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.align-self-middle{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.align-stretch{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.align-self-stretch{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.align-center-middle{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center}.small-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.small-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.small-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.small-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.small-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.small-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}@media print,screen and (min-width:40em){.medium-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.medium-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.medium-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.medium-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.medium-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.medium-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}@media print,screen and (min-width:64em){.large-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.large-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.large-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.large-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.large-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.large-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}.flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}@media print,screen and (min-width:40em){.medium-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.medium-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.medium-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.medium-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.medium-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.medium-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.medium-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.medium-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}@media print,screen and (min-width:64em){.large-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.large-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.large-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.large-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.large-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.large-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.large-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.large-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}.hide{display:none!important}.invisible{visibility:hidden}.visible{visibility:visible}@media print,screen and (max-width:39.99875em){.hide-for-small-only{display:none!important}}@media screen and (max-width:0em),screen and (min-width:40em){.show-for-small-only{display:none!important}}@media print,screen and (min-width:40em){.hide-for-medium{display:none!important}}@media screen and (max-width:39.99875em){.show-for-medium{display:none!important}}@media print,screen and (min-width:40em) and (max-width:63.99875em){.hide-for-medium-only{display:none!important}}@media screen and (max-width:39.99875em),screen and (min-width:64em){.show-for-medium-only{display:none!important}}@media print,screen and (min-width:64em){.hide-for-large{display:none!important}}@media screen and (max-width:63.99875em){.show-for-large{display:none!important}}@media print,screen and (min-width:64em) and (max-width:74.99875em){.hide-for-large-only{display:none!important}}@media screen and (max-width:63.99875em),screen and (min-width:75em){.show-for-large-only{display:none!important}}.show-for-sr,.show-on-focus{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.show-on-focus:active,.show-on-focus:focus{position:static!important;width:auto!important;height:auto!important;overflow:visible!important;clip:auto!important;white-space:normal!important}.hide-for-portrait,.show-for-landscape{display:block!important}@media screen and (orientation:landscape){.hide-for-portrait,.show-for-landscape{display:block!important}}@media screen and (orientation:portrait){.hide-for-portrait,.show-for-landscape{display:none!important}}.hide-for-landscape,.show-for-portrait{display:none!important}@media screen and (orientation:landscape){.hide-for-landscape,.show-for-portrait{display:none!important}}@media screen and (orientation:portrait){.hide-for-landscape,.show-for-portrait{display:block!important}} +/*# sourceMappingURL=foundation.min.css.map */ diff --git a/pkgs/csslib/third_party/html5-boilerplate/LICENSE.txt b/pkgs/csslib/third_party/html5-boilerplate/LICENSE.txt new file mode 100644 index 000000000..294e91d80 --- /dev/null +++ b/pkgs/csslib/third_party/html5-boilerplate/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) HTML5 Boilerplate + +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/pkgs/csslib/third_party/html5-boilerplate/README.md b/pkgs/csslib/third_party/html5-boilerplate/README.md new file mode 100644 index 000000000..3ca556d0f --- /dev/null +++ b/pkgs/csslib/third_party/html5-boilerplate/README.md @@ -0,0 +1,4 @@ +This folder contains sample css files from the open-source project +https://github.com/h5bp/html5-boilerplate. + +This code was included under the terms in the `LICENSE.txt` file. \ No newline at end of file diff --git a/pkgs/csslib/third_party/html5-boilerplate/normalize.css b/pkgs/csslib/third_party/html5-boilerplate/normalize.css new file mode 100644 index 000000000..192eb9ce4 --- /dev/null +++ b/pkgs/csslib/third_party/html5-boilerplate/normalize.css @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | 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 iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + 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 + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + 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 + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * 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 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 + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 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; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * 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 { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + 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 in Chrome and Safari on macOS. + */ + +[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 Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/pkgs/csslib/third_party/html5-boilerplate/style.css b/pkgs/csslib/third_party/html5-boilerplate/style.css new file mode 100644 index 000000000..416a37ec7 --- /dev/null +++ b/pkgs/csslib/third_party/html5-boilerplate/style.css @@ -0,0 +1,263 @@ +/*! HTML5 Boilerplate v8.0.0 | MIT License | https://html5boilerplate.com/ */ + +/* main.css 2.1.0 | MIT License | https://github.com/h5bp/main.css#readme */ +/* + * What follows is the result of much research on cross-browser styling. + * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal, + * Kroc Camen, and the H5BP dev community and team. + */ + +/* ========================================================================== + Base styles: opinionated defaults + ========================================================================== */ + +html { + color: #222; + font-size: 1em; + line-height: 1.4; +} + +/* + * Remove text-shadow in selection highlight: + * https://twitter.com/miketaylr/status/12228805301 + * + * Vendor-prefixed and regular ::selection selectors cannot be combined: + * https://stackoverflow.com/a/16982510/7133471 + * + * Customize the background color to match your design. + */ + +::-moz-selection { + background: #b3d4fc; + text-shadow: none; +} + +::selection { + background: #b3d4fc; + text-shadow: none; +} + +/* + * A better looking default horizontal rule + */ + +hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ccc; + margin: 1em 0; + padding: 0; +} + +/* + * Remove the gap between audio, canvas, iframes, + * images, videos and the bottom of their containers: + * https://github.com/h5bp/html5-boilerplate/issues/440 + */ + +audio, +canvas, +iframe, +img, +svg, +video { + vertical-align: middle; +} + +/* + * Remove default fieldset styles. + */ + +fieldset { + border: 0; + margin: 0; + padding: 0; +} + +/* + * Allow only vertical resizing of textareas. + */ + +textarea { + resize: vertical; +} + +/* ========================================================================== + Author's custom styles + ========================================================================== */ + +/* ========================================================================== + Helper classes + ========================================================================== */ + +/* + * Hide visually and from screen readers + */ + +.hidden, +[hidden] { + display: none !important; +} + +/* + * Hide only visually, but have it available for screen readers: + * https://snook.ca/archives/html_and_css/hiding-content-for-accessibility + * + * 1. For long content, line feeds are not interpreted as spaces and small width + * causes content to wrap 1 word per line: + * https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe + */ + +.sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + white-space: nowrap; + width: 1px; + /* 1 */ +} + +/* + * Extends the .sr-only class to allow the element + * to be focusable when navigated to via the keyboard: + * https://www.drupal.org/node/897638 + */ + +.sr-only.focusable:active, +.sr-only.focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + white-space: inherit; + width: auto; +} + +/* + * Hide visually and from screen readers, but maintain layout + */ + +.invisible { + visibility: hidden; +} + +/* + * Clearfix: contain floats + * + * For modern browsers + * 1. The space content is one way to avoid an Opera bug when the + * `contenteditable` attribute is included anywhere else in the document. + * Otherwise it causes space to appear at the top and bottom of elements + * that receive the `clearfix` class. + * 2. The use of `table` rather than `block` is only necessary if using + * `:before` to contain the top-margins of child elements. + */ + +.clearfix::before, +.clearfix::after { + content: " "; + display: table; +} + +.clearfix::after { + clear: both; +} + +/* ========================================================================== + EXAMPLE Media Queries for Responsive Design. + These examples override the primary ('mobile first') styles. + Modify as content requires. + ========================================================================== */ + +@media only screen and (min-width: 35em) { + /* Style adjustments for viewports that meet the condition */ +} + +@media print, + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 1.25dppx), + (min-resolution: 120dpi) { + /* Style adjustments for high resolution devices */ +} + +/* ========================================================================== + Print styles. + Inlined to avoid the additional HTTP request: + https://www.phpied.com/delay-loading-your-print-css/ + ========================================================================== */ + +@media print { + *, + *::before, + *::after { + background: #fff !important; + color: #000 !important; + /* Black prints faster */ + box-shadow: none !important; + text-shadow: none !important; + } + + a, + a:visited { + text-decoration: underline; + } + + a[href]::after { + content: " (" attr(href) ")"; + } + + abbr[title]::after { + content: " (" attr(title) ")"; + } + + /* + * Don't show links that are fragment identifiers, + * or use the `javascript:` pseudo protocol + */ + a[href^="#"]::after, + a[href^="javascript:"]::after { + content: ""; + } + + pre { + white-space: pre-wrap !important; + } + + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + /* + * Printing Tables: + * https://web.archive.org/web/20180815150934/http://css-discuss.incutio.com/wiki/Printing_Tables + */ + thead { + display: table-header-group; + } + + tr, + img { + page-break-inside: avoid; + } + + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + + h2, + h3 { + page-break-after: avoid; + } +} + diff --git a/pkgs/csslib/third_party/materialize/LICENSE b/pkgs/csslib/third_party/materialize/LICENSE new file mode 100644 index 000000000..c790fc282 --- /dev/null +++ b/pkgs/csslib/third_party/materialize/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2019 Materialize + +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/pkgs/csslib/third_party/materialize/README.md b/pkgs/csslib/third_party/materialize/README.md new file mode 100644 index 000000000..2be2627a9 --- /dev/null +++ b/pkgs/csslib/third_party/materialize/README.md @@ -0,0 +1,4 @@ +This folder contains sample css files from the open-source project +https://github.com/Dogfalo/materialize. + +This code was included under the terms in the `LICENSE` file. \ No newline at end of file diff --git a/pkgs/csslib/third_party/materialize/materialize.css b/pkgs/csslib/third_party/materialize/materialize.css new file mode 100644 index 000000000..bc6c1fe4a --- /dev/null +++ b/pkgs/csslib/third_party/materialize/materialize.css @@ -0,0 +1,9067 @@ +/*! + * 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/pkgs/csslib/third_party/materialize/materialize.min.css b/pkgs/csslib/third_party/materialize/materialize.min.css new file mode 100644 index 000000000..74b1741b6 --- /dev/null +++ b/pkgs/csslib/third_party/materialize/materialize.min.css @@ -0,0 +1,13 @@ +/*! + * 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/pkgs/csslib/third_party/mdc/LICENSE b/pkgs/csslib/third_party/mdc/LICENSE new file mode 100644 index 000000000..032483888 --- /dev/null +++ b/pkgs/csslib/third_party/mdc/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2014-2020 Google, Inc. + +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/pkgs/csslib/third_party/mdc/README.md b/pkgs/csslib/third_party/mdc/README.md new file mode 100644 index 000000000..f388348b8 --- /dev/null +++ b/pkgs/csslib/third_party/mdc/README.md @@ -0,0 +1,7 @@ +This folder contains sample css files from the open-source project +https://github.com/material-components/material-components-web. + +The generated .css files were retrieved from: +https://unpkg.com/browse/material-components-web@12.0.0/dist/ + +This code was included under the terms in the `LICENSE` file. \ No newline at end of file diff --git a/pkgs/csslib/third_party/mdc/material-components-web.css b/pkgs/csslib/third_party/mdc/material-components-web.css new file mode 100644 index 000000000..2099afef3 --- /dev/null +++ b/pkgs/csslib/third_party/mdc/material-components-web.css @@ -0,0 +1,16511 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://github.com/material-components/material-components-web/blob/master/LICENSE + */ +@charset "UTF-8"; +.mdc-banner__text { + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); +} + +.mdc-banner__graphic { + color: #fff; + /* @alternate */ + color: var(--mdc-theme-surface, #fff); +} + +.mdc-banner__graphic { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-theme-primary, #6200ee); +} + +.mdc-banner__graphic { + border-radius: 50%; +} + +.mdc-banner__content, +.mdc-banner__fixed { + min-width: 344px; +} +@media (max-width: 480px), (max-width: 344px) { + .mdc-banner__content, +.mdc-banner__fixed { + min-width: 100%; + } +} + +.mdc-banner__content { + max-width: 720px; +} + +.mdc-banner { + z-index: 1; + border-bottom-style: solid; + border-bottom-width: 1px; + box-sizing: border-box; + display: none; + flex-shrink: 0; + height: 0; + position: relative; + width: 100%; +} +@media (max-width: 480px) { + .mdc-banner .mdc-banner__fixed { + left: 0; + right: 0; + } + .mdc-banner .mdc-banner__text { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 36px; + } + [dir=rtl] .mdc-banner .mdc-banner__text, .mdc-banner .mdc-banner__text[dir=rtl] { + /* @noflip */ + margin-left: 36px; + /* @noflip */ + margin-right: 16px; + } +} +@media (max-width: 480px) { + .mdc-banner.mdc-banner--mobile-stacked .mdc-banner__content { + flex-wrap: wrap; + } + .mdc-banner.mdc-banner--mobile-stacked .mdc-banner__graphic { + margin-bottom: 12px; + } + .mdc-banner.mdc-banner--mobile-stacked .mdc-banner__text { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 8px; + padding-bottom: 4px; + } + [dir=rtl] .mdc-banner.mdc-banner--mobile-stacked .mdc-banner__text, .mdc-banner.mdc-banner--mobile-stacked .mdc-banner__text[dir=rtl] { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: 16px; + } + + .mdc-banner.mdc-banner--mobile-stacked .mdc-banner__actions { + margin-left: auto; + } +} + +.mdc-banner--opening, +.mdc-banner--open, +.mdc-banner--closing { + display: flex; +} + +.mdc-banner--open { + transition: height 300ms ease; +} +.mdc-banner--open .mdc-banner__content { + transition: -webkit-transform 300ms ease; + transition: transform 300ms ease; + transition: transform 300ms ease, -webkit-transform 300ms ease; + -webkit-transform: translateY(0); + transform: translateY(0); +} + +.mdc-banner--closing { + transition: height 250ms ease; +} +.mdc-banner--closing .mdc-banner__content { + transition: -webkit-transform 250ms ease; + transition: transform 250ms ease; + transition: transform 250ms ease, -webkit-transform 250ms ease; +} + +.mdc-banner--centered .mdc-banner__content { + left: 0; + margin-left: auto; + margin-right: auto; + right: 0; +} + +.mdc-banner__fixed { + border-bottom-style: solid; + border-bottom-width: 1px; + box-sizing: border-box; + height: inherit; + position: fixed; + width: 100%; +} + +.mdc-banner__content { + display: flex; + min-height: 52px; + position: absolute; + -webkit-transform: translateY(-100%); + transform: translateY(-100%); + width: 100%; +} + +.mdc-banner__graphic-text-wrapper { + display: flex; + width: 100%; +} + +.mdc-banner__graphic { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + flex-shrink: 0; + height: 40px; + margin-top: 16px; + margin-bottom: 16px; + text-align: center; + width: 40px; +} +[dir=rtl] .mdc-banner__graphic, .mdc-banner__graphic[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-banner__icon { + position: relative; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.mdc-banner__text { + /* @noflip */ + margin-left: 24px; + /* @noflip */ + margin-right: 90px; + align-self: center; + flex-grow: 1; + padding-top: 16px; + padding-bottom: 16px; +} +[dir=rtl] .mdc-banner__text, .mdc-banner__text[dir=rtl] { + /* @noflip */ + margin-left: 90px; + /* @noflip */ + margin-right: 24px; +} + +.mdc-banner__actions { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 8px; + align-self: flex-end; + display: flex; + flex-shrink: 0; + padding-bottom: 8px; + padding-top: 8px; +} +[dir=rtl] .mdc-banner__actions, .mdc-banner__actions[dir=rtl] { + /* @noflip */ + padding-left: 8px; + /* @noflip */ + padding-right: 0; +} + +.mdc-banner__secondary-action { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 8px; +} +[dir=rtl] .mdc-banner__secondary-action, .mdc-banner__secondary-action[dir=rtl] { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: 0; +} + +.mdc-banner { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-surface, #fff); + border-bottom-color: rgba(0, 0, 0, 0.12); +} +.mdc-banner .mdc-banner__fixed { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-surface, #fff); +} +.mdc-banner .mdc-banner__fixed { + border-bottom-color: rgba(0, 0, 0, 0.12); +} + +.mdc-banner__text { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-body2-font-size, 0.875rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-body2-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body2-font-weight, 400); + letter-spacing: 0.0178571429em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body2-letter-spacing, 0.0178571429em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body2-text-transform, inherit); +} + +.mdc-banner__primary-action:not(:disabled) { + color: #6200ee; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee); +} +.mdc-banner__primary-action::before, .mdc-banner__primary-action::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +.mdc-banner__primary-action:hover::before, .mdc-banner__primary-action.mdc-ripple-surface--hover::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-banner__primary-action.mdc-ripple-upgraded--background-focused::before, .mdc-banner__primary-action:not(.mdc-ripple-upgraded):focus::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-banner__primary-action:not(.mdc-ripple-upgraded)::after { + transition: opacity 150ms linear; +} +.mdc-banner__primary-action:not(.mdc-ripple-upgraded):active::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-banner__primary-action.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} + +.mdc-banner__secondary-action { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 8px; +} +.mdc-banner__secondary-action:not(:disabled) { + color: #6200ee; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee); +} +.mdc-banner__secondary-action::before, .mdc-banner__secondary-action::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +.mdc-banner__secondary-action:hover::before, .mdc-banner__secondary-action.mdc-ripple-surface--hover::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-banner__secondary-action.mdc-ripple-upgraded--background-focused::before, .mdc-banner__secondary-action:not(.mdc-ripple-upgraded):focus::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-banner__secondary-action:not(.mdc-ripple-upgraded)::after { + transition: opacity 150ms linear; +} +.mdc-banner__secondary-action:not(.mdc-ripple-upgraded):active::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-banner__secondary-action.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +[dir=rtl] .mdc-banner__secondary-action, .mdc-banner__secondary-action[dir=rtl] { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: 0; +} + +.mdc-touch-target-wrapper { + display: inline; +} + +.mdc-elevation-overlay { + position: absolute; + border-radius: inherit; + pointer-events: none; + opacity: 0; + /* @alternate */ + opacity: var(--mdc-elevation-overlay-opacity, 0); + transition: opacity 280ms cubic-bezier(0.4, 0, 0.2, 1); + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-elevation-overlay-color, #fff); +} + +.mdc-button { + /* @alternate */ + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + min-width: 64px; + border: none; + outline: none; + /* @alternate */ + line-height: inherit; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-appearance: none; + overflow: visible; + vertical-align: middle; + background: transparent; +} +.mdc-button .mdc-elevation-overlay { + width: 100%; + height: 100%; + top: 0; + /* @noflip */ + left: 0; +} +.mdc-button::-moz-focus-inner { + padding: 0; + border: 0; +} +.mdc-button:active { + outline: none; +} +.mdc-button:hover { + cursor: pointer; +} +.mdc-button:disabled { + cursor: default; + pointer-events: none; +} +.mdc-button .mdc-button__icon { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 8px; + display: inline-block; + position: relative; + vertical-align: top; +} +[dir=rtl] .mdc-button .mdc-button__icon, .mdc-button .mdc-button__icon[dir=rtl] { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: 0; +} + +.mdc-button .mdc-button__touch { + position: absolute; + top: 50%; + height: 48px; + left: 0; + right: 0; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.mdc-button__label + .mdc-button__icon { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: 0; +} +[dir=rtl] .mdc-button__label + .mdc-button__icon, .mdc-button__label + .mdc-button__icon[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 8px; +} + +svg.mdc-button__icon { + fill: currentColor; +} + +.mdc-button--raised .mdc-button__icon, +.mdc-button--unelevated .mdc-button__icon, +.mdc-button--outlined .mdc-button__icon { + /* @noflip */ + margin-left: -4px; + /* @noflip */ + margin-right: 8px; +} +[dir=rtl] .mdc-button--raised .mdc-button__icon, [dir=rtl] .mdc-button--unelevated .mdc-button__icon, [dir=rtl] .mdc-button--outlined .mdc-button__icon, .mdc-button--raised .mdc-button__icon[dir=rtl], .mdc-button--unelevated .mdc-button__icon[dir=rtl], .mdc-button--outlined .mdc-button__icon[dir=rtl] { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: -4px; +} + +.mdc-button--raised .mdc-button__label + .mdc-button__icon, +.mdc-button--unelevated .mdc-button__label + .mdc-button__icon, +.mdc-button--outlined .mdc-button__label + .mdc-button__icon { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: -4px; +} +[dir=rtl] .mdc-button--raised .mdc-button__label + .mdc-button__icon, [dir=rtl] .mdc-button--unelevated .mdc-button__label + .mdc-button__icon, [dir=rtl] .mdc-button--outlined .mdc-button__label + .mdc-button__icon, .mdc-button--raised .mdc-button__label + .mdc-button__icon[dir=rtl], .mdc-button--unelevated .mdc-button__label + .mdc-button__icon[dir=rtl], .mdc-button--outlined .mdc-button__label + .mdc-button__icon[dir=rtl] { + /* @noflip */ + margin-left: -4px; + /* @noflip */ + margin-right: 8px; +} + +.mdc-button--touch { + margin-top: 6px; + margin-bottom: 6px; +} + +.mdc-button { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + text-decoration: none; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-button-text-decoration, none); + text-decoration: var(--mdc-typography-button-text-decoration, none); +} + +@-webkit-keyframes mdc-ripple-fg-radius-in { + from { + -webkit-animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transform: translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1); + transform: translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1); + } + to { + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + } +} + +@keyframes mdc-ripple-fg-radius-in { + from { + -webkit-animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transform: translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1); + transform: translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1); + } + to { + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + } +} +@-webkit-keyframes mdc-ripple-fg-opacity-in { + from { + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + opacity: 0; + } + to { + opacity: var(--mdc-ripple-fg-opacity, 0); + } +} +@keyframes mdc-ripple-fg-opacity-in { + from { + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + opacity: 0; + } + to { + opacity: var(--mdc-ripple-fg-opacity, 0); + } +} +@-webkit-keyframes mdc-ripple-fg-opacity-out { + from { + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + opacity: var(--mdc-ripple-fg-opacity, 0); + } + to { + opacity: 0; + } +} +@keyframes mdc-ripple-fg-opacity-out { + from { + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + opacity: var(--mdc-ripple-fg-opacity, 0); + } + to { + opacity: 0; + } +} +.mdc-button { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-button .mdc-button__ripple::before, +.mdc-button .mdc-button__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-button .mdc-button__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-button .mdc-button__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-button.mdc-ripple-upgraded .mdc-button__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-button.mdc-ripple-upgraded .mdc-button__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-button.mdc-ripple-upgraded--unbounded .mdc-button__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-button.mdc-ripple-upgraded--foreground-activation .mdc-button__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-button.mdc-ripple-upgraded--foreground-deactivation .mdc-button__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-button .mdc-button__ripple::before, +.mdc-button .mdc-button__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +.mdc-button.mdc-ripple-upgraded .mdc-button__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-button .mdc-button__ripple { + position: absolute; + box-sizing: content-box; + width: 100%; + height: 100%; + overflow: hidden; +} +.mdc-button:not(.mdc-button--outlined) .mdc-button__ripple { + top: 0; + left: 0; +} + +.mdc-button--raised { + transition: box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.mdc-button--outlined { + border-style: solid; +} + +.mdc-button { + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-button-font-size, 0.875rem); + letter-spacing: 0.0892857143em; + /* @alternate */ + letter-spacing: var(--mdc-typography-button-letter-spacing, 0.0892857143em); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-button-font-weight, 500); + text-transform: uppercase; + /* @alternate */ + text-transform: var(--mdc-typography-button-text-transform, uppercase); + height: 36px; + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-small, 4px); + padding: 0 8px 0 8px; +} +.mdc-button:not(:disabled) { + color: #6200ee; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee); +} +.mdc-button:disabled { + color: rgba(0, 0, 0, 0.38); +} +.mdc-button .mdc-button__icon { + font-size: 1.125rem; + height: 1.125rem; + width: 1.125rem; +} +.mdc-button .mdc-button__ripple::before, +.mdc-button .mdc-button__ripple::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +.mdc-button:hover .mdc-button__ripple::before, .mdc-button.mdc-ripple-surface--hover .mdc-button__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-button.mdc-ripple-upgraded--background-focused .mdc-button__ripple::before, .mdc-button:not(.mdc-ripple-upgraded):focus .mdc-button__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-button:not(.mdc-ripple-upgraded) .mdc-button__ripple::after { + transition: opacity 150ms linear; +} +.mdc-button:not(.mdc-ripple-upgraded):active .mdc-button__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-button.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-button .mdc-button__ripple { + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-small, 4px); +} + +.mdc-button--unelevated { + padding: 0 16px 0 16px; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-button-font-size, 0.875rem); + letter-spacing: 0.0892857143em; + /* @alternate */ + letter-spacing: var(--mdc-typography-button-letter-spacing, 0.0892857143em); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-button-font-weight, 500); + text-transform: uppercase; + /* @alternate */ + text-transform: var(--mdc-typography-button-text-transform, uppercase); + height: 36px; + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-small, 4px); +} +.mdc-button--unelevated.mdc-button--icon-trailing { + padding: 0 12px 0 16px; +} +.mdc-button--unelevated.mdc-button--icon-leading { + padding: 0 16px 0 12px; +} +.mdc-button--unelevated:not(:disabled) { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-theme-primary, #6200ee); +} +.mdc-button--unelevated:disabled { + background-color: rgba(0, 0, 0, 0.12); +} +.mdc-button--unelevated:not(:disabled) { + color: #fff; + /* @alternate */ + color: var(--mdc-theme-on-primary, #fff); +} +.mdc-button--unelevated:disabled { + color: rgba(0, 0, 0, 0.38); +} +.mdc-button--unelevated .mdc-button__icon { + font-size: 1.125rem; + height: 1.125rem; + width: 1.125rem; +} +.mdc-button--unelevated .mdc-button__ripple::before, +.mdc-button--unelevated .mdc-button__ripple::after { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-on-primary, #fff)); +} +.mdc-button--unelevated:hover .mdc-button__ripple::before, .mdc-button--unelevated.mdc-ripple-surface--hover .mdc-button__ripple::before { + opacity: 0.08; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.08); +} +.mdc-button--unelevated.mdc-ripple-upgraded--background-focused .mdc-button__ripple::before, .mdc-button--unelevated:not(.mdc-ripple-upgraded):focus .mdc-button__ripple::before { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.24); +} +.mdc-button--unelevated:not(.mdc-ripple-upgraded) .mdc-button__ripple::after { + transition: opacity 150ms linear; +} +.mdc-button--unelevated:not(.mdc-ripple-upgraded):active .mdc-button__ripple::after { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.24); +} +.mdc-button--unelevated.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.24); +} +.mdc-button--unelevated .mdc-button__ripple { + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-small, 4px); +} + +.mdc-button--raised { + padding: 0 16px 0 16px; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-button-font-size, 0.875rem); + letter-spacing: 0.0892857143em; + /* @alternate */ + letter-spacing: var(--mdc-typography-button-letter-spacing, 0.0892857143em); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-button-font-weight, 500); + text-transform: uppercase; + /* @alternate */ + text-transform: var(--mdc-typography-button-text-transform, uppercase); + height: 36px; + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-small, 4px); + /* @alternate */ + 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); +} +.mdc-button--raised.mdc-button--icon-trailing { + padding: 0 12px 0 16px; +} +.mdc-button--raised.mdc-button--icon-leading { + padding: 0 16px 0 12px; +} +.mdc-button--raised:not(:disabled) { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-theme-primary, #6200ee); +} +.mdc-button--raised:disabled { + background-color: rgba(0, 0, 0, 0.12); +} +.mdc-button--raised:not(:disabled) { + color: #fff; + /* @alternate */ + color: var(--mdc-theme-on-primary, #fff); +} +.mdc-button--raised:disabled { + color: rgba(0, 0, 0, 0.38); +} +.mdc-button--raised .mdc-button__icon { + font-size: 1.125rem; + height: 1.125rem; + width: 1.125rem; +} +.mdc-button--raised .mdc-button__ripple::before, +.mdc-button--raised .mdc-button__ripple::after { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-on-primary, #fff)); +} +.mdc-button--raised:hover .mdc-button__ripple::before, .mdc-button--raised.mdc-ripple-surface--hover .mdc-button__ripple::before { + opacity: 0.08; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.08); +} +.mdc-button--raised.mdc-ripple-upgraded--background-focused .mdc-button__ripple::before, .mdc-button--raised:not(.mdc-ripple-upgraded):focus .mdc-button__ripple::before { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.24); +} +.mdc-button--raised:not(.mdc-ripple-upgraded) .mdc-button__ripple::after { + transition: opacity 150ms linear; +} +.mdc-button--raised:not(.mdc-ripple-upgraded):active .mdc-button__ripple::after { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.24); +} +.mdc-button--raised.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.24); +} +.mdc-button--raised .mdc-button__ripple { + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-small, 4px); +} +.mdc-button--raised.mdc-ripple-upgraded--background-focused, .mdc-button--raised:not(.mdc-ripple-upgraded):focus { + /* @alternate */ + box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12); +} +.mdc-button--raised:hover { + /* @alternate */ + box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12); +} +.mdc-button--raised:not(:disabled):active { + /* @alternate */ + box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12); +} +.mdc-button--raised:disabled { + /* @alternate */ + box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12); +} +.mdc-button--outlined { + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-button-font-size, 0.875rem); + letter-spacing: 0.0892857143em; + /* @alternate */ + letter-spacing: var(--mdc-typography-button-letter-spacing, 0.0892857143em); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-button-font-weight, 500); + text-transform: uppercase; + /* @alternate */ + text-transform: var(--mdc-typography-button-text-transform, uppercase); + height: 36px; + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-small, 4px); + padding: 0 15px 0 15px; + border-width: 1px; +} +.mdc-button--outlined:not(:disabled) { + color: #6200ee; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee); +} +.mdc-button--outlined:disabled { + color: rgba(0, 0, 0, 0.38); +} +.mdc-button--outlined .mdc-button__icon { + font-size: 1.125rem; + height: 1.125rem; + width: 1.125rem; +} +.mdc-button--outlined .mdc-button__ripple::before, +.mdc-button--outlined .mdc-button__ripple::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +.mdc-button--outlined:hover .mdc-button__ripple::before, .mdc-button--outlined.mdc-ripple-surface--hover .mdc-button__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-button--outlined.mdc-ripple-upgraded--background-focused .mdc-button__ripple::before, .mdc-button--outlined:not(.mdc-ripple-upgraded):focus .mdc-button__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-button--outlined:not(.mdc-ripple-upgraded) .mdc-button__ripple::after { + transition: opacity 150ms linear; +} +.mdc-button--outlined:not(.mdc-ripple-upgraded):active .mdc-button__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-button--outlined.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-button--outlined .mdc-button__ripple { + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-small, 4px); +} +.mdc-button--outlined:not(:disabled) { + border-color: rgba(0, 0, 0, 0.12); +} +.mdc-button--outlined:disabled { + border-color: rgba(0, 0, 0, 0.12); +} +.mdc-button--outlined.mdc-button--icon-trailing { + padding: 0 11px 0 15px; +} +.mdc-button--outlined.mdc-button--icon-leading { + padding: 0 15px 0 11px; +} +.mdc-button--outlined .mdc-button__ripple { + top: -1px; + left: -1px; + border: 1px solid transparent; +} +.mdc-button--outlined .mdc-button__touch { + left: -1px; + width: calc(100% + 2 * 1px); +} + +.mdc-card { + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-medium, 4px); + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-surface, #fff); + /* @alternate */ + position: relative; + /* @alternate */ + box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12); + display: flex; + flex-direction: column; + box-sizing: border-box; +} +.mdc-card .mdc-elevation-overlay { + width: 100%; + height: 100%; + top: 0; + /* @noflip */ + left: 0; +} +.mdc-card::after { + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-medium, 4px); + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 1px solid transparent; + border-radius: inherit; + content: ""; + pointer-events: none; + pointer-events: none; +} + +.mdc-card--outlined { + /* @alternate */ + box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12); + border-width: 1px; + border-style: solid; + border-color: #e0e0e0; +} +.mdc-card--outlined::after { + border: none; +} + +.mdc-card__content { + border-radius: inherit; + height: 100%; +} + +.mdc-card__media { + position: relative; + box-sizing: border-box; + background-repeat: no-repeat; + background-position: center; + background-size: cover; +} +.mdc-card__media::before { + display: block; + content: ""; +} + +.mdc-card__media:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} + +.mdc-card__media:last-child { + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; +} + +.mdc-card__media--square::before { + margin-top: 100%; +} + +.mdc-card__media--16-9::before { + margin-top: 56.25%; +} + +.mdc-card__media-content { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + box-sizing: border-box; +} + +.mdc-card__primary-action { + display: flex; + flex-direction: column; + box-sizing: border-box; + position: relative; + outline: none; + color: inherit; + text-decoration: none; + cursor: pointer; + overflow: hidden; +} + +.mdc-card__primary-action:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} + +.mdc-card__primary-action:last-child { + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; +} + +.mdc-card__actions { + display: flex; + flex-direction: row; + align-items: center; + box-sizing: border-box; + min-height: 52px; + padding: 8px; +} + +.mdc-card__actions--full-bleed { + padding: 0; +} + +.mdc-card__action-buttons, +.mdc-card__action-icons { + display: flex; + flex-direction: row; + align-items: center; + box-sizing: border-box; +} + +.mdc-card__action-icons { + color: rgba(0, 0, 0, 0.6); + flex-grow: 1; + justify-content: flex-end; +} + +.mdc-card__action-buttons + .mdc-card__action-icons { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; +} +[dir=rtl] .mdc-card__action-buttons + .mdc-card__action-icons, .mdc-card__action-buttons + .mdc-card__action-icons[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-card__action { + display: inline-flex; + flex-direction: row; + align-items: center; + box-sizing: border-box; + justify-content: center; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.mdc-card__action:focus { + outline: none; +} + +.mdc-card__action--button { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 8px; + padding: 0 8px; +} +[dir=rtl] .mdc-card__action--button, .mdc-card__action--button[dir=rtl] { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: 0; +} + +.mdc-card__action--button:last-child { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 0; +} +[dir=rtl] .mdc-card__action--button:last-child, .mdc-card__action--button:last-child[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 0; +} + +.mdc-card__actions--full-bleed .mdc-card__action--button { + justify-content: space-between; + width: 100%; + height: auto; + max-height: none; + margin: 0; + padding: 8px 16px; + /* @noflip */ + text-align: left; +} +[dir=rtl] .mdc-card__actions--full-bleed .mdc-card__action--button, .mdc-card__actions--full-bleed .mdc-card__action--button[dir=rtl] { + /* @noflip */ + text-align: right; +} + +.mdc-card__action--icon { + margin: -6px 0; + padding: 12px; +} + +.mdc-card__action--icon:not(:disabled) { + color: rgba(0, 0, 0, 0.6); +} + +.mdc-card__primary-action { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-card__primary-action .mdc-card__ripple::before, +.mdc-card__primary-action .mdc-card__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-card__primary-action .mdc-card__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-card__primary-action .mdc-card__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-card__primary-action.mdc-ripple-upgraded .mdc-card__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-card__primary-action.mdc-ripple-upgraded .mdc-card__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-card__primary-action.mdc-ripple-upgraded--unbounded .mdc-card__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-card__primary-action.mdc-ripple-upgraded--foreground-activation .mdc-card__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-card__primary-action.mdc-ripple-upgraded--foreground-deactivation .mdc-card__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-card__primary-action .mdc-card__ripple::before, +.mdc-card__primary-action .mdc-card__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +.mdc-card__primary-action.mdc-ripple-upgraded .mdc-card__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-card__primary-action .mdc-card__ripple::before, .mdc-card__primary-action .mdc-card__ripple::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, #000); +} +.mdc-card__primary-action:hover .mdc-card__ripple::before, .mdc-card__primary-action.mdc-ripple-surface--hover .mdc-card__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-card__primary-action.mdc-ripple-upgraded--background-focused .mdc-card__ripple::before, .mdc-card__primary-action:not(.mdc-ripple-upgraded):focus .mdc-card__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-card__primary-action:not(.mdc-ripple-upgraded) .mdc-card__ripple::after { + transition: opacity 150ms linear; +} +.mdc-card__primary-action:not(.mdc-ripple-upgraded):active .mdc-card__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-card__primary-action.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-card__primary-action .mdc-card__ripple { + box-sizing: content-box; + height: 100%; + overflow: hidden; + left: 0; + pointer-events: none; + position: absolute; + top: 0; + width: 100%; +} +.mdc-card__primary-action.mdc-ripple-upgraded--background-focused::after, .mdc-card__primary-action:not(.mdc-ripple-upgraded):focus::after { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 5px double transparent; + border-radius: inherit; + content: ""; + pointer-events: none; +} + +.mdc-checkbox { + padding: calc((40px - 18px) / 2); + /* @alternate */ + padding: calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2); + margin: calc((40px - 40px) / 2); + /* @alternate */ + margin: calc((var(--mdc-checkbox-touch-target-size, 40px) - 40px) / 2); +} +.mdc-checkbox .mdc-checkbox__ripple::before, .mdc-checkbox .mdc-checkbox__ripple::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, #000); +} +.mdc-checkbox:hover .mdc-checkbox__ripple::before, .mdc-checkbox.mdc-ripple-surface--hover .mdc-checkbox__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-checkbox.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before, .mdc-checkbox:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-checkbox:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after { + transition: opacity 150ms linear; +} +.mdc-checkbox:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-checkbox.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::before, .mdc-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::after { + background-color: #018786; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786)); +} +.mdc-checkbox.mdc-checkbox--selected:hover .mdc-checkbox__ripple::before, .mdc-checkbox.mdc-checkbox--selected.mdc-ripple-surface--hover .mdc-checkbox__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before, .mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after { + transition: opacity 150ms linear; +} +.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::before, +.mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::after { + background-color: #018786; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786)); +} +.mdc-checkbox .mdc-checkbox__background { + top: calc((40px - 18px) / 2); + /* @alternate */ + top: calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2); + left: calc((40px - 18px) / 2); + /* @alternate */ + left: calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2); +} +.mdc-checkbox .mdc-checkbox__native-control { + top: calc((40px - 40px) / 2); + /* @alternate */ + top: calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2); + right: calc((40px - 40px) / 2); + /* @alternate */ + right: calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2); + left: calc((40px - 40px) / 2); + /* @alternate */ + left: calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2); + width: 40px; + /* @alternate */ + width: var(--mdc-checkbox-touch-target-size, 40px); + height: 40px; + /* @alternate */ + height: var(--mdc-checkbox-touch-target-size, 40px); +} +.mdc-checkbox .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true]) ~ .mdc-checkbox__background { + border-color: rgba(0, 0, 0, 0.54); + /* @alternate */ + border-color: var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54)); + background-color: transparent; +} +.mdc-checkbox .mdc-checkbox__native-control:enabled:checked ~ .mdc-checkbox__background, +.mdc-checkbox .mdc-checkbox__native-control:enabled:indeterminate ~ .mdc-checkbox__background, +.mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true]:enabled ~ .mdc-checkbox__background { + border-color: #018786; + /* @alternate */ + border-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786)); + background-color: #018786; + /* @alternate */ + background-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786)); +} +@-webkit-keyframes mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786 { + 0% { + border-color: rgba(0, 0, 0, 0.54); + /* @alternate */ + border-color: var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54)); + background-color: transparent; + } + 50% { + border-color: #018786; + /* @alternate */ + border-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786)); + background-color: #018786; + /* @alternate */ + background-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786)); + } +} +@keyframes mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786 { + 0% { + border-color: rgba(0, 0, 0, 0.54); + /* @alternate */ + border-color: var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54)); + background-color: transparent; + } + 50% { + border-color: #018786; + /* @alternate */ + border-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786)); + background-color: #018786; + /* @alternate */ + background-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786)); + } +} +@-webkit-keyframes mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786 { + 0%, 80% { + border-color: #018786; + /* @alternate */ + border-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786)); + background-color: #018786; + /* @alternate */ + background-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786)); + } + 100% { + border-color: rgba(0, 0, 0, 0.54); + /* @alternate */ + border-color: var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54)); + background-color: transparent; + } +} +@keyframes mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786 { + 0%, 80% { + border-color: #018786; + /* @alternate */ + border-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786)); + background-color: #018786; + /* @alternate */ + background-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786)); + } + 100% { + border-color: rgba(0, 0, 0, 0.54); + /* @alternate */ + border-color: var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54)); + background-color: transparent; + } +} +.mdc-checkbox.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background, .mdc-checkbox.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background { + -webkit-animation-name: mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786; + animation-name: mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786; +} +.mdc-checkbox.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background, .mdc-checkbox.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background { + -webkit-animation-name: mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786; + animation-name: mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786; +} +.mdc-checkbox .mdc-checkbox__native-control[disabled]:not(:checked):not(:indeterminate):not([data-indeterminate=true]) ~ .mdc-checkbox__background { + border-color: rgba(0, 0, 0, 0.38); + /* @alternate */ + border-color: var(--mdc-checkbox-disabled-color, rgba(0, 0, 0, 0.38)); + background-color: transparent; +} +.mdc-checkbox .mdc-checkbox__native-control[disabled]:checked ~ .mdc-checkbox__background, +.mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate ~ .mdc-checkbox__background, +.mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled] ~ .mdc-checkbox__background { + border-color: transparent; + background-color: rgba(0, 0, 0, 0.38); + /* @alternate */ + background-color: var(--mdc-checkbox-disabled-color, rgba(0, 0, 0, 0.38)); +} +.mdc-checkbox .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background .mdc-checkbox__checkmark { + color: #fff; + /* @alternate */ + color: var(--mdc-checkbox-ink-color, #fff); +} +.mdc-checkbox .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background .mdc-checkbox__mixedmark { + border-color: #fff; + /* @alternate */ + border-color: var(--mdc-checkbox-ink-color, #fff); +} +.mdc-checkbox .mdc-checkbox__native-control:disabled ~ .mdc-checkbox__background .mdc-checkbox__checkmark { + color: #fff; + /* @alternate */ + color: var(--mdc-checkbox-ink-color, #fff); +} +.mdc-checkbox .mdc-checkbox__native-control:disabled ~ .mdc-checkbox__background .mdc-checkbox__mixedmark { + border-color: #fff; + /* @alternate */ + border-color: var(--mdc-checkbox-ink-color, #fff); +} + +@-webkit-keyframes mdc-checkbox-unchecked-checked-checkmark-path { + 0%, 50% { + stroke-dashoffset: 29.7833385; + } + 50% { + -webkit-animation-timing-function: cubic-bezier(0, 0, 0.2, 1); + animation-timing-function: cubic-bezier(0, 0, 0.2, 1); + } + 100% { + stroke-dashoffset: 0; + } +} + +@keyframes mdc-checkbox-unchecked-checked-checkmark-path { + 0%, 50% { + stroke-dashoffset: 29.7833385; + } + 50% { + -webkit-animation-timing-function: cubic-bezier(0, 0, 0.2, 1); + animation-timing-function: cubic-bezier(0, 0, 0.2, 1); + } + 100% { + stroke-dashoffset: 0; + } +} +@-webkit-keyframes mdc-checkbox-unchecked-indeterminate-mixedmark { + 0%, 68.2% { + -webkit-transform: scaleX(0); + transform: scaleX(0); + } + 68.2% { + -webkit-animation-timing-function: cubic-bezier(0, 0, 0, 1); + animation-timing-function: cubic-bezier(0, 0, 0, 1); + } + 100% { + -webkit-transform: scaleX(1); + transform: scaleX(1); + } +} +@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark { + 0%, 68.2% { + -webkit-transform: scaleX(0); + transform: scaleX(0); + } + 68.2% { + -webkit-animation-timing-function: cubic-bezier(0, 0, 0, 1); + animation-timing-function: cubic-bezier(0, 0, 0, 1); + } + 100% { + -webkit-transform: scaleX(1); + transform: scaleX(1); + } +} +@-webkit-keyframes mdc-checkbox-checked-unchecked-checkmark-path { + from { + -webkit-animation-timing-function: cubic-bezier(0.4, 0, 1, 1); + animation-timing-function: cubic-bezier(0.4, 0, 1, 1); + opacity: 1; + stroke-dashoffset: 0; + } + to { + opacity: 0; + stroke-dashoffset: -29.7833385; + } +} +@keyframes mdc-checkbox-checked-unchecked-checkmark-path { + from { + -webkit-animation-timing-function: cubic-bezier(0.4, 0, 1, 1); + animation-timing-function: cubic-bezier(0.4, 0, 1, 1); + opacity: 1; + stroke-dashoffset: 0; + } + to { + opacity: 0; + stroke-dashoffset: -29.7833385; + } +} +@-webkit-keyframes mdc-checkbox-checked-indeterminate-checkmark { + from { + -webkit-animation-timing-function: cubic-bezier(0, 0, 0.2, 1); + animation-timing-function: cubic-bezier(0, 0, 0.2, 1); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + opacity: 1; + } + to { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + opacity: 0; + } +} +@keyframes mdc-checkbox-checked-indeterminate-checkmark { + from { + -webkit-animation-timing-function: cubic-bezier(0, 0, 0.2, 1); + animation-timing-function: cubic-bezier(0, 0, 0.2, 1); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + opacity: 1; + } + to { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + opacity: 0; + } +} +@-webkit-keyframes mdc-checkbox-indeterminate-checked-checkmark { + from { + -webkit-animation-timing-function: cubic-bezier(0.14, 0, 0, 1); + animation-timing-function: cubic-bezier(0.14, 0, 0, 1); + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + opacity: 0; + } + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + opacity: 1; + } +} +@keyframes mdc-checkbox-indeterminate-checked-checkmark { + from { + -webkit-animation-timing-function: cubic-bezier(0.14, 0, 0, 1); + animation-timing-function: cubic-bezier(0.14, 0, 0, 1); + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + opacity: 0; + } + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + opacity: 1; + } +} +@-webkit-keyframes mdc-checkbox-checked-indeterminate-mixedmark { + from { + -webkit-animation-timing-function: mdc-animation-deceleration-curve-timing-function; + animation-timing-function: mdc-animation-deceleration-curve-timing-function; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + opacity: 0; + } + to { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + opacity: 1; + } +} +@keyframes mdc-checkbox-checked-indeterminate-mixedmark { + from { + -webkit-animation-timing-function: mdc-animation-deceleration-curve-timing-function; + animation-timing-function: mdc-animation-deceleration-curve-timing-function; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + opacity: 0; + } + to { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + opacity: 1; + } +} +@-webkit-keyframes mdc-checkbox-indeterminate-checked-mixedmark { + from { + -webkit-animation-timing-function: cubic-bezier(0.14, 0, 0, 1); + animation-timing-function: cubic-bezier(0.14, 0, 0, 1); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + opacity: 1; + } + to { + -webkit-transform: rotate(315deg); + transform: rotate(315deg); + opacity: 0; + } +} +@keyframes mdc-checkbox-indeterminate-checked-mixedmark { + from { + -webkit-animation-timing-function: cubic-bezier(0.14, 0, 0, 1); + animation-timing-function: cubic-bezier(0.14, 0, 0, 1); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + opacity: 1; + } + to { + -webkit-transform: rotate(315deg); + transform: rotate(315deg); + opacity: 0; + } +} +@-webkit-keyframes mdc-checkbox-indeterminate-unchecked-mixedmark { + 0% { + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + -webkit-transform: scaleX(1); + transform: scaleX(1); + opacity: 1; + } + 32.8%, 100% { + -webkit-transform: scaleX(0); + transform: scaleX(0); + opacity: 0; + } +} +@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark { + 0% { + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + -webkit-transform: scaleX(1); + transform: scaleX(1); + opacity: 1; + } + 32.8%, 100% { + -webkit-transform: scaleX(0); + transform: scaleX(0); + opacity: 0; + } +} +.mdc-checkbox { + display: inline-block; + position: relative; + flex: 0 0 18px; + box-sizing: content-box; + width: 18px; + height: 18px; + line-height: 0; + white-space: nowrap; + cursor: pointer; + vertical-align: bottom; +} + +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-checkbox__native-control[disabled]:not(:checked):not(:indeterminate):not([data-indeterminate=true]) ~ .mdc-checkbox__background { + border-color: GrayText; + /* @alternate */ + border-color: var(--mdc-checkbox-disabled-color, GrayText); + background-color: transparent; + } + + .mdc-checkbox__native-control[disabled]:checked ~ .mdc-checkbox__background, +.mdc-checkbox__native-control[disabled]:indeterminate ~ .mdc-checkbox__background, +.mdc-checkbox__native-control[data-indeterminate=true][disabled] ~ .mdc-checkbox__background { + border-color: GrayText; + background-color: transparent; + /* @alternate */ + background-color: var(--mdc-checkbox-disabled-color, transparent); + } + + .mdc-checkbox__native-control:disabled ~ .mdc-checkbox__background .mdc-checkbox__checkmark { + color: GrayText; + /* @alternate */ + color: var(--mdc-checkbox-ink-color, GrayText); + } + .mdc-checkbox__native-control:disabled ~ .mdc-checkbox__background .mdc-checkbox__mixedmark { + border-color: GrayText; + /* @alternate */ + border-color: var(--mdc-checkbox-ink-color, GrayText); + } + + .mdc-checkbox__mixedmark { + margin: 0 1px; + } +} +.mdc-checkbox--disabled { + cursor: default; + pointer-events: none; +} + +.mdc-checkbox__background { + display: inline-flex; + position: absolute; + align-items: center; + justify-content: center; + box-sizing: border-box; + width: 18px; + height: 18px; + border: 2px solid currentColor; + border-radius: 2px; + background-color: transparent; + pointer-events: none; + will-change: background-color, border-color; + transition: background-color 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1), border-color 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1); +} + +.mdc-checkbox__checkmark { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + opacity: 0; + transition: opacity 180ms 0ms cubic-bezier(0.4, 0, 0.6, 1); +} +.mdc-checkbox--upgraded .mdc-checkbox__checkmark { + opacity: 1; +} + +.mdc-checkbox__checkmark-path { + transition: stroke-dashoffset 180ms 0ms cubic-bezier(0.4, 0, 0.6, 1); + stroke: currentColor; + stroke-width: 3.12px; + stroke-dashoffset: 29.7833385; + stroke-dasharray: 29.7833385; +} + +.mdc-checkbox__mixedmark { + width: 100%; + height: 0; + -webkit-transform: scaleX(0) rotate(0deg); + transform: scaleX(0) rotate(0deg); + border-width: 1px; + border-style: solid; + opacity: 0; + transition: opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1); + transition: opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1), transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1); + transition: opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1), transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1); +} + +.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background, .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background, .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background, .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background { + -webkit-animation-duration: 180ms; + animation-duration: 180ms; + -webkit-animation-timing-function: linear; + animation-timing-function: linear; +} +.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path { + -webkit-animation: mdc-checkbox-unchecked-checked-checkmark-path 180ms linear 0s; + animation: mdc-checkbox-unchecked-checked-checkmark-path 180ms linear 0s; + transition: none; +} +.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark { + -webkit-animation: mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear 0s; + animation: mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear 0s; + transition: none; +} +.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path { + -webkit-animation: mdc-checkbox-checked-unchecked-checkmark-path 90ms linear 0s; + animation: mdc-checkbox-checked-unchecked-checkmark-path 90ms linear 0s; + transition: none; +} +.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark { + -webkit-animation: mdc-checkbox-checked-indeterminate-checkmark 90ms linear 0s; + animation: mdc-checkbox-checked-indeterminate-checkmark 90ms linear 0s; + transition: none; +} +.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark { + -webkit-animation: mdc-checkbox-checked-indeterminate-mixedmark 90ms linear 0s; + animation: mdc-checkbox-checked-indeterminate-mixedmark 90ms linear 0s; + transition: none; +} +.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark { + -webkit-animation: mdc-checkbox-indeterminate-checked-checkmark 500ms linear 0s; + animation: mdc-checkbox-indeterminate-checked-checkmark 500ms linear 0s; + transition: none; +} +.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark { + -webkit-animation: mdc-checkbox-indeterminate-checked-mixedmark 500ms linear 0s; + animation: mdc-checkbox-indeterminate-checked-mixedmark 500ms linear 0s; + transition: none; +} +.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark { + -webkit-animation: mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear 0s; + animation: mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear 0s; + transition: none; +} + +.mdc-checkbox__native-control:checked ~ .mdc-checkbox__background, +.mdc-checkbox__native-control:indeterminate ~ .mdc-checkbox__background, +.mdc-checkbox__native-control[data-indeterminate=true] ~ .mdc-checkbox__background { + transition: border-color 90ms 0ms cubic-bezier(0, 0, 0.2, 1), background-color 90ms 0ms cubic-bezier(0, 0, 0.2, 1); +} +.mdc-checkbox__native-control:checked ~ .mdc-checkbox__background .mdc-checkbox__checkmark-path, +.mdc-checkbox__native-control:indeterminate ~ .mdc-checkbox__background .mdc-checkbox__checkmark-path, +.mdc-checkbox__native-control[data-indeterminate=true] ~ .mdc-checkbox__background .mdc-checkbox__checkmark-path { + stroke-dashoffset: 0; +} + +.mdc-checkbox__native-control { + position: absolute; + margin: 0; + padding: 0; + opacity: 0; + cursor: inherit; +} +.mdc-checkbox__native-control:disabled { + cursor: default; + pointer-events: none; +} + +.mdc-checkbox--touch { + margin: calc((48px - 40px) / 2); + /* @alternate */ + margin: calc((var(--mdc-checkbox-state-layer-size, 48px) - var(--mdc-checkbox-state-layer-size, 40px)) / 2); +} +.mdc-checkbox--touch .mdc-checkbox__native-control { + top: calc((40px - 48px) / 2); + /* @alternate */ + top: calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px)) / 2); + right: calc((40px - 48px) / 2); + /* @alternate */ + right: calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px)) / 2); + left: calc((40px - 48px) / 2); + /* @alternate */ + left: calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px)) / 2); + width: 48px; + /* @alternate */ + width: var(--mdc-checkbox-state-layer-size, 48px); + height: 48px; + /* @alternate */ + height: var(--mdc-checkbox-state-layer-size, 48px); +} + +.mdc-checkbox__native-control:checked ~ .mdc-checkbox__background .mdc-checkbox__checkmark { + transition: opacity 180ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: opacity 180ms 0ms cubic-bezier(0, 0, 0.2, 1), transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: opacity 180ms 0ms cubic-bezier(0, 0, 0.2, 1), transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1); + opacity: 1; +} +.mdc-checkbox__native-control:checked ~ .mdc-checkbox__background .mdc-checkbox__mixedmark { + -webkit-transform: scaleX(1) rotate(-45deg); + transform: scaleX(1) rotate(-45deg); +} + +.mdc-checkbox__native-control:indeterminate ~ .mdc-checkbox__background .mdc-checkbox__checkmark, +.mdc-checkbox__native-control[data-indeterminate=true] ~ .mdc-checkbox__background .mdc-checkbox__checkmark { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + opacity: 0; + transition: opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1); + transition: opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1), transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1); + transition: opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1), transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1); +} +.mdc-checkbox__native-control:indeterminate ~ .mdc-checkbox__background .mdc-checkbox__mixedmark, +.mdc-checkbox__native-control[data-indeterminate=true] ~ .mdc-checkbox__background .mdc-checkbox__mixedmark { + -webkit-transform: scaleX(1) rotate(0deg); + transform: scaleX(1) rotate(0deg); + opacity: 1; +} + +.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__background, +.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__checkmark, +.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__checkmark-path, +.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__mixedmark { + transition: none; +} + +.mdc-checkbox { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-checkbox .mdc-checkbox__ripple::before, +.mdc-checkbox .mdc-checkbox__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-checkbox .mdc-checkbox__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-checkbox .mdc-checkbox__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-checkbox.mdc-ripple-upgraded--unbounded .mdc-checkbox__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-checkbox.mdc-ripple-upgraded--foreground-activation .mdc-checkbox__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-checkbox.mdc-ripple-upgraded--foreground-deactivation .mdc-checkbox__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-checkbox .mdc-checkbox__ripple::before, +.mdc-checkbox .mdc-checkbox__ripple::after { + top: calc(50% - 50%); + /* @noflip */ + left: calc(50% - 50%); + width: 100%; + height: 100%; +} +.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::before, +.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::after { + top: var(--mdc-ripple-top, calc(50% - 50%)); + /* @noflip */ + left: var(--mdc-ripple-left, calc(50% - 50%)); + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-checkbox { + z-index: 0; +} +.mdc-checkbox .mdc-checkbox__ripple::before, +.mdc-checkbox .mdc-checkbox__ripple::after { + z-index: -1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, -1); +} + +.mdc-checkbox__ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; +} + +.mdc-deprecated-chip-trailing-action__touch { + position: absolute; + top: 50%; + height: 48px; + /* @noflip */ + left: 50%; + width: 48px; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.mdc-deprecated-chip-trailing-action { + border: none; + display: inline-flex; + position: relative; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: 0; + outline: none; + cursor: pointer; + -webkit-appearance: none; + background: none; +} +.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__icon { + height: 18px; + width: 18px; + font-size: 18px; +} +.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action { + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); +} +.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__touch { + width: 26px; +} +.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__icon { + fill: currentColor; + color: inherit; +} + +.mdc-deprecated-chip-trailing-action { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::before, +.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded--unbounded .mdc-deprecated-chip-trailing-action__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded--foreground-activation .mdc-deprecated-chip-trailing-action__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded--foreground-deactivation .mdc-deprecated-chip-trailing-action__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::before, +.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::after { + top: calc(50% - 50%); + /* @noflip */ + left: calc(50% - 50%); + width: 100%; + height: 100%; +} +.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::before, +.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::after { + top: var(--mdc-ripple-top, calc(50% - 50%)); + /* @noflip */ + left: var(--mdc-ripple-left, calc(50% - 50%)); + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::before, .mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-on-surface, #000)); +} +.mdc-deprecated-chip-trailing-action:hover .mdc-deprecated-chip-trailing-action__ripple::before, .mdc-deprecated-chip-trailing-action.mdc-ripple-surface--hover .mdc-deprecated-chip-trailing-action__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded--background-focused .mdc-deprecated-chip-trailing-action__ripple::before, .mdc-deprecated-chip-trailing-action:not(.mdc-ripple-upgraded):focus .mdc-deprecated-chip-trailing-action__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-deprecated-chip-trailing-action:not(.mdc-ripple-upgraded) .mdc-deprecated-chip-trailing-action__ripple::after { + transition: opacity 150ms linear; +} +.mdc-deprecated-chip-trailing-action:not(.mdc-ripple-upgraded):active .mdc-deprecated-chip-trailing-action__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple { + position: absolute; + box-sizing: content-box; + width: 100%; + height: 100%; + overflow: hidden; +} + +.mdc-chip__icon--leading { + color: rgba(0, 0, 0, 0.54); +} + +.mdc-deprecated-chip-trailing-action { + color: #000; +} + +.mdc-chip__icon--trailing { + color: rgba(0, 0, 0, 0.54); +} +.mdc-chip__icon--trailing:hover { + color: rgba(0, 0, 0, 0.62); +} +.mdc-chip__icon--trailing:focus { + color: rgba(0, 0, 0, 0.87); +} + +.mdc-chip__icon.mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden) { + width: 20px; + height: 20px; + font-size: 20px; +} + +.mdc-deprecated-chip-trailing-action__icon { + height: 18px; + width: 18px; + font-size: 18px; +} + +.mdc-chip__icon.mdc-chip__icon--trailing { + width: 18px; + height: 18px; + font-size: 18px; +} + +.mdc-deprecated-chip-trailing-action { + /* @noflip */ + margin-left: 4px; + /* @noflip */ + margin-right: -4px; +} +[dir=rtl] .mdc-deprecated-chip-trailing-action, .mdc-deprecated-chip-trailing-action[dir=rtl] { + /* @noflip */ + margin-left: -4px; + /* @noflip */ + margin-right: 4px; +} + +.mdc-chip__icon--trailing { + /* @noflip */ + margin-left: 4px; + /* @noflip */ + margin-right: -4px; +} +[dir=rtl] .mdc-chip__icon--trailing, .mdc-chip__icon--trailing[dir=rtl] { + /* @noflip */ + margin-left: -4px; + /* @noflip */ + margin-right: 4px; +} + +.mdc-chip { + border-radius: 16px; + background-color: #e0e0e0; + color: rgba(0, 0, 0, 0.87); + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-body2-font-size, 0.875rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-body2-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body2-font-weight, 400); + letter-spacing: 0.0178571429em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body2-letter-spacing, 0.0178571429em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body2-text-transform, inherit); + height: 32px; + /* @alternate */ + position: relative; + display: inline-flex; + align-items: center; + box-sizing: border-box; + padding: 0 12px; + border-width: 0; + outline: none; + cursor: pointer; + -webkit-appearance: none; +} +.mdc-chip .mdc-chip__ripple { + border-radius: 16px; +} +.mdc-chip:hover { + color: rgba(0, 0, 0, 0.87); +} +.mdc-chip.mdc-chip--selected .mdc-chip__checkmark, +.mdc-chip .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden) { + /* @noflip */ + margin-left: -4px; + /* @noflip */ + margin-right: 4px; +} +[dir=rtl] .mdc-chip.mdc-chip--selected .mdc-chip__checkmark, [dir=rtl] .mdc-chip .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden), .mdc-chip.mdc-chip--selected .mdc-chip__checkmark[dir=rtl], .mdc-chip .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden)[dir=rtl] { + /* @noflip */ + margin-left: 4px; + /* @noflip */ + margin-right: -4px; +} + +.mdc-chip .mdc-elevation-overlay { + width: 100%; + height: 100%; + top: 0; + /* @noflip */ + left: 0; +} +.mdc-chip::-moz-focus-inner { + padding: 0; + border: 0; +} +.mdc-chip:hover { + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); +} +.mdc-chip .mdc-chip__touch { + position: absolute; + top: 50%; + height: 48px; + left: 0; + right: 0; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.mdc-chip--exit { + transition: opacity 75ms cubic-bezier(0.4, 0, 0.2, 1), width 150ms cubic-bezier(0, 0, 0.2, 1), padding 100ms linear, margin 100ms linear; + opacity: 0; +} + +.mdc-chip__overflow { + text-overflow: ellipsis; + overflow: hidden; +} + +.mdc-chip__text { + white-space: nowrap; +} + +.mdc-chip__icon { + border-radius: 50%; + outline: none; + vertical-align: middle; +} + +.mdc-chip__checkmark { + height: 20px; +} + +.mdc-chip__checkmark-path { + transition: stroke-dashoffset 150ms 50ms cubic-bezier(0.4, 0, 0.6, 1); + stroke-width: 2px; + stroke-dashoffset: 29.7833385; + stroke-dasharray: 29.7833385; +} + +.mdc-chip__primary-action:focus { + outline: none; +} + +.mdc-chip--selected .mdc-chip__checkmark-path { + stroke-dashoffset: 0; +} + +.mdc-chip__icon--leading, +.mdc-chip__icon--trailing { + position: relative; +} + +.mdc-chip-set--choice .mdc-chip.mdc-chip--selected { + color: #6200ee; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee); +} +.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__icon--leading { + color: rgba(98, 0, 238, 0.54); +} +.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:hover { + color: #6200ee; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee); +} +.mdc-chip-set--choice .mdc-chip .mdc-chip__checkmark-path { + stroke: #6200ee; + /* @alternate */ + stroke: var(--mdc-theme-primary, #6200ee); +} +.mdc-chip-set--choice .mdc-chip--selected { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-surface, #fff); +} + +.mdc-chip__checkmark-svg { + width: 0; + height: 20px; + transition: width 150ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.mdc-chip--selected .mdc-chip__checkmark-svg { + width: 20px; +} + +.mdc-chip-set--filter .mdc-chip__icon--leading { + transition: opacity 75ms linear; + transition-delay: -50ms; + opacity: 1; +} +.mdc-chip-set--filter .mdc-chip__icon--leading + .mdc-chip__checkmark { + transition: opacity 75ms linear; + transition-delay: 80ms; + opacity: 0; +} +.mdc-chip-set--filter .mdc-chip__icon--leading + .mdc-chip__checkmark .mdc-chip__checkmark-svg { + transition: width 0ms; +} +.mdc-chip-set--filter .mdc-chip--selected .mdc-chip__icon--leading { + opacity: 0; +} +.mdc-chip-set--filter .mdc-chip--selected .mdc-chip__icon--leading + .mdc-chip__checkmark { + width: 0; + opacity: 1; +} +.mdc-chip-set--filter .mdc-chip__icon--leading-hidden.mdc-chip__icon--leading { + width: 0; + opacity: 0; +} +.mdc-chip-set--filter .mdc-chip__icon--leading-hidden.mdc-chip__icon--leading + .mdc-chip__checkmark { + width: 20px; +} + +.mdc-chip { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-chip .mdc-chip__ripple::before, +.mdc-chip .mdc-chip__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-chip .mdc-chip__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-chip .mdc-chip__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-chip.mdc-ripple-upgraded .mdc-chip__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-chip.mdc-ripple-upgraded .mdc-chip__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-chip.mdc-ripple-upgraded--unbounded .mdc-chip__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-chip.mdc-ripple-upgraded--foreground-activation .mdc-chip__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-chip.mdc-ripple-upgraded--foreground-deactivation .mdc-chip__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-chip .mdc-chip__ripple::before, +.mdc-chip .mdc-chip__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +.mdc-chip.mdc-ripple-upgraded .mdc-chip__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-chip .mdc-chip__ripple::before, .mdc-chip .mdc-chip__ripple::after { + background-color: rgba(0, 0, 0, 0.87); + /* @alternate */ + background-color: var(--mdc-ripple-color, rgba(0, 0, 0, 0.87)); +} +.mdc-chip:hover .mdc-chip__ripple::before, .mdc-chip.mdc-ripple-surface--hover .mdc-chip__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-chip.mdc-ripple-upgraded--background-focused .mdc-chip__ripple::before, .mdc-chip.mdc-ripple-upgraded:focus-within .mdc-chip__ripple::before, .mdc-chip:not(.mdc-ripple-upgraded):focus .mdc-chip__ripple::before, .mdc-chip:not(.mdc-ripple-upgraded):focus-within .mdc-chip__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-chip:not(.mdc-ripple-upgraded) .mdc-chip__ripple::after { + transition: opacity 150ms linear; +} +.mdc-chip:not(.mdc-ripple-upgraded):active .mdc-chip__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-chip.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-chip .mdc-chip__ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + overflow: hidden; +} + +.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__ripple::before { + opacity: 0.08; + /* @alternate */ + opacity: var(--mdc-ripple-selected-opacity, 0.08); +} +.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__ripple::before, .mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__ripple::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:hover .mdc-chip__ripple::before, .mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-surface--hover .mdc-chip__ripple::before { + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.12); +} +.mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-upgraded--background-focused .mdc-chip__ripple::before, .mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-upgraded:focus-within .mdc-chip__ripple::before, .mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded):focus .mdc-chip__ripple::before, .mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded):focus-within .mdc-chip__ripple::before { + transition-duration: 75ms; + opacity: 0.2; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.2); +} +.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded) .mdc-chip__ripple::after { + transition: opacity 150ms linear; +} +.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded):active .mdc-chip__ripple::after { + transition-duration: 75ms; + opacity: 0.2; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.2); +} +.mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.2); +} + +@-webkit-keyframes mdc-chip-entry { + from { + -webkit-transform: scale(0.8); + transform: scale(0.8); + opacity: 0.4; + } + to { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; + } +} + +@keyframes mdc-chip-entry { + from { + -webkit-transform: scale(0.8); + transform: scale(0.8); + opacity: 0.4; + } + to { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; + } +} +.mdc-chip-set { + padding: 4px; + display: flex; + flex-wrap: wrap; + box-sizing: border-box; +} +.mdc-chip-set .mdc-chip { + margin: 4px; +} +.mdc-chip-set .mdc-chip--touch { + margin-top: 8px; + margin-bottom: 8px; +} + +.mdc-chip-set--input .mdc-chip { + -webkit-animation: mdc-chip-entry 100ms cubic-bezier(0, 0, 0.2, 1); + animation: mdc-chip-entry 100ms cubic-bezier(0, 0, 0.2, 1); +} + +.mdc-circular-progress__determinate-circle, +.mdc-circular-progress__indeterminate-circle-graphic { + stroke: #6200ee; + /* @alternate */ + stroke: var(--mdc-theme-primary, #6200ee); +} + +.mdc-circular-progress__determinate-track { + stroke: transparent; +} + +@-webkit-keyframes mdc-circular-progress-container-rotate { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes mdc-circular-progress-container-rotate { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes mdc-circular-progress-spinner-layer-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); + } + 100% { + -webkit-transform: rotate(1080deg); + transform: rotate(1080deg); + } +} +@keyframes mdc-circular-progress-spinner-layer-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); + } + 100% { + -webkit-transform: rotate(1080deg); + transform: rotate(1080deg); + } +} +@-webkit-keyframes mdc-circular-progress-color-1-fade-in-out { + from { + opacity: 0.99; + } + 25% { + opacity: 0.99; + } + 26% { + opacity: 0; + } + 89% { + opacity: 0; + } + 90% { + opacity: 0.99; + } + to { + opacity: 0.99; + } +} +@keyframes mdc-circular-progress-color-1-fade-in-out { + from { + opacity: 0.99; + } + 25% { + opacity: 0.99; + } + 26% { + opacity: 0; + } + 89% { + opacity: 0; + } + 90% { + opacity: 0.99; + } + to { + opacity: 0.99; + } +} +@-webkit-keyframes mdc-circular-progress-color-2-fade-in-out { + from { + opacity: 0; + } + 15% { + opacity: 0; + } + 25% { + opacity: 0.99; + } + 50% { + opacity: 0.99; + } + 51% { + opacity: 0; + } + to { + opacity: 0; + } +} +@keyframes mdc-circular-progress-color-2-fade-in-out { + from { + opacity: 0; + } + 15% { + opacity: 0; + } + 25% { + opacity: 0.99; + } + 50% { + opacity: 0.99; + } + 51% { + opacity: 0; + } + to { + opacity: 0; + } +} +@-webkit-keyframes mdc-circular-progress-color-3-fade-in-out { + from { + opacity: 0; + } + 40% { + opacity: 0; + } + 50% { + opacity: 0.99; + } + 75% { + opacity: 0.99; + } + 76% { + opacity: 0; + } + to { + opacity: 0; + } +} +@keyframes mdc-circular-progress-color-3-fade-in-out { + from { + opacity: 0; + } + 40% { + opacity: 0; + } + 50% { + opacity: 0.99; + } + 75% { + opacity: 0.99; + } + 76% { + opacity: 0; + } + to { + opacity: 0; + } +} +@-webkit-keyframes mdc-circular-progress-color-4-fade-in-out { + from { + opacity: 0; + } + 65% { + opacity: 0; + } + 75% { + opacity: 0.99; + } + 90% { + opacity: 0.99; + } + to { + opacity: 0; + } +} +@keyframes mdc-circular-progress-color-4-fade-in-out { + from { + opacity: 0; + } + 65% { + opacity: 0; + } + 75% { + opacity: 0.99; + } + 90% { + opacity: 0.99; + } + to { + opacity: 0; + } +} +@-webkit-keyframes mdc-circular-progress-left-spin { + from { + -webkit-transform: rotate(265deg); + transform: rotate(265deg); + } + 50% { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); + } + to { + -webkit-transform: rotate(265deg); + transform: rotate(265deg); + } +} +@keyframes mdc-circular-progress-left-spin { + from { + -webkit-transform: rotate(265deg); + transform: rotate(265deg); + } + 50% { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); + } + to { + -webkit-transform: rotate(265deg); + transform: rotate(265deg); + } +} +@-webkit-keyframes mdc-circular-progress-right-spin { + from { + -webkit-transform: rotate(-265deg); + transform: rotate(-265deg); + } + 50% { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); + } + to { + -webkit-transform: rotate(-265deg); + transform: rotate(-265deg); + } +} +@keyframes mdc-circular-progress-right-spin { + from { + -webkit-transform: rotate(-265deg); + transform: rotate(-265deg); + } + 50% { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); + } + to { + -webkit-transform: rotate(-265deg); + transform: rotate(-265deg); + } +} +.mdc-circular-progress { + display: inline-flex; + position: relative; + /* @noflip */ + direction: ltr; + line-height: 0; + transition: opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1); +} + +.mdc-circular-progress__determinate-container, +.mdc-circular-progress__indeterminate-circle-graphic, +.mdc-circular-progress__indeterminate-container, +.mdc-circular-progress__spinner-layer { + position: absolute; + width: 100%; + height: 100%; +} + +.mdc-circular-progress__determinate-container { + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); +} + +.mdc-circular-progress__indeterminate-container { + font-size: 0; + letter-spacing: 0; + white-space: nowrap; + opacity: 0; +} + +.mdc-circular-progress__determinate-circle-graphic, +.mdc-circular-progress__indeterminate-circle-graphic { + fill: transparent; +} + +.mdc-circular-progress__determinate-circle { + transition: stroke-dashoffset 500ms 0ms cubic-bezier(0, 0, 0.2, 1); +} + +.mdc-circular-progress__gap-patch { + position: absolute; + top: 0; + /* @noflip */ + left: 47.5%; + box-sizing: border-box; + width: 5%; + height: 100%; + overflow: hidden; +} +.mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic { + /* @noflip */ + left: -900%; + width: 2000%; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +.mdc-circular-progress__circle-clipper { + display: inline-flex; + position: relative; + width: 50%; + height: 100%; + overflow: hidden; +} +.mdc-circular-progress__circle-clipper .mdc-circular-progress__indeterminate-circle-graphic { + width: 200%; +} + +.mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic { + /* @noflip */ + left: -100%; +} + +.mdc-circular-progress--indeterminate .mdc-circular-progress__determinate-container { + opacity: 0; +} +.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container { + opacity: 1; +} +.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container { + -webkit-animation: mdc-circular-progress-container-rotate 1568.2352941176ms linear infinite; + animation: mdc-circular-progress-container-rotate 1568.2352941176ms linear infinite; +} +.mdc-circular-progress--indeterminate .mdc-circular-progress__spinner-layer { + -webkit-animation: mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} +.mdc-circular-progress--indeterminate .mdc-circular-progress__color-1 { + -webkit-animation: mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdc-circular-progress-color-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdc-circular-progress-color-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} +.mdc-circular-progress--indeterminate .mdc-circular-progress__color-2 { + -webkit-animation: mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdc-circular-progress-color-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdc-circular-progress-color-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} +.mdc-circular-progress--indeterminate .mdc-circular-progress__color-3 { + -webkit-animation: mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdc-circular-progress-color-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdc-circular-progress-color-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} +.mdc-circular-progress--indeterminate .mdc-circular-progress__color-4 { + -webkit-animation: mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdc-circular-progress-color-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdc-circular-progress-color-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} +.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-left .mdc-circular-progress__indeterminate-circle-graphic { + /* @noflip */ + -webkit-animation: mdc-circular-progress-left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdc-circular-progress-left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} +.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic { + /* @noflip */ + -webkit-animation: mdc-circular-progress-right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdc-circular-progress-right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} + +.mdc-circular-progress--closed { + opacity: 0; +} + +.mdc-floating-label { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle1-font-size, 1rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle1-font-weight, 400); + letter-spacing: 0.009375em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle1-letter-spacing, 0.009375em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle1-text-transform, inherit); + position: absolute; + /* @noflip */ + left: 0; + /* @noflip */ + -webkit-transform-origin: left top; + /* @noflip */ + transform-origin: left top; + line-height: 1.15rem; + text-align: left; + text-overflow: ellipsis; + white-space: nowrap; + cursor: text; + overflow: hidden; + /* @alternate */ + will-change: transform; + transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1), color 150ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1), color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1); +} +[dir=rtl] .mdc-floating-label, .mdc-floating-label[dir=rtl] { + /* @noflip */ + right: 0; + /* @noflip */ + left: auto; + /* @noflip */ + -webkit-transform-origin: right top; + /* @noflip */ + transform-origin: right top; + /* @noflip */ + text-align: right; +} + +.mdc-floating-label--float-above { + cursor: auto; +} + +.mdc-floating-label--required::after { + /* @noflip */ + margin-left: 1px; + /* @noflip */ + margin-right: 0px; + content: "*"; +} +[dir=rtl] .mdc-floating-label--required::after, .mdc-floating-label--required[dir=rtl]::after { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 1px; +} + +.mdc-floating-label--float-above { + -webkit-transform: translateY(-106%) scale(0.75); + transform: translateY(-106%) scale(0.75); +} + +.mdc-floating-label--shake { + -webkit-animation: mdc-floating-label-shake-float-above-standard 250ms 1; + animation: mdc-floating-label-shake-float-above-standard 250ms 1; +} + +@-webkit-keyframes mdc-floating-label-shake-float-above-standard { + 0% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 0%)) translateY(-106%) scale(0.75); + transform: translateX(calc(4% - 0%)) translateY(-106%) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75); + transform: translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75); + } +} + +@keyframes mdc-floating-label-shake-float-above-standard { + 0% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 0%)) translateY(-106%) scale(0.75); + transform: translateX(calc(4% - 0%)) translateY(-106%) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75); + transform: translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-106%) scale(0.75); + } +} +.mdc-line-ripple::before, .mdc-line-ripple::after { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + border-bottom-style: solid; + content: ""; +} +.mdc-line-ripple::before { + border-bottom-width: 1px; + z-index: 1; +} +.mdc-line-ripple::after { + -webkit-transform: scaleX(0); + transform: scaleX(0); + border-bottom-width: 2px; + opacity: 0; + z-index: 2; +} +.mdc-line-ripple::after { + transition: opacity 180ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 180ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1), opacity 180ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1), opacity 180ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 180ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.mdc-line-ripple--active::after { + -webkit-transform: scaleX(1); + transform: scaleX(1); + opacity: 1; +} + +.mdc-line-ripple--deactivating::after { + opacity: 0; +} + +.mdc-notched-outline { + display: flex; + position: absolute; + top: 0; + right: 0; + left: 0; + box-sizing: border-box; + width: 100%; + max-width: 100%; + height: 100%; + /* @noflip */ + text-align: left; + pointer-events: none; +} +[dir=rtl] .mdc-notched-outline, .mdc-notched-outline[dir=rtl] { + /* @noflip */ + text-align: right; +} + +.mdc-notched-outline__leading, .mdc-notched-outline__notch, .mdc-notched-outline__trailing { + box-sizing: border-box; + height: 100%; + border-top: 1px solid; + border-bottom: 1px solid; + pointer-events: none; +} +.mdc-notched-outline__leading { + /* @noflip */ + border-left: 1px solid; + /* @noflip */ + border-right: none; + width: 12px; +} +[dir=rtl] .mdc-notched-outline__leading, .mdc-notched-outline__leading[dir=rtl] { + /* @noflip */ + border-left: none; + /* @noflip */ + border-right: 1px solid; +} + +.mdc-notched-outline__trailing { + /* @noflip */ + border-left: none; + /* @noflip */ + border-right: 1px solid; + flex-grow: 1; +} +[dir=rtl] .mdc-notched-outline__trailing, .mdc-notched-outline__trailing[dir=rtl] { + /* @noflip */ + border-left: 1px solid; + /* @noflip */ + border-right: none; +} + +.mdc-notched-outline__notch { + flex: 0 0 auto; + width: auto; + max-width: calc(100% - 12px * 2); +} +.mdc-notched-outline .mdc-floating-label { + display: inline-block; + position: relative; + max-width: 100%; +} +.mdc-notched-outline .mdc-floating-label--float-above { + text-overflow: clip; +} +.mdc-notched-outline--upgraded .mdc-floating-label--float-above { + max-width: calc(100% / 0.75); +} + +.mdc-notched-outline--notched .mdc-notched-outline__notch { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 8px; + border-top: none; +} +[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch, .mdc-notched-outline--notched .mdc-notched-outline__notch[dir=rtl] { + /* @noflip */ + padding-left: 8px; + /* @noflip */ + padding-right: 0; +} + +.mdc-notched-outline--no-label .mdc-notched-outline__notch { + display: none; +} + +.mdc-select { + display: inline-flex; + position: relative; +} +.mdc-select:not(.mdc-select--disabled) .mdc-select__selected-text { + color: rgba(0, 0, 0, 0.87); +} +.mdc-select.mdc-select--disabled .mdc-select__selected-text { + color: rgba(0, 0, 0, 0.38); +} +.mdc-select:not(.mdc-select--disabled) .mdc-floating-label { + color: rgba(0, 0, 0, 0.6); +} +.mdc-select:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label { + color: rgba(98, 0, 238, 0.87); +} +.mdc-select.mdc-select--disabled .mdc-floating-label { + color: rgba(0, 0, 0, 0.38); +} +.mdc-select:not(.mdc-select--disabled) .mdc-select__dropdown-icon { + fill: rgba(0, 0, 0, 0.54); +} +.mdc-select:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon { + fill: #6200ee; + /* @alternate */ + fill: var(--mdc-theme-primary, #6200ee); +} +.mdc-select.mdc-select--disabled .mdc-select__dropdown-icon { + fill: rgba(0, 0, 0, 0.38); +} +.mdc-select:not(.mdc-select--disabled) + .mdc-select-helper-text { + color: rgba(0, 0, 0, 0.6); +} +.mdc-select.mdc-select--disabled + .mdc-select-helper-text { + color: rgba(0, 0, 0, 0.38); +} +.mdc-select:not(.mdc-select--disabled) .mdc-select__icon { + color: rgba(0, 0, 0, 0.54); +} +.mdc-select.mdc-select--disabled .mdc-select__icon { + color: rgba(0, 0, 0, 0.38); +} +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-select.mdc-select--disabled .mdc-select__selected-text { + color: GrayText; + } + .mdc-select.mdc-select--disabled .mdc-select__dropdown-icon { + fill: red; + } + .mdc-select.mdc-select--disabled .mdc-floating-label { + color: GrayText; + } + .mdc-select.mdc-select--disabled .mdc-line-ripple::before { + border-bottom-color: GrayText; + } + .mdc-select.mdc-select--disabled .mdc-notched-outline__leading, +.mdc-select.mdc-select--disabled .mdc-notched-outline__notch, +.mdc-select.mdc-select--disabled .mdc-notched-outline__trailing { + border-color: GrayText; + } + .mdc-select.mdc-select--disabled .mdc-select__icon { + color: GrayText; + } + .mdc-select.mdc-select--disabled + .mdc-select-helper-text { + color: GrayText; + } +} +.mdc-select .mdc-floating-label { + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + pointer-events: none; +} +.mdc-select .mdc-select__anchor { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-select .mdc-select__anchor, .mdc-select .mdc-select__anchor[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 16px; +} + +.mdc-select.mdc-select--with-leading-icon .mdc-select__anchor { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-select.mdc-select--with-leading-icon .mdc-select__anchor, .mdc-select.mdc-select--with-leading-icon .mdc-select__anchor[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 0; +} + +.mdc-select .mdc-select__icon { + width: 24px; + height: 24px; + font-size: 24px; +} +.mdc-select .mdc-select__dropdown-icon { + width: 24px; + height: 24px; +} +.mdc-select .mdc-select__menu .mdc-deprecated-list-item { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; +} +[dir=rtl] .mdc-select .mdc-select__menu .mdc-deprecated-list-item, .mdc-select .mdc-select__menu .mdc-deprecated-list-item[dir=rtl] { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; +} + +.mdc-select .mdc-select__menu .mdc-deprecated-list-item__graphic { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 12px; +} +[dir=rtl] .mdc-select .mdc-select__menu .mdc-deprecated-list-item__graphic, .mdc-select .mdc-select__menu .mdc-deprecated-list-item__graphic[dir=rtl] { + /* @noflip */ + margin-left: 12px; + /* @noflip */ + margin-right: 0; +} + +.mdc-select__dropdown-icon { + /* @noflip */ + margin-left: 12px; + /* @noflip */ + margin-right: 12px; + display: inline-flex; + position: relative; + align-self: center; + align-items: center; + justify-content: center; + flex-shrink: 0; + pointer-events: none; +} +.mdc-select__dropdown-icon .mdc-select__dropdown-icon-active, +.mdc-select__dropdown-icon .mdc-select__dropdown-icon-inactive { + position: absolute; + top: 0; + left: 0; +} +.mdc-select__dropdown-icon .mdc-select__dropdown-icon-graphic { + width: 41.6666666667%; + height: 20.8333333333%; +} +.mdc-select__dropdown-icon .mdc-select__dropdown-icon-inactive { + opacity: 1; + transition: opacity 75ms linear 75ms; +} +.mdc-select__dropdown-icon .mdc-select__dropdown-icon-active { + opacity: 0; + transition: opacity 75ms linear; +} +[dir=rtl] .mdc-select__dropdown-icon, .mdc-select__dropdown-icon[dir=rtl] { + /* @noflip */ + margin-left: 12px; + /* @noflip */ + margin-right: 12px; +} + +.mdc-select--activated .mdc-select__dropdown-icon .mdc-select__dropdown-icon-inactive { + opacity: 0; + transition: opacity 49.5ms linear; +} +.mdc-select--activated .mdc-select__dropdown-icon .mdc-select__dropdown-icon-active { + opacity: 1; + transition: opacity 100.5ms linear 49.5ms; +} + +.mdc-select__anchor { + width: 200px; + min-width: 0; + flex: 1 1 auto; + position: relative; + box-sizing: border-box; + overflow: hidden; + outline: none; + cursor: pointer; +} +.mdc-select__anchor .mdc-floating-label--float-above { + -webkit-transform: translateY(-106%) scale(0.75); + transform: translateY(-106%) scale(0.75); +} + +.mdc-select__selected-text-container { + display: flex; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + pointer-events: none; + box-sizing: border-box; + width: auto; + min-width: 0; + flex-grow: 1; + height: 28px; + border: none; + outline: none; + padding: 0; + background-color: transparent; + color: inherit; +} + +.mdc-select__selected-text { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle1-font-size, 1rem); + line-height: 1.75rem; + /* @alternate */ + line-height: var(--mdc-typography-subtitle1-line-height, 1.75rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle1-font-weight, 400); + letter-spacing: 0.009375em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle1-letter-spacing, 0.009375em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle1-text-transform, inherit); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: block; + width: 100%; + /* @noflip */ + text-align: left; +} +[dir=rtl] .mdc-select__selected-text, .mdc-select__selected-text[dir=rtl] { + /* @noflip */ + text-align: right; +} + +.mdc-select--invalid:not(.mdc-select--disabled) .mdc-floating-label { + color: #b00020; + /* @alternate */ + color: var(--mdc-theme-error, #b00020); +} +.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label { + color: #b00020; + /* @alternate */ + color: var(--mdc-theme-error, #b00020); +} +.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--invalid + .mdc-select-helper-text--validation-msg { + color: #b00020; + /* @alternate */ + color: var(--mdc-theme-error, #b00020); +} +.mdc-select--invalid:not(.mdc-select--disabled) .mdc-select__dropdown-icon { + fill: #b00020; + /* @alternate */ + fill: var(--mdc-theme-error, #b00020); +} +.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon { + fill: #b00020; + /* @alternate */ + fill: var(--mdc-theme-error, #b00020); +} +.mdc-select--disabled { + cursor: default; + pointer-events: none; +} + +.mdc-select--with-leading-icon .mdc-select__menu .mdc-deprecated-list-item { + /* @noflip */ + padding-left: 12px; + /* @noflip */ + padding-right: 12px; +} +[dir=rtl] .mdc-select--with-leading-icon .mdc-select__menu .mdc-deprecated-list-item, .mdc-select--with-leading-icon .mdc-select__menu .mdc-deprecated-list-item[dir=rtl] { + /* @noflip */ + padding-left: 12px; + /* @noflip */ + padding-right: 12px; +} + +.mdc-select__menu .mdc-deprecated-list .mdc-select__icon { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 0; +} +[dir=rtl] .mdc-select__menu .mdc-deprecated-list .mdc-select__icon, .mdc-select__menu .mdc-deprecated-list .mdc-select__icon[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 0; +} + +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected, +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--activated { + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); +} +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__graphic, +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--activated .mdc-deprecated-list-item__graphic { + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); +} + +.mdc-select--filled .mdc-select__anchor { + height: 56px; + display: flex; + align-items: baseline; +} +.mdc-select--filled .mdc-select__anchor::before { + display: inline-block; + width: 0; + height: 40px; + content: ""; + vertical-align: 0; +} +.mdc-select--filled.mdc-select--no-label .mdc-select__anchor .mdc-select__selected-text::before { + content: "​"; +} +.mdc-select--filled.mdc-select--no-label .mdc-select__anchor .mdc-select__selected-text-container { + height: 100%; + display: inline-flex; + align-items: center; +} +.mdc-select--filled.mdc-select--no-label .mdc-select__anchor::before { + display: none; +} +.mdc-select--filled .mdc-select__anchor { + border-top-left-radius: 4px; + /* @alternate */ + border-top-left-radius: var(--mdc-shape-small, 4px); + border-top-right-radius: 4px; + /* @alternate */ + border-top-right-radius: var(--mdc-shape-small, 4px); + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.mdc-select--filled:not(.mdc-select--disabled) .mdc-select__anchor { + background-color: whitesmoke; +} +.mdc-select--filled.mdc-select--disabled .mdc-select__anchor { + background-color: #fafafa; +} +.mdc-select--filled:not(.mdc-select--disabled) .mdc-line-ripple::before { + border-bottom-color: rgba(0, 0, 0, 0.42); +} +.mdc-select--filled:not(.mdc-select--disabled):hover .mdc-line-ripple::before { + border-bottom-color: rgba(0, 0, 0, 0.87); +} +.mdc-select--filled:not(.mdc-select--disabled) .mdc-line-ripple::after { + border-bottom-color: #6200ee; + /* @alternate */ + border-bottom-color: var(--mdc-theme-primary, #6200ee); +} +.mdc-select--filled.mdc-select--disabled .mdc-line-ripple::before { + border-bottom-color: rgba(0, 0, 0, 0.06); +} +.mdc-select--filled .mdc-floating-label { + max-width: calc(100% - 64px); +} +.mdc-select--filled .mdc-floating-label--float-above { + max-width: calc(100% / 0.75 - 64px / 0.75); +} +.mdc-select--filled .mdc-menu-surface--is-open-below { + border-top-left-radius: 0px; + border-top-right-radius: 0px; +} +.mdc-select--filled.mdc-select--focused.mdc-line-ripple::after { + -webkit-transform: scale(1, 2); + transform: scale(1, 2); + opacity: 1; +} +.mdc-select--filled .mdc-floating-label { + /* @noflip */ + left: 16px; + /* @noflip */ + right: initial; +} +[dir=rtl] .mdc-select--filled .mdc-floating-label, .mdc-select--filled .mdc-floating-label[dir=rtl] { + /* @noflip */ + left: initial; + /* @noflip */ + right: 16px; +} + +.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label { + /* @noflip */ + left: 48px; + /* @noflip */ + right: initial; +} +[dir=rtl] .mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label, .mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label[dir=rtl] { + /* @noflip */ + left: initial; + /* @noflip */ + right: 48px; +} + +.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label { + max-width: calc(100% - 96px); +} +.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label--float-above { + max-width: calc(100% / 0.75 - 96px / 0.75); +} + +.mdc-select--invalid:not(.mdc-select--disabled) .mdc-line-ripple::before { + border-bottom-color: #b00020; + /* @alternate */ + border-bottom-color: var(--mdc-theme-error, #b00020); +} +.mdc-select--invalid:not(.mdc-select--disabled):hover .mdc-line-ripple::before { + border-bottom-color: #b00020; + /* @alternate */ + border-bottom-color: var(--mdc-theme-error, #b00020); +} +.mdc-select--invalid:not(.mdc-select--disabled) .mdc-line-ripple::after { + border-bottom-color: #b00020; + /* @alternate */ + border-bottom-color: var(--mdc-theme-error, #b00020); +} +.mdc-select--outlined { + border: none; +} +.mdc-select--outlined .mdc-select__anchor { + height: 56px; +} +.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above { + -webkit-transform: translateY(-37.25px) scale(1); + transform: translateY(-37.25px) scale(1); +} +.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above { + font-size: 0.75rem; +} +.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + -webkit-transform: translateY(-34.75px) scale(0.75); + transform: translateY(-34.75px) scale(0.75); +} +.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + font-size: 1rem; +} +.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--shake { + -webkit-animation: mdc-floating-label-shake-float-above-select-outlined-56px 250ms 1; + animation: mdc-floating-label-shake-float-above-select-outlined-56px 250ms 1; +} +@-webkit-keyframes mdc-floating-label-shake-float-above-select-outlined-56px { + 0% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + } +} +@keyframes mdc-floating-label-shake-float-above-select-outlined-56px { + 0% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + } +} +.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading { + /* @noflip */ + border-top-left-radius: 4px; + /* @alternate */ + /* @noflip */ + border-top-left-radius: var(--mdc-shape-small, 4px); + /* @noflip */ + border-top-right-radius: 0; + /* @noflip */ + border-bottom-right-radius: 0; + /* @noflip */ + border-bottom-left-radius: 4px; + /* @alternate */ + /* @noflip */ + border-bottom-left-radius: var(--mdc-shape-small, 4px); +} +[dir=rtl] .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading, .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl] { + /* @noflip */ + border-top-left-radius: 0; + /* @noflip */ + border-top-right-radius: 4px; + /* @alternate */ + /* @noflip */ + border-top-right-radius: var(--mdc-shape-small, 4px); + /* @noflip */ + border-bottom-right-radius: 4px; + /* @alternate */ + /* @noflip */ + border-bottom-right-radius: var(--mdc-shape-small, 4px); + /* @noflip */ + border-bottom-left-radius: 0; +} + +@supports (top: max(0%)) { + .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading { + width: max(12px, var(--mdc-shape-small, 4px)); + } +} +@supports (top: max(0%)) { + .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__notch { + max-width: calc(100% - max(12px, var(--mdc-shape-small, 4px)) * 2); + } +} +.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing { + /* @noflip */ + border-top-left-radius: 0; + /* @noflip */ + border-top-right-radius: 4px; + /* @alternate */ + /* @noflip */ + border-top-right-radius: var(--mdc-shape-small, 4px); + /* @noflip */ + border-bottom-right-radius: 4px; + /* @alternate */ + /* @noflip */ + border-bottom-right-radius: var(--mdc-shape-small, 4px); + /* @noflip */ + border-bottom-left-radius: 0; +} +[dir=rtl] .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing, .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl] { + /* @noflip */ + border-top-left-radius: 4px; + /* @alternate */ + /* @noflip */ + border-top-left-radius: var(--mdc-shape-small, 4px); + /* @noflip */ + border-top-right-radius: 0; + /* @noflip */ + border-bottom-right-radius: 0; + /* @noflip */ + border-bottom-left-radius: 4px; + /* @alternate */ + /* @noflip */ + border-bottom-left-radius: var(--mdc-shape-small, 4px); +} + +@supports (top: max(0%)) { + .mdc-select--outlined .mdc-select__anchor { + /* @noflip */ + padding-left: max(16px, calc(var(--mdc-shape-small, 4px) + 4px)); + } +} +[dir=rtl] .mdc-select--outlined .mdc-select__anchor, .mdc-select--outlined .mdc-select__anchor[dir=rtl] { + /* @noflip */ + padding-left: 0; +} +@supports (top: max(0%)) { + [dir=rtl] .mdc-select--outlined .mdc-select__anchor, .mdc-select--outlined .mdc-select__anchor[dir=rtl] { + /* @noflip */ + padding-right: max(16px, calc(var(--mdc-shape-small, 4px) + 4px)); + } +} + +@supports (top: max(0%)) { + .mdc-select--outlined + .mdc-select-helper-text { + /* @noflip */ + margin-left: max(16px, calc(var(--mdc-shape-small, 4px) + 4px)); + } +} +[dir=rtl] .mdc-select--outlined + .mdc-select-helper-text, .mdc-select--outlined + .mdc-select-helper-text[dir=rtl] { + /* @noflip */ + margin-left: 0; +} +@supports (top: max(0%)) { + [dir=rtl] .mdc-select--outlined + .mdc-select-helper-text, .mdc-select--outlined + .mdc-select-helper-text[dir=rtl] { + /* @noflip */ + margin-right: max(16px, calc(var(--mdc-shape-small, 4px) + 4px)); + } +} + +.mdc-select--outlined:not(.mdc-select--disabled) .mdc-select__anchor { + background-color: transparent; +} +.mdc-select--outlined.mdc-select--disabled .mdc-select__anchor { + background-color: transparent; +} +.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__leading, +.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__notch, +.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__trailing { + border-color: rgba(0, 0, 0, 0.38); +} +.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__leading, +.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__notch, +.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__trailing { + border-color: rgba(0, 0, 0, 0.87); +} +.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading, +.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch, +.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing { + border-width: 2px; +} +.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading, +.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch, +.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing { + border-color: #6200ee; + /* @alternate */ + border-color: var(--mdc-theme-primary, #6200ee); +} +.mdc-select--outlined.mdc-select--disabled .mdc-notched-outline__leading, +.mdc-select--outlined.mdc-select--disabled .mdc-notched-outline__notch, +.mdc-select--outlined.mdc-select--disabled .mdc-notched-outline__trailing { + border-color: rgba(0, 0, 0, 0.06); +} +.mdc-select--outlined .mdc-select__anchor :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch { + max-width: calc(100% - 60px); +} +.mdc-select--outlined .mdc-select__anchor { + display: flex; + align-items: baseline; + overflow: visible; +} +.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--shake { + -webkit-animation: mdc-floating-label-shake-float-above-select-outlined 250ms 1; + animation: mdc-floating-label-shake-float-above-select-outlined 250ms 1; +} +.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above { + -webkit-transform: translateY(-37.25px) scale(1); + transform: translateY(-37.25px) scale(1); +} +.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above { + font-size: 0.75rem; +} +.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + -webkit-transform: translateY(-34.75px) scale(0.75); + transform: translateY(-34.75px) scale(0.75); +} +.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + font-size: 1rem; +} +.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--notched .mdc-notched-outline__notch { + padding-top: 1px; +} +.mdc-select--outlined .mdc-select__anchor .mdc-select__selected-text::before { + content: "​"; +} +.mdc-select--outlined .mdc-select__anchor .mdc-select__selected-text-container { + height: 100%; + display: inline-flex; + align-items: center; +} +.mdc-select--outlined .mdc-select__anchor::before { + display: none; +} +.mdc-select--outlined .mdc-select__selected-text-container { + display: flex; + border: none; + z-index: 1; + background-color: transparent; +} +.mdc-select--outlined .mdc-select__icon { + z-index: 2; +} +.mdc-select--outlined .mdc-floating-label { + line-height: 1.15rem; + /* @noflip */ + left: 4px; + /* @noflip */ + right: initial; +} +[dir=rtl] .mdc-select--outlined .mdc-floating-label, .mdc-select--outlined .mdc-floating-label[dir=rtl] { + /* @noflip */ + left: initial; + /* @noflip */ + right: 4px; +} + +.mdc-select--outlined.mdc-select--focused .mdc-notched-outline--notched .mdc-notched-outline__notch { + padding-top: 2px; +} +.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled) .mdc-notched-outline__leading, +.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled) .mdc-notched-outline__notch, +.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled) .mdc-notched-outline__trailing { + border-color: #b00020; + /* @alternate */ + border-color: var(--mdc-theme-error, #b00020); +} +.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__leading, +.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__notch, +.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__trailing { + border-color: #b00020; + /* @alternate */ + border-color: var(--mdc-theme-error, #b00020); +} +.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading, +.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch, +.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing { + border-width: 2px; +} +.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading, +.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch, +.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing { + border-color: #b00020; + /* @alternate */ + border-color: var(--mdc-theme-error, #b00020); +} +.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label { + /* @noflip */ + left: 36px; + /* @noflip */ + right: initial; +} +[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label, .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label[dir=rtl] { + /* @noflip */ + left: initial; + /* @noflip */ + right: 36px; +} + +.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above { + -webkit-transform: translateY(-37.25px) translateX(-32px) scale(1); + transform: translateY(-37.25px) translateX(-32px) scale(1); +} +[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above, .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above[dir=rtl] { + -webkit-transform: translateY(-37.25px) translateX(32px) scale(1); + transform: translateY(-37.25px) translateX(32px) scale(1); +} + +.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above { + font-size: 0.75rem; +} +.mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + -webkit-transform: translateY(-34.75px) translateX(-32px) scale(0.75); + transform: translateY(-34.75px) translateX(-32px) scale(0.75); +} +[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above, [dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above, .mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl], .mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl] { + -webkit-transform: translateY(-34.75px) translateX(32px) scale(0.75); + transform: translateY(-34.75px) translateX(32px) scale(0.75); +} + +.mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + font-size: 1rem; +} +.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--shake { + -webkit-animation: mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px 250ms 1; + animation: mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px 250ms 1; +} +@-webkit-keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px { + 0% { + -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + } +} +@keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px { + 0% { + -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + } +} +[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--shake, .mdc-select--outlined.mdc-select--with-leading-icon[dir=rtl] .mdc-floating-label--shake { + -webkit-animation: mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px 250ms 1; + animation: mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px 250ms 1; +} + +@-webkit-keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px-rtl { + 0% { + -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + } +} + +@keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px-rtl { + 0% { + -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + } +} +.mdc-select--outlined.mdc-select--with-leading-icon .mdc-select__anchor :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch { + max-width: calc(100% - 96px); +} +.mdc-select--outlined .mdc-menu-surface { + margin-bottom: 8px; +} +.mdc-select--outlined.mdc-select--no-label .mdc-menu-surface, +.mdc-select--outlined .mdc-menu-surface--is-open-below { + margin-bottom: 0; +} + +.mdc-select__anchor { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-select__anchor .mdc-select__ripple::before, +.mdc-select__anchor .mdc-select__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-select__anchor .mdc-select__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-select__anchor .mdc-select__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-select__anchor.mdc-ripple-upgraded--unbounded .mdc-select__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-select__anchor.mdc-ripple-upgraded--foreground-activation .mdc-select__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-select__anchor.mdc-ripple-upgraded--foreground-deactivation .mdc-select__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-select__anchor .mdc-select__ripple::before, +.mdc-select__anchor .mdc-select__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-select__anchor .mdc-select__ripple::before, +.mdc-select__anchor .mdc-select__ripple::after { + background-color: rgba(0, 0, 0, 0.87); + /* @alternate */ + background-color: var(--mdc-ripple-color, rgba(0, 0, 0, 0.87)); +} +.mdc-select__anchor:hover .mdc-select__ripple::before, .mdc-select__anchor.mdc-ripple-surface--hover .mdc-select__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-select__anchor.mdc-ripple-upgraded--background-focused .mdc-select__ripple::before, .mdc-select__anchor:not(.mdc-ripple-upgraded):focus .mdc-select__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-select__anchor .mdc-select__ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; +} + +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple::before, .mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-on-surface, #000)); +} +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:hover .mdc-deprecated-list-item__ripple::before, .mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-deprecated-list-item__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple::before, .mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-deprecated-list-item__ripple::after { + transition: opacity 150ms linear; +} +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-deprecated-list-item__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-list-item__ripple::before, .mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-list-item__ripple::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-on-surface, #000)); +} +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:hover .mdc-list-item__ripple::before, .mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-list-item__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before, .mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after { + transition: opacity 150ms linear; +} +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} + +.mdc-select-helper-text { + margin: 0; + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.75rem; + /* @alternate */ + font-size: var(--mdc-typography-caption-font-size, 0.75rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-caption-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-caption-font-weight, 400); + letter-spacing: 0.0333333333em; + /* @alternate */ + letter-spacing: var(--mdc-typography-caption-letter-spacing, 0.0333333333em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-caption-text-transform, inherit); + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +[dir=rtl] .mdc-select-helper-text, .mdc-select-helper-text[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; +} + +.mdc-select-helper-text::before { + display: inline-block; + width: 0; + height: 16px; + content: ""; + vertical-align: 0; +} + +.mdc-select-helper-text--validation-msg { + opacity: 0; + transition: opacity 180ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.mdc-select--invalid + .mdc-select-helper-text--validation-msg, +.mdc-select-helper-text--validation-msg-persistent { + opacity: 1; +} + +.mdc-select--with-leading-icon .mdc-select__icon { + display: inline-block; + box-sizing: border-box; + border: none; + text-decoration: none; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + flex-shrink: 0; + align-self: center; + background-color: transparent; + fill: currentColor; +} +.mdc-select--with-leading-icon .mdc-select__icon { + /* @noflip */ + margin-left: 12px; + /* @noflip */ + margin-right: 12px; +} +[dir=rtl] .mdc-select--with-leading-icon .mdc-select__icon, .mdc-select--with-leading-icon .mdc-select__icon[dir=rtl] { + /* @noflip */ + margin-left: 12px; + /* @noflip */ + margin-right: 12px; +} + +.mdc-select__icon:not([tabindex]), +.mdc-select__icon[tabindex="-1"] { + cursor: default; + pointer-events: none; +} + +.mdc-data-table__content { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-body2-font-size, 0.875rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-body2-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body2-font-weight, 400); + letter-spacing: 0.0178571429em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body2-letter-spacing, 0.0178571429em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body2-text-transform, inherit); +} + +.mdc-data-table { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-surface, #fff); + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-medium, 4px); + border-width: 1px; + border-style: solid; + border-color: rgba(0, 0, 0, 0.12); + -webkit-overflow-scrolling: touch; + display: inline-flex; + flex-direction: column; + box-sizing: border-box; + position: relative; +} +.mdc-data-table .mdc-data-table__header-cell:first-child { + border-top-left-radius: 4px; + /* @alternate */ + border-top-left-radius: var(--mdc-shape-medium, 4px); +} +[dir=rtl] .mdc-data-table .mdc-data-table__header-cell:first-child, .mdc-data-table .mdc-data-table__header-cell:first-child[dir=rtl] { + border-top-right-radius: 4px; + /* @alternate */ + border-top-right-radius: var(--mdc-shape-medium, 4px); + border-top-left-radius: 0; +} + +.mdc-data-table .mdc-data-table__header-cell:last-child { + border-top-right-radius: 4px; + /* @alternate */ + border-top-right-radius: var(--mdc-shape-medium, 4px); +} +[dir=rtl] .mdc-data-table .mdc-data-table__header-cell:last-child, .mdc-data-table .mdc-data-table__header-cell:last-child[dir=rtl] { + border-top-left-radius: 4px; + /* @alternate */ + border-top-left-radius: var(--mdc-shape-medium, 4px); + border-top-right-radius: 0; +} + +.mdc-data-table__row { + background-color: inherit; +} + +.mdc-data-table__header-cell { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-surface, #fff); +} + +.mdc-data-table__row--selected { + background-color: rgba(98, 0, 238, 0.04); +} + +.mdc-data-table__pagination-rows-per-page-select:not(.mdc-select--disabled) .mdc-notched-outline__leading, +.mdc-data-table__pagination-rows-per-page-select:not(.mdc-select--disabled) .mdc-notched-outline__notch, +.mdc-data-table__pagination-rows-per-page-select:not(.mdc-select--disabled) .mdc-notched-outline__trailing { + border-color: rgba(0, 0, 0, 0.12); +} +.mdc-data-table__cell, +.mdc-data-table__header-cell { + border-bottom-color: rgba(0, 0, 0, 0.12); +} + +.mdc-data-table__pagination { + border-top-color: rgba(0, 0, 0, 0.12); +} + +.mdc-data-table__cell, +.mdc-data-table__header-cell { + border-bottom-width: 1px; + border-bottom-style: solid; +} + +.mdc-data-table__pagination { + border-top-width: 1px; + border-top-style: solid; +} + +.mdc-data-table__row:last-child .mdc-data-table__cell { + border-bottom: none; +} + +.mdc-data-table__row:not(.mdc-data-table__row--selected):hover { + background-color: rgba(0, 0, 0, 0.04); +} + +.mdc-data-table__header-cell { + color: rgba(0, 0, 0, 0.87); +} + +.mdc-data-table__pagination-total, +.mdc-data-table__pagination-rows-per-page-label, +.mdc-data-table__cell { + color: rgba(0, 0, 0, 0.87); +} + +.mdc-data-table__row { + height: 52px; +} + +.mdc-data-table__pagination { + min-height: 52px; +} + +.mdc-data-table__header-row { + height: 56px; +} + +.mdc-data-table__cell, +.mdc-data-table__header-cell { + padding: 0 16px 0 16px; +} + +.mdc-data-table__header-cell--checkbox, +.mdc-data-table__cell--checkbox { + /* @noflip */ + padding-left: 4px; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-data-table__header-cell--checkbox, [dir=rtl] .mdc-data-table__cell--checkbox, .mdc-data-table__header-cell--checkbox[dir=rtl], .mdc-data-table__cell--checkbox[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 4px; +} + +.mdc-data-table__sort-icon-button { + color: rgba(0, 0, 0, 0.6); +} +.mdc-data-table__sort-icon-button .mdc-icon-button__ripple::before, .mdc-data-table__sort-icon-button .mdc-icon-button__ripple::after { + background-color: rgba(0, 0, 0, 0.6); + /* @alternate */ + background-color: var(--mdc-ripple-color, rgba(0, 0, 0, 0.6)); +} +.mdc-data-table__sort-icon-button:hover .mdc-icon-button__ripple::before, .mdc-data-table__sort-icon-button.mdc-ripple-surface--hover .mdc-icon-button__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-data-table__sort-icon-button.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple::before, .mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple::after { + transition: opacity 150ms linear; +} +.mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-data-table__sort-icon-button.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} + +.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button { + color: rgba(0, 0, 0, 0.87); +} +.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button .mdc-icon-button__ripple::before, .mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button .mdc-icon-button__ripple::after { + background-color: rgba(0, 0, 0, 0.87); + /* @alternate */ + background-color: var(--mdc-ripple-color, rgba(0, 0, 0, 0.87)); +} +.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button:hover .mdc-icon-button__ripple::before, .mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button.mdc-ripple-surface--hover .mdc-icon-button__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple::before, .mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple::after { + transition: opacity 150ms linear; +} +.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} + +.mdc-data-table__table-container { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + width: 100%; +} + +.mdc-data-table__table { + min-width: 100%; + border: 0; + white-space: nowrap; + border-spacing: 0; + /** + * With table-layout:fixed, table and column widths are defined by the width + * of the first row of cells. Cells in subsequent rows do not affect column + * widths. This results in a predictable table layout and may also speed up + * rendering. + */ + table-layout: fixed; +} + +.mdc-data-table__cell { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-body2-font-size, 0.875rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-body2-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body2-font-weight, 400); + letter-spacing: 0.0178571429em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body2-letter-spacing, 0.0178571429em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body2-text-transform, inherit); + box-sizing: border-box; + overflow: hidden; + text-align: left; + text-overflow: ellipsis; +} +[dir=rtl] .mdc-data-table__cell, .mdc-data-table__cell[dir=rtl] { + /* @noflip */ + text-align: right; +} + +.mdc-data-table__cell--numeric { + text-align: right; +} +[dir=rtl] .mdc-data-table__cell--numeric, .mdc-data-table__cell--numeric[dir=rtl] { + /* @noflip */ + text-align: left; +} + +.mdc-data-table__cell--checkbox { + width: 1px; +} + +.mdc-data-table__header-cell { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle2-font-size, 0.875rem); + line-height: 1.375rem; + /* @alternate */ + line-height: var(--mdc-typography-subtitle2-line-height, 1.375rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle2-font-weight, 500); + letter-spacing: 0.0071428571em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle2-letter-spacing, 0.0071428571em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle2-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle2-text-transform, inherit); + box-sizing: border-box; + text-overflow: ellipsis; + overflow: hidden; + outline: none; + /* @noflip */ + text-align: left; +} +[dir=rtl] .mdc-data-table__header-cell, .mdc-data-table__header-cell[dir=rtl] { + /* @noflip */ + text-align: right; +} + +.mdc-data-table__header-cell--checkbox { + width: 1px; +} + +.mdc-data-table__header-cell--numeric { + text-align: right; +} +[dir=rtl] .mdc-data-table__header-cell--numeric, .mdc-data-table__header-cell--numeric[dir=rtl] { + /* @noflip */ + text-align: left; +} + +.mdc-data-table__sort-icon-button { + width: 28px; + height: 28px; + padding: 2px; + -webkit-transform: rotate(0.0001deg); + transform: rotate(0.0001deg); + /* @noflip */ + margin-left: 4px; + /* @noflip */ + margin-right: 0; + transition: -webkit-transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1); + opacity: 0; +} +.mdc-data-table__sort-icon-button.mdc-icon-button--touch { + margin-top: 0; + margin-bottom: 0; +} +.mdc-data-table__sort-icon-button.mdc-icon-button--touch .mdc-icon-button__touch { + display: none; +} +[dir=rtl] .mdc-data-table__sort-icon-button, .mdc-data-table__sort-icon-button[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 4px; +} + +.mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 4px; +} +[dir=rtl] .mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button, .mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button[dir=rtl] { + /* @noflip */ + margin-left: 4px; + /* @noflip */ + margin-right: 0; +} + +.mdc-data-table__header-cell--sorted-descending .mdc-data-table__sort-icon-button { + -webkit-transform: rotate(-180deg); + transform: rotate(-180deg); +} +.mdc-data-table__sort-icon-button:focus, .mdc-data-table__header-cell:hover .mdc-data-table__sort-icon-button, .mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button { + opacity: 1; +} + +.mdc-data-table__header-cell-wrapper { + align-items: center; + display: inline-flex; + vertical-align: middle; +} + +.mdc-data-table__header-cell--with-sort { + cursor: pointer; +} + +.mdc-data-table__sort-status-label { + clip: rect(1px, 1px, 1px, 1px); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + /* added line */ + width: 1px; +} + +.mdc-data-table__progress-indicator { + display: none; + position: absolute; + width: 100%; +} +.mdc-data-table--in-progress .mdc-data-table__progress-indicator { + display: block; +} + +.mdc-data-table__scrim { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-surface, #fff); + height: 100%; + opacity: 0.32; + position: absolute; + top: 0; + width: 100%; +} + +.mdc-data-table--sticky-header .mdc-data-table__header-cell { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1; +} + +.mdc-data-table__pagination { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-body2-font-size, 0.875rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-body2-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body2-font-weight, 400); + letter-spacing: 0.0178571429em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body2-letter-spacing, 0.0178571429em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body2-text-transform, inherit); + box-sizing: border-box; + display: flex; + justify-content: flex-end; +} + +.mdc-data-table__pagination-trailing { + /* @noflip */ + margin-left: 4px; + /* @noflip */ + margin-right: 0; + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-end; +} +[dir=rtl] .mdc-data-table__pagination-trailing, .mdc-data-table__pagination-trailing[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 4px; +} + +.mdc-data-table__pagination-navigation { + align-items: center; + display: flex; +} + +.mdc-data-table__pagination-button { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 4px; +} +[dir=rtl] .mdc-data-table__pagination-button .mdc-button__icon, .mdc-data-table__pagination-button .mdc-button__icon[dir=rtl] { + /* @noflip */ + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +[dir=rtl] .mdc-data-table__pagination-button, .mdc-data-table__pagination-button[dir=rtl] { + /* @noflip */ + margin-left: 4px; + /* @noflip */ + margin-right: 0; +} + +.mdc-data-table__pagination-total { + /* @noflip */ + margin-left: 14px; + /* @noflip */ + margin-right: 36px; + white-space: nowrap; +} +[dir=rtl] .mdc-data-table__pagination-total, .mdc-data-table__pagination-total[dir=rtl] { + /* @noflip */ + margin-left: 36px; + /* @noflip */ + margin-right: 14px; +} + +.mdc-data-table__pagination-rows-per-page { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 22px; + align-items: center; + display: inline-flex; +} +[dir=rtl] .mdc-data-table__pagination-rows-per-page, .mdc-data-table__pagination-rows-per-page[dir=rtl] { + /* @noflip */ + margin-left: 22px; + /* @noflip */ + margin-right: 0; +} + +.mdc-data-table__pagination-rows-per-page-label { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 12px; + white-space: nowrap; +} +[dir=rtl] .mdc-data-table__pagination-rows-per-page-label, .mdc-data-table__pagination-rows-per-page-label[dir=rtl] { + /* @noflip */ + margin-left: 12px; + /* @noflip */ + margin-right: 0; +} + +.mdc-data-table__pagination-rows-per-page-select { + min-width: 80px; + /* @alternate */ + min-width: var(--mdc-menu-min-width, 80px); + margin: 8px 0; +} +.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor { + width: 100%; + min-width: 80px; +} +.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor { + height: 36px; +} +.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-floating-label--float-above { + -webkit-transform: translateY(-27.25px) scale(1); + transform: translateY(-27.25px) scale(1); +} +.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-floating-label--float-above { + font-size: 0.75rem; +} +.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + -webkit-transform: translateY(-24.75px) scale(0.75); + transform: translateY(-24.75px) scale(0.75); +} +.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + font-size: 1rem; +} +.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-floating-label--shake { + -webkit-animation: mdc-floating-label-shake-float-above-select-outlined-36px 250ms 1; + animation: mdc-floating-label-shake-float-above-select-outlined-36px 250ms 1; +} +@-webkit-keyframes mdc-floating-label-shake-float-above-select-outlined-36px { + 0% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + } +} +@keyframes mdc-floating-label-shake-float-above-select-outlined-36px { + 0% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + } +} +.mdc-data-table__pagination-rows-per-page-select .mdc-select__dropdown-icon { + width: 20px; + height: 20px; +} +.mdc-data-table__pagination-rows-per-page-select.mdc-select--outlined .mdc-select__anchor :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch { + max-width: calc(100% - 56px); +} +.mdc-data-table__pagination-rows-per-page-select .mdc-deprecated-list-item { + height: 36px; +} + +.mdc-data-table__header-row-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::before, .mdc-data-table__header-row-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::after, +.mdc-data-table__row-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::before, +.mdc-data-table__row-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +.mdc-data-table__header-row-checkbox.mdc-checkbox--selected:hover .mdc-checkbox__ripple::before, .mdc-data-table__header-row-checkbox.mdc-checkbox--selected.mdc-ripple-surface--hover .mdc-checkbox__ripple::before, +.mdc-data-table__row-checkbox.mdc-checkbox--selected:hover .mdc-checkbox__ripple::before, +.mdc-data-table__row-checkbox.mdc-checkbox--selected.mdc-ripple-surface--hover .mdc-checkbox__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-data-table__header-row-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before, .mdc-data-table__header-row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before, +.mdc-data-table__row-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before, +.mdc-data-table__row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-data-table__header-row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after, +.mdc-data-table__row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after { + transition: opacity 150ms linear; +} +.mdc-data-table__header-row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after, +.mdc-data-table__row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-data-table__header-row-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded, +.mdc-data-table__row-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-data-table__header-row-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::before, +.mdc-data-table__header-row-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::after, +.mdc-data-table__row-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::before, +.mdc-data-table__row-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true]) ~ .mdc-checkbox__background, +.mdc-data-table__row-checkbox .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true]) ~ .mdc-checkbox__background { + border-color: rgba(0, 0, 0, 0.54); + /* @alternate */ + border-color: var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54)); + background-color: transparent; +} +.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control:enabled:checked ~ .mdc-checkbox__background, +.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control:enabled:indeterminate ~ .mdc-checkbox__background, +.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control[data-indeterminate=true]:enabled ~ .mdc-checkbox__background, +.mdc-data-table__row-checkbox .mdc-checkbox__native-control:enabled:checked ~ .mdc-checkbox__background, +.mdc-data-table__row-checkbox .mdc-checkbox__native-control:enabled:indeterminate ~ .mdc-checkbox__background, +.mdc-data-table__row-checkbox .mdc-checkbox__native-control[data-indeterminate=true]:enabled ~ .mdc-checkbox__background { + border-color: #6200ee; + /* @alternate */ + border-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee)); + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee)); +} +@-webkit-keyframes mdc-checkbox-fade-in-background-8A000000FF6200EE00000000FF6200EE { + 0% { + border-color: rgba(0, 0, 0, 0.54); + /* @alternate */ + border-color: var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54)); + background-color: transparent; + } + 50% { + border-color: #6200ee; + /* @alternate */ + border-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee)); + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee)); + } +} +@keyframes mdc-checkbox-fade-in-background-8A000000FF6200EE00000000FF6200EE { + 0% { + border-color: rgba(0, 0, 0, 0.54); + /* @alternate */ + border-color: var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54)); + background-color: transparent; + } + 50% { + border-color: #6200ee; + /* @alternate */ + border-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee)); + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee)); + } +} +@-webkit-keyframes mdc-checkbox-fade-out-background-8A000000FF6200EE00000000FF6200EE { + 0%, 80% { + border-color: #6200ee; + /* @alternate */ + border-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee)); + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee)); + } + 100% { + border-color: rgba(0, 0, 0, 0.54); + /* @alternate */ + border-color: var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54)); + background-color: transparent; + } +} +@keyframes mdc-checkbox-fade-out-background-8A000000FF6200EE00000000FF6200EE { + 0%, 80% { + border-color: #6200ee; + /* @alternate */ + border-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee)); + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee)); + } + 100% { + border-color: rgba(0, 0, 0, 0.54); + /* @alternate */ + border-color: var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54)); + background-color: transparent; + } +} +.mdc-data-table__header-row-checkbox.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background, .mdc-data-table__header-row-checkbox.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background, +.mdc-data-table__row-checkbox.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background, +.mdc-data-table__row-checkbox.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background { + -webkit-animation-name: mdc-checkbox-fade-in-background-8A000000FF6200EE00000000FF6200EE; + animation-name: mdc-checkbox-fade-in-background-8A000000FF6200EE00000000FF6200EE; +} +.mdc-data-table__header-row-checkbox.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background, .mdc-data-table__header-row-checkbox.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background, +.mdc-data-table__row-checkbox.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background, +.mdc-data-table__row-checkbox.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled ~ .mdc-checkbox__background { + -webkit-animation-name: mdc-checkbox-fade-out-background-8A000000FF6200EE00000000FF6200EE; + animation-name: mdc-checkbox-fade-out-background-8A000000FF6200EE00000000FF6200EE; +} + +.mdc-dialog, +.mdc-dialog__scrim { + position: fixed; + top: 0; + left: 0; + align-items: center; + justify-content: center; + box-sizing: border-box; + width: 100%; + height: 100%; +} + +.mdc-dialog { + display: none; + z-index: 7; + /* @alternate */ + z-index: var(--mdc-dialog-z-index, 7); +} +.mdc-dialog .mdc-dialog__surface { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-surface, #fff); +} +.mdc-dialog .mdc-dialog__scrim { + background-color: rgba(0, 0, 0, 0.32); +} +.mdc-dialog .mdc-dialog__surface-scrim { + background-color: rgba(0, 0, 0, 0.32); +} +.mdc-dialog .mdc-dialog__title { + color: rgba(0, 0, 0, 0.87); +} +.mdc-dialog .mdc-dialog__content { + color: rgba(0, 0, 0, 0.6); +} +.mdc-dialog .mdc-dialog__close { + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); +} +.mdc-dialog .mdc-dialog__close .mdc-icon-button__ripple::before, .mdc-dialog .mdc-dialog__close .mdc-icon-button__ripple::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-on-surface, #000)); +} +.mdc-dialog .mdc-dialog__close:hover .mdc-icon-button__ripple::before, .mdc-dialog .mdc-dialog__close.mdc-ripple-surface--hover .mdc-icon-button__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-dialog .mdc-dialog__close.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple::before, .mdc-dialog .mdc-dialog__close:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-dialog .mdc-dialog__close:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple::after { + transition: opacity 150ms linear; +} +.mdc-dialog .mdc-dialog__close:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-dialog .mdc-dialog__close.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__title, .mdc-dialog.mdc-dialog--scrollable .mdc-dialog__actions, .mdc-dialog.mdc-dialog--scrollable.mdc-dialog-scroll-divider-footer .mdc-dialog__actions { + border-color: rgba(0, 0, 0, 0.12); +} +.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__title { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); + margin-bottom: 0; +} +.mdc-dialog.mdc-dialog-scroll-divider-header.mdc-dialog--fullscreen .mdc-dialog__header { + /* @alternate */ + 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); +} +.mdc-dialog .mdc-dialog__content { + padding: 20px 24px 20px 24px; +} +.mdc-dialog .mdc-dialog__surface { + min-width: 280px; +} +@media (max-width: 592px) { + .mdc-dialog .mdc-dialog__surface { + max-width: calc(100vw - 32px); + } +} +@media (min-width: 592px) { + .mdc-dialog .mdc-dialog__surface { + max-width: 560px; + } +} +.mdc-dialog .mdc-dialog__surface { + max-height: calc(100% - 32px); +} +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .mdc-dialog .mdc-dialog__container { + /* stylelint-disable */ + /* stylelint-enable*/ + } +} +.mdc-dialog .mdc-dialog__surface { + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-medium, 4px); +} +@media (max-width: 960px) and (max-height: 1440px) { + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface { + max-height: 560px; + max-width: 560px; + } + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close { + right: -12px; + } +} +@media (max-width: 720px) and (max-height: 1023px) and (max-width: 672px) { + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface { + max-width: calc(100vw - 112px); + } +} +@media (max-width: 720px) and (max-height: 1023px) and (min-width: 672px) { + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface { + max-width: 560px; + } +} +@media (max-width: 720px) and (max-height: 1023px) and (max-height: 720px) { + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface { + max-height: calc(100vh - 160px); + } +} +@media (max-width: 720px) and (max-height: 1023px) and (min-height: 720px) { + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface { + max-height: 560px; + } +} +@media (max-width: 720px) and (max-height: 1023px) { + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close { + right: -12px; + } +} +@media (max-width: 720px) and (max-height: 400px) { + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface { + height: 100%; + max-height: 100vh; + max-width: 100vw; + width: 100%; + border-radius: 0; + } + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close { + order: -1; + left: -12px; + } + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__header { + padding: 0 16px 9px; + justify-content: flex-start; + } + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__title { + margin-left: calc(16px - 2 * 12px); + } +} +@media (max-width: 600px) and (max-height: 960px) { + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface { + height: 100%; + max-height: 100vh; + max-width: 100vw; + width: 100vw; + border-radius: 0; + } + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close { + order: -1; + left: -12px; + } + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__header { + padding: 0 16px 9px; + justify-content: flex-start; + } + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__title { + margin-left: calc(16px - 2 * 12px); + } +} +@media (min-width: 960px) and (min-height: 1440px) { + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface { + max-width: calc(100vw - 400px); + } + .mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close { + right: -12px; + } +} +.mdc-dialog.mdc-dialog__scrim--hidden .mdc-dialog__scrim { + opacity: 0; +} + +.mdc-dialog__scrim { + opacity: 0; + z-index: -1; +} + +.mdc-dialog__container { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-around; + box-sizing: border-box; + height: 100%; + -webkit-transform: scale(0.8); + transform: scale(0.8); + opacity: 0; + pointer-events: none; +} + +.mdc-dialog__surface { + /* @alternate */ + position: relative; + /* @alternate */ + box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12); + display: flex; + flex-direction: column; + flex-grow: 0; + flex-shrink: 0; + box-sizing: border-box; + max-width: 100%; + max-height: 100%; + pointer-events: auto; + overflow-y: auto; +} +.mdc-dialog__surface .mdc-elevation-overlay { + width: 100%; + height: 100%; + top: 0; + /* @noflip */ + left: 0; +} +[dir=rtl] .mdc-dialog__surface, .mdc-dialog__surface[dir=rtl] { + /* @noflip */ + text-align: right; +} + +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-dialog__surface { + outline: 2px solid windowText; + } +} +.mdc-dialog__surface::before { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 2px solid transparent; + border-radius: inherit; + content: ""; + pointer-events: none; +} +@media screen and (-ms-high-contrast: active), screen and (-ms-high-contrast: none) { + .mdc-dialog__surface::before { + content: none; + } +} + +.mdc-dialog__title { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1.25rem; + /* @alternate */ + font-size: var(--mdc-typography-headline6-font-size, 1.25rem); + line-height: 2rem; + /* @alternate */ + line-height: var(--mdc-typography-headline6-line-height, 2rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-headline6-font-weight, 500); + letter-spacing: 0.0125em; + /* @alternate */ + letter-spacing: var(--mdc-typography-headline6-letter-spacing, 0.0125em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-headline6-text-decoration, inherit); + text-decoration: var(--mdc-typography-headline6-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-headline6-text-transform, inherit); + position: relative; + flex-shrink: 0; + box-sizing: border-box; + margin: 0 0 1px; + padding: 0 24px 9px; +} +.mdc-dialog__title::before { + display: inline-block; + width: 0; + height: 40px; + content: ""; + vertical-align: 0; +} +[dir=rtl] .mdc-dialog__title, .mdc-dialog__title[dir=rtl] { + /* @noflip */ + text-align: right; +} + +.mdc-dialog--scrollable .mdc-dialog__title { + margin-bottom: 1px; + padding-bottom: 15px; +} + +.mdc-dialog--fullscreen .mdc-dialog__header { + align-items: baseline; + border-bottom: 1px solid transparent; + display: inline-flex; + justify-content: space-between; + padding: 0 24px 9px; + z-index: 1; +} +.mdc-dialog--fullscreen .mdc-dialog__header .mdc-dialog__close { + right: -12px; +} +.mdc-dialog--fullscreen .mdc-dialog__title { + margin-bottom: 0; + padding: 0; + border-bottom: 0; +} +.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__title { + border-bottom: 0; + margin-bottom: 0; +} +.mdc-dialog--fullscreen .mdc-dialog__close { + top: 5px; +} +.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__actions { + border-top: 1px solid transparent; +} + +.mdc-dialog__content { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1rem; + /* @alternate */ + font-size: var(--mdc-typography-body1-font-size, 1rem); + line-height: 1.5rem; + /* @alternate */ + line-height: var(--mdc-typography-body1-line-height, 1.5rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body1-font-weight, 400); + letter-spacing: 0.03125em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body1-letter-spacing, 0.03125em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body1-text-decoration, inherit); + text-decoration: var(--mdc-typography-body1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body1-text-transform, inherit); + flex-grow: 1; + box-sizing: border-box; + margin: 0; + overflow: auto; + -webkit-overflow-scrolling: touch; +} +.mdc-dialog__content > :first-child { + margin-top: 0; +} +.mdc-dialog__content > :last-child { + margin-bottom: 0; +} + +.mdc-dialog__title + .mdc-dialog__content, +.mdc-dialog__header + .mdc-dialog__content { + padding-top: 0; +} + +.mdc-dialog--scrollable .mdc-dialog__title + .mdc-dialog__content { + padding-top: 8px; + padding-bottom: 8px; +} + +.mdc-dialog__content .mdc-deprecated-list:first-child:last-child { + padding: 6px 0 0; +} + +.mdc-dialog--scrollable .mdc-dialog__content .mdc-deprecated-list:first-child:last-child { + padding: 0; +} + +.mdc-dialog__actions { + display: flex; + position: relative; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + box-sizing: border-box; + min-height: 52px; + margin: 0; + padding: 8px; + border-top: 1px solid transparent; +} +.mdc-dialog--stacked .mdc-dialog__actions { + flex-direction: column; + align-items: flex-end; +} + +.mdc-dialog__button { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: 0; + max-width: 100%; + /* @noflip */ + text-align: right; +} +[dir=rtl] .mdc-dialog__button, .mdc-dialog__button[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 8px; +} + +.mdc-dialog__button:first-child { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 0; +} +[dir=rtl] .mdc-dialog__button:first-child, .mdc-dialog__button:first-child[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 0; +} + +[dir=rtl] .mdc-dialog__button, .mdc-dialog__button[dir=rtl] { + /* @noflip */ + text-align: left; +} + +.mdc-dialog--stacked .mdc-dialog__button:not(:first-child) { + margin-top: 12px; +} + +.mdc-dialog--open, +.mdc-dialog--opening, +.mdc-dialog--closing { + display: flex; +} + +.mdc-dialog--opening .mdc-dialog__scrim { + transition: opacity 150ms linear; +} +.mdc-dialog--opening .mdc-dialog__container { + transition: opacity 75ms linear, -webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: opacity 75ms linear, transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: opacity 75ms linear, transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1); +} + +.mdc-dialog--closing .mdc-dialog__scrim, +.mdc-dialog--closing .mdc-dialog__container { + transition: opacity 75ms linear; +} +.mdc-dialog--closing .mdc-dialog__container { + -webkit-transform: none; + transform: none; +} + +.mdc-dialog--open .mdc-dialog__scrim { + opacity: 1; +} +.mdc-dialog--open .mdc-dialog__container { + -webkit-transform: none; + transform: none; + opacity: 1; +} +.mdc-dialog--open.mdc-dialog__surface-scrim--shown .mdc-dialog__surface-scrim { + opacity: 1; + z-index: 1; +} +.mdc-dialog--open.mdc-dialog__surface-scrim--hiding .mdc-dialog__surface-scrim { + transition: opacity 75ms linear; +} +.mdc-dialog--open.mdc-dialog__surface-scrim--showing .mdc-dialog__surface-scrim { + transition: opacity 150ms linear; +} + +.mdc-dialog__surface-scrim { + display: none; + opacity: 0; + position: absolute; + width: 100%; + height: 100%; +} +.mdc-dialog__surface-scrim--shown .mdc-dialog__surface-scrim, .mdc-dialog__surface-scrim--showing .mdc-dialog__surface-scrim, .mdc-dialog__surface-scrim--hiding .mdc-dialog__surface-scrim { + display: block; +} + +.mdc-dialog-scroll-lock { + overflow: hidden; +} + +.mdc-drawer { + border-color: rgba(0, 0, 0, 0.12); + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-surface, #fff); + /* @noflip */ + border-top-left-radius: 0; + /* @noflip */ + border-top-right-radius: 0; + /* @alternate */ + /* @noflip */ + border-top-right-radius: var(--mdc-shape-large, 0); + /* @noflip */ + border-bottom-right-radius: 0; + /* @alternate */ + /* @noflip */ + border-bottom-right-radius: var(--mdc-shape-large, 0); + /* @noflip */ + border-bottom-left-radius: 0; + z-index: 6; + width: 256px; + display: flex; + flex-direction: column; + flex-shrink: 0; + box-sizing: border-box; + height: 100%; + /* @noflip */ + border-right-width: 1px; + /* @noflip */ + border-right-style: solid; + overflow: hidden; + transition-property: -webkit-transform; + transition-property: transform; + transition-property: transform, -webkit-transform; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} +.mdc-drawer .mdc-drawer__title { + color: rgba(0, 0, 0, 0.87); +} +.mdc-drawer .mdc-deprecated-list-group__subheader { + color: rgba(0, 0, 0, 0.6); +} +.mdc-drawer .mdc-drawer__subtitle { + color: rgba(0, 0, 0, 0.6); +} +.mdc-drawer .mdc-deprecated-list-item__graphic { + color: rgba(0, 0, 0, 0.6); +} +.mdc-drawer .mdc-deprecated-list-item { + color: rgba(0, 0, 0, 0.87); +} +.mdc-drawer .mdc-deprecated-list-item--activated .mdc-deprecated-list-item__graphic { + color: #6200ee; +} +.mdc-drawer .mdc-deprecated-list-item--activated { + color: rgba(98, 0, 238, 0.87); +} +[dir=rtl] .mdc-drawer, .mdc-drawer[dir=rtl] { + /* @noflip */ + border-top-left-radius: 0; + /* @alternate */ + /* @noflip */ + border-top-left-radius: var(--mdc-shape-large, 0); + /* @noflip */ + border-top-right-radius: 0; + /* @noflip */ + border-bottom-right-radius: 0; + /* @noflip */ + border-bottom-left-radius: 0; + /* @alternate */ + /* @noflip */ + border-bottom-left-radius: var(--mdc-shape-large, 0); +} + +.mdc-drawer .mdc-deprecated-list-item { + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-small, 4px); +} +.mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing) + .mdc-drawer-app-content { + /* @noflip */ + margin-left: 256px; + /* @noflip */ + margin-right: 0; +} +[dir=rtl] .mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing) + .mdc-drawer-app-content, .mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing) + .mdc-drawer-app-content[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 256px; +} + +[dir=rtl] .mdc-drawer, .mdc-drawer[dir=rtl] { + /* @noflip */ + border-right-width: 0; + /* @noflip */ + border-left-width: 1px; + /* @noflip */ + border-right-style: none; + /* @noflip */ + border-left-style: solid; +} + +.mdc-drawer .mdc-deprecated-list-item { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle2-font-size, 0.875rem); + line-height: 1.375rem; + /* @alternate */ + line-height: var(--mdc-typography-subtitle2-line-height, 1.375rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle2-font-weight, 500); + letter-spacing: 0.0071428571em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle2-letter-spacing, 0.0071428571em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle2-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle2-text-transform, inherit); + height: calc(48px - 2 * 4px); + margin: 8px 8px; + padding: 0 8px; +} +.mdc-drawer .mdc-deprecated-list-item:nth-child(1) { + margin-top: 2px; +} +.mdc-drawer .mdc-deprecated-list-item:nth-last-child(1) { + margin-bottom: 0; +} +.mdc-drawer .mdc-deprecated-list-group__subheader { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-body2-font-size, 0.875rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-body2-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body2-font-weight, 400); + letter-spacing: 0.0178571429em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body2-letter-spacing, 0.0178571429em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body2-text-transform, inherit); + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin: 0; + padding: 0 16px; +} +.mdc-drawer .mdc-deprecated-list-group__subheader::before { + display: inline-block; + width: 0; + height: 24px; + content: ""; + vertical-align: 0; +} +.mdc-drawer .mdc-deprecated-list-divider { + margin: 3px 0 4px; +} +.mdc-drawer .mdc-deprecated-list-item__text, +.mdc-drawer .mdc-deprecated-list-item__graphic { + pointer-events: none; +} + +.mdc-drawer--animate { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} +[dir=rtl] .mdc-drawer--animate, .mdc-drawer--animate[dir=rtl] { + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +.mdc-drawer--opening { + -webkit-transform: translateX(0); + transform: translateX(0); + transition-duration: 250ms; +} +[dir=rtl] .mdc-drawer--opening, .mdc-drawer--opening[dir=rtl] { + -webkit-transform: translateX(0); + transform: translateX(0); +} + +.mdc-drawer--closing { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + transition-duration: 200ms; +} +[dir=rtl] .mdc-drawer--closing, .mdc-drawer--closing[dir=rtl] { + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +.mdc-drawer__header { + flex-shrink: 0; + box-sizing: border-box; + min-height: 64px; + padding: 0 16px 4px; +} + +.mdc-drawer__title { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1.25rem; + /* @alternate */ + font-size: var(--mdc-typography-headline6-font-size, 1.25rem); + line-height: 2rem; + /* @alternate */ + line-height: var(--mdc-typography-headline6-line-height, 2rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-headline6-font-weight, 500); + letter-spacing: 0.0125em; + /* @alternate */ + letter-spacing: var(--mdc-typography-headline6-letter-spacing, 0.0125em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-headline6-text-decoration, inherit); + text-decoration: var(--mdc-typography-headline6-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-headline6-text-transform, inherit); + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-drawer__title::before { + display: inline-block; + width: 0; + height: 36px; + content: ""; + vertical-align: 0; +} +.mdc-drawer__title::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} + +.mdc-drawer__subtitle { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-body2-font-size, 0.875rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-body2-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body2-font-weight, 400); + letter-spacing: 0.0178571429em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body2-letter-spacing, 0.0178571429em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body2-text-transform, inherit); + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: 0; +} +.mdc-drawer__subtitle::before { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: 0; +} + +.mdc-drawer__content { + height: 100%; + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} + +.mdc-drawer--dismissible { + /* @noflip */ + left: 0; + /* @noflip */ + right: initial; + display: none; + position: absolute; +} +[dir=rtl] .mdc-drawer--dismissible, .mdc-drawer--dismissible[dir=rtl] { + /* @noflip */ + left: initial; + /* @noflip */ + right: 0; +} + +.mdc-drawer--dismissible.mdc-drawer--open { + display: flex; +} + +.mdc-drawer-app-content { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 0; + position: relative; +} +[dir=rtl] .mdc-drawer-app-content, .mdc-drawer-app-content[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 0; +} + +.mdc-drawer--modal { + /* @alternate */ + box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12); + /* @noflip */ + left: 0; + /* @noflip */ + right: initial; + display: none; + position: fixed; +} +.mdc-drawer--modal + .mdc-drawer-scrim { + background-color: rgba(0, 0, 0, 0.32); +} +[dir=rtl] .mdc-drawer--modal, .mdc-drawer--modal[dir=rtl] { + /* @noflip */ + left: initial; + /* @noflip */ + right: 0; +} + +.mdc-drawer--modal.mdc-drawer--open { + display: flex; +} + +.mdc-drawer-scrim { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 5; + transition-property: opacity; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} +.mdc-drawer--open + .mdc-drawer-scrim { + display: block; +} +.mdc-drawer--animate + .mdc-drawer-scrim { + opacity: 0; +} +.mdc-drawer--opening + .mdc-drawer-scrim { + transition-duration: 250ms; + opacity: 1; +} +.mdc-drawer--closing + .mdc-drawer-scrim { + transition-duration: 200ms; + opacity: 0; +} + +.mdc-elevation--z0 { + /* @alternate */ + box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z1 { + /* @alternate */ + box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z2 { + /* @alternate */ + 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); +} + +.mdc-elevation--z3 { + /* @alternate */ + box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z4 { + /* @alternate */ + box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z5 { + /* @alternate */ + box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z6 { + /* @alternate */ + box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z7 { + /* @alternate */ + box-shadow: 0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z8 { + /* @alternate */ + box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z9 { + /* @alternate */ + box-shadow: 0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z10 { + /* @alternate */ + box-shadow: 0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z11 { + /* @alternate */ + box-shadow: 0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z12 { + /* @alternate */ + box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z13 { + /* @alternate */ + box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z14 { + /* @alternate */ + box-shadow: 0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z15 { + /* @alternate */ + box-shadow: 0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z16 { + /* @alternate */ + box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z17 { + /* @alternate */ + box-shadow: 0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z18 { + /* @alternate */ + box-shadow: 0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z19 { + /* @alternate */ + box-shadow: 0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z20 { + /* @alternate */ + box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z21 { + /* @alternate */ + box-shadow: 0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z22 { + /* @alternate */ + box-shadow: 0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z23 { + /* @alternate */ + box-shadow: 0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation--z24 { + /* @alternate */ + box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12); +} + +.mdc-elevation-transition { + transition: box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1); + will-change: box-shadow; +} + +.mdc-fab { + /* @alternate */ + position: relative; + display: inline-flex; + position: relative; + align-items: center; + justify-content: center; + box-sizing: border-box; + width: 56px; + height: 56px; + padding: 0; + border: none; + fill: currentColor; + text-decoration: none; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -moz-appearance: none; + -webkit-appearance: none; + overflow: visible; + transition: box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1), opacity 15ms linear 30ms, -webkit-transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1), opacity 15ms linear 30ms, transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1), opacity 15ms linear 30ms, transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1); +} +.mdc-fab .mdc-elevation-overlay { + width: 100%; + height: 100%; + top: 0; + /* @noflip */ + left: 0; +} +.mdc-fab::-moz-focus-inner { + padding: 0; + border: 0; +} +.mdc-fab:hover { + /* @alternate */ + box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12); +} +.mdc-fab.mdc-ripple-upgraded--background-focused, .mdc-fab:not(.mdc-ripple-upgraded):focus { + /* @alternate */ + box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12); +} +.mdc-fab:active, .mdc-fab:focus:active { + /* @alternate */ + box-shadow: 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12); +} +.mdc-fab:active, .mdc-fab:focus { + outline: none; +} +.mdc-fab:hover { + cursor: pointer; +} +.mdc-fab > svg { + width: 100%; +} + +.mdc-fab--mini { + width: 40px; + height: 40px; +} + +.mdc-fab--extended { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-button-font-size, 0.875rem); + line-height: 2.25rem; + /* @alternate */ + line-height: var(--mdc-typography-button-line-height, 2.25rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-button-font-weight, 500); + letter-spacing: 0.0892857143em; + /* @alternate */ + letter-spacing: var(--mdc-typography-button-letter-spacing, 0.0892857143em); + text-decoration: none; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-button-text-decoration, none); + text-decoration: var(--mdc-typography-button-text-decoration, none); + text-transform: uppercase; + /* @alternate */ + text-transform: var(--mdc-typography-button-text-transform, uppercase); + border-radius: 24px; + /* @noflip */ + padding-left: 20px; + /* @noflip */ + padding-right: 20px; + width: auto; + max-width: 100%; + height: 48px; + /* @alternate */ + line-height: normal; +} +.mdc-fab--extended .mdc-fab__ripple { + border-radius: 24px; +} +.mdc-fab--extended .mdc-fab__icon { + /* @noflip */ + margin-left: calc(12px - 20px); + /* @noflip */ + margin-right: 12px; +} +[dir=rtl] .mdc-fab--extended .mdc-fab__icon, .mdc-fab--extended .mdc-fab__icon[dir=rtl] { + /* @noflip */ + margin-left: 12px; + /* @noflip */ + margin-right: calc(12px - 20px); +} + +.mdc-fab--extended .mdc-fab__label + .mdc-fab__icon { + /* @noflip */ + margin-left: 12px; + /* @noflip */ + margin-right: calc(12px - 20px); +} +[dir=rtl] .mdc-fab--extended .mdc-fab__label + .mdc-fab__icon, .mdc-fab--extended .mdc-fab__label + .mdc-fab__icon[dir=rtl] { + /* @noflip */ + margin-left: calc(12px - 20px); + /* @noflip */ + margin-right: 12px; +} + +.mdc-fab--touch { + margin-top: 4px; + margin-bottom: 4px; + margin-right: 4px; + margin-left: 4px; +} +.mdc-fab--touch .mdc-fab__touch { + position: absolute; + top: 50%; + height: 48px; + /* @noflip */ + left: 50%; + width: 48px; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.mdc-fab::before { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 1px solid transparent; + border-radius: inherit; + content: ""; + pointer-events: none; +} + +.mdc-fab__label { + justify-content: flex-start; + text-overflow: ellipsis; + white-space: nowrap; + overflow-x: hidden; + overflow-y: visible; +} + +.mdc-fab__icon { + transition: -webkit-transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1); + transition: transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1); + transition: transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1); + fill: currentColor; + will-change: transform; +} + +.mdc-fab .mdc-fab__icon { + display: inline-flex; + align-items: center; + justify-content: center; +} + +.mdc-fab--exited { + -webkit-transform: scale(0); + transform: scale(0); + opacity: 0; + transition: opacity 15ms linear 150ms, -webkit-transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1); + transition: opacity 15ms linear 150ms, transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1); + transition: opacity 15ms linear 150ms, transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1); +} +.mdc-fab--exited .mdc-fab__icon { + -webkit-transform: scale(0); + transform: scale(0); + transition: -webkit-transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1); + transition: transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1); + transition: transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1); +} + +.mdc-fab { + background-color: #018786; + /* @alternate */ + background-color: var(--mdc-theme-secondary, #018786); + /* @alternate */ + box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12); +} +.mdc-fab .mdc-fab__icon { + width: 24px; + height: 24px; + font-size: 24px; +} +.mdc-fab, .mdc-fab:not(:disabled) .mdc-fab__icon, .mdc-fab:not(:disabled) .mdc-fab__label, .mdc-fab:disabled .mdc-fab__icon, .mdc-fab:disabled .mdc-fab__label { + color: #fff; + /* @alternate */ + color: var(--mdc-theme-on-secondary, #fff); +} +.mdc-fab:not(.mdc-fab--extended) { + border-radius: 50%; +} +.mdc-fab:not(.mdc-fab--extended) .mdc-fab__ripple { + border-radius: 50%; +} + +.mdc-fab { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-fab .mdc-fab__ripple::before, +.mdc-fab .mdc-fab__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-fab .mdc-fab__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-fab .mdc-fab__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-fab.mdc-ripple-upgraded .mdc-fab__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-fab.mdc-ripple-upgraded .mdc-fab__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-fab.mdc-ripple-upgraded--unbounded .mdc-fab__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-fab.mdc-ripple-upgraded--foreground-activation .mdc-fab__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-fab.mdc-ripple-upgraded--foreground-deactivation .mdc-fab__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-fab .mdc-fab__ripple::before, +.mdc-fab .mdc-fab__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +.mdc-fab.mdc-ripple-upgraded .mdc-fab__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-fab .mdc-fab__ripple::before, .mdc-fab .mdc-fab__ripple::after { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-on-secondary, #fff)); +} +.mdc-fab:hover .mdc-fab__ripple::before, .mdc-fab.mdc-ripple-surface--hover .mdc-fab__ripple::before { + opacity: 0.08; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.08); +} +.mdc-fab.mdc-ripple-upgraded--background-focused .mdc-fab__ripple::before, .mdc-fab:not(.mdc-ripple-upgraded):focus .mdc-fab__ripple::before { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.24); +} +.mdc-fab:not(.mdc-ripple-upgraded) .mdc-fab__ripple::after { + transition: opacity 150ms linear; +} +.mdc-fab:not(.mdc-ripple-upgraded):active .mdc-fab__ripple::after { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.24); +} +.mdc-fab.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.24); +} +.mdc-fab .mdc-fab__ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + overflow: hidden; +} +.mdc-fab { + z-index: 0; +} +.mdc-fab .mdc-fab__ripple::before, +.mdc-fab .mdc-fab__ripple::after { + z-index: -1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, -1); +} + +.mdc-form-field { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-body2-font-size, 0.875rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-body2-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body2-font-weight, 400); + letter-spacing: 0.0178571429em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body2-letter-spacing, 0.0178571429em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body2-text-transform, inherit); + color: rgba(0, 0, 0, 0.87); + /* @alternate */ + color: var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87)); + display: inline-flex; + align-items: center; + vertical-align: middle; +} +.mdc-form-field > label { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: auto; + /* @noflip */ + padding-left: 4px; + /* @noflip */ + padding-right: 0; + order: 0; +} +[dir=rtl] .mdc-form-field > label, .mdc-form-field > label[dir=rtl] { + /* @noflip */ + margin-left: auto; + /* @noflip */ + margin-right: 0; +} + +[dir=rtl] .mdc-form-field > label, .mdc-form-field > label[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 4px; +} + +.mdc-form-field--nowrap > label { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} + +.mdc-form-field--align-end > label { + /* @noflip */ + margin-left: auto; + /* @noflip */ + margin-right: 0; + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 4px; + order: -1; +} +[dir=rtl] .mdc-form-field--align-end > label, .mdc-form-field--align-end > label[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: auto; +} + +[dir=rtl] .mdc-form-field--align-end > label, .mdc-form-field--align-end > label[dir=rtl] { + /* @noflip */ + padding-left: 4px; + /* @noflip */ + padding-right: 0; +} + +.mdc-form-field--space-between { + justify-content: space-between; +} +.mdc-form-field--space-between > label { + margin: 0; +} +[dir=rtl] .mdc-form-field--space-between > label, .mdc-form-field--space-between > label[dir=rtl] { + margin: 0; +} + +.mdc-icon-button { + display: inline-block; + position: relative; + box-sizing: border-box; + border: none; + outline: none; + background-color: transparent; + fill: currentColor; + color: inherit; + font-size: 24px; + text-decoration: none; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + width: 48px; + height: 48px; + padding: 12px; +} +.mdc-icon-button svg, +.mdc-icon-button img { + width: 24px; + height: 24px; +} +.mdc-icon-button:disabled { + color: rgba(0, 0, 0, 0.38); + /* @alternate */ + color: var(--mdc-theme-text-disabled-on-light, rgba(0, 0, 0, 0.38)); +} +.mdc-icon-button:disabled { + cursor: default; + pointer-events: none; +} +.mdc-icon-button .mdc-icon-button__touch { + position: absolute; + top: 50%; + height: 48px; + /* @noflip */ + left: 50%; + width: 48px; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.mdc-icon-button__icon { + display: inline-block; +} +.mdc-icon-button__icon.mdc-icon-button__icon--on { + display: none; +} + +.mdc-icon-button--on .mdc-icon-button__icon { + display: none; +} +.mdc-icon-button--on .mdc-icon-button__icon.mdc-icon-button__icon--on { + display: inline-block; +} + +.mdc-icon-button--touch { + margin-top: 0px; + margin-bottom: 0px; +} + +.mdc-icon-button { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-icon-button .mdc-icon-button__ripple::before, +.mdc-icon-button .mdc-icon-button__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-icon-button .mdc-icon-button__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-icon-button .mdc-icon-button__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-icon-button.mdc-ripple-upgraded--unbounded .mdc-icon-button__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-icon-button.mdc-ripple-upgraded--foreground-activation .mdc-icon-button__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-icon-button.mdc-ripple-upgraded--foreground-deactivation .mdc-icon-button__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-icon-button .mdc-icon-button__ripple::before, +.mdc-icon-button .mdc-icon-button__ripple::after { + top: calc(50% - 50%); + /* @noflip */ + left: calc(50% - 50%); + width: 100%; + height: 100%; +} +.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple::before, +.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple::after { + top: var(--mdc-ripple-top, calc(50% - 50%)); + /* @noflip */ + left: var(--mdc-ripple-left, calc(50% - 50%)); + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-icon-button .mdc-icon-button__ripple::before, .mdc-icon-button .mdc-icon-button__ripple::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, #000); +} +.mdc-icon-button:hover .mdc-icon-button__ripple::before, .mdc-icon-button.mdc-ripple-surface--hover .mdc-icon-button__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-icon-button.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple::before, .mdc-icon-button:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-icon-button:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple::after { + transition: opacity 150ms linear; +} +.mdc-icon-button:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-icon-button.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-icon-button .mdc-icon-button__ripple { + pointer-events: none; + z-index: 1; +} + +.mdc-image-list { + display: flex; + flex-wrap: wrap; + margin: 0 auto; + padding: 0; +} + +.mdc-image-list__item, +.mdc-image-list__image-aspect-container { + position: relative; + box-sizing: border-box; +} + +.mdc-image-list__item { + list-style-type: none; +} + +.mdc-image-list__image { + width: 100%; +} + +.mdc-image-list__image-aspect-container .mdc-image-list__image { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + height: 100%; + background-repeat: no-repeat; + background-position: center; + background-size: cover; +} + +.mdc-image-list__image-aspect-container { + padding-bottom: calc(100% / 1); +} + +.mdc-image-list__image { + border-radius: 0; +} + +.mdc-image-list--with-text-protection .mdc-image-list__supporting { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.mdc-image-list__supporting { + color: rgba(0, 0, 0, 0.87); + /* @alternate */ + color: var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87)); + display: flex; + align-items: center; + justify-content: space-between; + box-sizing: border-box; + padding: 8px 0; + line-height: 24px; +} + +.mdc-image-list__label { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle1-font-size, 1rem); + line-height: 1.75rem; + /* @alternate */ + line-height: var(--mdc-typography-subtitle1-line-height, 1.75rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle1-font-weight, 400); + letter-spacing: 0.009375em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle1-letter-spacing, 0.009375em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle1-text-transform, inherit); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.mdc-image-list--with-text-protection .mdc-image-list__supporting { + position: absolute; + bottom: 0; + width: 100%; + height: 48px; + padding: 0 16px; + background: rgba(0, 0, 0, 0.6); + color: #fff; +} + +.mdc-image-list--masonry { + display: block; +} +.mdc-image-list--masonry .mdc-image-list__item { + -webkit-column-break-inside: avoid; + break-inside: avoid-column; +} +.mdc-image-list--masonry .mdc-image-list__image { + display: block; + height: auto; +} + +:root { + --mdc-layout-grid-margin-desktop: 24px; + --mdc-layout-grid-gutter-desktop: 24px; + --mdc-layout-grid-column-width-desktop: 72px; + --mdc-layout-grid-margin-tablet: 16px; + --mdc-layout-grid-gutter-tablet: 16px; + --mdc-layout-grid-column-width-tablet: 72px; + --mdc-layout-grid-margin-phone: 16px; + --mdc-layout-grid-gutter-phone: 16px; + --mdc-layout-grid-column-width-phone: 72px; +} + +@media (min-width: 840px) { + .mdc-layout-grid { + box-sizing: border-box; + margin: 0 auto; + padding: 24px; + padding: var(--mdc-layout-grid-margin-desktop, 24px); + } +} +@media (min-width: 600px) and (max-width: 839px) { + .mdc-layout-grid { + box-sizing: border-box; + margin: 0 auto; + padding: 16px; + padding: var(--mdc-layout-grid-margin-tablet, 16px); + } +} +@media (max-width: 599px) { + .mdc-layout-grid { + box-sizing: border-box; + margin: 0 auto; + padding: 16px; + padding: var(--mdc-layout-grid-margin-phone, 16px); + } +} + +@media (min-width: 840px) { + .mdc-layout-grid__inner { + display: flex; + flex-flow: row wrap; + align-items: stretch; + margin: -12px; + margin: calc(var(--mdc-layout-grid-gutter-desktop, 24px) / 2 * -1); + } + @supports (display: grid) { + .mdc-layout-grid__inner { + display: grid; + margin: 0; + grid-gap: 24px; + grid-gap: var(--mdc-layout-grid-gutter-desktop, 24px); + grid-template-columns: repeat(12, minmax(0, 1fr)); + } + } +} +@media (min-width: 600px) and (max-width: 839px) { + .mdc-layout-grid__inner { + display: flex; + flex-flow: row wrap; + align-items: stretch; + margin: -8px; + margin: calc(var(--mdc-layout-grid-gutter-tablet, 16px) / 2 * -1); + } + @supports (display: grid) { + .mdc-layout-grid__inner { + display: grid; + margin: 0; + grid-gap: 16px; + grid-gap: var(--mdc-layout-grid-gutter-tablet, 16px); + grid-template-columns: repeat(8, minmax(0, 1fr)); + } + } +} +@media (max-width: 599px) { + .mdc-layout-grid__inner { + display: flex; + flex-flow: row wrap; + align-items: stretch; + margin: -8px; + margin: calc(var(--mdc-layout-grid-gutter-phone, 16px) / 2 * -1); + } + @supports (display: grid) { + .mdc-layout-grid__inner { + display: grid; + margin: 0; + grid-gap: 16px; + grid-gap: var(--mdc-layout-grid-gutter-phone, 16px); + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + } +} + +@media (min-width: 840px) { + .mdc-layout-grid__cell { + width: calc(33.3333333333% - 24px); + width: calc(33.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px)); + box-sizing: border-box; + margin: 12px; + margin: calc(var(--mdc-layout-grid-gutter-desktop, 24px) / 2); + } + @supports (display: grid) { + .mdc-layout-grid__cell { + width: auto; + grid-column-end: span 4; + } + } + @supports (display: grid) { + .mdc-layout-grid__cell { + margin: 0; + } + } + .mdc-layout-grid__cell--span-1, +.mdc-layout-grid__cell--span-1-desktop { + width: calc(8.3333333333% - 24px); + width: calc(8.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-1, +.mdc-layout-grid__cell--span-1-desktop { + width: auto; + grid-column-end: span 1; + } + } + + .mdc-layout-grid__cell--span-2, +.mdc-layout-grid__cell--span-2-desktop { + width: calc(16.6666666667% - 24px); + width: calc(16.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-2, +.mdc-layout-grid__cell--span-2-desktop { + width: auto; + grid-column-end: span 2; + } + } + + .mdc-layout-grid__cell--span-3, +.mdc-layout-grid__cell--span-3-desktop { + width: calc(25% - 24px); + width: calc(25% - var(--mdc-layout-grid-gutter-desktop, 24px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-3, +.mdc-layout-grid__cell--span-3-desktop { + width: auto; + grid-column-end: span 3; + } + } + + .mdc-layout-grid__cell--span-4, +.mdc-layout-grid__cell--span-4-desktop { + width: calc(33.3333333333% - 24px); + width: calc(33.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-4, +.mdc-layout-grid__cell--span-4-desktop { + width: auto; + grid-column-end: span 4; + } + } + + .mdc-layout-grid__cell--span-5, +.mdc-layout-grid__cell--span-5-desktop { + width: calc(41.6666666667% - 24px); + width: calc(41.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-5, +.mdc-layout-grid__cell--span-5-desktop { + width: auto; + grid-column-end: span 5; + } + } + + .mdc-layout-grid__cell--span-6, +.mdc-layout-grid__cell--span-6-desktop { + width: calc(50% - 24px); + width: calc(50% - var(--mdc-layout-grid-gutter-desktop, 24px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-6, +.mdc-layout-grid__cell--span-6-desktop { + width: auto; + grid-column-end: span 6; + } + } + + .mdc-layout-grid__cell--span-7, +.mdc-layout-grid__cell--span-7-desktop { + width: calc(58.3333333333% - 24px); + width: calc(58.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-7, +.mdc-layout-grid__cell--span-7-desktop { + width: auto; + grid-column-end: span 7; + } + } + + .mdc-layout-grid__cell--span-8, +.mdc-layout-grid__cell--span-8-desktop { + width: calc(66.6666666667% - 24px); + width: calc(66.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-8, +.mdc-layout-grid__cell--span-8-desktop { + width: auto; + grid-column-end: span 8; + } + } + + .mdc-layout-grid__cell--span-9, +.mdc-layout-grid__cell--span-9-desktop { + width: calc(75% - 24px); + width: calc(75% - var(--mdc-layout-grid-gutter-desktop, 24px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-9, +.mdc-layout-grid__cell--span-9-desktop { + width: auto; + grid-column-end: span 9; + } + } + + .mdc-layout-grid__cell--span-10, +.mdc-layout-grid__cell--span-10-desktop { + width: calc(83.3333333333% - 24px); + width: calc(83.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-10, +.mdc-layout-grid__cell--span-10-desktop { + width: auto; + grid-column-end: span 10; + } + } + + .mdc-layout-grid__cell--span-11, +.mdc-layout-grid__cell--span-11-desktop { + width: calc(91.6666666667% - 24px); + width: calc(91.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-11, +.mdc-layout-grid__cell--span-11-desktop { + width: auto; + grid-column-end: span 11; + } + } + + .mdc-layout-grid__cell--span-12, +.mdc-layout-grid__cell--span-12-desktop { + width: calc(100% - 24px); + width: calc(100% - var(--mdc-layout-grid-gutter-desktop, 24px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-12, +.mdc-layout-grid__cell--span-12-desktop { + width: auto; + grid-column-end: span 12; + } + } +} +@media (min-width: 600px) and (max-width: 839px) { + .mdc-layout-grid__cell { + width: calc(50% - 16px); + width: calc(50% - var(--mdc-layout-grid-gutter-tablet, 16px)); + box-sizing: border-box; + margin: 8px; + margin: calc(var(--mdc-layout-grid-gutter-tablet, 16px) / 2); + } + @supports (display: grid) { + .mdc-layout-grid__cell { + width: auto; + grid-column-end: span 4; + } + } + @supports (display: grid) { + .mdc-layout-grid__cell { + margin: 0; + } + } + .mdc-layout-grid__cell--span-1, +.mdc-layout-grid__cell--span-1-tablet { + width: calc(12.5% - 16px); + width: calc(12.5% - var(--mdc-layout-grid-gutter-tablet, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-1, +.mdc-layout-grid__cell--span-1-tablet { + width: auto; + grid-column-end: span 1; + } + } + + .mdc-layout-grid__cell--span-2, +.mdc-layout-grid__cell--span-2-tablet { + width: calc(25% - 16px); + width: calc(25% - var(--mdc-layout-grid-gutter-tablet, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-2, +.mdc-layout-grid__cell--span-2-tablet { + width: auto; + grid-column-end: span 2; + } + } + + .mdc-layout-grid__cell--span-3, +.mdc-layout-grid__cell--span-3-tablet { + width: calc(37.5% - 16px); + width: calc(37.5% - var(--mdc-layout-grid-gutter-tablet, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-3, +.mdc-layout-grid__cell--span-3-tablet { + width: auto; + grid-column-end: span 3; + } + } + + .mdc-layout-grid__cell--span-4, +.mdc-layout-grid__cell--span-4-tablet { + width: calc(50% - 16px); + width: calc(50% - var(--mdc-layout-grid-gutter-tablet, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-4, +.mdc-layout-grid__cell--span-4-tablet { + width: auto; + grid-column-end: span 4; + } + } + + .mdc-layout-grid__cell--span-5, +.mdc-layout-grid__cell--span-5-tablet { + width: calc(62.5% - 16px); + width: calc(62.5% - var(--mdc-layout-grid-gutter-tablet, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-5, +.mdc-layout-grid__cell--span-5-tablet { + width: auto; + grid-column-end: span 5; + } + } + + .mdc-layout-grid__cell--span-6, +.mdc-layout-grid__cell--span-6-tablet { + width: calc(75% - 16px); + width: calc(75% - var(--mdc-layout-grid-gutter-tablet, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-6, +.mdc-layout-grid__cell--span-6-tablet { + width: auto; + grid-column-end: span 6; + } + } + + .mdc-layout-grid__cell--span-7, +.mdc-layout-grid__cell--span-7-tablet { + width: calc(87.5% - 16px); + width: calc(87.5% - var(--mdc-layout-grid-gutter-tablet, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-7, +.mdc-layout-grid__cell--span-7-tablet { + width: auto; + grid-column-end: span 7; + } + } + + .mdc-layout-grid__cell--span-8, +.mdc-layout-grid__cell--span-8-tablet { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-8, +.mdc-layout-grid__cell--span-8-tablet { + width: auto; + grid-column-end: span 8; + } + } + + .mdc-layout-grid__cell--span-9, +.mdc-layout-grid__cell--span-9-tablet { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-9, +.mdc-layout-grid__cell--span-9-tablet { + width: auto; + grid-column-end: span 8; + } + } + + .mdc-layout-grid__cell--span-10, +.mdc-layout-grid__cell--span-10-tablet { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-10, +.mdc-layout-grid__cell--span-10-tablet { + width: auto; + grid-column-end: span 8; + } + } + + .mdc-layout-grid__cell--span-11, +.mdc-layout-grid__cell--span-11-tablet { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-11, +.mdc-layout-grid__cell--span-11-tablet { + width: auto; + grid-column-end: span 8; + } + } + + .mdc-layout-grid__cell--span-12, +.mdc-layout-grid__cell--span-12-tablet { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-12, +.mdc-layout-grid__cell--span-12-tablet { + width: auto; + grid-column-end: span 8; + } + } +} +@media (max-width: 599px) { + .mdc-layout-grid__cell { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); + box-sizing: border-box; + margin: 8px; + margin: calc(var(--mdc-layout-grid-gutter-phone, 16px) / 2); + } + @supports (display: grid) { + .mdc-layout-grid__cell { + width: auto; + grid-column-end: span 4; + } + } + @supports (display: grid) { + .mdc-layout-grid__cell { + margin: 0; + } + } + .mdc-layout-grid__cell--span-1, +.mdc-layout-grid__cell--span-1-phone { + width: calc(25% - 16px); + width: calc(25% - var(--mdc-layout-grid-gutter-phone, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-1, +.mdc-layout-grid__cell--span-1-phone { + width: auto; + grid-column-end: span 1; + } + } + + .mdc-layout-grid__cell--span-2, +.mdc-layout-grid__cell--span-2-phone { + width: calc(50% - 16px); + width: calc(50% - var(--mdc-layout-grid-gutter-phone, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-2, +.mdc-layout-grid__cell--span-2-phone { + width: auto; + grid-column-end: span 2; + } + } + + .mdc-layout-grid__cell--span-3, +.mdc-layout-grid__cell--span-3-phone { + width: calc(75% - 16px); + width: calc(75% - var(--mdc-layout-grid-gutter-phone, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-3, +.mdc-layout-grid__cell--span-3-phone { + width: auto; + grid-column-end: span 3; + } + } + + .mdc-layout-grid__cell--span-4, +.mdc-layout-grid__cell--span-4-phone { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-4, +.mdc-layout-grid__cell--span-4-phone { + width: auto; + grid-column-end: span 4; + } + } + + .mdc-layout-grid__cell--span-5, +.mdc-layout-grid__cell--span-5-phone { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-5, +.mdc-layout-grid__cell--span-5-phone { + width: auto; + grid-column-end: span 4; + } + } + + .mdc-layout-grid__cell--span-6, +.mdc-layout-grid__cell--span-6-phone { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-6, +.mdc-layout-grid__cell--span-6-phone { + width: auto; + grid-column-end: span 4; + } + } + + .mdc-layout-grid__cell--span-7, +.mdc-layout-grid__cell--span-7-phone { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-7, +.mdc-layout-grid__cell--span-7-phone { + width: auto; + grid-column-end: span 4; + } + } + + .mdc-layout-grid__cell--span-8, +.mdc-layout-grid__cell--span-8-phone { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-8, +.mdc-layout-grid__cell--span-8-phone { + width: auto; + grid-column-end: span 4; + } + } + + .mdc-layout-grid__cell--span-9, +.mdc-layout-grid__cell--span-9-phone { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-9, +.mdc-layout-grid__cell--span-9-phone { + width: auto; + grid-column-end: span 4; + } + } + + .mdc-layout-grid__cell--span-10, +.mdc-layout-grid__cell--span-10-phone { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-10, +.mdc-layout-grid__cell--span-10-phone { + width: auto; + grid-column-end: span 4; + } + } + + .mdc-layout-grid__cell--span-11, +.mdc-layout-grid__cell--span-11-phone { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-11, +.mdc-layout-grid__cell--span-11-phone { + width: auto; + grid-column-end: span 4; + } + } + + .mdc-layout-grid__cell--span-12, +.mdc-layout-grid__cell--span-12-phone { + width: calc(100% - 16px); + width: calc(100% - var(--mdc-layout-grid-gutter-phone, 16px)); + } + @supports (display: grid) { + .mdc-layout-grid__cell--span-12, +.mdc-layout-grid__cell--span-12-phone { + width: auto; + grid-column-end: span 4; + } + } +} +.mdc-layout-grid__cell--order-1 { + order: 1; +} +.mdc-layout-grid__cell--order-2 { + order: 2; +} +.mdc-layout-grid__cell--order-3 { + order: 3; +} +.mdc-layout-grid__cell--order-4 { + order: 4; +} +.mdc-layout-grid__cell--order-5 { + order: 5; +} +.mdc-layout-grid__cell--order-6 { + order: 6; +} +.mdc-layout-grid__cell--order-7 { + order: 7; +} +.mdc-layout-grid__cell--order-8 { + order: 8; +} +.mdc-layout-grid__cell--order-9 { + order: 9; +} +.mdc-layout-grid__cell--order-10 { + order: 10; +} +.mdc-layout-grid__cell--order-11 { + order: 11; +} +.mdc-layout-grid__cell--order-12 { + order: 12; +} +.mdc-layout-grid__cell--align-top { + align-self: flex-start; +} +@supports (display: grid) { + .mdc-layout-grid__cell--align-top { + align-self: start; + } +} +.mdc-layout-grid__cell--align-middle { + align-self: center; +} +.mdc-layout-grid__cell--align-bottom { + align-self: flex-end; +} +@supports (display: grid) { + .mdc-layout-grid__cell--align-bottom { + align-self: end; + } +} + +@media (min-width: 840px) { + .mdc-layout-grid--fixed-column-width { + width: 1176px; + width: calc( var(--mdc-layout-grid-column-width-desktop, 72px) * 12 + var(--mdc-layout-grid-gutter-desktop, 24px) * 11 + var(--mdc-layout-grid-margin-desktop, 24px) * 2 ); + } +} +@media (min-width: 600px) and (max-width: 839px) { + .mdc-layout-grid--fixed-column-width { + width: 720px; + width: calc( var(--mdc-layout-grid-column-width-tablet, 72px) * 8 + var(--mdc-layout-grid-gutter-tablet, 16px) * 7 + var(--mdc-layout-grid-margin-tablet, 16px) * 2 ); + } +} +@media (max-width: 599px) { + .mdc-layout-grid--fixed-column-width { + width: 368px; + width: calc( var(--mdc-layout-grid-column-width-phone, 72px) * 4 + var(--mdc-layout-grid-gutter-phone, 16px) * 3 + var(--mdc-layout-grid-margin-phone, 16px) * 2 ); + } +} + +.mdc-layout-grid--align-left { + margin-right: auto; + margin-left: 0; +} + +.mdc-layout-grid--align-right { + margin-right: 0; + margin-left: auto; +} + +@-webkit-keyframes mdc-linear-progress-primary-indeterminate-translate { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 20% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(0); + transform: translateX(0); + } + 59.15% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(83.67142%); + transform: translateX(83.67142%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-primary-half, 83.67142%)); + transform: translateX(var(--mdc-linear-progress-primary-half, 83.67142%)); + } + 100% { + -webkit-transform: translateX(200.611057%); + transform: translateX(200.611057%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-primary-full, 200.611057%)); + transform: translateX(var(--mdc-linear-progress-primary-full, 200.611057%)); + } +} + +@keyframes mdc-linear-progress-primary-indeterminate-translate { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 20% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(0); + transform: translateX(0); + } + 59.15% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(83.67142%); + transform: translateX(83.67142%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-primary-half, 83.67142%)); + transform: translateX(var(--mdc-linear-progress-primary-half, 83.67142%)); + } + 100% { + -webkit-transform: translateX(200.611057%); + transform: translateX(200.611057%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-primary-full, 200.611057%)); + transform: translateX(var(--mdc-linear-progress-primary-full, 200.611057%)); + } +} +@-webkit-keyframes mdc-linear-progress-primary-indeterminate-scale { + 0% { + -webkit-transform: scaleX(0.08); + transform: scaleX(0.08); + } + 36.65% { + -webkit-animation-timing-function: cubic-bezier(0.334731, 0.12482, 0.785844, 1); + animation-timing-function: cubic-bezier(0.334731, 0.12482, 0.785844, 1); + -webkit-transform: scaleX(0.08); + transform: scaleX(0.08); + } + 69.15% { + -webkit-animation-timing-function: cubic-bezier(0.06, 0.11, 0.6, 1); + animation-timing-function: cubic-bezier(0.06, 0.11, 0.6, 1); + -webkit-transform: scaleX(0.661479); + transform: scaleX(0.661479); + } + 100% { + -webkit-transform: scaleX(0.08); + transform: scaleX(0.08); + } +} +@keyframes mdc-linear-progress-primary-indeterminate-scale { + 0% { + -webkit-transform: scaleX(0.08); + transform: scaleX(0.08); + } + 36.65% { + -webkit-animation-timing-function: cubic-bezier(0.334731, 0.12482, 0.785844, 1); + animation-timing-function: cubic-bezier(0.334731, 0.12482, 0.785844, 1); + -webkit-transform: scaleX(0.08); + transform: scaleX(0.08); + } + 69.15% { + -webkit-animation-timing-function: cubic-bezier(0.06, 0.11, 0.6, 1); + animation-timing-function: cubic-bezier(0.06, 0.11, 0.6, 1); + -webkit-transform: scaleX(0.661479); + transform: scaleX(0.661479); + } + 100% { + -webkit-transform: scaleX(0.08); + transform: scaleX(0.08); + } +} +@-webkit-keyframes mdc-linear-progress-secondary-indeterminate-translate { + 0% { + -webkit-animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685); + animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685); + -webkit-transform: translateX(0); + transform: translateX(0); + } + 25% { + -webkit-animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712); + animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712); + -webkit-transform: translateX(37.651913%); + transform: translateX(37.651913%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-secondary-quarter, 37.651913%)); + transform: translateX(var(--mdc-linear-progress-secondary-quarter, 37.651913%)); + } + 48.35% { + -webkit-animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026); + animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026); + -webkit-transform: translateX(84.386165%); + transform: translateX(84.386165%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-secondary-half, 84.386165%)); + transform: translateX(var(--mdc-linear-progress-secondary-half, 84.386165%)); + } + 100% { + -webkit-transform: translateX(160.277782%); + transform: translateX(160.277782%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-secondary-full, 160.277782%)); + transform: translateX(var(--mdc-linear-progress-secondary-full, 160.277782%)); + } +} +@keyframes mdc-linear-progress-secondary-indeterminate-translate { + 0% { + -webkit-animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685); + animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685); + -webkit-transform: translateX(0); + transform: translateX(0); + } + 25% { + -webkit-animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712); + animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712); + -webkit-transform: translateX(37.651913%); + transform: translateX(37.651913%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-secondary-quarter, 37.651913%)); + transform: translateX(var(--mdc-linear-progress-secondary-quarter, 37.651913%)); + } + 48.35% { + -webkit-animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026); + animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026); + -webkit-transform: translateX(84.386165%); + transform: translateX(84.386165%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-secondary-half, 84.386165%)); + transform: translateX(var(--mdc-linear-progress-secondary-half, 84.386165%)); + } + 100% { + -webkit-transform: translateX(160.277782%); + transform: translateX(160.277782%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-secondary-full, 160.277782%)); + transform: translateX(var(--mdc-linear-progress-secondary-full, 160.277782%)); + } +} +@-webkit-keyframes mdc-linear-progress-secondary-indeterminate-scale { + 0% { + -webkit-animation-timing-function: cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971); + animation-timing-function: cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971); + -webkit-transform: scaleX(0.08); + transform: scaleX(0.08); + } + 19.15% { + -webkit-animation-timing-function: cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315); + animation-timing-function: cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315); + -webkit-transform: scaleX(0.457104); + transform: scaleX(0.457104); + } + 44.15% { + -webkit-animation-timing-function: cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179); + animation-timing-function: cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179); + -webkit-transform: scaleX(0.72796); + transform: scaleX(0.72796); + } + 100% { + -webkit-transform: scaleX(0.08); + transform: scaleX(0.08); + } +} +@keyframes mdc-linear-progress-secondary-indeterminate-scale { + 0% { + -webkit-animation-timing-function: cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971); + animation-timing-function: cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971); + -webkit-transform: scaleX(0.08); + transform: scaleX(0.08); + } + 19.15% { + -webkit-animation-timing-function: cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315); + animation-timing-function: cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315); + -webkit-transform: scaleX(0.457104); + transform: scaleX(0.457104); + } + 44.15% { + -webkit-animation-timing-function: cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179); + animation-timing-function: cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179); + -webkit-transform: scaleX(0.72796); + transform: scaleX(0.72796); + } + 100% { + -webkit-transform: scaleX(0.08); + transform: scaleX(0.08); + } +} +@-webkit-keyframes mdc-linear-progress-buffering { + from { + -webkit-transform: rotate(180deg) translateX(-10px); + transform: rotate(180deg) translateX(-10px); + } +} +@keyframes mdc-linear-progress-buffering { + from { + -webkit-transform: rotate(180deg) translateX(-10px); + transform: rotate(180deg) translateX(-10px); + } +} +@-webkit-keyframes mdc-linear-progress-primary-indeterminate-translate-reverse { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 20% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(0); + transform: translateX(0); + } + 59.15% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(-83.67142%); + transform: translateX(-83.67142%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-primary-half-neg, -83.67142%)); + transform: translateX(var(--mdc-linear-progress-primary-half-neg, -83.67142%)); + } + 100% { + -webkit-transform: translateX(-200.611057%); + transform: translateX(-200.611057%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-primary-full-neg, -200.611057%)); + transform: translateX(var(--mdc-linear-progress-primary-full-neg, -200.611057%)); + } +} +@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 20% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(0); + transform: translateX(0); + } + 59.15% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(-83.67142%); + transform: translateX(-83.67142%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-primary-half-neg, -83.67142%)); + transform: translateX(var(--mdc-linear-progress-primary-half-neg, -83.67142%)); + } + 100% { + -webkit-transform: translateX(-200.611057%); + transform: translateX(-200.611057%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-primary-full-neg, -200.611057%)); + transform: translateX(var(--mdc-linear-progress-primary-full-neg, -200.611057%)); + } +} +@-webkit-keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse { + 0% { + -webkit-animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685); + animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685); + -webkit-transform: translateX(0); + transform: translateX(0); + } + 25% { + -webkit-animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712); + animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712); + -webkit-transform: translateX(-37.651913%); + transform: translateX(-37.651913%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-secondary-quarter-neg, -37.651913%)); + transform: translateX(var(--mdc-linear-progress-secondary-quarter-neg, -37.651913%)); + } + 48.35% { + -webkit-animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026); + animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026); + -webkit-transform: translateX(-84.386165%); + transform: translateX(-84.386165%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-secondary-half-neg, -84.386165%)); + transform: translateX(var(--mdc-linear-progress-secondary-half-neg, -84.386165%)); + } + 100% { + -webkit-transform: translateX(-160.277782%); + transform: translateX(-160.277782%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-secondary-full-neg, -160.277782%)); + transform: translateX(var(--mdc-linear-progress-secondary-full-neg, -160.277782%)); + } +} +@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse { + 0% { + -webkit-animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685); + animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685); + -webkit-transform: translateX(0); + transform: translateX(0); + } + 25% { + -webkit-animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712); + animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712); + -webkit-transform: translateX(-37.651913%); + transform: translateX(-37.651913%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-secondary-quarter-neg, -37.651913%)); + transform: translateX(var(--mdc-linear-progress-secondary-quarter-neg, -37.651913%)); + } + 48.35% { + -webkit-animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026); + animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026); + -webkit-transform: translateX(-84.386165%); + transform: translateX(-84.386165%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-secondary-half-neg, -84.386165%)); + transform: translateX(var(--mdc-linear-progress-secondary-half-neg, -84.386165%)); + } + 100% { + -webkit-transform: translateX(-160.277782%); + transform: translateX(-160.277782%); + /* @alternate */ + -webkit-transform: translateX(var(--mdc-linear-progress-secondary-full-neg, -160.277782%)); + transform: translateX(var(--mdc-linear-progress-secondary-full-neg, -160.277782%)); + } +} +@-webkit-keyframes mdc-linear-progress-buffering-reverse { + from { + -webkit-transform: translateX(-10px); + transform: translateX(-10px); + } +} +@keyframes mdc-linear-progress-buffering-reverse { + from { + -webkit-transform: translateX(-10px); + transform: translateX(-10px); + } +} +.mdc-linear-progress { + position: relative; + width: 100%; + height: 4px; + -webkit-transform: translateZ(0); + transform: translateZ(0); + outline: 1px solid transparent; + overflow: hidden; + transition: opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1); +} +.mdc-linear-progress__bar { + position: absolute; + width: 100%; + height: 100%; + -webkit-animation: none; + animation: none; + -webkit-transform-origin: top left; + transform-origin: top left; + transition: -webkit-transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1); + transition: transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1); + transition: transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1); +} +.mdc-linear-progress__bar-inner { + display: inline-block; + position: absolute; + width: 100%; + -webkit-animation: none; + animation: none; + border-top: 4px solid; +} +.mdc-linear-progress__buffer { + display: flex; + position: absolute; + width: 100%; + height: 100%; +} +.mdc-linear-progress__buffer-dots { + background-repeat: repeat-x; + background-size: 10px 4px; + flex: auto; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-animation: mdc-linear-progress-buffering 250ms infinite linear; + animation: mdc-linear-progress-buffering 250ms infinite linear; +} +.mdc-linear-progress__buffer-bar { + flex: 0 1 100%; + transition: flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1); +} +.mdc-linear-progress__primary-bar { + -webkit-transform: scaleX(0); + transform: scaleX(0); +} +.mdc-linear-progress__secondary-bar { + display: none; +} +.mdc-linear-progress--indeterminate .mdc-linear-progress__bar { + transition: none; +} +.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar { + left: -145.166611%; +} +.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar { + left: -54.888891%; + display: block; +} +.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar { + -webkit-animation: mdc-linear-progress-primary-indeterminate-translate 2s infinite linear; + animation: mdc-linear-progress-primary-indeterminate-translate 2s infinite linear; +} +.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar > .mdc-linear-progress__bar-inner { + -webkit-animation: mdc-linear-progress-primary-indeterminate-scale 2s infinite linear; + animation: mdc-linear-progress-primary-indeterminate-scale 2s infinite linear; +} +.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar { + -webkit-animation: mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear; + animation: mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear; +} +.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar > .mdc-linear-progress__bar-inner { + -webkit-animation: mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear; + animation: mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear; +} +[dir=rtl] .mdc-linear-progress:not([dir=ltr]) .mdc-linear-progress__bar, .mdc-linear-progress[dir=rtl]:not([dir=ltr]) .mdc-linear-progress__bar { + /* @noflip */ + right: 0; + /* @noflip */ + -webkit-transform-origin: center right; + /* @noflip */ + transform-origin: center right; +} +[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar, .mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar { + -webkit-animation-name: mdc-linear-progress-primary-indeterminate-translate-reverse; + animation-name: mdc-linear-progress-primary-indeterminate-translate-reverse; +} +[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar, .mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar { + -webkit-animation-name: mdc-linear-progress-secondary-indeterminate-translate-reverse; + animation-name: mdc-linear-progress-secondary-indeterminate-translate-reverse; +} +[dir=rtl] .mdc-linear-progress:not([dir=ltr]) .mdc-linear-progress__buffer-dots, .mdc-linear-progress[dir=rtl]:not([dir=ltr]) .mdc-linear-progress__buffer-dots { + -webkit-animation: mdc-linear-progress-buffering-reverse 250ms infinite linear; + animation: mdc-linear-progress-buffering-reverse 250ms infinite linear; + -webkit-transform: rotate(0); + transform: rotate(0); +} +[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar, .mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar { + /* @noflip */ + right: -145.166611%; + /* @noflip */ + left: auto; +} +[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar, .mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar { + /* @noflip */ + right: -54.888891%; + /* @noflip */ + left: auto; +} + +.mdc-linear-progress--closed { + opacity: 0; +} +.mdc-linear-progress--closed-animation-off .mdc-linear-progress__buffer-dots { + -webkit-animation: none; + animation: none; +} +.mdc-linear-progress--closed-animation-off.mdc-linear-progress--indeterminate .mdc-linear-progress__bar, +.mdc-linear-progress--closed-animation-off.mdc-linear-progress--indeterminate .mdc-linear-progress__bar .mdc-linear-progress__bar-inner { + -webkit-animation: none; + animation: none; +} + +.mdc-linear-progress__bar-inner { + border-color: #6200ee; + /* @alternate */ + border-color: var(--mdc-theme-primary, #6200ee); +} + +.mdc-linear-progress__buffer-dots { + background-image: url("data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='none slice'%3E%3Ccircle cx='1' cy='1' r='1' fill='%23e6e6e6'/%3E%3C/svg%3E"); +} + +.mdc-linear-progress__buffer-bar { + background-color: #e6e6e6; +} + +.mdc-deprecated-list { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle1-font-size, 1rem); + line-height: 1.75rem; + /* @alternate */ + line-height: var(--mdc-typography-subtitle1-line-height, 1.75rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle1-font-weight, 400); + letter-spacing: 0.009375em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle1-letter-spacing, 0.009375em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle1-text-transform, inherit); + /* @alternate */ + line-height: 1.5rem; + margin: 0; + padding: 8px 0; + list-style-type: none; + color: rgba(0, 0, 0, 0.87); + /* @alternate */ + color: var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87)); +} +.mdc-deprecated-list:focus { + outline: none; +} + +.mdc-deprecated-list-item { + height: 48px; +} + +.mdc-deprecated-list-item__secondary-text { + color: rgba(0, 0, 0, 0.54); + /* @alternate */ + color: var(--mdc-theme-text-secondary-on-background, rgba(0, 0, 0, 0.54)); +} + +.mdc-deprecated-list-item__graphic { + background-color: transparent; +} + +.mdc-deprecated-list-item__graphic { + color: rgba(0, 0, 0, 0.38); + /* @alternate */ + color: var(--mdc-theme-text-icon-on-background, rgba(0, 0, 0, 0.38)); +} + +.mdc-deprecated-list-item__meta { + color: rgba(0, 0, 0, 0.38); + /* @alternate */ + color: var(--mdc-theme-text-hint-on-background, rgba(0, 0, 0, 0.38)); +} + +.mdc-deprecated-list-group__subheader { + color: rgba(0, 0, 0, 0.87); + /* @alternate */ + color: var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87)); +} + +.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__text { + opacity: 0.38; +} + +.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__text, +.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__primary-text, +.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__secondary-text { + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); +} + +.mdc-deprecated-list-item--selected, +.mdc-deprecated-list-item--activated { + color: #6200ee; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee); +} +.mdc-deprecated-list-item--selected .mdc-deprecated-list-item__graphic, +.mdc-deprecated-list-item--activated .mdc-deprecated-list-item__graphic { + color: #6200ee; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee); +} + +.mdc-deprecated-list--dense { + padding-top: 4px; + padding-bottom: 4px; + font-size: 0.812rem; +} + +.mdc-deprecated-list-item { + display: flex; + position: relative; + align-items: center; + justify-content: flex-start; + overflow: hidden; + padding: 0; + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; + height: 48px; +} +.mdc-deprecated-list-item:focus { + outline: none; +} +.mdc-deprecated-list-item:not(.mdc-deprecated-list-item--selected):focus::before, .mdc-deprecated-list-item.mdc-ripple-upgraded--background-focused::before { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 1px solid transparent; + border-radius: inherit; + content: ""; + pointer-events: none; +} +.mdc-deprecated-list-item.mdc-deprecated-list-item--selected::before { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 3px double transparent; + border-radius: inherit; + content: ""; + pointer-events: none; +} +[dir=rtl] .mdc-deprecated-list-item, .mdc-deprecated-list-item[dir=rtl] { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; +} + +.mdc-deprecated-list--icon-list .mdc-deprecated-list-item { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; + height: 56px; +} +[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-item, .mdc-deprecated-list--icon-list .mdc-deprecated-list-item[dir=rtl] { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; +} + +.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; + height: 56px; +} +[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-item, .mdc-deprecated-list--avatar-list .mdc-deprecated-list-item[dir=rtl] { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; +} + +.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; + height: 56px; +} +[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item, .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item[dir=rtl] { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; +} + +.mdc-deprecated-list--image-list .mdc-deprecated-list-item { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; + height: 72px; +} +[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-item, .mdc-deprecated-list--image-list .mdc-deprecated-list-item[dir=rtl] { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; +} + +.mdc-deprecated-list--video-list .mdc-deprecated-list-item { + /* @noflip */ + padding-left: 0px; + /* @noflip */ + padding-right: 16px; + height: 72px; +} +[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-item, .mdc-deprecated-list--video-list .mdc-deprecated-list-item[dir=rtl] { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 0px; +} + +.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; + width: 20px; + height: 20px; +} +[dir=rtl] .mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic, .mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; +} + +.mdc-deprecated-list-item__graphic { + flex-shrink: 0; + align-items: center; + justify-content: center; + fill: currentColor; + -o-object-fit: cover; + object-fit: cover; + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 32px; + width: 24px; + height: 24px; +} +[dir=rtl] .mdc-deprecated-list-item__graphic, .mdc-deprecated-list-item__graphic[dir=rtl] { + /* @noflip */ + margin-left: 32px; + /* @noflip */ + margin-right: 0; +} + +.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__graphic { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 32px; + width: 24px; + height: 24px; +} +[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-item__graphic, .mdc-deprecated-list--icon-list .mdc-deprecated-list-item__graphic[dir=rtl] { + /* @noflip */ + margin-left: 32px; + /* @noflip */ + margin-right: 0; +} + +.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__graphic { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; + width: 40px; + height: 40px; + border-radius: 50%; +} +[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__graphic, .mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__graphic[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; +} + +.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__graphic { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; + width: 40px; + height: 40px; +} +[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__graphic, .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__graphic[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; +} + +.mdc-deprecated-list--image-list .mdc-deprecated-list-item__graphic { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; + width: 56px; + height: 56px; +} +[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-item__graphic, .mdc-deprecated-list--image-list .mdc-deprecated-list-item__graphic[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; +} + +.mdc-deprecated-list--video-list .mdc-deprecated-list-item__graphic { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; + width: 100px; + height: 56px; +} +[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-item__graphic, .mdc-deprecated-list--video-list .mdc-deprecated-list-item__graphic[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; +} + +.mdc-deprecated-list .mdc-deprecated-list-item__graphic { + display: inline-flex; +} + +.mdc-deprecated-list-item__meta { + /* @noflip */ + margin-left: auto; + /* @noflip */ + margin-right: 0; +} +.mdc-deprecated-list-item__meta:not(.material-icons) { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.75rem; + /* @alternate */ + font-size: var(--mdc-typography-caption-font-size, 0.75rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-caption-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-caption-font-weight, 400); + letter-spacing: 0.0333333333em; + /* @alternate */ + letter-spacing: var(--mdc-typography-caption-letter-spacing, 0.0333333333em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-caption-text-transform, inherit); +} +.mdc-deprecated-list-item[dir=rtl] .mdc-deprecated-list-item__meta, [dir=rtl] .mdc-deprecated-list-item .mdc-deprecated-list-item__meta { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: auto; +} + +.mdc-deprecated-list-item__text { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.mdc-deprecated-list-item__text[for] { + pointer-events: none; +} + +.mdc-deprecated-list-item__primary-text { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-deprecated-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-deprecated-list-item__primary-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-deprecated-list--video-list .mdc-deprecated-list-item__primary-text, .mdc-deprecated-list--image-list .mdc-deprecated-list-item__primary-text, .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__primary-text, .mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__primary-text, .mdc-deprecated-list--icon-list .mdc-deprecated-list-item__primary-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-deprecated-list--video-list .mdc-deprecated-list-item__primary-text::before, .mdc-deprecated-list--image-list .mdc-deprecated-list-item__primary-text::before, .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__primary-text::before, .mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__primary-text::before, .mdc-deprecated-list--icon-list .mdc-deprecated-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-deprecated-list--video-list .mdc-deprecated-list-item__primary-text::after, .mdc-deprecated-list--image-list .mdc-deprecated-list-item__primary-text::after, .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__primary-text::after, .mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__primary-text::after, .mdc-deprecated-list--icon-list .mdc-deprecated-list-item__primary-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-deprecated-list--dense .mdc-deprecated-list-item__primary-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-deprecated-list--dense .mdc-deprecated-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 24px; + content: ""; + vertical-align: 0; +} +.mdc-deprecated-list--dense .mdc-deprecated-list-item__primary-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} + +.mdc-deprecated-list-item__secondary-text { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-body2-font-size, 0.875rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-body2-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body2-font-weight, 400); + letter-spacing: 0.0178571429em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body2-letter-spacing, 0.0178571429em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body2-text-transform, inherit); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-deprecated-list-item__secondary-text::before { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: 0; +} +.mdc-deprecated-list--dense .mdc-deprecated-list-item__secondary-text { + font-size: inherit; +} + +.mdc-deprecated-list--dense .mdc-deprecated-list-item { + height: 40px; +} + +.mdc-deprecated-list--two-line .mdc-deprecated-list-item__text { + align-self: flex-start; +} + +.mdc-deprecated-list--two-line .mdc-deprecated-list-item { + height: 64px; +} +.mdc-deprecated-list--two-line.mdc-deprecated-list--video-list .mdc-deprecated-list-item, .mdc-deprecated-list--two-line.mdc-deprecated-list--image-list .mdc-deprecated-list-item, .mdc-deprecated-list--two-line.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item, .mdc-deprecated-list--two-line.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item, .mdc-deprecated-list--two-line.mdc-deprecated-list--icon-list .mdc-deprecated-list-item { + height: 72px; +} +.mdc-deprecated-list--two-line.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__graphic { + align-self: flex-start; + margin-top: 16px; +} + +.mdc-deprecated-list--two-line.mdc-deprecated-list--dense .mdc-deprecated-list-item, +.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense .mdc-deprecated-list-item { + height: 60px; +} + +.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; + width: 36px; + height: 36px; +} +[dir=rtl] .mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic, .mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; +} + +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item { + cursor: pointer; +} + +a.mdc-deprecated-list-item { + color: inherit; + text-decoration: none; +} + +.mdc-deprecated-list-divider { + height: 0; + margin: 0; + border: none; + border-bottom-width: 1px; + border-bottom-style: solid; +} + +.mdc-deprecated-list-divider { + border-bottom-color: rgba(0, 0, 0, 0.12); +} + +.mdc-deprecated-list-divider--padded { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 32px); +} +[dir=rtl] .mdc-deprecated-list-divider--padded, .mdc-deprecated-list-divider--padded[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-deprecated-list-divider--inset { + /* @noflip */ + margin-left: 72px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 72px); +} +[dir=rtl] .mdc-deprecated-list-divider--inset, .mdc-deprecated-list-divider--inset[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 72px; +} + +.mdc-deprecated-list-divider--inset.mdc-deprecated-list-divider--padded { + /* @noflip */ + margin-left: 72px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 88px); +} +[dir=rtl] .mdc-deprecated-list-divider--inset.mdc-deprecated-list-divider--padded, .mdc-deprecated-list-divider--inset.mdc-deprecated-list-divider--padded[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 72px; +} + +.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 16px); +} +[dir=rtl] .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading, .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-deprecated-list .mdc-deprecated-list-divider--inset-trailing { + width: calc(100% - 16px); +} +.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 32px); +} +[dir=rtl] .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing, .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 16px); +} +[dir=rtl] .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding, .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 32px); +} +[dir=rtl] .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding, .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading { + /* @noflip */ + margin-left: 72px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 72px); +} +[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading, .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 72px; +} + +.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-trailing { + width: calc(100% - 16px); +} +.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing { + /* @noflip */ + margin-left: 72px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 88px); +} +[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing, .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 72px; +} + +.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 16px); +} +[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding, .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 32px); +} +[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding, .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading { + /* @noflip */ + margin-left: 72px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 72px); +} +[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading, .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 72px; +} + +.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-trailing { + width: calc(100% - 16px); +} +.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing { + /* @noflip */ + margin-left: 72px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 88px); +} +[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing, .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 72px; +} + +.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 16px); +} +[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding, .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 32px); +} +[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding, .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading { + /* @noflip */ + margin-left: 72px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 72px); +} +[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading, .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 72px; +} + +.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-trailing { + width: calc(100% - 16px); +} +.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing { + /* @noflip */ + margin-left: 72px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 88px); +} +[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing, .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 72px; +} + +.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 16px); +} +[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding, .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 32px); +} +[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding, .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading { + /* @noflip */ + margin-left: 88px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 88px); +} +[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading, .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 88px; +} + +.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-trailing { + width: calc(100% - 16px); +} +.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing { + /* @noflip */ + margin-left: 88px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 104px); +} +[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing, .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 88px; +} + +.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 16px); +} +[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding, .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 32px); +} +[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding, .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} + +.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading { + /* @noflip */ + margin-left: 116px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 116px); +} +[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading, .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 116px; +} + +.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-trailing { + width: calc(100% - 16px); +} +.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing { + /* @noflip */ + margin-left: 116px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 132px); +} +[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing, .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 116px; +} + +.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding { + /* @noflip */ + margin-left: 0px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 0px); +} +[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding, .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 0px; +} + +.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding { + /* @noflip */ + margin-left: 0px; + /* @noflip */ + margin-right: 0; + width: calc(100% - 16px); +} +[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding, .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 0px; +} + +.mdc-deprecated-list-group .mdc-deprecated-list { + padding: 0; +} + +.mdc-deprecated-list-group__subheader { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle1-font-size, 1rem); + line-height: 1.75rem; + /* @alternate */ + line-height: var(--mdc-typography-subtitle1-line-height, 1.75rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle1-font-weight, 400); + letter-spacing: 0.009375em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle1-letter-spacing, 0.009375em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle1-text-transform, inherit); + margin: calc( (3rem - 1.5rem) / 2 ) 16px; +} + +.mdc-list-item__primary-text { + color: rgba(0, 0, 0, 0.87); + /* @alternate */ + color: var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87)); +} + +.mdc-list-item__secondary-text { + color: rgba(0, 0, 0, 0.54); + /* @alternate */ + color: var(--mdc-theme-text-secondary-on-background, rgba(0, 0, 0, 0.54)); +} + +.mdc-list-item__overline-text { + color: rgba(0, 0, 0, 0.38); + /* @alternate */ + color: var(--mdc-theme-text-hint-on-background, rgba(0, 0, 0, 0.38)); +} + +.mdc-list-item--with-leading-icon .mdc-list-item__start, +.mdc-list-item--with-trailing-icon .mdc-list-item__end { + background-color: transparent; +} + +.mdc-list-item--with-leading-icon .mdc-list-item__start, +.mdc-list-item--with-trailing-icon .mdc-list-item__end { + color: rgba(0, 0, 0, 0.38); + /* @alternate */ + color: var(--mdc-theme-text-icon-on-background, rgba(0, 0, 0, 0.38)); +} + +.mdc-list-item__end { + color: rgba(0, 0, 0, 0.38); + /* @alternate */ + color: var(--mdc-theme-text-hint-on-background, rgba(0, 0, 0, 0.38)); +} + +.mdc-list-item--disabled .mdc-list-item__start, +.mdc-list-item--disabled .mdc-list-item__content, +.mdc-list-item--disabled .mdc-list-item__end { + opacity: 0.38; +} + +.mdc-list-item--disabled .mdc-list-item__primary-text { + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); +} +.mdc-list-item--disabled .mdc-list-item__secondary-text { + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); +} +.mdc-list-item--disabled .mdc-list-item__overline-text { + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); +} +.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start { + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); +} +.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end { + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); +} +.mdc-list-item--disabled.mdc-list-item--with-trailing-meta .mdc-list-item__end { + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); +} + +.mdc-list-item--selected .mdc-list-item__primary-text, +.mdc-list-item--activated .mdc-list-item__primary-text { + color: #6200ee; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee); +} +.mdc-list-item--selected.mdc-list-item--with-leading-icon .mdc-list-item__start, +.mdc-list-item--activated.mdc-list-item--with-leading-icon .mdc-list-item__start { + color: #6200ee; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee); +} + +.mdc-deprecated-list-group__subheader { + color: rgba(0, 0, 0, 0.87); + /* @alternate */ + color: var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87)); +} + +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-list-divider::after { + content: ""; + display: block; + border-bottom-width: 1px; + border-bottom-style: solid; + border-bottom-color: white; + } +} +.mdc-list { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle1-font-size, 1rem); + line-height: 1.75rem; + /* @alternate */ + line-height: var(--mdc-typography-subtitle1-line-height, 1.75rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle1-font-weight, 400); + letter-spacing: 0.009375em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle1-letter-spacing, 0.009375em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle1-text-transform, inherit); + /* @alternate */ + line-height: 1.5rem; + margin: 0; + padding: 8px 0; + list-style-type: none; +} +.mdc-list:focus { + outline: none; +} + +.mdc-list-item { + display: flex; + position: relative; + align-items: center; + justify-content: flex-start; + overflow: hidden; + padding: 0; + align-items: stretch; + cursor: pointer; +} +.mdc-list-item:focus { + outline: none; +} +.mdc-list-item.mdc-list-item--with-one-line { + height: 48px; +} +.mdc-list-item.mdc-list-item--with-two-lines { + height: 64px; +} +.mdc-list-item.mdc-list-item--with-three-lines { + height: 88px; +} +.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start { + align-self: center; + margin-top: 0; +} +.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start { + align-self: flex-start; + margin-top: 16px; +} +.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start { + align-self: flex-start; + margin-top: 16px; +} +.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end { + align-self: center; + margin-top: 0; +} +.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end { + align-self: center; + margin-top: 0; +} +.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end { + align-self: flex-start; + margin-top: 16px; +} +.mdc-list-item.mdc-list-item--disabled, .mdc-list-item.mdc-list-item--non-interactive { + cursor: auto; +} +.mdc-list-item:not(.mdc-list-item--selected):focus::before, .mdc-list-item.mdc-ripple-upgraded--background-focused::before { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 1px solid transparent; + border-radius: inherit; + content: ""; + pointer-events: none; +} +.mdc-list-item.mdc-list-item--selected::before { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 3px double transparent; + border-radius: inherit; + content: ""; + pointer-events: none; +} +.mdc-list-item.mdc-list-item--selected:focus::before { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 3px solid transparent; + border-radius: inherit; + content: ""; + pointer-events: none; +} + +a.mdc-list-item { + color: inherit; + text-decoration: none; +} + +.mdc-list-item__start { + fill: currentColor; + flex-shrink: 0; + pointer-events: none; +} + +.mdc-list-item__end { + flex-shrink: 0; + pointer-events: none; +} + +.mdc-list-item__content { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + align-self: center; + flex: 1; + pointer-events: none; +} +.mdc-list-item--with-two-lines .mdc-list-item__content, .mdc-list-item--with-three-lines .mdc-list-item__content { + align-self: stretch; +} +.mdc-list-item__content[for] { + pointer-events: none; +} + +.mdc-list-item__primary-text { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle1-font-size, 1rem); + line-height: 1.75rem; + /* @alternate */ + line-height: var(--mdc-typography-subtitle1-line-height, 1.75rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle1-font-weight, 400); + letter-spacing: 0.009375em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle1-letter-spacing, 0.009375em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle1-text-transform, inherit); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} +.mdc-list-item--with-two-lines .mdc-list-item__primary-text, .mdc-list-item--with-three-lines .mdc-list-item__primary-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before, .mdc-list-item--with-three-lines .mdc-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after, .mdc-list-item--with-three-lines .mdc-list-item__primary-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} + +.mdc-list-item__secondary-text { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-body2-font-size, 0.875rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-body2-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body2-font-weight, 400); + letter-spacing: 0.0178571429em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body2-letter-spacing, 0.0178571429em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body2-text-transform, inherit); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-list-item__secondary-text::before { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-three-lines .mdc-list-item__secondary-text { + white-space: normal; + line-height: 20px; +} +.mdc-list-item--with-overline .mdc-list-item__secondary-text { + white-space: nowrap; + line-height: auto; +} + +.mdc-list-item__overline-text { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-overline-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.75rem; + /* @alternate */ + font-size: var(--mdc-typography-overline-font-size, 0.75rem); + line-height: 2rem; + /* @alternate */ + line-height: var(--mdc-typography-overline-line-height, 2rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-overline-font-weight, 500); + letter-spacing: 0.1666666667em; + /* @alternate */ + letter-spacing: var(--mdc-typography-overline-letter-spacing, 0.1666666667em); + text-decoration: none; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-overline-text-decoration, none); + text-decoration: var(--mdc-typography-overline-text-decoration, none); + text-transform: uppercase; + /* @alternate */ + text-transform: var(--mdc-typography-overline-text-transform, uppercase); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} +.mdc-list-item--with-two-lines .mdc-list-item__overline-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before { + display: inline-block; + width: 0; + height: 24px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-three-lines .mdc-list-item__overline-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-three-lines .mdc-list-item__overline-text::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-three-lines .mdc-list-item__overline-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} + +.mdc-list-item--with-leading-avatar.mdc-list-item { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: auto; +} +[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item, .mdc-list-item--with-leading-avatar.mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0; +} + +.mdc-list-item--with-leading-avatar .mdc-list-item__start { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; +} +[dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start, .mdc-list-item--with-leading-avatar .mdc-list-item__start[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; +} + +.mdc-list-item--with-leading-avatar .mdc-list-item__start { + width: 40px; + height: 40px; +} +.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__overline-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-avatar.mdc-list-item--with-one-line { + height: 56px; +} +.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines { + height: 72px; +} +.mdc-list-item--with-leading-avatar .mdc-list-item__start { + border-radius: 50%; +} + +.mdc-list-item--with-leading-icon .mdc-list-item__start { + width: 24px; + height: 24px; +} +.mdc-list-item--with-leading-icon.mdc-list-item { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: auto; +} +[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item, .mdc-list-item--with-leading-icon.mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0; +} + +.mdc-list-item--with-leading-icon .mdc-list-item__start { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 32px; +} +[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start, .mdc-list-item--with-leading-icon .mdc-list-item__start[dir=rtl] { + /* @noflip */ + margin-left: 32px; + /* @noflip */ + margin-right: 16px; +} + +.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__overline-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-icon.mdc-list-item--with-one-line { + height: 56px; +} +.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines { + height: 72px; +} + +.mdc-list-item--with-leading-thumbnail.mdc-list-item { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: auto; +} +[dir=rtl] .mdc-list-item--with-leading-thumbnail.mdc-list-item, .mdc-list-item--with-leading-thumbnail.mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0; +} + +.mdc-list-item--with-leading-thumbnail .mdc-list-item__start { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; +} +[dir=rtl] .mdc-list-item--with-leading-thumbnail .mdc-list-item__start, .mdc-list-item--with-leading-thumbnail .mdc-list-item__start[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; +} + +.mdc-list-item--with-leading-thumbnail .mdc-list-item__start { + width: 40px; + height: 40px; +} +.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__primary-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__overline-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-one-line { + height: 56px; +} +.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines { + height: 72px; +} + +.mdc-list-item--with-leading-image.mdc-list-item { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: auto; +} +[dir=rtl] .mdc-list-item--with-leading-image.mdc-list-item, .mdc-list-item--with-leading-image.mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0; +} + +.mdc-list-item--with-leading-image .mdc-list-item__start { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; +} +[dir=rtl] .mdc-list-item--with-leading-image .mdc-list-item__start, .mdc-list-item--with-leading-image .mdc-list-item__start[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; +} + +.mdc-list-item--with-leading-image .mdc-list-item__start { + width: 56px; + height: 56px; +} +.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__primary-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__overline-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-image.mdc-list-item--with-one-line { + height: 72px; +} +.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines { + height: 72px; +} + +.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__start { + align-self: flex-start; + margin-top: 8px; +} +.mdc-list-item--with-leading-video.mdc-list-item { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: auto; +} +[dir=rtl] .mdc-list-item--with-leading-video.mdc-list-item, .mdc-list-item--with-leading-video.mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0; +} + +.mdc-list-item--with-leading-video .mdc-list-item__start { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 16px; +} +[dir=rtl] .mdc-list-item--with-leading-video .mdc-list-item__start, .mdc-list-item--with-leading-video .mdc-list-item__start[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 0; +} + +.mdc-list-item--with-leading-video .mdc-list-item__start { + width: 100px; + height: 56px; +} +.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__primary-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__overline-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-video.mdc-list-item--with-one-line { + height: 72px; +} +.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines { + height: 72px; +} + +.mdc-list-item--with-leading-checkbox.mdc-list-item { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: auto; +} +[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item, .mdc-list-item--with-leading-checkbox.mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0; +} + +.mdc-list-item--with-leading-checkbox .mdc-list-item__start { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: 24px; +} +[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start, .mdc-list-item--with-leading-checkbox .mdc-list-item__start[dir=rtl] { + /* @noflip */ + margin-left: 24px; + /* @noflip */ + margin-right: 8px; +} + +.mdc-list-item--with-leading-checkbox .mdc-list-item__start { + width: 40px; + height: 40px; +} +.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start { + align-self: flex-start; + margin-top: 8px; +} +.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__overline-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-checkbox.mdc-list-item--with-one-line { + height: 56px; +} +.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines { + height: 72px; +} + +.mdc-list-item--with-leading-radio.mdc-list-item { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: auto; +} +[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item, .mdc-list-item--with-leading-radio.mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0; +} + +.mdc-list-item--with-leading-radio .mdc-list-item__start { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: 24px; +} +[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start, .mdc-list-item--with-leading-radio .mdc-list-item__start[dir=rtl] { + /* @noflip */ + margin-left: 24px; + /* @noflip */ + margin-right: 8px; +} + +.mdc-list-item--with-leading-radio .mdc-list-item__start { + width: 40px; + height: 40px; +} +.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start { + align-self: flex-start; + margin-top: 8px; +} +.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__overline-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-radio.mdc-list-item--with-one-line { + height: 56px; +} +.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines { + height: 72px; +} + +.mdc-list-item--with-leading-switch.mdc-list-item { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: auto; +} +[dir=rtl] .mdc-list-item--with-leading-switch.mdc-list-item, .mdc-list-item--with-leading-switch.mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0; +} + +.mdc-list-item--with-leading-switch .mdc-list-item__start { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; +} +[dir=rtl] .mdc-list-item--with-leading-switch .mdc-list-item__start, .mdc-list-item--with-leading-switch .mdc-list-item__start[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; +} + +.mdc-list-item--with-leading-switch .mdc-list-item__start { + width: 36px; + height: 20px; +} +.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__start { + align-self: flex-start; + margin-top: 16px; +} +.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__primary-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__overline-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin-bottom: -20px; +} +.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: -20px; +} +.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before { + display: inline-block; + width: 0; + height: 32px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-leading-switch.mdc-list-item--with-one-line { + height: 56px; +} +.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines { + height: 72px; +} + +.mdc-list-item--with-trailing-icon.mdc-list-item { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item, .mdc-list-item--with-trailing-icon.mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: auto; +} + +.mdc-list-item--with-trailing-icon .mdc-list-item__end { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; +} +[dir=rtl] .mdc-list-item--with-trailing-icon .mdc-list-item__end, .mdc-list-item--with-trailing-icon .mdc-list-item__end[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; +} + +.mdc-list-item--with-trailing-icon .mdc-list-item__end { + width: 24px; + height: 24px; +} + +.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end { + align-self: flex-start; + margin-top: 0; +} +.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end { + align-self: flex-start; + margin-top: 0; +} +.mdc-list-item--with-trailing-meta.mdc-list-item { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item, .mdc-list-item--with-trailing-meta.mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: auto; +} + +.mdc-list-item--with-trailing-meta .mdc-list-item__end { + /* @noflip */ + margin-left: 28px; + /* @noflip */ + margin-right: 16px; +} +[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end, .mdc-list-item--with-trailing-meta .mdc-list-item__end[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 28px; +} + +.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-trailing-meta .mdc-list-item__end { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.75rem; + /* @alternate */ + font-size: var(--mdc-typography-caption-font-size, 0.75rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-caption-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-caption-font-weight, 400); + letter-spacing: 0.0333333333em; + /* @alternate */ + letter-spacing: var(--mdc-typography-caption-letter-spacing, 0.0333333333em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-caption-text-transform, inherit); +} + +.mdc-list-item--with-trailing-checkbox.mdc-list-item { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item, .mdc-list-item--with-trailing-checkbox.mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: auto; +} + +.mdc-list-item--with-trailing-checkbox .mdc-list-item__end { + /* @noflip */ + margin-left: 24px; + /* @noflip */ + margin-right: 8px; +} +[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end, .mdc-list-item--with-trailing-checkbox .mdc-list-item__end[dir=rtl] { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: 24px; +} + +.mdc-list-item--with-trailing-checkbox .mdc-list-item__end { + width: 40px; + height: 40px; +} +.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end { + align-self: flex-start; + margin-top: 8px; +} + +.mdc-list-item--with-trailing-radio.mdc-list-item { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item, .mdc-list-item--with-trailing-radio.mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: auto; +} + +.mdc-list-item--with-trailing-radio .mdc-list-item__end { + /* @noflip */ + margin-left: 24px; + /* @noflip */ + margin-right: 8px; +} +[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end, .mdc-list-item--with-trailing-radio .mdc-list-item__end[dir=rtl] { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: 24px; +} + +.mdc-list-item--with-trailing-radio .mdc-list-item__end { + width: 40px; + height: 40px; +} +.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end { + align-self: flex-start; + margin-top: 8px; +} + +.mdc-list-item--with-trailing-switch.mdc-list-item { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-list-item--with-trailing-switch.mdc-list-item, .mdc-list-item--with-trailing-switch.mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: auto; +} + +.mdc-list-item--with-trailing-switch .mdc-list-item__end { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; +} +[dir=rtl] .mdc-list-item--with-trailing-switch .mdc-list-item__end, .mdc-list-item--with-trailing-switch .mdc-list-item__end[dir=rtl] { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 16px; +} + +.mdc-list-item--with-trailing-switch .mdc-list-item__end { + width: 36px; + height: 20px; +} +.mdc-list-item--with-trailing-switch.mdc-list-item--with-three-lines .mdc-list-item__end { + align-self: flex-start; + margin-top: 16px; +} + +.mdc-list-item--with-overline.mdc-list-item--with-two-lines .mdc-list-item__primary-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-list-item--with-overline.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: 0; +} +.mdc-list-item--with-overline.mdc-list-item--with-three-lines .mdc-list-item__primary-text { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; +} +.mdc-list-item--with-overline.mdc-list-item--with-three-lines .mdc-list-item__primary-text::before { + display: inline-block; + width: 0; + height: 20px; + content: ""; + vertical-align: 0; +} + +.mdc-list-item { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; +} +[dir=rtl] .mdc-list-item, .mdc-list-item[dir=rtl] { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 16px; +} + +.mdc-list-group .mdc-deprecated-list { + padding: 0; +} + +.mdc-list-group__subheader { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle1-font-size, 1rem); + line-height: 1.75rem; + /* @alternate */ + line-height: var(--mdc-typography-subtitle1-line-height, 1.75rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle1-font-weight, 400); + letter-spacing: 0.009375em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle1-letter-spacing, 0.009375em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle1-text-transform, inherit); + margin: calc( (3rem - 1.5rem) / 2 ) 16px; +} + +.mdc-list-divider { + background-color: rgba(0, 0, 0, 0.12); +} + +.mdc-list-divider { + height: 1px; + padding: 0; + background-clip: content-box; +} + +.mdc-list-divider.mdc-list-divider--with-leading-inset, +.mdc-list-divider--with-leading-text.mdc-list-divider--with-leading-inset, +.mdc-list-divider--with-leading-icon.mdc-list-divider--with-leading-inset, +.mdc-list-divider--with-leading-image.mdc-list-divider--with-leading-inset, +.mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-leading-inset, +.mdc-list-divider--with-leading-avatar.mdc-list-divider--with-leading-inset, +.mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-leading-inset, +.mdc-list-divider--with-leading-switch.mdc-list-divider--with-leading-inset, +.mdc-list-divider--with-leading-radio.mdc-list-divider--with-leading-inset { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: auto; +} +[dir=rtl] .mdc-list-divider.mdc-list-divider--with-leading-inset, [dir=rtl] .mdc-list-divider--with-leading-text.mdc-list-divider--with-leading-inset, [dir=rtl] .mdc-list-divider--with-leading-icon.mdc-list-divider--with-leading-inset, [dir=rtl] .mdc-list-divider--with-leading-image.mdc-list-divider--with-leading-inset, [dir=rtl] .mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-leading-inset, [dir=rtl] .mdc-list-divider--with-leading-avatar.mdc-list-divider--with-leading-inset, [dir=rtl] .mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-leading-inset, [dir=rtl] .mdc-list-divider--with-leading-switch.mdc-list-divider--with-leading-inset, [dir=rtl] .mdc-list-divider--with-leading-radio.mdc-list-divider--with-leading-inset, .mdc-list-divider.mdc-list-divider--with-leading-inset[dir=rtl], .mdc-list-divider--with-leading-text.mdc-list-divider--with-leading-inset[dir=rtl], .mdc-list-divider--with-leading-icon.mdc-list-divider--with-leading-inset[dir=rtl], .mdc-list-divider--with-leading-image.mdc-list-divider--with-leading-inset[dir=rtl], .mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-leading-inset[dir=rtl], .mdc-list-divider--with-leading-avatar.mdc-list-divider--with-leading-inset[dir=rtl], .mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-leading-inset[dir=rtl], .mdc-list-divider--with-leading-switch.mdc-list-divider--with-leading-inset[dir=rtl], .mdc-list-divider--with-leading-radio.mdc-list-divider--with-leading-inset[dir=rtl] { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 16px; +} + +.mdc-list-divider.mdc-list-divider--with-trailing-inset, +.mdc-list-divider--with-leading-text.mdc-list-divider--with-trailing-inset, +.mdc-list-divider--with-leading-icon.mdc-list-divider--with-trailing-inset, +.mdc-list-divider--with-leading-image.mdc-list-divider--with-trailing-inset, +.mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-trailing-inset, +.mdc-list-divider--with-leading-avatar.mdc-list-divider--with-trailing-inset, +.mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-trailing-inset, +.mdc-list-divider--with-leading-switch.mdc-list-divider--with-trailing-inset, +.mdc-list-divider--with-leading-radio.mdc-list-divider--with-trailing-inset { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 16px; +} +[dir=rtl] .mdc-list-divider.mdc-list-divider--with-trailing-inset, [dir=rtl] .mdc-list-divider--with-leading-text.mdc-list-divider--with-trailing-inset, [dir=rtl] .mdc-list-divider--with-leading-icon.mdc-list-divider--with-trailing-inset, [dir=rtl] .mdc-list-divider--with-leading-image.mdc-list-divider--with-trailing-inset, [dir=rtl] .mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-trailing-inset, [dir=rtl] .mdc-list-divider--with-leading-avatar.mdc-list-divider--with-trailing-inset, [dir=rtl] .mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-trailing-inset, [dir=rtl] .mdc-list-divider--with-leading-switch.mdc-list-divider--with-trailing-inset, [dir=rtl] .mdc-list-divider--with-leading-radio.mdc-list-divider--with-trailing-inset, .mdc-list-divider.mdc-list-divider--with-trailing-inset[dir=rtl], .mdc-list-divider--with-leading-text.mdc-list-divider--with-trailing-inset[dir=rtl], .mdc-list-divider--with-leading-icon.mdc-list-divider--with-trailing-inset[dir=rtl], .mdc-list-divider--with-leading-image.mdc-list-divider--with-trailing-inset[dir=rtl], .mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-trailing-inset[dir=rtl], .mdc-list-divider--with-leading-avatar.mdc-list-divider--with-trailing-inset[dir=rtl], .mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-trailing-inset[dir=rtl], .mdc-list-divider--with-leading-switch.mdc-list-divider--with-trailing-inset[dir=rtl], .mdc-list-divider--with-leading-radio.mdc-list-divider--with-trailing-inset[dir=rtl] { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: auto; +} + +.mdc-list-divider--with-leading-video.mdc-list-divider--with-leading-inset { + /* @noflip */ + padding-left: 0px; + /* @noflip */ + padding-right: auto; +} +[dir=rtl] .mdc-list-divider--with-leading-video.mdc-list-divider--with-leading-inset, .mdc-list-divider--with-leading-video.mdc-list-divider--with-leading-inset[dir=rtl] { + /* @noflip */ + padding-left: auto; + /* @noflip */ + padding-right: 0px; +} + +[dir=rtl] .mdc-list-divider, .mdc-list-divider[dir=rtl] { + padding: 0; +} + +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::before, +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--unbounded .mdc-deprecated-list-item__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--foreground-activation .mdc-deprecated-list-item__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--foreground-deactivation .mdc-deprecated-list-item__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::before, +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-list-item__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-list-item__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--unbounded .mdc-list-item__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--foreground-activation .mdc-list-item__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--foreground-deactivation .mdc-list-item__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::before, +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::before, +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-list-item__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, #000); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:hover .mdc-deprecated-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-surface--hover .mdc-deprecated-list-item__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded) .mdc-deprecated-list-item__ripple::after { + transition: opacity 150ms linear; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded):active .mdc-deprecated-list-item__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, #000); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:hover .mdc-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-surface--hover .mdc-list-item__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after { + transition: opacity 150ms linear; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-deprecated-list-item__ripple::before { + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-activated-opacity, 0.12); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-deprecated-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-deprecated-list-item__ripple::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:hover .mdc-deprecated-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-surface--hover .mdc-deprecated-list-item__ripple::before { + opacity: 0.16; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.16); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.24); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded) .mdc-deprecated-list-item__ripple::after { + transition: opacity 150ms linear; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded):active .mdc-deprecated-list-item__ripple::after { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.24); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.24); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-list-item__ripple::before { + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-activated-opacity, 0.12); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-list-item__ripple::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:hover .mdc-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-surface--hover .mdc-list-item__ripple::before { + opacity: 0.16; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.16); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.24); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after { + transition: opacity 150ms linear; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.24); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.24); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple::before { + opacity: 0.08; + /* @alternate */ + opacity: var(--mdc-ripple-selected-opacity, 0.08); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:hover .mdc-deprecated-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-deprecated-list-item__ripple::before { + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.12); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.2; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.2); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-deprecated-list-item__ripple::after { + transition: opacity 150ms linear; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-deprecated-list-item__ripple::after { + transition-duration: 75ms; + opacity: 0.2; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.2); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.2); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-list-item__ripple::before { + opacity: 0.08; + /* @alternate */ + opacity: var(--mdc-ripple-selected-opacity, 0.08); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-list-item__ripple::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:hover .mdc-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-list-item__ripple::before { + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.12); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before, :not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.2; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.2); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after { + transition: opacity 150ms linear; +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after { + transition-duration: 75ms; + opacity: 0.2; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.2); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.2); +} +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple, +:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; +} + +.mdc-deprecated-list-item--disabled { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::before, +.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--unbounded .mdc-deprecated-list-item__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--foreground-activation .mdc-deprecated-list-item__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--foreground-deactivation .mdc-deprecated-list-item__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::before, +.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--unbounded .mdc-list-item__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--foreground-activation .mdc-list-item__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--foreground-deactivation .mdc-list-item__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::before, +.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::before, +.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::before, +.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, #000); +} +.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::before, +.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, #000); +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple::before, .mdc-deprecated-list-item--disabled:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before, .mdc-deprecated-list-item--disabled:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple, +.mdc-deprecated-list-item--disabled .mdc-list-item__ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; +} + +:not(.mdc-list-item--disabled).mdc-list-item { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::before, +:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded .mdc-list-item__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded .mdc-list-item__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--unbounded .mdc-list-item__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--foreground-activation .mdc-list-item__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--foreground-deactivation .mdc-list-item__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::before, +:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded .mdc-list-item__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::before, :not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, #000); +} +:not(.mdc-list-item--disabled).mdc-list-item:hover .mdc-list-item__ripple::before, :not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-surface--hover .mdc-list-item__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before, :not(.mdc-list-item--disabled).mdc-list-item:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +:not(.mdc-list-item--disabled).mdc-list-item:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after { + transition: opacity 150ms linear; +} +:not(.mdc-list-item--disabled).mdc-list-item:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +:not(.mdc-list-item--disabled).mdc-list-item--activated .mdc-list-item__ripple::before { + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-activated-opacity, 0.12); +} +:not(.mdc-list-item--disabled).mdc-list-item--activated .mdc-list-item__ripple::before, :not(.mdc-list-item--disabled).mdc-list-item--activated .mdc-list-item__ripple::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +:not(.mdc-list-item--disabled).mdc-list-item--activated:hover .mdc-list-item__ripple::before, :not(.mdc-list-item--disabled).mdc-list-item--activated.mdc-ripple-surface--hover .mdc-list-item__ripple::before { + opacity: 0.16; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.16); +} +:not(.mdc-list-item--disabled).mdc-list-item--activated.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before, :not(.mdc-list-item--disabled).mdc-list-item--activated:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.24); +} +:not(.mdc-list-item--disabled).mdc-list-item--activated:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after { + transition: opacity 150ms linear; +} +:not(.mdc-list-item--disabled).mdc-list-item--activated:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.24); +} +:not(.mdc-list-item--disabled).mdc-list-item--activated.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.24); +} +:not(.mdc-list-item--disabled).mdc-list-item--selected .mdc-list-item__ripple::before { + opacity: 0.08; + /* @alternate */ + opacity: var(--mdc-ripple-selected-opacity, 0.08); +} +:not(.mdc-list-item--disabled).mdc-list-item--selected .mdc-list-item__ripple::before, :not(.mdc-list-item--disabled).mdc-list-item--selected .mdc-list-item__ripple::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +:not(.mdc-list-item--disabled).mdc-list-item--selected:hover .mdc-list-item__ripple::before, :not(.mdc-list-item--disabled).mdc-list-item--selected.mdc-ripple-surface--hover .mdc-list-item__ripple::before { + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.12); +} +:not(.mdc-list-item--disabled).mdc-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before, :not(.mdc-list-item--disabled).mdc-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.2; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.2); +} +:not(.mdc-list-item--disabled).mdc-list-item--selected:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after { + transition: opacity 150ms linear; +} +:not(.mdc-list-item--disabled).mdc-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after { + transition-duration: 75ms; + opacity: 0.2; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.2); +} +:not(.mdc-list-item--disabled).mdc-list-item--selected.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.2); +} +:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; +} + +.mdc-list-item--disabled { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-list-item--disabled .mdc-list-item__ripple::before, +.mdc-list-item--disabled .mdc-list-item__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-list-item--disabled .mdc-list-item__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-list-item--disabled .mdc-list-item__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-list-item--disabled.mdc-ripple-upgraded--unbounded .mdc-list-item__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-list-item--disabled.mdc-ripple-upgraded--foreground-activation .mdc-list-item__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-list-item--disabled.mdc-ripple-upgraded--foreground-deactivation .mdc-list-item__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-list-item--disabled .mdc-list-item__ripple::before, +.mdc-list-item--disabled .mdc-list-item__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +.mdc-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-list-item--disabled .mdc-list-item__ripple::before, +.mdc-list-item--disabled .mdc-list-item__ripple::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, #000); +} +.mdc-list-item--disabled.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before, .mdc-list-item--disabled:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-list-item--disabled .mdc-list-item__ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; +} + +.mdc-menu { + min-width: 112px; + /* @alternate */ + min-width: var(--mdc-menu-min-width, 112px); +} +.mdc-menu .mdc-deprecated-list-item__meta { + color: rgba(0, 0, 0, 0.87); +} +.mdc-menu .mdc-deprecated-list-item__graphic { + color: rgba(0, 0, 0, 0.87); +} +.mdc-menu .mdc-deprecated-list { + color: rgba(0, 0, 0, 0.87); + /* @alternate */ + position: relative; +} +.mdc-menu .mdc-deprecated-list .mdc-elevation-overlay { + width: 100%; + height: 100%; + top: 0; + /* @noflip */ + left: 0; +} +.mdc-menu .mdc-deprecated-list-divider { + margin: 8px 0; +} +.mdc-menu .mdc-deprecated-list-item { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.mdc-menu .mdc-deprecated-list-item--disabled { + cursor: auto; +} +.mdc-menu a.mdc-deprecated-list-item .mdc-deprecated-list-item__text, +.mdc-menu a.mdc-deprecated-list-item .mdc-deprecated-list-item__graphic { + pointer-events: none; +} + +.mdc-menu__selection-group { + padding: 0; + fill: currentColor; +} +.mdc-menu__selection-group .mdc-deprecated-list-item { + /* @noflip */ + padding-left: 56px; + /* @noflip */ + padding-right: 16px; +} +[dir=rtl] .mdc-menu__selection-group .mdc-deprecated-list-item, .mdc-menu__selection-group .mdc-deprecated-list-item[dir=rtl] { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 56px; +} + +.mdc-menu__selection-group .mdc-menu__selection-group-icon { + /* @noflip */ + left: 16px; + /* @noflip */ + right: initial; + display: none; + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} +[dir=rtl] .mdc-menu__selection-group .mdc-menu__selection-group-icon, .mdc-menu__selection-group .mdc-menu__selection-group-icon[dir=rtl] { + /* @noflip */ + left: initial; + /* @noflip */ + right: 16px; +} + +.mdc-menu-item--selected .mdc-menu__selection-group-icon { + display: inline; +} + +.mdc-menu-surface { + display: none; + position: absolute; + box-sizing: border-box; + max-width: calc(100vw - 32px); + /* @alternate */ + max-width: var(--mdc-menu-max-width, calc(100vw - 32px)); + max-height: calc(100vh - 32px); + /* @alternate */ + max-height: var(--mdc-menu-max-height, calc(100vh - 32px)); + margin: 0; + padding: 0; + -webkit-transform: scale(1); + transform: scale(1); + -webkit-transform-origin: top left; + transform-origin: top left; + opacity: 0; + overflow: auto; + will-change: transform, opacity; + z-index: 8; + transition: opacity 0.03s linear, height 250ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 0.12s cubic-bezier(0, 0, 0.2, 1); + transition: opacity 0.03s linear, transform 0.12s cubic-bezier(0, 0, 0.2, 1), height 250ms cubic-bezier(0, 0, 0.2, 1); + transition: opacity 0.03s linear, transform 0.12s cubic-bezier(0, 0, 0.2, 1), height 250ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 0.12s cubic-bezier(0, 0, 0.2, 1); + /* @alternate */ + box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12); + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-surface, #fff); + color: #000; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000); + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-medium, 4px); + /* @noflip */ + transform-origin-left: top left; + /* @noflip */ + transform-origin-right: top right; +} +.mdc-menu-surface:focus { + outline: none; +} +.mdc-menu-surface--animating-open { + display: inline-block; + -webkit-transform: scale(0.8); + transform: scale(0.8); + opacity: 0; +} +.mdc-menu-surface--open { + display: inline-block; + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; +} +.mdc-menu-surface--animating-closed { + display: inline-block; + opacity: 0; + transition: opacity 0.075s linear; +} +[dir=rtl] .mdc-menu-surface, .mdc-menu-surface[dir=rtl] { + /* @noflip */ + transform-origin-left: top right; + /* @noflip */ + transform-origin-right: top left; +} + +.mdc-menu-surface--anchor { + position: relative; + overflow: visible; +} + +.mdc-menu-surface--fixed { + position: fixed; +} + +.mdc-menu-surface--fullwidth { + width: 100%; +} + +.mdc-radio { + padding: calc((40px - 20px) / 2); +} +.mdc-radio .mdc-radio__native-control:enabled:not(:checked) + .mdc-radio__background .mdc-radio__outer-circle { + border-color: rgba(0, 0, 0, 0.54); +} +.mdc-radio .mdc-radio__native-control:enabled:checked + .mdc-radio__background .mdc-radio__outer-circle { + border-color: #018786; + /* @alternate */ + border-color: var(--mdc-theme-secondary, #018786); +} +.mdc-radio .mdc-radio__native-control:enabled + .mdc-radio__background .mdc-radio__inner-circle { + border-color: #018786; + /* @alternate */ + border-color: var(--mdc-theme-secondary, #018786); +} +.mdc-radio [aria-disabled=true] .mdc-radio__native-control:not(:checked) + .mdc-radio__background .mdc-radio__outer-circle, +.mdc-radio .mdc-radio__native-control:disabled:not(:checked) + .mdc-radio__background .mdc-radio__outer-circle { + border-color: rgba(0, 0, 0, 0.38); +} +.mdc-radio [aria-disabled=true] .mdc-radio__native-control:checked + .mdc-radio__background .mdc-radio__outer-circle, +.mdc-radio .mdc-radio__native-control:disabled:checked + .mdc-radio__background .mdc-radio__outer-circle { + border-color: rgba(0, 0, 0, 0.38); +} +.mdc-radio [aria-disabled=true] .mdc-radio__native-control + .mdc-radio__background .mdc-radio__inner-circle, +.mdc-radio .mdc-radio__native-control:disabled + .mdc-radio__background .mdc-radio__inner-circle { + border-color: rgba(0, 0, 0, 0.38); +} +.mdc-radio .mdc-radio__background::before { + background-color: #018786; + /* @alternate */ + background-color: var(--mdc-theme-secondary, #018786); +} +.mdc-radio .mdc-radio__background::before { + top: calc(-1 * (40px - 20px) / 2); + left: calc(-1 * (40px - 20px) / 2); + width: 40px; + height: 40px; +} +.mdc-radio .mdc-radio__native-control { + top: calc((40px - 40px) / 2); + right: calc((40px - 40px) / 2); + left: calc((40px - 40px) / 2); + width: 40px; + height: 40px; +} +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-radio [aria-disabled=true] .mdc-radio__native-control:not(:checked) + .mdc-radio__background .mdc-radio__outer-circle, +.mdc-radio .mdc-radio__native-control:disabled:not(:checked) + .mdc-radio__background .mdc-radio__outer-circle { + border-color: GrayText; + } + .mdc-radio [aria-disabled=true] .mdc-radio__native-control:checked + .mdc-radio__background .mdc-radio__outer-circle, +.mdc-radio .mdc-radio__native-control:disabled:checked + .mdc-radio__background .mdc-radio__outer-circle { + border-color: GrayText; + } + .mdc-radio [aria-disabled=true] .mdc-radio__native-control + .mdc-radio__background .mdc-radio__inner-circle, +.mdc-radio .mdc-radio__native-control:disabled + .mdc-radio__background .mdc-radio__inner-circle { + border-color: GrayText; + } +} + +.mdc-radio { + display: inline-block; + position: relative; + flex: 0 0 auto; + box-sizing: content-box; + width: 20px; + height: 20px; + cursor: pointer; + /* @alternate */ + will-change: opacity, transform, border-color, color; +} +.mdc-radio__background { + display: inline-block; + position: relative; + box-sizing: border-box; + width: 20px; + height: 20px; +} +.mdc-radio__background::before { + position: absolute; + -webkit-transform: scale(0, 0); + transform: scale(0, 0); + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; + transition: opacity 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1); + transition: opacity 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1), transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1); + transition: opacity 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1), transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1); +} +.mdc-radio__outer-circle { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 100%; + height: 100%; + border-width: 2px; + border-style: solid; + border-radius: 50%; + transition: border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1); +} +.mdc-radio__inner-circle { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 100%; + height: 100%; + -webkit-transform: scale(0, 0); + transform: scale(0, 0); + border-width: 10px; + border-style: solid; + border-radius: 50%; + transition: border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1); + transition: transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1), border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1); + transition: transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1), border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1); +} +.mdc-radio__native-control { + position: absolute; + margin: 0; + padding: 0; + opacity: 0; + cursor: inherit; + z-index: 1; +} +.mdc-radio--touch { + margin-top: 4px; + margin-bottom: 4px; + margin-right: 4px; + margin-left: 4px; +} +.mdc-radio--touch .mdc-radio__native-control { + top: calc((40px - 48px) / 2); + right: calc((40px - 48px) / 2); + left: calc((40px - 48px) / 2); + width: 48px; + height: 48px; +} + +.mdc-radio__native-control:checked + .mdc-radio__background, +.mdc-radio__native-control:disabled + .mdc-radio__background { + transition: opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1), transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1), transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1); +} +.mdc-radio__native-control:checked + .mdc-radio__background .mdc-radio__outer-circle, +.mdc-radio__native-control:disabled + .mdc-radio__background .mdc-radio__outer-circle { + transition: border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1); +} +.mdc-radio__native-control:checked + .mdc-radio__background .mdc-radio__inner-circle, +.mdc-radio__native-control:disabled + .mdc-radio__background .mdc-radio__inner-circle { + transition: border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1), border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1), border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1); +} + +.mdc-radio--disabled { + cursor: default; + pointer-events: none; +} + +.mdc-radio__native-control:checked + .mdc-radio__background .mdc-radio__inner-circle { + -webkit-transform: scale(0.5); + transform: scale(0.5); + transition: border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1), border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1), border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1); +} + +.mdc-radio__native-control:disabled + .mdc-radio__background, +[aria-disabled=true] .mdc-radio__native-control + .mdc-radio__background { + cursor: default; +} + +.mdc-radio__native-control:focus + .mdc-radio__background::before { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 0.12; + transition: opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1), transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1), transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1); +} + +.mdc-radio { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-radio .mdc-radio__ripple::before, +.mdc-radio .mdc-radio__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-radio .mdc-radio__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-radio .mdc-radio__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-radio.mdc-ripple-upgraded--unbounded .mdc-radio__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-radio.mdc-ripple-upgraded--foreground-activation .mdc-radio__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-radio.mdc-ripple-upgraded--foreground-deactivation .mdc-radio__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-radio .mdc-radio__ripple::before, +.mdc-radio .mdc-radio__ripple::after { + top: calc(50% - 50%); + /* @noflip */ + left: calc(50% - 50%); + width: 100%; + height: 100%; +} +.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::before, +.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::after { + top: var(--mdc-ripple-top, calc(50% - 50%)); + /* @noflip */ + left: var(--mdc-ripple-left, calc(50% - 50%)); + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-radio .mdc-radio__ripple::before, .mdc-radio .mdc-radio__ripple::after { + background-color: #018786; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786)); +} +.mdc-radio:hover .mdc-radio__ripple::before, .mdc-radio.mdc-ripple-surface--hover .mdc-radio__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__ripple::before, .mdc-radio:not(.mdc-ripple-upgraded):focus .mdc-radio__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-radio:not(.mdc-ripple-upgraded) .mdc-radio__ripple::after { + transition: opacity 150ms linear; +} +.mdc-radio:not(.mdc-ripple-upgraded):active .mdc-radio__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-radio.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-radio.mdc-ripple-upgraded .mdc-radio__background::before, .mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__background::before { + content: none; +} + +.mdc-radio__ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; +} + +.mdc-ripple-surface { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; + position: relative; + outline: none; + overflow: hidden; +} +.mdc-ripple-surface::before, .mdc-ripple-surface::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-ripple-surface::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-ripple-surface::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-ripple-surface.mdc-ripple-upgraded::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-ripple-surface.mdc-ripple-upgraded::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-ripple-surface.mdc-ripple-upgraded--unbounded::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-ripple-surface.mdc-ripple-upgraded--foreground-activation::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-ripple-surface.mdc-ripple-upgraded--foreground-deactivation::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-ripple-surface::before, .mdc-ripple-surface::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +.mdc-ripple-surface.mdc-ripple-upgraded::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} + +.mdc-ripple-surface[data-mdc-ripple-is-unbounded], +.mdc-ripple-upgraded--unbounded { + overflow: visible; +} +.mdc-ripple-surface[data-mdc-ripple-is-unbounded]::before, .mdc-ripple-surface[data-mdc-ripple-is-unbounded]::after, +.mdc-ripple-upgraded--unbounded::before, +.mdc-ripple-upgraded--unbounded::after { + top: calc(50% - 50%); + /* @noflip */ + left: calc(50% - 50%); + width: 100%; + height: 100%; +} +.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::before, .mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::after, +.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::before, +.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::after { + top: var(--mdc-ripple-top, calc(50% - 50%)); + /* @noflip */ + left: var(--mdc-ripple-left, calc(50% - 50%)); + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::after, +.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} + +.mdc-ripple-surface::before, .mdc-ripple-surface::after { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-ripple-color, #000); +} +.mdc-ripple-surface:hover::before, .mdc-ripple-surface.mdc-ripple-surface--hover::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-ripple-surface.mdc-ripple-upgraded--background-focused::before, .mdc-ripple-surface:not(.mdc-ripple-upgraded):focus::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-ripple-surface:not(.mdc-ripple-upgraded)::after { + transition: opacity 150ms linear; +} +.mdc-ripple-surface:not(.mdc-ripple-upgraded):active::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-ripple-surface.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} + +.mdc-segmented-button { + display: inline-block; + font-size: 0; +} + +.mdc-segmented-button__segment { + border-color: rgba(0, 0, 0, 0.12); + /* @alternate */ + border-color: var(--mdc-segmented-button-outline-color, rgba(0, 0, 0, 0.12)); +} + +.mdc-segmented-button__segment { + color: rgba(0, 0, 0, 0.6); + /* @alternate */ + color: var(--mdc-segmented-button-unselected-ink-color, rgba(0, 0, 0, 0.6)); +} + +.mdc-segmented-button__segment { + background-color: white; + /* @alternate */ + background-color: var(--mdc-segmented-button-unselected-container-fill-color, white); +} + +.mdc-segmented-button__segment--selected { + color: #6200ee; + /* @alternate */ + color: var(--mdc-segmented-button-selected-ink-color, #6200ee); +} + +.mdc-segmented-button__segment--selected { + background-color: rgba(98, 0, 238, 0.08); + /* @alternate */ + background-color: var(--mdc-segmented-button-selected-container-fill-color, rgba(98, 0, 238, 0.08)); +} + +.mdc-segmented-button__segment { + /* @alternate */ + position: relative; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-button-font-size, 0.875rem); + line-height: 2.25rem; + /* @alternate */ + line-height: var(--mdc-typography-button-line-height, 2.25rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-button-font-weight, 500); + letter-spacing: 0.0892857143em; + /* @alternate */ + letter-spacing: var(--mdc-typography-button-letter-spacing, 0.0892857143em); + text-decoration: none; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-button-text-decoration, none); + text-decoration: var(--mdc-typography-button-text-decoration, none); + text-transform: uppercase; + /* @alternate */ + text-transform: var(--mdc-typography-button-text-transform, uppercase); + display: inline-flex; + vertical-align: top; + align-items: center; + height: 36px; + min-width: 48px; + padding: 0 12px; + border-width: 1px 0 1px 1px; +} +.mdc-segmented-button__segment .mdc-elevation-overlay { + width: 100%; + height: 100%; + top: 0; + /* @noflip */ + left: 0; +} +.mdc-segmented-button__segment:hover { + cursor: pointer; +} +.mdc-segmented-button__segment:focus { + outline-width: 0; +} +.mdc-segmented-button__segment:first-child { + border-radius: 4px 0 0 4px; +} +.mdc-segmented-button__segment:last-child { + border-right-width: 1px; + border-radius: 0 4px 4px 0; +} +.mdc-segmented-button__segment .mdc-segmented-button__segment__touch { + position: absolute; + top: 50%; + height: 48px; + left: 0; + right: 0; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} +.mdc-segmented-button__segment .mdc-segmented-button__segment--touch { + margin-top: 0px; + margin-bottom: 0px; +} + +.mdc-touch-target-wrapper .mdc-segmented-button__segment { + border-radius: 0; + border-right-width: 0; +} +.mdc-touch-target-wrapper:first-child .mdc-segmented-button__segment { + border-radius: 4px 0 0 4px; +} +.mdc-touch-target-wrapper:last-child .mdc-segmented-button__segment { + border-right-width: 1px; + border-radius: 0 4px 4px 0; +} + +.mdc-segmented-button__icon { + width: 24px; + font-size: 18px; +} + +.mdc-segmented-button__icon + .mdc-segmented-button__label { + padding-left: 6px; +} + +.mdc-segmented-button__segment { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; + overflow: hidden; +} +.mdc-segmented-button__segment .mdc-segmented-button__ripple::before, +.mdc-segmented-button__segment .mdc-segmented-button__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-segmented-button__segment .mdc-segmented-button__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-segmented-button__segment .mdc-segmented-button__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-segmented-button__segment.mdc-ripple-upgraded .mdc-segmented-button__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-segmented-button__segment.mdc-ripple-upgraded .mdc-segmented-button__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-segmented-button__segment.mdc-ripple-upgraded--unbounded .mdc-segmented-button__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-segmented-button__segment.mdc-ripple-upgraded--foreground-activation .mdc-segmented-button__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-segmented-button__segment.mdc-ripple-upgraded--foreground-deactivation .mdc-segmented-button__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-segmented-button__segment .mdc-segmented-button__ripple::before, +.mdc-segmented-button__segment .mdc-segmented-button__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +.mdc-segmented-button__segment.mdc-ripple-upgraded .mdc-segmented-button__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-segmented-button__segment .mdc-segmented-button__ripple::before, .mdc-segmented-button__segment .mdc-segmented-button__ripple::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, #6200ee); +} +.mdc-segmented-button__segment:hover .mdc-segmented-button__ripple::before, .mdc-segmented-button__segment.mdc-ripple-surface--hover .mdc-segmented-button__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-segmented-button__segment.mdc-ripple-upgraded--background-focused .mdc-segmented-button__ripple::before, .mdc-segmented-button__segment.mdc-ripple-upgraded:focus-within .mdc-segmented-button__ripple::before, .mdc-segmented-button__segment:not(.mdc-ripple-upgraded):focus .mdc-segmented-button__ripple::before, .mdc-segmented-button__segment:not(.mdc-ripple-upgraded):focus-within .mdc-segmented-button__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-segmented-button__segment:not(.mdc-ripple-upgraded) .mdc-segmented-button__ripple::after { + transition: opacity 150ms linear; +} +.mdc-segmented-button__segment:not(.mdc-ripple-upgraded):active .mdc-segmented-button__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-segmented-button__segment.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-segmented-button__segment .mdc-segmented-button__ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; +} + +.mdc-slider__thumb { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-slider__thumb::before, .mdc-slider__thumb::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-slider__thumb::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-slider__thumb::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-slider__thumb.mdc-ripple-upgraded::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-slider__thumb.mdc-ripple-upgraded::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-slider__thumb.mdc-ripple-upgraded--unbounded::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-slider__thumb.mdc-ripple-upgraded--foreground-activation::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-slider__thumb.mdc-ripple-upgraded--foreground-deactivation::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-slider__thumb::before, .mdc-slider__thumb::after { + top: calc(50% - 50%); + /* @noflip */ + left: calc(50% - 50%); + width: 100%; + height: 100%; +} +.mdc-slider__thumb.mdc-ripple-upgraded::before, .mdc-slider__thumb.mdc-ripple-upgraded::after { + top: var(--mdc-ripple-top, calc(50% - 50%)); + /* @noflip */ + left: var(--mdc-ripple-left, calc(50% - 50%)); + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-slider__thumb.mdc-ripple-upgraded::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-slider__thumb::before, .mdc-slider__thumb::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +.mdc-slider__thumb:hover::before, .mdc-slider__thumb.mdc-ripple-surface--hover::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-slider__thumb.mdc-ripple-upgraded--background-focused::before, .mdc-slider__thumb:not(.mdc-ripple-upgraded):focus::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-slider__thumb:not(.mdc-ripple-upgraded)::after { + transition: opacity 150ms linear; +} +.mdc-slider__thumb:not(.mdc-ripple-upgraded):active::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-slider__thumb.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} + +.mdc-slider { + cursor: pointer; + height: 48px; + margin: 0 24px; + position: relative; + touch-action: pan-y; +} +.mdc-slider .mdc-slider__track { + height: 4px; + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + width: 100%; +} +.mdc-slider .mdc-slider__track--active, +.mdc-slider .mdc-slider__track--inactive { + display: flex; + height: 100%; + position: absolute; + width: 100%; +} +.mdc-slider .mdc-slider__track--active { + border-radius: 3px; + height: 6px; + overflow: hidden; + top: -1px; +} +.mdc-slider .mdc-slider__track--active_fill { + border-top: 6px solid; + box-sizing: border-box; + height: 100%; + width: 100%; + position: relative; + /* @noflip */ + -webkit-transform-origin: left; + /* @noflip */ + transform-origin: left; +} +[dir=rtl] .mdc-slider .mdc-slider__track--active_fill, .mdc-slider .mdc-slider__track--active_fill[dir=rtl] { + /* @noflip */ + -webkit-transform-origin: right; + /* @noflip */ + transform-origin: right; +} + +.mdc-slider .mdc-slider__track--inactive { + border-radius: 2px; + height: 4px; + left: 0; + top: 0; +} +.mdc-slider .mdc-slider__track--inactive::before { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 1px solid transparent; + border-radius: inherit; + content: ""; + pointer-events: none; +} +.mdc-slider .mdc-slider__track--active_fill { + border-color: #6200ee; + /* @alternate */ + border-color: var(--mdc-theme-primary, #6200ee); +} +.mdc-slider.mdc-slider--disabled .mdc-slider__track--active_fill { + border-color: #000; + /* @alternate */ + border-color: var(--mdc-theme-on-surface, #000); +} +.mdc-slider .mdc-slider__track--inactive { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-theme-primary, #6200ee); + opacity: 0.24; +} +.mdc-slider.mdc-slider--disabled .mdc-slider__track--inactive { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-theme-on-surface, #000); + opacity: 0.24; +} +.mdc-slider .mdc-slider__value-indicator-container { + bottom: 44px; + /* @noflip */ + left: 50%; + pointer-events: none; + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); +} +.mdc-slider .mdc-slider__value-indicator { + transition: -webkit-transform 100ms 0ms cubic-bezier(0.4, 0, 1, 1); + transition: transform 100ms 0ms cubic-bezier(0.4, 0, 1, 1); + transition: transform 100ms 0ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 100ms 0ms cubic-bezier(0.4, 0, 1, 1); + align-items: center; + border-radius: 4px; + display: flex; + height: 32px; + padding: 0 12px; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: bottom; + transform-origin: bottom; +} +.mdc-slider .mdc-slider__value-indicator::before { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 6px solid; + bottom: -5px; + content: ""; + height: 0; + /* @noflip */ + left: 50%; + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + width: 0; +} +.mdc-slider .mdc-slider__value-indicator::after { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 1px solid transparent; + border-radius: inherit; + content: ""; + pointer-events: none; +} +.mdc-slider .mdc-slider__thumb--with-indicator .mdc-slider__value-indicator-container { + pointer-events: auto; +} +.mdc-slider .mdc-slider__thumb--with-indicator .mdc-slider__value-indicator { + transition: -webkit-transform 100ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: transform 100ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: transform 100ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 100ms 0ms cubic-bezier(0, 0, 0.2, 1); + -webkit-transform: scale(1); + transform: scale(1); +} +@media (prefers-reduced-motion) { + .mdc-slider .mdc-slider__value-indicator, +.mdc-slider .mdc-slider__thumb--with-indicator .mdc-slider__value-indicator { + transition: none; + } +} +.mdc-slider .mdc-slider__value-indicator-text { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle2-font-size, 0.875rem); + line-height: 1.375rem; + /* @alternate */ + line-height: var(--mdc-typography-subtitle2-line-height, 1.375rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle2-font-weight, 500); + letter-spacing: 0.0071428571em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle2-letter-spacing, 0.0071428571em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle2-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle2-text-transform, inherit); +} +.mdc-slider .mdc-slider__value-indicator { + background-color: #000; + opacity: 0.6; +} +.mdc-slider .mdc-slider__value-indicator::before { + border-top-color: #000; +} +.mdc-slider .mdc-slider__value-indicator { + color: #fff; + /* @alternate */ + color: var(--mdc-theme-on-primary, #fff); +} +.mdc-slider .mdc-slider__thumb { + display: flex; + height: 48px; + /* @noflip */ + left: -24px; + outline: none; + position: absolute; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + width: 48px; +} +.mdc-slider .mdc-slider__thumb--top { + z-index: 1; +} +.mdc-slider .mdc-slider__thumb--top .mdc-slider__thumb-knob, .mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb:hover .mdc-slider__thumb-knob, .mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb--focused .mdc-slider__thumb-knob { + border-style: solid; + border-width: 1px; + box-sizing: content-box; +} +.mdc-slider .mdc-slider__thumb-knob { + /* @alternate */ + box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12); + border: 10px solid; + border-radius: 50%; + box-sizing: border-box; + height: 20px; + /* @noflip */ + left: 50%; + position: absolute; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + width: 20px; +} +.mdc-slider .mdc-slider__thumb-knob { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-theme-primary, #6200ee); + border-color: #6200ee; + /* @alternate */ + border-color: var(--mdc-theme-primary, #6200ee); +} +.mdc-slider .mdc-slider__thumb--top .mdc-slider__thumb-knob, .mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb:hover .mdc-slider__thumb-knob, .mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb--focused .mdc-slider__thumb-knob { + border-color: #fff; +} +.mdc-slider.mdc-slider--disabled .mdc-slider__thumb-knob { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-theme-on-surface, #000); + border-color: #000; + /* @alternate */ + border-color: var(--mdc-theme-on-surface, #000); +} +.mdc-slider.mdc-slider--disabled .mdc-slider__thumb--top .mdc-slider__thumb-knob, .mdc-slider.mdc-slider--disabled .mdc-slider__thumb--top.mdc-slider__thumb:hover .mdc-slider__thumb-knob, .mdc-slider.mdc-slider--disabled .mdc-slider__thumb--top.mdc-slider__thumb--focused .mdc-slider__thumb-knob { + border-color: #fff; +} +.mdc-slider .mdc-slider__thumb::before, .mdc-slider .mdc-slider__thumb::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +.mdc-slider .mdc-slider__thumb:hover::before, .mdc-slider .mdc-slider__thumb.mdc-ripple-surface--hover::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-slider .mdc-slider__thumb.mdc-ripple-upgraded--background-focused::before, .mdc-slider .mdc-slider__thumb:not(.mdc-ripple-upgraded):focus::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-slider .mdc-slider__thumb:not(.mdc-ripple-upgraded)::after { + transition: opacity 150ms linear; +} +.mdc-slider .mdc-slider__thumb:not(.mdc-ripple-upgraded):active::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-slider .mdc-slider__thumb.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-slider .mdc-slider__tick-marks { + align-items: center; + box-sizing: border-box; + display: flex; + height: 100%; + justify-content: space-between; + padding: 0 1px; + position: absolute; + width: 100%; +} +.mdc-slider .mdc-slider__tick-mark--active, +.mdc-slider .mdc-slider__tick-mark--inactive { + border-radius: 50%; + height: 2px; + width: 2px; +} +.mdc-slider .mdc-slider__tick-mark--active { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-on-primary, #fff); + opacity: 0.6; +} +.mdc-slider.mdc-slider--disabled .mdc-slider__tick-mark--active { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-on-primary, #fff); + opacity: 0.6; +} +.mdc-slider .mdc-slider__tick-mark--inactive { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-theme-primary, #6200ee); + opacity: 0.6; +} +.mdc-slider.mdc-slider--disabled .mdc-slider__tick-mark--inactive { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-theme-on-surface, #000); + opacity: 0.6; +} +.mdc-slider.mdc-slider--disabled { + opacity: 0.38; + cursor: auto; +} +.mdc-slider.mdc-slider--disabled .mdc-slider__thumb { + pointer-events: none; +} +.mdc-slider--discrete .mdc-slider__thumb, +.mdc-slider--discrete .mdc-slider__track--active_fill { + transition: -webkit-transform 80ms ease; + transition: transform 80ms ease; + transition: transform 80ms ease, -webkit-transform 80ms ease; +} +@media (prefers-reduced-motion) { + .mdc-slider--discrete .mdc-slider__thumb, +.mdc-slider--discrete .mdc-slider__track--active_fill { + transition: none; + } +} + +.mdc-slider__input { + cursor: pointer; + left: 0; + margin: 0; + height: 100%; + opacity: 0; + pointer-events: none; + position: absolute; + top: 0; + width: 100%; +} + +.mdc-snackbar { + z-index: 8; + margin: 8px; + display: none; + position: fixed; + right: 0; + bottom: 0; + left: 0; + align-items: center; + justify-content: center; + box-sizing: border-box; + pointer-events: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +.mdc-snackbar__surface { + background-color: #333333; +} + +.mdc-snackbar__label { + color: rgba(255, 255, 255, 0.87); +} + +.mdc-snackbar__surface { + min-width: 344px; +} +@media (max-width: 480px), (max-width: 344px) { + .mdc-snackbar__surface { + min-width: 100%; + } +} + +.mdc-snackbar__surface { + max-width: 672px; +} + +.mdc-snackbar__surface { + /* @alternate */ + box-shadow: 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12); +} + +.mdc-snackbar__surface { + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-small, 4px); +} + +.mdc-snackbar--opening, +.mdc-snackbar--open, +.mdc-snackbar--closing { + display: flex; +} + +.mdc-snackbar--open .mdc-snackbar__label, +.mdc-snackbar--open .mdc-snackbar__actions { + visibility: visible; +} + +.mdc-snackbar--leading { + justify-content: flex-start; +} + +.mdc-snackbar--stacked .mdc-snackbar__label { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 8px; + padding-bottom: 12px; +} +[dir=rtl] .mdc-snackbar--stacked .mdc-snackbar__label, .mdc-snackbar--stacked .mdc-snackbar__label[dir=rtl] { + /* @noflip */ + padding-left: 8px; + /* @noflip */ + padding-right: 16px; +} + +.mdc-snackbar--stacked .mdc-snackbar__surface { + flex-direction: column; + align-items: flex-start; +} +.mdc-snackbar--stacked .mdc-snackbar__actions { + align-self: flex-end; + margin-bottom: 8px; +} + +.mdc-snackbar__surface { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 8px; + display: flex; + align-items: center; + justify-content: flex-start; + box-sizing: border-box; + -webkit-transform: scale(0.8); + transform: scale(0.8); + opacity: 0; +} +.mdc-snackbar__surface::before { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 1px solid transparent; + border-radius: inherit; + content: ""; + pointer-events: none; +} +[dir=rtl] .mdc-snackbar__surface, .mdc-snackbar__surface[dir=rtl] { + /* @noflip */ + padding-left: 8px; + /* @noflip */ + padding-right: 0; +} + +.mdc-snackbar--open .mdc-snackbar__surface { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; + pointer-events: auto; + transition: opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1), transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1), transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1); +} +.mdc-snackbar--closing .mdc-snackbar__surface { + -webkit-transform: scale(1); + transform: scale(1); + transition: opacity 75ms 0ms cubic-bezier(0.4, 0, 1, 1); +} + +.mdc-snackbar__label { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-body2-font-size, 0.875rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-body2-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body2-font-weight, 400); + letter-spacing: 0.0178571429em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body2-letter-spacing, 0.0178571429em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body2-text-transform, inherit); + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 8px; + width: 100%; + flex-grow: 1; + box-sizing: border-box; + margin: 0; + visibility: hidden; + padding-top: 14px; + padding-bottom: 14px; +} +[dir=rtl] .mdc-snackbar__label, .mdc-snackbar__label[dir=rtl] { + /* @noflip */ + padding-left: 8px; + /* @noflip */ + padding-right: 16px; +} + +.mdc-snackbar__label::before { + display: inline; + content: attr(data-mdc-snackbar-label-text); +} + +.mdc-snackbar__actions { + display: flex; + flex-shrink: 0; + align-items: center; + box-sizing: border-box; + visibility: hidden; +} + +.mdc-snackbar__action:not(:disabled) { + color: #bb86fc; +} +.mdc-snackbar__action::before, .mdc-snackbar__action::after { + background-color: #bb86fc; + /* @alternate */ + background-color: var(--mdc-ripple-color, #bb86fc); +} +.mdc-snackbar__action:hover::before, .mdc-snackbar__action.mdc-ripple-surface--hover::before { + opacity: 0.08; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.08); +} +.mdc-snackbar__action.mdc-ripple-upgraded--background-focused::before, .mdc-snackbar__action:not(.mdc-ripple-upgraded):focus::before { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.24); +} +.mdc-snackbar__action:not(.mdc-ripple-upgraded)::after { + transition: opacity 150ms linear; +} +.mdc-snackbar__action:not(.mdc-ripple-upgraded):active::after { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.24); +} +.mdc-snackbar__action.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.24); +} + +.mdc-snackbar__dismiss { + color: rgba(255, 255, 255, 0.87); +} +.mdc-snackbar__dismiss .mdc-icon-button__ripple::before, .mdc-snackbar__dismiss .mdc-icon-button__ripple::after { + background-color: rgba(255, 255, 255, 0.87); + /* @alternate */ + background-color: var(--mdc-ripple-color, rgba(255, 255, 255, 0.87)); +} +.mdc-snackbar__dismiss:hover .mdc-icon-button__ripple::before, .mdc-snackbar__dismiss.mdc-ripple-surface--hover .mdc-icon-button__ripple::before { + opacity: 0.08; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.08); +} +.mdc-snackbar__dismiss.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple::before, .mdc-snackbar__dismiss:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple::before { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.24); +} +.mdc-snackbar__dismiss:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple::after { + transition: opacity 150ms linear; +} +.mdc-snackbar__dismiss:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple::after { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.24); +} +.mdc-snackbar__dismiss.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.24); +} + +.mdc-snackbar__dismiss.mdc-snackbar__dismiss { + width: 36px; + height: 36px; + padding: 6px; + font-size: 18px; +} + +.mdc-snackbar__action + .mdc-snackbar__dismiss { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: 0; +} +[dir=rtl] .mdc-snackbar__action + .mdc-snackbar__dismiss, .mdc-snackbar__action + .mdc-snackbar__dismiss[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: 8px; +} + +.mdc-switch__thumb-underlay { + /* @noflip */ + left: -14px; + /* @noflip */ + right: initial; + top: -17px; + width: 48px; + height: 48px; +} +[dir=rtl] .mdc-switch__thumb-underlay, .mdc-switch__thumb-underlay[dir=rtl] { + /* @noflip */ + left: initial; + /* @noflip */ + right: -14px; +} + +.mdc-switch__native-control { + width: 64px; + height: 48px; +} + +.mdc-switch { + display: inline-block; + position: relative; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.mdc-switch.mdc-switch--checked .mdc-switch__track { + background-color: #018786; + /* @alternate */ + background-color: var(--mdc-theme-secondary, #018786); +} +.mdc-switch.mdc-switch--checked .mdc-switch__thumb { + background-color: #018786; + /* @alternate */ + background-color: var(--mdc-theme-secondary, #018786); + border-color: #018786; + /* @alternate */ + border-color: var(--mdc-theme-secondary, #018786); +} +.mdc-switch:not(.mdc-switch--checked) .mdc-switch__track { + background-color: #000; + /* @alternate */ + background-color: var(--mdc-theme-on-surface, #000); +} +.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-surface, #fff); + border-color: #fff; + /* @alternate */ + border-color: var(--mdc-theme-surface, #fff); +} + +.mdc-switch__native-control { + /* @noflip */ + left: 0; + /* @noflip */ + right: initial; + position: absolute; + top: 0; + margin: 0; + opacity: 0; + cursor: pointer; + pointer-events: auto; + transition: -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); +} +[dir=rtl] .mdc-switch__native-control, .mdc-switch__native-control[dir=rtl] { + /* @noflip */ + left: initial; + /* @noflip */ + right: 0; +} + +.mdc-switch__track { + box-sizing: border-box; + width: 36px; + height: 14px; + border: 1px solid transparent; + border-radius: 7px; + opacity: 0.38; + transition: opacity 90ms cubic-bezier(0.4, 0, 0.2, 1), background-color 90ms cubic-bezier(0.4, 0, 0.2, 1), border-color 90ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.mdc-switch__thumb-underlay { + display: flex; + position: absolute; + align-items: center; + justify-content: center; + -webkit-transform: translateX(0); + transform: translateX(0); + transition: background-color 90ms cubic-bezier(0.4, 0, 0.2, 1), border-color 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 90ms cubic-bezier(0.4, 0, 0.2, 1), background-color 90ms cubic-bezier(0.4, 0, 0.2, 1), border-color 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 90ms cubic-bezier(0.4, 0, 0.2, 1), background-color 90ms cubic-bezier(0.4, 0, 0.2, 1), border-color 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.mdc-switch__thumb { + /* @alternate */ + 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-sizing: border-box; + width: 20px; + height: 20px; + border: 10px solid; + border-radius: 50%; + pointer-events: none; + z-index: 1; +} + +.mdc-switch--checked .mdc-switch__track { + opacity: 0.54; +} +.mdc-switch--checked .mdc-switch__thumb-underlay { + -webkit-transform: translateX(16px); + transform: translateX(16px); +} +[dir=rtl] .mdc-switch--checked .mdc-switch__thumb-underlay, .mdc-switch--checked .mdc-switch__thumb-underlay[dir=rtl] { + -webkit-transform: translateX(-16px); + transform: translateX(-16px); +} + +.mdc-switch--checked .mdc-switch__native-control { + -webkit-transform: translateX(-16px); + transform: translateX(-16px); +} +[dir=rtl] .mdc-switch--checked .mdc-switch__native-control, .mdc-switch--checked .mdc-switch__native-control[dir=rtl] { + -webkit-transform: translateX(16px); + transform: translateX(16px); +} + +.mdc-switch--disabled { + opacity: 0.38; + pointer-events: none; +} +.mdc-switch--disabled .mdc-switch__thumb { + border-width: 1px; +} +.mdc-switch--disabled .mdc-switch__native-control { + cursor: default; + pointer-events: none; +} + +.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay::before, .mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay::after { + background-color: #9e9e9e; + /* @alternate */ + background-color: var(--mdc-ripple-color, #9e9e9e); +} +.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay:hover::before, .mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay.mdc-ripple-surface--hover::before { + opacity: 0.08; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.08); +} +.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay.mdc-ripple-upgraded--background-focused::before, .mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded):focus::before { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.24); +} +.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded)::after { + transition: opacity 150ms linear; +} +.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded):active::after { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.24); +} +.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.24); +} + +.mdc-switch__thumb-underlay { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-switch__thumb-underlay::before, .mdc-switch__thumb-underlay::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-switch__thumb-underlay::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-switch__thumb-underlay::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-switch__thumb-underlay.mdc-ripple-upgraded::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-switch__thumb-underlay.mdc-ripple-upgraded::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-switch__thumb-underlay.mdc-ripple-upgraded--unbounded::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-switch__thumb-underlay.mdc-ripple-upgraded--foreground-activation::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-switch__thumb-underlay.mdc-ripple-upgraded--foreground-deactivation::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-switch__thumb-underlay::before, .mdc-switch__thumb-underlay::after { + top: calc(50% - 50%); + /* @noflip */ + left: calc(50% - 50%); + width: 100%; + height: 100%; +} +.mdc-switch__thumb-underlay.mdc-ripple-upgraded::before, .mdc-switch__thumb-underlay.mdc-ripple-upgraded::after { + top: var(--mdc-ripple-top, calc(50% - 50%)); + /* @noflip */ + left: var(--mdc-ripple-left, calc(50% - 50%)); + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-switch__thumb-underlay.mdc-ripple-upgraded::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-switch__thumb-underlay::before, .mdc-switch__thumb-underlay::after { + background-color: #018786; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786)); +} +.mdc-switch__thumb-underlay:hover::before, .mdc-switch__thumb-underlay.mdc-ripple-surface--hover::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-switch__thumb-underlay.mdc-ripple-upgraded--background-focused::before, .mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded):focus::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded)::after { + transition: opacity 150ms linear; +} +.mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded):active::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-switch__thumb-underlay.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} + +.mdc-tab { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-button-font-size, 0.875rem); + line-height: 2.25rem; + /* @alternate */ + line-height: var(--mdc-typography-button-line-height, 2.25rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-button-font-weight, 500); + letter-spacing: 0.0892857143em; + /* @alternate */ + letter-spacing: var(--mdc-typography-button-letter-spacing, 0.0892857143em); + text-decoration: none; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-button-text-decoration, none); + text-decoration: var(--mdc-typography-button-text-decoration, none); + text-transform: uppercase; + /* @alternate */ + text-transform: var(--mdc-typography-button-text-transform, uppercase); + position: relative; +} +.mdc-tab .mdc-tab__text-label { + color: rgba(0, 0, 0, 0.6); +} +.mdc-tab .mdc-tab__icon { + color: rgba(0, 0, 0, 0.54); + fill: currentColor; +} + +.mdc-tab__content { + position: relative; +} + +.mdc-tab__icon { + width: 24px; + height: 24px; + font-size: 24px; +} + +.mdc-tab--active .mdc-tab__text-label { + color: #6200ee; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee); +} +.mdc-tab--active .mdc-tab__icon { + color: #6200ee; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee); + fill: currentColor; +} + +.mdc-tab { + background: none; +} + +.mdc-tab { + min-width: 90px; + padding-right: 24px; + padding-left: 24px; + display: flex; + flex: 1 0 auto; + justify-content: center; + box-sizing: border-box; + margin: 0; + padding-top: 0; + padding-bottom: 0; + border: none; + outline: none; + text-align: center; + white-space: nowrap; + cursor: pointer; + -webkit-appearance: none; + z-index: 1; +} +.mdc-tab::-moz-focus-inner { + padding: 0; + border: 0; +} + +.mdc-tab--min-width { + flex: 0 1 auto; +} + +.mdc-tab__content { + display: flex; + align-items: center; + justify-content: center; + height: inherit; + pointer-events: none; +} + +.mdc-tab__text-label { + transition: 150ms color linear; + display: inline-block; + line-height: 1; + z-index: 2; +} + +.mdc-tab__icon { + transition: 150ms color linear; + z-index: 2; +} + +.mdc-tab--stacked .mdc-tab__content { + flex-direction: column; + align-items: center; + justify-content: center; +} +.mdc-tab--stacked .mdc-tab__text-label { + padding-top: 6px; + padding-bottom: 4px; +} + +.mdc-tab--active .mdc-tab__text-label, +.mdc-tab--active .mdc-tab__icon { + transition-delay: 100ms; +} + +.mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon + .mdc-tab__text-label { + /* @noflip */ + padding-left: 8px; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon + .mdc-tab__text-label, .mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon + .mdc-tab__text-label[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 8px; +} + +.mdc-tab { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +.mdc-tab .mdc-tab__ripple::before, +.mdc-tab .mdc-tab__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-tab .mdc-tab__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-tab .mdc-tab__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-tab.mdc-ripple-upgraded .mdc-tab__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-tab.mdc-ripple-upgraded .mdc-tab__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-tab.mdc-ripple-upgraded--unbounded .mdc-tab__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-tab.mdc-ripple-upgraded--foreground-activation .mdc-tab__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-tab.mdc-ripple-upgraded--foreground-deactivation .mdc-tab__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-tab .mdc-tab__ripple::before, +.mdc-tab .mdc-tab__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +.mdc-tab.mdc-ripple-upgraded .mdc-tab__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} +.mdc-tab .mdc-tab__ripple::before, .mdc-tab .mdc-tab__ripple::after { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee)); +} +.mdc-tab:hover .mdc-tab__ripple::before, .mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple::before, .mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple::after { + transition: opacity 150ms linear; +} +.mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple::after { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.12); +} +.mdc-tab.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.12); +} + +.mdc-tab__ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow: hidden; + will-change: transform, opacity; +} + +/** + * @license + * Copyright 2018 Google Inc. + * + * 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. + */ +.mdc-tab-bar { + width: 100%; +} + +.mdc-tab { + height: 48px; +} + +.mdc-tab--stacked { + height: 72px; +} + +/** + * @license + * Copyright 2018 Google Inc. + * + * 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. + */ +.mdc-tab-indicator .mdc-tab-indicator__content--underline { + border-color: #6200ee; + /* @alternate */ + border-color: var(--mdc-theme-primary, #6200ee); +} +.mdc-tab-indicator .mdc-tab-indicator__content--icon { + color: #018786; + /* @alternate */ + color: var(--mdc-theme-secondary, #018786); +} +.mdc-tab-indicator .mdc-tab-indicator__content--underline { + border-top-width: 2px; +} +.mdc-tab-indicator .mdc-tab-indicator__content--icon { + height: 34px; + font-size: 34px; +} + +.mdc-tab-indicator { + display: flex; + position: absolute; + top: 0; + left: 0; + justify-content: center; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 1; +} + +.mdc-tab-indicator__content { + -webkit-transform-origin: left; + transform-origin: left; + opacity: 0; +} + +.mdc-tab-indicator__content--underline { + align-self: flex-end; + box-sizing: border-box; + width: 100%; + border-top-style: solid; +} + +.mdc-tab-indicator__content--icon { + align-self: center; + margin: 0 auto; +} + +.mdc-tab-indicator--active .mdc-tab-indicator__content { + opacity: 1; +} + +.mdc-tab-indicator .mdc-tab-indicator__content { + transition: 250ms -webkit-transform cubic-bezier(0.4, 0, 0.2, 1); + transition: 250ms transform cubic-bezier(0.4, 0, 0.2, 1); + transition: 250ms transform cubic-bezier(0.4, 0, 0.2, 1), 250ms -webkit-transform cubic-bezier(0.4, 0, 0.2, 1); +} + +.mdc-tab-indicator--no-transition .mdc-tab-indicator__content { + transition: none; +} + +.mdc-tab-indicator--fade .mdc-tab-indicator__content { + transition: 150ms opacity linear; +} + +.mdc-tab-indicator--active.mdc-tab-indicator--fade .mdc-tab-indicator__content { + transition-delay: 100ms; +} + +/** + * @license + * Copyright 2018 Google Inc. + * + * 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. + */ +.mdc-tab-scroller { + overflow-y: hidden; +} +.mdc-tab-scroller.mdc-tab-scroller--animating .mdc-tab-scroller__scroll-content { + transition: 250ms -webkit-transform cubic-bezier(0.4, 0, 0.2, 1); + transition: 250ms transform cubic-bezier(0.4, 0, 0.2, 1); + transition: 250ms transform cubic-bezier(0.4, 0, 0.2, 1), 250ms -webkit-transform cubic-bezier(0.4, 0, 0.2, 1); +} + +.mdc-tab-scroller__test { + position: absolute; + top: -9999px; + width: 100px; + height: 100px; + overflow-x: scroll; +} + +.mdc-tab-scroller__scroll-area { + -webkit-overflow-scrolling: touch; + display: flex; + overflow-x: hidden; +} + +.mdc-tab-scroller__scroll-area::-webkit-scrollbar, +.mdc-tab-scroller__test::-webkit-scrollbar { + display: none; +} + +.mdc-tab-scroller__scroll-area--scroll { + overflow-x: scroll; +} + +.mdc-tab-scroller__scroll-content { + position: relative; + display: flex; + flex: 1 0 auto; + -webkit-transform: none; + transform: none; + will-change: transform; +} + +.mdc-tab-scroller--align-start .mdc-tab-scroller__scroll-content { + justify-content: flex-start; +} + +.mdc-tab-scroller--align-end .mdc-tab-scroller__scroll-content { + justify-content: flex-end; +} + +.mdc-tab-scroller--align-center .mdc-tab-scroller__scroll-content { + justify-content: center; +} + +.mdc-tab-scroller--animating .mdc-tab-scroller__scroll-area { + -webkit-overflow-scrolling: auto; +} + +.mdc-text-field--filled { + --mdc-ripple-fg-size: 0; + --mdc-ripple-left: 0; + --mdc-ripple-top: 0; + --mdc-ripple-fg-scale: 1; + --mdc-ripple-fg-translate-end: 0; + --mdc-ripple-fg-translate-start: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + will-change: transform, opacity; +} +.mdc-text-field--filled .mdc-text-field__ripple::before, +.mdc-text-field--filled .mdc-text-field__ripple::after { + position: absolute; + border-radius: 50%; + opacity: 0; + pointer-events: none; + content: ""; +} +.mdc-text-field--filled .mdc-text-field__ripple::before { + transition: opacity 15ms linear, background-color 15ms linear; + z-index: 1; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 1); +} +.mdc-text-field--filled .mdc-text-field__ripple::after { + z-index: 0; + /* @alternate */ + z-index: var(--mdc-ripple-z-index, 0); +} +.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::before { + -webkit-transform: scale(var(--mdc-ripple-fg-scale, 1)); + transform: scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::after { + top: 0; + /* @noflip */ + left: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: center center; + transform-origin: center center; +} +.mdc-text-field--filled.mdc-ripple-upgraded--unbounded .mdc-text-field__ripple::after { + top: var(--mdc-ripple-top, 0); + /* @noflip */ + left: var(--mdc-ripple-left, 0); +} +.mdc-text-field--filled.mdc-ripple-upgraded--foreground-activation .mdc-text-field__ripple::after { + -webkit-animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; + animation: mdc-ripple-fg-radius-in 225ms forwards, mdc-ripple-fg-opacity-in 75ms forwards; +} +.mdc-text-field--filled.mdc-ripple-upgraded--foreground-deactivation .mdc-text-field__ripple::after { + -webkit-animation: mdc-ripple-fg-opacity-out 150ms; + animation: mdc-ripple-fg-opacity-out 150ms; + -webkit-transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); + transform: translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1)); +} +.mdc-text-field--filled .mdc-text-field__ripple::before, +.mdc-text-field--filled .mdc-text-field__ripple::after { + top: calc(50% - 100%); + /* @noflip */ + left: calc(50% - 100%); + width: 200%; + height: 200%; +} +.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::after { + width: var(--mdc-ripple-fg-size, 100%); + height: var(--mdc-ripple-fg-size, 100%); +} + +.mdc-text-field__ripple { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; +} + +.mdc-text-field { + border-top-left-radius: 4px; + /* @alternate */ + border-top-left-radius: var(--mdc-shape-small, 4px); + border-top-right-radius: 4px; + /* @alternate */ + border-top-right-radius: var(--mdc-shape-small, 4px); + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + display: inline-flex; + align-items: baseline; + padding: 0 16px; + position: relative; + box-sizing: border-box; + overflow: hidden; + /* @alternate */ + will-change: opacity, transform, color; +} +.mdc-text-field:not(.mdc-text-field--disabled) .mdc-floating-label { + color: rgba(0, 0, 0, 0.6); +} +.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input { + color: rgba(0, 0, 0, 0.87); +} +@media all { + .mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder { + color: rgba(0, 0, 0, 0.54); + } + .mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.54); + } + .mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::-ms-input-placeholder { + color: rgba(0, 0, 0, 0.54); + } + .mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder { + color: rgba(0, 0, 0, 0.54); + } +} +@media all { + .mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.54); + } +} +.mdc-text-field .mdc-text-field__input { + caret-color: #6200ee; + /* @alternate */ + caret-color: var(--mdc-theme-primary, #6200ee); +} +.mdc-text-field:not(.mdc-text-field--disabled) + .mdc-text-field-helper-line .mdc-text-field-helper-text { + color: rgba(0, 0, 0, 0.6); +} +.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field-character-counter, +.mdc-text-field:not(.mdc-text-field--disabled) + .mdc-text-field-helper-line .mdc-text-field-character-counter { + color: rgba(0, 0, 0, 0.6); +} +.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--leading { + color: rgba(0, 0, 0, 0.54); +} +.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing { + color: rgba(0, 0, 0, 0.54); +} +.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--prefix { + color: rgba(0, 0, 0, 0.6); +} +.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--suffix { + color: rgba(0, 0, 0, 0.6); +} +.mdc-text-field .mdc-floating-label { + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + pointer-events: none; +} + +.mdc-text-field__input { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle1-font-size, 1rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle1-font-weight, 400); + letter-spacing: 0.009375em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle1-letter-spacing, 0.009375em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle1-text-transform, inherit); + height: 28px; + transition: opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1); + width: 100%; + min-width: 0; + border: none; + border-radius: 0; + background: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + padding: 0; +} +.mdc-text-field__input::-ms-clear { + display: none; +} +.mdc-text-field__input::-webkit-calendar-picker-indicator { + display: none; +} +.mdc-text-field__input:focus { + outline: none; +} +.mdc-text-field__input:invalid { + box-shadow: none; +} +@media all { + .mdc-text-field__input::-webkit-input-placeholder { + transition: opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1); + opacity: 0; + } + .mdc-text-field__input:-ms-input-placeholder { + transition: opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1); + opacity: 0; + } + .mdc-text-field__input::-ms-input-placeholder { + transition: opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1); + opacity: 0; + } + .mdc-text-field__input::placeholder { + transition: opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1); + opacity: 0; + } +} +@media all { + .mdc-text-field__input:-ms-input-placeholder { + transition: opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1); + opacity: 0; + } +} +@media all { + .mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder, .mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder { + transition-delay: 40ms; + transition-duration: 110ms; + opacity: 1; + } + .mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder, .mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder { + transition-delay: 40ms; + transition-duration: 110ms; + opacity: 1; + } + .mdc-text-field--no-label .mdc-text-field__input::-ms-input-placeholder, .mdc-text-field--focused .mdc-text-field__input::-ms-input-placeholder { + transition-delay: 40ms; + transition-duration: 110ms; + opacity: 1; + } + .mdc-text-field--no-label .mdc-text-field__input::placeholder, .mdc-text-field--focused .mdc-text-field__input::placeholder { + transition-delay: 40ms; + transition-duration: 110ms; + opacity: 1; + } +} +@media all { + .mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder, .mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder { + transition-delay: 40ms; + transition-duration: 110ms; + opacity: 1; + } +} + +.mdc-text-field__affix { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle1-font-size, 1rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle1-font-weight, 400); + letter-spacing: 0.009375em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle1-letter-spacing, 0.009375em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle1-text-transform, inherit); + height: 28px; + transition: opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1); + opacity: 0; + white-space: nowrap; +} +.mdc-text-field--label-floating .mdc-text-field__affix, .mdc-text-field--no-label .mdc-text-field__affix { + opacity: 1; +} +@supports (-webkit-hyphens: none) { + .mdc-text-field--outlined .mdc-text-field__affix { + align-items: center; + align-self: center; + display: inline-flex; + height: 100%; + } +} + +.mdc-text-field__affix--prefix { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 2px; +} +[dir=rtl] .mdc-text-field__affix--prefix, .mdc-text-field__affix--prefix[dir=rtl] { + /* @noflip */ + padding-left: 2px; + /* @noflip */ + padding-right: 0; +} + +.mdc-text-field--end-aligned .mdc-text-field__affix--prefix { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 12px; +} +[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--prefix, .mdc-text-field--end-aligned .mdc-text-field__affix--prefix[dir=rtl] { + /* @noflip */ + padding-left: 12px; + /* @noflip */ + padding-right: 0; +} + +.mdc-text-field__affix--suffix { + /* @noflip */ + padding-left: 12px; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-text-field__affix--suffix, .mdc-text-field__affix--suffix[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 12px; +} + +.mdc-text-field--end-aligned .mdc-text-field__affix--suffix { + /* @noflip */ + padding-left: 2px; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--suffix, .mdc-text-field--end-aligned .mdc-text-field__affix--suffix[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 2px; +} + +.mdc-text-field--filled { + height: 56px; +} +.mdc-text-field--filled .mdc-text-field__ripple::before, +.mdc-text-field--filled .mdc-text-field__ripple::after { + background-color: rgba(0, 0, 0, 0.87); + /* @alternate */ + background-color: var(--mdc-ripple-color, rgba(0, 0, 0, 0.87)); +} +.mdc-text-field--filled:hover .mdc-text-field__ripple::before, .mdc-text-field--filled.mdc-ripple-surface--hover .mdc-text-field__ripple::before { + opacity: 0.04; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.04); +} +.mdc-text-field--filled.mdc-ripple-upgraded--background-focused .mdc-text-field__ripple::before, .mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before { + transition-duration: 75ms; + opacity: 0.12; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.12); +} +.mdc-text-field--filled::before { + display: inline-block; + width: 0; + height: 40px; + content: ""; + vertical-align: 0; +} +.mdc-text-field--filled:not(.mdc-text-field--disabled) { + background-color: whitesmoke; +} +.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before { + border-bottom-color: rgba(0, 0, 0, 0.42); +} +.mdc-text-field--filled:not(.mdc-text-field--disabled):hover .mdc-line-ripple::before { + border-bottom-color: rgba(0, 0, 0, 0.87); +} +.mdc-text-field--filled .mdc-line-ripple::after { + border-bottom-color: #6200ee; + /* @alternate */ + border-bottom-color: var(--mdc-theme-primary, #6200ee); +} +.mdc-text-field--filled .mdc-floating-label { + /* @noflip */ + left: 16px; + /* @noflip */ + right: initial; +} +[dir=rtl] .mdc-text-field--filled .mdc-floating-label, .mdc-text-field--filled .mdc-floating-label[dir=rtl] { + /* @noflip */ + left: initial; + /* @noflip */ + right: 16px; +} + +.mdc-text-field--filled .mdc-floating-label--float-above { + -webkit-transform: translateY(-106%) scale(0.75); + transform: translateY(-106%) scale(0.75); +} +.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input { + height: 100%; +} +.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label { + display: none; +} +.mdc-text-field--filled.mdc-text-field--no-label::before { + display: none; +} +@supports (-webkit-hyphens: none) { + .mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__affix { + align-items: center; + align-self: center; + display: inline-flex; + height: 100%; + } +} + +.mdc-text-field--outlined { + height: 56px; + overflow: visible; +} +.mdc-text-field--outlined .mdc-floating-label--float-above { + -webkit-transform: translateY(-37.25px) scale(1); + transform: translateY(-37.25px) scale(1); +} +.mdc-text-field--outlined .mdc-floating-label--float-above { + font-size: 0.75rem; +} +.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + -webkit-transform: translateY(-34.75px) scale(0.75); + transform: translateY(-34.75px) scale(0.75); +} +.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + font-size: 1rem; +} +.mdc-text-field--outlined .mdc-floating-label--shake { + -webkit-animation: mdc-floating-label-shake-float-above-text-field-outlined 250ms 1; + animation: mdc-floating-label-shake-float-above-text-field-outlined 250ms 1; +} +@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined { + 0% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + } +} +@keyframes mdc-floating-label-shake-float-above-text-field-outlined { + 0% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75); + } +} +.mdc-text-field--outlined .mdc-text-field__input { + height: 100%; +} +.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__leading, +.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__notch, +.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing { + border-color: rgba(0, 0, 0, 0.38); +} +.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading, +.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch, +.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing { + border-color: rgba(0, 0, 0, 0.87); +} +.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading, +.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch, +.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing { + border-color: #6200ee; + /* @alternate */ + border-color: var(--mdc-theme-primary, #6200ee); +} +.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading { + /* @noflip */ + border-top-left-radius: 4px; + /* @alternate */ + /* @noflip */ + border-top-left-radius: var(--mdc-shape-small, 4px); + /* @noflip */ + border-top-right-radius: 0; + /* @noflip */ + border-bottom-right-radius: 0; + /* @noflip */ + border-bottom-left-radius: 4px; + /* @alternate */ + /* @noflip */ + border-bottom-left-radius: var(--mdc-shape-small, 4px); +} +[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading, .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl] { + /* @noflip */ + border-top-left-radius: 0; + /* @noflip */ + border-top-right-radius: 4px; + /* @alternate */ + /* @noflip */ + border-top-right-radius: var(--mdc-shape-small, 4px); + /* @noflip */ + border-bottom-right-radius: 4px; + /* @alternate */ + /* @noflip */ + border-bottom-right-radius: var(--mdc-shape-small, 4px); + /* @noflip */ + border-bottom-left-radius: 0; +} + +@supports (top: max(0%)) { + .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading { + width: max(12px, var(--mdc-shape-small, 4px)); + } +} +@supports (top: max(0%)) { + .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch { + max-width: calc(100% - max(12px, var(--mdc-shape-small, 4px)) * 2); + } +} +.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing { + /* @noflip */ + border-top-left-radius: 0; + /* @noflip */ + border-top-right-radius: 4px; + /* @alternate */ + /* @noflip */ + border-top-right-radius: var(--mdc-shape-small, 4px); + /* @noflip */ + border-bottom-right-radius: 4px; + /* @alternate */ + /* @noflip */ + border-bottom-right-radius: var(--mdc-shape-small, 4px); + /* @noflip */ + border-bottom-left-radius: 0; +} +[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing, .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl] { + /* @noflip */ + border-top-left-radius: 4px; + /* @alternate */ + /* @noflip */ + border-top-left-radius: var(--mdc-shape-small, 4px); + /* @noflip */ + border-top-right-radius: 0; + /* @noflip */ + border-bottom-right-radius: 0; + /* @noflip */ + border-bottom-left-radius: 4px; + /* @alternate */ + /* @noflip */ + border-bottom-left-radius: var(--mdc-shape-small, 4px); +} + +@supports (top: max(0%)) { + .mdc-text-field--outlined { + /* @noflip */ + padding-left: max(16px, calc(var(--mdc-shape-small, 4px) + 4px)); + } +} +@supports (top: max(0%)) { + .mdc-text-field--outlined { + /* @noflip */ + padding-right: max(16px, var(--mdc-shape-small, 4px)); + } +} +@supports (top: max(0%)) { + .mdc-text-field--outlined + .mdc-text-field-helper-line { + /* @noflip */ + padding-left: max(16px, calc(var(--mdc-shape-small, 4px) + 4px)); + } +} +@supports (top: max(0%)) { + .mdc-text-field--outlined + .mdc-text-field-helper-line { + /* @noflip */ + padding-right: max(16px, var(--mdc-shape-small, 4px)); + } +} +.mdc-text-field--outlined.mdc-text-field--with-leading-icon { + /* @noflip */ + padding-left: 0; +} +@supports (top: max(0%)) { + .mdc-text-field--outlined.mdc-text-field--with-leading-icon { + /* @noflip */ + padding-right: max(16px, var(--mdc-shape-small, 4px)); + } +} +[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon, .mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl] { + /* @noflip */ + padding-right: 0; +} +@supports (top: max(0%)) { + [dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon, .mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl] { + /* @noflip */ + padding-left: max(16px, var(--mdc-shape-small, 4px)); + } +} + +.mdc-text-field--outlined.mdc-text-field--with-trailing-icon { + /* @noflip */ + padding-right: 0; +} +@supports (top: max(0%)) { + .mdc-text-field--outlined.mdc-text-field--with-trailing-icon { + /* @noflip */ + padding-left: max(16px, calc(var(--mdc-shape-small, 4px) + 4px)); + } +} +[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon, .mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl] { + /* @noflip */ + padding-left: 0; +} +@supports (top: max(0%)) { + [dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon, .mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl] { + /* @noflip */ + padding-right: max(16px, calc(var(--mdc-shape-small, 4px) + 4px)); + } +} + +.mdc-text-field--outlined.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 0; +} +.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch { + padding-top: 1px; +} +.mdc-text-field--outlined .mdc-text-field__ripple::before, +.mdc-text-field--outlined .mdc-text-field__ripple::after { + content: none; +} +.mdc-text-field--outlined .mdc-floating-label { + /* @noflip */ + left: 4px; + /* @noflip */ + right: initial; +} +[dir=rtl] .mdc-text-field--outlined .mdc-floating-label, .mdc-text-field--outlined .mdc-floating-label[dir=rtl] { + /* @noflip */ + left: initial; + /* @noflip */ + right: 4px; +} + +.mdc-text-field--outlined .mdc-text-field__input { + display: flex; + border: none !important; + background-color: transparent; +} +.mdc-text-field--outlined .mdc-notched-outline { + z-index: 1; +} + +.mdc-text-field--textarea { + flex-direction: column; + align-items: center; + width: auto; + height: auto; + padding: 0; + transition: none; +} +.mdc-text-field--textarea .mdc-floating-label { + top: 19px; +} +.mdc-text-field--textarea .mdc-floating-label:not(.mdc-floating-label--float-above) { + -webkit-transform: none; + transform: none; +} +.mdc-text-field--textarea .mdc-text-field__input { + flex-grow: 1; + height: auto; + min-height: 1.5rem; + overflow-x: hidden; + overflow-y: auto; + box-sizing: border-box; + resize: none; + padding: 0 16px; + line-height: 1.5rem; +} +.mdc-text-field--textarea.mdc-text-field--filled::before { + display: none; +} +.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--float-above { + -webkit-transform: translateY(-10.25px) scale(0.75); + transform: translateY(-10.25px) scale(0.75); +} +.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--shake { + -webkit-animation: mdc-floating-label-shake-float-above-textarea-filled 250ms 1; + animation: mdc-floating-label-shake-float-above-textarea-filled 250ms 1; +} +@-webkit-keyframes mdc-floating-label-shake-float-above-textarea-filled { + 0% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75); + transform: translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75); + transform: translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75); + } +} +@keyframes mdc-floating-label-shake-float-above-textarea-filled { + 0% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75); + transform: translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75); + transform: translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75); + } +} +.mdc-text-field--textarea.mdc-text-field--filled .mdc-text-field__input { + margin-top: 23px; + margin-bottom: 9px; +} +.mdc-text-field--textarea.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input { + margin-top: 16px; + margin-bottom: 16px; +} +.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch { + padding-top: 0; +} +.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above { + -webkit-transform: translateY(-27.25px) scale(1); + transform: translateY(-27.25px) scale(1); +} +.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above { + font-size: 0.75rem; +} +.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + -webkit-transform: translateY(-24.75px) scale(0.75); + transform: translateY(-24.75px) scale(0.75); +} +.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + font-size: 1rem; +} +.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--shake { + -webkit-animation: mdc-floating-label-shake-float-above-textarea-outlined 250ms 1; + animation: mdc-floating-label-shake-float-above-textarea-outlined 250ms 1; +} +@-webkit-keyframes mdc-floating-label-shake-float-above-textarea-outlined { + 0% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + } +} +@keyframes mdc-floating-label-shake-float-above-textarea-outlined { + 0% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + transform: translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75); + } +} +.mdc-text-field--textarea.mdc-text-field--outlined .mdc-text-field__input { + margin-top: 16px; + margin-bottom: 16px; +} +.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label { + top: 18px; +} +.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field__input { + margin-bottom: 2px; +} +.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter { + align-self: flex-end; + padding: 0 16px; +} +.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::after { + display: inline-block; + width: 0; + height: 16px; + content: ""; + vertical-align: -16px; +} +.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::before { + display: none; +} + +.mdc-text-field__resizer { + align-self: stretch; + display: inline-flex; + flex-direction: column; + flex-grow: 1; + max-height: 100%; + max-width: 100%; + min-height: 56px; + min-width: -webkit-fit-content; + min-width: -moz-fit-content; + min-width: fit-content; + /* @alternate */ + min-width: -moz-available; + /* @alternate */ + min-width: -webkit-fill-available; + overflow: hidden; + resize: both; +} +.mdc-text-field--filled .mdc-text-field__resizer { + -webkit-transform: translateY(-1px); + transform: translateY(-1px); +} +.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field__input, +.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field-character-counter { + -webkit-transform: translateY(1px); + transform: translateY(1px); +} +.mdc-text-field--outlined .mdc-text-field__resizer { + -webkit-transform: translateX(-1px) translateY(-1px); + transform: translateX(-1px) translateY(-1px); +} +[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer, .mdc-text-field--outlined .mdc-text-field__resizer[dir=rtl] { + -webkit-transform: translateX(1px) translateY(-1px); + transform: translateX(1px) translateY(-1px); +} + +.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input, +.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter { + -webkit-transform: translateX(1px) translateY(1px); + transform: translateX(1px) translateY(1px); +} +[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input, [dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter, .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input[dir=rtl], .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter[dir=rtl] { + -webkit-transform: translateX(-1px) translateY(1px); + transform: translateX(-1px) translateY(1px); +} + +.mdc-text-field--with-leading-icon { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 16px; +} +[dir=rtl] .mdc-text-field--with-leading-icon, .mdc-text-field--with-leading-icon[dir=rtl] { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 0; +} + +.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label { + max-width: calc(100% - 48px); + /* @noflip */ + left: 48px; + /* @noflip */ + right: initial; +} +[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label, .mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label[dir=rtl] { + /* @noflip */ + left: initial; + /* @noflip */ + right: 48px; +} + +.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label--float-above { + max-width: calc(100% / 0.75 - 64px / 0.75); +} +.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label { + /* @noflip */ + left: 36px; + /* @noflip */ + right: initial; +} +[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label, .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label[dir=rtl] { + /* @noflip */ + left: initial; + /* @noflip */ + right: 36px; +} + +.mdc-text-field--with-leading-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch { + max-width: calc(100% - 60px); +} +.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above { + -webkit-transform: translateY(-37.25px) translateX(-32px) scale(1); + transform: translateY(-37.25px) translateX(-32px) scale(1); +} +[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above, .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above[dir=rtl] { + -webkit-transform: translateY(-37.25px) translateX(32px) scale(1); + transform: translateY(-37.25px) translateX(32px) scale(1); +} + +.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above { + font-size: 0.75rem; +} +.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + -webkit-transform: translateY(-34.75px) translateX(-32px) scale(0.75); + transform: translateY(-34.75px) translateX(-32px) scale(0.75); +} +[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above, [dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above, .mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl], .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl] { + -webkit-transform: translateY(-34.75px) translateX(32px) scale(0.75); + transform: translateY(-34.75px) translateX(32px) scale(0.75); +} + +.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above, +.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above { + font-size: 1rem; +} +.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake { + -webkit-animation: mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1; + animation: mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1; +} +@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon { + 0% { + -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + } +} +@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon { + 0% { + -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75); + } +} +[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake, .mdc-text-field--with-leading-icon.mdc-text-field--outlined[dir=rtl] .mdc-floating-label--shake { + -webkit-animation: mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1; + animation: mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1; +} + +@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl { + 0% { + -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + } +} + +@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl { + 0% { + -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + } + 33% { + -webkit-animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819); + -webkit-transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75); + } + 66% { + -webkit-animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + animation-timing-function: cubic-bezier(0.302435, 0.381352, 0.55, 0.956352); + -webkit-transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75); + } + 100% { + -webkit-transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + transform: translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75); + } +} + +.mdc-text-field--with-trailing-icon { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-text-field--with-trailing-icon, .mdc-text-field--with-trailing-icon[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 16px; +} + +.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label { + max-width: calc(100% - 64px); +} +.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above { + max-width: calc(100% / 0.75 - 64px / 0.75); +} +.mdc-text-field--with-trailing-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch { + max-width: calc(100% - 60px); +} + +.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 0; +} +.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label { + max-width: calc(100% - 96px); +} +.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above { + max-width: calc(100% / 0.75 - 96px / 0.75); +} + +.mdc-text-field-helper-line { + display: flex; + justify-content: space-between; + box-sizing: border-box; +} +.mdc-text-field + .mdc-text-field-helper-line { + padding-right: 16px; + padding-left: 16px; +} + +.mdc-form-field > .mdc-text-field + label { + align-self: flex-start; +} + +.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label { + color: rgba(98, 0, 238, 0.87); +} +.mdc-text-field--focused .mdc-notched-outline__leading, +.mdc-text-field--focused .mdc-notched-outline__notch, +.mdc-text-field--focused .mdc-notched-outline__trailing { + border-width: 2px; +} +.mdc-text-field--focused + .mdc-text-field-helper-line .mdc-text-field-helper-text:not(.mdc-text-field-helper-text--validation-msg) { + opacity: 1; +} +.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch { + padding-top: 2px; +} +.mdc-text-field--focused.mdc-text-field--outlined.mdc-text-field--textarea .mdc-notched-outline--notched .mdc-notched-outline__notch { + padding-top: 0; +} + +.mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-line-ripple::before { + border-bottom-color: #b00020; + /* @alternate */ + border-bottom-color: var(--mdc-theme-error, #b00020); +} +.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after { + border-bottom-color: #b00020; + /* @alternate */ + border-bottom-color: var(--mdc-theme-error, #b00020); +} +.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label { + color: #b00020; + /* @alternate */ + color: var(--mdc-theme-error, #b00020); +} +.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--invalid + .mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg { + color: #b00020; + /* @alternate */ + color: var(--mdc-theme-error, #b00020); +} +.mdc-text-field--invalid .mdc-text-field__input { + caret-color: #b00020; + /* @alternate */ + caret-color: var(--mdc-theme-error, #b00020); +} +.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing { + color: #b00020; + /* @alternate */ + color: var(--mdc-theme-error, #b00020); +} +.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::before { + border-bottom-color: #b00020; + /* @alternate */ + border-bottom-color: var(--mdc-theme-error, #b00020); +} +.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__leading, +.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__notch, +.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing { + border-color: #b00020; + /* @alternate */ + border-color: var(--mdc-theme-error, #b00020); +} +.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading, +.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch, +.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing { + border-color: #b00020; + /* @alternate */ + border-color: var(--mdc-theme-error, #b00020); +} +.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading, +.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch, +.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing { + border-color: #b00020; + /* @alternate */ + border-color: var(--mdc-theme-error, #b00020); +} +.mdc-text-field--invalid + .mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg { + opacity: 1; +} + +.mdc-text-field--disabled { + pointer-events: none; +} +.mdc-text-field--disabled .mdc-text-field__input { + color: rgba(0, 0, 0, 0.38); +} +@media all { + .mdc-text-field--disabled .mdc-text-field__input::-webkit-input-placeholder { + color: rgba(0, 0, 0, 0.38); + } + .mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.38); + } + .mdc-text-field--disabled .mdc-text-field__input::-ms-input-placeholder { + color: rgba(0, 0, 0, 0.38); + } + .mdc-text-field--disabled .mdc-text-field__input::placeholder { + color: rgba(0, 0, 0, 0.38); + } +} +@media all { + .mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder { + color: rgba(0, 0, 0, 0.38); + } +} +.mdc-text-field--disabled .mdc-floating-label { + color: rgba(0, 0, 0, 0.38); +} +.mdc-text-field--disabled + .mdc-text-field-helper-line .mdc-text-field-helper-text { + color: rgba(0, 0, 0, 0.38); +} +.mdc-text-field--disabled .mdc-text-field-character-counter, +.mdc-text-field--disabled + .mdc-text-field-helper-line .mdc-text-field-character-counter { + color: rgba(0, 0, 0, 0.38); +} +.mdc-text-field--disabled .mdc-text-field__icon--leading { + color: rgba(0, 0, 0, 0.3); +} +.mdc-text-field--disabled .mdc-text-field__icon--trailing { + color: rgba(0, 0, 0, 0.3); +} +.mdc-text-field--disabled .mdc-text-field__affix--prefix { + color: rgba(0, 0, 0, 0.38); +} +.mdc-text-field--disabled .mdc-text-field__affix--suffix { + color: rgba(0, 0, 0, 0.38); +} +.mdc-text-field--disabled .mdc-line-ripple::before { + border-bottom-color: rgba(0, 0, 0, 0.06); +} +.mdc-text-field--disabled .mdc-notched-outline__leading, +.mdc-text-field--disabled .mdc-notched-outline__notch, +.mdc-text-field--disabled .mdc-notched-outline__trailing { + border-color: rgba(0, 0, 0, 0.06); +} +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-text-field--disabled .mdc-text-field__input::-webkit-input-placeholder { + color: GrayText; + } + .mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder { + color: GrayText; + } + .mdc-text-field--disabled .mdc-text-field__input::-ms-input-placeholder { + color: GrayText; + } + .mdc-text-field--disabled .mdc-text-field__input::placeholder { + color: GrayText; + } +} +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder { + color: GrayText; + } +} +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-text-field--disabled .mdc-floating-label { + color: GrayText; + } +} +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-text-field--disabled + .mdc-text-field-helper-line .mdc-text-field-helper-text { + color: GrayText; + } +} +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-text-field--disabled .mdc-text-field-character-counter, +.mdc-text-field--disabled + .mdc-text-field-helper-line .mdc-text-field-character-counter { + color: GrayText; + } +} +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-text-field--disabled .mdc-text-field__icon--leading { + color: GrayText; + } +} +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-text-field--disabled .mdc-text-field__icon--trailing { + color: GrayText; + } +} +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-text-field--disabled .mdc-text-field__affix--prefix { + color: GrayText; + } +} +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-text-field--disabled .mdc-text-field__affix--suffix { + color: GrayText; + } +} +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-text-field--disabled .mdc-line-ripple::before { + border-bottom-color: GrayText; + } +} +@media screen and (forced-colors: active), (-ms-high-contrast: active) { + .mdc-text-field--disabled .mdc-notched-outline__leading, +.mdc-text-field--disabled .mdc-notched-outline__notch, +.mdc-text-field--disabled .mdc-notched-outline__trailing { + border-color: GrayText; + } +} +@media screen and (forced-colors: active) { + .mdc-text-field--disabled .mdc-text-field__input { + background-color: Window; + } + .mdc-text-field--disabled .mdc-floating-label { + z-index: 1; + } +} +.mdc-text-field--disabled .mdc-floating-label { + cursor: default; +} +.mdc-text-field--disabled.mdc-text-field--filled { + background-color: #fafafa; +} +.mdc-text-field--disabled.mdc-text-field--filled .mdc-text-field__ripple { + display: none; +} +.mdc-text-field--disabled .mdc-text-field__input { + pointer-events: auto; +} + +.mdc-text-field--end-aligned .mdc-text-field__input { + /* @noflip */ + text-align: right; +} +[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__input, .mdc-text-field--end-aligned .mdc-text-field__input[dir=rtl] { + /* @noflip */ + text-align: left; +} + +[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input, +[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix, .mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input, +.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix { + /* @noflip */ + direction: ltr; +} +[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix, .mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 2px; +} +[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix, .mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix { + /* @noflip */ + padding-left: 12px; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--leading, .mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--leading { + order: 1; +} +[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix, .mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix { + order: 2; +} +[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input, .mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input { + order: 3; +} +[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix, .mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix { + order: 4; +} +[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--trailing, .mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--trailing { + order: 5; +} + +[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__input, .mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__input { + /* @noflip */ + text-align: right; +} +[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--prefix, .mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--prefix { + /* @noflip */ + padding-right: 12px; +} +[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--suffix, .mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--suffix { + /* @noflip */ + padding-left: 2px; +} + +.mdc-text-field-helper-text { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.75rem; + /* @alternate */ + font-size: var(--mdc-typography-caption-font-size, 0.75rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-caption-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-caption-font-weight, 400); + letter-spacing: 0.0333333333em; + /* @alternate */ + letter-spacing: var(--mdc-typography-caption-letter-spacing, 0.0333333333em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-caption-text-transform, inherit); + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + margin: 0; + opacity: 0; + will-change: opacity; + transition: opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1); +} +.mdc-text-field-helper-text::before { + display: inline-block; + width: 0; + height: 16px; + content: ""; + vertical-align: 0; +} + +.mdc-text-field-helper-text--persistent { + transition: none; + opacity: 1; + will-change: initial; +} + +.mdc-text-field-character-counter { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.75rem; + /* @alternate */ + font-size: var(--mdc-typography-caption-font-size, 0.75rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-caption-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-caption-font-weight, 400); + letter-spacing: 0.0333333333em; + /* @alternate */ + letter-spacing: var(--mdc-typography-caption-letter-spacing, 0.0333333333em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-caption-text-transform, inherit); + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + /* @noflip */ + margin-left: auto; + /* @noflip */ + margin-right: 0; + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 0; + white-space: nowrap; +} +.mdc-text-field-character-counter::before { + display: inline-block; + width: 0; + height: 16px; + content: ""; + vertical-align: 0; +} +[dir=rtl] .mdc-text-field-character-counter, .mdc-text-field-character-counter[dir=rtl] { + /* @noflip */ + margin-left: 0; + /* @noflip */ + margin-right: auto; +} + +[dir=rtl] .mdc-text-field-character-counter, .mdc-text-field-character-counter[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 16px; +} + +.mdc-text-field__icon { + align-self: center; + cursor: pointer; +} +.mdc-text-field__icon:not([tabindex]), .mdc-text-field__icon[tabindex="-1"] { + cursor: default; + pointer-events: none; +} +.mdc-text-field__icon svg { + display: block; +} + +.mdc-text-field__icon--leading { + /* @noflip */ + margin-left: 16px; + /* @noflip */ + margin-right: 8px; +} +[dir=rtl] .mdc-text-field__icon--leading, .mdc-text-field__icon--leading[dir=rtl] { + /* @noflip */ + margin-left: 8px; + /* @noflip */ + margin-right: 16px; +} + +.mdc-text-field__icon--trailing { + padding: 12px; + /* @noflip */ + margin-left: 0px; + /* @noflip */ + margin-right: 0px; +} +[dir=rtl] .mdc-text-field__icon--trailing, .mdc-text-field__icon--trailing[dir=rtl] { + /* @noflip */ + margin-left: 0px; + /* @noflip */ + margin-right: 0px; +} + +:root { + --mdc-theme-primary: #6200ee; + --mdc-theme-secondary: #018786; + --mdc-theme-background: #fff; + --mdc-theme-surface: #fff; + --mdc-theme-error: #b00020; + --mdc-theme-on-primary: #fff; + --mdc-theme-on-secondary: #fff; + --mdc-theme-on-surface: #000; + --mdc-theme-on-error: #fff; + --mdc-theme-text-primary-on-background: rgba(0, 0, 0, 0.87); + --mdc-theme-text-secondary-on-background: rgba(0, 0, 0, 0.54); + --mdc-theme-text-hint-on-background: rgba(0, 0, 0, 0.38); + --mdc-theme-text-disabled-on-background: rgba(0, 0, 0, 0.38); + --mdc-theme-text-icon-on-background: rgba(0, 0, 0, 0.38); + --mdc-theme-text-primary-on-light: rgba(0, 0, 0, 0.87); + --mdc-theme-text-secondary-on-light: rgba(0, 0, 0, 0.54); + --mdc-theme-text-hint-on-light: rgba(0, 0, 0, 0.38); + --mdc-theme-text-disabled-on-light: rgba(0, 0, 0, 0.38); + --mdc-theme-text-icon-on-light: rgba(0, 0, 0, 0.38); + --mdc-theme-text-primary-on-dark: white; + --mdc-theme-text-secondary-on-dark: rgba(255, 255, 255, 0.7); + --mdc-theme-text-hint-on-dark: rgba(255, 255, 255, 0.5); + --mdc-theme-text-disabled-on-dark: rgba(255, 255, 255, 0.5); + --mdc-theme-text-icon-on-dark: rgba(255, 255, 255, 0.5); +} + +.mdc-theme--primary { + color: #6200ee !important; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee) !important; +} + +.mdc-theme--secondary { + color: #018786 !important; + /* @alternate */ + color: var(--mdc-theme-secondary, #018786) !important; +} + +.mdc-theme--background { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-background, #fff); +} + +.mdc-theme--surface { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-theme-surface, #fff); +} + +.mdc-theme--error { + color: #b00020 !important; + /* @alternate */ + color: var(--mdc-theme-error, #b00020) !important; +} + +.mdc-theme--on-primary { + color: #fff !important; + /* @alternate */ + color: var(--mdc-theme-on-primary, #fff) !important; +} + +.mdc-theme--on-secondary { + color: #fff !important; + /* @alternate */ + color: var(--mdc-theme-on-secondary, #fff) !important; +} + +.mdc-theme--on-surface { + color: #000 !important; + /* @alternate */ + color: var(--mdc-theme-on-surface, #000) !important; +} + +.mdc-theme--on-error { + color: #fff !important; + /* @alternate */ + color: var(--mdc-theme-on-error, #fff) !important; +} + +.mdc-theme--text-primary-on-background { + color: rgba(0, 0, 0, 0.87) !important; + /* @alternate */ + color: var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87)) !important; +} + +.mdc-theme--text-secondary-on-background { + color: rgba(0, 0, 0, 0.54) !important; + /* @alternate */ + color: var(--mdc-theme-text-secondary-on-background, rgba(0, 0, 0, 0.54)) !important; +} + +.mdc-theme--text-hint-on-background { + color: rgba(0, 0, 0, 0.38) !important; + /* @alternate */ + color: var(--mdc-theme-text-hint-on-background, rgba(0, 0, 0, 0.38)) !important; +} + +.mdc-theme--text-disabled-on-background { + color: rgba(0, 0, 0, 0.38) !important; + /* @alternate */ + color: var(--mdc-theme-text-disabled-on-background, rgba(0, 0, 0, 0.38)) !important; +} + +.mdc-theme--text-icon-on-background { + color: rgba(0, 0, 0, 0.38) !important; + /* @alternate */ + color: var(--mdc-theme-text-icon-on-background, rgba(0, 0, 0, 0.38)) !important; +} + +.mdc-theme--text-primary-on-light { + color: rgba(0, 0, 0, 0.87) !important; + /* @alternate */ + color: var(--mdc-theme-text-primary-on-light, rgba(0, 0, 0, 0.87)) !important; +} + +.mdc-theme--text-secondary-on-light { + color: rgba(0, 0, 0, 0.54) !important; + /* @alternate */ + color: var(--mdc-theme-text-secondary-on-light, rgba(0, 0, 0, 0.54)) !important; +} + +.mdc-theme--text-hint-on-light { + color: rgba(0, 0, 0, 0.38) !important; + /* @alternate */ + color: var(--mdc-theme-text-hint-on-light, rgba(0, 0, 0, 0.38)) !important; +} + +.mdc-theme--text-disabled-on-light { + color: rgba(0, 0, 0, 0.38) !important; + /* @alternate */ + color: var(--mdc-theme-text-disabled-on-light, rgba(0, 0, 0, 0.38)) !important; +} + +.mdc-theme--text-icon-on-light { + color: rgba(0, 0, 0, 0.38) !important; + /* @alternate */ + color: var(--mdc-theme-text-icon-on-light, rgba(0, 0, 0, 0.38)) !important; +} + +.mdc-theme--text-primary-on-dark { + color: white !important; + /* @alternate */ + color: var(--mdc-theme-text-primary-on-dark, white) !important; +} + +.mdc-theme--text-secondary-on-dark { + color: rgba(255, 255, 255, 0.7) !important; + /* @alternate */ + color: var(--mdc-theme-text-secondary-on-dark, rgba(255, 255, 255, 0.7)) !important; +} + +.mdc-theme--text-hint-on-dark { + color: rgba(255, 255, 255, 0.5) !important; + /* @alternate */ + color: var(--mdc-theme-text-hint-on-dark, rgba(255, 255, 255, 0.5)) !important; +} + +.mdc-theme--text-disabled-on-dark { + color: rgba(255, 255, 255, 0.5) !important; + /* @alternate */ + color: var(--mdc-theme-text-disabled-on-dark, rgba(255, 255, 255, 0.5)) !important; +} + +.mdc-theme--text-icon-on-dark { + color: rgba(255, 255, 255, 0.5) !important; + /* @alternate */ + color: var(--mdc-theme-text-icon-on-dark, rgba(255, 255, 255, 0.5)) !important; +} + +.mdc-theme--primary-bg { + background-color: #6200ee !important; + /* @alternate */ + background-color: var(--mdc-theme-primary, #6200ee) !important; +} + +.mdc-theme--secondary-bg { + background-color: #018786 !important; + /* @alternate */ + background-color: var(--mdc-theme-secondary, #018786) !important; +} + +.mdc-tooltip__surface { + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-small, 4px); +} + +.mdc-tooltip__caret-surface-top, +.mdc-tooltip__caret-surface-bottom { + border-radius: 4px; + /* @alternate */ + border-radius: var(--mdc-shape-small, 4px); +} + +.mdc-tooltip__surface { + color: white; + /* @alternate */ + color: var(--mdc-theme-text-primary-on-dark, white); +} + +.mdc-tooltip__surface { + background-color: rgba(0, 0, 0, 0.6); +} + +.mdc-tooltip__surface { + word-break: break-all; + /* @alternate */ + word-break: var(--mdc-tooltip-word-break, normal); + overflow-wrap: anywhere; +} + +.mdc-tooltip { + z-index: 9; +} + +.mdc-tooltip--showing-transition .mdc-tooltip__surface-animation { + transition: opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1), transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1); + transition: opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1), transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1); +} + +.mdc-tooltip--hide-transition .mdc-tooltip__surface-animation { + transition: opacity 75ms 0ms cubic-bezier(0.4, 0, 1, 1); +} + +.mdc-tooltip__title { + color: rgba(0, 0, 0, 0.87); + /* @alternate */ + color: var(--mdc-theme-text-primary-on-light, rgba(0, 0, 0, 0.87)); +} + +.mdc-tooltip__content { + color: rgba(0, 0, 0, 0.6); +} + +.mdc-tooltip__content-link { + color: #6200ee; + /* @alternate */ + color: var(--mdc-theme-primary, #6200ee); +} + +.mdc-tooltip { + position: fixed; + display: none; +} +.mdc-tooltip.mdc-tooltip--rich .mdc-tooltip__surface { + background-color: #fff; +} +.mdc-tooltip.mdc-tooltip--rich .mdc-tooltip__caret-surface-top, +.mdc-tooltip.mdc-tooltip--rich .mdc-tooltip__caret-surface-bottom { + background-color: #fff; +} + +.mdc-tooltip-wrapper--rich { + position: relative; +} + +.mdc-tooltip--shown, +.mdc-tooltip--showing, +.mdc-tooltip--hide { + display: inline-flex; +} +.mdc-tooltip--shown.mdc-tooltip--rich, +.mdc-tooltip--showing.mdc-tooltip--rich, +.mdc-tooltip--hide.mdc-tooltip--rich { + display: inline-block; + /* @noflip */ + left: -320px; + position: absolute; +} + +.mdc-tooltip__surface { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.75rem; + /* @alternate */ + font-size: var(--mdc-typography-caption-font-size, 0.75rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-caption-font-weight, 400); + letter-spacing: 0.0333333333em; + /* @alternate */ + letter-spacing: var(--mdc-typography-caption-letter-spacing, 0.0333333333em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-caption-text-transform, inherit); + line-height: 16px; + padding: 4px 8px; + min-width: 40px; + max-width: 200px; + min-height: 24px; + max-height: 40vh; + box-sizing: border-box; + overflow: hidden; + text-align: center; +} +.mdc-tooltip__surface::before { + position: absolute; + box-sizing: border-box; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 1px solid transparent; + border-radius: inherit; + content: ""; + pointer-events: none; +} +.mdc-tooltip--rich .mdc-tooltip__surface { + /* @alternate */ + 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); + align-items: flex-start; + border-radius: 4px; + display: flex; + flex-direction: column; + line-height: 20px; + min-height: 24px; + min-width: 40px; + max-width: 320px; + position: relative; +} +.mdc-tooltip--rich .mdc-tooltip__surface .mdc-elevation-overlay { + width: 100%; + height: 100%; + top: 0; + /* @noflip */ + left: 0; +} +.mdc-tooltip--multiline .mdc-tooltip__surface { + /* @noflip */ + text-align: left; +} +[dir=rtl] .mdc-tooltip--multiline .mdc-tooltip__surface, .mdc-tooltip--multiline .mdc-tooltip__surface[dir=rtl] { + /* @noflip */ + text-align: right; +} + +.mdc-tooltip__surface .mdc-tooltip__title { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle2-font-size, 0.875rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle2-font-weight, 500); + letter-spacing: 0.0071428571em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle2-letter-spacing, 0.0071428571em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle2-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle2-text-transform, inherit); + margin: 0 8px; +} +.mdc-tooltip__surface .mdc-tooltip__title::before { + display: inline-block; + width: 0; + height: 28px; + content: ""; + vertical-align: 0; +} +.mdc-tooltip__surface .mdc-tooltip__content { + display: block; + margin-top: 0; + /* @alternate */ + line-height: normal; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-body2-font-size, 0.875rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body2-font-weight, 400); + letter-spacing: 0.0178571429em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body2-letter-spacing, 0.0178571429em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body2-text-transform, inherit); + max-width: calc(100% - 2 * 8px); + margin: 0 8px 16px 8px; + /* @noflip */ + text-align: left; +} +.mdc-tooltip__surface .mdc-tooltip__content::before { + display: inline-block; + width: 0; + height: 24px; + content: ""; + vertical-align: 0; +} +[dir=rtl] .mdc-tooltip__surface .mdc-tooltip__content, .mdc-tooltip__surface .mdc-tooltip__content[dir=rtl] { + /* @noflip */ + text-align: right; +} + +.mdc-tooltip__surface .mdc-tooltip__content-link { + text-decoration: none; +} + +.mdc-tooltip__surface-animation { + opacity: 0; + -webkit-transform: scale(0.8); + transform: scale(0.8); + will-change: transform, opacity; +} +.mdc-tooltip--shown .mdc-tooltip__surface-animation { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; +} +.mdc-tooltip--hide .mdc-tooltip__surface-animation { + -webkit-transform: scale(1); + transform: scale(1); +} + +.mdc-tooltip__caret-surface-top, +.mdc-tooltip__caret-surface-bottom { + position: absolute; + height: 24px; + width: 24px; + -webkit-transform: rotate(35deg) skewY(20deg) scaleX(0.9396926208); + transform: rotate(35deg) skewY(20deg) scaleX(0.9396926208); +} +.mdc-tooltip__caret-surface-top .mdc-elevation-overlay, +.mdc-tooltip__caret-surface-bottom .mdc-elevation-overlay { + width: 100%; + height: 100%; + top: 0; + /* @noflip */ + left: 0; +} + +.mdc-tooltip__caret-surface-bottom { + /* @alternate */ + 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); + outline: 1px solid transparent; + z-index: -1; +} + +.mdc-top-app-bar { + background-color: #6200ee; + /* @alternate */ + background-color: var(--mdc-theme-primary, #6200ee); + color: white; + display: flex; + position: fixed; + flex-direction: column; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + z-index: 4; +} +.mdc-top-app-bar .mdc-top-app-bar__action-item, +.mdc-top-app-bar .mdc-top-app-bar__navigation-icon { + color: #fff; + /* @alternate */ + color: var(--mdc-theme-on-primary, #fff); +} +.mdc-top-app-bar .mdc-top-app-bar__action-item::before, .mdc-top-app-bar .mdc-top-app-bar__action-item::after, +.mdc-top-app-bar .mdc-top-app-bar__navigation-icon::before, +.mdc-top-app-bar .mdc-top-app-bar__navigation-icon::after { + background-color: #fff; + /* @alternate */ + background-color: var(--mdc-ripple-color, var(--mdc-theme-on-primary, #fff)); +} +.mdc-top-app-bar .mdc-top-app-bar__action-item:hover::before, .mdc-top-app-bar .mdc-top-app-bar__action-item.mdc-ripple-surface--hover::before, +.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:hover::before, +.mdc-top-app-bar .mdc-top-app-bar__navigation-icon.mdc-ripple-surface--hover::before { + opacity: 0.08; + /* @alternate */ + opacity: var(--mdc-ripple-hover-opacity, 0.08); +} +.mdc-top-app-bar .mdc-top-app-bar__action-item.mdc-ripple-upgraded--background-focused::before, .mdc-top-app-bar .mdc-top-app-bar__action-item:not(.mdc-ripple-upgraded):focus::before, +.mdc-top-app-bar .mdc-top-app-bar__navigation-icon.mdc-ripple-upgraded--background-focused::before, +.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:not(.mdc-ripple-upgraded):focus::before { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-focus-opacity, 0.24); +} +.mdc-top-app-bar .mdc-top-app-bar__action-item:not(.mdc-ripple-upgraded)::after, +.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:not(.mdc-ripple-upgraded)::after { + transition: opacity 150ms linear; +} +.mdc-top-app-bar .mdc-top-app-bar__action-item:not(.mdc-ripple-upgraded):active::after, +.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:not(.mdc-ripple-upgraded):active::after { + transition-duration: 75ms; + opacity: 0.24; + /* @alternate */ + opacity: var(--mdc-ripple-press-opacity, 0.24); +} +.mdc-top-app-bar .mdc-top-app-bar__action-item.mdc-ripple-upgraded, +.mdc-top-app-bar .mdc-top-app-bar__navigation-icon.mdc-ripple-upgraded { + --mdc-ripple-fg-opacity: var(--mdc-ripple-press-opacity, 0.24); +} +.mdc-top-app-bar__row { + display: flex; + position: relative; + box-sizing: border-box; + width: 100%; + height: 64px; +} +.mdc-top-app-bar__section { + display: inline-flex; + flex: 1 1 auto; + align-items: center; + min-width: 0; + padding: 8px 12px; + z-index: 1; +} +.mdc-top-app-bar__section--align-start { + justify-content: flex-start; + order: -1; +} +.mdc-top-app-bar__section--align-end { + justify-content: flex-end; + order: 1; +} +.mdc-top-app-bar__title { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1.25rem; + /* @alternate */ + font-size: var(--mdc-typography-headline6-font-size, 1.25rem); + line-height: 2rem; + /* @alternate */ + line-height: var(--mdc-typography-headline6-line-height, 2rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-headline6-font-weight, 500); + letter-spacing: 0.0125em; + /* @alternate */ + letter-spacing: var(--mdc-typography-headline6-letter-spacing, 0.0125em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-headline6-text-decoration, inherit); + text-decoration: var(--mdc-typography-headline6-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-headline6-text-transform, inherit); + /* @noflip */ + padding-left: 20px; + /* @noflip */ + padding-right: 0; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + z-index: 1; +} +[dir=rtl] .mdc-top-app-bar__title, .mdc-top-app-bar__title[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 20px; +} + +.mdc-top-app-bar--short-collapsed { + /* @noflip */ + border-top-left-radius: 0; + /* @noflip */ + border-top-right-radius: 0; + /* @noflip */ + border-bottom-right-radius: 24px; + /* @noflip */ + border-bottom-left-radius: 0; +} +[dir=rtl] .mdc-top-app-bar--short-collapsed, .mdc-top-app-bar--short-collapsed[dir=rtl] { + /* @noflip */ + border-top-left-radius: 0; + /* @noflip */ + border-top-right-radius: 0; + /* @noflip */ + border-bottom-right-radius: 0; + /* @noflip */ + border-bottom-left-radius: 24px; +} + +.mdc-top-app-bar--short { + top: 0; + /* @noflip */ + right: auto; + /* @noflip */ + left: 0; + width: 100%; + transition: width 250ms cubic-bezier(0.4, 0, 0.2, 1); +} +[dir=rtl] .mdc-top-app-bar--short, .mdc-top-app-bar--short[dir=rtl] { + /* @noflip */ + right: 0; + /* @noflip */ + left: auto; +} + +.mdc-top-app-bar--short .mdc-top-app-bar__row { + height: 56px; +} +.mdc-top-app-bar--short .mdc-top-app-bar__section { + padding: 4px; +} +.mdc-top-app-bar--short .mdc-top-app-bar__title { + transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1); + opacity: 1; +} + +.mdc-top-app-bar--short-collapsed { + /* @alternate */ + box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12); + width: 56px; + transition: width 300ms cubic-bezier(0.4, 0, 0.2, 1); +} +.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__title { + display: none; +} +.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__action-item { + transition: padding 150ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item { + width: 112px; +} +.mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item .mdc-top-app-bar__section--align-end { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 12px; +} +[dir=rtl] .mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item .mdc-top-app-bar__section--align-end, .mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item .mdc-top-app-bar__section--align-end[dir=rtl] { + /* @noflip */ + padding-left: 12px; + /* @noflip */ + padding-right: 0; +} + +.mdc-top-app-bar--dense .mdc-top-app-bar__row { + height: 48px; +} +.mdc-top-app-bar--dense .mdc-top-app-bar__section { + padding: 0 4px; +} +.mdc-top-app-bar--dense .mdc-top-app-bar__title { + /* @noflip */ + padding-left: 12px; + /* @noflip */ + padding-right: 0; +} +[dir=rtl] .mdc-top-app-bar--dense .mdc-top-app-bar__title, .mdc-top-app-bar--dense .mdc-top-app-bar__title[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 12px; +} + +.mdc-top-app-bar--prominent .mdc-top-app-bar__row { + height: 128px; +} +.mdc-top-app-bar--prominent .mdc-top-app-bar__title { + align-self: flex-end; + padding-bottom: 2px; +} +.mdc-top-app-bar--prominent .mdc-top-app-bar__action-item, +.mdc-top-app-bar--prominent .mdc-top-app-bar__navigation-icon { + align-self: flex-start; +} + +.mdc-top-app-bar--fixed { + transition: box-shadow 200ms linear; +} + +.mdc-top-app-bar--fixed-scrolled { + /* @alternate */ + box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12); + transition: box-shadow 200ms linear; +} + +.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__row { + height: 96px; +} +.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__section { + padding: 0 12px; +} +.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__title { + /* @noflip */ + padding-left: 20px; + /* @noflip */ + padding-right: 0; + padding-bottom: 9px; +} +[dir=rtl] .mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__title, .mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__title[dir=rtl] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 20px; +} + +.mdc-top-app-bar--fixed-adjust { + padding-top: 64px; +} + +.mdc-top-app-bar--dense-fixed-adjust { + padding-top: 48px; +} + +.mdc-top-app-bar--short-fixed-adjust { + padding-top: 56px; +} + +.mdc-top-app-bar--prominent-fixed-adjust { + padding-top: 128px; +} + +.mdc-top-app-bar--dense-prominent-fixed-adjust { + padding-top: 96px; +} + +@media (max-width: 599px) { + .mdc-top-app-bar__row { + height: 56px; + } + + .mdc-top-app-bar__section { + padding: 4px; + } + + .mdc-top-app-bar--short { + transition: width 200ms cubic-bezier(0.4, 0, 0.2, 1); + } + + .mdc-top-app-bar--short-collapsed { + transition: width 250ms cubic-bezier(0.4, 0, 0.2, 1); + } + .mdc-top-app-bar--short-collapsed .mdc-top-app-bar__section--align-end { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 12px; + } + [dir=rtl] .mdc-top-app-bar--short-collapsed .mdc-top-app-bar__section--align-end, .mdc-top-app-bar--short-collapsed .mdc-top-app-bar__section--align-end[dir=rtl] { + /* @noflip */ + padding-left: 12px; + /* @noflip */ + padding-right: 0; + } + + .mdc-top-app-bar--prominent .mdc-top-app-bar__title { + padding-bottom: 6px; + } + + .mdc-top-app-bar--fixed-adjust { + padding-top: 56px; + } +} +.mdc-typography { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-font-family, Roboto, sans-serif); +} + +.mdc-typography--headline1 { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-headline1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 6rem; + /* @alternate */ + font-size: var(--mdc-typography-headline1-font-size, 6rem); + line-height: 6rem; + /* @alternate */ + line-height: var(--mdc-typography-headline1-line-height, 6rem); + font-weight: 300; + /* @alternate */ + font-weight: var(--mdc-typography-headline1-font-weight, 300); + letter-spacing: -0.015625em; + /* @alternate */ + letter-spacing: var(--mdc-typography-headline1-letter-spacing, -0.015625em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-headline1-text-decoration, inherit); + text-decoration: var(--mdc-typography-headline1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-headline1-text-transform, inherit); +} + +.mdc-typography--headline2 { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-headline2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 3.75rem; + /* @alternate */ + font-size: var(--mdc-typography-headline2-font-size, 3.75rem); + line-height: 3.75rem; + /* @alternate */ + line-height: var(--mdc-typography-headline2-line-height, 3.75rem); + font-weight: 300; + /* @alternate */ + font-weight: var(--mdc-typography-headline2-font-weight, 300); + letter-spacing: -0.0083333333em; + /* @alternate */ + letter-spacing: var(--mdc-typography-headline2-letter-spacing, -0.0083333333em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-headline2-text-decoration, inherit); + text-decoration: var(--mdc-typography-headline2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-headline2-text-transform, inherit); +} + +.mdc-typography--headline3 { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-headline3-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 3rem; + /* @alternate */ + font-size: var(--mdc-typography-headline3-font-size, 3rem); + line-height: 3.125rem; + /* @alternate */ + line-height: var(--mdc-typography-headline3-line-height, 3.125rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-headline3-font-weight, 400); + letter-spacing: normal; + /* @alternate */ + letter-spacing: var(--mdc-typography-headline3-letter-spacing, normal); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-headline3-text-decoration, inherit); + text-decoration: var(--mdc-typography-headline3-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-headline3-text-transform, inherit); +} + +.mdc-typography--headline4 { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-headline4-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 2.125rem; + /* @alternate */ + font-size: var(--mdc-typography-headline4-font-size, 2.125rem); + line-height: 2.5rem; + /* @alternate */ + line-height: var(--mdc-typography-headline4-line-height, 2.5rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-headline4-font-weight, 400); + letter-spacing: 0.0073529412em; + /* @alternate */ + letter-spacing: var(--mdc-typography-headline4-letter-spacing, 0.0073529412em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-headline4-text-decoration, inherit); + text-decoration: var(--mdc-typography-headline4-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-headline4-text-transform, inherit); +} + +.mdc-typography--headline5 { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-headline5-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1.5rem; + /* @alternate */ + font-size: var(--mdc-typography-headline5-font-size, 1.5rem); + line-height: 2rem; + /* @alternate */ + line-height: var(--mdc-typography-headline5-line-height, 2rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-headline5-font-weight, 400); + letter-spacing: normal; + /* @alternate */ + letter-spacing: var(--mdc-typography-headline5-letter-spacing, normal); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-headline5-text-decoration, inherit); + text-decoration: var(--mdc-typography-headline5-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-headline5-text-transform, inherit); +} + +.mdc-typography--headline6 { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1.25rem; + /* @alternate */ + font-size: var(--mdc-typography-headline6-font-size, 1.25rem); + line-height: 2rem; + /* @alternate */ + line-height: var(--mdc-typography-headline6-line-height, 2rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-headline6-font-weight, 500); + letter-spacing: 0.0125em; + /* @alternate */ + letter-spacing: var(--mdc-typography-headline6-letter-spacing, 0.0125em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-headline6-text-decoration, inherit); + text-decoration: var(--mdc-typography-headline6-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-headline6-text-transform, inherit); +} + +.mdc-typography--subtitle1 { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle1-font-size, 1rem); + line-height: 1.75rem; + /* @alternate */ + line-height: var(--mdc-typography-subtitle1-line-height, 1.75rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle1-font-weight, 400); + letter-spacing: 0.009375em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle1-letter-spacing, 0.009375em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle1-text-transform, inherit); +} + +.mdc-typography--subtitle2 { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-subtitle2-font-size, 0.875rem); + line-height: 1.375rem; + /* @alternate */ + line-height: var(--mdc-typography-subtitle2-line-height, 1.375rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-subtitle2-font-weight, 500); + letter-spacing: 0.0071428571em; + /* @alternate */ + letter-spacing: var(--mdc-typography-subtitle2-letter-spacing, 0.0071428571em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-subtitle2-text-decoration, inherit); + text-decoration: var(--mdc-typography-subtitle2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-subtitle2-text-transform, inherit); +} + +.mdc-typography--body1 { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 1rem; + /* @alternate */ + font-size: var(--mdc-typography-body1-font-size, 1rem); + line-height: 1.5rem; + /* @alternate */ + line-height: var(--mdc-typography-body1-line-height, 1.5rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body1-font-weight, 400); + letter-spacing: 0.03125em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body1-letter-spacing, 0.03125em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body1-text-decoration, inherit); + text-decoration: var(--mdc-typography-body1-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body1-text-transform, inherit); +} + +.mdc-typography--body2 { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-body2-font-size, 0.875rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-body2-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-body2-font-weight, 400); + letter-spacing: 0.0178571429em; + /* @alternate */ + letter-spacing: var(--mdc-typography-body2-letter-spacing, 0.0178571429em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-decoration: var(--mdc-typography-body2-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-body2-text-transform, inherit); +} + +.mdc-typography--caption { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.75rem; + /* @alternate */ + font-size: var(--mdc-typography-caption-font-size, 0.75rem); + line-height: 1.25rem; + /* @alternate */ + line-height: var(--mdc-typography-caption-line-height, 1.25rem); + font-weight: 400; + /* @alternate */ + font-weight: var(--mdc-typography-caption-font-weight, 400); + letter-spacing: 0.0333333333em; + /* @alternate */ + letter-spacing: var(--mdc-typography-caption-letter-spacing, 0.0333333333em); + text-decoration: inherit; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-decoration: var(--mdc-typography-caption-text-decoration, inherit); + text-transform: inherit; + /* @alternate */ + text-transform: var(--mdc-typography-caption-text-transform, inherit); +} + +.mdc-typography--button { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.875rem; + /* @alternate */ + font-size: var(--mdc-typography-button-font-size, 0.875rem); + line-height: 2.25rem; + /* @alternate */ + line-height: var(--mdc-typography-button-line-height, 2.25rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-button-font-weight, 500); + letter-spacing: 0.0892857143em; + /* @alternate */ + letter-spacing: var(--mdc-typography-button-letter-spacing, 0.0892857143em); + text-decoration: none; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-button-text-decoration, none); + text-decoration: var(--mdc-typography-button-text-decoration, none); + text-transform: uppercase; + /* @alternate */ + text-transform: var(--mdc-typography-button-text-transform, uppercase); +} + +.mdc-typography--overline { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: Roboto, sans-serif; + /* @alternate */ + font-family: var(--mdc-typography-overline-font-family, var(--mdc-typography-font-family, Roboto, sans-serif)); + font-size: 0.75rem; + /* @alternate */ + font-size: var(--mdc-typography-overline-font-size, 0.75rem); + line-height: 2rem; + /* @alternate */ + line-height: var(--mdc-typography-overline-line-height, 2rem); + font-weight: 500; + /* @alternate */ + font-weight: var(--mdc-typography-overline-font-weight, 500); + letter-spacing: 0.1666666667em; + /* @alternate */ + letter-spacing: var(--mdc-typography-overline-letter-spacing, 0.1666666667em); + text-decoration: none; + /* @alternate */ + -webkit-text-decoration: var(--mdc-typography-overline-text-decoration, none); + text-decoration: var(--mdc-typography-overline-text-decoration, none); + text-transform: uppercase; + /* @alternate */ + text-transform: var(--mdc-typography-overline-text-transform, uppercase); +} + +/*# sourceMappingURL=material-components-web.css.map*/ \ No newline at end of file diff --git a/pkgs/csslib/third_party/mdc/material-components-web.min.css b/pkgs/csslib/third_party/mdc/material-components-web.min.css new file mode 100644 index 000000000..7194839a5 --- /dev/null +++ b/pkgs/csslib/third_party/mdc/material-components-web.min.css @@ -0,0 +1,10 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://github.com/material-components/material-components-web/blob/master/LICENSE + */ + .mdc-banner__text{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-banner__graphic{color:#fff;color:var(--mdc-theme-surface, #fff)}.mdc-banner__graphic{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-banner__graphic{border-radius:50%}.mdc-banner__content,.mdc-banner__fixed{min-width:344px}@media(max-width: 480px),(max-width: 344px){.mdc-banner__content,.mdc-banner__fixed{min-width:100%}}.mdc-banner__content{max-width:720px}.mdc-banner{z-index:1;border-bottom-style:solid;border-bottom-width:1px;box-sizing:border-box;display:none;flex-shrink:0;height:0;position:relative;width:100%}@media(max-width: 480px){.mdc-banner .mdc-banner__fixed{left:0;right:0}.mdc-banner .mdc-banner__text{margin-left:16px;margin-right:36px}[dir=rtl] .mdc-banner .mdc-banner__text,.mdc-banner .mdc-banner__text[dir=rtl]{margin-left:36px;margin-right:16px}}@media(max-width: 480px){.mdc-banner.mdc-banner--mobile-stacked .mdc-banner__content{flex-wrap:wrap}.mdc-banner.mdc-banner--mobile-stacked .mdc-banner__graphic{margin-bottom:12px}.mdc-banner.mdc-banner--mobile-stacked .mdc-banner__text{margin-left:16px;margin-right:8px;padding-bottom:4px}[dir=rtl] .mdc-banner.mdc-banner--mobile-stacked .mdc-banner__text,.mdc-banner.mdc-banner--mobile-stacked .mdc-banner__text[dir=rtl]{margin-left:8px;margin-right:16px}.mdc-banner.mdc-banner--mobile-stacked .mdc-banner__actions{margin-left:auto}}.mdc-banner--opening,.mdc-banner--open,.mdc-banner--closing{display:flex}.mdc-banner--open{transition:height 300ms ease}.mdc-banner--open .mdc-banner__content{transition:-webkit-transform 300ms ease;transition:transform 300ms ease;transition:transform 300ms ease, -webkit-transform 300ms ease;-webkit-transform:translateY(0);transform:translateY(0)}.mdc-banner--closing{transition:height 250ms ease}.mdc-banner--closing .mdc-banner__content{transition:-webkit-transform 250ms ease;transition:transform 250ms ease;transition:transform 250ms ease, -webkit-transform 250ms ease}.mdc-banner--centered .mdc-banner__content{left:0;margin-left:auto;margin-right:auto;right:0}.mdc-banner__fixed{border-bottom-style:solid;border-bottom-width:1px;box-sizing:border-box;height:inherit;position:fixed;width:100%}.mdc-banner__content{display:flex;min-height:52px;position:absolute;-webkit-transform:translateY(-100%);transform:translateY(-100%);width:100%}.mdc-banner__graphic-text-wrapper{display:flex;width:100%}.mdc-banner__graphic{margin-left:16px;margin-right:0;flex-shrink:0;height:40px;margin-top:16px;margin-bottom:16px;text-align:center;width:40px}[dir=rtl] .mdc-banner__graphic,.mdc-banner__graphic[dir=rtl]{margin-left:0;margin-right:16px}.mdc-banner__icon{position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.mdc-banner__text{margin-left:24px;margin-right:90px;align-self:center;flex-grow:1;padding-top:16px;padding-bottom:16px}[dir=rtl] .mdc-banner__text,.mdc-banner__text[dir=rtl]{margin-left:90px;margin-right:24px}.mdc-banner__actions{padding-left:0;padding-right:8px;align-self:flex-end;display:flex;flex-shrink:0;padding-bottom:8px;padding-top:8px}[dir=rtl] .mdc-banner__actions,.mdc-banner__actions[dir=rtl]{padding-left:8px;padding-right:0}.mdc-banner__secondary-action{margin-left:0;margin-right:8px}[dir=rtl] .mdc-banner__secondary-action,.mdc-banner__secondary-action[dir=rtl]{margin-left:8px;margin-right:0}.mdc-banner{background-color:#fff;background-color:var(--mdc-theme-surface, #fff);border-bottom-color:rgba(0, 0, 0, 0.12)}.mdc-banner .mdc-banner__fixed{background-color:#fff;background-color:var(--mdc-theme-surface, #fff)}.mdc-banner .mdc-banner__fixed{border-bottom-color:rgba(0, 0, 0, 0.12)}.mdc-banner__text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit)}.mdc-banner__primary-action:not(:disabled){color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-banner__primary-action::before,.mdc-banner__primary-action::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-banner__primary-action:hover::before,.mdc-banner__primary-action.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-banner__primary-action.mdc-ripple-upgraded--background-focused::before,.mdc-banner__primary-action:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-banner__primary-action:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-banner__primary-action:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-banner__primary-action.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-banner__secondary-action{margin-left:0;margin-right:8px}.mdc-banner__secondary-action:not(:disabled){color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-banner__secondary-action::before,.mdc-banner__secondary-action::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-banner__secondary-action:hover::before,.mdc-banner__secondary-action.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-banner__secondary-action.mdc-ripple-upgraded--background-focused::before,.mdc-banner__secondary-action:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-banner__secondary-action:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-banner__secondary-action:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-banner__secondary-action.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}[dir=rtl] .mdc-banner__secondary-action,.mdc-banner__secondary-action[dir=rtl]{margin-left:8px;margin-right:0}.mdc-touch-target-wrapper{display:inline}.mdc-elevation-overlay{position:absolute;border-radius:inherit;pointer-events:none;opacity:0;opacity:var(--mdc-elevation-overlay-opacity, 0);transition:opacity 280ms cubic-bezier(0.4, 0, 0.2, 1);background-color:#fff;background-color:var(--mdc-elevation-overlay-color, #fff)}.mdc-button{position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:64px;border:none;outline:none;line-height:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;overflow:visible;vertical-align:middle;background:transparent}.mdc-button .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-button::-moz-focus-inner{padding:0;border:0}.mdc-button:active{outline:none}.mdc-button:hover{cursor:pointer}.mdc-button:disabled{cursor:default;pointer-events:none}.mdc-button .mdc-button__icon{margin-left:0;margin-right:8px;display:inline-block;position:relative;vertical-align:top}[dir=rtl] .mdc-button .mdc-button__icon,.mdc-button .mdc-button__icon[dir=rtl]{margin-left:8px;margin-right:0}.mdc-button .mdc-button__touch{position:absolute;top:50%;height:48px;left:0;right:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.mdc-button__label+.mdc-button__icon{margin-left:8px;margin-right:0}[dir=rtl] .mdc-button__label+.mdc-button__icon,.mdc-button__label+.mdc-button__icon[dir=rtl]{margin-left:0;margin-right:8px}svg.mdc-button__icon{fill:currentColor}.mdc-button--raised .mdc-button__icon,.mdc-button--unelevated .mdc-button__icon,.mdc-button--outlined .mdc-button__icon{margin-left:-4px;margin-right:8px}[dir=rtl] .mdc-button--raised .mdc-button__icon,[dir=rtl] .mdc-button--unelevated .mdc-button__icon,[dir=rtl] .mdc-button--outlined .mdc-button__icon,.mdc-button--raised .mdc-button__icon[dir=rtl],.mdc-button--unelevated .mdc-button__icon[dir=rtl],.mdc-button--outlined .mdc-button__icon[dir=rtl]{margin-left:8px;margin-right:-4px}.mdc-button--raised .mdc-button__label+.mdc-button__icon,.mdc-button--unelevated .mdc-button__label+.mdc-button__icon,.mdc-button--outlined .mdc-button__label+.mdc-button__icon{margin-left:8px;margin-right:-4px}[dir=rtl] .mdc-button--raised .mdc-button__label+.mdc-button__icon,[dir=rtl] .mdc-button--unelevated .mdc-button__label+.mdc-button__icon,[dir=rtl] .mdc-button--outlined .mdc-button__label+.mdc-button__icon,.mdc-button--raised .mdc-button__label+.mdc-button__icon[dir=rtl],.mdc-button--unelevated .mdc-button__label+.mdc-button__icon[dir=rtl],.mdc-button--outlined .mdc-button__label+.mdc-button__icon[dir=rtl]{margin-left:-4px;margin-right:8px}.mdc-button--touch{margin-top:6px;margin-bottom:6px}.mdc-button{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));text-decoration:none;-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none)}@-webkit-keyframes mdc-ripple-fg-radius-in{from{-webkit-animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);-webkit-transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@keyframes mdc-ripple-fg-radius-in{from{-webkit-animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);-webkit-transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@-webkit-keyframes mdc-ripple-fg-opacity-in{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-in{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@-webkit-keyframes mdc-ripple-fg-opacity-out{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}@keyframes mdc-ripple-fg-opacity-out{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}.mdc-button{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-button .mdc-button__ripple::before,.mdc-button .mdc-button__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-button .mdc-button__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-button .mdc-button__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-button.mdc-ripple-upgraded .mdc-button__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-button.mdc-ripple-upgraded .mdc-button__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-button.mdc-ripple-upgraded--unbounded .mdc-button__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-button.mdc-ripple-upgraded--foreground-activation .mdc-button__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-button.mdc-ripple-upgraded--foreground-deactivation .mdc-button__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-button .mdc-button__ripple::before,.mdc-button .mdc-button__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-button.mdc-ripple-upgraded .mdc-button__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-button .mdc-button__ripple{position:absolute;box-sizing:content-box;width:100%;height:100%;overflow:hidden}.mdc-button:not(.mdc-button--outlined) .mdc-button__ripple{top:0;left:0}.mdc-button--raised{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-button--outlined{border-style:solid}.mdc-button{font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);letter-spacing:0.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase);height:36px;border-radius:4px;border-radius:var(--mdc-shape-small, 4px);padding:0 8px 0 8px}.mdc-button:not(:disabled){color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-button:disabled{color:rgba(0, 0, 0, 0.38)}.mdc-button .mdc-button__icon{font-size:1.125rem;height:1.125rem;width:1.125rem}.mdc-button .mdc-button__ripple::before,.mdc-button .mdc-button__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-button:hover .mdc-button__ripple::before,.mdc-button.mdc-ripple-surface--hover .mdc-button__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-button.mdc-ripple-upgraded--background-focused .mdc-button__ripple::before,.mdc-button:not(.mdc-ripple-upgraded):focus .mdc-button__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-button:not(.mdc-ripple-upgraded) .mdc-button__ripple::after{transition:opacity 150ms linear}.mdc-button:not(.mdc-ripple-upgraded):active .mdc-button__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-button.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-button .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--unelevated{padding:0 16px 0 16px;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);letter-spacing:0.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase);height:36px;border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--unelevated.mdc-button--icon-trailing{padding:0 12px 0 16px}.mdc-button--unelevated.mdc-button--icon-leading{padding:0 16px 0 12px}.mdc-button--unelevated:not(:disabled){background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-button--unelevated:disabled{background-color:rgba(0, 0, 0, 0.12)}.mdc-button--unelevated:not(:disabled){color:#fff;color:var(--mdc-theme-on-primary, #fff)}.mdc-button--unelevated:disabled{color:rgba(0, 0, 0, 0.38)}.mdc-button--unelevated .mdc-button__icon{font-size:1.125rem;height:1.125rem;width:1.125rem}.mdc-button--unelevated .mdc-button__ripple::before,.mdc-button--unelevated .mdc-button__ripple::after{background-color:#fff;background-color:var(--mdc-ripple-color, var(--mdc-theme-on-primary, #fff))}.mdc-button--unelevated:hover .mdc-button__ripple::before,.mdc-button--unelevated.mdc-ripple-surface--hover .mdc-button__ripple::before{opacity:0.08;opacity:var(--mdc-ripple-hover-opacity, 0.08)}.mdc-button--unelevated.mdc-ripple-upgraded--background-focused .mdc-button__ripple::before,.mdc-button--unelevated:not(.mdc-ripple-upgraded):focus .mdc-button__ripple::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-button--unelevated:not(.mdc-ripple-upgraded) .mdc-button__ripple::after{transition:opacity 150ms linear}.mdc-button--unelevated:not(.mdc-ripple-upgraded):active .mdc-button__ripple::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-button--unelevated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-button--unelevated .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--raised{padding:0 16px 0 16px;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);letter-spacing:0.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase);height:36px;border-radius:4px;border-radius:var(--mdc-shape-small, 4px);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,.12)}.mdc-button--raised.mdc-button--icon-trailing{padding:0 12px 0 16px}.mdc-button--raised.mdc-button--icon-leading{padding:0 16px 0 12px}.mdc-button--raised:not(:disabled){background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-button--raised:disabled{background-color:rgba(0, 0, 0, 0.12)}.mdc-button--raised:not(:disabled){color:#fff;color:var(--mdc-theme-on-primary, #fff)}.mdc-button--raised:disabled{color:rgba(0, 0, 0, 0.38)}.mdc-button--raised .mdc-button__icon{font-size:1.125rem;height:1.125rem;width:1.125rem}.mdc-button--raised .mdc-button__ripple::before,.mdc-button--raised .mdc-button__ripple::after{background-color:#fff;background-color:var(--mdc-ripple-color, var(--mdc-theme-on-primary, #fff))}.mdc-button--raised:hover .mdc-button__ripple::before,.mdc-button--raised.mdc-ripple-surface--hover .mdc-button__ripple::before{opacity:0.08;opacity:var(--mdc-ripple-hover-opacity, 0.08)}.mdc-button--raised.mdc-ripple-upgraded--background-focused .mdc-button__ripple::before,.mdc-button--raised:not(.mdc-ripple-upgraded):focus .mdc-button__ripple::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-button--raised:not(.mdc-ripple-upgraded) .mdc-button__ripple::after{transition:opacity 150ms linear}.mdc-button--raised:not(.mdc-ripple-upgraded):active .mdc-button__ripple::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-button--raised.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-button--raised .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--raised.mdc-ripple-upgraded--background-focused,.mdc-button--raised:not(.mdc-ripple-upgraded):focus{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12)}.mdc-button--raised:hover{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12)}.mdc-button--raised:not(:disabled):active{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}.mdc-button--raised:disabled{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0,0,0,.12)}.mdc-button--outlined{font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);letter-spacing:0.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase);height:36px;border-radius:4px;border-radius:var(--mdc-shape-small, 4px);padding:0 15px 0 15px;border-width:1px}.mdc-button--outlined:not(:disabled){color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-button--outlined:disabled{color:rgba(0, 0, 0, 0.38)}.mdc-button--outlined .mdc-button__icon{font-size:1.125rem;height:1.125rem;width:1.125rem}.mdc-button--outlined .mdc-button__ripple::before,.mdc-button--outlined .mdc-button__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-button--outlined:hover .mdc-button__ripple::before,.mdc-button--outlined.mdc-ripple-surface--hover .mdc-button__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-button--outlined.mdc-ripple-upgraded--background-focused .mdc-button__ripple::before,.mdc-button--outlined:not(.mdc-ripple-upgraded):focus .mdc-button__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-button--outlined:not(.mdc-ripple-upgraded) .mdc-button__ripple::after{transition:opacity 150ms linear}.mdc-button--outlined:not(.mdc-ripple-upgraded):active .mdc-button__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-button--outlined.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-button--outlined .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--outlined:not(:disabled){border-color:rgba(0, 0, 0, 0.12)}.mdc-button--outlined:disabled{border-color:rgba(0, 0, 0, 0.12)}.mdc-button--outlined.mdc-button--icon-trailing{padding:0 11px 0 15px}.mdc-button--outlined.mdc-button--icon-leading{padding:0 15px 0 11px}.mdc-button--outlined .mdc-button__ripple{top:-1px;left:-1px;border:1px solid transparent}.mdc-button--outlined .mdc-button__touch{left:-1px;width:calc(100% + 2 * 1px)}.mdc-card{border-radius:4px;border-radius:var(--mdc-shape-medium, 4px);background-color:#fff;background-color:var(--mdc-theme-surface, #fff);position:relative;box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0,0,0,.12);display:flex;flex-direction:column;box-sizing:border-box}.mdc-card .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-card::after{border-radius:4px;border-radius:var(--mdc-shape-medium, 4px);position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none;pointer-events:none}.mdc-card--outlined{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0,0,0,.12);border-width:1px;border-style:solid;border-color:#e0e0e0}.mdc-card--outlined::after{border:none}.mdc-card__content{border-radius:inherit;height:100%}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media::before{display:block;content:""}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mdc-card__media--square::before{margin-top:100%}.mdc-card__media--16-9::before{margin-top:56.25%}.mdc-card__media-content{position:absolute;top:0;right:0;bottom:0;left:0;box-sizing:border-box}.mdc-card__primary-action{display:flex;flex-direction:column;box-sizing:border-box;position:relative;outline:none;color:inherit;text-decoration:none;cursor:pointer;overflow:hidden}.mdc-card__primary-action:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__primary-action:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mdc-card__actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px;padding:8px}.mdc-card__actions--full-bleed{padding:0}.mdc-card__action-buttons,.mdc-card__action-icons{display:flex;flex-direction:row;align-items:center;box-sizing:border-box}.mdc-card__action-icons{color:rgba(0, 0, 0, 0.6);flex-grow:1;justify-content:flex-end}.mdc-card__action-buttons+.mdc-card__action-icons{margin-left:16px;margin-right:0}[dir=rtl] .mdc-card__action-buttons+.mdc-card__action-icons,.mdc-card__action-buttons+.mdc-card__action-icons[dir=rtl]{margin-left:0;margin-right:16px}.mdc-card__action{display:inline-flex;flex-direction:row;align-items:center;box-sizing:border-box;justify-content:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdc-card__action:focus{outline:none}.mdc-card__action--button{margin-left:0;margin-right:8px;padding:0 8px}[dir=rtl] .mdc-card__action--button,.mdc-card__action--button[dir=rtl]{margin-left:8px;margin-right:0}.mdc-card__action--button:last-child{margin-left:0;margin-right:0}[dir=rtl] .mdc-card__action--button:last-child,.mdc-card__action--button:last-child[dir=rtl]{margin-left:0;margin-right:0}.mdc-card__actions--full-bleed .mdc-card__action--button{justify-content:space-between;width:100%;height:auto;max-height:none;margin:0;padding:8px 16px;text-align:left}[dir=rtl] .mdc-card__actions--full-bleed .mdc-card__action--button,.mdc-card__actions--full-bleed .mdc-card__action--button[dir=rtl]{text-align:right}.mdc-card__action--icon{margin:-6px 0;padding:12px}.mdc-card__action--icon:not(:disabled){color:rgba(0, 0, 0, 0.6)}.mdc-card__primary-action{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-card__primary-action .mdc-card__ripple::before,.mdc-card__primary-action .mdc-card__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-card__primary-action .mdc-card__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-card__primary-action .mdc-card__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-card__primary-action.mdc-ripple-upgraded .mdc-card__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-card__primary-action.mdc-ripple-upgraded .mdc-card__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-card__primary-action.mdc-ripple-upgraded--unbounded .mdc-card__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-card__primary-action.mdc-ripple-upgraded--foreground-activation .mdc-card__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-card__primary-action.mdc-ripple-upgraded--foreground-deactivation .mdc-card__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-card__primary-action .mdc-card__ripple::before,.mdc-card__primary-action .mdc-card__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-card__primary-action.mdc-ripple-upgraded .mdc-card__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-card__primary-action .mdc-card__ripple::before,.mdc-card__primary-action .mdc-card__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}.mdc-card__primary-action:hover .mdc-card__ripple::before,.mdc-card__primary-action.mdc-ripple-surface--hover .mdc-card__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-card__primary-action.mdc-ripple-upgraded--background-focused .mdc-card__ripple::before,.mdc-card__primary-action:not(.mdc-ripple-upgraded):focus .mdc-card__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-card__primary-action:not(.mdc-ripple-upgraded) .mdc-card__ripple::after{transition:opacity 150ms linear}.mdc-card__primary-action:not(.mdc-ripple-upgraded):active .mdc-card__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-card__primary-action.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-card__primary-action .mdc-card__ripple{box-sizing:content-box;height:100%;overflow:hidden;left:0;pointer-events:none;position:absolute;top:0;width:100%}.mdc-card__primary-action.mdc-ripple-upgraded--background-focused::after,.mdc-card__primary-action:not(.mdc-ripple-upgraded):focus::after{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:5px double transparent;border-radius:inherit;content:"";pointer-events:none}.mdc-checkbox{padding:calc((40px - 18px) / 2);padding:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2);margin:calc((40px - 40px) / 2);margin:calc((var(--mdc-checkbox-touch-target-size, 40px) - 40px) / 2)}.mdc-checkbox .mdc-checkbox__ripple::before,.mdc-checkbox .mdc-checkbox__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}.mdc-checkbox:hover .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-ripple-surface--hover .mdc-checkbox__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-checkbox.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before,.mdc-checkbox:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-checkbox:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after{transition:opacity 150ms linear}.mdc-checkbox:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-checkbox.mdc-checkbox--selected:hover .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-checkbox--selected.mdc-ripple-surface--hover .mdc-checkbox__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after{transition:opacity 150ms linear}.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-checkbox .mdc-checkbox__background{top:calc((40px - 18px) / 2);top:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2);left:calc((40px - 18px) / 2);left:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2)}.mdc-checkbox .mdc-checkbox__native-control{top:calc((40px - 40px) / 2);top:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);right:calc((40px - 40px) / 2);right:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);left:calc((40px - 40px) / 2);left:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);width:40px;width:var(--mdc-checkbox-touch-target-size, 40px);height:40px;height:var(--mdc-checkbox-touch-target-size, 40px)}.mdc-checkbox .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:rgba(0, 0, 0, 0.54);border-color:var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54));background-color:transparent}.mdc-checkbox .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-checkbox .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background,.mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background{border-color:#018786;border-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786));background-color:#018786;background-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786))}@-webkit-keyframes mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786{0%{border-color:rgba(0, 0, 0, 0.54);border-color:var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54));background-color:transparent}50%{border-color:#018786;border-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786));background-color:#018786;background-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786))}}@keyframes mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786{0%{border-color:rgba(0, 0, 0, 0.54);border-color:var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54));background-color:transparent}50%{border-color:#018786;border-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786));background-color:#018786;background-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786))}}@-webkit-keyframes mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786{0%,80%{border-color:#018786;border-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786));background-color:#018786;background-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786))}100%{border-color:rgba(0, 0, 0, 0.54);border-color:var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54));background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786{0%,80%{border-color:#018786;border-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786));background-color:#018786;background-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786))}100%{border-color:rgba(0, 0, 0, 0.54);border-color:var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54));background-color:transparent}}.mdc-checkbox.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-checkbox.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786;animation-name:mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786}.mdc-checkbox.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-checkbox.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786;animation-name:mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786}.mdc-checkbox .mdc-checkbox__native-control[disabled]:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:rgba(0, 0, 0, 0.38);border-color:var(--mdc-checkbox-disabled-color, rgba(0, 0, 0, 0.38));background-color:transparent}.mdc-checkbox .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background,.mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0, 0, 0, 0.38);background-color:var(--mdc-checkbox-disabled-color, rgba(0, 0, 0, 0.38))}.mdc-checkbox .mdc-checkbox__native-control:enabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:#fff;color:var(--mdc-checkbox-ink-color, #fff)}.mdc-checkbox .mdc-checkbox__native-control:enabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff;border-color:var(--mdc-checkbox-ink-color, #fff)}.mdc-checkbox .mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:#fff;color:var(--mdc-checkbox-ink-color, #fff)}.mdc-checkbox .mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff;border-color:var(--mdc-checkbox-ink-color, #fff)}@-webkit-keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{-webkit-animation-timing-function:cubic-bezier(0, 0, 0.2, 1);animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{-webkit-animation-timing-function:cubic-bezier(0, 0, 0.2, 1);animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@-webkit-keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{-webkit-transform:scaleX(0);transform:scaleX(0)}68.2%{-webkit-animation-timing-function:cubic-bezier(0, 0, 0, 1);animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{-webkit-transform:scaleX(0);transform:scaleX(0)}68.2%{-webkit-animation-timing-function:cubic-bezier(0, 0, 0, 1);animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{-webkit-transform:scaleX(1);transform:scaleX(1)}}@-webkit-keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{-webkit-animation-timing-function:cubic-bezier(0.4, 0, 1, 1);animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{-webkit-animation-timing-function:cubic-bezier(0.4, 0, 1, 1);animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@-webkit-keyframes mdc-checkbox-checked-indeterminate-checkmark{from{-webkit-animation-timing-function:cubic-bezier(0, 0, 0.2, 1);animation-timing-function:cubic-bezier(0, 0, 0.2, 1);-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{-webkit-animation-timing-function:cubic-bezier(0, 0, 0.2, 1);animation-timing-function:cubic-bezier(0, 0, 0.2, 1);-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@-webkit-keyframes mdc-checkbox-indeterminate-checked-checkmark{from{-webkit-animation-timing-function:cubic-bezier(0.14, 0, 0, 1);animation-timing-function:cubic-bezier(0.14, 0, 0, 1);-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:rotate(360deg);transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{-webkit-animation-timing-function:cubic-bezier(0.14, 0, 0, 1);animation-timing-function:cubic-bezier(0.14, 0, 0, 1);-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:rotate(360deg);transform:rotate(360deg);opacity:1}}@-webkit-keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{-webkit-animation-timing-function:mdc-animation-deceleration-curve-timing-function;animation-timing-function:mdc-animation-deceleration-curve-timing-function;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{-webkit-animation-timing-function:mdc-animation-deceleration-curve-timing-function;animation-timing-function:mdc-animation-deceleration-curve-timing-function;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}}@-webkit-keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{-webkit-animation-timing-function:cubic-bezier(0.14, 0, 0, 1);animation-timing-function:cubic-bezier(0.14, 0, 0, 1);-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}to{-webkit-transform:rotate(315deg);transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{-webkit-animation-timing-function:cubic-bezier(0.14, 0, 0, 1);animation-timing-function:cubic-bezier(0.14, 0, 0, 1);-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}to{-webkit-transform:rotate(315deg);transform:rotate(315deg);opacity:0}}@-webkit-keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-transform:scaleX(1);transform:scaleX(1);opacity:1}32.8%,100%{-webkit-transform:scaleX(0);transform:scaleX(0);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-transform:scaleX(1);transform:scaleX(1);opacity:1}32.8%,100%{-webkit-transform:scaleX(0);transform:scaleX(0);opacity:0}}.mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-checkbox__native-control[disabled]:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:GrayText;border-color:var(--mdc-checkbox-disabled-color, GrayText);background-color:transparent}.mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background,.mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background{border-color:GrayText;background-color:transparent;background-color:var(--mdc-checkbox-disabled-color, transparent)}.mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:GrayText;color:var(--mdc-checkbox-ink-color, GrayText)}.mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:GrayText;border-color:var(--mdc-checkbox-ink-color, GrayText)}.mdc-checkbox__mixedmark{margin:0 1px}}.mdc-checkbox--disabled{cursor:default;pointer-events:none}.mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:transparent;pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox--upgraded .mdc-checkbox__checkmark{opacity:1}.mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms 0ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-checkbox__mixedmark{width:100%;height:0;-webkit-transform:scaleX(0) rotate(0deg);transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{-webkit-animation-duration:180ms;animation-duration:180ms;-webkit-animation-timing-function:linear;animation-timing-function:linear}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{-webkit-animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear 0s;animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear 0s;transition:none}.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{-webkit-animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear 0s;animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{-webkit-animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear 0s;animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{-webkit-animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear 0s;animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{-webkit-animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear 0s;animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{-webkit-animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear 0s;animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{-webkit-animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear 0s;animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{-webkit-animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear 0s;animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear 0s;transition:none}.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background{transition:border-color 90ms 0ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__checkmark-path,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__checkmark-path,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit}.mdc-checkbox__native-control:disabled{cursor:default;pointer-events:none}.mdc-checkbox--touch{margin:calc((48px - 40px) / 2);margin:calc((var(--mdc-checkbox-state-layer-size, 48px) - var(--mdc-checkbox-state-layer-size, 40px)) / 2)}.mdc-checkbox--touch .mdc-checkbox__native-control{top:calc((40px - 48px) / 2);top:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px)) / 2);right:calc((40px - 48px) / 2);right:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px)) / 2);left:calc((40px - 48px) / 2);left:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px)) / 2);width:48px;width:var(--mdc-checkbox-state-layer-size, 48px);height:48px;height:var(--mdc-checkbox-state-layer-size, 48px)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__checkmark{transition:opacity 180ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 180ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 180ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__mixedmark{-webkit-transform:scaleX(1) rotate(-45deg);transform:scaleX(1) rotate(-45deg)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__checkmark,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__checkmark{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0;transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__mixedmark,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__mixedmark{-webkit-transform:scaleX(1) rotate(0deg);transform:scaleX(1) rotate(0deg);opacity:1}.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__background,.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__checkmark,.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__checkmark-path,.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__mixedmark{transition:none}.mdc-checkbox{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-checkbox .mdc-checkbox__ripple::before,.mdc-checkbox .mdc-checkbox__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-checkbox .mdc-checkbox__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-checkbox .mdc-checkbox__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-checkbox.mdc-ripple-upgraded--unbounded .mdc-checkbox__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-checkbox.mdc-ripple-upgraded--foreground-activation .mdc-checkbox__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-checkbox.mdc-ripple-upgraded--foreground-deactivation .mdc-checkbox__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-checkbox .mdc-checkbox__ripple::before,.mdc-checkbox .mdc-checkbox__ripple::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-checkbox.mdc-ripple-upgraded .mdc-checkbox__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-checkbox{z-index:0}.mdc-checkbox .mdc-checkbox__ripple::before,.mdc-checkbox .mdc-checkbox__ripple::after{z-index:-1;z-index:var(--mdc-ripple-z-index, -1)}.mdc-checkbox__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-deprecated-chip-trailing-action__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.mdc-deprecated-chip-trailing-action{border:none;display:inline-flex;position:relative;align-items:center;justify-content:center;box-sizing:border-box;padding:0;outline:none;cursor:pointer;-webkit-appearance:none;background:none}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__icon{height:18px;width:18px;font-size:18px}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__touch{width:26px}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__icon{fill:currentColor;color:inherit}.mdc-deprecated-chip-trailing-action{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::before,.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded--unbounded .mdc-deprecated-chip-trailing-action__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded--foreground-activation .mdc-deprecated-chip-trailing-action__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded--foreground-deactivation .mdc-deprecated-chip-trailing-action__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::before,.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::before,.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::before,.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, var(--mdc-theme-on-surface, #000))}.mdc-deprecated-chip-trailing-action:hover .mdc-deprecated-chip-trailing-action__ripple::before,.mdc-deprecated-chip-trailing-action.mdc-ripple-surface--hover .mdc-deprecated-chip-trailing-action__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded--background-focused .mdc-deprecated-chip-trailing-action__ripple::before,.mdc-deprecated-chip-trailing-action:not(.mdc-ripple-upgraded):focus .mdc-deprecated-chip-trailing-action__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-deprecated-chip-trailing-action:not(.mdc-ripple-upgraded) .mdc-deprecated-chip-trailing-action__ripple::after{transition:opacity 150ms linear}.mdc-deprecated-chip-trailing-action:not(.mdc-ripple-upgraded):active .mdc-deprecated-chip-trailing-action__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple{position:absolute;box-sizing:content-box;width:100%;height:100%;overflow:hidden}.mdc-chip__icon--leading{color:rgba(0,0,0,.54)}.mdc-deprecated-chip-trailing-action{color:#000}.mdc-chip__icon--trailing{color:rgba(0,0,0,.54)}.mdc-chip__icon--trailing:hover{color:rgba(0,0,0,.62)}.mdc-chip__icon--trailing:focus{color:rgba(0,0,0,.87)}.mdc-chip__icon.mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden){width:20px;height:20px;font-size:20px}.mdc-deprecated-chip-trailing-action__icon{height:18px;width:18px;font-size:18px}.mdc-chip__icon.mdc-chip__icon--trailing{width:18px;height:18px;font-size:18px}.mdc-deprecated-chip-trailing-action{margin-left:4px;margin-right:-4px}[dir=rtl] .mdc-deprecated-chip-trailing-action,.mdc-deprecated-chip-trailing-action[dir=rtl]{margin-left:-4px;margin-right:4px}.mdc-chip__icon--trailing{margin-left:4px;margin-right:-4px}[dir=rtl] .mdc-chip__icon--trailing,.mdc-chip__icon--trailing[dir=rtl]{margin-left:-4px;margin-right:4px}.mdc-chip{border-radius:16px;background-color:#e0e0e0;color:rgba(0, 0, 0, 0.87);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);height:32px;position:relative;display:inline-flex;align-items:center;box-sizing:border-box;padding:0 12px;border-width:0;outline:none;cursor:pointer;-webkit-appearance:none}.mdc-chip .mdc-chip__ripple{border-radius:16px}.mdc-chip:hover{color:rgba(0, 0, 0, 0.87)}.mdc-chip.mdc-chip--selected .mdc-chip__checkmark,.mdc-chip .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden){margin-left:-4px;margin-right:4px}[dir=rtl] .mdc-chip.mdc-chip--selected .mdc-chip__checkmark,[dir=rtl] .mdc-chip .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden),.mdc-chip.mdc-chip--selected .mdc-chip__checkmark[dir=rtl],.mdc-chip .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden)[dir=rtl]{margin-left:4px;margin-right:-4px}.mdc-chip .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-chip::-moz-focus-inner{padding:0;border:0}.mdc-chip:hover{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-chip .mdc-chip__touch{position:absolute;top:50%;height:48px;left:0;right:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.mdc-chip--exit{transition:opacity 75ms cubic-bezier(0.4, 0, 0.2, 1),width 150ms cubic-bezier(0, 0, 0.2, 1),padding 100ms linear,margin 100ms linear;opacity:0}.mdc-chip__overflow{text-overflow:ellipsis;overflow:hidden}.mdc-chip__text{white-space:nowrap}.mdc-chip__icon{border-radius:50%;outline:none;vertical-align:middle}.mdc-chip__checkmark{height:20px}.mdc-chip__checkmark-path{transition:stroke-dashoffset 150ms 50ms cubic-bezier(0.4, 0, 0.6, 1);stroke-width:2px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-chip__primary-action:focus{outline:none}.mdc-chip--selected .mdc-chip__checkmark-path{stroke-dashoffset:0}.mdc-chip__icon--leading,.mdc-chip__icon--trailing{position:relative}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__icon--leading{color:rgba(98,0,238,.54)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:hover{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-chip-set--choice .mdc-chip .mdc-chip__checkmark-path{stroke:#6200ee;stroke:var(--mdc-theme-primary, #6200ee)}.mdc-chip-set--choice .mdc-chip--selected{background-color:#fff;background-color:var(--mdc-theme-surface, #fff)}.mdc-chip__checkmark-svg{width:0;height:20px;transition:width 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-chip--selected .mdc-chip__checkmark-svg{width:20px}.mdc-chip-set--filter .mdc-chip__icon--leading{transition:opacity 75ms linear;transition-delay:-50ms;opacity:1}.mdc-chip-set--filter .mdc-chip__icon--leading+.mdc-chip__checkmark{transition:opacity 75ms linear;transition-delay:80ms;opacity:0}.mdc-chip-set--filter .mdc-chip__icon--leading+.mdc-chip__checkmark .mdc-chip__checkmark-svg{transition:width 0ms}.mdc-chip-set--filter .mdc-chip--selected .mdc-chip__icon--leading{opacity:0}.mdc-chip-set--filter .mdc-chip--selected .mdc-chip__icon--leading+.mdc-chip__checkmark{width:0;opacity:1}.mdc-chip-set--filter .mdc-chip__icon--leading-hidden.mdc-chip__icon--leading{width:0;opacity:0}.mdc-chip-set--filter .mdc-chip__icon--leading-hidden.mdc-chip__icon--leading+.mdc-chip__checkmark{width:20px}.mdc-chip{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-chip .mdc-chip__ripple::before,.mdc-chip .mdc-chip__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-chip .mdc-chip__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-chip .mdc-chip__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-chip.mdc-ripple-upgraded .mdc-chip__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-chip.mdc-ripple-upgraded .mdc-chip__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-chip.mdc-ripple-upgraded--unbounded .mdc-chip__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-chip.mdc-ripple-upgraded--foreground-activation .mdc-chip__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-chip.mdc-ripple-upgraded--foreground-deactivation .mdc-chip__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-chip .mdc-chip__ripple::before,.mdc-chip .mdc-chip__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-chip.mdc-ripple-upgraded .mdc-chip__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-chip .mdc-chip__ripple::before,.mdc-chip .mdc-chip__ripple::after{background-color:rgba(0, 0, 0, 0.87);background-color:var(--mdc-ripple-color, rgba(0, 0, 0, 0.87))}.mdc-chip:hover .mdc-chip__ripple::before,.mdc-chip.mdc-ripple-surface--hover .mdc-chip__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-chip.mdc-ripple-upgraded--background-focused .mdc-chip__ripple::before,.mdc-chip.mdc-ripple-upgraded:focus-within .mdc-chip__ripple::before,.mdc-chip:not(.mdc-ripple-upgraded):focus .mdc-chip__ripple::before,.mdc-chip:not(.mdc-ripple-upgraded):focus-within .mdc-chip__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-chip:not(.mdc-ripple-upgraded) .mdc-chip__ripple::after{transition:opacity 150ms linear}.mdc-chip:not(.mdc-ripple-upgraded):active .mdc-chip__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-chip.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-chip .mdc-chip__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:hidden}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__ripple::before{opacity:0.08;opacity:var(--mdc-ripple-selected-opacity, 0.08)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:hover .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-surface--hover .mdc-chip__ripple::before{opacity:0.12;opacity:var(--mdc-ripple-hover-opacity, 0.12)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-upgraded--background-focused .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-upgraded:focus-within .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded):focus .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded):focus-within .mdc-chip__ripple::before{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-focus-opacity, 0.2)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded) .mdc-chip__ripple::after{transition:opacity 150ms linear}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded):active .mdc-chip__ripple::after{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.2)}@-webkit-keyframes mdc-chip-entry{from{-webkit-transform:scale(0.8);transform:scale(0.8);opacity:.4}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes mdc-chip-entry{from{-webkit-transform:scale(0.8);transform:scale(0.8);opacity:.4}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.mdc-chip-set{padding:4px;display:flex;flex-wrap:wrap;box-sizing:border-box}.mdc-chip-set .mdc-chip{margin:4px}.mdc-chip-set .mdc-chip--touch{margin-top:8px;margin-bottom:8px}.mdc-chip-set--input .mdc-chip{-webkit-animation:mdc-chip-entry 100ms cubic-bezier(0, 0, 0.2, 1);animation:mdc-chip-entry 100ms cubic-bezier(0, 0, 0.2, 1)}.mdc-circular-progress__determinate-circle,.mdc-circular-progress__indeterminate-circle-graphic{stroke:#6200ee;stroke:var(--mdc-theme-primary, #6200ee)}.mdc-circular-progress__determinate-track{stroke:transparent}@-webkit-keyframes mdc-circular-progress-container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes mdc-circular-progress-container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes mdc-circular-progress-spinner-layer-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)}100%{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@keyframes mdc-circular-progress-spinner-layer-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)}100%{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes mdc-circular-progress-color-1-fade-in-out{from{opacity:.99}25%{opacity:.99}26%{opacity:0}89%{opacity:0}90%{opacity:.99}to{opacity:.99}}@keyframes mdc-circular-progress-color-1-fade-in-out{from{opacity:.99}25%{opacity:.99}26%{opacity:0}89%{opacity:0}90%{opacity:.99}to{opacity:.99}}@-webkit-keyframes mdc-circular-progress-color-2-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:.99}50%{opacity:.99}51%{opacity:0}to{opacity:0}}@keyframes mdc-circular-progress-color-2-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:.99}50%{opacity:.99}51%{opacity:0}to{opacity:0}}@-webkit-keyframes mdc-circular-progress-color-3-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:.99}75%{opacity:.99}76%{opacity:0}to{opacity:0}}@keyframes mdc-circular-progress-color-3-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:.99}75%{opacity:.99}76%{opacity:0}to{opacity:0}}@-webkit-keyframes mdc-circular-progress-color-4-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:.99}90%{opacity:.99}to{opacity:0}}@keyframes mdc-circular-progress-color-4-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:.99}90%{opacity:.99}to{opacity:0}}@-webkit-keyframes mdc-circular-progress-left-spin{from{-webkit-transform:rotate(265deg);transform:rotate(265deg)}50%{-webkit-transform:rotate(130deg);transform:rotate(130deg)}to{-webkit-transform:rotate(265deg);transform:rotate(265deg)}}@keyframes mdc-circular-progress-left-spin{from{-webkit-transform:rotate(265deg);transform:rotate(265deg)}50%{-webkit-transform:rotate(130deg);transform:rotate(130deg)}to{-webkit-transform:rotate(265deg);transform:rotate(265deg)}}@-webkit-keyframes mdc-circular-progress-right-spin{from{-webkit-transform:rotate(-265deg);transform:rotate(-265deg)}50%{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}to{-webkit-transform:rotate(-265deg);transform:rotate(-265deg)}}@keyframes mdc-circular-progress-right-spin{from{-webkit-transform:rotate(-265deg);transform:rotate(-265deg)}50%{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}to{-webkit-transform:rotate(-265deg);transform:rotate(-265deg)}}.mdc-circular-progress{display:inline-flex;position:relative;direction:ltr;line-height:0;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-circular-progress__determinate-container,.mdc-circular-progress__indeterminate-circle-graphic,.mdc-circular-progress__indeterminate-container,.mdc-circular-progress__spinner-layer{position:absolute;width:100%;height:100%}.mdc-circular-progress__determinate-container{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.mdc-circular-progress__indeterminate-container{font-size:0;letter-spacing:0;white-space:nowrap;opacity:0}.mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress__indeterminate-circle-graphic{fill:transparent}.mdc-circular-progress__determinate-circle{transition:stroke-dashoffset 500ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-circular-progress__gap-patch{position:absolute;top:0;left:47.5%;box-sizing:border-box;width:5%;height:100%;overflow:hidden}.mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{left:-900%;width:2000%;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.mdc-circular-progress__circle-clipper{display:inline-flex;position:relative;width:50%;height:100%;overflow:hidden}.mdc-circular-progress__circle-clipper .mdc-circular-progress__indeterminate-circle-graphic{width:200%}.mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{left:-100%}.mdc-circular-progress--indeterminate .mdc-circular-progress__determinate-container{opacity:0}.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container{opacity:1}.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container{-webkit-animation:mdc-circular-progress-container-rotate 1568.2352941176ms linear infinite;animation:mdc-circular-progress-container-rotate 1568.2352941176ms linear infinite}.mdc-circular-progress--indeterminate .mdc-circular-progress__spinner-layer{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-1{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-2{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-3{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-4{-webkit-animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-left .mdc-circular-progress__indeterminate-circle-graphic{-webkit-animation:mdc-circular-progress-left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{-webkit-animation:mdc-circular-progress-right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:mdc-circular-progress-right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--closed{opacity:0}.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);position:absolute;left:0;-webkit-transform-origin:left top;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform;transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1)}[dir=rtl] .mdc-floating-label,.mdc-floating-label[dir=rtl]{right:0;left:auto;-webkit-transform-origin:right top;transform-origin:right top;text-align:right}.mdc-floating-label--float-above{cursor:auto}.mdc-floating-label--required::after{margin-left:1px;margin-right:0px;content:"*"}[dir=rtl] .mdc-floating-label--required::after,.mdc-floating-label--required[dir=rtl]::after{margin-left:0;margin-right:1px}.mdc-floating-label--float-above{-webkit-transform:translateY(-106%) scale(0.75);transform:translateY(-106%) scale(0.75)}.mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-standard 250ms 1;animation:mdc-floating-label-shake-float-above-standard 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-standard{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-106%) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-standard{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-106%) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:""}.mdc-line-ripple::before{border-bottom-width:1px;z-index:1}.mdc-line-ripple::after{-webkit-transform:scaleX(0);transform:scaleX(0);border-bottom-width:2px;opacity:0;z-index:2}.mdc-line-ripple::after{transition:opacity 180ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-transform 180ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-transform 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-line-ripple--active::after{-webkit-transform:scaleX(1);transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline,.mdc-notched-outline[dir=rtl]{text-align:right}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{box-sizing:border-box;height:100%;border-top:1px solid;border-bottom:1px solid;pointer-events:none}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;width:12px}[dir=rtl] .mdc-notched-outline__leading,.mdc-notched-outline__leading[dir=rtl]{border-left:none;border-right:1px solid}.mdc-notched-outline__trailing{border-left:none;border-right:1px solid;flex-grow:1}[dir=rtl] .mdc-notched-outline__trailing,.mdc-notched-outline__trailing[dir=rtl]{border-left:1px solid;border-right:none}.mdc-notched-outline__notch{flex:0 0 auto;width:auto;max-width:calc(100% - 12px * 2)}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(100% / 0.75)}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch,.mdc-notched-outline--notched .mdc-notched-outline__notch[dir=rtl]{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-select{display:inline-flex;position:relative}.mdc-select:not(.mdc-select--disabled) .mdc-select__selected-text{color:rgba(0, 0, 0, 0.87)}.mdc-select.mdc-select--disabled .mdc-select__selected-text{color:rgba(0, 0, 0, 0.38)}.mdc-select:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0, 0, 0, 0.6)}.mdc-select:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:rgba(98, 0, 238, 0.87)}.mdc-select.mdc-select--disabled .mdc-floating-label{color:rgba(0, 0, 0, 0.38)}.mdc-select:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:rgba(0, 0, 0, 0.54)}.mdc-select:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon{fill:#6200ee;fill:var(--mdc-theme-primary, #6200ee)}.mdc-select.mdc-select--disabled .mdc-select__dropdown-icon{fill:rgba(0, 0, 0, 0.38)}.mdc-select:not(.mdc-select--disabled)+.mdc-select-helper-text{color:rgba(0, 0, 0, 0.6)}.mdc-select.mdc-select--disabled+.mdc-select-helper-text{color:rgba(0, 0, 0, 0.38)}.mdc-select:not(.mdc-select--disabled) .mdc-select__icon{color:rgba(0, 0, 0, 0.54)}.mdc-select.mdc-select--disabled .mdc-select__icon{color:rgba(0, 0, 0, 0.38)}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-select.mdc-select--disabled .mdc-select__selected-text{color:GrayText}.mdc-select.mdc-select--disabled .mdc-select__dropdown-icon{fill:red}.mdc-select.mdc-select--disabled .mdc-floating-label{color:GrayText}.mdc-select.mdc-select--disabled .mdc-line-ripple::before{border-bottom-color:GrayText}.mdc-select.mdc-select--disabled .mdc-notched-outline__leading,.mdc-select.mdc-select--disabled .mdc-notched-outline__notch,.mdc-select.mdc-select--disabled .mdc-notched-outline__trailing{border-color:GrayText}.mdc-select.mdc-select--disabled .mdc-select__icon{color:GrayText}.mdc-select.mdc-select--disabled+.mdc-select-helper-text{color:GrayText}}.mdc-select .mdc-floating-label{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);pointer-events:none}.mdc-select .mdc-select__anchor{padding-left:16px;padding-right:0}[dir=rtl] .mdc-select .mdc-select__anchor,.mdc-select .mdc-select__anchor[dir=rtl]{padding-left:0;padding-right:16px}.mdc-select.mdc-select--with-leading-icon .mdc-select__anchor{padding-left:0;padding-right:0}[dir=rtl] .mdc-select.mdc-select--with-leading-icon .mdc-select__anchor,.mdc-select.mdc-select--with-leading-icon .mdc-select__anchor[dir=rtl]{padding-left:0;padding-right:0}.mdc-select .mdc-select__icon{width:24px;height:24px;font-size:24px}.mdc-select .mdc-select__dropdown-icon{width:24px;height:24px}.mdc-select .mdc-select__menu .mdc-deprecated-list-item{padding-left:16px;padding-right:16px}[dir=rtl] .mdc-select .mdc-select__menu .mdc-deprecated-list-item,.mdc-select .mdc-select__menu .mdc-deprecated-list-item[dir=rtl]{padding-left:16px;padding-right:16px}.mdc-select .mdc-select__menu .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:12px}[dir=rtl] .mdc-select .mdc-select__menu .mdc-deprecated-list-item__graphic,.mdc-select .mdc-select__menu .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:12px;margin-right:0}.mdc-select__dropdown-icon{margin-left:12px;margin-right:12px;display:inline-flex;position:relative;align-self:center;align-items:center;justify-content:center;flex-shrink:0;pointer-events:none}.mdc-select__dropdown-icon .mdc-select__dropdown-icon-active,.mdc-select__dropdown-icon .mdc-select__dropdown-icon-inactive{position:absolute;top:0;left:0}.mdc-select__dropdown-icon .mdc-select__dropdown-icon-graphic{width:41.6666666667%;height:20.8333333333%}.mdc-select__dropdown-icon .mdc-select__dropdown-icon-inactive{opacity:1;transition:opacity 75ms linear 75ms}.mdc-select__dropdown-icon .mdc-select__dropdown-icon-active{opacity:0;transition:opacity 75ms linear}[dir=rtl] .mdc-select__dropdown-icon,.mdc-select__dropdown-icon[dir=rtl]{margin-left:12px;margin-right:12px}.mdc-select--activated .mdc-select__dropdown-icon .mdc-select__dropdown-icon-inactive{opacity:0;transition:opacity 49.5ms linear}.mdc-select--activated .mdc-select__dropdown-icon .mdc-select__dropdown-icon-active{opacity:1;transition:opacity 100.5ms linear 49.5ms}.mdc-select__anchor{width:200px;min-width:0;flex:1 1 auto;position:relative;box-sizing:border-box;overflow:hidden;outline:none;cursor:pointer}.mdc-select__anchor .mdc-floating-label--float-above{-webkit-transform:translateY(-106%) scale(0.75);transform:translateY(-106%) scale(0.75)}.mdc-select__selected-text-container{display:flex;-webkit-appearance:none;-moz-appearance:none;appearance:none;pointer-events:none;box-sizing:border-box;width:auto;min-width:0;flex-grow:1;height:28px;border:none;outline:none;padding:0;background-color:transparent;color:inherit}.mdc-select__selected-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;width:100%;text-align:left}[dir=rtl] .mdc-select__selected-text,.mdc-select__selected-text[dir=rtl]{text-align:right}.mdc-select--invalid:not(.mdc-select--disabled) .mdc-floating-label{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--invalid+.mdc-select-helper-text--validation-msg{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#b00020;fill:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon{fill:#b00020;fill:var(--mdc-theme-error, #b00020)}.mdc-select--disabled{cursor:default;pointer-events:none}.mdc-select--with-leading-icon .mdc-select__menu .mdc-deprecated-list-item{padding-left:12px;padding-right:12px}[dir=rtl] .mdc-select--with-leading-icon .mdc-select__menu .mdc-deprecated-list-item,.mdc-select--with-leading-icon .mdc-select__menu .mdc-deprecated-list-item[dir=rtl]{padding-left:12px;padding-right:12px}.mdc-select__menu .mdc-deprecated-list .mdc-select__icon{margin-left:0;margin-right:0}[dir=rtl] .mdc-select__menu .mdc-deprecated-list .mdc-select__icon,.mdc-select__menu .mdc-deprecated-list .mdc-select__icon[dir=rtl]{margin-left:0;margin-right:0}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--activated{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__graphic,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--activated .mdc-deprecated-list-item__graphic{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-select--filled .mdc-select__anchor{height:56px;display:flex;align-items:baseline}.mdc-select--filled .mdc-select__anchor::before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}.mdc-select--filled.mdc-select--no-label .mdc-select__anchor .mdc-select__selected-text::before{content:"​"}.mdc-select--filled.mdc-select--no-label .mdc-select__anchor .mdc-select__selected-text-container{height:100%;display:inline-flex;align-items:center}.mdc-select--filled.mdc-select--no-label .mdc-select__anchor::before{display:none}.mdc-select--filled .mdc-select__anchor{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-select--filled:not(.mdc-select--disabled) .mdc-select__anchor{background-color:whitesmoke}.mdc-select--filled.mdc-select--disabled .mdc-select__anchor{background-color:#fafafa}.mdc-select--filled:not(.mdc-select--disabled) .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.42)}.mdc-select--filled:not(.mdc-select--disabled):hover .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.87)}.mdc-select--filled:not(.mdc-select--disabled) .mdc-line-ripple::after{border-bottom-color:#6200ee;border-bottom-color:var(--mdc-theme-primary, #6200ee)}.mdc-select--filled.mdc-select--disabled .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.06)}.mdc-select--filled .mdc-floating-label{max-width:calc(100% - 64px)}.mdc-select--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-select--filled .mdc-menu-surface--is-open-below{border-top-left-radius:0px;border-top-right-radius:0px}.mdc-select--filled.mdc-select--focused.mdc-line-ripple::after{-webkit-transform:scale(1, 2);transform:scale(1, 2);opacity:1}.mdc-select--filled .mdc-floating-label{left:16px;right:initial}[dir=rtl] .mdc-select--filled .mdc-floating-label,.mdc-select--filled .mdc-floating-label[dir=rtl]{left:initial;right:16px}.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label{left:48px;right:initial}[dir=rtl] .mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label,.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label[dir=rtl]{left:initial;right:48px}.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label{max-width:calc(100% - 96px)}.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 96px / 0.75)}.mdc-select--invalid:not(.mdc-select--disabled) .mdc-line-ripple::before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled):hover .mdc-line-ripple::before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled) .mdc-line-ripple::after{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-select--outlined{border:none}.mdc-select--outlined .mdc-select__anchor{height:56px}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above{-webkit-transform:translateY(-37.25px) scale(1);transform:translateY(-37.25px) scale(1)}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above{font-size:.75rem}.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-34.75px) scale(0.75);transform:translateY(-34.75px) scale(0.75)}.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-select-outlined-56px 250ms 1;animation:mdc-floating-label-shake-float-above-select-outlined-56px 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-select-outlined-56px{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-select-outlined-56px{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}}.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}[dir=rtl] .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}@supports(top: max(0%)){.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px, var(--mdc-shape-small, 4px)) * 2)}}.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}[dir=rtl] .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}@supports(top: max(0%)){.mdc-select--outlined .mdc-select__anchor{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}[dir=rtl] .mdc-select--outlined .mdc-select__anchor,.mdc-select--outlined .mdc-select__anchor[dir=rtl]{padding-left:0}@supports(top: max(0%)){[dir=rtl] .mdc-select--outlined .mdc-select__anchor,.mdc-select--outlined .mdc-select__anchor[dir=rtl]{padding-right:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-select--outlined+.mdc-select-helper-text{margin-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}[dir=rtl] .mdc-select--outlined+.mdc-select-helper-text,.mdc-select--outlined+.mdc-select-helper-text[dir=rtl]{margin-left:0}@supports(top: max(0%)){[dir=rtl] .mdc-select--outlined+.mdc-select-helper-text,.mdc-select--outlined+.mdc-select-helper-text[dir=rtl]{margin-right:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}.mdc-select--outlined:not(.mdc-select--disabled) .mdc-select__anchor{background-color:transparent}.mdc-select--outlined.mdc-select--disabled .mdc-select__anchor{background-color:transparent}.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__trailing{border-color:rgba(0, 0, 0, 0.38)}.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:rgba(0, 0, 0, 0.87)}.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-width:2px}.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-select--outlined.mdc-select--disabled .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--disabled .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--disabled .mdc-notched-outline__trailing{border-color:rgba(0, 0, 0, 0.06)}.mdc-select--outlined .mdc-select__anchor :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-select--outlined .mdc-select__anchor{display:flex;align-items:baseline;overflow:visible}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-select-outlined 250ms 1;animation:mdc-floating-label-shake-float-above-select-outlined 250ms 1}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above{-webkit-transform:translateY(-37.25px) scale(1);transform:translateY(-37.25px) scale(1)}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above{font-size:.75rem}.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-34.75px) scale(0.75);transform:translateY(-34.75px) scale(0.75)}.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-select--outlined .mdc-select__anchor .mdc-select__selected-text::before{content:"​"}.mdc-select--outlined .mdc-select__anchor .mdc-select__selected-text-container{height:100%;display:inline-flex;align-items:center}.mdc-select--outlined .mdc-select__anchor::before{display:none}.mdc-select--outlined .mdc-select__selected-text-container{display:flex;border:none;z-index:1;background-color:transparent}.mdc-select--outlined .mdc-select__icon{z-index:2}.mdc-select--outlined .mdc-floating-label{line-height:1.15rem;left:4px;right:initial}[dir=rtl] .mdc-select--outlined .mdc-floating-label,.mdc-select--outlined .mdc-floating-label[dir=rtl]{left:initial;right:4px}.mdc-select--outlined.mdc-select--focused .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled) .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled) .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled) .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-width:2px}.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label{left:36px;right:initial}[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label,.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label[dir=rtl]{left:initial;right:36px}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above{-webkit-transform:translateY(-37.25px) translateX(-32px) scale(1);transform:translateY(-37.25px) translateX(-32px) scale(1)}[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above,.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above[dir=rtl]{-webkit-transform:translateY(-37.25px) translateX(32px) scale(1);transform:translateY(-37.25px) translateX(32px) scale(1)}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above{font-size:.75rem}.mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-34.75px) translateX(-32px) scale(0.75);transform:translateY(-34.75px) translateX(-32px) scale(0.75)}[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above,[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],.mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl]{-webkit-transform:translateY(-34.75px) translateX(32px) scale(0.75);transform:translateY(-34.75px) translateX(32px) scale(0.75)}.mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px 250ms 1;animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px{0%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px{0%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}}[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--shake,.mdc-select--outlined.mdc-select--with-leading-icon[dir=rtl] .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px 250ms 1;animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px-rtl{0%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px-rtl{0%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-select__anchor :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 96px)}.mdc-select--outlined .mdc-menu-surface{margin-bottom:8px}.mdc-select--outlined.mdc-select--no-label .mdc-menu-surface,.mdc-select--outlined .mdc-menu-surface--is-open-below{margin-bottom:0}.mdc-select__anchor{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-select__anchor .mdc-select__ripple::before,.mdc-select__anchor .mdc-select__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-select__anchor .mdc-select__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-select__anchor .mdc-select__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-select__anchor.mdc-ripple-upgraded--unbounded .mdc-select__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-select__anchor.mdc-ripple-upgraded--foreground-activation .mdc-select__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-select__anchor.mdc-ripple-upgraded--foreground-deactivation .mdc-select__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-select__anchor .mdc-select__ripple::before,.mdc-select__anchor .mdc-select__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-select__anchor .mdc-select__ripple::before,.mdc-select__anchor .mdc-select__ripple::after{background-color:rgba(0, 0, 0, 0.87);background-color:var(--mdc-ripple-color, rgba(0, 0, 0, 0.87))}.mdc-select__anchor:hover .mdc-select__ripple::before,.mdc-select__anchor.mdc-ripple-surface--hover .mdc-select__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-select__anchor.mdc-ripple-upgraded--background-focused .mdc-select__ripple::before,.mdc-select__anchor:not(.mdc-ripple-upgraded):focus .mdc-select__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-select__anchor .mdc-select__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple::before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, var(--mdc-theme-on-surface, #000))}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:hover .mdc-deprecated-list-item__ripple::before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-deprecated-list-item__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple::before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-deprecated-list-item__ripple::after{transition:opacity 150ms linear}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-deprecated-list-item__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-list-item__ripple::before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-list-item__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, var(--mdc-theme-on-surface, #000))}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:hover .mdc-list-item__ripple::before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-list-item__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after{transition:opacity 150ms linear}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-select-helper-text{margin:0;margin-left:16px;margin-right:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:0.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit);display:block;margin-top:0;line-height:normal}[dir=rtl] .mdc-select-helper-text,.mdc-select-helper-text[dir=rtl]{margin-left:16px;margin-right:16px}.mdc-select-helper-text::before{display:inline-block;width:0;height:16px;content:"";vertical-align:0}.mdc-select-helper-text--validation-msg{opacity:0;transition:opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-select--invalid+.mdc-select-helper-text--validation-msg,.mdc-select-helper-text--validation-msg-persistent{opacity:1}.mdc-select--with-leading-icon .mdc-select__icon{display:inline-block;box-sizing:border-box;border:none;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;flex-shrink:0;align-self:center;background-color:transparent;fill:currentColor}.mdc-select--with-leading-icon .mdc-select__icon{margin-left:12px;margin-right:12px}[dir=rtl] .mdc-select--with-leading-icon .mdc-select__icon,.mdc-select--with-leading-icon .mdc-select__icon[dir=rtl]{margin-left:12px;margin-right:12px}.mdc-select__icon:not([tabindex]),.mdc-select__icon[tabindex="-1"]{cursor:default;pointer-events:none}.mdc-data-table__content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit)}.mdc-data-table{background-color:#fff;background-color:var(--mdc-theme-surface, #fff);border-radius:4px;border-radius:var(--mdc-shape-medium, 4px);border-width:1px;border-style:solid;border-color:rgba(0,0,0,.12);-webkit-overflow-scrolling:touch;display:inline-flex;flex-direction:column;box-sizing:border-box;position:relative}.mdc-data-table .mdc-data-table__header-cell:first-child{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-medium, 4px)}[dir=rtl] .mdc-data-table .mdc-data-table__header-cell:first-child,.mdc-data-table .mdc-data-table__header-cell:first-child[dir=rtl]{border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-medium, 4px);border-top-left-radius:0}.mdc-data-table .mdc-data-table__header-cell:last-child{border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-medium, 4px)}[dir=rtl] .mdc-data-table .mdc-data-table__header-cell:last-child,.mdc-data-table .mdc-data-table__header-cell:last-child[dir=rtl]{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-medium, 4px);border-top-right-radius:0}.mdc-data-table__row{background-color:inherit}.mdc-data-table__header-cell{background-color:#fff;background-color:var(--mdc-theme-surface, #fff)}.mdc-data-table__row--selected{background-color:rgba(98, 0, 238, 0.04)}.mdc-data-table__pagination-rows-per-page-select:not(.mdc-select--disabled) .mdc-notched-outline__leading,.mdc-data-table__pagination-rows-per-page-select:not(.mdc-select--disabled) .mdc-notched-outline__notch,.mdc-data-table__pagination-rows-per-page-select:not(.mdc-select--disabled) .mdc-notched-outline__trailing{border-color:rgba(0, 0, 0, 0.12)}.mdc-data-table__cell,.mdc-data-table__header-cell{border-bottom-color:rgba(0,0,0,.12)}.mdc-data-table__pagination{border-top-color:rgba(0,0,0,.12)}.mdc-data-table__cell,.mdc-data-table__header-cell{border-bottom-width:1px;border-bottom-style:solid}.mdc-data-table__pagination{border-top-width:1px;border-top-style:solid}.mdc-data-table__row:last-child .mdc-data-table__cell{border-bottom:none}.mdc-data-table__row:not(.mdc-data-table__row--selected):hover{background-color:rgba(0, 0, 0, 0.04)}.mdc-data-table__header-cell{color:rgba(0, 0, 0, 0.87)}.mdc-data-table__pagination-total,.mdc-data-table__pagination-rows-per-page-label,.mdc-data-table__cell{color:rgba(0, 0, 0, 0.87)}.mdc-data-table__row{height:52px}.mdc-data-table__pagination{min-height:52px}.mdc-data-table__header-row{height:56px}.mdc-data-table__cell,.mdc-data-table__header-cell{padding:0 16px 0 16px}.mdc-data-table__header-cell--checkbox,.mdc-data-table__cell--checkbox{padding-left:4px;padding-right:0}[dir=rtl] .mdc-data-table__header-cell--checkbox,[dir=rtl] .mdc-data-table__cell--checkbox,.mdc-data-table__header-cell--checkbox[dir=rtl],.mdc-data-table__cell--checkbox[dir=rtl]{padding-left:0;padding-right:4px}.mdc-data-table__sort-icon-button{color:rgba(0, 0, 0, 0.6)}.mdc-data-table__sort-icon-button .mdc-icon-button__ripple::before,.mdc-data-table__sort-icon-button .mdc-icon-button__ripple::after{background-color:rgba(0, 0, 0, 0.6);background-color:var(--mdc-ripple-color, rgba(0, 0, 0, 0.6))}.mdc-data-table__sort-icon-button:hover .mdc-icon-button__ripple::before,.mdc-data-table__sort-icon-button.mdc-ripple-surface--hover .mdc-icon-button__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-data-table__sort-icon-button.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple::before,.mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple::after{transition:opacity 150ms linear}.mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-data-table__sort-icon-button.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button{color:rgba(0, 0, 0, 0.87)}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button .mdc-icon-button__ripple::before,.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button .mdc-icon-button__ripple::after{background-color:rgba(0, 0, 0, 0.87);background-color:var(--mdc-ripple-color, rgba(0, 0, 0, 0.87))}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button:hover .mdc-icon-button__ripple::before,.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button.mdc-ripple-surface--hover .mdc-icon-button__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple::before,.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple::after{transition:opacity 150ms linear}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-data-table__table-container{-webkit-overflow-scrolling:touch;overflow-x:auto;width:100%}.mdc-data-table__table{min-width:100%;border:0;white-space:nowrap;border-spacing:0;table-layout:fixed}.mdc-data-table__cell{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);box-sizing:border-box;overflow:hidden;text-align:left;text-overflow:ellipsis}[dir=rtl] .mdc-data-table__cell,.mdc-data-table__cell[dir=rtl]{text-align:right}.mdc-data-table__cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__cell--numeric,.mdc-data-table__cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__cell--checkbox{width:1px}.mdc-data-table__header-cell{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-subtitle2-font-size, 0.875rem);line-height:1.375rem;line-height:var(--mdc-typography-subtitle2-line-height, 1.375rem);font-weight:500;font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:0.0071428571em;letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, 0.0071428571em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle2-text-transform, inherit);box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none;text-align:left}[dir=rtl] .mdc-data-table__header-cell,.mdc-data-table__header-cell[dir=rtl]{text-align:right}.mdc-data-table__header-cell--checkbox{width:1px}.mdc-data-table__header-cell--numeric{text-align:right}[dir=rtl] .mdc-data-table__header-cell--numeric,.mdc-data-table__header-cell--numeric[dir=rtl]{text-align:left}.mdc-data-table__sort-icon-button{width:28px;height:28px;padding:2px;-webkit-transform:rotate(0.0001deg);transform:rotate(0.0001deg);margin-left:4px;margin-right:0;transition:-webkit-transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}.mdc-data-table__sort-icon-button.mdc-icon-button--touch{margin-top:0;margin-bottom:0}.mdc-data-table__sort-icon-button.mdc-icon-button--touch .mdc-icon-button__touch{display:none}[dir=rtl] .mdc-data-table__sort-icon-button,.mdc-data-table__sort-icon-button[dir=rtl]{margin-left:0;margin-right:4px}.mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button{margin-left:0;margin-right:4px}[dir=rtl] .mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button,.mdc-data-table__header-cell--numeric .mdc-data-table__sort-icon-button[dir=rtl]{margin-left:4px;margin-right:0}.mdc-data-table__header-cell--sorted-descending .mdc-data-table__sort-icon-button{-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}.mdc-data-table__sort-icon-button:focus,.mdc-data-table__header-cell:hover .mdc-data-table__sort-icon-button,.mdc-data-table__header-cell--sorted .mdc-data-table__sort-icon-button{opacity:1}.mdc-data-table__header-cell-wrapper{align-items:center;display:inline-flex;vertical-align:middle}.mdc-data-table__header-cell--with-sort{cursor:pointer}.mdc-data-table__sort-status-label{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.mdc-data-table__progress-indicator{display:none;position:absolute;width:100%}.mdc-data-table--in-progress .mdc-data-table__progress-indicator{display:block}.mdc-data-table__scrim{background-color:#fff;background-color:var(--mdc-theme-surface, #fff);height:100%;opacity:.32;position:absolute;top:0;width:100%}.mdc-data-table--sticky-header .mdc-data-table__header-cell{position:-webkit-sticky;position:sticky;top:0;z-index:1}.mdc-data-table__pagination{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);box-sizing:border-box;display:flex;justify-content:flex-end}.mdc-data-table__pagination-trailing{margin-left:4px;margin-right:0;align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-end}[dir=rtl] .mdc-data-table__pagination-trailing,.mdc-data-table__pagination-trailing[dir=rtl]{margin-left:0;margin-right:4px}.mdc-data-table__pagination-navigation{align-items:center;display:flex}.mdc-data-table__pagination-button{margin-left:0;margin-right:4px}[dir=rtl] .mdc-data-table__pagination-button .mdc-button__icon,.mdc-data-table__pagination-button .mdc-button__icon[dir=rtl]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}[dir=rtl] .mdc-data-table__pagination-button,.mdc-data-table__pagination-button[dir=rtl]{margin-left:4px;margin-right:0}.mdc-data-table__pagination-total{margin-left:14px;margin-right:36px;white-space:nowrap}[dir=rtl] .mdc-data-table__pagination-total,.mdc-data-table__pagination-total[dir=rtl]{margin-left:36px;margin-right:14px}.mdc-data-table__pagination-rows-per-page{margin-left:0;margin-right:22px;align-items:center;display:inline-flex}[dir=rtl] .mdc-data-table__pagination-rows-per-page,.mdc-data-table__pagination-rows-per-page[dir=rtl]{margin-left:22px;margin-right:0}.mdc-data-table__pagination-rows-per-page-label{margin-left:0;margin-right:12px;white-space:nowrap}[dir=rtl] .mdc-data-table__pagination-rows-per-page-label,.mdc-data-table__pagination-rows-per-page-label[dir=rtl]{margin-left:12px;margin-right:0}.mdc-data-table__pagination-rows-per-page-select{min-width:80px;min-width:var(--mdc-menu-min-width, 80px);margin:8px 0}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor{width:100%;min-width:80px}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor{height:36px}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-floating-label--float-above{-webkit-transform:translateY(-27.25px) scale(1);transform:translateY(-27.25px) scale(1)}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-floating-label--float-above{font-size:.75rem}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-24.75px) scale(0.75);transform:translateY(-24.75px) scale(0.75)}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-data-table__pagination-rows-per-page-select .mdc-select__anchor .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-select-outlined-36px 250ms 1;animation:mdc-floating-label-shake-float-above-select-outlined-36px 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-select-outlined-36px{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-select-outlined-36px{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}}.mdc-data-table__pagination-rows-per-page-select .mdc-select__dropdown-icon{width:20px;height:20px}.mdc-data-table__pagination-rows-per-page-select.mdc-select--outlined .mdc-select__anchor :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 56px)}.mdc-data-table__pagination-rows-per-page-select .mdc-deprecated-list-item{height:36px}.mdc-data-table__header-row-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-data-table__header-row-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::after,.mdc-data-table__row-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-data-table__row-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-data-table__header-row-checkbox.mdc-checkbox--selected:hover .mdc-checkbox__ripple::before,.mdc-data-table__header-row-checkbox.mdc-checkbox--selected.mdc-ripple-surface--hover .mdc-checkbox__ripple::before,.mdc-data-table__row-checkbox.mdc-checkbox--selected:hover .mdc-checkbox__ripple::before,.mdc-data-table__row-checkbox.mdc-checkbox--selected.mdc-ripple-surface--hover .mdc-checkbox__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-data-table__header-row-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before,.mdc-data-table__header-row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before,.mdc-data-table__row-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before,.mdc-data-table__row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-data-table__header-row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after,.mdc-data-table__row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after{transition:opacity 150ms linear}.mdc-data-table__header-row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after,.mdc-data-table__row-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-data-table__header-row-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded,.mdc-data-table__row-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-data-table__header-row-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-data-table__header-row-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::after,.mdc-data-table__row-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-data-table__row-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background,.mdc-data-table__row-checkbox .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:rgba(0, 0, 0, 0.54);border-color:var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54));background-color:transparent}.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background,.mdc-data-table__header-row-checkbox .mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background,.mdc-data-table__row-checkbox .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-data-table__row-checkbox .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background,.mdc-data-table__row-checkbox .mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background{border-color:#6200ee;border-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee));background-color:#6200ee;background-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee))}@-webkit-keyframes mdc-checkbox-fade-in-background-8A000000FF6200EE00000000FF6200EE{0%{border-color:rgba(0, 0, 0, 0.54);border-color:var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54));background-color:transparent}50%{border-color:#6200ee;border-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee));background-color:#6200ee;background-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee))}}@keyframes mdc-checkbox-fade-in-background-8A000000FF6200EE00000000FF6200EE{0%{border-color:rgba(0, 0, 0, 0.54);border-color:var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54));background-color:transparent}50%{border-color:#6200ee;border-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee));background-color:#6200ee;background-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee))}}@-webkit-keyframes mdc-checkbox-fade-out-background-8A000000FF6200EE00000000FF6200EE{0%,80%{border-color:#6200ee;border-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee));background-color:#6200ee;background-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee))}100%{border-color:rgba(0, 0, 0, 0.54);border-color:var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54));background-color:transparent}}@keyframes mdc-checkbox-fade-out-background-8A000000FF6200EE00000000FF6200EE{0%,80%{border-color:#6200ee;border-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee));background-color:#6200ee;background-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #6200ee))}100%{border-color:rgba(0, 0, 0, 0.54);border-color:var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54));background-color:transparent}}.mdc-data-table__header-row-checkbox.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-data-table__header-row-checkbox.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-data-table__row-checkbox.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-data-table__row-checkbox.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-in-background-8A000000FF6200EE00000000FF6200EE;animation-name:mdc-checkbox-fade-in-background-8A000000FF6200EE00000000FF6200EE}.mdc-data-table__header-row-checkbox.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-data-table__header-row-checkbox.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-data-table__row-checkbox.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-data-table__row-checkbox.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{-webkit-animation-name:mdc-checkbox-fade-out-background-8A000000FF6200EE00000000FF6200EE;animation-name:mdc-checkbox-fade-out-background-8A000000FF6200EE00000000FF6200EE}.mdc-dialog,.mdc-dialog__scrim{position:fixed;top:0;left:0;align-items:center;justify-content:center;box-sizing:border-box;width:100%;height:100%}.mdc-dialog{display:none;z-index:7;z-index:var(--mdc-dialog-z-index, 7)}.mdc-dialog .mdc-dialog__surface{background-color:#fff;background-color:var(--mdc-theme-surface, #fff)}.mdc-dialog .mdc-dialog__scrim{background-color:rgba(0,0,0,.32)}.mdc-dialog .mdc-dialog__surface-scrim{background-color:rgba(0,0,0,.32)}.mdc-dialog .mdc-dialog__title{color:rgba(0,0,0,.87)}.mdc-dialog .mdc-dialog__content{color:rgba(0,0,0,.6)}.mdc-dialog .mdc-dialog__close{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-dialog .mdc-dialog__close .mdc-icon-button__ripple::before,.mdc-dialog .mdc-dialog__close .mdc-icon-button__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, var(--mdc-theme-on-surface, #000))}.mdc-dialog .mdc-dialog__close:hover .mdc-icon-button__ripple::before,.mdc-dialog .mdc-dialog__close.mdc-ripple-surface--hover .mdc-icon-button__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-dialog .mdc-dialog__close.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple::before,.mdc-dialog .mdc-dialog__close:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-dialog .mdc-dialog__close:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple::after{transition:opacity 150ms linear}.mdc-dialog .mdc-dialog__close:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-dialog .mdc-dialog__close.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__title,.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__actions,.mdc-dialog.mdc-dialog--scrollable.mdc-dialog-scroll-divider-footer .mdc-dialog__actions{border-color:rgba(0,0,0,.12)}.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__title{border-bottom:1px solid rgba(0,0,0,.12);margin-bottom:0}.mdc-dialog.mdc-dialog-scroll-divider-header.mdc-dialog--fullscreen .mdc-dialog__header{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,.12)}.mdc-dialog .mdc-dialog__content{padding:20px 24px 20px 24px}.mdc-dialog .mdc-dialog__surface{min-width:280px}@media(max-width: 592px){.mdc-dialog .mdc-dialog__surface{max-width:calc(100vw - 32px)}}@media(min-width: 592px){.mdc-dialog .mdc-dialog__surface{max-width:560px}}.mdc-dialog .mdc-dialog__surface{max-height:calc(100% - 32px)}.mdc-dialog .mdc-dialog__surface{border-radius:4px;border-radius:var(--mdc-shape-medium, 4px)}@media(max-width: 960px)and (max-height: 1440px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:560px;max-width:560px}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}@media(max-width: 720px)and (max-height: 1023px)and (max-width: 672px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-width:calc(100vw - 112px)}}@media(max-width: 720px)and (max-height: 1023px)and (min-width: 672px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-width:560px}}@media(max-width: 720px)and (max-height: 1023px)and (max-height: 720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:calc(100vh - 160px)}}@media(max-width: 720px)and (max-height: 1023px)and (min-height: 720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:560px}}@media(max-width: 720px)and (max-height: 1023px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}@media(max-width: 720px)and (max-height: 400px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{height:100%;max-height:100vh;max-width:100vw;width:100%;border-radius:0}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{order:-1;left:-12px}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__header{padding:0 16px 9px;justify-content:flex-start}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__title{margin-left:calc(16px - 2 * 12px)}}@media(max-width: 600px)and (max-height: 960px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{height:100%;max-height:100vh;max-width:100vw;width:100vw;border-radius:0}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{order:-1;left:-12px}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__header{padding:0 16px 9px;justify-content:flex-start}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__title{margin-left:calc(16px - 2 * 12px)}}@media(min-width: 960px)and (min-height: 1440px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-width:calc(100vw - 400px)}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}.mdc-dialog.mdc-dialog__scrim--hidden .mdc-dialog__scrim{opacity:0}.mdc-dialog__scrim{opacity:0;z-index:-1}.mdc-dialog__container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;-webkit-transform:scale(0.8);transform:scale(0.8);opacity:0;pointer-events:none}.mdc-dialog__surface{position:relative;box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0,0,0,.12);display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;max-width:100%;max-height:100%;pointer-events:auto;overflow-y:auto}.mdc-dialog__surface .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}[dir=rtl] .mdc-dialog__surface,.mdc-dialog__surface[dir=rtl]{text-align:right}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-dialog__surface{outline:2px solid windowText}}.mdc-dialog__surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid transparent;border-radius:inherit;content:"";pointer-events:none}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.mdc-dialog__surface::before{content:none}}.mdc-dialog__title{display:block;margin-top:0;line-height:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1.25rem;font-size:var(--mdc-typography-headline6-font-size, 1.25rem);line-height:2rem;line-height:var(--mdc-typography-headline6-line-height, 2rem);font-weight:500;font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:0.0125em;letter-spacing:var(--mdc-typography-headline6-letter-spacing, 0.0125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline6-text-transform, inherit);position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:0 24px 9px}.mdc-dialog__title::before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}[dir=rtl] .mdc-dialog__title,.mdc-dialog__title[dir=rtl]{text-align:right}.mdc-dialog--scrollable .mdc-dialog__title{margin-bottom:1px;padding-bottom:15px}.mdc-dialog--fullscreen .mdc-dialog__header{align-items:baseline;border-bottom:1px solid transparent;display:inline-flex;justify-content:space-between;padding:0 24px 9px;z-index:1}.mdc-dialog--fullscreen .mdc-dialog__header .mdc-dialog__close{right:-12px}.mdc-dialog--fullscreen .mdc-dialog__title{margin-bottom:0;padding:0;border-bottom:0}.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__title{border-bottom:0;margin-bottom:0}.mdc-dialog--fullscreen .mdc-dialog__close{top:5px}.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__actions{border-top:1px solid transparent}.mdc-dialog__content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-body1-font-size, 1rem);line-height:1.5rem;line-height:var(--mdc-typography-body1-line-height, 1.5rem);font-weight:400;font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:0.03125em;letter-spacing:var(--mdc-typography-body1-letter-spacing, 0.03125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body1-text-transform, inherit);flex-grow:1;box-sizing:border-box;margin:0;overflow:auto;-webkit-overflow-scrolling:touch}.mdc-dialog__content>:first-child{margin-top:0}.mdc-dialog__content>:last-child{margin-bottom:0}.mdc-dialog__title+.mdc-dialog__content,.mdc-dialog__header+.mdc-dialog__content{padding-top:0}.mdc-dialog--scrollable .mdc-dialog__title+.mdc-dialog__content{padding-top:8px;padding-bottom:8px}.mdc-dialog__content .mdc-deprecated-list:first-child:last-child{padding:6px 0 0}.mdc-dialog--scrollable .mdc-dialog__content .mdc-deprecated-list:first-child:last-child{padding:0}.mdc-dialog__actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;box-sizing:border-box;min-height:52px;margin:0;padding:8px;border-top:1px solid transparent}.mdc-dialog--stacked .mdc-dialog__actions{flex-direction:column;align-items:flex-end}.mdc-dialog__button{margin-left:8px;margin-right:0;max-width:100%;text-align:right}[dir=rtl] .mdc-dialog__button,.mdc-dialog__button[dir=rtl]{margin-left:0;margin-right:8px}.mdc-dialog__button:first-child{margin-left:0;margin-right:0}[dir=rtl] .mdc-dialog__button:first-child,.mdc-dialog__button:first-child[dir=rtl]{margin-left:0;margin-right:0}[dir=rtl] .mdc-dialog__button,.mdc-dialog__button[dir=rtl]{text-align:left}.mdc-dialog--stacked .mdc-dialog__button:not(:first-child){margin-top:12px}.mdc-dialog--open,.mdc-dialog--opening,.mdc-dialog--closing{display:flex}.mdc-dialog--opening .mdc-dialog__scrim{transition:opacity 150ms linear}.mdc-dialog--opening .mdc-dialog__container{transition:opacity 75ms linear,-webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 75ms linear,transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 75ms linear,transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-dialog--closing .mdc-dialog__scrim,.mdc-dialog--closing .mdc-dialog__container{transition:opacity 75ms linear}.mdc-dialog--closing .mdc-dialog__container{-webkit-transform:none;transform:none}.mdc-dialog--open .mdc-dialog__scrim{opacity:1}.mdc-dialog--open .mdc-dialog__container{-webkit-transform:none;transform:none;opacity:1}.mdc-dialog--open.mdc-dialog__surface-scrim--shown .mdc-dialog__surface-scrim{opacity:1;z-index:1}.mdc-dialog--open.mdc-dialog__surface-scrim--hiding .mdc-dialog__surface-scrim{transition:opacity 75ms linear}.mdc-dialog--open.mdc-dialog__surface-scrim--showing .mdc-dialog__surface-scrim{transition:opacity 150ms linear}.mdc-dialog__surface-scrim{display:none;opacity:0;position:absolute;width:100%;height:100%}.mdc-dialog__surface-scrim--shown .mdc-dialog__surface-scrim,.mdc-dialog__surface-scrim--showing .mdc-dialog__surface-scrim,.mdc-dialog__surface-scrim--hiding .mdc-dialog__surface-scrim{display:block}.mdc-dialog-scroll-lock{overflow:hidden}.mdc-drawer{border-color:rgba(0, 0, 0, 0.12);background-color:#fff;background-color:var(--mdc-theme-surface, #fff);border-top-left-radius:0;border-top-right-radius:0;border-top-right-radius:var(--mdc-shape-large, 0);border-bottom-right-radius:0;border-bottom-right-radius:var(--mdc-shape-large, 0);border-bottom-left-radius:0;z-index:6;width:256px;display:flex;flex-direction:column;flex-shrink:0;box-sizing:border-box;height:100%;border-right-width:1px;border-right-style:solid;overflow:hidden;transition-property:-webkit-transform;transition-property:transform;transition-property:transform, -webkit-transform;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)}.mdc-drawer .mdc-drawer__title{color:rgba(0, 0, 0, 0.87)}.mdc-drawer .mdc-deprecated-list-group__subheader{color:rgba(0, 0, 0, 0.6)}.mdc-drawer .mdc-drawer__subtitle{color:rgba(0, 0, 0, 0.6)}.mdc-drawer .mdc-deprecated-list-item__graphic{color:rgba(0, 0, 0, 0.6)}.mdc-drawer .mdc-deprecated-list-item{color:rgba(0, 0, 0, 0.87)}.mdc-drawer .mdc-deprecated-list-item--activated .mdc-deprecated-list-item__graphic{color:#6200ee}.mdc-drawer .mdc-deprecated-list-item--activated{color:rgba(98, 0, 238, 0.87)}[dir=rtl] .mdc-drawer,.mdc-drawer[dir=rtl]{border-top-left-radius:0;border-top-left-radius:var(--mdc-shape-large, 0);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom-left-radius:var(--mdc-shape-large, 0)}.mdc-drawer .mdc-deprecated-list-item{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing)+.mdc-drawer-app-content{margin-left:256px;margin-right:0}[dir=rtl] .mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing)+.mdc-drawer-app-content,.mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing)+.mdc-drawer-app-content[dir=rtl]{margin-left:0;margin-right:256px}[dir=rtl] .mdc-drawer,.mdc-drawer[dir=rtl]{border-right-width:0;border-left-width:1px;border-right-style:none;border-left-style:solid}.mdc-drawer .mdc-deprecated-list-item{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-subtitle2-font-size, 0.875rem);line-height:1.375rem;line-height:var(--mdc-typography-subtitle2-line-height, 1.375rem);font-weight:500;font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:0.0071428571em;letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, 0.0071428571em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle2-text-transform, inherit);height:calc(48px - 2 * 4px);margin:8px 8px;padding:0 8px}.mdc-drawer .mdc-deprecated-list-item:nth-child(1){margin-top:2px}.mdc-drawer .mdc-deprecated-list-item:nth-last-child(1){margin-bottom:0}.mdc-drawer .mdc-deprecated-list-group__subheader{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);display:block;margin-top:0;line-height:normal;margin:0;padding:0 16px}.mdc-drawer .mdc-deprecated-list-group__subheader::before{display:inline-block;width:0;height:24px;content:"";vertical-align:0}.mdc-drawer .mdc-deprecated-list-divider{margin:3px 0 4px}.mdc-drawer .mdc-deprecated-list-item__text,.mdc-drawer .mdc-deprecated-list-item__graphic{pointer-events:none}.mdc-drawer--animate{-webkit-transform:translateX(-100%);transform:translateX(-100%)}[dir=rtl] .mdc-drawer--animate,.mdc-drawer--animate[dir=rtl]{-webkit-transform:translateX(100%);transform:translateX(100%)}.mdc-drawer--opening{-webkit-transform:translateX(0);transform:translateX(0);transition-duration:250ms}[dir=rtl] .mdc-drawer--opening,.mdc-drawer--opening[dir=rtl]{-webkit-transform:translateX(0);transform:translateX(0)}.mdc-drawer--closing{-webkit-transform:translateX(-100%);transform:translateX(-100%);transition-duration:200ms}[dir=rtl] .mdc-drawer--closing,.mdc-drawer--closing[dir=rtl]{-webkit-transform:translateX(100%);transform:translateX(100%)}.mdc-drawer__header{flex-shrink:0;box-sizing:border-box;min-height:64px;padding:0 16px 4px}.mdc-drawer__title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1.25rem;font-size:var(--mdc-typography-headline6-font-size, 1.25rem);line-height:2rem;line-height:var(--mdc-typography-headline6-line-height, 2rem);font-weight:500;font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:0.0125em;letter-spacing:var(--mdc-typography-headline6-letter-spacing, 0.0125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline6-text-transform, inherit);display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-drawer__title::before{display:inline-block;width:0;height:36px;content:"";vertical-align:0}.mdc-drawer__title::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-drawer__subtitle{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);display:block;margin-top:0;line-height:normal;margin-bottom:0}.mdc-drawer__subtitle::before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-drawer__content{height:100%;overflow-y:auto;-webkit-overflow-scrolling:touch}.mdc-drawer--dismissible{left:0;right:initial;display:none;position:absolute}[dir=rtl] .mdc-drawer--dismissible,.mdc-drawer--dismissible[dir=rtl]{left:initial;right:0}.mdc-drawer--dismissible.mdc-drawer--open{display:flex}.mdc-drawer-app-content{margin-left:0;margin-right:0;position:relative}[dir=rtl] .mdc-drawer-app-content,.mdc-drawer-app-content[dir=rtl]{margin-left:0;margin-right:0}.mdc-drawer--modal{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0,0,0,.12);left:0;right:initial;display:none;position:fixed}.mdc-drawer--modal+.mdc-drawer-scrim{background-color:rgba(0, 0, 0, 0.32)}[dir=rtl] .mdc-drawer--modal,.mdc-drawer--modal[dir=rtl]{left:initial;right:0}.mdc-drawer--modal.mdc-drawer--open{display:flex}.mdc-drawer-scrim{display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:5;transition-property:opacity;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)}.mdc-drawer--open+.mdc-drawer-scrim{display:block}.mdc-drawer--animate+.mdc-drawer-scrim{opacity:0}.mdc-drawer--opening+.mdc-drawer-scrim{transition-duration:250ms;opacity:1}.mdc-drawer--closing+.mdc-drawer-scrim{transition-duration:200ms;opacity:0}.mdc-elevation--z0{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0,0,0,.12)}.mdc-elevation--z1{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0,0,0,.12)}.mdc-elevation--z2{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,.12)}.mdc-elevation--z3{box-shadow:0px 3px 3px -2px rgba(0, 0, 0, 0.2),0px 3px 4px 0px rgba(0, 0, 0, 0.14),0px 1px 8px 0px rgba(0,0,0,.12)}.mdc-elevation--z4{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12)}.mdc-elevation--z5{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 5px 8px 0px rgba(0, 0, 0, 0.14),0px 1px 14px 0px rgba(0,0,0,.12)}.mdc-elevation--z6{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0,0,0,.12)}.mdc-elevation--z7{box-shadow:0px 4px 5px -2px rgba(0, 0, 0, 0.2),0px 7px 10px 1px rgba(0, 0, 0, 0.14),0px 2px 16px 1px rgba(0,0,0,.12)}.mdc-elevation--z8{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}.mdc-elevation--z9{box-shadow:0px 5px 6px -3px rgba(0, 0, 0, 0.2),0px 9px 12px 1px rgba(0, 0, 0, 0.14),0px 3px 16px 2px rgba(0,0,0,.12)}.mdc-elevation--z10{box-shadow:0px 6px 6px -3px rgba(0, 0, 0, 0.2),0px 10px 14px 1px rgba(0, 0, 0, 0.14),0px 4px 18px 3px rgba(0,0,0,.12)}.mdc-elevation--z11{box-shadow:0px 6px 7px -4px rgba(0, 0, 0, 0.2),0px 11px 15px 1px rgba(0, 0, 0, 0.14),0px 4px 20px 3px rgba(0,0,0,.12)}.mdc-elevation--z12{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0,0,0,.12)}.mdc-elevation--z13{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 13px 19px 2px rgba(0, 0, 0, 0.14),0px 5px 24px 4px rgba(0,0,0,.12)}.mdc-elevation--z14{box-shadow:0px 7px 9px -4px rgba(0, 0, 0, 0.2),0px 14px 21px 2px rgba(0, 0, 0, 0.14),0px 5px 26px 4px rgba(0,0,0,.12)}.mdc-elevation--z15{box-shadow:0px 8px 9px -5px rgba(0, 0, 0, 0.2),0px 15px 22px 2px rgba(0, 0, 0, 0.14),0px 6px 28px 5px rgba(0,0,0,.12)}.mdc-elevation--z16{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2),0px 16px 24px 2px rgba(0, 0, 0, 0.14),0px 6px 30px 5px rgba(0,0,0,.12)}.mdc-elevation--z17{box-shadow:0px 8px 11px -5px rgba(0, 0, 0, 0.2),0px 17px 26px 2px rgba(0, 0, 0, 0.14),0px 6px 32px 5px rgba(0,0,0,.12)}.mdc-elevation--z18{box-shadow:0px 9px 11px -5px rgba(0, 0, 0, 0.2),0px 18px 28px 2px rgba(0, 0, 0, 0.14),0px 7px 34px 6px rgba(0,0,0,.12)}.mdc-elevation--z19{box-shadow:0px 9px 12px -6px rgba(0, 0, 0, 0.2),0px 19px 29px 2px rgba(0, 0, 0, 0.14),0px 7px 36px 6px rgba(0,0,0,.12)}.mdc-elevation--z20{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 20px 31px 3px rgba(0, 0, 0, 0.14),0px 8px 38px 7px rgba(0,0,0,.12)}.mdc-elevation--z21{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2),0px 21px 33px 3px rgba(0, 0, 0, 0.14),0px 8px 40px 7px rgba(0,0,0,.12)}.mdc-elevation--z22{box-shadow:0px 10px 14px -6px rgba(0, 0, 0, 0.2),0px 22px 35px 3px rgba(0, 0, 0, 0.14),0px 8px 42px 7px rgba(0,0,0,.12)}.mdc-elevation--z23{box-shadow:0px 11px 14px -7px rgba(0, 0, 0, 0.2),0px 23px 36px 3px rgba(0, 0, 0, 0.14),0px 9px 44px 8px rgba(0,0,0,.12)}.mdc-elevation--z24{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0,0,0,.12)}.mdc-elevation-transition{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);will-change:box-shadow}.mdc-fab{position:relative;display:inline-flex;position:relative;align-items:center;justify-content:center;box-sizing:border-box;width:56px;height:56px;padding:0;border:none;fill:currentColor;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;overflow:visible;transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),opacity 15ms linear 30ms,-webkit-transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),opacity 15ms linear 30ms,transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),opacity 15ms linear 30ms,transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-fab .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-fab::-moz-focus-inner{padding:0;border:0}.mdc-fab:hover{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}.mdc-fab.mdc-ripple-upgraded--background-focused,.mdc-fab:not(.mdc-ripple-upgraded):focus{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}.mdc-fab:active,.mdc-fab:focus:active{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0,0,0,.12)}.mdc-fab:active,.mdc-fab:focus{outline:none}.mdc-fab:hover{cursor:pointer}.mdc-fab>svg{width:100%}.mdc-fab--mini{width:40px;height:40px}.mdc-fab--extended{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height, 2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:0.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase);border-radius:24px;padding-left:20px;padding-right:20px;width:auto;max-width:100%;height:48px;line-height:normal}.mdc-fab--extended .mdc-fab__ripple{border-radius:24px}.mdc-fab--extended .mdc-fab__icon{margin-left:calc(12px - 20px);margin-right:12px}[dir=rtl] .mdc-fab--extended .mdc-fab__icon,.mdc-fab--extended .mdc-fab__icon[dir=rtl]{margin-left:12px;margin-right:calc(12px - 20px)}.mdc-fab--extended .mdc-fab__label+.mdc-fab__icon{margin-left:12px;margin-right:calc(12px - 20px)}[dir=rtl] .mdc-fab--extended .mdc-fab__label+.mdc-fab__icon,.mdc-fab--extended .mdc-fab__label+.mdc-fab__icon[dir=rtl]{margin-left:calc(12px - 20px);margin-right:12px}.mdc-fab--touch{margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-fab--touch .mdc-fab__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.mdc-fab::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none}.mdc-fab__label{justify-content:flex-start;text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden;overflow-y:visible}.mdc-fab__icon{transition:-webkit-transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1);transition:transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1);transition:transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1);fill:currentColor;will-change:transform}.mdc-fab .mdc-fab__icon{display:inline-flex;align-items:center;justify-content:center}.mdc-fab--exited{-webkit-transform:scale(0);transform:scale(0);opacity:0;transition:opacity 15ms linear 150ms,-webkit-transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1);transition:opacity 15ms linear 150ms,transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1);transition:opacity 15ms linear 150ms,transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1),-webkit-transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-fab--exited .mdc-fab__icon{-webkit-transform:scale(0);transform:scale(0);transition:-webkit-transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1);transition:transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1);transition:transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-fab{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786);box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0,0,0,.12)}.mdc-fab .mdc-fab__icon{width:24px;height:24px;font-size:24px}.mdc-fab,.mdc-fab:not(:disabled) .mdc-fab__icon,.mdc-fab:not(:disabled) .mdc-fab__label,.mdc-fab:disabled .mdc-fab__icon,.mdc-fab:disabled .mdc-fab__label{color:#fff;color:var(--mdc-theme-on-secondary, #fff)}.mdc-fab:not(.mdc-fab--extended){border-radius:50%}.mdc-fab:not(.mdc-fab--extended) .mdc-fab__ripple{border-radius:50%}.mdc-fab{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-fab .mdc-fab__ripple::before,.mdc-fab .mdc-fab__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-fab .mdc-fab__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-fab .mdc-fab__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-fab.mdc-ripple-upgraded .mdc-fab__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-fab.mdc-ripple-upgraded .mdc-fab__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-fab.mdc-ripple-upgraded--unbounded .mdc-fab__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-fab.mdc-ripple-upgraded--foreground-activation .mdc-fab__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-fab.mdc-ripple-upgraded--foreground-deactivation .mdc-fab__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-fab .mdc-fab__ripple::before,.mdc-fab .mdc-fab__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-fab.mdc-ripple-upgraded .mdc-fab__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-fab .mdc-fab__ripple::before,.mdc-fab .mdc-fab__ripple::after{background-color:#fff;background-color:var(--mdc-ripple-color, var(--mdc-theme-on-secondary, #fff))}.mdc-fab:hover .mdc-fab__ripple::before,.mdc-fab.mdc-ripple-surface--hover .mdc-fab__ripple::before{opacity:0.08;opacity:var(--mdc-ripple-hover-opacity, 0.08)}.mdc-fab.mdc-ripple-upgraded--background-focused .mdc-fab__ripple::before,.mdc-fab:not(.mdc-ripple-upgraded):focus .mdc-fab__ripple::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-fab:not(.mdc-ripple-upgraded) .mdc-fab__ripple::after{transition:opacity 150ms linear}.mdc-fab:not(.mdc-ripple-upgraded):active .mdc-fab__ripple::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-fab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-fab .mdc-fab__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:hidden}.mdc-fab{z-index:0}.mdc-fab .mdc-fab__ripple::before,.mdc-fab .mdc-fab__ripple::after{z-index:-1;z-index:var(--mdc-ripple-z-index, -1)}.mdc-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87));display:inline-flex;align-items:center;vertical-align:middle}.mdc-form-field>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0;order:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{margin-left:auto;margin-right:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{padding-left:0;padding-right:4px}.mdc-form-field--nowrap>label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.mdc-form-field--align-end>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px;order:-1}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{margin-left:0;margin-right:auto}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{padding-left:4px;padding-right:0}.mdc-form-field--space-between{justify-content:space-between}.mdc-form-field--space-between>label{margin:0}[dir=rtl] .mdc-form-field--space-between>label,.mdc-form-field--space-between>label[dir=rtl]{margin:0}.mdc-icon-button{display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:transparent;fill:currentColor;color:inherit;font-size:24px;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:48px;height:48px;padding:12px}.mdc-icon-button svg,.mdc-icon-button img{width:24px;height:24px}.mdc-icon-button:disabled{color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-disabled-on-light, rgba(0, 0, 0, 0.38))}.mdc-icon-button:disabled{cursor:default;pointer-events:none}.mdc-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.mdc-icon-button__icon{display:inline-block}.mdc-icon-button__icon.mdc-icon-button__icon--on{display:none}.mdc-icon-button--on .mdc-icon-button__icon{display:none}.mdc-icon-button--on .mdc-icon-button__icon.mdc-icon-button__icon--on{display:inline-block}.mdc-icon-button--touch{margin-top:0px;margin-bottom:0px}.mdc-icon-button{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-icon-button .mdc-icon-button__ripple::before,.mdc-icon-button .mdc-icon-button__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-icon-button .mdc-icon-button__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-icon-button .mdc-icon-button__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-icon-button.mdc-ripple-upgraded--unbounded .mdc-icon-button__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-icon-button.mdc-ripple-upgraded--foreground-activation .mdc-icon-button__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-icon-button.mdc-ripple-upgraded--foreground-deactivation .mdc-icon-button__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-icon-button .mdc-icon-button__ripple::before,.mdc-icon-button .mdc-icon-button__ripple::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple::before,.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-icon-button.mdc-ripple-upgraded .mdc-icon-button__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-icon-button .mdc-icon-button__ripple::before,.mdc-icon-button .mdc-icon-button__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}.mdc-icon-button:hover .mdc-icon-button__ripple::before,.mdc-icon-button.mdc-ripple-surface--hover .mdc-icon-button__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-icon-button.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple::before,.mdc-icon-button:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-icon-button:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple::after{transition:opacity 150ms linear}.mdc-icon-button:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-icon-button.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-icon-button .mdc-icon-button__ripple{pointer-events:none;z-index:1}.mdc-image-list{display:flex;flex-wrap:wrap;margin:0 auto;padding:0}.mdc-image-list__item,.mdc-image-list__image-aspect-container{position:relative;box-sizing:border-box}.mdc-image-list__item{list-style-type:none}.mdc-image-list__image{width:100%}.mdc-image-list__image-aspect-container .mdc-image-list__image{position:absolute;top:0;right:0;bottom:0;left:0;height:100%;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-image-list__image-aspect-container{padding-bottom:calc(100% / 1)}.mdc-image-list__image{border-radius:0}.mdc-image-list--with-text-protection .mdc-image-list__supporting{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-image-list__supporting{color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87));display:flex;align-items:center;justify-content:space-between;box-sizing:border-box;padding:8px 0;line-height:24px}.mdc-image-list__label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mdc-image-list--with-text-protection .mdc-image-list__supporting{position:absolute;bottom:0;width:100%;height:48px;padding:0 16px;background:rgba(0,0,0,.6);color:#fff}.mdc-image-list--masonry{display:block}.mdc-image-list--masonry .mdc-image-list__item{-webkit-column-break-inside:avoid;break-inside:avoid-column}.mdc-image-list--masonry .mdc-image-list__image{display:block;height:auto}:root{--mdc-layout-grid-margin-desktop: 24px;--mdc-layout-grid-gutter-desktop: 24px;--mdc-layout-grid-column-width-desktop: 72px;--mdc-layout-grid-margin-tablet: 16px;--mdc-layout-grid-gutter-tablet: 16px;--mdc-layout-grid-column-width-tablet: 72px;--mdc-layout-grid-margin-phone: 16px;--mdc-layout-grid-gutter-phone: 16px;--mdc-layout-grid-column-width-phone: 72px}@media(min-width: 840px){.mdc-layout-grid{box-sizing:border-box;margin:0 auto;padding:24px;padding:var(--mdc-layout-grid-margin-desktop, 24px)}}@media(min-width: 600px)and (max-width: 839px){.mdc-layout-grid{box-sizing:border-box;margin:0 auto;padding:16px;padding:var(--mdc-layout-grid-margin-tablet, 16px)}}@media(max-width: 599px){.mdc-layout-grid{box-sizing:border-box;margin:0 auto;padding:16px;padding:var(--mdc-layout-grid-margin-phone, 16px)}}@media(min-width: 840px){.mdc-layout-grid__inner{display:flex;flex-flow:row wrap;align-items:stretch;margin:-12px;margin:calc(var(--mdc-layout-grid-gutter-desktop, 24px) / 2 * -1)}@supports(display: grid){.mdc-layout-grid__inner{display:grid;margin:0;grid-gap:24px;grid-gap:var(--mdc-layout-grid-gutter-desktop, 24px);grid-template-columns:repeat(12, minmax(0, 1fr))}}}@media(min-width: 600px)and (max-width: 839px){.mdc-layout-grid__inner{display:flex;flex-flow:row wrap;align-items:stretch;margin:-8px;margin:calc(var(--mdc-layout-grid-gutter-tablet, 16px) / 2 * -1)}@supports(display: grid){.mdc-layout-grid__inner{display:grid;margin:0;grid-gap:16px;grid-gap:var(--mdc-layout-grid-gutter-tablet, 16px);grid-template-columns:repeat(8, minmax(0, 1fr))}}}@media(max-width: 599px){.mdc-layout-grid__inner{display:flex;flex-flow:row wrap;align-items:stretch;margin:-8px;margin:calc(var(--mdc-layout-grid-gutter-phone, 16px) / 2 * -1)}@supports(display: grid){.mdc-layout-grid__inner{display:grid;margin:0;grid-gap:16px;grid-gap:var(--mdc-layout-grid-gutter-phone, 16px);grid-template-columns:repeat(4, minmax(0, 1fr))}}}@media(min-width: 840px){.mdc-layout-grid__cell{width:calc(33.3333333333% - 24px);width:calc(33.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px));box-sizing:border-box;margin:12px;margin:calc(var(--mdc-layout-grid-gutter-desktop, 24px) / 2)}@supports(display: grid){.mdc-layout-grid__cell{width:auto;grid-column-end:span 4}}@supports(display: grid){.mdc-layout-grid__cell{margin:0}}.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-desktop{width:calc(8.3333333333% - 24px);width:calc(8.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-desktop{width:auto;grid-column-end:span 1}}.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-desktop{width:calc(16.6666666667% - 24px);width:calc(16.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-desktop{width:auto;grid-column-end:span 2}}.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-desktop{width:calc(25% - 24px);width:calc(25% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-desktop{width:auto;grid-column-end:span 3}}.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-desktop{width:calc(33.3333333333% - 24px);width:calc(33.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-desktop{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-desktop{width:calc(41.6666666667% - 24px);width:calc(41.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-desktop{width:auto;grid-column-end:span 5}}.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-desktop{width:calc(50% - 24px);width:calc(50% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-desktop{width:auto;grid-column-end:span 6}}.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-desktop{width:calc(58.3333333333% - 24px);width:calc(58.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-desktop{width:auto;grid-column-end:span 7}}.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-desktop{width:calc(66.6666666667% - 24px);width:calc(66.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-desktop{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-desktop{width:calc(75% - 24px);width:calc(75% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-desktop{width:auto;grid-column-end:span 9}}.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-desktop{width:calc(83.3333333333% - 24px);width:calc(83.3333333333% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-desktop{width:auto;grid-column-end:span 10}}.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-desktop{width:calc(91.6666666667% - 24px);width:calc(91.6666666667% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-desktop{width:auto;grid-column-end:span 11}}.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-desktop{width:calc(100% - 24px);width:calc(100% - var(--mdc-layout-grid-gutter-desktop, 24px))}@supports(display: grid){.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-desktop{width:auto;grid-column-end:span 12}}}@media(min-width: 600px)and (max-width: 839px){.mdc-layout-grid__cell{width:calc(50% - 16px);width:calc(50% - var(--mdc-layout-grid-gutter-tablet, 16px));box-sizing:border-box;margin:8px;margin:calc(var(--mdc-layout-grid-gutter-tablet, 16px) / 2)}@supports(display: grid){.mdc-layout-grid__cell{width:auto;grid-column-end:span 4}}@supports(display: grid){.mdc-layout-grid__cell{margin:0}}.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-tablet{width:calc(12.5% - 16px);width:calc(12.5% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-tablet{width:auto;grid-column-end:span 1}}.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-tablet{width:calc(25% - 16px);width:calc(25% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-tablet{width:auto;grid-column-end:span 2}}.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-tablet{width:calc(37.5% - 16px);width:calc(37.5% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-tablet{width:auto;grid-column-end:span 3}}.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-tablet{width:calc(50% - 16px);width:calc(50% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-tablet{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-tablet{width:calc(62.5% - 16px);width:calc(62.5% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-tablet{width:auto;grid-column-end:span 5}}.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-tablet{width:calc(75% - 16px);width:calc(75% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-tablet{width:auto;grid-column-end:span 6}}.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-tablet{width:calc(87.5% - 16px);width:calc(87.5% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-tablet{width:auto;grid-column-end:span 7}}.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-tablet{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-tablet{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-tablet{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-tablet{width:auto;grid-column-end:span 8}}.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-tablet{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-tablet, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-tablet{width:auto;grid-column-end:span 8}}}@media(max-width: 599px){.mdc-layout-grid__cell{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px));box-sizing:border-box;margin:8px;margin:calc(var(--mdc-layout-grid-gutter-phone, 16px) / 2)}@supports(display: grid){.mdc-layout-grid__cell{width:auto;grid-column-end:span 4}}@supports(display: grid){.mdc-layout-grid__cell{margin:0}}.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-phone{width:calc(25% - 16px);width:calc(25% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-1,.mdc-layout-grid__cell--span-1-phone{width:auto;grid-column-end:span 1}}.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-phone{width:calc(50% - 16px);width:calc(50% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-2,.mdc-layout-grid__cell--span-2-phone{width:auto;grid-column-end:span 2}}.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-phone{width:calc(75% - 16px);width:calc(75% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-3,.mdc-layout-grid__cell--span-3-phone{width:auto;grid-column-end:span 3}}.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-4,.mdc-layout-grid__cell--span-4-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-5,.mdc-layout-grid__cell--span-5-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-6,.mdc-layout-grid__cell--span-6-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-7,.mdc-layout-grid__cell--span-7-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-8,.mdc-layout-grid__cell--span-8-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-9,.mdc-layout-grid__cell--span-9-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-10,.mdc-layout-grid__cell--span-10-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-11,.mdc-layout-grid__cell--span-11-phone{width:auto;grid-column-end:span 4}}.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-phone{width:calc(100% - 16px);width:calc(100% - var(--mdc-layout-grid-gutter-phone, 16px))}@supports(display: grid){.mdc-layout-grid__cell--span-12,.mdc-layout-grid__cell--span-12-phone{width:auto;grid-column-end:span 4}}}.mdc-layout-grid__cell--order-1{order:1}.mdc-layout-grid__cell--order-2{order:2}.mdc-layout-grid__cell--order-3{order:3}.mdc-layout-grid__cell--order-4{order:4}.mdc-layout-grid__cell--order-5{order:5}.mdc-layout-grid__cell--order-6{order:6}.mdc-layout-grid__cell--order-7{order:7}.mdc-layout-grid__cell--order-8{order:8}.mdc-layout-grid__cell--order-9{order:9}.mdc-layout-grid__cell--order-10{order:10}.mdc-layout-grid__cell--order-11{order:11}.mdc-layout-grid__cell--order-12{order:12}.mdc-layout-grid__cell--align-top{align-self:flex-start}@supports(display: grid){.mdc-layout-grid__cell--align-top{align-self:start}}.mdc-layout-grid__cell--align-middle{align-self:center}.mdc-layout-grid__cell--align-bottom{align-self:flex-end}@supports(display: grid){.mdc-layout-grid__cell--align-bottom{align-self:end}}@media(min-width: 840px){.mdc-layout-grid--fixed-column-width{width:1176px;width:calc( var(--mdc-layout-grid-column-width-desktop, 72px) * 12 + var(--mdc-layout-grid-gutter-desktop, 24px) * 11 + var(--mdc-layout-grid-margin-desktop, 24px) * 2 )}}@media(min-width: 600px)and (max-width: 839px){.mdc-layout-grid--fixed-column-width{width:720px;width:calc( var(--mdc-layout-grid-column-width-tablet, 72px) * 8 + var(--mdc-layout-grid-gutter-tablet, 16px) * 7 + var(--mdc-layout-grid-margin-tablet, 16px) * 2 )}}@media(max-width: 599px){.mdc-layout-grid--fixed-column-width{width:368px;width:calc( var(--mdc-layout-grid-column-width-phone, 72px) * 4 + var(--mdc-layout-grid-gutter-phone, 16px) * 3 + var(--mdc-layout-grid-margin-phone, 16px) * 2 )}}.mdc-layout-grid--align-left{margin-right:auto;margin-left:0}.mdc-layout-grid--align-right{margin-right:0;margin-left:auto}@-webkit-keyframes mdc-linear-progress-primary-indeterminate-translate{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(0);transform:translateX(0)}59.15%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(83.67142%);transform:translateX(83.67142%);-webkit-transform:translateX(var(--mdc-linear-progress-primary-half, 83.67142%));transform:translateX(var(--mdc-linear-progress-primary-half, 83.67142%))}100%{-webkit-transform:translateX(200.611057%);transform:translateX(200.611057%);-webkit-transform:translateX(var(--mdc-linear-progress-primary-full, 200.611057%));transform:translateX(var(--mdc-linear-progress-primary-full, 200.611057%))}}@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(0);transform:translateX(0)}59.15%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(83.67142%);transform:translateX(83.67142%);-webkit-transform:translateX(var(--mdc-linear-progress-primary-half, 83.67142%));transform:translateX(var(--mdc-linear-progress-primary-half, 83.67142%))}100%{-webkit-transform:translateX(200.611057%);transform:translateX(200.611057%);-webkit-transform:translateX(var(--mdc-linear-progress-primary-full, 200.611057%));transform:translateX(var(--mdc-linear-progress-primary-full, 200.611057%))}}@-webkit-keyframes mdc-linear-progress-primary-indeterminate-scale{0%{-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}36.65%{-webkit-animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}69.15%{-webkit-animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);-webkit-transform:scaleX(0.661479);transform:scaleX(0.661479)}100%{-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}36.65%{-webkit-animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}69.15%{-webkit-animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);-webkit-transform:scaleX(0.661479);transform:scaleX(0.661479)}100%{-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}}@-webkit-keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{-webkit-animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);-webkit-transform:translateX(0);transform:translateX(0)}25%{-webkit-animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);-webkit-transform:translateX(37.651913%);transform:translateX(37.651913%);-webkit-transform:translateX(var(--mdc-linear-progress-secondary-quarter, 37.651913%));transform:translateX(var(--mdc-linear-progress-secondary-quarter, 37.651913%))}48.35%{-webkit-animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);-webkit-transform:translateX(84.386165%);transform:translateX(84.386165%);-webkit-transform:translateX(var(--mdc-linear-progress-secondary-half, 84.386165%));transform:translateX(var(--mdc-linear-progress-secondary-half, 84.386165%))}100%{-webkit-transform:translateX(160.277782%);transform:translateX(160.277782%);-webkit-transform:translateX(var(--mdc-linear-progress-secondary-full, 160.277782%));transform:translateX(var(--mdc-linear-progress-secondary-full, 160.277782%))}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{-webkit-animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);-webkit-transform:translateX(0);transform:translateX(0)}25%{-webkit-animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);-webkit-transform:translateX(37.651913%);transform:translateX(37.651913%);-webkit-transform:translateX(var(--mdc-linear-progress-secondary-quarter, 37.651913%));transform:translateX(var(--mdc-linear-progress-secondary-quarter, 37.651913%))}48.35%{-webkit-animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);-webkit-transform:translateX(84.386165%);transform:translateX(84.386165%);-webkit-transform:translateX(var(--mdc-linear-progress-secondary-half, 84.386165%));transform:translateX(var(--mdc-linear-progress-secondary-half, 84.386165%))}100%{-webkit-transform:translateX(160.277782%);transform:translateX(160.277782%);-webkit-transform:translateX(var(--mdc-linear-progress-secondary-full, 160.277782%));transform:translateX(var(--mdc-linear-progress-secondary-full, 160.277782%))}}@-webkit-keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{-webkit-animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}19.15%{-webkit-animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);-webkit-transform:scaleX(0.457104);transform:scaleX(0.457104)}44.15%{-webkit-animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);-webkit-transform:scaleX(0.72796);transform:scaleX(0.72796)}100%{-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{-webkit-animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}19.15%{-webkit-animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);-webkit-transform:scaleX(0.457104);transform:scaleX(0.457104)}44.15%{-webkit-animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);-webkit-transform:scaleX(0.72796);transform:scaleX(0.72796)}100%{-webkit-transform:scaleX(0.08);transform:scaleX(0.08)}}@-webkit-keyframes mdc-linear-progress-buffering{from{-webkit-transform:rotate(180deg) translateX(-10px);transform:rotate(180deg) translateX(-10px)}}@keyframes mdc-linear-progress-buffering{from{-webkit-transform:rotate(180deg) translateX(-10px);transform:rotate(180deg) translateX(-10px)}}@-webkit-keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(0);transform:translateX(0)}59.15%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(-83.67142%);transform:translateX(-83.67142%);-webkit-transform:translateX(var(--mdc-linear-progress-primary-half-neg, -83.67142%));transform:translateX(var(--mdc-linear-progress-primary-half-neg, -83.67142%))}100%{-webkit-transform:translateX(-200.611057%);transform:translateX(-200.611057%);-webkit-transform:translateX(var(--mdc-linear-progress-primary-full-neg, -200.611057%));transform:translateX(var(--mdc-linear-progress-primary-full-neg, -200.611057%))}}@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(0);transform:translateX(0)}59.15%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(-83.67142%);transform:translateX(-83.67142%);-webkit-transform:translateX(var(--mdc-linear-progress-primary-half-neg, -83.67142%));transform:translateX(var(--mdc-linear-progress-primary-half-neg, -83.67142%))}100%{-webkit-transform:translateX(-200.611057%);transform:translateX(-200.611057%);-webkit-transform:translateX(var(--mdc-linear-progress-primary-full-neg, -200.611057%));transform:translateX(var(--mdc-linear-progress-primary-full-neg, -200.611057%))}}@-webkit-keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{-webkit-animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);-webkit-transform:translateX(0);transform:translateX(0)}25%{-webkit-animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);-webkit-transform:translateX(-37.651913%);transform:translateX(-37.651913%);-webkit-transform:translateX(var(--mdc-linear-progress-secondary-quarter-neg, -37.651913%));transform:translateX(var(--mdc-linear-progress-secondary-quarter-neg, -37.651913%))}48.35%{-webkit-animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);-webkit-transform:translateX(-84.386165%);transform:translateX(-84.386165%);-webkit-transform:translateX(var(--mdc-linear-progress-secondary-half-neg, -84.386165%));transform:translateX(var(--mdc-linear-progress-secondary-half-neg, -84.386165%))}100%{-webkit-transform:translateX(-160.277782%);transform:translateX(-160.277782%);-webkit-transform:translateX(var(--mdc-linear-progress-secondary-full-neg, -160.277782%));transform:translateX(var(--mdc-linear-progress-secondary-full-neg, -160.277782%))}}@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{-webkit-animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);-webkit-transform:translateX(0);transform:translateX(0)}25%{-webkit-animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);-webkit-transform:translateX(-37.651913%);transform:translateX(-37.651913%);-webkit-transform:translateX(var(--mdc-linear-progress-secondary-quarter-neg, -37.651913%));transform:translateX(var(--mdc-linear-progress-secondary-quarter-neg, -37.651913%))}48.35%{-webkit-animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);-webkit-transform:translateX(-84.386165%);transform:translateX(-84.386165%);-webkit-transform:translateX(var(--mdc-linear-progress-secondary-half-neg, -84.386165%));transform:translateX(var(--mdc-linear-progress-secondary-half-neg, -84.386165%))}100%{-webkit-transform:translateX(-160.277782%);transform:translateX(-160.277782%);-webkit-transform:translateX(var(--mdc-linear-progress-secondary-full-neg, -160.277782%));transform:translateX(var(--mdc-linear-progress-secondary-full-neg, -160.277782%))}}@-webkit-keyframes mdc-linear-progress-buffering-reverse{from{-webkit-transform:translateX(-10px);transform:translateX(-10px)}}@keyframes mdc-linear-progress-buffering-reverse{from{-webkit-transform:translateX(-10px);transform:translateX(-10px)}}.mdc-linear-progress{position:relative;width:100%;height:4px;-webkit-transform:translateZ(0);transform:translateZ(0);outline:1px solid transparent;overflow:hidden;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-linear-progress__bar{position:absolute;width:100%;height:100%;-webkit-animation:none;animation:none;-webkit-transform-origin:top left;transform-origin:top left;transition:-webkit-transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1), -webkit-transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-linear-progress__bar-inner{display:inline-block;position:absolute;width:100%;-webkit-animation:none;animation:none;border-top:4px solid}.mdc-linear-progress__buffer{display:flex;position:absolute;width:100%;height:100%}.mdc-linear-progress__buffer-dots{background-repeat:repeat-x;background-size:10px 4px;flex:auto;-webkit-transform:rotate(180deg);transform:rotate(180deg);-webkit-animation:mdc-linear-progress-buffering 250ms infinite linear;animation:mdc-linear-progress-buffering 250ms infinite linear}.mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-linear-progress__primary-bar{-webkit-transform:scaleX(0);transform:scaleX(0)}.mdc-linear-progress__secondary-bar{display:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;display:block}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{-webkit-animation:mdc-linear-progress-primary-indeterminate-translate 2s infinite linear;animation:mdc-linear-progress-primary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{-webkit-animation:mdc-linear-progress-primary-indeterminate-scale 2s infinite linear;animation:mdc-linear-progress-primary-indeterminate-scale 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{-webkit-animation:mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear;animation:mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{-webkit-animation:mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear;animation:mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear}[dir=rtl] .mdc-linear-progress:not([dir=ltr]) .mdc-linear-progress__bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]) .mdc-linear-progress__bar{right:0;-webkit-transform-origin:center right;transform-origin:center right}[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{-webkit-animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse;animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{-webkit-animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse;animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress:not([dir=ltr]) .mdc-linear-progress__buffer-dots,.mdc-linear-progress[dir=rtl]:not([dir=ltr]) .mdc-linear-progress__buffer-dots{-webkit-animation:mdc-linear-progress-buffering-reverse 250ms infinite linear;animation:mdc-linear-progress-buffering-reverse 250ms infinite linear;-webkit-transform:rotate(0);transform:rotate(0)}[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{right:-145.166611%;left:auto}[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{right:-54.888891%;left:auto}.mdc-linear-progress--closed{opacity:0}.mdc-linear-progress--closed-animation-off .mdc-linear-progress__buffer-dots{-webkit-animation:none;animation:none}.mdc-linear-progress--closed-animation-off.mdc-linear-progress--indeterminate .mdc-linear-progress__bar,.mdc-linear-progress--closed-animation-off.mdc-linear-progress--indeterminate .mdc-linear-progress__bar .mdc-linear-progress__bar-inner{-webkit-animation:none;animation:none}.mdc-linear-progress__bar-inner{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-linear-progress__buffer-dots{background-image:url("data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='none slice'%3E%3Ccircle cx='1' cy='1' r='1' fill='%23e6e6e6'/%3E%3C/svg%3E")}.mdc-linear-progress__buffer-bar{background-color:#e6e6e6}.mdc-deprecated-list{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);line-height:1.5rem;margin:0;padding:8px 0;list-style-type:none;color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87))}.mdc-deprecated-list:focus{outline:none}.mdc-deprecated-list-item{height:48px}.mdc-deprecated-list-item__secondary-text{color:rgba(0, 0, 0, 0.54);color:var(--mdc-theme-text-secondary-on-background, rgba(0, 0, 0, 0.54))}.mdc-deprecated-list-item__graphic{background-color:transparent}.mdc-deprecated-list-item__graphic{color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-icon-on-background, rgba(0, 0, 0, 0.38))}.mdc-deprecated-list-item__meta{color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-hint-on-background, rgba(0, 0, 0, 0.38))}.mdc-deprecated-list-group__subheader{color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87))}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__text{opacity:.38}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__text,.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__primary-text,.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__secondary-text{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-deprecated-list-item--selected,.mdc-deprecated-list-item--activated{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-deprecated-list-item--selected .mdc-deprecated-list-item__graphic,.mdc-deprecated-list-item--activated .mdc-deprecated-list-item__graphic{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-deprecated-list--dense{padding-top:4px;padding-bottom:4px;font-size:.812rem}.mdc-deprecated-list-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;padding-left:16px;padding-right:16px;height:48px}.mdc-deprecated-list-item:focus{outline:none}.mdc-deprecated-list-item:not(.mdc-deprecated-list-item--selected):focus::before,.mdc-deprecated-list-item.mdc-ripple-upgraded--background-focused::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none}.mdc-deprecated-list-item.mdc-deprecated-list-item--selected::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:3px double transparent;border-radius:inherit;content:"";pointer-events:none}[dir=rtl] .mdc-deprecated-list-item,.mdc-deprecated-list-item[dir=rtl]{padding-left:16px;padding-right:16px}.mdc-deprecated-list--icon-list .mdc-deprecated-list-item{padding-left:16px;padding-right:16px;height:56px}[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-item,.mdc-deprecated-list--icon-list .mdc-deprecated-list-item[dir=rtl]{padding-left:16px;padding-right:16px}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item{padding-left:16px;padding-right:16px;height:56px}[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-item,.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item[dir=rtl]{padding-left:16px;padding-right:16px}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item{padding-left:16px;padding-right:16px;height:56px}[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item,.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item[dir=rtl]{padding-left:16px;padding-right:16px}.mdc-deprecated-list--image-list .mdc-deprecated-list-item{padding-left:16px;padding-right:16px;height:72px}[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-item,.mdc-deprecated-list--image-list .mdc-deprecated-list-item[dir=rtl]{padding-left:16px;padding-right:16px}.mdc-deprecated-list--video-list .mdc-deprecated-list-item{padding-left:0px;padding-right:16px;height:72px}[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-item,.mdc-deprecated-list--video-list .mdc-deprecated-list-item[dir=rtl]{padding-left:16px;padding-right:0px}.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:16px;width:20px;height:20px}[dir=rtl] .mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic,.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:16px;margin-right:0}.mdc-deprecated-list-item__graphic{flex-shrink:0;align-items:center;justify-content:center;fill:currentColor;-o-object-fit:cover;object-fit:cover;margin-left:0;margin-right:32px;width:24px;height:24px}[dir=rtl] .mdc-deprecated-list-item__graphic,.mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:32px;margin-right:0}.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:32px;width:24px;height:24px}[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-item__graphic,.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:32px;margin-right:0}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:16px;width:40px;height:40px;border-radius:50%}[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__graphic,.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:16px;margin-right:0}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:16px;width:40px;height:40px}[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__graphic,.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:16px;margin-right:0}.mdc-deprecated-list--image-list .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:16px;width:56px;height:56px}[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-item__graphic,.mdc-deprecated-list--image-list .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:16px;margin-right:0}.mdc-deprecated-list--video-list .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:16px;width:100px;height:56px}[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-item__graphic,.mdc-deprecated-list--video-list .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:16px;margin-right:0}.mdc-deprecated-list .mdc-deprecated-list-item__graphic{display:inline-flex}.mdc-deprecated-list-item__meta{margin-left:auto;margin-right:0}.mdc-deprecated-list-item__meta:not(.material-icons){-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:0.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit)}.mdc-deprecated-list-item[dir=rtl] .mdc-deprecated-list-item__meta,[dir=rtl] .mdc-deprecated-list-item .mdc-deprecated-list-item__meta{margin-left:0;margin-right:auto}.mdc-deprecated-list-item__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mdc-deprecated-list-item__text[for]{pointer-events:none}.mdc-deprecated-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-deprecated-list-item__primary-text::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-deprecated-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-deprecated-list--video-list .mdc-deprecated-list-item__primary-text,.mdc-deprecated-list--image-list .mdc-deprecated-list-item__primary-text,.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__primary-text,.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__primary-text,.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-deprecated-list--video-list .mdc-deprecated-list-item__primary-text::before,.mdc-deprecated-list--image-list .mdc-deprecated-list-item__primary-text::before,.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__primary-text::before,.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__primary-text::before,.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-deprecated-list--video-list .mdc-deprecated-list-item__primary-text::after,.mdc-deprecated-list--image-list .mdc-deprecated-list-item__primary-text::after,.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item__primary-text::after,.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item__primary-text::after,.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-deprecated-list--dense .mdc-deprecated-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-deprecated-list--dense .mdc-deprecated-list-item__primary-text::before{display:inline-block;width:0;height:24px;content:"";vertical-align:0}.mdc-deprecated-list--dense .mdc-deprecated-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-deprecated-list-item__secondary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal}.mdc-deprecated-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-deprecated-list--dense .mdc-deprecated-list-item__secondary-text{font-size:inherit}.mdc-deprecated-list--dense .mdc-deprecated-list-item{height:40px}.mdc-deprecated-list--two-line .mdc-deprecated-list-item__text{align-self:flex-start}.mdc-deprecated-list--two-line .mdc-deprecated-list-item{height:64px}.mdc-deprecated-list--two-line.mdc-deprecated-list--video-list .mdc-deprecated-list-item,.mdc-deprecated-list--two-line.mdc-deprecated-list--image-list .mdc-deprecated-list-item,.mdc-deprecated-list--two-line.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-item,.mdc-deprecated-list--two-line.mdc-deprecated-list--avatar-list .mdc-deprecated-list-item,.mdc-deprecated-list--two-line.mdc-deprecated-list--icon-list .mdc-deprecated-list-item{height:72px}.mdc-deprecated-list--two-line.mdc-deprecated-list--icon-list .mdc-deprecated-list-item__graphic{align-self:flex-start;margin-top:16px}.mdc-deprecated-list--two-line.mdc-deprecated-list--dense .mdc-deprecated-list-item,.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense .mdc-deprecated-list-item{height:60px}.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:16px;width:36px;height:36px}[dir=rtl] .mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic,.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:16px;margin-right:0}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item{cursor:pointer}a.mdc-deprecated-list-item{color:inherit;text-decoration:none}.mdc-deprecated-list-divider{height:0;margin:0;border:none;border-bottom-width:1px;border-bottom-style:solid}.mdc-deprecated-list-divider{border-bottom-color:rgba(0, 0, 0, 0.12)}.mdc-deprecated-list-divider--padded{margin-left:16px;margin-right:0;width:calc(100% - 32px)}[dir=rtl] .mdc-deprecated-list-divider--padded,.mdc-deprecated-list-divider--padded[dir=rtl]{margin-left:0;margin-right:16px}.mdc-deprecated-list-divider--inset{margin-left:72px;margin-right:0;width:calc(100% - 72px)}[dir=rtl] .mdc-deprecated-list-divider--inset,.mdc-deprecated-list-divider--inset[dir=rtl]{margin-left:0;margin-right:72px}.mdc-deprecated-list-divider--inset.mdc-deprecated-list-divider--padded{margin-left:72px;margin-right:0;width:calc(100% - 88px)}[dir=rtl] .mdc-deprecated-list-divider--inset.mdc-deprecated-list-divider--padded,.mdc-deprecated-list-divider--inset.mdc-deprecated-list-divider--padded[dir=rtl]{margin-left:0;margin-right:72px}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading{margin-left:16px;margin-right:0;width:calc(100% - 16px)}[dir=rtl] .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading,.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading[dir=rtl]{margin-left:0;margin-right:16px}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-trailing{width:calc(100% - 16px)}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:16px;margin-right:0;width:calc(100% - 32px)}[dir=rtl] .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing,.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl]{margin-left:0;margin-right:16px}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:16px;margin-right:0;width:calc(100% - 16px)}[dir=rtl] .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding,.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl]{margin-left:0;margin-right:16px}.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:16px;margin-right:0;width:calc(100% - 32px)}[dir=rtl] .mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding,.mdc-deprecated-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl]{margin-left:0;margin-right:16px}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading{margin-left:72px;margin-right:0;width:calc(100% - 72px)}[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading,.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading[dir=rtl]{margin-left:0;margin-right:72px}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-trailing{width:calc(100% - 16px)}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:72px;margin-right:0;width:calc(100% - 88px)}[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing,.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl]{margin-left:0;margin-right:72px}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:16px;margin-right:0;width:calc(100% - 16px)}[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding,.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl]{margin-left:0;margin-right:16px}.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:16px;margin-right:0;width:calc(100% - 32px)}[dir=rtl] .mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding,.mdc-deprecated-list--icon-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl]{margin-left:0;margin-right:16px}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading{margin-left:72px;margin-right:0;width:calc(100% - 72px)}[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading,.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading[dir=rtl]{margin-left:0;margin-right:72px}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-trailing{width:calc(100% - 16px)}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:72px;margin-right:0;width:calc(100% - 88px)}[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing,.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl]{margin-left:0;margin-right:72px}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:16px;margin-right:0;width:calc(100% - 16px)}[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding,.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl]{margin-left:0;margin-right:16px}.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:16px;margin-right:0;width:calc(100% - 32px)}[dir=rtl] .mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding,.mdc-deprecated-list--avatar-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl]{margin-left:0;margin-right:16px}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading{margin-left:72px;margin-right:0;width:calc(100% - 72px)}[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading,.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading[dir=rtl]{margin-left:0;margin-right:72px}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-trailing{width:calc(100% - 16px)}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:72px;margin-right:0;width:calc(100% - 88px)}[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing,.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl]{margin-left:0;margin-right:72px}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:16px;margin-right:0;width:calc(100% - 16px)}[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding,.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl]{margin-left:0;margin-right:16px}.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:16px;margin-right:0;width:calc(100% - 32px)}[dir=rtl] .mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding,.mdc-deprecated-list--thumbnail-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl]{margin-left:0;margin-right:16px}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading{margin-left:88px;margin-right:0;width:calc(100% - 88px)}[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading,.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading[dir=rtl]{margin-left:0;margin-right:88px}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-trailing{width:calc(100% - 16px)}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:88px;margin-right:0;width:calc(100% - 104px)}[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing,.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl]{margin-left:0;margin-right:88px}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:16px;margin-right:0;width:calc(100% - 16px)}[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding,.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl]{margin-left:0;margin-right:16px}.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:16px;margin-right:0;width:calc(100% - 32px)}[dir=rtl] .mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding,.mdc-deprecated-list--image-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl]{margin-left:0;margin-right:16px}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading{margin-left:116px;margin-right:0;width:calc(100% - 116px)}[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading,.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading[dir=rtl]{margin-left:0;margin-right:116px}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-trailing{width:calc(100% - 16px)}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing{margin-left:116px;margin-right:0;width:calc(100% - 132px)}[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing,.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing[dir=rtl]{margin-left:0;margin-right:116px}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding{margin-left:0px;margin-right:0;width:calc(100% - 0px)}[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding,.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--padding[dir=rtl]{margin-left:0;margin-right:0px}.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding{margin-left:0px;margin-right:0;width:calc(100% - 16px)}[dir=rtl] .mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding,.mdc-deprecated-list--video-list .mdc-deprecated-list-divider--inset-leading.mdc-deprecated-list-divider--inset-trailing.mdc-deprecated-list-divider--inset-padding[dir=rtl]{margin-left:0;margin-right:0px}.mdc-deprecated-list-group .mdc-deprecated-list{padding:0}.mdc-deprecated-list-group__subheader{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);margin:calc( (3rem - 1.5rem) / 2 ) 16px}.mdc-list-item__primary-text{color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87))}.mdc-list-item__secondary-text{color:rgba(0, 0, 0, 0.54);color:var(--mdc-theme-text-secondary-on-background, rgba(0, 0, 0, 0.54))}.mdc-list-item__overline-text{color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-hint-on-background, rgba(0, 0, 0, 0.38))}.mdc-list-item--with-leading-icon .mdc-list-item__start,.mdc-list-item--with-trailing-icon .mdc-list-item__end{background-color:transparent}.mdc-list-item--with-leading-icon .mdc-list-item__start,.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-icon-on-background, rgba(0, 0, 0, 0.38))}.mdc-list-item__end{color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-hint-on-background, rgba(0, 0, 0, 0.38))}.mdc-list-item--disabled .mdc-list-item__start,.mdc-list-item--disabled .mdc-list-item__content,.mdc-list-item--disabled .mdc-list-item__end{opacity:.38}.mdc-list-item--disabled .mdc-list-item__primary-text{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-list-item--disabled .mdc-list-item__secondary-text{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-list-item--disabled .mdc-list-item__overline-text{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-list-item--disabled.mdc-list-item--with-trailing-meta .mdc-list-item__end{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-list-item--selected .mdc-list-item__primary-text,.mdc-list-item--activated .mdc-list-item__primary-text{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-list-item--selected.mdc-list-item--with-leading-icon .mdc-list-item__start,.mdc-list-item--activated.mdc-list-item--with-leading-icon .mdc-list-item__start{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-deprecated-list-group__subheader{color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87))}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-list-divider::after{content:"";display:block;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:white}}.mdc-list{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);line-height:1.5rem;margin:0;padding:8px 0;list-style-type:none}.mdc-list:focus{outline:none}.mdc-list-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;align-items:stretch;cursor:pointer}.mdc-list-item:focus{outline:none}.mdc-list-item.mdc-list-item--with-one-line{height:48px}.mdc-list-item.mdc-list-item--with-two-lines{height:64px}.mdc-list-item.mdc-list-item--with-three-lines{height:88px}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--disabled,.mdc-list-item.mdc-list-item--non-interactive{cursor:auto}.mdc-list-item:not(.mdc-list-item--selected):focus::before,.mdc-list-item.mdc-ripple-upgraded--background-focused::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none}.mdc-list-item.mdc-list-item--selected::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:3px double transparent;border-radius:inherit;content:"";pointer-events:none}.mdc-list-item.mdc-list-item--selected:focus::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:3px solid transparent;border-radius:inherit;content:"";pointer-events:none}a.mdc-list-item{color:inherit;text-decoration:none}.mdc-list-item__start{fill:currentColor;flex-shrink:0;pointer-events:none}.mdc-list-item__end{flex-shrink:0;pointer-events:none}.mdc-list-item__content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;align-self:center;flex:1;pointer-events:none}.mdc-list-item--with-two-lines .mdc-list-item__content,.mdc-list-item--with-three-lines .mdc-list-item__content{align-self:stretch}.mdc-list-item__content[for]{pointer-events:none}.mdc-list-item__primary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-three-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item__secondary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal}.mdc-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__secondary-text{white-space:normal;line-height:20px}.mdc-list-item--with-overline .mdc-list-item__secondary-text{white-space:nowrap;line-height:auto}.mdc-list-item__overline-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-overline-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-overline-font-size, 0.75rem);line-height:2rem;line-height:var(--mdc-typography-overline-line-height, 2rem);font-weight:500;font-weight:var(--mdc-typography-overline-font-weight, 500);letter-spacing:0.1666666667em;letter-spacing:var(--mdc-typography-overline-letter-spacing, 0.1666666667em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-overline-text-decoration, none);text-decoration:var(--mdc-typography-overline-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-overline-text-transform, uppercase);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before{display:inline-block;width:0;height:24px;content:"";vertical-align:0}.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-three-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-three-lines .mdc-list-item__overline-text::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__overline-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:0;padding-right:auto}[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item,.mdc-list-item--with-leading-avatar.mdc-list-item[dir=rtl]{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-avatar .mdc-list-item__start{margin-left:16px;margin-right:16px}[dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start,.mdc-list-item--with-leading-avatar .mdc-list-item__start[dir=rtl]{margin-left:16px;margin-right:16px}.mdc-list-item--with-leading-avatar .mdc-list-item__start{width:40px;height:40px}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-avatar.mdc-list-item--with-one-line{height:56px}.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-avatar .mdc-list-item__start{border-radius:50%}.mdc-list-item--with-leading-icon .mdc-list-item__start{width:24px;height:24px}.mdc-list-item--with-leading-icon.mdc-list-item{padding-left:0;padding-right:auto}[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item,.mdc-list-item--with-leading-icon.mdc-list-item[dir=rtl]{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-icon .mdc-list-item__start{margin-left:16px;margin-right:32px}[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start,.mdc-list-item--with-leading-icon .mdc-list-item__start[dir=rtl]{margin-left:32px;margin-right:16px}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-icon.mdc-list-item--with-one-line{height:56px}.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-thumbnail.mdc-list-item{padding-left:0;padding-right:auto}[dir=rtl] .mdc-list-item--with-leading-thumbnail.mdc-list-item,.mdc-list-item--with-leading-thumbnail.mdc-list-item[dir=rtl]{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-thumbnail .mdc-list-item__start{margin-left:16px;margin-right:16px}[dir=rtl] .mdc-list-item--with-leading-thumbnail .mdc-list-item__start,.mdc-list-item--with-leading-thumbnail .mdc-list-item__start[dir=rtl]{margin-left:16px;margin-right:16px}.mdc-list-item--with-leading-thumbnail .mdc-list-item__start{width:40px;height:40px}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-one-line{height:56px}.mdc-list-item--with-leading-thumbnail.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-image.mdc-list-item{padding-left:0;padding-right:auto}[dir=rtl] .mdc-list-item--with-leading-image.mdc-list-item,.mdc-list-item--with-leading-image.mdc-list-item[dir=rtl]{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-image .mdc-list-item__start{margin-left:16px;margin-right:16px}[dir=rtl] .mdc-list-item--with-leading-image .mdc-list-item__start,.mdc-list-item--with-leading-image .mdc-list-item__start[dir=rtl]{margin-left:16px;margin-right:16px}.mdc-list-item--with-leading-image .mdc-list-item__start{width:56px;height:56px}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-image.mdc-list-item--with-one-line{height:72px}.mdc-list-item--with-leading-image.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-leading-video.mdc-list-item{padding-left:0;padding-right:auto}[dir=rtl] .mdc-list-item--with-leading-video.mdc-list-item,.mdc-list-item--with-leading-video.mdc-list-item[dir=rtl]{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-video .mdc-list-item__start{margin-left:0;margin-right:16px}[dir=rtl] .mdc-list-item--with-leading-video .mdc-list-item__start,.mdc-list-item--with-leading-video .mdc-list-item__start[dir=rtl]{margin-left:16px;margin-right:0}.mdc-list-item--with-leading-video .mdc-list-item__start{width:100px;height:56px}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-video.mdc-list-item--with-one-line{height:72px}.mdc-list-item--with-leading-video.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-checkbox.mdc-list-item{padding-left:0;padding-right:auto}[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item,.mdc-list-item--with-leading-checkbox.mdc-list-item[dir=rtl]{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:8px;margin-right:24px}[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start,.mdc-list-item--with-leading-checkbox .mdc-list-item__start[dir=rtl]{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-checkbox .mdc-list-item__start{width:40px;height:40px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-one-line{height:56px}.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-radio.mdc-list-item{padding-left:0;padding-right:auto}[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item,.mdc-list-item--with-leading-radio.mdc-list-item[dir=rtl]{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-radio .mdc-list-item__start{margin-left:8px;margin-right:24px}[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start,.mdc-list-item--with-leading-radio .mdc-list-item__start[dir=rtl]{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-radio .mdc-list-item__start{width:40px;height:40px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-one-line{height:56px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-leading-switch.mdc-list-item{padding-left:0;padding-right:auto}[dir=rtl] .mdc-list-item--with-leading-switch.mdc-list-item,.mdc-list-item--with-leading-switch.mdc-list-item[dir=rtl]{padding-left:auto;padding-right:0}.mdc-list-item--with-leading-switch .mdc-list-item__start{margin-left:16px;margin-right:16px}[dir=rtl] .mdc-list-item--with-leading-switch .mdc-list-item__start,.mdc-list-item--with-leading-switch .mdc-list-item__start[dir=rtl]{margin-left:16px;margin-right:16px}.mdc-list-item--with-leading-switch .mdc-list-item__start{width:36px;height:20px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__overline-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__overline-text::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines .mdc-list-item__overline-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-list-item--with-leading-switch.mdc-list-item--with-one-line{height:56px}.mdc-list-item--with-leading-switch.mdc-list-item--with-two-lines{height:72px}.mdc-list-item--with-trailing-icon.mdc-list-item{padding-left:auto;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item,.mdc-list-item--with-trailing-icon.mdc-list-item[dir=rtl]{padding-left:0;padding-right:auto}.mdc-list-item--with-trailing-icon .mdc-list-item__end{margin-left:16px;margin-right:16px}[dir=rtl] .mdc-list-item--with-trailing-icon .mdc-list-item__end,.mdc-list-item--with-trailing-icon .mdc-list-item__end[dir=rtl]{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-icon .mdc-list-item__end{width:24px;height:24px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:flex-start;margin-top:0}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:0}.mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:auto;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item,.mdc-list-item--with-trailing-meta.mdc-list-item[dir=rtl]{padding-left:0;padding-right:auto}.mdc-list-item--with-trailing-meta .mdc-list-item__end{margin-left:28px;margin-right:16px}[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-trailing-meta .mdc-list-item__end[dir=rtl]{margin-left:16px;margin-right:28px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-list-item--with-trailing-meta .mdc-list-item__end{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:0.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit)}.mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:auto;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item,.mdc-list-item--with-trailing-checkbox.mdc-list-item[dir=rtl]{padding-left:0;padding-right:auto}.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:24px;margin-right:8px}[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox .mdc-list-item__end[dir=rtl]{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{width:40px;height:40px}.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-radio.mdc-list-item{padding-left:auto;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item,.mdc-list-item--with-trailing-radio.mdc-list-item[dir=rtl]{padding-left:0;padding-right:auto}.mdc-list-item--with-trailing-radio .mdc-list-item__end{margin-left:24px;margin-right:8px}[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end,.mdc-list-item--with-trailing-radio .mdc-list-item__end[dir=rtl]{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-radio .mdc-list-item__end{width:40px;height:40px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-switch.mdc-list-item{padding-left:auto;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-switch.mdc-list-item,.mdc-list-item--with-trailing-switch.mdc-list-item[dir=rtl]{padding-left:0;padding-right:auto}.mdc-list-item--with-trailing-switch .mdc-list-item__end{margin-left:16px;margin-right:16px}[dir=rtl] .mdc-list-item--with-trailing-switch .mdc-list-item__end,.mdc-list-item--with-trailing-switch .mdc-list-item__end[dir=rtl]{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-switch .mdc-list-item__end{width:36px;height:20px}.mdc-list-item--with-trailing-switch.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item--with-overline.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-overline.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-list-item--with-overline.mdc-list-item--with-three-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-overline.mdc-list-item--with-three-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-list-item{padding-left:16px;padding-right:16px}[dir=rtl] .mdc-list-item,.mdc-list-item[dir=rtl]{padding-left:16px;padding-right:16px}.mdc-list-group .mdc-deprecated-list{padding:0}.mdc-list-group__subheader{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);margin:calc( (3rem - 1.5rem) / 2 ) 16px}.mdc-list-divider{background-color:rgba(0, 0, 0, 0.12)}.mdc-list-divider{height:1px;padding:0;background-clip:content-box}.mdc-list-divider.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-text.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-icon.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-image.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-avatar.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-switch.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-radio.mdc-list-divider--with-leading-inset{padding-left:16px;padding-right:auto}[dir=rtl] .mdc-list-divider.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-text.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-icon.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-image.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-avatar.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-switch.mdc-list-divider--with-leading-inset,[dir=rtl] .mdc-list-divider--with-leading-radio.mdc-list-divider--with-leading-inset,.mdc-list-divider.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-text.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-icon.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-image.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-avatar.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-switch.mdc-list-divider--with-leading-inset[dir=rtl],.mdc-list-divider--with-leading-radio.mdc-list-divider--with-leading-inset[dir=rtl]{padding-left:auto;padding-right:16px}.mdc-list-divider.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-text.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-icon.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-image.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-avatar.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-switch.mdc-list-divider--with-trailing-inset,.mdc-list-divider--with-leading-radio.mdc-list-divider--with-trailing-inset{padding-left:auto;padding-right:16px}[dir=rtl] .mdc-list-divider.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-text.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-icon.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-image.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-avatar.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-switch.mdc-list-divider--with-trailing-inset,[dir=rtl] .mdc-list-divider--with-leading-radio.mdc-list-divider--with-trailing-inset,.mdc-list-divider.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-text.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-icon.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-image.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-thumbnail.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-avatar.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-checkbox.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-switch.mdc-list-divider--with-trailing-inset[dir=rtl],.mdc-list-divider--with-leading-radio.mdc-list-divider--with-trailing-inset[dir=rtl]{padding-left:16px;padding-right:auto}.mdc-list-divider--with-leading-video.mdc-list-divider--with-leading-inset{padding-left:0px;padding-right:auto}[dir=rtl] .mdc-list-divider--with-leading-video.mdc-list-divider--with-leading-inset,.mdc-list-divider--with-leading-video.mdc-list-divider--with-leading-inset[dir=rtl]{padding-left:auto;padding-right:0px}[dir=rtl] .mdc-list-divider,.mdc-list-divider[dir=rtl]{padding:0}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity;--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--unbounded .mdc-deprecated-list-item__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--foreground-activation .mdc-deprecated-list-item__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--foreground-deactivation .mdc-deprecated-list-item__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-list-item__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-list-item__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--unbounded .mdc-list-item__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--foreground-activation .mdc-list-item__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--foreground-deactivation .mdc-list-item__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded .mdc-list-item__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:hover .mdc-deprecated-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-surface--hover .mdc-deprecated-list-item__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded) .mdc-deprecated-list-item__ripple::after{transition:opacity 150ms linear}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded):active .mdc-deprecated-list-item__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:hover .mdc-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-surface--hover .mdc-list-item__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after{transition:opacity 150ms linear}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-deprecated-list-item__ripple::before{opacity:0.12;opacity:var(--mdc-ripple-activated-opacity, 0.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-deprecated-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-deprecated-list-item__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:hover .mdc-deprecated-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-surface--hover .mdc-deprecated-list-item__ripple::before{opacity:0.16;opacity:var(--mdc-ripple-hover-opacity, 0.16)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded) .mdc-deprecated-list-item__ripple::after{transition:opacity 150ms linear}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded):active .mdc-deprecated-list-item__ripple::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-list-item__ripple::before{opacity:0.12;opacity:var(--mdc-ripple-activated-opacity, 0.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated .mdc-list-item__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:hover .mdc-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-surface--hover .mdc-list-item__ripple::before{opacity:0.16;opacity:var(--mdc-ripple-hover-opacity, 0.16)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after{transition:opacity 150ms linear}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--activated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple::before{opacity:0.08;opacity:var(--mdc-ripple-selected-opacity, 0.08)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:hover .mdc-deprecated-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-deprecated-list-item__ripple::before{opacity:0.12;opacity:var(--mdc-ripple-hover-opacity, 0.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple::before{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-focus-opacity, 0.2)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-deprecated-list-item__ripple::after{transition:opacity 150ms linear}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-deprecated-list-item__ripple::after{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-press-opacity, 0.2)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.2)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-list-item__ripple::before{opacity:0.08;opacity:var(--mdc-ripple-selected-opacity, 0.08)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected .mdc-list-item__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:hover .mdc-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-list-item__ripple::before{opacity:0.12;opacity:var(--mdc-ripple-hover-opacity, 0.12)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-focus-opacity, 0.2)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after{transition:opacity 150ms linear}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-press-opacity, 0.2)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.2)}:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-deprecated-list-item__ripple,:not(.mdc-deprecated-list-item--disabled).mdc-deprecated-list-item .mdc-list-item__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-deprecated-list-item--disabled{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity;--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::before,.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--unbounded .mdc-deprecated-list-item__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--foreground-activation .mdc-deprecated-list-item__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--foreground-deactivation .mdc-deprecated-list-item__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::before,.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--unbounded .mdc-list-item__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--foreground-activation .mdc-list-item__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--foreground-deactivation .mdc-list-item__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::before,.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-deprecated-list-item__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::before,.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::before,.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::before,.mdc-deprecated-list-item--disabled .mdc-list-item__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple::before,.mdc-deprecated-list-item--disabled:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-deprecated-list-item--disabled.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before,.mdc-deprecated-list-item--disabled:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-deprecated-list-item--disabled .mdc-deprecated-list-item__ripple,.mdc-deprecated-list-item--disabled .mdc-list-item__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}:not(.mdc-list-item--disabled).mdc-list-item{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::before,:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded .mdc-list-item__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded .mdc-list-item__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--unbounded .mdc-list-item__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--foreground-activation .mdc-list-item__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--foreground-deactivation .mdc-list-item__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::before,:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded .mdc-list-item__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::before,:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}:not(.mdc-list-item--disabled).mdc-list-item:hover .mdc-list-item__ripple::before,:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-surface--hover .mdc-list-item__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before,:not(.mdc-list-item--disabled).mdc-list-item:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}:not(.mdc-list-item--disabled).mdc-list-item:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after{transition:opacity 150ms linear}:not(.mdc-list-item--disabled).mdc-list-item:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}:not(.mdc-list-item--disabled).mdc-list-item.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}:not(.mdc-list-item--disabled).mdc-list-item--activated .mdc-list-item__ripple::before{opacity:0.12;opacity:var(--mdc-ripple-activated-opacity, 0.12)}:not(.mdc-list-item--disabled).mdc-list-item--activated .mdc-list-item__ripple::before,:not(.mdc-list-item--disabled).mdc-list-item--activated .mdc-list-item__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}:not(.mdc-list-item--disabled).mdc-list-item--activated:hover .mdc-list-item__ripple::before,:not(.mdc-list-item--disabled).mdc-list-item--activated.mdc-ripple-surface--hover .mdc-list-item__ripple::before{opacity:0.16;opacity:var(--mdc-ripple-hover-opacity, 0.16)}:not(.mdc-list-item--disabled).mdc-list-item--activated.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before,:not(.mdc-list-item--disabled).mdc-list-item--activated:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}:not(.mdc-list-item--disabled).mdc-list-item--activated:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after{transition:opacity 150ms linear}:not(.mdc-list-item--disabled).mdc-list-item--activated:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}:not(.mdc-list-item--disabled).mdc-list-item--activated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}:not(.mdc-list-item--disabled).mdc-list-item--selected .mdc-list-item__ripple::before{opacity:0.08;opacity:var(--mdc-ripple-selected-opacity, 0.08)}:not(.mdc-list-item--disabled).mdc-list-item--selected .mdc-list-item__ripple::before,:not(.mdc-list-item--disabled).mdc-list-item--selected .mdc-list-item__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}:not(.mdc-list-item--disabled).mdc-list-item--selected:hover .mdc-list-item__ripple::before,:not(.mdc-list-item--disabled).mdc-list-item--selected.mdc-ripple-surface--hover .mdc-list-item__ripple::before{opacity:0.12;opacity:var(--mdc-ripple-hover-opacity, 0.12)}:not(.mdc-list-item--disabled).mdc-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before,:not(.mdc-list-item--disabled).mdc-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-focus-opacity, 0.2)}:not(.mdc-list-item--disabled).mdc-list-item--selected:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after{transition:opacity 150ms linear}:not(.mdc-list-item--disabled).mdc-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-press-opacity, 0.2)}:not(.mdc-list-item--disabled).mdc-list-item--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.2)}:not(.mdc-list-item--disabled).mdc-list-item .mdc-list-item__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-list-item--disabled{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-list-item--disabled .mdc-list-item__ripple::before,.mdc-list-item--disabled .mdc-list-item__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-list-item--disabled .mdc-list-item__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-list-item--disabled .mdc-list-item__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-list-item--disabled.mdc-ripple-upgraded--unbounded .mdc-list-item__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-list-item--disabled.mdc-ripple-upgraded--foreground-activation .mdc-list-item__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-list-item--disabled.mdc-ripple-upgraded--foreground-deactivation .mdc-list-item__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-list-item--disabled .mdc-list-item__ripple::before,.mdc-list-item--disabled .mdc-list-item__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-list-item--disabled.mdc-ripple-upgraded .mdc-list-item__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-list-item--disabled .mdc-list-item__ripple::before,.mdc-list-item--disabled .mdc-list-item__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}.mdc-list-item--disabled.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before,.mdc-list-item--disabled:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-list-item--disabled .mdc-list-item__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-menu{min-width:112px;min-width:var(--mdc-menu-min-width, 112px)}.mdc-menu .mdc-deprecated-list-item__meta{color:rgba(0, 0, 0, 0.87)}.mdc-menu .mdc-deprecated-list-item__graphic{color:rgba(0, 0, 0, 0.87)}.mdc-menu .mdc-deprecated-list{color:rgba(0, 0, 0, 0.87);position:relative}.mdc-menu .mdc-deprecated-list .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-menu .mdc-deprecated-list-divider{margin:8px 0}.mdc-menu .mdc-deprecated-list-item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdc-menu .mdc-deprecated-list-item--disabled{cursor:auto}.mdc-menu a.mdc-deprecated-list-item .mdc-deprecated-list-item__text,.mdc-menu a.mdc-deprecated-list-item .mdc-deprecated-list-item__graphic{pointer-events:none}.mdc-menu__selection-group{padding:0;fill:currentColor}.mdc-menu__selection-group .mdc-deprecated-list-item{padding-left:56px;padding-right:16px}[dir=rtl] .mdc-menu__selection-group .mdc-deprecated-list-item,.mdc-menu__selection-group .mdc-deprecated-list-item[dir=rtl]{padding-left:16px;padding-right:56px}.mdc-menu__selection-group .mdc-menu__selection-group-icon{left:16px;right:initial;display:none;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}[dir=rtl] .mdc-menu__selection-group .mdc-menu__selection-group-icon,.mdc-menu__selection-group .mdc-menu__selection-group-icon[dir=rtl]{left:initial;right:16px}.mdc-menu-item--selected .mdc-menu__selection-group-icon{display:inline}.mdc-menu-surface{display:none;position:absolute;box-sizing:border-box;max-width:calc(100vw - 32px);max-width:var(--mdc-menu-max-width, calc(100vw - 32px));max-height:calc(100vh - 32px);max-height:var(--mdc-menu-max-height, calc(100vh - 32px));margin:0;padding:0;-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:top left;transform-origin:top left;opacity:0;overflow:auto;will-change:transform,opacity;z-index:8;transition:opacity .03s linear,height 250ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform .12s cubic-bezier(0, 0, 0.2, 1);transition:opacity .03s linear,transform .12s cubic-bezier(0, 0, 0.2, 1),height 250ms cubic-bezier(0, 0, 0.2, 1);transition:opacity .03s linear,transform .12s cubic-bezier(0, 0, 0.2, 1),height 250ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform .12s cubic-bezier(0, 0, 0.2, 1);box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12);background-color:#fff;background-color:var(--mdc-theme-surface, #fff);color:#000;color:var(--mdc-theme-on-surface, #000);border-radius:4px;border-radius:var(--mdc-shape-medium, 4px);transform-origin-left:top left;transform-origin-right:top right}.mdc-menu-surface:focus{outline:none}.mdc-menu-surface--animating-open{display:inline-block;-webkit-transform:scale(0.8);transform:scale(0.8);opacity:0}.mdc-menu-surface--open{display:inline-block;-webkit-transform:scale(1);transform:scale(1);opacity:1}.mdc-menu-surface--animating-closed{display:inline-block;opacity:0;transition:opacity .075s linear}[dir=rtl] .mdc-menu-surface,.mdc-menu-surface[dir=rtl]{transform-origin-left:top right;transform-origin-right:top left}.mdc-menu-surface--anchor{position:relative;overflow:visible}.mdc-menu-surface--fixed{position:fixed}.mdc-menu-surface--fullwidth{width:100%}.mdc-radio{padding:calc((40px - 20px) / 2)}.mdc-radio .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0, 0, 0, 0.54)}.mdc-radio .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:#018786;border-color:var(--mdc-theme-secondary, #018786)}.mdc-radio .mdc-radio__native-control:enabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:#018786;border-color:var(--mdc-theme-secondary, #018786)}.mdc-radio [aria-disabled=true] .mdc-radio__native-control:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0, 0, 0, 0.38)}.mdc-radio [aria-disabled=true] .mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0, 0, 0, 0.38)}.mdc-radio [aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:rgba(0, 0, 0, 0.38)}.mdc-radio .mdc-radio__background::before{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-radio .mdc-radio__background::before{top:calc(-1 * (40px - 20px) / 2);left:calc(-1 * (40px - 20px) / 2);width:40px;height:40px}.mdc-radio .mdc-radio__native-control{top:calc((40px - 40px) / 2);right:calc((40px - 40px) / 2);left:calc((40px - 40px) / 2);width:40px;height:40px}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-radio [aria-disabled=true] .mdc-radio__native-control:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:GrayText}.mdc-radio [aria-disabled=true] .mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:GrayText}.mdc-radio [aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:GrayText}}.mdc-radio{display:inline-block;position:relative;flex:0 0 auto;box-sizing:content-box;width:20px;height:20px;cursor:pointer;will-change:opacity,transform,border-color,color}.mdc-radio__background{display:inline-block;position:relative;box-sizing:border-box;width:20px;height:20px}.mdc-radio__background::before{position:absolute;-webkit-transform:scale(0, 0);transform:scale(0, 0);border-radius:50%;opacity:0;pointer-events:none;content:"";transition:opacity 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:opacity 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-radio__outer-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border-width:2px;border-style:solid;border-radius:50%;transition:border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-radio__inner-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;-webkit-transform:scale(0, 0);transform:scale(0, 0);border-width:10px;border-style:solid;border-radius:50%;transition:border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transition:transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),-webkit-transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-radio__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1}.mdc-radio--touch{margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-radio--touch .mdc-radio__native-control{top:calc((40px - 48px) / 2);right:calc((40px - 48px) / 2);left:calc((40px - 48px) / 2);width:48px;height:48px}.mdc-radio__native-control:checked+.mdc-radio__background,.mdc-radio__native-control:disabled+.mdc-radio__background{transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__outer-circle{transition:border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{transition:border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio--disabled{cursor:default;pointer-events:none}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__inner-circle{-webkit-transform:scale(0.5);transform:scale(0.5);transition:border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio__native-control:disabled+.mdc-radio__background,[aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background{cursor:default}.mdc-radio__native-control:focus+.mdc-radio__background::before{-webkit-transform:scale(1);transform:scale(1);opacity:.12;transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-radio .mdc-radio__ripple::before,.mdc-radio .mdc-radio__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-radio .mdc-radio__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-radio .mdc-radio__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-radio.mdc-ripple-upgraded--unbounded .mdc-radio__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-radio.mdc-ripple-upgraded--foreground-activation .mdc-radio__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-radio.mdc-ripple-upgraded--foreground-deactivation .mdc-radio__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-radio .mdc-radio__ripple::before,.mdc-radio .mdc-radio__ripple::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::before,.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-radio.mdc-ripple-upgraded .mdc-radio__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-radio .mdc-radio__ripple::before,.mdc-radio .mdc-radio__ripple::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-radio:hover .mdc-radio__ripple::before,.mdc-radio.mdc-ripple-surface--hover .mdc-radio__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__ripple::before,.mdc-radio:not(.mdc-ripple-upgraded):focus .mdc-radio__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-radio:not(.mdc-ripple-upgraded) .mdc-radio__ripple::after{transition:opacity 150ms linear}.mdc-radio:not(.mdc-ripple-upgraded):active .mdc-radio__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-radio.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-radio.mdc-ripple-upgraded .mdc-radio__background::before,.mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__background::before{content:none}.mdc-radio__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-ripple-surface{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity;position:relative;outline:none;overflow:hidden}.mdc-ripple-surface::before,.mdc-ripple-surface::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-ripple-surface::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-ripple-surface::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-ripple-surface.mdc-ripple-upgraded::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-ripple-surface.mdc-ripple-upgraded::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-ripple-surface.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-ripple-surface.mdc-ripple-upgraded--foreground-activation::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-ripple-surface.mdc-ripple-upgraded--foreground-deactivation::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-ripple-surface::before,.mdc-ripple-surface::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-ripple-surface.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface[data-mdc-ripple-is-unbounded],.mdc-ripple-upgraded--unbounded{overflow:visible}.mdc-ripple-surface[data-mdc-ripple-is-unbounded]::before,.mdc-ripple-surface[data-mdc-ripple-is-unbounded]::after,.mdc-ripple-upgraded--unbounded::before,.mdc-ripple-upgraded--unbounded::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::before,.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::after,.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::before,.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::after,.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface::before,.mdc-ripple-surface::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}.mdc-ripple-surface:hover::before,.mdc-ripple-surface.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-ripple-surface.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-ripple-surface:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-segmented-button{display:inline-block;font-size:0}.mdc-segmented-button__segment{border-color:rgba(0, 0, 0, 0.12);border-color:var(--mdc-segmented-button-outline-color, rgba(0, 0, 0, 0.12))}.mdc-segmented-button__segment{color:rgba(0, 0, 0, 0.6);color:var(--mdc-segmented-button-unselected-ink-color, rgba(0, 0, 0, 0.6))}.mdc-segmented-button__segment{background-color:white;background-color:var(--mdc-segmented-button-unselected-container-fill-color, white)}.mdc-segmented-button__segment--selected{color:#6200ee;color:var(--mdc-segmented-button-selected-ink-color, #6200ee)}.mdc-segmented-button__segment--selected{background-color:rgba(98, 0, 238, 0.08);background-color:var(--mdc-segmented-button-selected-container-fill-color, rgba(98, 0, 238, 0.08))}.mdc-segmented-button__segment{position:relative;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height, 2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:0.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase);display:inline-flex;vertical-align:top;align-items:center;height:36px;min-width:48px;padding:0 12px;border-width:1px 0 1px 1px}.mdc-segmented-button__segment .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-segmented-button__segment:hover{cursor:pointer}.mdc-segmented-button__segment:focus{outline-width:0}.mdc-segmented-button__segment:first-child{border-radius:4px 0 0 4px}.mdc-segmented-button__segment:last-child{border-right-width:1px;border-radius:0 4px 4px 0}.mdc-segmented-button__segment .mdc-segmented-button__segment__touch{position:absolute;top:50%;height:48px;left:0;right:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.mdc-segmented-button__segment .mdc-segmented-button__segment--touch{margin-top:0px;margin-bottom:0px}.mdc-touch-target-wrapper .mdc-segmented-button__segment{border-radius:0;border-right-width:0}.mdc-touch-target-wrapper:first-child .mdc-segmented-button__segment{border-radius:4px 0 0 4px}.mdc-touch-target-wrapper:last-child .mdc-segmented-button__segment{border-right-width:1px;border-radius:0 4px 4px 0}.mdc-segmented-button__icon{width:24px;font-size:18px}.mdc-segmented-button__icon+.mdc-segmented-button__label{padding-left:6px}.mdc-segmented-button__segment{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity;overflow:hidden}.mdc-segmented-button__segment .mdc-segmented-button__ripple::before,.mdc-segmented-button__segment .mdc-segmented-button__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-segmented-button__segment .mdc-segmented-button__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-segmented-button__segment .mdc-segmented-button__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-segmented-button__segment.mdc-ripple-upgraded .mdc-segmented-button__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-segmented-button__segment.mdc-ripple-upgraded .mdc-segmented-button__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-segmented-button__segment.mdc-ripple-upgraded--unbounded .mdc-segmented-button__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-segmented-button__segment.mdc-ripple-upgraded--foreground-activation .mdc-segmented-button__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-segmented-button__segment.mdc-ripple-upgraded--foreground-deactivation .mdc-segmented-button__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-segmented-button__segment .mdc-segmented-button__ripple::before,.mdc-segmented-button__segment .mdc-segmented-button__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-segmented-button__segment.mdc-ripple-upgraded .mdc-segmented-button__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-segmented-button__segment .mdc-segmented-button__ripple::before,.mdc-segmented-button__segment .mdc-segmented-button__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, #6200ee)}.mdc-segmented-button__segment:hover .mdc-segmented-button__ripple::before,.mdc-segmented-button__segment.mdc-ripple-surface--hover .mdc-segmented-button__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-segmented-button__segment.mdc-ripple-upgraded--background-focused .mdc-segmented-button__ripple::before,.mdc-segmented-button__segment.mdc-ripple-upgraded:focus-within .mdc-segmented-button__ripple::before,.mdc-segmented-button__segment:not(.mdc-ripple-upgraded):focus .mdc-segmented-button__ripple::before,.mdc-segmented-button__segment:not(.mdc-ripple-upgraded):focus-within .mdc-segmented-button__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-segmented-button__segment:not(.mdc-ripple-upgraded) .mdc-segmented-button__ripple::after{transition:opacity 150ms linear}.mdc-segmented-button__segment:not(.mdc-ripple-upgraded):active .mdc-segmented-button__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-segmented-button__segment.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-segmented-button__segment .mdc-segmented-button__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-slider__thumb{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-slider__thumb::before,.mdc-slider__thumb::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-slider__thumb::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-slider__thumb::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-slider__thumb.mdc-ripple-upgraded::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-slider__thumb.mdc-ripple-upgraded::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-slider__thumb.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-slider__thumb.mdc-ripple-upgraded--foreground-activation::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-slider__thumb.mdc-ripple-upgraded--foreground-deactivation::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-slider__thumb::before,.mdc-slider__thumb::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-slider__thumb.mdc-ripple-upgraded::before,.mdc-slider__thumb.mdc-ripple-upgraded::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-slider__thumb.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-slider__thumb::before,.mdc-slider__thumb::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-slider__thumb:hover::before,.mdc-slider__thumb.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-slider__thumb.mdc-ripple-upgraded--background-focused::before,.mdc-slider__thumb:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-slider__thumb:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-slider__thumb:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-slider__thumb.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-slider{cursor:pointer;height:48px;margin:0 24px;position:relative;touch-action:pan-y}.mdc-slider .mdc-slider__track{height:4px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:100%}.mdc-slider .mdc-slider__track--active,.mdc-slider .mdc-slider__track--inactive{display:flex;height:100%;position:absolute;width:100%}.mdc-slider .mdc-slider__track--active{border-radius:3px;height:6px;overflow:hidden;top:-1px}.mdc-slider .mdc-slider__track--active_fill{border-top:6px solid;box-sizing:border-box;height:100%;width:100%;position:relative;-webkit-transform-origin:left;transform-origin:left}[dir=rtl] .mdc-slider .mdc-slider__track--active_fill,.mdc-slider .mdc-slider__track--active_fill[dir=rtl]{-webkit-transform-origin:right;transform-origin:right}.mdc-slider .mdc-slider__track--inactive{border-radius:2px;height:4px;left:0;top:0}.mdc-slider .mdc-slider__track--inactive::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none}.mdc-slider .mdc-slider__track--active_fill{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-slider.mdc-slider--disabled .mdc-slider__track--active_fill{border-color:#000;border-color:var(--mdc-theme-on-surface, #000)}.mdc-slider .mdc-slider__track--inactive{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee);opacity:.24}.mdc-slider.mdc-slider--disabled .mdc-slider__track--inactive{background-color:#000;background-color:var(--mdc-theme-on-surface, #000);opacity:.24}.mdc-slider .mdc-slider__value-indicator-container{bottom:44px;left:50%;pointer-events:none;position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.mdc-slider .mdc-slider__value-indicator{transition:-webkit-transform 100ms 0ms cubic-bezier(0.4, 0, 1, 1);transition:transform 100ms 0ms cubic-bezier(0.4, 0, 1, 1);transition:transform 100ms 0ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 100ms 0ms cubic-bezier(0.4, 0, 1, 1);align-items:center;border-radius:4px;display:flex;height:32px;padding:0 12px;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:bottom;transform-origin:bottom}.mdc-slider .mdc-slider__value-indicator::before{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid;bottom:-5px;content:"";height:0;left:50%;position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:0}.mdc-slider .mdc-slider__value-indicator::after{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none}.mdc-slider .mdc-slider__thumb--with-indicator .mdc-slider__value-indicator-container{pointer-events:auto}.mdc-slider .mdc-slider__thumb--with-indicator .mdc-slider__value-indicator{transition:-webkit-transform 100ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:transform 100ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:transform 100ms 0ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 100ms 0ms cubic-bezier(0, 0, 0.2, 1);-webkit-transform:scale(1);transform:scale(1)}@media(prefers-reduced-motion){.mdc-slider .mdc-slider__value-indicator,.mdc-slider .mdc-slider__thumb--with-indicator .mdc-slider__value-indicator{transition:none}}.mdc-slider .mdc-slider__value-indicator-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-subtitle2-font-size, 0.875rem);line-height:1.375rem;line-height:var(--mdc-typography-subtitle2-line-height, 1.375rem);font-weight:500;font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:0.0071428571em;letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, 0.0071428571em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle2-text-transform, inherit)}.mdc-slider .mdc-slider__value-indicator{background-color:#000;opacity:.6}.mdc-slider .mdc-slider__value-indicator::before{border-top-color:#000}.mdc-slider .mdc-slider__value-indicator{color:#fff;color:var(--mdc-theme-on-primary, #fff)}.mdc-slider .mdc-slider__thumb{display:flex;height:48px;left:-24px;outline:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:48px}.mdc-slider .mdc-slider__thumb--top{z-index:1}.mdc-slider .mdc-slider__thumb--top .mdc-slider__thumb-knob,.mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb:hover .mdc-slider__thumb-knob,.mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb--focused .mdc-slider__thumb-knob{border-style:solid;border-width:1px;box-sizing:content-box}.mdc-slider .mdc-slider__thumb-knob{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0,0,0,.12);border:10px solid;border-radius:50%;box-sizing:border-box;height:20px;left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:20px}.mdc-slider .mdc-slider__thumb-knob{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee);border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-slider .mdc-slider__thumb--top .mdc-slider__thumb-knob,.mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb:hover .mdc-slider__thumb-knob,.mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb--focused .mdc-slider__thumb-knob{border-color:#fff}.mdc-slider.mdc-slider--disabled .mdc-slider__thumb-knob{background-color:#000;background-color:var(--mdc-theme-on-surface, #000);border-color:#000;border-color:var(--mdc-theme-on-surface, #000)}.mdc-slider.mdc-slider--disabled .mdc-slider__thumb--top .mdc-slider__thumb-knob,.mdc-slider.mdc-slider--disabled .mdc-slider__thumb--top.mdc-slider__thumb:hover .mdc-slider__thumb-knob,.mdc-slider.mdc-slider--disabled .mdc-slider__thumb--top.mdc-slider__thumb--focused .mdc-slider__thumb-knob{border-color:#fff}.mdc-slider .mdc-slider__thumb::before,.mdc-slider .mdc-slider__thumb::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-slider .mdc-slider__thumb:hover::before,.mdc-slider .mdc-slider__thumb.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-slider .mdc-slider__thumb.mdc-ripple-upgraded--background-focused::before,.mdc-slider .mdc-slider__thumb:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-slider .mdc-slider__thumb:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-slider .mdc-slider__thumb:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-slider .mdc-slider__thumb.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-slider .mdc-slider__tick-marks{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:space-between;padding:0 1px;position:absolute;width:100%}.mdc-slider .mdc-slider__tick-mark--active,.mdc-slider .mdc-slider__tick-mark--inactive{border-radius:50%;height:2px;width:2px}.mdc-slider .mdc-slider__tick-mark--active{background-color:#fff;background-color:var(--mdc-theme-on-primary, #fff);opacity:.6}.mdc-slider.mdc-slider--disabled .mdc-slider__tick-mark--active{background-color:#fff;background-color:var(--mdc-theme-on-primary, #fff);opacity:.6}.mdc-slider .mdc-slider__tick-mark--inactive{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee);opacity:.6}.mdc-slider.mdc-slider--disabled .mdc-slider__tick-mark--inactive{background-color:#000;background-color:var(--mdc-theme-on-surface, #000);opacity:.6}.mdc-slider.mdc-slider--disabled{opacity:.38;cursor:auto}.mdc-slider.mdc-slider--disabled .mdc-slider__thumb{pointer-events:none}.mdc-slider--discrete .mdc-slider__thumb,.mdc-slider--discrete .mdc-slider__track--active_fill{transition:-webkit-transform 80ms ease;transition:transform 80ms ease;transition:transform 80ms ease, -webkit-transform 80ms ease}@media(prefers-reduced-motion){.mdc-slider--discrete .mdc-slider__thumb,.mdc-slider--discrete .mdc-slider__track--active_fill{transition:none}}.mdc-slider__input{cursor:pointer;left:0;margin:0;height:100%;opacity:0;pointer-events:none;position:absolute;top:0;width:100%}.mdc-snackbar{z-index:8;margin:8px;display:none;position:fixed;right:0;bottom:0;left:0;align-items:center;justify-content:center;box-sizing:border-box;pointer-events:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-snackbar__surface{background-color:#333333}.mdc-snackbar__label{color:rgba(255, 255, 255, 0.87)}.mdc-snackbar__surface{min-width:344px}@media(max-width: 480px),(max-width: 344px){.mdc-snackbar__surface{min-width:100%}}.mdc-snackbar__surface{max-width:672px}.mdc-snackbar__surface{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0,0,0,.12)}.mdc-snackbar__surface{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-snackbar--opening,.mdc-snackbar--open,.mdc-snackbar--closing{display:flex}.mdc-snackbar--open .mdc-snackbar__label,.mdc-snackbar--open .mdc-snackbar__actions{visibility:visible}.mdc-snackbar--leading{justify-content:flex-start}.mdc-snackbar--stacked .mdc-snackbar__label{padding-left:16px;padding-right:8px;padding-bottom:12px}[dir=rtl] .mdc-snackbar--stacked .mdc-snackbar__label,.mdc-snackbar--stacked .mdc-snackbar__label[dir=rtl]{padding-left:8px;padding-right:16px}.mdc-snackbar--stacked .mdc-snackbar__surface{flex-direction:column;align-items:flex-start}.mdc-snackbar--stacked .mdc-snackbar__actions{align-self:flex-end;margin-bottom:8px}.mdc-snackbar__surface{padding-left:0;padding-right:8px;display:flex;align-items:center;justify-content:flex-start;box-sizing:border-box;-webkit-transform:scale(0.8);transform:scale(0.8);opacity:0}.mdc-snackbar__surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none}[dir=rtl] .mdc-snackbar__surface,.mdc-snackbar__surface[dir=rtl]{padding-left:8px;padding-right:0}.mdc-snackbar--open .mdc-snackbar__surface{-webkit-transform:scale(1);transform:scale(1);opacity:1;pointer-events:auto;transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-snackbar--closing .mdc-snackbar__surface{-webkit-transform:scale(1);transform:scale(1);transition:opacity 75ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-snackbar__label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);padding-left:16px;padding-right:8px;width:100%;flex-grow:1;box-sizing:border-box;margin:0;visibility:hidden;padding-top:14px;padding-bottom:14px}[dir=rtl] .mdc-snackbar__label,.mdc-snackbar__label[dir=rtl]{padding-left:8px;padding-right:16px}.mdc-snackbar__label::before{display:inline;content:attr(data-mdc-snackbar-label-text)}.mdc-snackbar__actions{display:flex;flex-shrink:0;align-items:center;box-sizing:border-box;visibility:hidden}.mdc-snackbar__action:not(:disabled){color:#bb86fc}.mdc-snackbar__action::before,.mdc-snackbar__action::after{background-color:#bb86fc;background-color:var(--mdc-ripple-color, #bb86fc)}.mdc-snackbar__action:hover::before,.mdc-snackbar__action.mdc-ripple-surface--hover::before{opacity:0.08;opacity:var(--mdc-ripple-hover-opacity, 0.08)}.mdc-snackbar__action.mdc-ripple-upgraded--background-focused::before,.mdc-snackbar__action:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-snackbar__action:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-snackbar__action:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-snackbar__action.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-snackbar__dismiss{color:rgba(255, 255, 255, 0.87)}.mdc-snackbar__dismiss .mdc-icon-button__ripple::before,.mdc-snackbar__dismiss .mdc-icon-button__ripple::after{background-color:rgba(255, 255, 255, 0.87);background-color:var(--mdc-ripple-color, rgba(255, 255, 255, 0.87))}.mdc-snackbar__dismiss:hover .mdc-icon-button__ripple::before,.mdc-snackbar__dismiss.mdc-ripple-surface--hover .mdc-icon-button__ripple::before{opacity:0.08;opacity:var(--mdc-ripple-hover-opacity, 0.08)}.mdc-snackbar__dismiss.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple::before,.mdc-snackbar__dismiss:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-snackbar__dismiss:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple::after{transition:opacity 150ms linear}.mdc-snackbar__dismiss:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-snackbar__dismiss.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-snackbar__dismiss.mdc-snackbar__dismiss{width:36px;height:36px;padding:6px;font-size:18px}.mdc-snackbar__action+.mdc-snackbar__dismiss{margin-left:8px;margin-right:0}[dir=rtl] .mdc-snackbar__action+.mdc-snackbar__dismiss,.mdc-snackbar__action+.mdc-snackbar__dismiss[dir=rtl]{margin-left:0;margin-right:8px}.mdc-switch__thumb-underlay{left:-14px;right:initial;top:-17px;width:48px;height:48px}[dir=rtl] .mdc-switch__thumb-underlay,.mdc-switch__thumb-underlay[dir=rtl]{left:initial;right:-14px}.mdc-switch__native-control{width:64px;height:48px}.mdc-switch{display:inline-block;position:relative;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mdc-switch.mdc-switch--checked .mdc-switch__track{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-switch.mdc-switch--checked .mdc-switch__thumb{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786);border-color:#018786;border-color:var(--mdc-theme-secondary, #018786)}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__track{background-color:#000;background-color:var(--mdc-theme-on-surface, #000)}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb{background-color:#fff;background-color:var(--mdc-theme-surface, #fff);border-color:#fff;border-color:var(--mdc-theme-surface, #fff)}.mdc-switch__native-control{left:0;right:initial;position:absolute;top:0;margin:0;opacity:0;cursor:pointer;pointer-events:auto;transition:-webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 90ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1)}[dir=rtl] .mdc-switch__native-control,.mdc-switch__native-control[dir=rtl]{left:initial;right:0}.mdc-switch__track{box-sizing:border-box;width:36px;height:14px;border:1px solid transparent;border-radius:7px;opacity:.38;transition:opacity 90ms cubic-bezier(0.4, 0, 0.2, 1),background-color 90ms cubic-bezier(0.4, 0, 0.2, 1),border-color 90ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-switch__thumb-underlay{display:flex;position:absolute;align-items:center;justify-content:center;-webkit-transform:translateX(0);transform:translateX(0);transition:background-color 90ms cubic-bezier(0.4, 0, 0.2, 1),border-color 90ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 90ms cubic-bezier(0.4, 0, 0.2, 1),background-color 90ms cubic-bezier(0.4, 0, 0.2, 1),border-color 90ms cubic-bezier(0.4, 0, 0.2, 1);transition:transform 90ms cubic-bezier(0.4, 0, 0.2, 1),background-color 90ms cubic-bezier(0.4, 0, 0.2, 1),border-color 90ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-switch__thumb{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,.12);box-sizing:border-box;width:20px;height:20px;border:10px solid;border-radius:50%;pointer-events:none;z-index:1}.mdc-switch--checked .mdc-switch__track{opacity:.54}.mdc-switch--checked .mdc-switch__thumb-underlay{-webkit-transform:translateX(16px);transform:translateX(16px)}[dir=rtl] .mdc-switch--checked .mdc-switch__thumb-underlay,.mdc-switch--checked .mdc-switch__thumb-underlay[dir=rtl]{-webkit-transform:translateX(-16px);transform:translateX(-16px)}.mdc-switch--checked .mdc-switch__native-control{-webkit-transform:translateX(-16px);transform:translateX(-16px)}[dir=rtl] .mdc-switch--checked .mdc-switch__native-control,.mdc-switch--checked .mdc-switch__native-control[dir=rtl]{-webkit-transform:translateX(16px);transform:translateX(16px)}.mdc-switch--disabled{opacity:.38;pointer-events:none}.mdc-switch--disabled .mdc-switch__thumb{border-width:1px}.mdc-switch--disabled .mdc-switch__native-control{cursor:default;pointer-events:none}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay::before,.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay::after{background-color:#9e9e9e;background-color:var(--mdc-ripple-color, #9e9e9e)}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay:hover::before,.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay.mdc-ripple-surface--hover::before{opacity:0.08;opacity:var(--mdc-ripple-hover-opacity, 0.08)}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay.mdc-ripple-upgraded--background-focused::before,.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb-underlay.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-switch__thumb-underlay{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-switch__thumb-underlay::before,.mdc-switch__thumb-underlay::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-switch__thumb-underlay::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-switch__thumb-underlay::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-switch__thumb-underlay.mdc-ripple-upgraded::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-switch__thumb-underlay.mdc-ripple-upgraded::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-switch__thumb-underlay.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-switch__thumb-underlay.mdc-ripple-upgraded--foreground-activation::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-switch__thumb-underlay.mdc-ripple-upgraded--foreground-deactivation::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-switch__thumb-underlay::before,.mdc-switch__thumb-underlay::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-switch__thumb-underlay.mdc-ripple-upgraded::before,.mdc-switch__thumb-underlay.mdc-ripple-upgraded::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-switch__thumb-underlay.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-switch__thumb-underlay::before,.mdc-switch__thumb-underlay::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-switch__thumb-underlay:hover::before,.mdc-switch__thumb-underlay.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-switch__thumb-underlay.mdc-ripple-upgraded--background-focused::before,.mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-switch__thumb-underlay:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-switch__thumb-underlay.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-tab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height, 2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:0.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase);position:relative}.mdc-tab .mdc-tab__text-label{color:rgba(0, 0, 0, 0.6)}.mdc-tab .mdc-tab__icon{color:rgba(0, 0, 0, 0.54);fill:currentColor}.mdc-tab__content{position:relative}.mdc-tab__icon{width:24px;height:24px;font-size:24px}.mdc-tab--active .mdc-tab__text-label{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-tab--active .mdc-tab__icon{color:#6200ee;color:var(--mdc-theme-primary, #6200ee);fill:currentColor}.mdc-tab{background:none}.mdc-tab{min-width:90px;padding-right:24px;padding-left:24px;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;margin:0;padding-top:0;padding-bottom:0;border:none;outline:none;text-align:center;white-space:nowrap;cursor:pointer;-webkit-appearance:none;z-index:1}.mdc-tab::-moz-focus-inner{padding:0;border:0}.mdc-tab--min-width{flex:0 1 auto}.mdc-tab__content{display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{transition:150ms color linear;display:inline-block;line-height:1;z-index:2}.mdc-tab__icon{transition:150ms color linear;z-index:2}.mdc-tab--stacked .mdc-tab__content{flex-direction:column;align-items:center;justify-content:center}.mdc-tab--stacked .mdc-tab__text-label{padding-top:6px;padding-bottom:4px}.mdc-tab--active .mdc-tab__text-label,.mdc-tab--active .mdc-tab__icon{transition-delay:100ms}.mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon+.mdc-tab__text-label{padding-left:8px;padding-right:0}[dir=rtl] .mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon+.mdc-tab__text-label,.mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon+.mdc-tab__text-label[dir=rtl]{padding-left:0;padding-right:8px}.mdc-tab{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mdc-tab .mdc-tab__ripple::before,.mdc-tab .mdc-tab__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-tab .mdc-tab__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-tab .mdc-tab__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-tab.mdc-ripple-upgraded .mdc-tab__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-tab.mdc-ripple-upgraded .mdc-tab__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-tab.mdc-ripple-upgraded--unbounded .mdc-tab__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-tab.mdc-ripple-upgraded--foreground-activation .mdc-tab__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-tab.mdc-ripple-upgraded--foreground-deactivation .mdc-tab__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-tab .mdc-tab__ripple::before,.mdc-tab .mdc-tab__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-tab.mdc-ripple-upgraded .mdc-tab__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-tab .mdc-tab__ripple::before,.mdc-tab .mdc-tab__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-tab:hover .mdc-tab__ripple::before,.mdc-tab.mdc-ripple-surface--hover .mdc-tab__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-tab.mdc-ripple-upgraded--background-focused .mdc-tab__ripple::before,.mdc-tab:not(.mdc-ripple-upgraded):focus .mdc-tab__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-tab:not(.mdc-ripple-upgraded) .mdc-tab__ripple::after{transition:opacity 150ms linear}.mdc-tab:not(.mdc-ripple-upgraded):active .mdc-tab__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-tab.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-tab__ripple{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;will-change:transform,opacity}.mdc-tab-bar{width:100%}.mdc-tab{height:48px}.mdc-tab--stacked{height:72px}.mdc-tab-indicator .mdc-tab-indicator__content--underline{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-tab-indicator .mdc-tab-indicator__content--icon{color:#018786;color:var(--mdc-theme-secondary, #018786)}.mdc-tab-indicator .mdc-tab-indicator__content--underline{border-top-width:2px}.mdc-tab-indicator .mdc-tab-indicator__content--icon{height:34px;font-size:34px}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator__content{-webkit-transform-origin:left;transform-origin:left;opacity:0}.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator__content--icon{align-self:center;margin:0 auto}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}.mdc-tab-indicator .mdc-tab-indicator__content{transition:250ms -webkit-transform cubic-bezier(0.4, 0, 0.2, 1);transition:250ms transform cubic-bezier(0.4, 0, 0.2, 1);transition:250ms transform cubic-bezier(0.4, 0, 0.2, 1), 250ms -webkit-transform cubic-bezier(0.4, 0, 0.2, 1)}.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mdc-tab-indicator--fade .mdc-tab-indicator__content{transition:150ms opacity linear}.mdc-tab-indicator--active.mdc-tab-indicator--fade .mdc-tab-indicator__content{transition-delay:100ms}.mdc-tab-scroller{overflow-y:hidden}.mdc-tab-scroller.mdc-tab-scroller--animating .mdc-tab-scroller__scroll-content{transition:250ms -webkit-transform cubic-bezier(0.4, 0, 0.2, 1);transition:250ms transform cubic-bezier(0.4, 0, 0.2, 1);transition:250ms transform cubic-bezier(0.4, 0, 0.2, 1), 250ms -webkit-transform cubic-bezier(0.4, 0, 0.2, 1)}.mdc-tab-scroller__test{position:absolute;top:-9999px;width:100px;height:100px;overflow-x:scroll}.mdc-tab-scroller__scroll-area{-webkit-overflow-scrolling:touch;display:flex;overflow-x:hidden}.mdc-tab-scroller__scroll-area::-webkit-scrollbar,.mdc-tab-scroller__test::-webkit-scrollbar{display:none}.mdc-tab-scroller__scroll-area--scroll{overflow-x:scroll}.mdc-tab-scroller__scroll-content{position:relative;display:flex;flex:1 0 auto;-webkit-transform:none;transform:none;will-change:transform}.mdc-tab-scroller--align-start .mdc-tab-scroller__scroll-content{justify-content:flex-start}.mdc-tab-scroller--align-end .mdc-tab-scroller__scroll-content{justify-content:flex-end}.mdc-tab-scroller--align-center .mdc-tab-scroller__scroll-content{justify-content:center}.mdc-tab-scroller--animating .mdc-tab-scroller__scroll-area{-webkit-overflow-scrolling:auto}.mdc-text-field--filled{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-text-field--filled .mdc-text-field__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-text-field--filled .mdc-text-field__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-text-field--filled.mdc-ripple-upgraded--unbounded .mdc-text-field__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-text-field--filled.mdc-ripple-upgraded--foreground-activation .mdc-text-field__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-text-field--filled.mdc-ripple-upgraded--foreground-deactivation .mdc-text-field__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-text-field__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-text-field{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:0;border-bottom-left-radius:0;display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-floating-label{color:rgba(0, 0, 0, 0.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input{color:rgba(0, 0, 0, 0.87)}@media all{.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:rgba(0, 0, 0, 0.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:rgba(0, 0, 0, 0.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::-ms-input-placeholder{color:rgba(0, 0, 0, 0.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:rgba(0, 0, 0, 0.54)}}@media all{.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:rgba(0, 0, 0, 0.54)}}.mdc-text-field .mdc-text-field__input{caret-color:#6200ee;caret-color:var(--mdc-theme-primary, #6200ee)}.mdc-text-field:not(.mdc-text-field--disabled)+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:rgba(0, 0, 0, 0.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field-character-counter,.mdc-text-field:not(.mdc-text-field--disabled)+.mdc-text-field-helper-line .mdc-text-field-character-counter{color:rgba(0, 0, 0, 0.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--leading{color:rgba(0, 0, 0, 0.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing{color:rgba(0, 0, 0, 0.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--prefix{color:rgba(0, 0, 0, 0.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--suffix{color:rgba(0, 0, 0, 0.6)}.mdc-text-field .mdc-floating-label{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);pointer-events:none}.mdc-text-field__input{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);height:28px;transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);width:100%;min-width:0;border:none;border-radius:0;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input::-webkit-calendar-picker-indicator{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}@media all{.mdc-text-field__input::-webkit-input-placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}.mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}.mdc-text-field__input::-ms-input-placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}.mdc-text-field__input::placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}}@media all{.mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}}@media all{.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}}@media all{.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}}.mdc-text-field__affix{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);height:28px;transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0;white-space:nowrap}.mdc-text-field--label-floating .mdc-text-field__affix,.mdc-text-field--no-label .mdc-text-field__affix{opacity:1}@supports(-webkit-hyphens: none){.mdc-text-field--outlined .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field__affix--prefix,.mdc-text-field__affix--prefix[dir=rtl]{padding-left:2px;padding-right:0}.mdc-text-field--end-aligned .mdc-text-field__affix--prefix{padding-left:0;padding-right:12px}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--end-aligned .mdc-text-field__affix--prefix[dir=rtl]{padding-left:12px;padding-right:0}.mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field__affix--suffix,.mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:12px}.mdc-text-field--end-aligned .mdc-text-field__affix--suffix{padding-left:2px;padding-right:0}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--end-aligned .mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:2px}.mdc-text-field--filled{height:56px}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{background-color:rgba(0, 0, 0, 0.87);background-color:var(--mdc-ripple-color, rgba(0, 0, 0, 0.87))}.mdc-text-field--filled:hover .mdc-text-field__ripple::before,.mdc-text-field--filled.mdc-ripple-surface--hover .mdc-text-field__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-text-field--filled.mdc-ripple-upgraded--background-focused .mdc-text-field__ripple::before,.mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-text-field--filled::before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:whitesmoke}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.42)}.mdc-text-field--filled:not(.mdc-text-field--disabled):hover .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.87)}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-color:#6200ee;border-bottom-color:var(--mdc-theme-primary, #6200ee)}.mdc-text-field--filled .mdc-floating-label{left:16px;right:initial}[dir=rtl] .mdc-text-field--filled .mdc-floating-label,.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:16px}.mdc-text-field--filled .mdc-floating-label--float-above{-webkit-transform:translateY(-106%) scale(0.75);transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled.mdc-text-field--no-label::before{display:none}@supports(-webkit-hyphens: none){.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field--outlined{height:56px;overflow:visible}.mdc-text-field--outlined .mdc-floating-label--float-above{-webkit-transform:translateY(-37.25px) scale(1);transform:translateY(-37.25px) scale(1)}.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-34.75px) scale(0.75);transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined 250ms 1;animation:mdc-floating-label-shake-float-above-text-field-outlined 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-text-field-outlined{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}}.mdc-text-field--outlined .mdc-text-field__input{height:100%}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:rgba(0, 0, 0, 0.38)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:rgba(0, 0, 0, 0.87)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px, var(--mdc-shape-small, 4px)) * 2)}}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}@supports(top: max(0%)){.mdc-text-field--outlined{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined{padding-right:max(16px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-right:max(16px, var(--mdc-shape-small, 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-left:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-right:max(16px, var(--mdc-shape-small, 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-right:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:max(16px, var(--mdc-shape-small, 4px))}}.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-right:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-right:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--outlined .mdc-text-field__ripple::before,.mdc-text-field--outlined .mdc-text-field__ripple::after{content:none}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:initial}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:4px}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:transparent}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mdc-text-field--textarea{flex-direction:column;align-items:center;width:auto;height:auto;padding:0;transition:none}.mdc-text-field--textarea .mdc-floating-label{top:19px}.mdc-text-field--textarea .mdc-floating-label:not(.mdc-floating-label--float-above){-webkit-transform:none;transform:none}.mdc-text-field--textarea .mdc-text-field__input{flex-grow:1;height:auto;min-height:1.5rem;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;resize:none;padding:0 16px;line-height:1.5rem}.mdc-text-field--textarea.mdc-text-field--filled::before{display:none}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--float-above{-webkit-transform:translateY(-10.25px) scale(0.75);transform:translateY(-10.25px) scale(0.75)}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-textarea-filled 250ms 1;animation:mdc-floating-label-shake-float-above-textarea-filled 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-textarea-filled{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-textarea-filled{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75)}}.mdc-text-field--textarea.mdc-text-field--filled .mdc-text-field__input{margin-top:23px;margin-bottom:9px}.mdc-text-field--textarea.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{-webkit-transform:translateY(-27.25px) scale(1);transform:translateY(-27.25px) scale(1)}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-24.75px) scale(0.75);transform:translateY(-24.75px) scale(0.75)}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-textarea-outlined 250ms 1;animation:mdc-floating-label-shake-float-above-textarea-outlined 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-textarea-outlined{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-textarea-outlined{0%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75);transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label{top:18px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field__input{margin-bottom:2px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter{align-self:flex-end;padding:0 16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::after{display:inline-block;width:0;height:16px;content:"";vertical-align:-16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::before{display:none}.mdc-text-field__resizer{align-self:stretch;display:inline-flex;flex-direction:column;flex-grow:1;max-height:100%;max-width:100%;min-height:56px;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;min-width:-moz-available;min-width:-webkit-fill-available;overflow:hidden;resize:both}.mdc-text-field--filled .mdc-text-field__resizer{-webkit-transform:translateY(-1px);transform:translateY(-1px)}.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field-character-counter{-webkit-transform:translateY(1px);transform:translateY(1px)}.mdc-text-field--outlined .mdc-text-field__resizer{-webkit-transform:translateX(-1px) translateY(-1px);transform:translateX(-1px) translateY(-1px)}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer,.mdc-text-field--outlined .mdc-text-field__resizer[dir=rtl]{-webkit-transform:translateX(1px) translateY(-1px);transform:translateX(1px) translateY(-1px)}.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter{-webkit-transform:translateX(1px) translateY(1px);transform:translateX(1px) translateY(1px)}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input[dir=rtl],.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter[dir=rtl]{-webkit-transform:translateX(-1px) translateY(1px);transform:translateX(-1px) translateY(1px)}.mdc-text-field--with-leading-icon{padding-left:0;padding-right:16px}[dir=rtl] .mdc-text-field--with-leading-icon,.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:16px;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 48px);left:48px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:48px}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label{left:36px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:36px}.mdc-text-field--with-leading-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{-webkit-transform:translateY(-37.25px) translateX(-32px) scale(1);transform:translateY(-37.25px) translateX(-32px) scale(1)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above[dir=rtl]{-webkit-transform:translateY(-37.25px) translateX(32px) scale(1);transform:translateY(-37.25px) translateX(32px) scale(1)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{-webkit-transform:translateY(-34.75px) translateX(-32px) scale(0.75);transform:translateY(-34.75px) translateX(-32px) scale(0.75)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl]{-webkit-transform:translateY(-34.75px) translateX(32px) scale(0.75);transform:translateY(-34.75px) translateX(32px) scale(0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1;animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon{0%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon{0%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake,.mdc-text-field--with-leading-icon.mdc-text-field--outlined[dir=rtl] .mdc-floating-label--shake{-webkit-animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1;animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@-webkit-keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl{0%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl{0%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}33%{-webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);-webkit-transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75)}66%{-webkit-animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);-webkit-transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75)}100%{-webkit-transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75);transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}}.mdc-text-field--with-trailing-icon{padding-left:16px;padding-right:0}[dir=rtl] .mdc-text-field--with-trailing-icon,.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0;padding-right:16px}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 64px)}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-trailing-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 96px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 96px / 0.75)}.mdc-text-field-helper-line{display:flex;justify-content:space-between;box-sizing:border-box}.mdc-text-field+.mdc-text-field-helper-line{padding-right:16px;padding-left:16px}.mdc-form-field>.mdc-text-field+label{align-self:flex-start}.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:rgba(98, 0, 238, 0.87)}.mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--focused .mdc-notched-outline__trailing{border-width:2px}.mdc-text-field--focused+.mdc-text-field-helper-line .mdc-text-field-helper-text:not(.mdc-text-field-helper-text--validation-msg){opacity:1}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-text-field--focused.mdc-text-field--outlined.mdc-text-field--textarea .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-line-ripple::before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid .mdc-text-field__input{caret-color:#b00020;caret-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{opacity:1}.mdc-text-field--disabled{pointer-events:none}.mdc-text-field--disabled .mdc-text-field__input{color:rgba(0, 0, 0, 0.38)}@media all{.mdc-text-field--disabled .mdc-text-field__input::-webkit-input-placeholder{color:rgba(0, 0, 0, 0.38)}.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:rgba(0, 0, 0, 0.38)}.mdc-text-field--disabled .mdc-text-field__input::-ms-input-placeholder{color:rgba(0, 0, 0, 0.38)}.mdc-text-field--disabled .mdc-text-field__input::placeholder{color:rgba(0, 0, 0, 0.38)}}@media all{.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:rgba(0, 0, 0, 0.38)}}.mdc-text-field--disabled .mdc-floating-label{color:rgba(0, 0, 0, 0.38)}.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:rgba(0, 0, 0, 0.38)}.mdc-text-field--disabled .mdc-text-field-character-counter,.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-character-counter{color:rgba(0, 0, 0, 0.38)}.mdc-text-field--disabled .mdc-text-field__icon--leading{color:rgba(0, 0, 0, 0.3)}.mdc-text-field--disabled .mdc-text-field__icon--trailing{color:rgba(0, 0, 0, 0.3)}.mdc-text-field--disabled .mdc-text-field__affix--prefix{color:rgba(0, 0, 0, 0.38)}.mdc-text-field--disabled .mdc-text-field__affix--suffix{color:rgba(0, 0, 0, 0.38)}.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.06)}.mdc-text-field--disabled .mdc-notched-outline__leading,.mdc-text-field--disabled .mdc-notched-outline__notch,.mdc-text-field--disabled .mdc-notched-outline__trailing{border-color:rgba(0, 0, 0, 0.06)}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__input::-webkit-input-placeholder{color:GrayText}.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:GrayText}.mdc-text-field--disabled .mdc-text-field__input::-ms-input-placeholder{color:GrayText}.mdc-text-field--disabled .mdc-text-field__input::placeholder{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-floating-label{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field-character-counter,.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-character-counter{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__icon--leading{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__icon--trailing{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__affix--prefix{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__affix--suffix{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-notched-outline__leading,.mdc-text-field--disabled .mdc-notched-outline__notch,.mdc-text-field--disabled .mdc-notched-outline__trailing{border-color:GrayText}}@media screen and (forced-colors: active){.mdc-text-field--disabled .mdc-text-field__input{background-color:Window}.mdc-text-field--disabled .mdc-floating-label{z-index:1}}.mdc-text-field--disabled .mdc-floating-label{cursor:default}.mdc-text-field--disabled.mdc-text-field--filled{background-color:#fafafa}.mdc-text-field--disabled.mdc-text-field--filled .mdc-text-field__ripple{display:none}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--end-aligned .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--end-aligned .mdc-text-field__input[dir=rtl]{text-align:left}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix{direction:ltr}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--leading,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--leading{order:1}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{order:2}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input{order:3}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{order:4}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--trailing,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--trailing{order:5}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--prefix{padding-right:12px}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--suffix{padding-left:2px}.mdc-text-field-helper-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:0.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit);display:block;margin-top:0;line-height:normal;margin:0;opacity:0;will-change:opacity;transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-text-field-helper-text::before{display:inline-block;width:0;height:16px;content:"";vertical-align:0}.mdc-text-field-helper-text--persistent{transition:none;opacity:1;will-change:initial}.mdc-text-field-character-counter{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:0.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit);display:block;margin-top:0;line-height:normal;margin-left:auto;margin-right:0;padding-left:16px;padding-right:0;white-space:nowrap}.mdc-text-field-character-counter::before{display:inline-block;width:0;height:16px;content:"";vertical-align:0}[dir=rtl] .mdc-text-field-character-counter,.mdc-text-field-character-counter[dir=rtl]{margin-left:0;margin-right:auto}[dir=rtl] .mdc-text-field-character-counter,.mdc-text-field-character-counter[dir=rtl]{padding-left:0;padding-right:16px}.mdc-text-field__icon{align-self:center;cursor:pointer}.mdc-text-field__icon:not([tabindex]),.mdc-text-field__icon[tabindex="-1"]{cursor:default;pointer-events:none}.mdc-text-field__icon svg{display:block}.mdc-text-field__icon--leading{margin-left:16px;margin-right:8px}[dir=rtl] .mdc-text-field__icon--leading,.mdc-text-field__icon--leading[dir=rtl]{margin-left:8px;margin-right:16px}.mdc-text-field__icon--trailing{padding:12px;margin-left:0px;margin-right:0px}[dir=rtl] .mdc-text-field__icon--trailing,.mdc-text-field__icon--trailing[dir=rtl]{margin-left:0px;margin-right:0px}:root{--mdc-theme-primary:#6200ee;--mdc-theme-secondary:#018786;--mdc-theme-background:#fff;--mdc-theme-surface:#fff;--mdc-theme-error:#b00020;--mdc-theme-on-primary:#fff;--mdc-theme-on-secondary:#fff;--mdc-theme-on-surface:#000;--mdc-theme-on-error:#fff;--mdc-theme-text-primary-on-background:rgba(0, 0, 0, 0.87);--mdc-theme-text-secondary-on-background:rgba(0, 0, 0, 0.54);--mdc-theme-text-hint-on-background:rgba(0, 0, 0, 0.38);--mdc-theme-text-disabled-on-background:rgba(0, 0, 0, 0.38);--mdc-theme-text-icon-on-background:rgba(0, 0, 0, 0.38);--mdc-theme-text-primary-on-light:rgba(0, 0, 0, 0.87);--mdc-theme-text-secondary-on-light:rgba(0, 0, 0, 0.54);--mdc-theme-text-hint-on-light:rgba(0, 0, 0, 0.38);--mdc-theme-text-disabled-on-light:rgba(0, 0, 0, 0.38);--mdc-theme-text-icon-on-light:rgba(0, 0, 0, 0.38);--mdc-theme-text-primary-on-dark:white;--mdc-theme-text-secondary-on-dark:rgba(255, 255, 255, 0.7);--mdc-theme-text-hint-on-dark:rgba(255, 255, 255, 0.5);--mdc-theme-text-disabled-on-dark:rgba(255, 255, 255, 0.5);--mdc-theme-text-icon-on-dark:rgba(255, 255, 255, 0.5)}.mdc-theme--primary{color:#6200ee !important;color:var(--mdc-theme-primary, #6200ee) !important}.mdc-theme--secondary{color:#018786 !important;color:var(--mdc-theme-secondary, #018786) !important}.mdc-theme--background{background-color:#fff;background-color:var(--mdc-theme-background, #fff)}.mdc-theme--surface{background-color:#fff;background-color:var(--mdc-theme-surface, #fff)}.mdc-theme--error{color:#b00020 !important;color:var(--mdc-theme-error, #b00020) !important}.mdc-theme--on-primary{color:#fff !important;color:var(--mdc-theme-on-primary, #fff) !important}.mdc-theme--on-secondary{color:#fff !important;color:var(--mdc-theme-on-secondary, #fff) !important}.mdc-theme--on-surface{color:#000 !important;color:var(--mdc-theme-on-surface, #000) !important}.mdc-theme--on-error{color:#fff !important;color:var(--mdc-theme-on-error, #fff) !important}.mdc-theme--text-primary-on-background{color:rgba(0, 0, 0, 0.87) !important;color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87)) !important}.mdc-theme--text-secondary-on-background{color:rgba(0, 0, 0, 0.54) !important;color:var(--mdc-theme-text-secondary-on-background, rgba(0, 0, 0, 0.54)) !important}.mdc-theme--text-hint-on-background{color:rgba(0, 0, 0, 0.38) !important;color:var(--mdc-theme-text-hint-on-background, rgba(0, 0, 0, 0.38)) !important}.mdc-theme--text-disabled-on-background{color:rgba(0, 0, 0, 0.38) !important;color:var(--mdc-theme-text-disabled-on-background, rgba(0, 0, 0, 0.38)) !important}.mdc-theme--text-icon-on-background{color:rgba(0, 0, 0, 0.38) !important;color:var(--mdc-theme-text-icon-on-background, rgba(0, 0, 0, 0.38)) !important}.mdc-theme--text-primary-on-light{color:rgba(0, 0, 0, 0.87) !important;color:var(--mdc-theme-text-primary-on-light, rgba(0, 0, 0, 0.87)) !important}.mdc-theme--text-secondary-on-light{color:rgba(0, 0, 0, 0.54) !important;color:var(--mdc-theme-text-secondary-on-light, rgba(0, 0, 0, 0.54)) !important}.mdc-theme--text-hint-on-light{color:rgba(0, 0, 0, 0.38) !important;color:var(--mdc-theme-text-hint-on-light, rgba(0, 0, 0, 0.38)) !important}.mdc-theme--text-disabled-on-light{color:rgba(0, 0, 0, 0.38) !important;color:var(--mdc-theme-text-disabled-on-light, rgba(0, 0, 0, 0.38)) !important}.mdc-theme--text-icon-on-light{color:rgba(0, 0, 0, 0.38) !important;color:var(--mdc-theme-text-icon-on-light, rgba(0, 0, 0, 0.38)) !important}.mdc-theme--text-primary-on-dark{color:white !important;color:var(--mdc-theme-text-primary-on-dark, white) !important}.mdc-theme--text-secondary-on-dark{color:rgba(255, 255, 255, 0.7) !important;color:var(--mdc-theme-text-secondary-on-dark, rgba(255, 255, 255, 0.7)) !important}.mdc-theme--text-hint-on-dark{color:rgba(255, 255, 255, 0.5) !important;color:var(--mdc-theme-text-hint-on-dark, rgba(255, 255, 255, 0.5)) !important}.mdc-theme--text-disabled-on-dark{color:rgba(255, 255, 255, 0.5) !important;color:var(--mdc-theme-text-disabled-on-dark, rgba(255, 255, 255, 0.5)) !important}.mdc-theme--text-icon-on-dark{color:rgba(255, 255, 255, 0.5) !important;color:var(--mdc-theme-text-icon-on-dark, rgba(255, 255, 255, 0.5)) !important}.mdc-theme--primary-bg{background-color:#6200ee !important;background-color:var(--mdc-theme-primary, #6200ee) !important}.mdc-theme--secondary-bg{background-color:#018786 !important;background-color:var(--mdc-theme-secondary, #018786) !important}.mdc-tooltip__surface{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-tooltip__caret-surface-top,.mdc-tooltip__caret-surface-bottom{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-tooltip__surface{color:white;color:var(--mdc-theme-text-primary-on-dark, white)}.mdc-tooltip__surface{background-color:rgba(0, 0, 0, 0.6)}.mdc-tooltip__surface{word-break:break-all;word-break:var(--mdc-tooltip-word-break, normal);overflow-wrap:anywhere}.mdc-tooltip{z-index:9}.mdc-tooltip--showing-transition .mdc-tooltip__surface-animation{transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 150ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1),-webkit-transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-tooltip--hide-transition .mdc-tooltip__surface-animation{transition:opacity 75ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-tooltip__title{color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-light, rgba(0, 0, 0, 0.87))}.mdc-tooltip__content{color:rgba(0, 0, 0, 0.6)}.mdc-tooltip__content-link{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-tooltip{position:fixed;display:none}.mdc-tooltip.mdc-tooltip--rich .mdc-tooltip__surface{background-color:#fff}.mdc-tooltip.mdc-tooltip--rich .mdc-tooltip__caret-surface-top,.mdc-tooltip.mdc-tooltip--rich .mdc-tooltip__caret-surface-bottom{background-color:#fff}.mdc-tooltip-wrapper--rich{position:relative}.mdc-tooltip--shown,.mdc-tooltip--showing,.mdc-tooltip--hide{display:inline-flex}.mdc-tooltip--shown.mdc-tooltip--rich,.mdc-tooltip--showing.mdc-tooltip--rich,.mdc-tooltip--hide.mdc-tooltip--rich{display:inline-block;left:-320px;position:absolute}.mdc-tooltip__surface{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:0.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit);line-height:16px;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center}.mdc-tooltip__surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:"";pointer-events:none}.mdc-tooltip--rich .mdc-tooltip__surface{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,.12);align-items:flex-start;border-radius:4px;display:flex;flex-direction:column;line-height:20px;min-height:24px;min-width:40px;max-width:320px;position:relative}.mdc-tooltip--rich .mdc-tooltip__surface .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-tooltip--multiline .mdc-tooltip__surface{text-align:left}[dir=rtl] .mdc-tooltip--multiline .mdc-tooltip__surface,.mdc-tooltip--multiline .mdc-tooltip__surface[dir=rtl]{text-align:right}.mdc-tooltip__surface .mdc-tooltip__title{display:block;margin-top:0;line-height:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-subtitle2-font-size, 0.875rem);font-weight:500;font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:0.0071428571em;letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, 0.0071428571em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle2-text-transform, inherit);margin:0 8px}.mdc-tooltip__surface .mdc-tooltip__title::before{display:inline-block;width:0;height:28px;content:"";vertical-align:0}.mdc-tooltip__surface .mdc-tooltip__content{display:block;margin-top:0;line-height:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);max-width:calc(100% - 2 * 8px);margin:0 8px 16px 8px;text-align:left}.mdc-tooltip__surface .mdc-tooltip__content::before{display:inline-block;width:0;height:24px;content:"";vertical-align:0}[dir=rtl] .mdc-tooltip__surface .mdc-tooltip__content,.mdc-tooltip__surface .mdc-tooltip__content[dir=rtl]{text-align:right}.mdc-tooltip__surface .mdc-tooltip__content-link{text-decoration:none}.mdc-tooltip__surface-animation{opacity:0;-webkit-transform:scale(0.8);transform:scale(0.8);will-change:transform,opacity}.mdc-tooltip--shown .mdc-tooltip__surface-animation{-webkit-transform:scale(1);transform:scale(1);opacity:1}.mdc-tooltip--hide .mdc-tooltip__surface-animation{-webkit-transform:scale(1);transform:scale(1)}.mdc-tooltip__caret-surface-top,.mdc-tooltip__caret-surface-bottom{position:absolute;height:24px;width:24px;-webkit-transform:rotate(35deg) skewY(20deg) scaleX(0.9396926208);transform:rotate(35deg) skewY(20deg) scaleX(0.9396926208)}.mdc-tooltip__caret-surface-top .mdc-elevation-overlay,.mdc-tooltip__caret-surface-bottom .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-tooltip__caret-surface-bottom{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,.12);outline:1px solid transparent;z-index:-1}.mdc-top-app-bar{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee);color:white;display:flex;position:fixed;flex-direction:column;justify-content:space-between;box-sizing:border-box;width:100%;z-index:4}.mdc-top-app-bar .mdc-top-app-bar__action-item,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon{color:#fff;color:var(--mdc-theme-on-primary, #fff)}.mdc-top-app-bar .mdc-top-app-bar__action-item::before,.mdc-top-app-bar .mdc-top-app-bar__action-item::after,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon::after{background-color:#fff;background-color:var(--mdc-ripple-color, var(--mdc-theme-on-primary, #fff))}.mdc-top-app-bar .mdc-top-app-bar__action-item:hover::before,.mdc-top-app-bar .mdc-top-app-bar__action-item.mdc-ripple-surface--hover::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:hover::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon.mdc-ripple-surface--hover::before{opacity:0.08;opacity:var(--mdc-ripple-hover-opacity, 0.08)}.mdc-top-app-bar .mdc-top-app-bar__action-item.mdc-ripple-upgraded--background-focused::before,.mdc-top-app-bar .mdc-top-app-bar__action-item:not(.mdc-ripple-upgraded):focus::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon.mdc-ripple-upgraded--background-focused::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-top-app-bar .mdc-top-app-bar__action-item:not(.mdc-ripple-upgraded)::after,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-top-app-bar .mdc-top-app-bar__action-item:not(.mdc-ripple-upgraded):active::after,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-top-app-bar .mdc-top-app-bar__action-item.mdc-ripple-upgraded,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-top-app-bar__row{display:flex;position:relative;box-sizing:border-box;width:100%;height:64px}.mdc-top-app-bar__section{display:inline-flex;flex:1 1 auto;align-items:center;min-width:0;padding:8px 12px;z-index:1}.mdc-top-app-bar__section--align-start{justify-content:flex-start;order:-1}.mdc-top-app-bar__section--align-end{justify-content:flex-end;order:1}.mdc-top-app-bar__title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1.25rem;font-size:var(--mdc-typography-headline6-font-size, 1.25rem);line-height:2rem;line-height:var(--mdc-typography-headline6-line-height, 2rem);font-weight:500;font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:0.0125em;letter-spacing:var(--mdc-typography-headline6-letter-spacing, 0.0125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline6-text-transform, inherit);padding-left:20px;padding-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;z-index:1}[dir=rtl] .mdc-top-app-bar__title,.mdc-top-app-bar__title[dir=rtl]{padding-left:0;padding-right:20px}.mdc-top-app-bar--short-collapsed{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:24px;border-bottom-left-radius:0}[dir=rtl] .mdc-top-app-bar--short-collapsed,.mdc-top-app-bar--short-collapsed[dir=rtl]{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:24px}.mdc-top-app-bar--short{top:0;right:auto;left:0;width:100%;transition:width 250ms cubic-bezier(0.4, 0, 0.2, 1)}[dir=rtl] .mdc-top-app-bar--short,.mdc-top-app-bar--short[dir=rtl]{right:0;left:auto}.mdc-top-app-bar--short .mdc-top-app-bar__row{height:56px}.mdc-top-app-bar--short .mdc-top-app-bar__section{padding:4px}.mdc-top-app-bar--short .mdc-top-app-bar__title{transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1);opacity:1}.mdc-top-app-bar--short-collapsed{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12);width:56px;transition:width 300ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__title{display:none}.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__action-item{transition:padding 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item{width:112px}.mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item .mdc-top-app-bar__section--align-end{padding-left:0;padding-right:12px}[dir=rtl] .mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item .mdc-top-app-bar__section--align-end,.mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item .mdc-top-app-bar__section--align-end[dir=rtl]{padding-left:12px;padding-right:0}.mdc-top-app-bar--dense .mdc-top-app-bar__row{height:48px}.mdc-top-app-bar--dense .mdc-top-app-bar__section{padding:0 4px}.mdc-top-app-bar--dense .mdc-top-app-bar__title{padding-left:12px;padding-right:0}[dir=rtl] .mdc-top-app-bar--dense .mdc-top-app-bar__title,.mdc-top-app-bar--dense .mdc-top-app-bar__title[dir=rtl]{padding-left:0;padding-right:12px}.mdc-top-app-bar--prominent .mdc-top-app-bar__row{height:128px}.mdc-top-app-bar--prominent .mdc-top-app-bar__title{align-self:flex-end;padding-bottom:2px}.mdc-top-app-bar--prominent .mdc-top-app-bar__action-item,.mdc-top-app-bar--prominent .mdc-top-app-bar__navigation-icon{align-self:flex-start}.mdc-top-app-bar--fixed{transition:box-shadow 200ms linear}.mdc-top-app-bar--fixed-scrolled{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12);transition:box-shadow 200ms linear}.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__row{height:96px}.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__section{padding:0 12px}.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__title{padding-left:20px;padding-right:0;padding-bottom:9px}[dir=rtl] .mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__title,.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__title[dir=rtl]{padding-left:0;padding-right:20px}.mdc-top-app-bar--fixed-adjust{padding-top:64px}.mdc-top-app-bar--dense-fixed-adjust{padding-top:48px}.mdc-top-app-bar--short-fixed-adjust{padding-top:56px}.mdc-top-app-bar--prominent-fixed-adjust{padding-top:128px}.mdc-top-app-bar--dense-prominent-fixed-adjust{padding-top:96px}@media(max-width: 599px){.mdc-top-app-bar__row{height:56px}.mdc-top-app-bar__section{padding:4px}.mdc-top-app-bar--short{transition:width 200ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-top-app-bar--short-collapsed{transition:width 250ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__section--align-end{padding-left:0;padding-right:12px}[dir=rtl] .mdc-top-app-bar--short-collapsed .mdc-top-app-bar__section--align-end,.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__section--align-end[dir=rtl]{padding-left:12px;padding-right:0}.mdc-top-app-bar--prominent .mdc-top-app-bar__title{padding-bottom:6px}.mdc-top-app-bar--fixed-adjust{padding-top:56px}}.mdc-typography{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-font-family, Roboto, sans-serif)}.mdc-typography--headline1{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:6rem;font-size:var(--mdc-typography-headline1-font-size, 6rem);line-height:6rem;line-height:var(--mdc-typography-headline1-line-height, 6rem);font-weight:300;font-weight:var(--mdc-typography-headline1-font-weight, 300);letter-spacing:-0.015625em;letter-spacing:var(--mdc-typography-headline1-letter-spacing, -0.015625em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline1-text-decoration, inherit);text-decoration:var(--mdc-typography-headline1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline1-text-transform, inherit)}.mdc-typography--headline2{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:3.75rem;font-size:var(--mdc-typography-headline2-font-size, 3.75rem);line-height:3.75rem;line-height:var(--mdc-typography-headline2-line-height, 3.75rem);font-weight:300;font-weight:var(--mdc-typography-headline2-font-weight, 300);letter-spacing:-0.0083333333em;letter-spacing:var(--mdc-typography-headline2-letter-spacing, -0.0083333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline2-text-decoration, inherit);text-decoration:var(--mdc-typography-headline2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline2-text-transform, inherit)}.mdc-typography--headline3{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline3-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:3rem;font-size:var(--mdc-typography-headline3-font-size, 3rem);line-height:3.125rem;line-height:var(--mdc-typography-headline3-line-height, 3.125rem);font-weight:400;font-weight:var(--mdc-typography-headline3-font-weight, 400);letter-spacing:normal;letter-spacing:var(--mdc-typography-headline3-letter-spacing, normal);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline3-text-decoration, inherit);text-decoration:var(--mdc-typography-headline3-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline3-text-transform, inherit)}.mdc-typography--headline4{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline4-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:2.125rem;font-size:var(--mdc-typography-headline4-font-size, 2.125rem);line-height:2.5rem;line-height:var(--mdc-typography-headline4-line-height, 2.5rem);font-weight:400;font-weight:var(--mdc-typography-headline4-font-weight, 400);letter-spacing:0.0073529412em;letter-spacing:var(--mdc-typography-headline4-letter-spacing, 0.0073529412em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline4-text-decoration, inherit);text-decoration:var(--mdc-typography-headline4-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline4-text-transform, inherit)}.mdc-typography--headline5{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline5-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1.5rem;font-size:var(--mdc-typography-headline5-font-size, 1.5rem);line-height:2rem;line-height:var(--mdc-typography-headline5-line-height, 2rem);font-weight:400;font-weight:var(--mdc-typography-headline5-font-weight, 400);letter-spacing:normal;letter-spacing:var(--mdc-typography-headline5-letter-spacing, normal);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline5-text-decoration, inherit);text-decoration:var(--mdc-typography-headline5-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline5-text-transform, inherit)}.mdc-typography--headline6{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1.25rem;font-size:var(--mdc-typography-headline6-font-size, 1.25rem);line-height:2rem;line-height:var(--mdc-typography-headline6-line-height, 2rem);font-weight:500;font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:0.0125em;letter-spacing:var(--mdc-typography-headline6-letter-spacing, 0.0125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline6-text-transform, inherit)}.mdc-typography--subtitle1{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit)}.mdc-typography--subtitle2{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-subtitle2-font-size, 0.875rem);line-height:1.375rem;line-height:var(--mdc-typography-subtitle2-line-height, 1.375rem);font-weight:500;font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:0.0071428571em;letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, 0.0071428571em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle2-text-transform, inherit)}.mdc-typography--body1{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-body1-font-size, 1rem);line-height:1.5rem;line-height:var(--mdc-typography-body1-line-height, 1.5rem);font-weight:400;font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:0.03125em;letter-spacing:var(--mdc-typography-body1-letter-spacing, 0.03125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body1-text-transform, inherit)}.mdc-typography--body2{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit)}.mdc-typography--caption{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:0.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit)}.mdc-typography--button{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height, 2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:0.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase)}.mdc-typography--overline{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-overline-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-overline-font-size, 0.75rem);line-height:2rem;line-height:var(--mdc-typography-overline-line-height, 2rem);font-weight:500;font-weight:var(--mdc-typography-overline-font-weight, 500);letter-spacing:0.1666666667em;letter-spacing:var(--mdc-typography-overline-letter-spacing, 0.1666666667em);text-decoration:none;-webkit-text-decoration:var(--mdc-typography-overline-text-decoration, none);text-decoration:var(--mdc-typography-overline-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-overline-text-transform, uppercase)} + + /*# sourceMappingURL=material-components-web.min.css.map*/ \ No newline at end of file diff --git a/pkgs/csslib/third_party/pure/LICENSE b/pkgs/csslib/third_party/pure/LICENSE new file mode 100644 index 000000000..aae45d8de --- /dev/null +++ b/pkgs/csslib/third_party/pure/LICENSE @@ -0,0 +1,29 @@ +Software License Agreement (BSD License) +======================================== + +Copyright 2013 Yahoo! Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the Yahoo! Inc. nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/pkgs/csslib/third_party/pure/README.md b/pkgs/csslib/third_party/pure/README.md new file mode 100644 index 000000000..7c005a6bc --- /dev/null +++ b/pkgs/csslib/third_party/pure/README.md @@ -0,0 +1,4 @@ +This folder contains sample css files from the open-source project +https://github.com/pure-css/pure/ + +This code was included under the terms in the `LICENSE` file. \ No newline at end of file diff --git a/pkgs/csslib/third_party/pure/main-grid.css b/pkgs/csslib/third_party/pure/main-grid.css new file mode 100644 index 000000000..0598dfe8d --- /dev/null +++ b/pkgs/csslib/third_party/pure/main-grid.css @@ -0,0 +1,855 @@ +@media screen and (min-width: 35.5em) { + .u-sm-1, + .u-sm-1-1, + .u-sm-1-2, + .u-sm-1-3, + .u-sm-2-3, + .u-sm-1-4, + .u-sm-3-4, + .u-sm-1-5, + .u-sm-2-5, + .u-sm-3-5, + .u-sm-4-5, + .u-sm-5-5, + .u-sm-1-6, + .u-sm-5-6, + .u-sm-1-8, + .u-sm-3-8, + .u-sm-5-8, + .u-sm-7-8, + .u-sm-1-12, + .u-sm-5-12, + .u-sm-7-12, + .u-sm-11-12, + .u-sm-1-24, + .u-sm-2-24, + .u-sm-3-24, + .u-sm-4-24, + .u-sm-5-24, + .u-sm-6-24, + .u-sm-7-24, + .u-sm-8-24, + .u-sm-9-24, + .u-sm-10-24, + .u-sm-11-24, + .u-sm-12-24, + .u-sm-13-24, + .u-sm-14-24, + .u-sm-15-24, + .u-sm-16-24, + .u-sm-17-24, + .u-sm-18-24, + .u-sm-19-24, + .u-sm-20-24, + .u-sm-21-24, + .u-sm-22-24, + .u-sm-23-24, + .u-sm-24-24 { + display: inline-block; + *display: inline; + zoom: 1; + letter-spacing: normal; + word-spacing: normal; + vertical-align: top; + text-rendering: auto; + } + + .u-sm-1-24 { + width: 4.1667%; + *width: 4.1357%; + } + + .u-sm-1-12, + .u-sm-2-24 { + width: 8.3333%; + *width: 8.3023%; + } + + .u-sm-1-8, + .u-sm-3-24 { + width: 12.5000%; + *width: 12.4690%; + } + + .u-sm-1-6, + .u-sm-4-24 { + width: 16.6667%; + *width: 16.6357%; + } + + .u-sm-1-5 { + width: 20%; + *width: 19.9690%; + } + + .u-sm-5-24 { + width: 20.8333%; + *width: 20.8023%; + } + + .u-sm-1-4, + .u-sm-6-24 { + width: 25%; + *width: 24.9690%; + } + + .u-sm-7-24 { + width: 29.1667%; + *width: 29.1357%; + } + + .u-sm-1-3, + .u-sm-8-24 { + width: 33.3333%; + *width: 33.3023%; + } + + .u-sm-3-8, + .u-sm-9-24 { + width: 37.5000%; + *width: 37.4690%; + } + + .u-sm-2-5 { + width: 40%; + *width: 39.9690%; + } + + .u-sm-5-12, + .u-sm-10-24 { + width: 41.6667%; + *width: 41.6357%; + } + + .u-sm-11-24 { + width: 45.8333%; + *width: 45.8023%; + } + + .u-sm-1-2, + .u-sm-12-24 { + width: 50%; + *width: 49.9690%; + } + + .u-sm-13-24 { + width: 54.1667%; + *width: 54.1357%; + } + + .u-sm-7-12, + .u-sm-14-24 { + width: 58.3333%; + *width: 58.3023%; + } + + .u-sm-3-5 { + width: 60%; + *width: 59.9690%; + } + + .u-sm-5-8, + .u-sm-15-24 { + width: 62.5000%; + *width: 62.4690%; + } + + .u-sm-2-3, + .u-sm-16-24 { + width: 66.6667%; + *width: 66.6357%; + } + + .u-sm-17-24 { + width: 70.8333%; + *width: 70.8023%; + } + + .u-sm-3-4, + .u-sm-18-24 { + width: 75%; + *width: 74.9690%; + } + + .u-sm-19-24 { + width: 79.1667%; + *width: 79.1357%; + } + + .u-sm-4-5 { + width: 80%; + *width: 79.9690%; + } + + .u-sm-5-6, + .u-sm-20-24 { + width: 83.3333%; + *width: 83.3023%; + } + + .u-sm-7-8, + .u-sm-21-24 { + width: 87.5000%; + *width: 87.4690%; + } + + .u-sm-11-12, + .u-sm-22-24 { + width: 91.6667%; + *width: 91.6357%; + } + + .u-sm-23-24 { + width: 95.8333%; + *width: 95.8023%; + } + + .u-sm-1, + .u-sm-1-1, + .u-sm-5-5, + .u-sm-24-24 { + width: 100%; + } +} + +@media screen and (min-width: 48em) { + .u-md-1, + .u-md-1-1, + .u-md-1-2, + .u-md-1-3, + .u-md-2-3, + .u-md-1-4, + .u-md-3-4, + .u-md-1-5, + .u-md-2-5, + .u-md-3-5, + .u-md-4-5, + .u-md-5-5, + .u-md-1-6, + .u-md-5-6, + .u-md-1-8, + .u-md-3-8, + .u-md-5-8, + .u-md-7-8, + .u-md-1-12, + .u-md-5-12, + .u-md-7-12, + .u-md-11-12, + .u-md-1-24, + .u-md-2-24, + .u-md-3-24, + .u-md-4-24, + .u-md-5-24, + .u-md-6-24, + .u-md-7-24, + .u-md-8-24, + .u-md-9-24, + .u-md-10-24, + .u-md-11-24, + .u-md-12-24, + .u-md-13-24, + .u-md-14-24, + .u-md-15-24, + .u-md-16-24, + .u-md-17-24, + .u-md-18-24, + .u-md-19-24, + .u-md-20-24, + .u-md-21-24, + .u-md-22-24, + .u-md-23-24, + .u-md-24-24 { + display: inline-block; + *display: inline; + zoom: 1; + letter-spacing: normal; + word-spacing: normal; + vertical-align: top; + text-rendering: auto; + } + + .u-md-1-24 { + width: 4.1667%; + *width: 4.1357%; + } + + .u-md-1-12, + .u-md-2-24 { + width: 8.3333%; + *width: 8.3023%; + } + + .u-md-1-8, + .u-md-3-24 { + width: 12.5000%; + *width: 12.4690%; + } + + .u-md-1-6, + .u-md-4-24 { + width: 16.6667%; + *width: 16.6357%; + } + + .u-md-1-5 { + width: 20%; + *width: 19.9690%; + } + + .u-md-5-24 { + width: 20.8333%; + *width: 20.8023%; + } + + .u-md-1-4, + .u-md-6-24 { + width: 25%; + *width: 24.9690%; + } + + .u-md-7-24 { + width: 29.1667%; + *width: 29.1357%; + } + + .u-md-1-3, + .u-md-8-24 { + width: 33.3333%; + *width: 33.3023%; + } + + .u-md-3-8, + .u-md-9-24 { + width: 37.5000%; + *width: 37.4690%; + } + + .u-md-2-5 { + width: 40%; + *width: 39.9690%; + } + + .u-md-5-12, + .u-md-10-24 { + width: 41.6667%; + *width: 41.6357%; + } + + .u-md-11-24 { + width: 45.8333%; + *width: 45.8023%; + } + + .u-md-1-2, + .u-md-12-24 { + width: 50%; + *width: 49.9690%; + } + + .u-md-13-24 { + width: 54.1667%; + *width: 54.1357%; + } + + .u-md-7-12, + .u-md-14-24 { + width: 58.3333%; + *width: 58.3023%; + } + + .u-md-3-5 { + width: 60%; + *width: 59.9690%; + } + + .u-md-5-8, + .u-md-15-24 { + width: 62.5000%; + *width: 62.4690%; + } + + .u-md-2-3, + .u-md-16-24 { + width: 66.6667%; + *width: 66.6357%; + } + + .u-md-17-24 { + width: 70.8333%; + *width: 70.8023%; + } + + .u-md-3-4, + .u-md-18-24 { + width: 75%; + *width: 74.9690%; + } + + .u-md-19-24 { + width: 79.1667%; + *width: 79.1357%; + } + + .u-md-4-5 { + width: 80%; + *width: 79.9690%; + } + + .u-md-5-6, + .u-md-20-24 { + width: 83.3333%; + *width: 83.3023%; + } + + .u-md-7-8, + .u-md-21-24 { + width: 87.5000%; + *width: 87.4690%; + } + + .u-md-11-12, + .u-md-22-24 { + width: 91.6667%; + *width: 91.6357%; + } + + .u-md-23-24 { + width: 95.8333%; + *width: 95.8023%; + } + + .u-md-1, + .u-md-1-1, + .u-md-5-5, + .u-md-24-24 { + width: 100%; + } +} + +@media screen and (min-width: 58em) { + .u-lg-1, + .u-lg-1-1, + .u-lg-1-2, + .u-lg-1-3, + .u-lg-2-3, + .u-lg-1-4, + .u-lg-3-4, + .u-lg-1-5, + .u-lg-2-5, + .u-lg-3-5, + .u-lg-4-5, + .u-lg-5-5, + .u-lg-1-6, + .u-lg-5-6, + .u-lg-1-8, + .u-lg-3-8, + .u-lg-5-8, + .u-lg-7-8, + .u-lg-1-12, + .u-lg-5-12, + .u-lg-7-12, + .u-lg-11-12, + .u-lg-1-24, + .u-lg-2-24, + .u-lg-3-24, + .u-lg-4-24, + .u-lg-5-24, + .u-lg-6-24, + .u-lg-7-24, + .u-lg-8-24, + .u-lg-9-24, + .u-lg-10-24, + .u-lg-11-24, + .u-lg-12-24, + .u-lg-13-24, + .u-lg-14-24, + .u-lg-15-24, + .u-lg-16-24, + .u-lg-17-24, + .u-lg-18-24, + .u-lg-19-24, + .u-lg-20-24, + .u-lg-21-24, + .u-lg-22-24, + .u-lg-23-24, + .u-lg-24-24 { + display: inline-block; + *display: inline; + zoom: 1; + letter-spacing: normal; + word-spacing: normal; + vertical-align: top; + text-rendering: auto; + } + + .u-lg-1-24 { + width: 4.1667%; + *width: 4.1357%; + } + + .u-lg-1-12, + .u-lg-2-24 { + width: 8.3333%; + *width: 8.3023%; + } + + .u-lg-1-8, + .u-lg-3-24 { + width: 12.5000%; + *width: 12.4690%; + } + + .u-lg-1-6, + .u-lg-4-24 { + width: 16.6667%; + *width: 16.6357%; + } + + .u-lg-1-5 { + width: 20%; + *width: 19.9690%; + } + + .u-lg-5-24 { + width: 20.8333%; + *width: 20.8023%; + } + + .u-lg-1-4, + .u-lg-6-24 { + width: 25%; + *width: 24.9690%; + } + + .u-lg-7-24 { + width: 29.1667%; + *width: 29.1357%; + } + + .u-lg-1-3, + .u-lg-8-24 { + width: 33.3333%; + *width: 33.3023%; + } + + .u-lg-3-8, + .u-lg-9-24 { + width: 37.5000%; + *width: 37.4690%; + } + + .u-lg-2-5 { + width: 40%; + *width: 39.9690%; + } + + .u-lg-5-12, + .u-lg-10-24 { + width: 41.6667%; + *width: 41.6357%; + } + + .u-lg-11-24 { + width: 45.8333%; + *width: 45.8023%; + } + + .u-lg-1-2, + .u-lg-12-24 { + width: 50%; + *width: 49.9690%; + } + + .u-lg-13-24 { + width: 54.1667%; + *width: 54.1357%; + } + + .u-lg-7-12, + .u-lg-14-24 { + width: 58.3333%; + *width: 58.3023%; + } + + .u-lg-3-5 { + width: 60%; + *width: 59.9690%; + } + + .u-lg-5-8, + .u-lg-15-24 { + width: 62.5000%; + *width: 62.4690%; + } + + .u-lg-2-3, + .u-lg-16-24 { + width: 66.6667%; + *width: 66.6357%; + } + + .u-lg-17-24 { + width: 70.8333%; + *width: 70.8023%; + } + + .u-lg-3-4, + .u-lg-18-24 { + width: 75%; + *width: 74.9690%; + } + + .u-lg-19-24 { + width: 79.1667%; + *width: 79.1357%; + } + + .u-lg-4-5 { + width: 80%; + *width: 79.9690%; + } + + .u-lg-5-6, + .u-lg-20-24 { + width: 83.3333%; + *width: 83.3023%; + } + + .u-lg-7-8, + .u-lg-21-24 { + width: 87.5000%; + *width: 87.4690%; + } + + .u-lg-11-12, + .u-lg-22-24 { + width: 91.6667%; + *width: 91.6357%; + } + + .u-lg-23-24 { + width: 95.8333%; + *width: 95.8023%; + } + + .u-lg-1, + .u-lg-1-1, + .u-lg-5-5, + .u-lg-24-24 { + width: 100%; + } +} + +@media screen and (min-width: 75em) { + .u-xl-1, + .u-xl-1-1, + .u-xl-1-2, + .u-xl-1-3, + .u-xl-2-3, + .u-xl-1-4, + .u-xl-3-4, + .u-xl-1-5, + .u-xl-2-5, + .u-xl-3-5, + .u-xl-4-5, + .u-xl-5-5, + .u-xl-1-6, + .u-xl-5-6, + .u-xl-1-8, + .u-xl-3-8, + .u-xl-5-8, + .u-xl-7-8, + .u-xl-1-12, + .u-xl-5-12, + .u-xl-7-12, + .u-xl-11-12, + .u-xl-1-24, + .u-xl-2-24, + .u-xl-3-24, + .u-xl-4-24, + .u-xl-5-24, + .u-xl-6-24, + .u-xl-7-24, + .u-xl-8-24, + .u-xl-9-24, + .u-xl-10-24, + .u-xl-11-24, + .u-xl-12-24, + .u-xl-13-24, + .u-xl-14-24, + .u-xl-15-24, + .u-xl-16-24, + .u-xl-17-24, + .u-xl-18-24, + .u-xl-19-24, + .u-xl-20-24, + .u-xl-21-24, + .u-xl-22-24, + .u-xl-23-24, + .u-xl-24-24 { + display: inline-block; + *display: inline; + zoom: 1; + letter-spacing: normal; + word-spacing: normal; + vertical-align: top; + text-rendering: auto; + } + + .u-xl-1-24 { + width: 4.1667%; + *width: 4.1357%; + } + + .u-xl-1-12, + .u-xl-2-24 { + width: 8.3333%; + *width: 8.3023%; + } + + .u-xl-1-8, + .u-xl-3-24 { + width: 12.5000%; + *width: 12.4690%; + } + + .u-xl-1-6, + .u-xl-4-24 { + width: 16.6667%; + *width: 16.6357%; + } + + .u-xl-1-5 { + width: 20%; + *width: 19.9690%; + } + + .u-xl-5-24 { + width: 20.8333%; + *width: 20.8023%; + } + + .u-xl-1-4, + .u-xl-6-24 { + width: 25%; + *width: 24.9690%; + } + + .u-xl-7-24 { + width: 29.1667%; + *width: 29.1357%; + } + + .u-xl-1-3, + .u-xl-8-24 { + width: 33.3333%; + *width: 33.3023%; + } + + .u-xl-3-8, + .u-xl-9-24 { + width: 37.5000%; + *width: 37.4690%; + } + + .u-xl-2-5 { + width: 40%; + *width: 39.9690%; + } + + .u-xl-5-12, + .u-xl-10-24 { + width: 41.6667%; + *width: 41.6357%; + } + + .u-xl-11-24 { + width: 45.8333%; + *width: 45.8023%; + } + + .u-xl-1-2, + .u-xl-12-24 { + width: 50%; + *width: 49.9690%; + } + + .u-xl-13-24 { + width: 54.1667%; + *width: 54.1357%; + } + + .u-xl-7-12, + .u-xl-14-24 { + width: 58.3333%; + *width: 58.3023%; + } + + .u-xl-3-5 { + width: 60%; + *width: 59.9690%; + } + + .u-xl-5-8, + .u-xl-15-24 { + width: 62.5000%; + *width: 62.4690%; + } + + .u-xl-2-3, + .u-xl-16-24 { + width: 66.6667%; + *width: 66.6357%; + } + + .u-xl-17-24 { + width: 70.8333%; + *width: 70.8023%; + } + + .u-xl-3-4, + .u-xl-18-24 { + width: 75%; + *width: 74.9690%; + } + + .u-xl-19-24 { + width: 79.1667%; + *width: 79.1357%; + } + + .u-xl-4-5 { + width: 80%; + *width: 79.9690%; + } + + .u-xl-5-6, + .u-xl-20-24 { + width: 83.3333%; + *width: 83.3023%; + } + + .u-xl-7-8, + .u-xl-21-24 { + width: 87.5000%; + *width: 87.4690%; + } + + .u-xl-11-12, + .u-xl-22-24 { + width: 91.6667%; + *width: 91.6357%; + } + + .u-xl-23-24 { + width: 95.8333%; + *width: 95.8023%; + } + + .u-xl-1, + .u-xl-1-1, + .u-xl-5-5, + .u-xl-24-24 { + width: 100%; + } +} \ No newline at end of file diff --git a/pkgs/csslib/third_party/pure/main.css b/pkgs/csslib/third_party/pure/main.css new file mode 100644 index 000000000..ed5f6132d --- /dev/null +++ b/pkgs/csslib/third_party/pure/main.css @@ -0,0 +1,624 @@ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html, button, input, select, textarea, +.pure-g [class *= "pure-u"] { + font-family: Helvetica, Arial, sans-serif; + letter-spacing: 0.01em; +} + + +/* -------------------------- + * Element Styles + * -------------------------- +*/ + +body { + min-width: 320px; + background-color: #fff; + color: #777; + line-height: 1.6; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: bold; + color: rgb(75, 75, 75); +} +h3 { + font-size: 1.25em; +} +h4 { + font-size: 1.125em; +} + +a { + color: #3b8bba; /* block-background-text-normal */ + text-decoration: none; +} + +a:visited { + color: #265778; /* block-normal-text-normal */ +} + +dt { + font-weight: bold; +} +dd { + margin: 0 0 10px 0; +} + +aside { + background: #1f8dd6; /* same color as selected state on site menu */ + margin: 1em 0; + padding: 0.3em 1em; + border-radius: 3px; + color: #fff; +} + aside a, aside a:visited { + color: rgb(169, 226, 255); + } + + +/* -------------------------- + * Layout Styles + * -------------------------- +*/ + +/* Navigation Push Styles */ +#layout { + position: relative; + padding-left: 0; +} + #layout.active #menu { + left: 160px; + width: 160px; + } + +/* Apply the .box class on the immediate parent of any grid element (pure-u-*) to apply some padding. */ +.l-box { + padding: 1em; +} + +.l-wrap { + margin-left: auto; + margin-right: auto; +} +.content .l-wrap { + margin-left: -1em; + margin-right: -1em; +} + + +/* -------------------------- + * Header Module Styles + * -------------------------- +*/ + +.header { + font-family: "Raleway", "Helvetica Neue", Helvetica, Arial, sans-serif; + max-width: 768px; + margin: 0 auto; + padding: 1em; + text-align: center; + border-bottom: 1px solid #eee; + background: #fff; + letter-spacing: 0.05em; +} + .header h1 { + font-size: 300%; + font-weight: 100; + margin: 0; + } + .header h2 { + font-size: 125%; + font-weight: 100; + line-height: 1.5; + margin: 0; + color: #666; + letter-spacing: -0.02em; + } + + + /* -------------------------- + * Content Module Styles + * -------------------------- + */ + +/* The content div is placed as a wrapper around all the docs */ +.content { + margin-left: auto; + margin-right: auto; + padding-left: 1em; + padding-right: 1em; + max-width: 768px; +} + + .content .content-subhead { + margin: 2em 0 1em 0; + font-weight: 300; + color: #888; + position: relative; + } + + .content .content-spaced { + line-height: 1.8; + } + + .content .content-quote { + font-family: "Georgia", serif; + color: #666; + font-style: italic; + line-height: 1.8; + border-left: 5px solid #ddd; + padding-left: 1.5em; + } + + .content-link { + position: absolute; + top: 0; + right: 0; + display: block; + height: 100%; + width: 20px; + background: transparent url('/img/link-icon.png') no-repeat center center; + background-size: 20px 20px; + } + + @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 2dppx) { + .content-link { + background-image: url('/img/link-icon@2x.png'); + } + } + + +/* -------------------------- + * Code Styles + * -------------------------- +*/ + +pre, +code { + font-family: Consolas, Courier, monospace; + color: #333; + background: rgb(250, 250, 250); +} + +code { + padding: 0.2em 0.4em; + white-space: nowrap; +} +.content p code { + font-size: 90%; +} + +.code { + margin-left: -1em; + margin-right: -1em; + border: 1px solid #eee; + border-left-width: 0; + border-right-width: 0; + overflow-x: auto; +} +.code pre { + margin: 0; +} +.code code { + font-size: 95%; + white-space: pre; + word-wrap: normal; + padding: 0; + background: none; +} +.code-wrap code { + white-space: pre-wrap; + word-wrap: break-word; +} +.example .code { + margin-top: 1em; +} + +/* -------------------------- + * Footer Module Styles + * -------------------------- +*/ + +.footer { + font-size: 87.5%; + border-top: 1px solid #eee; + margin-top: 3.4286em; + padding: 1.1429em; + background: rgb(250, 250, 250); +} + +.legal { + line-height: 1.6; + text-align: center; + margin: 0 auto; +} + + .legal-license { + margin-top: 0; + } + .legal-links { + list-style: none; + padding: 0; + margin-bottom: 0; + } + .legal-copyright { + margin-top: 0; + margin-bottom: 0; + } + + +/* -------------------------- + * Main Navigation Bar Styles + * -------------------------- +*/ + +/* Add transition to containers so they can push in and out */ +#layout, +#menu, +.menu-link { + -webkit-transition: all 0.2s ease-out; + -moz-transition: all 0.2s ease-out; + -ms-transition: all 0.2s ease-out; + -o-transition: all 0.2s ease-out; + transition: all 0.2s ease-out; +} + +#layout.active .menu-link { + left: 160px; +} + +#menu { + margin-left: -160px; /* "#menu" width */ + width: 160px; + position: fixed; + top: 0; + left: 0; + bottom: 0; + z-index: 1000; /* so the menu or its navicon stays above all content */ + background: #191818; + overflow-y: auto; +} + #menu a { + color: #999; + border: none; + white-space: normal; + padding: 0.625em 1em; + } + + #menu .pure-menu-open { + background: transparent; + border: 0; + } + + #menu .pure-menu ul { + border: none; + background: transparent; + display: block; + } + + #menu .pure-menu ul, + #menu .pure-menu .menu-item-divided { + border-top: 1px solid #333; + } + + #menu .pure-menu-list li .pure-menu-link:hover, + #menu .pure-menu-list li .pure-menu-link:focus { + background: #333; + } + + .menu-link { + position: fixed; + display: block; /* show this only on small screens */ + top: 0; + left: 0; /* "#menu width" */ + background: #000; + background: rgba(0,0,0,0.7); + font-size: 11px; /* change this value to increase/decrease button size */ + z-index: 10; + width: 4em; + height: 4em; + padding: 1em; + } + + .menu-link:hover, + .menu-link:focus { + background: #000; + } + + .menu-link span { + position: relative; + display: block; + margin-top: 0.9em; + } + + .menu-link span, + .menu-link span:before, + .menu-link span:after { + background-color: #fff; + pointer-events: none; + width: 100%; + height: .2em; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -ms-transition: all 0.4s; + -o-transition: all 0.4s; + transition: all 0.4s; + } + + .menu-link span:before, + .menu-link span:after { + position: absolute; + top: -.55em; + content: " "; + } + + .menu-link span:after { + top: .55em; + } + + .menu-link.active span { + background: transparent; + } + + .menu-link.active span:before { + -webkit-transform: rotate(45deg) translate(.5em, .4em); + -moz-transform: rotate(45deg) translate(.5em, .4em); + -ms-transform: rotate(45deg) translate(.5em, .4em); + -o-transform: rotate(45deg) translate(.5em, .4em); + transform: rotate(45deg) translate(.5em, .4em); + } + + .menu-link.active span:after { + -webkit-transform: rotate(-45deg) translate(.4em, -.3em); + -moz-transform: rotate(-45deg) translate(.4em, -.3em); + -ms-transform: rotate(-45deg) translate(.4em, -.3em); + -o-transform: rotate(-45deg) translate(.4em, -.3em); + transform: rotate(-45deg) translate(.4em, -.3em); + } + + #menu .pure-menu-heading { + font-size: 125%; + font-weight: 300; + letter-spacing: 0.1em; + color: #fff; + margin-top: 0; + padding: 0.5em 0.8em; + text-transform: uppercase; + } + #menu .pure-menu-heading:hover, + #menu .pure-menu-heading:focus { + color: #999; + } + + #menu .pure-menu-item .active { + background: #1f8dd6; + color: #fff; + } + + #menu li.pure-menu-item .active:hover, + #menu li.pure-menu-item .active:focus { + background: #1f8dd6; + } + + +/* --------------------- + * Smaller Module Styles + * --------------------- +*/ + +.pure-img-responsive { + max-width: 100%; + height: auto; +} + +.pure-paginator .pure-button { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.pure-button { + font-family: inherit; +} +a.pure-button-primary { + color: white; +} + + +/* green call to action button class */ +.notice { + background-color: #61B842; + color: white; +} + +.muted { + color: #ccc; +} + + + +/* ------------- + * Table Styles + * ------------- +*/ +.pure-table th, +.pure-table td { + padding: 0.5em 1em; +} + +.table-responsive { + margin-left: -1em; + margin-right: -1em; + overflow-x: auto; + margin-bottom: 1em; +} +.table-responsive table { + width: 100%; + min-width: 35.5em; + border-left-width: 0; + border-right-width: 0; +} + +.table-responsive .mq-table { + width: 100%; + min-width: 44em; +} +.mq-table th.highlight { + background-color: rgb(255, 234, 133); +} +.mq-table td.highlight { + background-color: rgb(255, 250, 229); +} +.mq-table th.highlight code, +.mq-table td.highlight code { + background: rgb(255, 255, 243); +} +.mq-table-mq code { + font-size: 0.875em; +} + +/* ---------------------------- + * Example for full-width Grids + * ---------------------------- +*/ + +.grids-example { + background: rgb(250, 250, 250); + margin: 2em auto; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} + +/* -------------------------- + * State Rules + * -------------------------- +*/ + + +.is-code-full { + text-align: center; +} +.is-code-full .code { + margin-left: auto; + margin-right: auto; +} +.is-code-full code { + display: inline-block; + max-width: 768px; + margin-left: auto; + margin-right: auto; +} + + +/* -------------------------- + * Responsive Styles + * -------------------------- +*/ + +@media screen and (min-width: 35.5em) { + + .legal-license { + text-align: left; + margin: 0; + } + .legal-copyright, + .legal-links, + .legal-links li { + text-align: right; + margin: 0; + } + +} + +@media screen and (min-width: 48em) { + + .l-wrap, + .l-wrap .content { + padding-left: 1em; + padding-right: 1em; + } + .content .l-wrap { + margin-left: -2em; + margin-right: -2em; + } + + .header, + .content { + padding-left: 2em; + padding-right: 2em; + } + + .header h1 { + font-size: 320%; + } + .header h2 { + font-size: 128%; + } + + .content p { + font-size: 1.125em; + } + + .code { + margin-left: auto; + margin-right: auto; + border-left-width: 1px; + border-right-width: 1px; + } + + .table-responsive { + margin-left: auto; + margin-right: auto; + } + .table-responsive table { + border-left-width: 1px; + border-right-width: 1px; + } + +} + +@media (max-width: 58em) { + /* Only apply this when the window is smaller. Otherwise, the following + case results in extra padding on the left: + * Make the window small. (Rotate to portrait on a mobile.) + * Tap the menu to trigger the active state. + * Make the window large again. (Rotate to landscape on mobile.) + */ + #layout.active { + position: relative; + left: 160px; + } +} + +@media (min-width: 58em) { + + #layout { + padding-left: 160px; /* left col width "#menu" */ + left: 0; + } + #menu { + left: 160px; + } + .menu-link { + position: fixed; + left: 160px; + display: none; + } + #layout.active .menu-link { + left: 160px; + } + +} diff --git a/pkgs/csslib/third_party/skeleton/LICENSE.md b/pkgs/csslib/third_party/skeleton/LICENSE.md new file mode 100644 index 000000000..32a62b300 --- /dev/null +++ b/pkgs/csslib/third_party/skeleton/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2011-2014 Dave Gamache + +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. \ No newline at end of file diff --git a/pkgs/csslib/third_party/skeleton/README.me b/pkgs/csslib/third_party/skeleton/README.me new file mode 100644 index 000000000..aa8c1360f --- /dev/null +++ b/pkgs/csslib/third_party/skeleton/README.me @@ -0,0 +1,4 @@ +This folder contains sample css files from the open-source project +https://github.com/dhg/Skeleton. + +This code was included under the terms in the `LICENSE.md file. \ No newline at end of file diff --git a/pkgs/csslib/third_party/skeleton/normalize.css b/pkgs/csslib/third_party/skeleton/normalize.css new file mode 100644 index 000000000..81c6f31ea --- /dev/null +++ b/pkgs/csslib/third_party/skeleton/normalize.css @@ -0,0 +1,427 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} \ No newline at end of file diff --git a/pkgs/csslib/third_party/skeleton/skeleton.css b/pkgs/csslib/third_party/skeleton/skeleton.css new file mode 100644 index 000000000..f28bf6c59 --- /dev/null +++ b/pkgs/csslib/third_party/skeleton/skeleton.css @@ -0,0 +1,418 @@ +/* +* Skeleton V2.0.4 +* Copyright 2014, Dave Gamache +* www.getskeleton.com +* Free to use under the MIT license. +* http://www.opensource.org/licenses/mit-license.php +* 12/29/2014 +*/ + + +/* Table of contents +–––––––––––––––––––––––––––––––––––––––––––––––––– +- Grid +- Base Styles +- Typography +- Links +- Buttons +- Forms +- Lists +- Code +- Tables +- Spacing +- Utilities +- Clearing +- Media Queries +*/ + + +/* Grid +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +.container { + position: relative; + width: 100%; + max-width: 960px; + margin: 0 auto; + padding: 0 20px; + box-sizing: border-box; } +.column, +.columns { + width: 100%; + float: left; + box-sizing: border-box; } + +/* For devices larger than 400px */ +@media (min-width: 400px) { + .container { + width: 85%; + padding: 0; } +} + +/* For devices larger than 550px */ +@media (min-width: 550px) { + .container { + width: 80%; } + .column, + .columns { + margin-left: 4%; } + .column:first-child, + .columns:first-child { + margin-left: 0; } + + .one.column, + .one.columns { width: 4.66666666667%; } + .two.columns { width: 13.3333333333%; } + .three.columns { width: 22%; } + .four.columns { width: 30.6666666667%; } + .five.columns { width: 39.3333333333%; } + .six.columns { width: 48%; } + .seven.columns { width: 56.6666666667%; } + .eight.columns { width: 65.3333333333%; } + .nine.columns { width: 74.0%; } + .ten.columns { width: 82.6666666667%; } + .eleven.columns { width: 91.3333333333%; } + .twelve.columns { width: 100%; margin-left: 0; } + + .one-third.column { width: 30.6666666667%; } + .two-thirds.column { width: 65.3333333333%; } + + .one-half.column { width: 48%; } + + /* Offsets */ + .offset-by-one.column, + .offset-by-one.columns { margin-left: 8.66666666667%; } + .offset-by-two.column, + .offset-by-two.columns { margin-left: 17.3333333333%; } + .offset-by-three.column, + .offset-by-three.columns { margin-left: 26%; } + .offset-by-four.column, + .offset-by-four.columns { margin-left: 34.6666666667%; } + .offset-by-five.column, + .offset-by-five.columns { margin-left: 43.3333333333%; } + .offset-by-six.column, + .offset-by-six.columns { margin-left: 52%; } + .offset-by-seven.column, + .offset-by-seven.columns { margin-left: 60.6666666667%; } + .offset-by-eight.column, + .offset-by-eight.columns { margin-left: 69.3333333333%; } + .offset-by-nine.column, + .offset-by-nine.columns { margin-left: 78.0%; } + .offset-by-ten.column, + .offset-by-ten.columns { margin-left: 86.6666666667%; } + .offset-by-eleven.column, + .offset-by-eleven.columns { margin-left: 95.3333333333%; } + + .offset-by-one-third.column, + .offset-by-one-third.columns { margin-left: 34.6666666667%; } + .offset-by-two-thirds.column, + .offset-by-two-thirds.columns { margin-left: 69.3333333333%; } + + .offset-by-one-half.column, + .offset-by-one-half.columns { margin-left: 52%; } + +} + + +/* Base Styles +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +/* NOTE +html is set to 62.5% so that all the REM measurements throughout Skeleton +are based on 10px sizing. So basically 1.5rem = 15px :) */ +html { + font-size: 62.5%; } +body { + font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */ + line-height: 1.6; + font-weight: 400; + font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #222; } + + +/* Typography +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 2rem; + font-weight: 300; } +h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;} +h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; } +h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; } +h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; } +h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; } +h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; } + +/* Larger than phablet */ +@media (min-width: 550px) { + h1 { font-size: 5.0rem; } + h2 { font-size: 4.2rem; } + h3 { font-size: 3.6rem; } + h4 { font-size: 3.0rem; } + h5 { font-size: 2.4rem; } + h6 { font-size: 1.5rem; } +} + +p { + margin-top: 0; } + + +/* Links +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +a { + color: #1EAEDB; } +a:hover { + color: #0FA0CE; } + + +/* Buttons +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +.button, +button, +input[type="submit"], +input[type="reset"], +input[type="button"] { + display: inline-block; + height: 38px; + padding: 0 30px; + color: #555; + text-align: center; + font-size: 11px; + font-weight: 600; + line-height: 38px; + letter-spacing: .1rem; + text-transform: uppercase; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border-radius: 4px; + border: 1px solid #bbb; + cursor: pointer; + box-sizing: border-box; } +.button:hover, +button:hover, +input[type="submit"]:hover, +input[type="reset"]:hover, +input[type="button"]:hover, +.button:focus, +button:focus, +input[type="submit"]:focus, +input[type="reset"]:focus, +input[type="button"]:focus { + color: #333; + border-color: #888; + outline: 0; } +.button.button-primary, +button.button-primary, +input[type="submit"].button-primary, +input[type="reset"].button-primary, +input[type="button"].button-primary { + color: #FFF; + background-color: #33C3F0; + border-color: #33C3F0; } +.button.button-primary:hover, +button.button-primary:hover, +input[type="submit"].button-primary:hover, +input[type="reset"].button-primary:hover, +input[type="button"].button-primary:hover, +.button.button-primary:focus, +button.button-primary:focus, +input[type="submit"].button-primary:focus, +input[type="reset"].button-primary:focus, +input[type="button"].button-primary:focus { + color: #FFF; + background-color: #1EAEDB; + border-color: #1EAEDB; } + + +/* Forms +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +input[type="email"], +input[type="number"], +input[type="search"], +input[type="text"], +input[type="tel"], +input[type="url"], +input[type="password"], +textarea, +select { + height: 38px; + padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */ + background-color: #fff; + border: 1px solid #D1D1D1; + border-radius: 4px; + box-shadow: none; + box-sizing: border-box; } +/* Removes awkward default styles on some inputs for iOS */ +input[type="email"], +input[type="number"], +input[type="search"], +input[type="text"], +input[type="tel"], +input[type="url"], +input[type="password"], +textarea { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; } +textarea { + min-height: 65px; + padding-top: 6px; + padding-bottom: 6px; } +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="text"]:focus, +input[type="tel"]:focus, +input[type="url"]:focus, +input[type="password"]:focus, +textarea:focus, +select:focus { + border: 1px solid #33C3F0; + outline: 0; } +label, +legend { + display: block; + margin-bottom: .5rem; + font-weight: 600; } +fieldset { + padding: 0; + border-width: 0; } +input[type="checkbox"], +input[type="radio"] { + display: inline; } +label > .label-body { + display: inline-block; + margin-left: .5rem; + font-weight: normal; } + + +/* Lists +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +ul { + list-style: circle inside; } +ol { + list-style: decimal inside; } +ol, ul { + padding-left: 0; + margin-top: 0; } +ul ul, +ul ol, +ol ol, +ol ul { + margin: 1.5rem 0 1.5rem 3rem; + font-size: 90%; } +li { + margin-bottom: 1rem; } + + +/* Code +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +code { + padding: .2rem .5rem; + margin: 0 .2rem; + font-size: 90%; + white-space: nowrap; + background: #F1F1F1; + border: 1px solid #E1E1E1; + border-radius: 4px; } +pre > code { + display: block; + padding: 1rem 1.5rem; + white-space: pre; } + + +/* Tables +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +th, +td { + padding: 12px 15px; + text-align: left; + border-bottom: 1px solid #E1E1E1; } +th:first-child, +td:first-child { + padding-left: 0; } +th:last-child, +td:last-child { + padding-right: 0; } + + +/* Spacing +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +button, +.button { + margin-bottom: 1rem; } +input, +textarea, +select, +fieldset { + margin-bottom: 1.5rem; } +pre, +blockquote, +dl, +figure, +table, +p, +ul, +ol, +form { + margin-bottom: 2.5rem; } + + +/* Utilities +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +.u-full-width { + width: 100%; + box-sizing: border-box; } +.u-max-full-width { + max-width: 100%; + box-sizing: border-box; } +.u-pull-right { + float: right; } +.u-pull-left { + float: left; } + + +/* Misc +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +hr { + margin-top: 3rem; + margin-bottom: 3.5rem; + border-width: 0; + border-top: 1px solid #E1E1E1; } + + +/* Clearing +–––––––––––––––––––––––––––––––––––––––––––––––––– */ + +/* Self Clearing Goodness */ +.container:after, +.row:after, +.u-cf { + content: ""; + display: table; + clear: both; } + + +/* Media Queries +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +/* +Note: The best way to structure the use of media queries is to create the queries +near the relevant code. For example, if you wanted to change the styles for buttons +on small devices, paste the mobile query code up in the buttons section and style it +there. +*/ + + +/* Larger than mobile */ +@media (min-width: 400px) {} + +/* Larger than phablet (also point when grid becomes active) */ +@media (min-width: 550px) {} + +/* Larger than tablet */ +@media (min-width: 750px) {} + +/* Larger than desktop */ +@media (min-width: 1000px) {} + +/* Larger than Desktop HD */ +@media (min-width: 1200px) {} diff --git a/pkgs/json_rpc_2/.gitignore b/pkgs/json_rpc_2/.gitignore new file mode 100644 index 000000000..ab3cb76e6 --- /dev/null +++ b/pkgs/json_rpc_2/.gitignore @@ -0,0 +1,16 @@ +# Don’t commit the following directories created by pub. +.buildlog +.dart_tool/ +.pub/ +build/ +packages +.packages + +# Or the files created by dart2js. +*.dart.js +*.js_ +*.js.deps +*.js.map + +# Include when developing application packages. +pubspec.lock diff --git a/pkgs/json_rpc_2/.test_config b/pkgs/json_rpc_2/.test_config new file mode 100644 index 000000000..412fc5c5c --- /dev/null +++ b/pkgs/json_rpc_2/.test_config @@ -0,0 +1,3 @@ +{ + "test_package": true +} \ No newline at end of file diff --git a/pkgs/json_rpc_2/CHANGELOG.md b/pkgs/json_rpc_2/CHANGELOG.md new file mode 100644 index 000000000..1f2cf8e8e --- /dev/null +++ b/pkgs/json_rpc_2/CHANGELOG.md @@ -0,0 +1,151 @@ +## 3.0.3 + +* Require Dart 3.4 +* Move to `dart-lang/tools` monorepo. + +## 3.0.2 + +* Switch to using `package:lints`. +* Address a few analysis hint violations. +* Populate the pubspec `repository` field. + +## 3.0.1 + +* Fix a bug where a `null` result to a request caused an exception. + +## 3.0.0 + +* Migrate to null safety. +* Accept responses even if the server converts the ID to a String. + +## 2.2.2 + +* Fix `Peer.close()` throwing `Bad state: Future already completed`. + +## 2.2.1 + +* Fix `Peer` requests not terminating when the underlying channel is closed. + +## 2.2.0 + +* Added `strictProtocolChecks` named parameter to `Server` and `Peer` + constructors. Setting this parameter to false will result in the server not + rejecting requests missing the `jsonrpc` parameter. + +## 2.1.1 + +* Fixed issue where throwing `RpcException.methodNotFound` in an asynchronous + fallback handler would not result in the next fallback being executed. +* Updated minimum SDK to Dart `2.2.0`. + +## 2.1.0 + +* `Server` and related classes can now take an `onUnhandledError` callback to + notify callers of unhandled exceptions. + +## 2.0.10 + +* Allow `stream_channel` version 2.x + +## 2.0.8 + +* Updated SDK version to 2.0.0-dev.17.0 + +## 2.0.7 + +* When a `Client` is closed before a request completes, the error sent to that + request's `Future` now includes the request method to aid in debugging. + +## 2.0.6 + +* Internal changes only. + +## 2.0.5 + +* Internal changes only. + +## 2.0.4 + +* `Client.sendRequest()` now throws a `StateError` if the client is closed while + the request is in-flight. This avoids dangling `Future`s that will never be + completed. + +* Both `Client.sendRequest()` and `Client.sendNotification()` now throw + `StateError`s if they're called after the client is closed. + +## 2.0.3 + +* Fix new strong-mode warnings. + +## 2.0.2 + +* Fix all strong-mode warnings. + +## 2.0.1 + +* Fix a race condition in which a `StateError` could be top-leveled if + `Peer.close()` was called before the underlying channel closed. + +## 2.0.0 + +* **Breaking change:** all constructors now take a `StreamChannel` rather than a + `Stream`/`StreamSink` pair. + +* `Client.sendRequest()` and `Client.sendNotification()` no longer throw + `StateError`s after the connection has been closed but before `Client.close()` + has been called. + +* The various `close()` methods may now be called before their corresponding + `listen()` methods. + +* The various `close()` methods now wait on the result of closing the underlying + `StreamSink`. Be aware that [in some circumstances][issue 19095] + `StreamController`s' `Sink.close()` futures may never complete. + +[issue 19095]: https://github.com/dart-lang/sdk/issues/19095 + +## 1.2.0 + +* Add `Client.isClosed` and `Server.isClosed`, which make it possible to + synchronously determine whether the connection is open. In particular, this + makes it possible to reliably tell whether it's safe to call + `Client.sendRequest`. + +* Fix a race condition in `Server` where a `StateError` could be thrown if the + connection was closed in the middle of handling a request. + +* Improve stack traces for error responses. + +## 1.1.1 + +* Update the README to match the current API. + +## 1.1.0 + +* Add a `done` getter to `Client`, `Server`, and `Peer`. + +## 1.0.0 + +* Add a `Client` class for communicating with external JSON-RPC 2.0 servers. + +* Add a `Peer` class that's both a `Client` and a `Server`. + +## 0.1.0 + +* Remove `Server.handleRequest()` and `Server.parseRequest()`. Instead, `new + Server()` takes a `Stream` and a `StreamSink` and uses those behind-the-scenes + for its communication. + +* Add `Server.listen()`, which causes the server to begin listening to the + underlying request stream. + +* Add `Server.close()`, which closes the underlying request stream and response + sink. + +## 0.0.2+3 + +* Widen the version constraint for `stack_trace`. + +## 0.0.2+2 + +* Fix error response to include data from `RpcException` when not a map. diff --git a/pkgs/json_rpc_2/LICENSE b/pkgs/json_rpc_2/LICENSE new file mode 100644 index 000000000..000cd7bec --- /dev/null +++ b/pkgs/json_rpc_2/LICENSE @@ -0,0 +1,27 @@ +Copyright 2014, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/pkgs/json_rpc_2/README.md b/pkgs/json_rpc_2/README.md new file mode 100644 index 000000000..a7dda4a8e --- /dev/null +++ b/pkgs/json_rpc_2/README.md @@ -0,0 +1,150 @@ +[![Build Status](https://github.com/dart-lang/tools/actions/workflows/json_rpc_2.yaml/badge.svg)](https://github.com/dart-lang/tools/actions/workflows/json_rpc_2.yaml) +[![pub package](https://img.shields.io/pub/v/json_rpc_2.svg)](https://pub.dev/packages/json_rpc_2) +[![package publisher](https://img.shields.io/pub/publisher/json_rpc_2.svg)](https://pub.dev/packages/json_rpc_2/publisher) + +A library that implements the [JSON-RPC 2.0 spec][spec]. + +[spec]: https://www.jsonrpc.org/specification + +## Server + +A JSON-RPC 2.0 server exposes a set of methods that can be called by clients. +These methods can be registered using `Server.registerMethod`: + +```dart +import 'dart:io'; + +import 'package:json_rpc_2/json_rpc_2.dart'; +import 'package:web_socket_channel/io.dart'; +import 'package:web_socket_channel/web_socket_channel.dart'; + +void main() async { + var httpServer = await HttpServer.bind(InternetAddress.loopbackIPv4, 4321); + var connectedChannels = + httpServer.transform(WebSocketTransformer()).map(IOWebSocketChannel.new); + connectedChannels.listen(handleClient); +} + +void handleClient(WebSocketChannel socket) { + // The socket is a `StreamChannel` because it might emit binary + // `List`, but JSON RPC 2 only works with Strings so we assert it only + // emits those by casting it. + var server = Server(socket.cast()); + + // Any string may be used as a method name. JSON-RPC 2.0 methods are + // case-sensitive. + var i = 0; + server.registerMethod('count', () { + // Just return the value to be sent as a response to the client. This can + // be anything JSON-serializable, or a Future that completes to something + // JSON-serializable. + return i++; + }); + + // Methods can take parameters. They're presented as a `Parameters` object + // which makes it easy to validate that the expected parameters exist. + server.registerMethod('echo', (Parameters params) { + // If the request doesn't have a "message" parameter this will + // automatically send a response notifying the client that the request + // was invalid. + return params['message'].value; + }); + + // `Parameters` has methods for verifying argument types. + server.registerMethod('subtract', (Parameters params) { + // If "minuend" or "subtrahend" aren't numbers, this will reject the + // request. + return params['minuend'].asNum - params['subtrahend'].asNum; + }); + + // [Parameters] also supports optional arguments. + server.registerMethod('sort', (Parameters params) { + var list = params['list'].asList; + list.sort(); + if (params['descendint'].asBoolOr(false)) { + return list.reversed; + } else { + return list; + } + }); + + // A method can send an error response by throwing a `RpcException`. + // Any positive number may be used as an application- defined error code. + const dividByZero = 1; + server.registerMethod('divide', (Parameters params) { + var divisor = params['divisor'].asNum; + if (divisor == 0) { + throw RpcException(dividByZero, 'Cannot divide by zero.'); + } + + return params['dividend'].asNum / divisor; + }); + + // To give you time to register all your methods, the server won't start + // listening for requests until you call `listen`. Messages are buffered until + // listen is called. The returned Future won't complete until the connection + // is closed. + server.listen(); +} +``` + +## Client + +A JSON-RPC 2.0 client calls methods on a server and handles the server's +responses to those method calls. These methods can be called using +`Client.sendRequest`: + +```dart +import 'package:json_rpc_2/json_rpc_2.dart'; +import 'package:pedantic/pedantic.dart'; +import 'package:web_socket_channel/web_socket_channel.dart'; + +void main() async { + var socket = WebSocketChannel.connect(Uri.parse('ws://localhost:4321')); + var client = Client(socket.cast()); + + // The client won't subscribe to the input stream until you call `listen`. + // The returned Future won't complete until the connection is closed. + unawaited(client.listen()); + + // This calls the "count" method on the server. A Future is returned that + // will complete to the value contained in the server's response. + var count = await client.sendRequest('count'); + print('Count is $count'); + + // Parameters are passed as a simple Map or, for positional parameters, an + // Iterable. Make sure they're JSON-serializable! + var echo = await client.sendRequest('echo', {'message': 'hello'}); + print('Echo says "$echo"!'); + + // A notification is a way to call a method that tells the server that no + // result is expected. Its return type is `void`; even if it causes an + // error, you won't hear back. + client.sendNotification('count'); + + // If the server sends an error response, the returned Future will complete + // with an RpcException. You can catch this error and inspect its error + // code, message, and any data that the server sent along with it. + try { + await client.sendRequest('divide', {'dividend': 2, 'divisor': 0}); + } on RpcException catch (error) { + print('RPC error ${error.code}: ${error.message}'); + } + + await client.close(); +} +``` + +## Peer + +Although JSON-RPC 2.0 only explicitly describes clients and servers, it also +mentions that two-way communication can be supported by making each endpoint +both a client and a server. This package supports this directly using the `Peer` +class, which implements both `Client` and `Server`. It supports the same methods +as those classes, and automatically makes sure that every message from the other +endpoint is routed and handled correctly. + +## Publishing automation + +For information about our publishing automation and release process, see +https://github.com/dart-lang/ecosystem/wiki/Publishing-automation. diff --git a/pkgs/json_rpc_2/analysis_options.yaml b/pkgs/json_rpc_2/analysis_options.yaml new file mode 100644 index 000000000..a91d5cace --- /dev/null +++ b/pkgs/json_rpc_2/analysis_options.yaml @@ -0,0 +1,13 @@ +include: package:dart_flutter_team_lints/analysis_options.yaml + +analyzer: + language: + strict-casts: false + errors: + avoid_dynamic_calls: ignore + +linter: + rules: + - avoid_unused_constructor_parameters + - cancel_subscriptions + - package_api_docs diff --git a/pkgs/json_rpc_2/example/client.dart b/pkgs/json_rpc_2/example/client.dart new file mode 100644 index 000000000..aa8f7ed54 --- /dev/null +++ b/pkgs/json_rpc_2/example/client.dart @@ -0,0 +1,43 @@ +// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; + +import 'package:json_rpc_2/json_rpc_2.dart'; +import 'package:web_socket_channel/web_socket_channel.dart'; + +void main() async { + var socket = WebSocketChannel.connect(Uri.parse('ws://localhost:4321')); + var client = Client(socket.cast()); + + // The client won't subscribe to the input stream until you call `listen`. + // The returned Future won't complete until the connection is closed. + unawaited(client.listen()); + + // This calls the "count" method on the server. A Future is returned that + // will complete to the value contained in the server's response. + var count = await client.sendRequest('count'); + print('Count is $count'); + + // Parameters are passed as a simple Map or, for positional parameters, an + // Iterable. Make sure they're JSON-serializable! + var echo = await client.sendRequest('echo', {'message': 'hello'}); + print('Echo says "$echo"!'); + + // A notification is a way to call a method that tells the server that no + // result is expected. Its return type is `void`; even if it causes an + // error, you won't hear back. + client.sendNotification('count'); + + // If the server sends an error response, the returned Future will complete + // with an RpcException. You can catch this error and inspect its error + // code, message, and any data that the server sent along with it. + try { + await client.sendRequest('divide', {'dividend': 2, 'divisor': 0}); + } on RpcException catch (error) { + print('RPC error ${error.code}: ${error.message}'); + } + + await client.close(); +} diff --git a/pkgs/json_rpc_2/example/main.dart b/pkgs/json_rpc_2/example/main.dart new file mode 100644 index 000000000..7d5ab7331 --- /dev/null +++ b/pkgs/json_rpc_2/example/main.dart @@ -0,0 +1,78 @@ +// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:io'; + +import 'package:json_rpc_2/json_rpc_2.dart'; +import 'package:web_socket_channel/io.dart'; +import 'package:web_socket_channel/web_socket_channel.dart'; + +void main() async { + var httpServer = await HttpServer.bind(InternetAddress.loopbackIPv4, 4321); + var connectedChannels = + httpServer.transform(WebSocketTransformer()).map(IOWebSocketChannel.new); + connectedChannels.listen(handleClient); +} + +void handleClient(WebSocketChannel socket) { + // The socket is a `StreamChannel` because it might emit binary + // `List`, but JSON RPC 2 only works with Strings so we assert it only + // emits those by casting it. + var server = Server(socket.cast()); + + // Any string may be used as a method name. JSON-RPC 2.0 methods are + // case-sensitive. + var i = 0; + server.registerMethod('count', () { + // Just return the value to be sent as a response to the client. This can + // be anything JSON-serializable, or a Future that completes to something + // JSON-serializable. + return i++; + }); + + // Methods can take parameters. They're presented as a `Parameters` object + // which makes it easy to validate that the expected parameters exist. + server.registerMethod('echo', (Parameters params) { + // If the request doesn't have a "message" parameter this will + // automatically send a response notifying the client that the request + // was invalid. + return params['message'].value; + }); + + // `Parameters` has methods for verifying argument types. + server.registerMethod('subtract', (Parameters params) { + // If "minuend" or "subtrahend" aren't numbers, this will reject the + // request. + return params['minuend'].asNum - params['subtrahend'].asNum; + }); + + // [Parameters] also supports optional arguments. + server.registerMethod('sort', (Parameters params) { + var list = params['list'].asList; + list.sort(); + if (params['descendint'].asBoolOr(false)) { + return list.reversed; + } else { + return list; + } + }); + + // A method can send an error response by throwing a `RpcException`. + // Any positive number may be used as an application- defined error code. + const dividByZero = 1; + server.registerMethod('divide', (Parameters params) { + var divisor = params['divisor'].asNum; + if (divisor == 0) { + throw RpcException(dividByZero, 'Cannot divide by zero.'); + } + + return params['dividend'].asNum / divisor; + }); + + // To give you time to register all your methods, the server won't start + // listening for requests until you call `listen`. Messages are buffered until + // listen is called. The returned Future won't complete until the connection + // is closed. + server.listen(); +} diff --git a/pkgs/json_rpc_2/lib/error_code.dart b/pkgs/json_rpc_2/lib/error_code.dart new file mode 100644 index 000000000..5f907917d --- /dev/null +++ b/pkgs/json_rpc_2/lib/error_code.dart @@ -0,0 +1,51 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// ignore_for_file: constant_identifier_names + +import 'src/exception.dart'; + +/// Error codes defined in the [JSON-RPC 2.0 specification][spec]. +/// +/// These codes are generally used for protocol-level communication. Most of +/// them shouldn't be used by the application. Those that should have +/// convenience constructors in [RpcException]. +/// +/// [spec]: http://www.jsonrpc.org/specification#error_object +/// An error code indicating that invalid JSON was received by the server. +const PARSE_ERROR = -32700; + +/// An error code indicating that the request JSON was invalid according to the +/// JSON-RPC 2.0 spec. +const INVALID_REQUEST = -32600; + +/// An error code indicating that the requested method does not exist or is +/// unavailable. +const METHOD_NOT_FOUND = -32601; + +/// An error code indicating that the request parameters are invalid for the +/// requested method. +const INVALID_PARAMS = -32602; + +/// An internal JSON-RPC error. +const INTERNAL_ERROR = -32603; + +/// An unexpected error occurred on the server. +/// +/// The spec reserves the range from -32000 to -32099 for implementation-defined +/// server exceptions, but for now we only use one of those values. +const SERVER_ERROR = -32000; + +/// Returns a human-readable name for [errorCode] if it's one specified by the +/// JSON-RPC 2.0 spec. +/// +/// If [errorCode] isn't defined in the JSON-RPC 2.0 spec, returns `null`. +String? name(int errorCode) => switch (errorCode) { + PARSE_ERROR => 'parse error', + INVALID_REQUEST => 'invalid request', + METHOD_NOT_FOUND => 'method not found', + INVALID_PARAMS => 'invalid parameters', + INTERNAL_ERROR => 'internal error', + _ => null + }; diff --git a/pkgs/json_rpc_2/lib/json_rpc_2.dart b/pkgs/json_rpc_2/lib/json_rpc_2.dart new file mode 100644 index 000000000..33e5f4987 --- /dev/null +++ b/pkgs/json_rpc_2/lib/json_rpc_2.dart @@ -0,0 +1,9 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +export 'src/client.dart'; +export 'src/exception.dart'; +export 'src/parameters.dart'; +export 'src/peer.dart'; +export 'src/server.dart'; diff --git a/pkgs/json_rpc_2/lib/src/client.dart b/pkgs/json_rpc_2/lib/src/client.dart new file mode 100644 index 000000000..182f94584 --- /dev/null +++ b/pkgs/json_rpc_2/lib/src/client.dart @@ -0,0 +1,246 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; + +import 'package:stack_trace/stack_trace.dart'; +import 'package:stream_channel/stream_channel.dart'; + +import 'exception.dart'; +import 'utils.dart'; + +/// A JSON-RPC 2.0 client. +/// +/// A client calls methods on a server and handles the server's responses to +/// those method calls. Methods can be called with [sendRequest], or with +/// [sendNotification] if no response is expected. +class Client { + final StreamChannel _channel; + + /// The next request id. + var _id = 0; + + /// The current batch of requests to be sent together. + /// + /// Each element is a JSON RPC spec compliant message. + List>? _batch; + + /// The map of request ids to pending requests. + final _pendingRequests = {}; + + final _done = Completer(); + + /// Returns a [Future] that completes when the underlying connection is + /// closed. + /// + /// This is the same future that's returned by [listen] and [close]. It may + /// complete before [close] is called if the remote endpoint closes the + /// connection. + Future get done => _done.future; + + /// Whether the underlying connection is closed. + /// + /// Note that this will be `true` before [close] is called if the remote + /// endpoint closes the connection. + bool get isClosed => _done.isCompleted; + + /// Creates a [Client] that communicates over [channel]. + /// + /// Note that the client won't begin listening to [channel] until + /// [Client.listen] is called. + Client(StreamChannel channel) + : this.withoutJson( + jsonDocument.bind(channel).transformStream(ignoreFormatExceptions)); + + /// Creates a [Client] that communicates using decoded messages over + /// [_channel]. + /// + /// Unlike [Client.new], this doesn't read or write JSON strings. Instead, it + /// reads and writes decoded maps or lists. + /// + /// Note that the client won't begin listening to [_channel] until + /// [Client.listen] is called. + Client.withoutJson(this._channel) { + done.whenComplete(() { + for (var request in _pendingRequests.values) { + request.completer.completeError(StateError( + 'The client closed with pending request "${request.method}".')); + } + _pendingRequests.clear(); + }).catchError((_) { + // Avoid an unhandled error. + }); + } + + /// Starts listening to the underlying stream. + /// + /// Returns a [Future] that will complete when the connection is closed or + /// when it has an error. This is the same as [done]. + /// + /// [listen] may only be called once. + Future listen() { + _channel.stream.listen(_handleResponse, + onError: (Object error, StackTrace stackTrace) { + _done.completeError(error, stackTrace); + _channel.sink.close(); + }, onDone: () { + if (!_done.isCompleted) _done.complete(); + close(); + }); + return done; + } + + /// Closes the underlying connection. + /// + /// Returns a [Future] that completes when all resources have been released. + /// This is the same as [done]. + Future close() { + _channel.sink.close(); + if (!_done.isCompleted) _done.complete(); + return done; + } + + /// Sends a JSON-RPC 2 request to invoke the given [method]. + /// + /// If passed, [parameters] is the parameters for the method. This must be + /// either an [Iterable] (to pass parameters by position) or a [Map] with + /// [String] keys (to pass parameters by name). Either way, it must be + /// JSON-serializable. + /// + /// If the request succeeds, this returns the response result as a decoded + /// JSON-serializable object. If it fails, it throws an [RpcException] + /// describing the failure. + /// + /// Throws a [StateError] if the client is closed while the request is in + /// flight, or if the client is closed when this method is called. + Future sendRequest(String method, [Object? parameters]) { + var id = _id++; + _send(method, parameters, id); + + var completer = Completer.sync(); + _pendingRequests[id] = _Request(method, completer, Chain.current()); + return completer.future; + } + + /// Sends a JSON-RPC 2 request to invoke the given [method] without expecting + /// a response. + /// + /// If passed, [parameters] is the parameters for the method. This must be + /// either an [Iterable] (to pass parameters by position) or a [Map] with + /// [String] keys (to pass parameters by name). Either way, it must be + /// JSON-serializable. + /// + /// Since this is just a notification to which the server isn't expected to + /// send a response, it has no return value. + /// + /// Throws a [StateError] if the client is closed when this method is called. + void sendNotification(String method, [Object? parameters]) => + _send(method, parameters); + + /// A helper method for [sendRequest] and [sendNotification]. + /// + /// Sends a request to invoke [method] with [parameters]. If [id] is given, + /// the request uses that id. + void _send(String method, Object? parameters, [int? id]) { + if (parameters is Iterable) parameters = parameters.toList(); + if (parameters is! Map && parameters is! List && parameters != null) { + throw ArgumentError('Only maps and lists may be used as JSON-RPC ' + 'parameters, was "$parameters".'); + } + if (isClosed) throw StateError('The client is closed.'); + + var message = {'jsonrpc': '2.0', 'method': method}; + if (id != null) message['id'] = id; + if (parameters != null) message['params'] = parameters; + + if (_batch != null) { + _batch!.add(message); + } else { + _channel.sink.add(message); + } + } + + /// Runs [callback] and batches any requests sent until it returns. + /// + /// A batch of requests is sent in a single message on the underlying stream, + /// and the responses are likewise sent back in a single message. + /// + /// [callback] may be synchronous or asynchronous. If it returns a [Future], + /// requests will be batched until that Future returns; otherwise, requests + /// will only be batched while synchronously executing [callback]. + /// + /// If this is called in the context of another [withBatch] call, it just + /// invokes [callback] without creating another batch. This means that + /// responses are batched until the first batch ends. + void withBatch(FutureOr Function() callback) { + if (_batch != null) { + callback(); + return; + } + + _batch = []; + return tryFinally(callback, () { + _channel.sink.add(_batch); + _batch = null; + }); + } + + /// Handles a decoded response from the server. + void _handleResponse(Object? response) { + if (response is List) { + response.forEach(_handleSingleResponse); + } else { + _handleSingleResponse(response); + } + } + + /// Handles a decoded response from the server after batches have been + /// resolved. + void _handleSingleResponse(Object? response_) { + if (!_isResponseValid(response_)) return; + final response = response_ as Map; + var id = response['id']; + id = (id is String) ? int.parse(id) : id; + var request = _pendingRequests.remove(id)!; + if (response.containsKey('result')) { + request.completer.complete(response['result']); + } else { + request.completer.completeError( + RpcException(response['error']['code'], response['error']['message'], + data: response['error']['data']), + request.chain); + } + } + + /// Determines whether the server's response is valid per the spec. + bool _isResponseValid(Object? response) { + if (response is! Map) return false; + if (response['jsonrpc'] != '2.0') return false; + var id = response['id']; + id = (id is String) ? int.parse(id) : id; + if (!_pendingRequests.containsKey(id)) return false; + if (response.containsKey('result')) return true; + + if (!response.containsKey('error')) return false; + var error = response['error']; + if (error is! Map) return false; + if (error['code'] is! int) return false; + if (error['message'] is! String) return false; + return true; + } +} + +/// A pending request to the server. +class _Request { + /// THe method that was sent. + final String method; + + /// The completer to use to complete the response future. + final Completer completer; + + /// The stack chain from where the request was made. + final Chain chain; + + _Request(this.method, this.completer, this.chain); +} diff --git a/pkgs/json_rpc_2/lib/src/exception.dart b/pkgs/json_rpc_2/lib/src/exception.dart new file mode 100644 index 000000000..906a0534b --- /dev/null +++ b/pkgs/json_rpc_2/lib/src/exception.dart @@ -0,0 +1,75 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import '../error_code.dart' as error_code; + +/// An exception from a JSON-RPC server that can be translated into an error +/// response. +class RpcException implements Exception { + /// The error code. + /// + /// All non-negative error codes are available for use by application + /// developers. + final int code; + + /// The error message. + /// + /// This should be limited to a concise single sentence. Further information + /// should be supplied via [data]. + final String message; + + /// Extra application-defined information about the error. + /// + /// This must be a JSON-serializable object. If it's a [Map] without a + /// `"request"` key, a copy of the request that caused the error will + /// automatically be injected. + final Object? data; + + RpcException(this.code, this.message, {this.data}); + + /// An exception indicating that the method named [methodName] was not found. + /// + /// This should usually be used only by fallback handlers. + RpcException.methodNotFound(String methodName) + : this(error_code.METHOD_NOT_FOUND, 'Unknown method "$methodName".'); + + /// An exception indicating that the parameters for the requested method were + /// invalid. + /// + /// Methods can use this to reject requests with invalid parameters. + RpcException.invalidParams(String message) + : this(error_code.INVALID_PARAMS, message); + + /// Converts this exception into a JSON-serializable object that's a valid + /// JSON-RPC 2.0 error response. + Map serialize(Object? request) { + dynamic modifiedData; + if (data is Map && !(data as Map).containsKey('request')) { + modifiedData = { + ...data as Map, + 'request': request, + }; + } else if (data == null) { + modifiedData = {'request': request}; + } else { + modifiedData = data; + } + + var id = request is Map ? request['id'] : null; + if (id is! String && id is! num) id = null; + return { + 'jsonrpc': '2.0', + 'error': {'code': code, 'message': message, 'data': modifiedData}, + 'id': id + }; + } + + @override + String toString() { + var prefix = 'JSON-RPC error $code'; + var errorName = error_code.name(code); + if (errorName != null) prefix += ' ($errorName)'; + return '$prefix: $message'; + } +} diff --git a/pkgs/json_rpc_2/lib/src/parameters.dart b/pkgs/json_rpc_2/lib/src/parameters.dart new file mode 100644 index 000000000..0a188828c --- /dev/null +++ b/pkgs/json_rpc_2/lib/src/parameters.dart @@ -0,0 +1,348 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:convert'; + +import 'exception.dart'; + +/// A wrapper for the parameters to a server method. +/// +/// JSON-RPC 2.0 allows parameters that are either a list or a map. This class +/// provides functions that not only assert that the parameters object is the +/// correct type, but also that the expected arguments exist and are themselves +/// the correct type. +/// +/// Example usage: +/// +/// server.registerMethod("subtract", (params) { +/// return params["minuend"].asNum - params["subtrahend"].asNum; +/// }); +class Parameters { + /// The name of the method that this request called. + final String method; + + /// The underlying value of the parameters object. + /// + /// If this is accessed for a [Parameter] that was not passed, the request + /// will be automatically rejected. To avoid this, use [Parameter.valueOr]. + final dynamic value; + + Parameters(this.method, this.value); + + /// Returns a single parameter. + /// + /// If [key] is a [String], the request is expected to provide named + /// parameters. If it's an [int], the request is expected to provide + /// positional parameters. Requests that don't do so will be rejected + /// automatically. + /// + /// Whether or not the given parameter exists, this returns a [Parameter] + /// object. If a parameter's value is accessed through a getter like [value] + /// or [Parameter.asNum], the request will be rejected if that parameter + /// doesn't exist. On the other hand, if it's accessed through a method with a + /// default value like [Parameter.valueOr] or [Parameter.asNumOr], the default + /// value will be returned. + Parameter operator [](Object? key) { + if (key is int) { + _assertPositional(); + if (key < value.length) { + return Parameter._(method, value[key], this, key); + } else { + return _MissingParameter(method, this, key); + } + } else if (key is String) { + _assertNamed(); + if (value.containsKey(key)) { + return Parameter._(method, value[key], this, key); + } else { + return _MissingParameter(method, this, key); + } + } else { + throw ArgumentError('Parameters[] only takes an int or a string, was ' + '"$key".'); + } + } + + /// Asserts that [value] exists and is a [List] and returns it. + List get asList { + _assertPositional(); + return value; + } + + /// Asserts that [value] exists and is a [Map] and returns it. + Map get asMap { + _assertNamed(); + return value; + } + + /// Asserts that [value] is a positional argument list. + void _assertPositional() { + if (value is List) return; + throw RpcException.invalidParams('Parameters for method "$method" ' + 'must be passed by position.'); + } + + /// Asserts that [value] is a named argument map. + void _assertNamed() { + if (value is Map) return; + throw RpcException.invalidParams('Parameters for method "$method" ' + 'must be passed by name.'); + } +} + +/// A wrapper for a single parameter to a server method. +/// +/// This provides numerous functions for asserting the type of the parameter in +/// question. These functions each have a version that asserts that the +/// parameter exists (for example, [asNum] and [asString]) and a version that +/// returns a default value if the parameter doesn't exist (for example, +/// [asNumOr] and [asStringOr]). If an assertion fails, the request is +/// automatically rejected. +/// +/// This extends [Parameters] to make it easy to access nested parameters. For +/// example: +/// +/// // "params.value" is "{'scores': {'home': [5, 10, 17]}}" +/// params['scores']['home'][2].asInt // => 17 +class Parameter extends Parameters { + // The parent parameters, used to construct [_path]. + final Parameters _parent; + + /// The key used to access `this`, used to construct [_path]. + final Object _key; + + /// A human-readable representation of the path of getters used to get this. + /// + /// Named parameters are represented as `.name`, whereas positional parameters + /// are represented as `[index]`. For example: `"foo[0].bar.baz"`. Named + /// parameters that contain characters that are neither alphanumeric, + /// underscores, or hyphens will be JSON-encoded. For example: `"foo + /// bar"."baz.bang"`. If quotes are used for an individual component, they + /// won't be used for the entire string. + /// + /// An exception is made for single-level parameters. A single-level + /// positional parameter is just represented by the index plus one, because + /// "parameter 1" is clearer than "parameter [0]". A single-level named + /// parameter is represented by that name in quotes. + String get _path { + if (_parent is! Parameter) { + return _key is int ? (_key + 1).toString() : jsonEncode(_key); + } + + String quoteKey(String key) { + if (key.contains(RegExp(r'[^a-zA-Z0-9_-]'))) return jsonEncode(key); + return key; + } + + String computePath(Parameter params) { + if (params._parent is! Parameter) { + return params._key is int + ? '[${params._key}]' + : quoteKey(params._key as String); + } + + var path = computePath(params._parent); + return params._key is int + ? '$path[${params._key}]' + : '$path.${quoteKey(params._key as String)}'; + } + + return computePath(this); + } + + /// Whether this parameter exists. + bool get exists => true; + + Parameter._(super.method, super.value, this._parent, this._key); + + /// Returns [value], or [defaultValue] if this parameter wasn't passed. + dynamic valueOr(Object? defaultValue) => value; + + /// Asserts that [value] exists and is a number and returns it. + /// + /// [asNumOr] may be used to provide a default value instead of rejecting the + /// request if [value] doesn't exist. + num get asNum => _getTyped('a number', (value) => value is num); + + /// Asserts that [value] is a number and returns it. + /// + /// If [value] doesn't exist, this returns [defaultValue]. + num asNumOr(num defaultValue) => asNum; + + /// Asserts that [value] exists and is an integer and returns it. + /// + /// [asIntOr] may be used to provide a default value instead of rejecting the + /// request if [value] doesn't exist. + /// + /// Note that which values count as integers varies between the Dart VM and + /// dart2js. The value `1.0` will be considered an integer under dart2js but + /// not under the VM. + int get asInt => _getTyped('an integer', (value) => value is int); + + /// Asserts that [value] is an integer and returns it. + /// + /// If [value] doesn't exist, this returns [defaultValue]. + /// + /// Note that which values count as integers varies between the Dart VM and + /// dart2js. The value `1.0` will be considered an integer under dart2js but + /// not under the VM. + int asIntOr(int defaultValue) => asInt; + + /// Asserts that [value] exists and is a boolean and returns it. + /// + /// [asBoolOr] may be used to provide a default value instead of rejecting the + /// request if [value] doesn't exist. + bool get asBool => _getTyped('a boolean', (value) => value is bool); + + /// Asserts that [value] is a boolean and returns it. + /// + /// If [value] doesn't exist, this returns [defaultValue]. + bool asBoolOr(bool defaultValue) => asBool; + + /// Asserts that [value] exists and is a string and returns it. + /// + /// [asStringOr] may be used to provide a default value instead of rejecting + /// the request if [value] doesn't exist. + String get asString => _getTyped('a string', (value) => value is String); + + /// Asserts that [value] is a string and returns it. + /// + /// If [value] doesn't exist, this returns [defaultValue]. + String asStringOr(String defaultValue) => asString; + + /// Asserts that [value] exists and is a [List] and returns it. + /// + /// [asListOr] may be used to provide a default value instead of rejecting the + /// request if [value] doesn't exist. + @override + List get asList => _getTyped('an Array', (value) => value is List); + + /// Asserts that [value] is a [List] and returns it. + /// + /// If [value] doesn't exist, this returns [defaultValue]. + List asListOr(List defaultValue) => asList; + + /// Asserts that [value] exists and is a [Map] and returns it. + /// + /// [asMapOr] may be used to provide a default value instead of rejecting the + /// request if [value] doesn't exist. + @override + Map get asMap => _getTyped('an Object', (value) => value is Map); + + /// Asserts that [value] is a [Map] and returns it. + /// + /// If [value] doesn't exist, this returns [defaultValue]. + Map asMapOr(Map defaultValue) => asMap; + + /// Asserts that [value] exists, is a string, and can be parsed as a + /// [DateTime] and returns it. + /// + /// [asDateTimeOr] may be used to provide a default value instead of rejecting + /// the request if [value] doesn't exist. + DateTime get asDateTime => _getParsed('date/time', DateTime.parse); + + /// Asserts that [value] exists, is a string, and can be parsed as a + /// [DateTime] and returns it. + /// + /// If [value] doesn't exist, this returns [defaultValue]. + DateTime asDateTimeOr(DateTime defaultValue) => asDateTime; + + /// Asserts that [value] exists, is a string, and can be parsed as a + /// [Uri] and returns it. + /// + /// [asUriOr] may be used to provide a default value instead of rejecting the + /// request if [value] doesn't exist. + Uri get asUri => _getParsed('URI', Uri.parse); + + /// Asserts that [value] exists, is a string, and can be parsed as a + /// [Uri] and returns it. + /// + /// If [value] doesn't exist, this returns [defaultValue]. + Uri asUriOr(Uri defaultValue) => asUri; + + /// Get a parameter named [type] that matches [test]. + /// + /// [type] is used for the error message. It should begin with an indefinite + /// article. + dynamic _getTyped(String type, bool Function(dynamic) test) { + if (test(value)) return value; + throw RpcException.invalidParams('Parameter $_path for method ' + '"$method" must be $type, but was ${jsonEncode(value)}.'); + } + + dynamic _getParsed(String description, void Function(String) parse) { + var string = asString; + try { + return parse(string); + } on FormatException catch (error) { + // DateTime.parse doesn't actually include any useful information in the + // FormatException, just the string that was being parsed. There's no use + // in including that in the RPC exception. See issue 17753. + var message = error.message; + if (message == string) { + message = ''; + } else { + message = '\n$message'; + } + + throw RpcException.invalidParams('Parameter $_path for method ' + '"$method" must be a valid $description, but was ' + '${jsonEncode(string)}.$message'); + } + } + + @override + void _assertPositional() { + // Throw the standard exception for a mis-typed list. + asList; + } + + @override + void _assertNamed() { + // Throw the standard exception for a mis-typed map. + asMap; + } +} + +/// A subclass of [Parameter] representing a missing parameter. +class _MissingParameter extends Parameter { + @override + dynamic get value { + throw RpcException.invalidParams('Request for method "$method" is ' + 'missing required parameter $_path.'); + } + + @override + bool get exists => false; + + _MissingParameter(String method, Parameters parent, Object key) + : super._(method, null, parent, key); + + @override + dynamic valueOr(Object? defaultValue) => defaultValue; + + @override + num asNumOr(num defaultValue) => defaultValue; + + @override + int asIntOr(int defaultValue) => defaultValue; + + @override + bool asBoolOr(bool defaultValue) => defaultValue; + + @override + String asStringOr(String defaultValue) => defaultValue; + + @override + List asListOr(List defaultValue) => defaultValue; + + @override + Map asMapOr(Map defaultValue) => defaultValue; + + @override + DateTime asDateTimeOr(DateTime defaultValue) => defaultValue; + + @override + Uri asUriOr(Uri defaultValue) => defaultValue; +} diff --git a/pkgs/json_rpc_2/lib/src/peer.dart b/pkgs/json_rpc_2/lib/src/peer.dart new file mode 100644 index 000000000..677b6e15f --- /dev/null +++ b/pkgs/json_rpc_2/lib/src/peer.dart @@ -0,0 +1,156 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; + +import 'package:stream_channel/stream_channel.dart'; + +import 'client.dart'; +import 'parameters.dart'; +import 'server.dart'; +import 'utils.dart'; + +/// A JSON-RPC 2.0 client *and* server. +/// +/// This supports bidirectional peer-to-peer communication with another JSON-RPC +/// 2.0 endpoint. It sends both requests and responses across the same +/// communication channel and expects to connect to a peer that does the same. +class Peer implements Client, Server { + final StreamChannel _channel; + + /// The underlying client that handles request-sending and response-receiving + /// logic. + late final Client _client; + + /// The underlying server that handles request-receiving and response-sending + /// logic. + late final Server _server; + + /// A stream controller that forwards incoming messages to [_server] if + /// they're requests. + final _serverIncomingForwarder = StreamController(sync: true); + + /// A stream controller that forwards incoming messages to [_client] if + /// they're responses. + final _clientIncomingForwarder = StreamController(sync: true); + + @override + late final Future done = Future.wait([_client.done, _server.done]); + + @override + bool get isClosed => _client.isClosed || _server.isClosed; + + @override + ErrorCallback? get onUnhandledError => _server.onUnhandledError; + + @override + bool get strictProtocolChecks => _server.strictProtocolChecks; + + /// Creates a [Peer] that communicates over [channel]. + /// + /// Note that the peer won't begin listening to [channel] until [Peer.listen] + /// is called. + /// + /// Unhandled exceptions in callbacks will be forwarded to [onUnhandledError]. + /// If this is not provided, unhandled exceptions will be swallowed. + /// + /// If [strictProtocolChecks] is false, the underlying [Server] will accept + /// some requests which are not conformant with the JSON-RPC 2.0 + /// specification. In particular, requests missing the `jsonrpc` parameter + /// will be accepted. + Peer(StreamChannel channel, + {ErrorCallback? onUnhandledError, bool strictProtocolChecks = true}) + : this.withoutJson( + jsonDocument.bind(channel).transform(respondToFormatExceptions), + onUnhandledError: onUnhandledError, + strictProtocolChecks: strictProtocolChecks); + + /// Creates a [Peer] that communicates using decoded messages over [_channel]. + /// + /// Unlike [Peer.new], this doesn't read or write JSON strings. Instead, it + /// reads and writes decoded maps or lists. + /// + /// Note that the peer won't begin listening to [_channel] until + /// [Peer.listen] is called. + /// + /// Unhandled exceptions in callbacks will be forwarded to [onUnhandledError]. + /// If this is not provided, unhandled exceptions will be swallowed. + /// + /// If [strictProtocolChecks] is false, the underlying [Server] will accept + /// some requests which are not conformant with the JSON-RPC 2.0 + /// specification. In particular, requests missing the `jsonrpc` parameter + /// will be accepted. + Peer.withoutJson(this._channel, + {ErrorCallback? onUnhandledError, bool strictProtocolChecks = true}) { + _server = Server.withoutJson( + StreamChannel(_serverIncomingForwarder.stream, _channel.sink), + onUnhandledError: onUnhandledError, + strictProtocolChecks: strictProtocolChecks); + _client = Client.withoutJson( + StreamChannel(_clientIncomingForwarder.stream, _channel.sink)); + } + + // Client methods. + + @override + Future sendRequest(String method, [Object? parameters]) => + _client.sendRequest(method, parameters); + + @override + void sendNotification(String method, [Object? parameters]) => + _client.sendNotification(method, parameters); + + @override + void withBatch(void Function() callback) => _client.withBatch(callback); + + // Server methods. + + @override + void registerMethod(String name, Function callback) => + _server.registerMethod(name, callback); + + @override + void registerFallback(void Function(Parameters parameters) callback) => + _server.registerFallback(callback); + + // Shared methods. + + @override + Future listen() { + _client.listen(); + _server.listen(); + _channel.stream.listen((message) { + if (message is Map) { + if (message.containsKey('result') || message.containsKey('error')) { + _clientIncomingForwarder.add(message); + } else { + _serverIncomingForwarder.add(message); + } + } else if (message is List && + message.isNotEmpty && + message.first is Map) { + if (message.first.containsKey('result') || + message.first.containsKey('error')) { + _clientIncomingForwarder.add(message); + } else { + _serverIncomingForwarder.add(message); + } + } else { + // Non-Map and -List messages are ill-formed, so we pass them to the + // server since it knows how to send error responses. + _serverIncomingForwarder.add(message); + } + }, onError: (Object error, StackTrace stackTrace) { + _serverIncomingForwarder.addError(error, stackTrace); + }, onDone: close); + return done; + } + + @override + Future close() { + _client.close(); + _server.close(); + return done; + } +} diff --git a/pkgs/json_rpc_2/lib/src/server.dart b/pkgs/json_rpc_2/lib/src/server.dart new file mode 100644 index 000000000..2c58b7943 --- /dev/null +++ b/pkgs/json_rpc_2/lib/src/server.dart @@ -0,0 +1,319 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:collection'; +import 'dart:convert'; + +import 'package:stack_trace/stack_trace.dart'; +import 'package:stream_channel/stream_channel.dart'; + +import '../error_code.dart' as error_code; +import 'exception.dart'; +import 'parameters.dart'; +import 'utils.dart'; + +/// A callback for unhandled exceptions. +typedef ErrorCallback = void Function(dynamic error, dynamic stackTrace); + +/// A JSON-RPC 2.0 server. +/// +/// A server exposes methods that are called by requests, to which it provides +/// responses. Methods can be registered using [registerMethod] and +/// [registerFallback]. +/// +/// Note that since requests can arrive asynchronously and methods can run +/// asynchronously, it's possible for multiple methods to be invoked at the same +/// time, or even for a single method to be invoked multiple times at once. +class Server { + final StreamChannel _channel; + + /// The methods registered for this server. + final _methods = {}; + + /// The fallback methods for this server. + /// + /// These are tried in order until one of them doesn't throw a + /// [RpcException.methodNotFound] exception. + final _fallbacks = Queue(); + + final _done = Completer(); + + /// Returns a [Future] that completes when the underlying connection is + /// closed. + /// + /// This is the same future that's returned by [listen] and [close]. It may + /// complete before [close] is called if the remote endpoint closes the + /// connection. + Future get done => _done.future; + + /// Whether the underlying connection is closed. + /// + /// Note that this will be `true` before [close] is called if the remote + /// endpoint closes the connection. + bool get isClosed => _done.isCompleted; + + /// A callback that is fired on unhandled exceptions. + /// + /// In the case where a user provided callback results in an exception that + /// cannot be properly routed back to the client, this handler will be + /// invoked. If it is not set, the exception will be swallowed. + final ErrorCallback? onUnhandledError; + + /// Whether to strictly enforce the JSON-RPC 2.0 specification for received + /// messages. + /// + /// If `false`, this [Server] will accept some requests which are not + /// conformant with the JSON-RPC 2.0 specification. In particular, requests + /// missing the `jsonrpc` parameter will be accepted. + final bool strictProtocolChecks; + + /// Creates a [Server] that communicates over [channel]. + /// + /// Note that the server won't begin listening to [channel] until + /// [Server.listen] is called. + /// + /// Unhandled exceptions in callbacks will be forwarded to [onUnhandledError]. + /// If this is not provided, unhandled exceptions will be swallowed. + /// + /// If [strictProtocolChecks] is false, this [Server] will accept some + /// requests which are not conformant with the JSON-RPC 2.0 specification. In + /// particular, requests missing the `jsonrpc` parameter will be accepted. + Server(StreamChannel channel, + {ErrorCallback? onUnhandledError, bool strictProtocolChecks = true}) + : this.withoutJson( + jsonDocument.bind(channel).transform(respondToFormatExceptions), + onUnhandledError: onUnhandledError, + strictProtocolChecks: strictProtocolChecks); + + /// Creates a [Server] that communicates using decoded messages over + /// [_channel]. + /// + /// Unlike [Server.new], this doesn't read or write JSON strings. Instead, it + /// reads and writes decoded maps or lists. + /// + /// Note that the server won't begin listening to [_channel] until + /// [Server.listen] is called. + /// + /// Unhandled exceptions in callbacks will be forwarded to [onUnhandledError]. + /// If this is not provided, unhandled exceptions will be swallowed. + /// + /// If [strictProtocolChecks] is false, this [Server] will accept some + /// requests which are not conformant with the JSON-RPC 2.0 specification. In + /// particular, requests missing the `jsonrpc` parameter will be accepted. + Server.withoutJson(this._channel, + {this.onUnhandledError, this.strictProtocolChecks = true}); + + /// Starts listening to the underlying stream. + /// + /// Returns a [Future] that will complete when the connection is closed or + /// when it has an error. This is the same as [done]. + /// + /// [listen] may only be called once. + Future listen() { + _channel.stream.listen(_handleRequest, + onError: (Object error, StackTrace stackTrace) { + _done.completeError(error, stackTrace); + _channel.sink.close(); + }, onDone: () { + if (!_done.isCompleted) _done.complete(); + }); + return done; + } + + /// Closes the underlying connection. + /// + /// Returns a [Future] that completes when all resources have been released. + /// This is the same as [done]. + Future close() { + _channel.sink.close(); + if (!_done.isCompleted) _done.complete(); + return done; + } + + /// Registers a method named [name] on this server. + /// + /// [callback] can take either zero or one arguments. If it takes zero, any + /// requests for that method that include parameters will be rejected. If it + /// takes one, it will be passed a [Parameters] object. + /// + /// [callback] can return either a JSON-serializable object or a Future that + /// completes to a JSON-serializable object. Any errors in [callback] will be + /// reported to the client as JSON-RPC 2.0 errors. + void registerMethod(String name, Function callback) { + if (_methods.containsKey(name)) { + throw ArgumentError('There\'s already a method named "$name".'); + } + + _methods[name] = callback; + } + + /// Registers a fallback method on this server. + /// + /// A server may have any number of fallback methods. When a request comes in + /// that doesn't match any named methods, each fallback is tried in order. A + /// fallback can pass on handling a request by throwing a + /// [RpcException.methodNotFound] exception. + /// + /// [callback] can return either a JSON-serializable object or a Future that + /// completes to a JSON-serializable object. Any errors in [callback] will be + /// reported to the client as JSON-RPC 2.0 errors. [callback] may send custom + /// errors by throwing an [RpcException]. + void registerFallback(void Function(Parameters parameters) callback) { + _fallbacks.add(callback); + } + + /// Handle a request. + /// + /// [request] is expected to be a JSON-serializable object representing a + /// request sent by a client. This calls the appropriate method or methods for + /// handling that request and returns a JSON-serializable response, or `null` + /// if no response should be sent. + Future _handleRequest(Object? request) async { + dynamic response; + if (request is List) { + if (request.isEmpty) { + response = RpcException(error_code.INVALID_REQUEST, + 'A batch must contain at least one request.') + .serialize(request); + } else { + var results = await Future.wait(request.map(_handleSingleRequest)); + var nonNull = results.where((result) => result != null); + if (nonNull.isEmpty) return; + response = nonNull.toList(); + } + } else { + response = await _handleSingleRequest(request); + if (response == null) return; + } + + if (!isClosed) _channel.sink.add(response); + } + + /// Handles an individual parsed request. + Future _handleSingleRequest(Object? request) async { + try { + _validateRequest(request); + request = request as Map; + + var name = request['method']; + var method = _methods[name]; + method ??= _tryFallbacks; + + Object? result; + if (method is ZeroArgumentFunction) { + if (request.containsKey('params')) { + throw RpcException.invalidParams('No parameters are allowed for ' + 'method "$name".'); + } + result = await method(); + } else { + result = await method(Parameters(name, request['params'])); + } + + // A request without an id is a notification, which should not be sent a + // response, even if one is generated on the server. + if (!request.containsKey('id')) return null; + + return {'jsonrpc': '2.0', 'result': result, 'id': request['id']}; + } catch (error, stackTrace) { + if (error is RpcException) { + if (error.code == error_code.INVALID_REQUEST || + (request is Map && request.containsKey('id'))) { + return error.serialize(request); + } else { + onUnhandledError?.call(error, stackTrace); + return null; + } + } else if (request is Map && !request.containsKey('id')) { + onUnhandledError?.call(error, stackTrace); + return null; + } + final chain = Chain.forTrace(stackTrace); + return RpcException(error_code.SERVER_ERROR, getErrorMessage(error), + data: { + 'full': '$error', + 'stack': '$chain', + }).serialize(request); + } + } + + /// Validates that [request] matches the JSON-RPC spec. + void _validateRequest(Object? request) { + if (request is! Map) { + throw RpcException( + error_code.INVALID_REQUEST, + 'Request must be ' + 'an Array or an Object.'); + } + + if (strictProtocolChecks && !request.containsKey('jsonrpc')) { + throw RpcException( + error_code.INVALID_REQUEST, + 'Request must ' + 'contain a "jsonrpc" key.'); + } + + if ((strictProtocolChecks || request.containsKey('jsonrpc')) && + request['jsonrpc'] != '2.0') { + throw RpcException( + error_code.INVALID_REQUEST, + 'Invalid JSON-RPC ' + 'version ${jsonEncode(request['jsonrpc'])}, expected "2.0".'); + } + + if (!request.containsKey('method')) { + throw RpcException( + error_code.INVALID_REQUEST, + 'Request must ' + 'contain a "method" key.'); + } + + var method = request['method']; + if (request['method'] is! String) { + throw RpcException( + error_code.INVALID_REQUEST, + 'Request method must ' + 'be a string, but was ${jsonEncode(method)}.'); + } + + if (request.containsKey('params')) { + var params = request['params']; + if (params is! List && params is! Map) { + throw RpcException( + error_code.INVALID_REQUEST, + 'Request params must ' + 'be an Array or an Object, but was ${jsonEncode(params)}.'); + } + } + + var id = request['id']; + if (id != null && id is! String && id is! num) { + throw RpcException( + error_code.INVALID_REQUEST, + 'Request id must be a ' + 'string, number, or null, but was ${jsonEncode(id)}.'); + } + } + + /// Try all the fallback methods in order. + Future _tryFallbacks(Parameters params) { + var iterator = _fallbacks.toList().iterator; + + Future tryNext() async { + if (!iterator.moveNext()) { + throw RpcException.methodNotFound(params.method); + } + + try { + return await iterator.current(params); + } on RpcException catch (error) { + if (error.code != error_code.METHOD_NOT_FOUND) rethrow; + return tryNext(); + } + } + + return tryNext(); + } +} diff --git a/pkgs/json_rpc_2/lib/src/utils.dart b/pkgs/json_rpc_2/lib/src/utils.dart new file mode 100644 index 000000000..28bbf21ee --- /dev/null +++ b/pkgs/json_rpc_2/lib/src/utils.dart @@ -0,0 +1,70 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; + +import 'package:stream_channel/stream_channel.dart'; + +import '../error_code.dart' as error_code; +import 'exception.dart'; + +typedef ZeroArgumentFunction = FutureOr Function(); + +/// A regular expression to match the exception prefix that some exceptions' +/// [Object.toString] values contain. +final _exceptionPrefix = RegExp(r'^([A-Z][a-zA-Z]*)?(Exception|Error): '); + +/// Get a string description of an exception. +/// +/// Many exceptions include the exception class name at the beginning of their +/// `toString`, so we remove that if it exists. +String getErrorMessage(Object error) => + error.toString().replaceFirst(_exceptionPrefix, ''); + +/// Like `try`/`finally`, run [body] and ensure that [whenComplete] runs +/// afterwards, regardless of whether [body] succeeded. +/// +/// This is synchronicity-agnostic relative to [body]. If [body] returns a +/// [Future], this wil run asynchronously; otherwise it will run synchronously. +void tryFinally(dynamic Function() body, void Function() whenComplete) { + dynamic result; + try { + result = body(); + } catch (_) { + whenComplete(); + rethrow; + } + + if (result is! Future) { + whenComplete(); + } else { + result.whenComplete(whenComplete); + } +} + +/// A transformer that silently drops [FormatException]s. +final ignoreFormatExceptions = StreamTransformer.fromHandlers( + handleError: (error, stackTrace, sink) { + if (error is FormatException) return; + sink.addError(error, stackTrace); +}); + +/// A transformer that sends error responses on [FormatException]s. +final StreamChannelTransformer respondToFormatExceptions = + _RespondToFormatExceptionsTransformer(); + +class _RespondToFormatExceptionsTransformer + implements StreamChannelTransformer { + @override + StreamChannel bind(StreamChannel channel) { + return channel.changeStream((stream) { + return stream.handleError((dynamic error) { + final formatException = error as FormatException; + var exception = RpcException( + error_code.PARSE_ERROR, 'Invalid JSON: ${formatException.message}'); + channel.sink.add(exception.serialize(formatException.source)); + }, test: (error) => error is FormatException); + }); + } +} diff --git a/pkgs/json_rpc_2/pubspec.yaml b/pkgs/json_rpc_2/pubspec.yaml new file mode 100644 index 000000000..6f5313176 --- /dev/null +++ b/pkgs/json_rpc_2/pubspec.yaml @@ -0,0 +1,17 @@ +name: json_rpc_2 +version: 3.0.3 +description: >- + Utilities to write a client or server using the JSON-RPC 2.0 spec. +repository: https://github.com/dart-lang/tools/tree/main/pkgs/json_rpc_2 + +environment: + sdk: ^3.4.0 + +dependencies: + stack_trace: ^1.10.0 + stream_channel: ^2.1.0 + +dev_dependencies: + dart_flutter_team_lints: ^3.0.0 + test: ^1.25.5 + web_socket_channel: ^3.0.0 diff --git a/pkgs/json_rpc_2/test/client/client_test.dart b/pkgs/json_rpc_2/test/client/client_test.dart new file mode 100644 index 000000000..1a4f65d08 --- /dev/null +++ b/pkgs/json_rpc_2/test/client/client_test.dart @@ -0,0 +1,218 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:json_rpc_2/error_code.dart' as error_code; +import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc; +import 'package:test/test.dart'; + +import 'utils.dart'; + +void main() { + late ClientController controller; + + setUp(() => controller = ClientController()); + + test('sends a message and returns the response', () { + controller.expectRequest((request) { + expect( + request, + allOf([ + containsPair('jsonrpc', '2.0'), + containsPair('method', 'foo'), + containsPair('params', {'param': 'value'}) + ])); + + return {'jsonrpc': '2.0', 'result': 'bar', 'id': request['id']}; + }); + + expect(controller.client.sendRequest('foo', {'param': 'value'}), + completion(equals('bar'))); + }); + + test('sends a message and returns the response with String id', () { + controller.expectRequest((request) { + expect( + request, + allOf([ + containsPair('jsonrpc', '2.0'), + containsPair('method', 'foo'), + containsPair('params', {'param': 'value'}) + ])); + + return { + 'jsonrpc': '2.0', + 'result': 'bar', + 'id': request['id'].toString() + }; + }); + + expect(controller.client.sendRequest('foo', {'param': 'value'}), + completion(equals('bar'))); + }); + + test('sends a notification and expects no response', () { + controller.expectRequest((request) { + expect( + request, + equals({ + 'jsonrpc': '2.0', + 'method': 'foo', + 'params': {'param': 'value'} + })); + }); + + controller.client.sendNotification('foo', {'param': 'value'}); + }); + + test('sends a notification with positional parameters', () { + controller.expectRequest((request) { + expect( + request, + equals({ + 'jsonrpc': '2.0', + 'method': 'foo', + 'params': ['value1', 'value2'] + })); + }); + + controller.client.sendNotification('foo', ['value1', 'value2']); + }); + + test('sends a notification with no parameters', () { + controller.expectRequest((request) { + expect(request, equals({'jsonrpc': '2.0', 'method': 'foo'})); + }); + + controller.client.sendNotification('foo'); + }); + + test('sends a synchronous batch of requests', () { + controller.expectRequest((request) { + expect(request, isA()); + expect(request, hasLength(3)); + expect(request[0], equals({'jsonrpc': '2.0', 'method': 'foo'})); + expect( + request[1], + allOf([ + containsPair('jsonrpc', '2.0'), + containsPair('method', 'bar'), + containsPair('params', {'param': 'value'}) + ])); + expect( + request[2], + allOf( + [containsPair('jsonrpc', '2.0'), containsPair('method', 'baz')])); + + return [ + {'jsonrpc': '2.0', 'result': 'baz response', 'id': request[2]['id']}, + {'jsonrpc': '2.0', 'result': 'bar response', 'id': request[1]['id']} + ]; + }); + + controller.client.withBatch(() { + controller.client.sendNotification('foo'); + expect(controller.client.sendRequest('bar', {'param': 'value'}), + completion(equals('bar response'))); + expect(controller.client.sendRequest('baz'), + completion(equals('baz response'))); + }); + }); + + test('sends an asynchronous batch of requests', () { + controller.expectRequest((request) { + expect(request, isA()); + expect(request, hasLength(3)); + expect(request[0], equals({'jsonrpc': '2.0', 'method': 'foo'})); + expect( + request[1], + allOf([ + containsPair('jsonrpc', '2.0'), + containsPair('method', 'bar'), + containsPair('params', {'param': 'value'}) + ])); + expect( + request[2], + allOf( + [containsPair('jsonrpc', '2.0'), containsPair('method', 'baz')])); + + return [ + {'jsonrpc': '2.0', 'result': 'baz response', 'id': request[2]['id']}, + {'jsonrpc': '2.0', 'result': 'bar response', 'id': request[1]['id']} + ]; + }); + + controller.client.withBatch(() { + return Future.value().then((_) { + controller.client.sendNotification('foo'); + }).then((_) { + expect(controller.client.sendRequest('bar', {'param': 'value'}), + completion(equals('bar response'))); + }).then((_) { + expect(controller.client.sendRequest('baz'), + completion(equals('baz response'))); + }); + }); + }); + + test('reports an error from the server', () { + controller.expectRequest((request) { + expect( + request, + allOf( + [containsPair('jsonrpc', '2.0'), containsPair('method', 'foo')])); + + return { + 'jsonrpc': '2.0', + 'error': { + 'code': error_code.SERVER_ERROR, + 'message': 'you are bad at requests', + 'data': 'some junk' + }, + 'id': request['id'] + }; + }); + + expect( + controller.client.sendRequest('foo', {'param': 'value'}), + throwsA(isA() + .having((e) => e.code, 'code', error_code.SERVER_ERROR) + .having((e) => e.message, 'message', 'you are bad at requests') + .having((e) => e.data, 'data', 'some junk'))); + }); + + test('requests throw StateErrors if the client is closed', () { + controller.client.close(); + expect(() => controller.client.sendRequest('foo'), throwsStateError); + expect(() => controller.client.sendNotification('foo'), throwsStateError); + }); + + test('ignores bogus responses', () { + // Make a request so we have something to respond to. + controller.expectRequest((request) { + controller.sendJsonResponse('{invalid'); + controller.sendResponse('not a map'); + controller.sendResponse( + {'jsonrpc': 'wrong version', 'result': 'wrong', 'id': request['id']}); + controller.sendResponse({'jsonrpc': '2.0', 'result': 'wrong'}); + controller.sendResponse({'jsonrpc': '2.0', 'id': request['id']}); + controller.sendResponse( + {'jsonrpc': '2.0', 'error': 'not a map', 'id': request['id']}); + controller.sendResponse({ + 'jsonrpc': '2.0', + 'error': {'code': 'not an int', 'message': 'dang yo'}, + 'id': request['id'] + }); + controller.sendResponse({ + 'jsonrpc': '2.0', + 'error': {'code': 123, 'message': 0xDEADBEEF}, + 'id': request['id'] + }); + + return pumpEventQueue().then( + (_) => {'jsonrpc': '2.0', 'result': 'right', 'id': request['id']}); + }); + + expect(controller.client.sendRequest('foo'), completion(equals('right'))); + }); +} diff --git a/pkgs/json_rpc_2/test/client/stream_test.dart b/pkgs/json_rpc_2/test/client/stream_test.dart new file mode 100644 index 000000000..b33778ed3 --- /dev/null +++ b/pkgs/json_rpc_2/test/client/stream_test.dart @@ -0,0 +1,97 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; + +import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc; +import 'package:stream_channel/stream_channel.dart'; +import 'package:test/test.dart'; + +void main() { + late StreamController responseController; + late StreamController requestController; + late json_rpc.Client client; + + setUp(() { + responseController = StreamController(); + requestController = StreamController(); + client = json_rpc.Client.withoutJson( + StreamChannel(responseController.stream, requestController.sink)); + }); + + test('.withoutJson supports decoded stream and sink', () { + client.listen(); + + expect(requestController.stream.first.then((request) { + expect( + request, + allOf( + [containsPair('jsonrpc', '2.0'), containsPair('method', 'foo')])); + + responseController + .add({'jsonrpc': '2.0', 'result': 'bar', 'id': request['id']}); + }), completes); + + client.sendRequest('foo'); + }); + + test('.listen returns when the controller is closed', () { + var hasListenCompeted = false; + expect(client.listen().then((_) => hasListenCompeted = true), completes); + + return pumpEventQueue().then((_) { + expect(hasListenCompeted, isFalse); + + // This should cause listen to complete. + return responseController.close(); + }); + }); + + test('.listen returns a stream error', () { + expect(client.listen(), throwsA('oh no')); + responseController.addError('oh no'); + }); + + test('.listen can\'t be called twice', () { + client.listen(); + expect(() => client.listen(), throwsStateError); + }); + + test('.close cancels the stream subscription and closes the sink', () { + // Work around sdk#19095. + requestController.stream.listen(null); + + expect(client.listen(), completes); + + expect(client.isClosed, isFalse); + expect(client.close(), completes); + expect(client.isClosed, isTrue); + + expect(() => responseController.stream.listen((_) {}), throwsStateError); + expect(requestController.isClosed, isTrue); + }); + + group('a stream error', () { + test('is reported through .done', () { + expect(client.listen(), throwsA('oh no!')); + expect(client.done, throwsA('oh no!')); + responseController.addError('oh no!'); + }); + + test('cause a pending request to throw a StateError', () { + expect(client.listen(), throwsA('oh no!')); + expect(client.sendRequest('foo'), throwsStateError); + responseController.addError('oh no!'); + }); + + test('causes future requests to throw StateErrors', () async { + expect(client.listen(), throwsA('oh no!')); + responseController.addError('oh no!'); + await pumpEventQueue(); + + expect(() => client.sendRequest('foo'), throwsStateError); + expect(() => client.sendNotification('foo'), throwsStateError); + }); + }); +} diff --git a/pkgs/json_rpc_2/test/client/utils.dart b/pkgs/json_rpc_2/test/client/utils.dart new file mode 100644 index 000000000..38e187f28 --- /dev/null +++ b/pkgs/json_rpc_2/test/client/utils.dart @@ -0,0 +1,56 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:convert'; + +import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc; +import 'package:stream_channel/stream_channel.dart'; +import 'package:test/test.dart'; + +/// A controller used to test a [json_rpc.Client]. +class ClientController { + /// The controller for the client's response stream. + final _responseController = StreamController(); + + /// The controller for the client's request sink. + final _requestController = StreamController(); + + /// The client. + late final json_rpc.Client client; + + ClientController() { + client = json_rpc.Client( + StreamChannel(_responseController.stream, _requestController.sink)); + client.listen(); + } + + /// Expects that the client will send a request. + /// + /// The request is passed to [callback], which can return a response. If it + /// returns a String, that's sent as the response directly. If it returns + /// null, no response is sent. Otherwise, the return value is encoded and sent + /// as the response. + void expectRequest(FutureOr Function(dynamic) callback) { + expect( + _requestController.stream.first.then((request) { + return callback(jsonDecode(request)); + }).then((response) { + if (response == null) return; + if (response is! String) response = jsonEncode(response); + _responseController.add(response); + }), + completes); + } + + /// Sends [response], a decoded response, to [client]. + void sendResponse(Object? response) { + sendJsonResponse(jsonEncode(response)); + } + + /// Sends [request], a JSON-encoded response, to [client]. + void sendJsonResponse(String request) { + _responseController.add(request); + } +} diff --git a/pkgs/json_rpc_2/test/peer_test.dart b/pkgs/json_rpc_2/test/peer_test.dart new file mode 100644 index 000000000..0df605619 --- /dev/null +++ b/pkgs/json_rpc_2/test/peer_test.dart @@ -0,0 +1,251 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// ignore_for_file: inference_failure_on_instance_creation + +import 'dart:async'; +import 'dart:convert'; + +import 'package:json_rpc_2/error_code.dart' as error_code; +import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc; +import 'package:stream_channel/stream_channel.dart'; +import 'package:test/test.dart'; + +void main() { + late StreamSink incoming; + late Stream outgoing; + late json_rpc.Peer peer; + + setUp(() { + var incomingController = StreamController(); + incoming = incomingController.sink; + var outgoingController = StreamController(); + outgoing = outgoingController.stream; + peer = json_rpc.Peer.withoutJson( + StreamChannel(incomingController.stream, outgoingController)); + }); + + group('like a client,', () { + test('can send a message and receive a response', () { + expect(outgoing.first.then((request) { + expect( + request, + equals({ + 'jsonrpc': '2.0', + 'method': 'foo', + 'params': {'bar': 'baz'}, + 'id': 0 + })); + incoming.add({'jsonrpc': '2.0', 'result': 'qux', 'id': 0}); + }), completes); + + peer.listen(); + expect( + peer.sendRequest('foo', {'bar': 'baz'}), completion(equals('qux'))); + }); + + test('can send a batch of messages and receive a batch of responses', () { + expect(outgoing.first.then((request) { + expect( + request, + equals([ + { + 'jsonrpc': '2.0', + 'method': 'foo', + 'params': {'bar': 'baz'}, + 'id': 0 + }, + { + 'jsonrpc': '2.0', + 'method': 'a', + 'params': {'b': 'c'}, + 'id': 1 + }, + { + 'jsonrpc': '2.0', + 'method': 'w', + 'params': {'x': 'y'}, + 'id': 2 + } + ])); + + incoming.add([ + {'jsonrpc': '2.0', 'result': 'qux', 'id': 0}, + {'jsonrpc': '2.0', 'result': 'd', 'id': 1}, + {'jsonrpc': '2.0', 'result': 'z', 'id': 2} + ]); + }), completes); + + peer.listen(); + + peer.withBatch(() { + expect( + peer.sendRequest('foo', {'bar': 'baz'}), completion(equals('qux'))); + expect(peer.sendRequest('a', {'b': 'c'}), completion(equals('d'))); + expect(peer.sendRequest('w', {'x': 'y'}), completion(equals('z'))); + }); + }); + + test('requests terminates when the channel is closed', () async { + var incomingController = StreamController(); + var channel = StreamChannel.withGuarantees( + incomingController.stream, + StreamController(), + ); + var peer = json_rpc.Peer.withoutJson(channel); + unawaited(peer.listen()); + + var response = peer.sendRequest('foo'); + await incomingController.close(); + + expect(response, throwsStateError); + }); + }); + + test('can be closed', () async { + var incomingController = StreamController(); + var channel = StreamChannel.withGuarantees( + incomingController.stream, + StreamController(), + ); + var peer = json_rpc.Peer.withoutJson(channel); + unawaited(peer.listen()); + await peer.close(); + }); + + test('considered closed with misbehaving StreamChannel', () async { + // If a StreamChannel does not enforce the guarantees stated in it's + // contract - specifically that "Closing the sink causes the stream to close + // before it emits any more events." - The `Peer` should still understand + // when it has been closed manually. + var channel = StreamChannel( + StreamController().stream, + StreamController(), + ); + var peer = json_rpc.Peer.withoutJson(channel); + unawaited(peer.listen()); + unawaited(peer.close()); + expect(peer.isClosed, true); + }); + + group('like a server,', () { + test('can receive a call and return a response', () { + expect(outgoing.first, + completion(equals({'jsonrpc': '2.0', 'result': 'qux', 'id': 0}))); + + peer.registerMethod('foo', (_) => 'qux'); + peer.listen(); + + incoming.add({ + 'jsonrpc': '2.0', + 'method': 'foo', + 'params': {'bar': 'baz'}, + 'id': 0 + }); + }); + + test('can receive a batch of calls and return a batch of responses', () { + expect( + outgoing.first, + completion(equals([ + {'jsonrpc': '2.0', 'result': 'qux', 'id': 0}, + {'jsonrpc': '2.0', 'result': 'd', 'id': 1}, + {'jsonrpc': '2.0', 'result': 'z', 'id': 2} + ]))); + + peer.registerMethod('foo', (_) => 'qux'); + peer.registerMethod('a', (_) => 'd'); + peer.registerMethod('w', (_) => 'z'); + peer.listen(); + + incoming.add([ + { + 'jsonrpc': '2.0', + 'method': 'foo', + 'params': {'bar': 'baz'}, + 'id': 0 + }, + { + 'jsonrpc': '2.0', + 'method': 'a', + 'params': {'b': 'c'}, + 'id': 1 + }, + { + 'jsonrpc': '2.0', + 'method': 'w', + 'params': {'x': 'y'}, + 'id': 2 + } + ]); + }); + + test('returns a response for malformed JSON', () { + var incomingController = StreamController(); + var outgoingController = StreamController(); + var jsonPeer = json_rpc.Peer( + StreamChannel(incomingController.stream, outgoingController)); + + expect( + outgoingController.stream.first.then(jsonDecode), + completion({ + 'jsonrpc': '2.0', + 'error': { + 'code': error_code.PARSE_ERROR, + 'message': startsWith('Invalid JSON: '), + // TODO(nweiz): Always expect the source when sdk#25655 is fixed. + 'data': { + 'request': anyOf([isNull, '{invalid']) + } + }, + 'id': null + })); + + jsonPeer.listen(); + + incomingController.add('{invalid'); + }); + + test('returns a response for incorrectly-structured JSON', () { + expect( + outgoing.first, + completion({ + 'jsonrpc': '2.0', + 'error': { + 'code': error_code.INVALID_REQUEST, + 'message': 'Request must contain a "jsonrpc" key.', + 'data': { + 'request': {'completely': 'wrong'} + } + }, + 'id': null + })); + + peer.listen(); + + incoming.add({'completely': 'wrong'}); + }); + }); + + test('can notify on unhandled errors for if the method throws', () async { + var exception = Exception('test exception'); + var incomingController = StreamController(); + var outgoingController = StreamController(); + final completer = Completer(); + peer = json_rpc.Peer.withoutJson( + StreamChannel(incomingController.stream, outgoingController), + onUnhandledError: (error, stack) { + completer.complete(error); + }, + ); + peer + ..registerMethod('foo', () => throw exception) + // ignore: unawaited_futures + ..listen(); + + incomingController.add({'jsonrpc': '2.0', 'method': 'foo'}); + var receivedException = await completer.future; + expect(receivedException, equals(exception)); + }); +} diff --git a/pkgs/json_rpc_2/test/server/batch_test.dart b/pkgs/json_rpc_2/test/server/batch_test.dart new file mode 100644 index 000000000..af883c48e --- /dev/null +++ b/pkgs/json_rpc_2/test/server/batch_test.dart @@ -0,0 +1,147 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:json_rpc_2/error_code.dart' as error_code; +import 'package:json_rpc_2/src/parameters.dart' show Parameters; +import 'package:test/test.dart'; + +import 'utils.dart'; + +void main() { + late ServerController controller; + + setUp(() { + controller = ServerController(); + controller.server + ..registerMethod('foo', () => 'foo') + ..registerMethod('id', (Parameters params) => params.value) + ..registerMethod('arg', (Parameters params) => params['arg'].value); + }); + + test('handles a batch of requests', () { + expect( + controller.handleRequest([ + {'jsonrpc': '2.0', 'method': 'foo', 'id': 1}, + { + 'jsonrpc': '2.0', + 'method': 'id', + 'params': ['value'], + 'id': 2 + }, + { + 'jsonrpc': '2.0', + 'method': 'arg', + 'params': {'arg': 'value'}, + 'id': 3 + } + ]), + completion(equals([ + {'jsonrpc': '2.0', 'result': 'foo', 'id': 1}, + { + 'jsonrpc': '2.0', + 'result': ['value'], + 'id': 2 + }, + {'jsonrpc': '2.0', 'result': 'value', 'id': 3} + ]))); + }); + + test('handles errors individually', () { + expect( + controller.handleRequest([ + {'jsonrpc': '2.0', 'method': 'foo', 'id': 1}, + {'jsonrpc': '2.0', 'method': 'zap', 'id': 2}, + { + 'jsonrpc': '2.0', + 'method': 'arg', + 'params': {'arg': 'value'}, + 'id': 3 + } + ]), + completion(equals([ + {'jsonrpc': '2.0', 'result': 'foo', 'id': 1}, + { + 'jsonrpc': '2.0', + 'id': 2, + 'error': { + 'code': error_code.METHOD_NOT_FOUND, + 'message': 'Unknown method "zap".', + 'data': { + 'request': {'jsonrpc': '2.0', 'method': 'zap', 'id': 2} + }, + } + }, + {'jsonrpc': '2.0', 'result': 'value', 'id': 3} + ]))); + }); + + test('handles notifications individually', () { + expect( + controller.handleRequest([ + {'jsonrpc': '2.0', 'method': 'foo', 'id': 1}, + { + 'jsonrpc': '2.0', + 'method': 'id', + 'params': ['value'] + }, + { + 'jsonrpc': '2.0', + 'method': 'arg', + 'params': {'arg': 'value'}, + 'id': 3 + } + ]), + completion(equals([ + {'jsonrpc': '2.0', 'result': 'foo', 'id': 1}, + {'jsonrpc': '2.0', 'result': 'value', 'id': 3} + ]))); + }); + + test('returns nothing if every request is a notification', () { + expect( + controller.handleRequest([ + {'jsonrpc': '2.0', 'method': 'foo'}, + { + 'jsonrpc': '2.0', + 'method': 'id', + 'params': ['value'] + }, + { + 'jsonrpc': '2.0', + 'method': 'arg', + 'params': {'arg': 'value'} + } + ]), + doesNotComplete); + }); + + test('returns an error if the batch is empty', () { + expectErrorResponse(controller, [], error_code.INVALID_REQUEST, + 'A batch must contain at least one request.'); + }); + + test('disallows nested batches', () { + expect( + controller.handleRequest([ + [ + {'jsonrpc': '2.0', 'method': 'foo', 'id': 1} + ] + ]), + completion(equals([ + { + 'jsonrpc': '2.0', + 'id': null, + 'error': { + 'code': error_code.INVALID_REQUEST, + 'message': 'Request must be an Array or an Object.', + 'data': { + 'request': [ + {'jsonrpc': '2.0', 'method': 'foo', 'id': 1} + ] + } + } + } + ]))); + }); +} diff --git a/pkgs/json_rpc_2/test/server/invalid_request_test.dart b/pkgs/json_rpc_2/test/server/invalid_request_test.dart new file mode 100644 index 000000000..4fa4de1ed --- /dev/null +++ b/pkgs/json_rpc_2/test/server/invalid_request_test.dart @@ -0,0 +1,94 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:json_rpc_2/error_code.dart' as error_code; +import 'package:test/test.dart'; + +import 'utils.dart'; + +void main() { + late ServerController controller; + setUp(() => controller = ServerController()); + + test('a non-Array/Object request is invalid', () { + expectErrorResponse(controller, 'foo', error_code.INVALID_REQUEST, + 'Request must be an Array or an Object.'); + }); + + test('requests must have a jsonrpc key', () { + expectErrorResponse(controller, {'method': 'foo', 'id': 1234}, + error_code.INVALID_REQUEST, 'Request must contain a "jsonrpc" key.'); + }); + + test('the jsonrpc version must be 2.0', () { + expectErrorResponse( + controller, + {'jsonrpc': '1.0', 'method': 'foo', 'id': 1234}, + error_code.INVALID_REQUEST, + 'Invalid JSON-RPC version "1.0", expected "2.0".'); + }); + + test('requests must have a method key', () { + expectErrorResponse(controller, {'jsonrpc': '2.0', 'id': 1234}, + error_code.INVALID_REQUEST, 'Request must contain a "method" key.'); + }); + + test('request method must be a string', () { + expectErrorResponse( + controller, + {'jsonrpc': '2.0', 'method': 1234, 'id': 1234}, + error_code.INVALID_REQUEST, + 'Request method must be a string, but was 1234.'); + }); + + test('request params must be an Array or Object', () { + expectErrorResponse( + controller, + {'jsonrpc': '2.0', 'method': 'foo', 'params': 1234, 'id': 1234}, + error_code.INVALID_REQUEST, + 'Request params must be an Array or an Object, but was 1234.'); + }); + + test('request id may not be an Array or Object', () { + expect( + controller.handleRequest({ + 'jsonrpc': '2.0', + 'method': 'foo', + 'id': {'bad': 'id'} + }), + completion(equals({ + 'jsonrpc': '2.0', + 'id': null, + 'error': { + 'code': error_code.INVALID_REQUEST, + 'message': 'Request id must be a string, number, or null, but was ' + '{"bad":"id"}.', + 'data': { + 'request': { + 'jsonrpc': '2.0', + 'method': 'foo', + 'id': {'bad': 'id'} + } + } + } + }))); + }); + + group('strict protocol checks disabled', () { + setUp(() => controller = ServerController(strictProtocolChecks: false)); + + test('and no jsonrpc param', () { + expectErrorResponse(controller, {'method': 'foo', 'id': 1234}, + error_code.METHOD_NOT_FOUND, 'Unknown method "foo".'); + }); + + test('the jsonrpc version must be 2.0', () { + expectErrorResponse( + controller, + {'jsonrpc': '1.0', 'method': 'foo', 'id': 1234}, + error_code.INVALID_REQUEST, + 'Invalid JSON-RPC version "1.0", expected "2.0".'); + }); + }); +} diff --git a/pkgs/json_rpc_2/test/server/parameters_test.dart b/pkgs/json_rpc_2/test/server/parameters_test.dart new file mode 100644 index 000000000..9ecfb1ffa --- /dev/null +++ b/pkgs/json_rpc_2/test/server/parameters_test.dart @@ -0,0 +1,403 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc; +import 'package:test/test.dart'; + +import 'utils.dart'; + +void main() { + group('with named parameters', () { + late json_rpc.Parameters parameters; + setUp(() { + parameters = json_rpc.Parameters('foo', { + 'num': 1.5, + 'int': 1, + 'bool': true, + 'string': 'zap', + 'list': [1, 2, 3], + 'date-time': '1990-01-01 00:00:00.000', + 'uri': 'https://dart.dev', + 'invalid-uri': 'http://[::1', + 'map': {'num': 4.2, 'bool': false} + }); + }); + + test('value returns the wrapped value', () { + expect( + parameters.value, + equals({ + 'num': 1.5, + 'int': 1, + 'bool': true, + 'string': 'zap', + 'list': [1, 2, 3], + 'date-time': '1990-01-01 00:00:00.000', + 'uri': 'https://dart.dev', + 'invalid-uri': 'http://[::1', + 'map': {'num': 4.2, 'bool': false} + })); + }); + + test('[int] throws a parameter error', () { + expect( + () => parameters[0], + throwsInvalidParams('Parameters for method "foo" must be passed by ' + 'position.')); + }); + + test('[].value returns existing parameters', () { + expect(parameters['num'].value, equals(1.5)); + }); + + test('[].valueOr returns existing parameters', () { + expect(parameters['num'].valueOr(7), equals(1.5)); + }); + + test('[].value fails for absent parameters', () { + expect( + () => parameters['fblthp'].value, + throwsInvalidParams('Request for method "foo" is missing required ' + 'parameter "fblthp".')); + }); + + test('[].valueOr succeeds for absent parameters', () { + expect(parameters['fblthp'].valueOr(7), equals(7)); + }); + + test('[].exists returns true for existing parameters', () { + expect(parameters['num'].exists, isTrue); + }); + + test('[].exists returns false for missing parameters', () { + expect(parameters['fblthp'].exists, isFalse); + }); + + test('[].asNum returns numeric parameters', () { + expect(parameters['num'].asNum, equals(1.5)); + expect(parameters['int'].asNum, equals(1)); + }); + + test('[].asNumOr returns numeric parameters', () { + expect(parameters['num'].asNumOr(7), equals(1.5)); + }); + + test('[].asNum fails for non-numeric parameters', () { + expect( + () => parameters['bool'].asNum, + throwsInvalidParams('Parameter "bool" for method "foo" must be a ' + 'number, but was true.')); + }); + + test('[].asNumOr fails for non-numeric parameters', () { + expect( + () => parameters['bool'].asNumOr(7), + throwsInvalidParams('Parameter "bool" for method "foo" must be a ' + 'number, but was true.')); + }); + + test('[].asNum fails for absent parameters', () { + expect( + () => parameters['fblthp'].asNum, + throwsInvalidParams('Request for method "foo" is missing required ' + 'parameter "fblthp".')); + }); + + test('[].asNumOr succeeds for absent parameters', () { + expect(parameters['fblthp'].asNumOr(7), equals(7)); + }); + + test('[].asInt returns integer parameters', () { + expect(parameters['int'].asInt, equals(1)); + }); + + test('[].asIntOr returns integer parameters', () { + expect(parameters['int'].asIntOr(7), equals(1)); + }); + + test('[].asInt fails for non-integer parameters', () { + expect( + () => parameters['bool'].asInt, + throwsInvalidParams('Parameter "bool" for method "foo" must be an ' + 'integer, but was true.')); + }); + + test('[].asIntOr succeeds for absent parameters', () { + expect(parameters['fblthp'].asIntOr(7), equals(7)); + }); + + test('[].asBool returns boolean parameters', () { + expect(parameters['bool'].asBool, isTrue); + }); + + test('[].asBoolOr returns boolean parameters', () { + expect(parameters['bool'].asBoolOr(false), isTrue); + }); + + test('[].asBoolOr fails for non-boolean parameters', () { + expect( + () => parameters['int'].asBool, + throwsInvalidParams('Parameter "int" for method "foo" must be a ' + 'boolean, but was 1.')); + }); + + test('[].asBoolOr succeeds for absent parameters', () { + expect(parameters['fblthp'].asBoolOr(false), isFalse); + }); + + test('[].asString returns string parameters', () { + expect(parameters['string'].asString, equals('zap')); + }); + + test('[].asStringOr returns string parameters', () { + expect(parameters['string'].asStringOr('bap'), equals('zap')); + }); + + test('[].asString fails for non-string parameters', () { + expect( + () => parameters['int'].asString, + throwsInvalidParams('Parameter "int" for method "foo" must be a ' + 'string, but was 1.')); + }); + + test('[].asStringOr succeeds for absent parameters', () { + expect(parameters['fblthp'].asStringOr('bap'), equals('bap')); + }); + + test('[].asList returns list parameters', () { + expect(parameters['list'].asList, equals([1, 2, 3])); + }); + + test('[].asListOr returns list parameters', () { + expect(parameters['list'].asListOr([5, 6, 7]), equals([1, 2, 3])); + }); + + test('[].asList fails for non-list parameters', () { + expect( + () => parameters['int'].asList, + throwsInvalidParams('Parameter "int" for method "foo" must be an ' + 'Array, but was 1.')); + }); + + test('[].asListOr succeeds for absent parameters', () { + expect(parameters['fblthp'].asListOr([5, 6, 7]), equals([5, 6, 7])); + }); + + test('[].asMap returns map parameters', () { + expect(parameters['map'].asMap, equals({'num': 4.2, 'bool': false})); + }); + + test('[].asMapOr returns map parameters', () { + expect( + parameters['map'].asMapOr({}), equals({'num': 4.2, 'bool': false})); + }); + + test('[].asMap fails for non-map parameters', () { + expect( + () => parameters['int'].asMap, + throwsInvalidParams('Parameter "int" for method "foo" must be an ' + 'Object, but was 1.')); + }); + + test('[].asMapOr succeeds for absent parameters', () { + expect(parameters['fblthp'].asMapOr({}), equals({})); + }); + + test('[].asDateTime returns date/time parameters', () { + expect(parameters['date-time'].asDateTime, equals(DateTime(1990))); + }); + + test('[].asDateTimeOr returns date/time parameters', () { + expect(parameters['date-time'].asDateTimeOr(DateTime(2014)), + equals(DateTime(1990))); + }); + + test('[].asDateTime fails for non-date/time parameters', () { + expect( + () => parameters['int'].asDateTime, + throwsInvalidParams('Parameter "int" for method "foo" must be a ' + 'string, but was 1.')); + }); + + test('[].asDateTimeOr succeeds for absent parameters', () { + expect(parameters['fblthp'].asDateTimeOr(DateTime(2014)), + equals(DateTime(2014))); + }); + + test('[].asDateTime fails for non-date/time parameters', () { + expect( + () => parameters['int'].asDateTime, + throwsInvalidParams('Parameter "int" for method "foo" must be a ' + 'string, but was 1.')); + }); + + test('[].asDateTime fails for invalid date/times', () { + expect( + () => parameters['string'].asDateTime, + throwsInvalidParams('Parameter "string" for method "foo" must be a ' + 'valid date/time, but was "zap".\n' + 'Invalid date format')); + }); + + test('[].asUri returns URI parameters', () { + expect(parameters['uri'].asUri, equals(Uri.parse('https://dart.dev'))); + }); + + test('[].asUriOr returns URI parameters', () { + expect(parameters['uri'].asUriOr(Uri.parse('http://google.com')), + equals(Uri.parse('https://dart.dev'))); + }); + + test('[].asUri fails for non-URI parameters', () { + expect( + () => parameters['int'].asUri, + throwsInvalidParams('Parameter "int" for method "foo" must be a ' + 'string, but was 1.')); + }); + + test('[].asUriOr succeeds for absent parameters', () { + expect(parameters['fblthp'].asUriOr(Uri.parse('http://google.com')), + equals(Uri.parse('http://google.com'))); + }); + + test('[].asUri fails for non-URI parameters', () { + expect( + () => parameters['int'].asUri, + throwsInvalidParams('Parameter "int" for method "foo" must be a ' + 'string, but was 1.')); + }); + + test('[].asUri fails for invalid URIs', () { + expect( + () => parameters['invalid-uri'].asUri, + throwsInvalidParams('Parameter "invalid-uri" for method "foo" must ' + 'be a valid URI, but was "http://[::1".\n' + 'Missing end `]` to match `[` in host')); + }); + + group('with a nested parameter map', () { + late json_rpc.Parameter nested; + setUp(() => nested = parameters['map']); + + test('[int] fails with a type error', () { + expect( + () => nested[0], + throwsInvalidParams('Parameter "map" for method "foo" must be an ' + 'Array, but was {"num":4.2,"bool":false}.')); + }); + + test('[].value returns existing parameters', () { + expect(nested['num'].value, equals(4.2)); + expect(nested['bool'].value, isFalse); + }); + + test('[].value fails for absent parameters', () { + expect( + () => nested['fblthp'].value, + throwsInvalidParams('Request for method "foo" is missing required ' + 'parameter map.fblthp.')); + }); + + test('typed getters return correctly-typed parameters', () { + expect(nested['num'].asNum, equals(4.2)); + }); + + test('typed getters fail for incorrectly-typed parameters', () { + expect( + () => nested['bool'].asNum, + throwsInvalidParams('Parameter map.bool for method "foo" must be ' + 'a number, but was false.')); + }); + }); + + group('with a nested parameter list', () { + late json_rpc.Parameter nested; + + setUp(() => nested = parameters['list']); + + test('[string] fails with a type error', () { + expect( + () => nested['foo'], + throwsInvalidParams('Parameter "list" for method "foo" must be an ' + 'Object, but was [1,2,3].')); + }); + + test('[].value returns existing parameters', () { + expect(nested[0].value, equals(1)); + expect(nested[1].value, equals(2)); + }); + + test('[].value fails for absent parameters', () { + expect( + () => nested[5].value, + throwsInvalidParams('Request for method "foo" is missing required ' + 'parameter list[5].')); + }); + + test('typed getters return correctly-typed parameters', () { + expect(nested[0].asInt, equals(1)); + }); + + test('typed getters fail for incorrectly-typed parameters', () { + expect( + () => nested[0].asBool, + throwsInvalidParams('Parameter list[0] for method "foo" must be ' + 'a boolean, but was 1.')); + }); + }); + }); + + group('with positional parameters', () { + late json_rpc.Parameters parameters; + setUp(() => parameters = json_rpc.Parameters('foo', [1, 2, 3, 4, 5])); + + test('value returns the wrapped value', () { + expect(parameters.value, equals([1, 2, 3, 4, 5])); + }); + + test('[string] throws a parameter error', () { + expect( + () => parameters['foo'], + throwsInvalidParams('Parameters for method "foo" must be passed by ' + 'name.')); + }); + + test('[].value returns existing parameters', () { + expect(parameters[2].value, equals(3)); + }); + + test('[].value fails for out-of-range parameters', () { + expect( + () => parameters[10].value, + throwsInvalidParams('Request for method "foo" is missing required ' + 'parameter 11.')); + }); + + test('[].exists returns true for existing parameters', () { + expect(parameters[0].exists, isTrue); + }); + + test('[].exists returns false for missing parameters', () { + expect(parameters[10].exists, isFalse); + }); + }); + + test('with a complex parameter path', () { + var parameters = json_rpc.Parameters('foo', { + 'bar baz': [ + 0, + 1, + 2, + { + 'bang.zap': {'\n': 'qux'} + } + ] + }); + + expect( + () => parameters['bar baz'][3]['bang.zap']['\n']['bip'], + throwsInvalidParams('Parameter "bar baz"[3]."bang.zap"."\\n" for ' + 'method "foo" must be an Object, but was "qux".')); + }); +} diff --git a/pkgs/json_rpc_2/test/server/server_test.dart b/pkgs/json_rpc_2/test/server/server_test.dart new file mode 100644 index 000000000..b3166ceb2 --- /dev/null +++ b/pkgs/json_rpc_2/test/server/server_test.dart @@ -0,0 +1,203 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:convert'; + +import 'package:json_rpc_2/error_code.dart' as error_code; +import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc; +import 'package:test/test.dart'; + +import 'utils.dart'; + +void main() { + late ServerController controller; + + setUp(() => controller = ServerController()); + + test('calls a registered method with the given name', () { + controller.server.registerMethod('foo', (json_rpc.Parameters params) { + return {'params': params.value}; + }); + + expect( + controller.handleRequest({ + 'jsonrpc': '2.0', + 'method': 'foo', + 'params': {'param': 'value'}, + 'id': 1234 + }), + completion(equals({ + 'jsonrpc': '2.0', + 'result': { + 'params': {'param': 'value'} + }, + 'id': 1234 + }))); + }); + + test('calls a method that takes no parameters', () { + controller.server.registerMethod('foo', () => 'foo'); + + expect( + controller + .handleRequest({'jsonrpc': '2.0', 'method': 'foo', 'id': 1234}), + completion(equals({'jsonrpc': '2.0', 'result': 'foo', 'id': 1234}))); + }); + + test('Allows a `null` result', () { + controller.server.registerMethod('foo', () => null); + + expect( + controller + .handleRequest({'jsonrpc': '2.0', 'method': 'foo', 'id': 1234}), + completion(equals({'jsonrpc': '2.0', 'result': null, 'id': 1234}))); + }); + + test('a method that takes no parameters rejects parameters', () { + controller.server.registerMethod('foo', () => 'foo'); + + expectErrorResponse( + controller, + { + 'jsonrpc': '2.0', + 'method': 'foo', + 'params': {}, + 'id': 1234 + }, + error_code.INVALID_PARAMS, + 'No parameters are allowed for method "foo".'); + }); + + test('an unexpected error in a method is captured', () { + controller.server + .registerMethod('foo', () => throw const FormatException('bad format')); + + expect( + controller + .handleRequest({'jsonrpc': '2.0', 'method': 'foo', 'id': 1234}), + completion({ + 'jsonrpc': '2.0', + 'id': 1234, + 'error': { + 'code': error_code.SERVER_ERROR, + 'message': 'bad format', + 'data': { + 'request': {'jsonrpc': '2.0', 'method': 'foo', 'id': 1234}, + 'full': 'FormatException: bad format', + 'stack': isA() + } + } + })); + }); + + test('doesn\'t return a result for a notification', () { + controller.server.registerMethod('foo', (args) => 'result'); + + expect( + controller.handleRequest( + {'jsonrpc': '2.0', 'method': 'foo', 'params': {}}), + doesNotComplete); + }); + + test('includes the error data in the response', () { + controller.server.registerMethod('foo', (params) { + throw json_rpc.RpcException(5, 'Error message.', data: 'data value'); + }); + + expectErrorResponse( + controller, + { + 'jsonrpc': '2.0', + 'method': 'foo', + 'params': {}, + 'id': 1234 + }, + 5, + 'Error message.', + data: 'data value'); + }); + + test('a JSON parse error is rejected', () { + return controller.handleJsonRequest('invalid json {').then((result) { + expect(jsonDecode(result), { + 'jsonrpc': '2.0', + 'error': { + 'code': error_code.PARSE_ERROR, + 'message': startsWith('Invalid JSON: '), + // TODO(nweiz): Always expect the source when sdk#25655 is fixed. + 'data': { + 'request': anyOf([isNull, 'invalid json {']) + } + }, + 'id': null + }); + }); + }); + + group('fallbacks', () { + test('calls a fallback if no method matches', () { + controller.server + ..registerMethod('foo', () => 'foo') + ..registerMethod('bar', () => 'foo') + ..registerFallback((params) => {'fallback': params.value}); + + expect( + controller.handleRequest({ + 'jsonrpc': '2.0', + 'method': 'baz', + 'params': {'param': 'value'}, + 'id': 1234 + }), + completion(equals({ + 'jsonrpc': '2.0', + 'result': { + 'fallback': {'param': 'value'} + }, + 'id': 1234 + }))); + }); + + test('calls the first matching fallback', () { + controller.server + ..registerFallback((params) => + throw json_rpc.RpcException.methodNotFound(params.method)) + ..registerFallback((params) => 'fallback 2') + ..registerFallback((params) => 'fallback 3'); + + expect( + controller.handleRequest( + {'jsonrpc': '2.0', 'method': 'fallback 2', 'id': 1234}), + completion( + equals({'jsonrpc': '2.0', 'result': 'fallback 2', 'id': 1234}))); + }); + + test('an unexpected error in a fallback is captured', () { + controller.server + .registerFallback((_) => throw const FormatException('bad format')); + + expect( + controller + .handleRequest({'jsonrpc': '2.0', 'method': 'foo', 'id': 1234}), + completion({ + 'jsonrpc': '2.0', + 'id': 1234, + 'error': { + 'code': error_code.SERVER_ERROR, + 'message': 'bad format', + 'data': { + 'request': {'jsonrpc': '2.0', 'method': 'foo', 'id': 1234}, + 'full': 'FormatException: bad format', + 'stack': isA() + } + } + })); + }); + }); + + test('disallows multiple methods with the same name', () { + controller.server.registerMethod('foo', () => null); + expect(() => controller.server.registerMethod('foo', () => null), + throwsArgumentError); + }); +} diff --git a/pkgs/json_rpc_2/test/server/stream_test.dart b/pkgs/json_rpc_2/test/server/stream_test.dart new file mode 100644 index 000000000..832e13c7a --- /dev/null +++ b/pkgs/json_rpc_2/test/server/stream_test.dart @@ -0,0 +1,84 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; + +import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc; +import 'package:stream_channel/stream_channel.dart'; +import 'package:test/test.dart'; + +void main() { + late StreamController requestController; + late StreamController responseController; + late json_rpc.Server server; + + setUp(() { + requestController = StreamController(); + responseController = StreamController(); + server = json_rpc.Server.withoutJson( + StreamChannel(requestController.stream, responseController.sink)); + }); + + test('.withoutJson supports decoded stream and sink', () { + server.listen(); + + server.registerMethod('foo', (json_rpc.Parameters params) { + return {'params': params.value}; + }); + + requestController.add({ + 'jsonrpc': '2.0', + 'method': 'foo', + 'params': {'param': 'value'}, + 'id': 1234 + }); + + expect( + responseController.stream.first, + completion(equals({ + 'jsonrpc': '2.0', + 'result': { + 'params': {'param': 'value'} + }, + 'id': 1234 + }))); + }); + + test('.listen returns when the controller is closed', () { + var hasListenCompeted = false; + expect(server.listen().then((_) => hasListenCompeted = true), completes); + + return pumpEventQueue().then((_) { + expect(hasListenCompeted, isFalse); + + // This should cause listen to complete. + return requestController.close(); + }); + }); + + test('.listen returns a stream error', () { + expect(server.listen(), throwsA('oh no')); + requestController.addError('oh no'); + }); + + test('.listen can\'t be called twice', () { + server.listen(); + + expect(() => server.listen(), throwsStateError); + }); + + test('.close cancels the stream subscription and closes the sink', () { + // Work around sdk#19095. + responseController.stream.listen(null); + + expect(server.listen(), completes); + + expect(server.isClosed, isFalse); + expect(server.close(), completes); + expect(server.isClosed, isTrue); + + expect(() => requestController.stream.listen((_) {}), throwsStateError); + expect(responseController.isClosed, isTrue); + }); +} diff --git a/pkgs/json_rpc_2/test/server/utils.dart b/pkgs/json_rpc_2/test/server/utils.dart new file mode 100644 index 000000000..c94628e50 --- /dev/null +++ b/pkgs/json_rpc_2/test/server/utils.dart @@ -0,0 +1,70 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:convert'; + +import 'package:json_rpc_2/error_code.dart' as error_code; +import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc; +import 'package:stream_channel/stream_channel.dart'; +import 'package:test/test.dart'; + +/// A controller used to test a [json_rpc.Server]. +class ServerController { + /// The controller for the server's request stream. + final _requestController = StreamController(); + + /// The controller for the server's response sink. + final _responseController = StreamController(); + + /// The server. + late final json_rpc.Server server; + + ServerController( + {json_rpc.ErrorCallback? onUnhandledError, + bool strictProtocolChecks = true}) { + server = json_rpc.Server( + StreamChannel(_requestController.stream, _responseController.sink), + onUnhandledError: onUnhandledError, + strictProtocolChecks: strictProtocolChecks); + server.listen(); + } + + /// Passes [request], a decoded request, to [server] and returns its decoded + /// response. + Future handleRequest(Object? request) => + handleJsonRequest(jsonEncode(request)).then(jsonDecode); + + /// Passes [request], a JSON-encoded request, to [server] and returns its + /// encoded response. + Future handleJsonRequest(String request) { + _requestController.add(request); + return _responseController.stream.first; + } +} + +/// Expects that [controller]'s server will return an error response to +/// [request] with the given [errorCode], [message], and [data]. +void expectErrorResponse( + ServerController controller, Object? request, int errorCode, String message, + {Object? data}) { + dynamic id; + if (request is Map) id = request['id']; + data ??= {'request': request}; + + expect( + controller.handleRequest(request), + completion(equals({ + 'jsonrpc': '2.0', + 'id': id, + 'error': {'code': errorCode, 'message': message, 'data': data} + }))); +} + +/// Returns a matcher that matches a [json_rpc.RpcException] with an +/// `invalid_params` error code. +Matcher throwsInvalidParams(String message) => + throwsA(isA() + .having((e) => e.code, 'code', error_code.INVALID_PARAMS) + .having((e) => e.message, 'message', message));