`, and ``.
-@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
-@font-family-base: @font-family-sans-serif;
-
-@font-size-base: 13px;
-@font-size-large: ceil((@font-size-base * 1.25)); // ~18px
-@font-size-small: ceil((@font-size-base * 0.85)); // ~12px
-
-@font-size-h1: 56px;
-@font-size-h2: 45px;
-@font-size-h3: 34px;
-@font-size-h4: 24px;
-@font-size-h5: 20px;
-@font-size-h6: 14px;
-
-//** Unit-less `line-height` for use in components like buttons.
-@line-height-base: 1.846; // 20/14
-//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
-@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px
-
-//** By default, this inherits from the ``.
-@headings-font-family: inherit;
-@headings-font-weight: 400;
-@headings-line-height: 1.1;
-@headings-color: #444;
-
-
-//== Iconography
-//
-//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
-
-//** Load fonts from this directory.
-@icon-font-path: "../fonts/";
-//** File name for all font files.
-@icon-font-name: "glyphicons-halflings-regular";
-//** Element ID within SVG icon file.
-@icon-font-svg-id: "glyphicons_halflingsregular";
-
-
-//== Components
-//
-//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
-
-@padding-base-vertical: 6px;
-@padding-base-horizontal: 16px;
-
-@padding-large-vertical: 10px;
-@padding-large-horizontal: 16px;
-
-@padding-small-vertical: 5px;
-@padding-small-horizontal: 10px;
-
-@padding-xs-vertical: 1px;
-@padding-xs-horizontal: 5px;
-
-@line-height-large: 1.3333333; // extra decimals for Win 8.1 Chrome
-@line-height-small: 1.5;
-
-@border-radius-base: 3px;
-@border-radius-large: 3px;
-@border-radius-small: 3px;
-
-//** Global color for active items (e.g., navs or dropdowns).
-@component-active-color: #fff;
-//** Global background color for active items (e.g., navs or dropdowns).
-@component-active-bg: @brand-primary;
-
-//** Width of the `border` for generating carets that indicate dropdowns.
-@caret-width-base: 4px;
-//** Carets increase slightly in size for larger components.
-@caret-width-large: 5px;
-
-
-//== Tables
-//
-//## Customizes the `.table` component with basic values, each used across all table variations.
-
-//** Padding for ``s and ` `s.
-@table-cell-padding: 8px;
-//** Padding for cells in `.table-condensed`.
-@table-condensed-cell-padding: 5px;
-
-//** Default background color used for all tables.
-@table-bg: transparent;
-//** Background color used for `.table-striped`.
-@table-bg-accent: #f9f9f9;
-//** Background color used for `.table-hover`.
-@table-bg-hover: #f5f5f5;
-@table-bg-active: @table-bg-hover;
-
-//** Border color for table and cell borders.
-@table-border-color: #ddd;
-
-
-//== Buttons
-//
-//## For each of Bootstrap's buttons, define text, background and border color.
-
-@btn-font-weight: normal;
-
-@btn-default-color: #444;
-@btn-default-bg: #fff;
-@btn-default-border: transparent;
-
-@btn-primary-color: #fff;
-@btn-primary-bg: @brand-primary;
-@btn-primary-border: transparent;
-
-@btn-success-color: #fff;
-@btn-success-bg: @brand-success;
-@btn-success-border: transparent;
-
-@btn-info-color: #fff;
-@btn-info-bg: @brand-info;
-@btn-info-border: transparent;
-
-@btn-warning-color: #fff;
-@btn-warning-bg: @brand-warning;
-@btn-warning-border: transparent;
-
-@btn-danger-color: #fff;
-@btn-danger-bg: @brand-danger;
-@btn-danger-border: transparent;
-
-@btn-link-disabled-color: @gray-light;
-
-// Allows for customizing button radius independently from global border radius
-@btn-border-radius-base: @border-radius-base;
-@btn-border-radius-large: @border-radius-large;
-@btn-border-radius-small: @border-radius-small;
-
-
-//== Forms
-//
-//##
-
-//** ` ` background color
-@input-bg: transparent;
-//** ` ` background color
-@input-bg-disabled: transparent;
-
-//** Text color for ` `s
-@input-color: @gray;
-//** ` ` border color
-@input-border: transparent;
-
-// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
-//** Default `.form-control` border radius
-// This has no effect on ``s in some browsers, due to the limited stylability of ``s in CSS.
-@input-border-radius: @border-radius-base;
-//** Large `.form-control` border radius
-@input-border-radius-large: @border-radius-large;
-//** Small `.form-control` border radius
-@input-border-radius-small: @border-radius-small;
-
-//** Border color for inputs on focus
-@input-border-focus: #66afe9;
-
-//** Placeholder text color
-@input-color-placeholder: @gray-light;
-
-//** Default `.form-control` height
-@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
-//** Large `.form-control` height
-@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
-//** Small `.form-control` height
-@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
-
-//** `.form-group` margin
-@form-group-margin-bottom: 15px;
-
-@legend-color: @gray-dark;
-@legend-border-color: #e5e5e5;
-
-//** Background color for textual input addons
-@input-group-addon-bg: transparent;
-//** Border color for textual input addons
-@input-group-addon-border-color: @input-border;
-
-//** Disabled cursor for form controls and buttons.
-@cursor-disabled: not-allowed;
-
-
-//== Dropdowns
-//
-//## Dropdown menu container and contents.
-
-//** Background for the dropdown menu.
-@dropdown-bg: #fff;
-//** Dropdown menu `border-color`.
-@dropdown-border: rgba(0,0,0,.15);
-//** Dropdown menu `border-color` **for IE8**.
-@dropdown-fallback-border: #ccc;
-//** Divider color for between dropdown items.
-@dropdown-divider-bg: #e5e5e5;
-
-//** Dropdown link text color.
-@dropdown-link-color: @text-color;
-//** Hover color for dropdown links.
-@dropdown-link-hover-color: darken(@gray-dark, 5%);
-//** Hover background for dropdown links.
-@dropdown-link-hover-bg: @gray-lighter;
-
-//** Active dropdown menu item text color.
-@dropdown-link-active-color: @component-active-color;
-//** Active dropdown menu item background color.
-@dropdown-link-active-bg: @component-active-bg;
-
-//** Disabled dropdown menu item background color.
-@dropdown-link-disabled-color: @gray-light;
-
-//** Text color for headers within dropdown menus.
-@dropdown-header-color: @gray-light;
-
-//** Deprecated `@dropdown-caret-color` as of v3.1.0
-@dropdown-caret-color: @gray-light;
-
-
-//-- Z-index master list
-//
-// Warning: Avoid customizing these values. They're used for a bird's eye view
-// of components dependent on the z-axis and are designed to all work together.
-//
-// Note: These variables are not generated into the Customizer.
-
-@zindex-navbar: 1000;
-@zindex-dropdown: 1000;
-@zindex-popover: 1060;
-@zindex-tooltip: 1070;
-@zindex-navbar-fixed: 1030;
-@zindex-modal-background: 1040;
-@zindex-modal: 1050;
-
-
-//== Media queries breakpoints
-//
-//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
-
-// Extra small screen / phone
-//** Deprecated `@screen-xs` as of v3.0.1
-@screen-xs: 480px;
-//** Deprecated `@screen-xs-min` as of v3.2.0
-@screen-xs-min: @screen-xs;
-//** Deprecated `@screen-phone` as of v3.0.1
-@screen-phone: @screen-xs-min;
-
-// Small screen / tablet
-//** Deprecated `@screen-sm` as of v3.0.1
-@screen-sm: 768px;
-@screen-sm-min: @screen-sm;
-//** Deprecated `@screen-tablet` as of v3.0.1
-@screen-tablet: @screen-sm-min;
-
-// Medium screen / desktop
-//** Deprecated `@screen-md` as of v3.0.1
-@screen-md: 992px;
-@screen-md-min: @screen-md;
-//** Deprecated `@screen-desktop` as of v3.0.1
-@screen-desktop: @screen-md-min;
-
-// Large screen / wide desktop
-//** Deprecated `@screen-lg` as of v3.0.1
-@screen-lg: 1200px;
-@screen-lg-min: @screen-lg;
-//** Deprecated `@screen-lg-desktop` as of v3.0.1
-@screen-lg-desktop: @screen-lg-min;
-
-// So media queries don't overlap when required, provide a maximum
-@screen-xs-max: (@screen-sm-min - 1);
-@screen-sm-max: (@screen-md-min - 1);
-@screen-md-max: (@screen-lg-min - 1);
-
-
-//== Grid system
-//
-//## Define your custom responsive grid.
-
-//** Number of columns in the grid.
-@grid-columns: 12;
-//** Padding between columns. Gets divided in half for the left and right.
-@grid-gutter-width: 30px;
-// Navbar collapse
-//** Point at which the navbar becomes uncollapsed.
-@grid-float-breakpoint: @screen-sm-min;
-//** Point at which the navbar begins collapsing.
-@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
-
-
-//== Container sizes
-//
-//## Define the maximum width of `.container` for different screen sizes.
-
-// Small screen / tablet
-@container-tablet: (720px + @grid-gutter-width);
-//** For `@screen-sm-min` and up.
-@container-sm: @container-tablet;
-
-// Medium screen / desktop
-@container-desktop: (940px + @grid-gutter-width);
-//** For `@screen-md-min` and up.
-@container-md: @container-desktop;
-
-// Large screen / wide desktop
-@container-large-desktop: (1140px + @grid-gutter-width);
-//** For `@screen-lg-min` and up.
-@container-lg: @container-large-desktop;
-
-
-//== Navbar
-//
-//##
-
-// Basics of a navbar
-@navbar-height: 64px;
-@navbar-margin-bottom: @line-height-computed;
-@navbar-border-radius: @border-radius-base;
-@navbar-padding-horizontal: floor((@grid-gutter-width / 2));
-@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
-@navbar-collapse-max-height: 340px;
-
-@navbar-default-color: @gray-light;
-@navbar-default-bg: #fff;
-@navbar-default-border: transparent;
-
-// Navbar links
-@navbar-default-link-color: @gray;
-@navbar-default-link-hover-color: @gray-dark;
-@navbar-default-link-hover-bg: transparent;
-@navbar-default-link-active-color: @gray-dark;
-@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%);
-@navbar-default-link-disabled-color: #ccc;
-@navbar-default-link-disabled-bg: transparent;
-
-// Navbar brand label
-@navbar-default-brand-color: @navbar-default-link-color;
-@navbar-default-brand-hover-color: @navbar-default-link-hover-color;
-@navbar-default-brand-hover-bg: transparent;
-
-// Navbar toggle
-@navbar-default-toggle-hover-bg: transparent;
-@navbar-default-toggle-icon-bar-bg: rgba(0,0,0,0.5);
-@navbar-default-toggle-border-color: transparent;
-
-
-//=== Inverted navbar
-// Reset inverted navbar basics
-@navbar-inverse-color: @gray-light;
-@navbar-inverse-bg: @brand-primary;
-@navbar-inverse-border: transparent;
-
-// Inverted navbar links
-@navbar-inverse-link-color: lighten(@brand-primary, 30%);
-@navbar-inverse-link-hover-color: #fff;
-@navbar-inverse-link-hover-bg: transparent;
-@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;
-@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%);
-@navbar-inverse-link-disabled-color: #444;
-@navbar-inverse-link-disabled-bg: transparent;
-
-// Inverted navbar brand label
-@navbar-inverse-brand-color: @navbar-inverse-link-color;
-@navbar-inverse-brand-hover-color: #fff;
-@navbar-inverse-brand-hover-bg: transparent;
-
-// Inverted navbar toggle\
-@navbar-inverse-toggle-hover-bg: transparent;
-@navbar-inverse-toggle-icon-bar-bg: rgba(0,0,0,0.5);
-@navbar-inverse-toggle-border-color: transparent;
-
-
-//== Navs
-//
-//##
-
-//=== Shared nav styles
-@nav-link-padding: 10px 15px;
-@nav-link-hover-bg: @gray-lighter;
-
-@nav-disabled-link-color: @gray-light;
-@nav-disabled-link-hover-color: @gray-light;
-
-//== Tabs
-@nav-tabs-border-color: transparent;
-
-@nav-tabs-link-hover-border-color: @gray-lighter;
-
-@nav-tabs-active-link-hover-bg: transparent;
-@nav-tabs-active-link-hover-color: @gray;
-@nav-tabs-active-link-hover-border-color: transparent;
-
-@nav-tabs-justified-link-border-color: @nav-tabs-border-color;
-@nav-tabs-justified-active-link-border-color: @body-bg;
-
-//== Pills
-@nav-pills-border-radius: @border-radius-base;
-@nav-pills-active-link-hover-bg: @component-active-bg;
-@nav-pills-active-link-hover-color: @component-active-color;
-
-
-//== Pagination
-//
-//##
-
-@pagination-color: @link-color;
-@pagination-bg: #fff;
-@pagination-border: #ddd;
-
-@pagination-hover-color: @link-hover-color;
-@pagination-hover-bg: @gray-lighter;
-@pagination-hover-border: #ddd;
-
-@pagination-active-color: #fff;
-@pagination-active-bg: @brand-primary;
-@pagination-active-border: @brand-primary;
-
-@pagination-disabled-color: @gray-light;
-@pagination-disabled-bg: #fff;
-@pagination-disabled-border: #ddd;
-
-
-//== Pager
-//
-//##
-
-@pager-bg: @pagination-bg;
-@pager-border: @pagination-border;
-@pager-border-radius: 15px;
-
-@pager-hover-bg: @pagination-hover-bg;
-
-@pager-active-bg: @pagination-active-bg;
-@pager-active-color: @pagination-active-color;
-
-@pager-disabled-color: @pagination-disabled-color;
-
-
-//== Jumbotron
-//
-//##
-
-@jumbotron-padding: 30px;
-@jumbotron-color: inherit;
-@jumbotron-bg: #f5f5f5;
-@jumbotron-heading-color: @headings-color;
-@jumbotron-font-size: ceil((@font-size-base * 1.5));
-@jumbotron-heading-font-size: ceil((@font-size-base * 4.5));
-
-
-//== Form states and alerts
-//
-//## Define colors for form feedback states and, by default, alerts.
-
-@state-success-text: @brand-success;
-@state-success-bg: #dff0d8;
-@state-success-border: darken(spin(@state-success-bg, -10), 5%);
-
-@state-info-text: @brand-info;
-@state-info-bg: #e1bee7;
-@state-info-border: darken(spin(@state-info-bg, -10), 7%);
-
-@state-warning-text: @brand-warning;
-@state-warning-bg: #ffe0b2;
-@state-warning-border: darken(spin(@state-warning-bg, -10), 5%);
-
-@state-danger-text: @brand-danger;
-@state-danger-bg: #f9bdbb;
-@state-danger-border: darken(spin(@state-danger-bg, -10), 5%);
-
-
-//== Tooltips
-//
-//##
-
-//** Tooltip max width
-@tooltip-max-width: 200px;
-//** Tooltip text color
-@tooltip-color: #fff;
-//** Tooltip background color
-@tooltip-bg: #727272;
-@tooltip-opacity: .9;
-
-//** Tooltip arrow width
-@tooltip-arrow-width: 5px;
-//** Tooltip arrow color
-@tooltip-arrow-color: @tooltip-bg;
-
-
-//== Popovers
-//
-//##
-
-//** Popover body background color
-@popover-bg: #fff;
-//** Popover maximum width
-@popover-max-width: 276px;
-//** Popover border color
-@popover-border-color: transparent;
-//** Popover fallback border color
-@popover-fallback-border-color: transparent;
-
-//** Popover title background color
-@popover-title-bg: darken(@popover-bg, 3%);
-
-//** Popover arrow width
-@popover-arrow-width: 10px;
-//** Popover arrow color
-@popover-arrow-color: @popover-bg;
-
-//** Popover outer arrow width
-@popover-arrow-outer-width: (@popover-arrow-width + 1);
-//** Popover outer arrow color
-@popover-arrow-outer-color: fadein(@popover-border-color, 12%);
-//** Popover outer arrow fallback color
-@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%);
-
-
-//== Labels
-//
-//##
-
-//** Default label background color
-@label-default-bg: @gray-light;
-//** Primary label background color
-@label-primary-bg: @brand-primary;
-//** Success label background color
-@label-success-bg: @brand-success;
-//** Info label background color
-@label-info-bg: @brand-info;
-//** Warning label background color
-@label-warning-bg: @brand-warning;
-//** Danger label background color
-@label-danger-bg: @brand-danger;
-
-//** Default label text color
-@label-color: #fff;
-//** Default text color of a linked label
-@label-link-hover-color: #fff;
-
-
-//== Modals
-//
-//##
-
-//** Padding applied to the modal body
-@modal-inner-padding: 15px;
-
-//** Padding applied to the modal title
-@modal-title-padding: 15px;
-//** Modal title line-height
-@modal-title-line-height: @line-height-base;
-
-//** Background color of modal content area
-@modal-content-bg: #fff;
-//** Modal content border color
-@modal-content-border-color: transparent;
-//** Modal content border color **for IE8**
-@modal-content-fallback-border-color: #999;
-
-//** Modal backdrop background color
-@modal-backdrop-bg: #000;
-//** Modal backdrop opacity
-@modal-backdrop-opacity: .5;
-//** Modal header border color
-@modal-header-border-color: transparent;
-//** Modal footer border color
-@modal-footer-border-color: @modal-header-border-color;
-
-@modal-lg: 900px;
-@modal-md: 600px;
-@modal-sm: 300px;
-
-
-//== Alerts
-//
-//## Define alert colors, border radius, and padding.
-
-@alert-padding: 15px;
-@alert-border-radius: @border-radius-base;
-@alert-link-font-weight: bold;
-
-@alert-success-bg: @state-success-bg;
-@alert-success-text: @state-success-text;
-@alert-success-border: @state-success-border;
-
-@alert-info-bg: @state-info-bg;
-@alert-info-text: @state-info-text;
-@alert-info-border: @state-info-border;
-
-@alert-warning-bg: @state-warning-bg;
-@alert-warning-text: @state-warning-text;
-@alert-warning-border: @state-warning-border;
-
-@alert-danger-bg: @state-danger-bg;
-@alert-danger-text: @state-danger-text;
-@alert-danger-border: @state-danger-border;
-
-
-//== Progress bars
-//
-//##
-
-//** Background color of the whole progress component
-@progress-bg: #f5f5f5;
-//** Progress bar text color
-@progress-bar-color: #fff;
-//** Variable for setting rounded corners on progress bar.
-@progress-border-radius: @border-radius-base;
-
-//** Default progress bar color
-@progress-bar-bg: @brand-primary;
-//** Success progress bar color
-@progress-bar-success-bg: @brand-success;
-//** Warning progress bar color
-@progress-bar-warning-bg: @brand-warning;
-//** Danger progress bar color
-@progress-bar-danger-bg: @brand-danger;
-//** Info progress bar color
-@progress-bar-info-bg: @brand-info;
-
-
-//== List group
-//
-//##
-
-//** Background color on `.list-group-item`
-@list-group-bg: #fff;
-//** `.list-group-item` border color
-@list-group-border: #ddd;
-//** List group border radius
-@list-group-border-radius: @border-radius-base;
-
-//** Background color of single list items on hover
-@list-group-hover-bg: #f5f5f5;
-//** Text color of active list items
-@list-group-active-color: @component-active-color;
-//** Background color of active list items
-@list-group-active-bg: @component-active-bg;
-//** Border color of active list elements
-@list-group-active-border: @list-group-active-bg;
-//** Text color for content within active list items
-@list-group-active-text-color: lighten(@list-group-active-bg, 40%);
-
-//** Text color of disabled list items
-@list-group-disabled-color: @gray-light;
-//** Background color of disabled list items
-@list-group-disabled-bg: @gray-lighter;
-//** Text color for content within disabled list items
-@list-group-disabled-text-color: @list-group-disabled-color;
-
-@list-group-link-color: #555;
-@list-group-link-hover-color: @list-group-link-color;
-@list-group-link-heading-color: #333;
-
-
-//== Panels
-//
-//##
-
-@panel-bg: #fff;
-@panel-body-padding: 15px;
-@panel-heading-padding: 10px 15px;
-@panel-footer-padding: @panel-heading-padding;
-@panel-border-radius: @border-radius-base;
-
-//** Border color for elements within panels
-@panel-inner-border: #ddd;
-@panel-footer-bg: #f5f5f5;
-
-@panel-default-text: @gray-dark;
-@panel-default-border: #ddd;
-@panel-default-heading-bg: #f5f5f5;
-
-@panel-primary-text: #fff;
-@panel-primary-border: @brand-primary;
-@panel-primary-heading-bg: @brand-primary;
-
-@panel-success-text: #fff;
-@panel-success-border: @state-success-border;
-@panel-success-heading-bg: @brand-success;
-
-@panel-info-text: #fff;
-@panel-info-border: @state-info-border;
-@panel-info-heading-bg: @brand-info;
-
-@panel-warning-text: #fff;
-@panel-warning-border: @state-warning-border;
-@panel-warning-heading-bg: @brand-warning;
-
-@panel-danger-text: #fff;
-@panel-danger-border: @state-danger-border;
-@panel-danger-heading-bg: @brand-danger;
-
-
-//== Thumbnails
-//
-//##
-
-//** Padding around the thumbnail image
-@thumbnail-padding: 4px;
-//** Thumbnail background color
-@thumbnail-bg: @body-bg;
-//** Thumbnail border color
-@thumbnail-border: #ddd;
-//** Thumbnail border radius
-@thumbnail-border-radius: @border-radius-base;
-
-//** Custom text color for thumbnail captions
-@thumbnail-caption-color: @text-color;
-//** Padding around the thumbnail caption
-@thumbnail-caption-padding: 9px;
-
-
-//== Wells
-//
-//##
-
-@well-bg: #f5f5f5;
-@well-border: transparent;
-
-
-//== Badges
-//
-//##
-
-@badge-color: #fff;
-//** Linked badge text color on hover
-@badge-link-hover-color: #fff;
-@badge-bg: @gray-light;
-
-//** Badge text color in active nav link
-@badge-active-color: @link-color;
-//** Badge background color in active nav link
-@badge-active-bg: #fff;
-
-@badge-font-weight: normal;
-@badge-line-height: 1;
-@badge-border-radius: 10px;
-
-
-//== Breadcrumbs
-//
-//##
-
-@breadcrumb-padding-vertical: 8px;
-@breadcrumb-padding-horizontal: 15px;
-//** Breadcrumb background color
-@breadcrumb-bg: #f5f5f5;
-//** Breadcrumb text color
-@breadcrumb-color: #ccc;
-//** Text color of current page in the breadcrumb
-@breadcrumb-active-color: @gray-light;
-//** Textual separator for between breadcrumb elements
-@breadcrumb-separator: "/";
-
-
-//== Carousel
-//
-//##
-
-@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
-
-@carousel-control-color: #fff;
-@carousel-control-width: 15%;
-@carousel-control-opacity: .5;
-@carousel-control-font-size: 20px;
-
-@carousel-indicator-active-bg: #fff;
-@carousel-indicator-border-color: #fff;
-
-@carousel-caption-color: #fff;
-
-
-//== Close
-//
-//##
-
-@close-font-weight: normal;
-@close-color: #000;
-@close-text-shadow: none;
-
-
-//== Code
-//
-//##
-
-@code-color: #c7254e;
-@code-bg: #f9f2f4;
-
-@kbd-color: #fff;
-@kbd-bg: #333;
-
-@pre-bg: #f5f5f5;
-@pre-color: @gray-dark;
-@pre-border-color: #ccc;
-@pre-scrollable-max-height: 340px;
-
-
-//== Type
-//
-//##
-
-//** Horizontal offset for forms and lists.
-@component-offset-horizontal: 180px;
-//** Text muted color
-@text-muted: @gray-light;
-//** Abbreviations and acronyms border color
-@abbr-border-color: @gray-light;
-//** Headings small color
-@headings-small-color: @gray-light;
-//** Blockquote small color
-@blockquote-small-color: @gray-light;
-//** Blockquote font size
-@blockquote-font-size: (@font-size-base * 1.25);
-//** Blockquote border color
-@blockquote-border-color: @gray-lighter;
-//** Page header border color
-@page-header-border-color: @gray-lighter;
-//** Width of horizontal description list titles
-@dl-horizontal-offset: @component-offset-horizontal;
-//** Point at which .dl-horizontal becomes horizontal
-@dl-horizontal-breakpoint: @grid-float-breakpoint;
-//** Horizontal line color.
-@hr-border: @gray-lighter;
\ No newline at end of file
diff --git a/public/less/admin/settings.less b/public/less/admin/settings.less
deleted file mode 100644
index b4fe92432e..0000000000
--- a/public/less/admin/settings.less
+++ /dev/null
@@ -1,35 +0,0 @@
-.settings {
- > .row {
- margin-bottom: 30px;
- }
-
- .section-content {
- border-left: 3px solid @brand-primary;
-
- ul {
- list-style-type: none;
- font-size: 16px;
- padding-left: 20px;
- }
- }
-
- [data-action="upload"][type="text"] {
- width: 95%;
- }
-
- .bootstrap-tagsinput {
- width: 100%;
- border: 0;
- box-shadow: none;
- padding-left: 0;
-
- input {
- width: 100%;
- margin-left: 1px;
- margin-top: 9px;
- border-bottom: 1px dotted #ccc !important;
- padding-bottom: 5px;
- padding-left: 0;
- }
- }
-}
\ No newline at end of file
diff --git a/public/less/generics.less b/public/less/generics.less
deleted file mode 100644
index ec8b0c1adf..0000000000
--- a/public/less/generics.less
+++ /dev/null
@@ -1,184 +0,0 @@
-.define-if-not-set() {
- @gray-base: #000;
- @gray-darker: lighten(@gray-base, 13.5%); // #222
- @gray-dark: lighten(@gray-base, 20%); // #333
- @gray: lighten(@gray-base, 33.5%); // #555
- @gray-light: lighten(@gray-base, 46.7%); // #777
- @gray-lighter: lighten(@gray-base, 93.5%); // #eee
-
- @brand-primary: darken(#428bca, 6.5%); // #337ab7
- @brand-success: #5cb85c;
- @brand-info: #5bc0de;
- @brand-warning: #f0ad4e;
- @brand-danger: #d9534f;
-}
-
-.define-if-not-set();
-
-#move_thread_modal .category-list {
- height: 500px;
- overflow-y: auto;
- overflow-x: hidden;
-}
-
-.topic-watch-dropdown {
- .help-text {
- margin-left: 20px;
- }
-}
-
-.category-list {
- padding: 0;
-
- li {
- .inline-block;
- .pointer;
- padding: 0.5em;
- margin: 0.25em;
- .border-radius(3px);
-
- &.disabled {
- background-color: #888!important;
- opacity: 0.5;
- }
- }
-}
-
-.user-list {
- padding-left: 2rem;
- padding-top: 1rem;
-
- li {
- .pointer;
- display: inline-block;
- list-style-type: none;
- padding: 0.5rem 1rem;
-
- &:hover {
- background: #eee;
- }
-
- .avatar {
- float: left;
- margin-right: 1rem;
- }
-
- span {
- vertical-align: middle;
- display: inline-block;
- }
- }
-}
-
-.user-icon {
- display: inline-block;
- text-align: center;
- color: @gray-lighter;
- font-weight: normal;
- vertical-align: middle;
- overflow: hidden; /* stops alt text from overflowing past boundaries if image does not load */
- white-space: nowrap;
-
- &:before {
- content: '';
- display: inline-block;
- height: 100%;
- vertical-align: middle;
- }
-}
-
-.avatar {
- /* Contains the user icon class as a mixin, so there's no need to include that in the template */
- .user-icon;
-
- &.avatar-xs {
- width: 16px;
- height: 16px;
- .user-icon-style(16px, 1rem);
- }
-
- &.avatar-sm {
- width: 24px;
- height: 24px;
- .user-icon-style(24px, 1.5rem);
- }
-
- &.avatar-sm2x {
- width: 48px;
- height: 48px;
- .user-icon-style(48px, 1.5rem);
- }
-
- &.avatar-md {
- width: 32px;
- height: 32px;
- .user-icon-style(32px, 1.5rem);
- }
-
- &.avatar-lg {
- width: 64px;
- height: 64px;
- .user-icon-style(64px, 4rem);
- }
-
- &.avatar-xl {
- width: 128px;
- height: 128px;
- .user-icon-style(128px, 7.5rem);
- }
-
- &.avatar-rounded {
- border-radius: 50%;
- }
-}
-
-.ban-modal {
- .form-inline, .form-group {
- width: 100%;
- }
-
- .units {
- line-height: 5rem;
- }
-}
-
-.admin .ban-modal .units {
- line-height: 1.846;
-}
-
-#crop-picture-modal {
- #cropped-image {
- max-width: 100%;
- }
-
- .cropper-container.cropper-bg {
- max-width: 100%;
- }
-}
-
-.necro-post {
- color: rgba(127,127,127,.5);
- font-size: 1.5em;
- margin-bottom: 20px;
- text-align: center;
- text-transform: uppercase;
-}
-
-.timeline-event {
- display: flex;
- align-items: center;
- justify-content: center;
-
- .timeline-badge {
- padding: 1rem;
- }
-}
-
-.imagedrop {
- position: absolute;
- text-align: center;
- font-size: 24px;
- color: @gray-light;
- width: 100%;
- display: none;
-}
\ No newline at end of file
diff --git a/public/less/jquery-ui.less b/public/less/jquery-ui.less
deleted file mode 100644
index 1f6e7ae03c..0000000000
--- a/public/less/jquery-ui.less
+++ /dev/null
@@ -1,10 +0,0 @@
-@import (inline) 'jquery-ui/themes/base/core.css';
-@import (inline) 'jquery-ui/themes/base/menu.css';
-@import (inline) 'jquery-ui/themes/base/button.css';
-@import (inline) 'jquery-ui/themes/base/datepicker.css';
-@import (inline) 'jquery-ui/themes/base/autocomplete.css';
-@import (inline) 'jquery-ui/themes/base/resizable.css';
-@import (inline) 'jquery-ui/themes/base/selectable.css';
-@import (inline) 'jquery-ui/themes/base/draggable.css';
-@import (inline) 'jquery-ui/themes/base/sortable.css';
-@import (inline) 'jquery-ui/themes/base/theme.css';
diff --git a/public/less/mixins.less b/public/less/mixins.less
deleted file mode 100644
index 04259bb089..0000000000
--- a/public/less/mixins.less
+++ /dev/null
@@ -1,80 +0,0 @@
-.no-select {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.pointer {
- cursor: pointer;
- *cursor: hand;
-}
-
-.inline-block {
- display: inline-block;
- *display: inline;
- zoom: 1;
-}
-
-.clear {
- clear: both;
-}
-
-.zebra {
- &:nth-child(even) {
- background: rgba(191,191,191,0.2);
- }
-
- &:nth-child(odd) {
- background: rgba(223,223,223,0.2);
- }
-}
-
-.border-radius (@radius: 5px) {
- -webkit-border-radius: @radius;
- -moz-border-radius: @radius;
- -ms-border-radius: @radius;
- -o-border-radius: @radius;
- border-radius: @radius;
-}
-
-.text-ellipsis {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.fix-lists {
- ul {
- > li {
- list-style-type: disc;
-
- ul > li {
- list-style-type: circle;
-
- ul > li {
- list-style-type: square;
- }
- }
- }
- }
-
- > ul, > ol {
- margin-bottom: 10px;
- }
-}
-
-.user-icon-style(@size: 32px, @font-size: 1.5rem, @border-radius: inherit) {
- border-radius: @border-radius;
- width: @size;
- height: @size;
- line-height: @size;
- font-size: @font-size;
-}
-
-.box-shadow(@shadow) {
- -webkit-box-shadow: @shadow;
- box-shadow: @shadow;
-}
\ No newline at end of file
diff --git a/public/openapi/components/schemas/CommonProps.yaml b/public/openapi/components/schemas/CommonProps.yaml
index 8428791791..bf8572b286 100644
--- a/public/openapi/components/schemas/CommonProps.yaml
+++ b/public/openapi/components/schemas/CommonProps.yaml
@@ -4,6 +4,9 @@ CommonProps:
loggedIn:
type: boolean
description: True if user is logged in, false otherwise
+ loggedInUser:
+ type: object
+ description: The logged in user object
relative_path:
type: string
description: |
@@ -65,6 +68,10 @@ CommonProps:
type: string
as:
type: string
+ crossorigin:
+ type: string
+ enum: ['', 'anonymous', 'use-credentials']
+ description: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin
required:
- rel
- href
diff --git a/public/openapi/components/schemas/FlagObject.yaml b/public/openapi/components/schemas/FlagObject.yaml
index 388ae7f2a9..7c488198d3 100644
--- a/public/openapi/components/schemas/FlagObject.yaml
+++ b/public/openapi/components/schemas/FlagObject.yaml
@@ -165,8 +165,13 @@ FlagNotesObject:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
+ displayname:
+ type: string
+ description: This is either username or fullname depending on forum and user settings
+ example: Dragon Fruit
picture:
type: string
+ nullable: true
uid:
type: number
description: A user identifier
diff --git a/public/openapi/components/schemas/NotificationFilters.yaml b/public/openapi/components/schemas/NotificationFilters.yaml
new file mode 100644
index 0000000000..03eae4325d
--- /dev/null
+++ b/public/openapi/components/schemas/NotificationFilters.yaml
@@ -0,0 +1,23 @@
+FiltersObject:
+ type: object
+ properties:
+ name:
+ type: string
+ filter:
+ type: string
+ selected:
+ type: boolean
+ count:
+ type: number
+ required:
+ - name
+ - filter
+FiltersArray:
+ type: array
+ items:
+ anyOf:
+ - $ref: '#/FiltersObject'
+ - type: object
+ properties:
+ separator:
+ type: boolean
\ No newline at end of file
diff --git a/public/openapi/components/schemas/Pagination.yaml b/public/openapi/components/schemas/Pagination.yaml
index 290eb95971..f9b79408cc 100644
--- a/public/openapi/components/schemas/Pagination.yaml
+++ b/public/openapi/components/schemas/Pagination.yaml
@@ -1,64 +1,77 @@
+PaginationProps:
+ allOf:
+ - type: object
+ description: Optional properties that may or may not be present (except for `page`, which is always present, and is only here as a hack to pass validation)
+ properties:
+ page:
+ type: number
+ qs:
+ type: string
+ required:
+ - cid
Pagination:
type: object
properties:
pagination:
- type: object
- properties:
- prev:
- type: object
- properties:
- page:
- type: number
- active:
- type: boolean
- next:
- type: object
+ allOf:
+ - $ref: '#/PaginationProps'
+ - type: object
properties:
- page:
+ prev:
+ type: object
+ properties:
+ page:
+ type: number
+ active:
+ type: boolean
+ next:
+ type: object
+ properties:
+ page:
+ type: number
+ active:
+ type: boolean
+ first:
+ type: object
+ properties:
+ page:
+ type: number
+ active:
+ type: boolean
+ last:
+ type: object
+ properties:
+ page:
+ type: number
+ active:
+ type: boolean
+ rel:
+ type: array
+ description: A collection of objects used to build the link tags pointing to adjacent pages, if any.
+ items:
+ type: object
+ properties:
+ rel:
+ type: string
+ enum: [prev, next]
+ href:
+ type: string
+ description: A query string that points to the previous or next page
+ pages:
+ type: array
+ items:
+ type: object
+ properties:
+ page:
+ type: number
+ description: The current page
+ active:
+ type: boolean
+ description: If the page noted in this array is the current page
+ qs:
+ type: string
+ description: A query string that points to the page noted in this array
+ currentPage:
type: number
- active:
- type: boolean
- first:
- type: object
- properties:
- page:
- type: number
- active:
- type: boolean
- last:
- type: object
- properties:
- page:
- type: number
- active:
- type: boolean
- rel:
- type: array
- description: A collection of objects used to build the link tags pointing to adjacent pages, if any.
- items:
- type: object
- properties:
- rel:
- type: string
- enum: [prev, next]
- href:
- type: string
- description: A query string that points to the previous or next page
- pages:
- type: array
- items:
- type: object
- properties:
- page:
- type: number
- description: The current page
- active:
- type: boolean
- description: If the page noted in this array is the current page
- qs:
- type: string
- description: A query string that points to the page noted in this array
- currentPage:
- type: number
- pageCount:
- type: number
\ No newline at end of file
+ pageCount:
+ type: number
\ No newline at end of file
diff --git a/public/openapi/components/schemas/TopicObject.yaml b/public/openapi/components/schemas/TopicObject.yaml
index 64de19aeb8..ad337379f7 100644
--- a/public/openapi/components/schemas/TopicObject.yaml
+++ b/public/openapi/components/schemas/TopicObject.yaml
@@ -265,6 +265,9 @@ TopicObjectSlim:
name:
type: string
description: The topic thumbnail filename
+ path:
+ type: string
+ description: Path to topic thumbnail without upload_url prefix
url:
type: string
description: Relative path to the topic thumbnail
diff --git a/public/openapi/components/schemas/UserObject.yaml b/public/openapi/components/schemas/UserObject.yaml
index 593ba63fd9..3b40834f73 100644
--- a/public/openapi/components/schemas/UserObject.yaml
+++ b/public/openapi/components/schemas/UserObject.yaml
@@ -133,6 +133,15 @@ UserObject:
example:
- administrators
- Staff
+ muted:
+ type: boolean
+ description: Whether or not the user has been muted.
+ mutedUntil:
+ type: number
+ description: A UNIX timestamp representing the moment a muted state will be lifted.
+ mutedReason:
+ type: string
+ description: The admin-provided reason for being muted.
'icon:text':
type: string
description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar
@@ -322,6 +331,17 @@ UserObjectFull:
example:
- administrators
- Staff
+ muted:
+ type: boolean
+ description: Whether or not the user has been muted.
+ mutedUntil:
+ type: number
+ description: A UNIX timestamp representing the moment a muted state will be lifted.
+ nullable: true
+ mutedReason:
+ type: string
+ description: The admin-provided reason for being muted.
+ nullable: true
'icon:text':
type: string
description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar
@@ -348,6 +368,8 @@ UserObjectFull:
type: string
age:
type: number
+ emailHidden:
+ type: boolean
emailClass:
type: string
ips:
@@ -361,6 +383,8 @@ UserObjectFull:
properties:
best:
type: number
+ controversial:
+ type: number
blocks:
type: number
bookmarks:
@@ -413,6 +437,8 @@ UserObjectFull:
type: boolean
canBan:
type: boolean
+ canMute:
+ type: boolean
canFlag:
type: boolean
canChangePassword:
@@ -425,10 +451,22 @@ UserObjectFull:
type: number
showHidden:
type: boolean
+ allowProfilePicture:
+ type: boolean
+ allowCoverPicture:
+ type: boolean
+ allowProfileImageUploads:
+ type: number
+ allowedProfileImageExtensions:
+ type: string
groups:
type: array
items:
$ref: ./GroupObject.yaml#/GroupFullObject
+ selectedGroup:
+ type: array
+ items:
+ $ref: ./GroupObject.yaml#/GroupFullObject
disableSignatures:
type: boolean
reputation:disabled:
@@ -444,6 +482,9 @@ UserObjectFull:
type: string
route:
type: string
+ url:
+ type: string
+ description: The relative path to the profile link route from the root of the forum
name:
type: string
visibility:
@@ -659,3 +700,53 @@ UserObjectACP:
nullable: true
ips:
type: array
+BanMuteArray:
+ type: array
+ items:
+ type: object
+ properties:
+ uid:
+ type: number
+ timestamp:
+ type: number
+ expire:
+ type: number
+ fromUid:
+ type: number
+ user:
+ type: object
+ properties:
+ username:
+ type: string
+ description: A friendly name for a given user account
+ userslug:
+ type: string
+ description: An URL-safe variant of the username (i.e. lower-cased, spaces
+ removed, etc.)
+ picture:
+ type: string
+ uid:
+ type: number
+ description: A user identifier
+ icon:text:
+ type: string
+ description: A single-letter representation of a username. This is used in the
+ auto-generated icon given to users without
+ an avatar
+ icon:bgColor:
+ type: string
+ description: A six-character hexadecimal colour code assigned to the user. This
+ value is used in conjunction with
+ `icon:text` for the user's auto-generated
+ icon
+ example: "#f44336"
+ until:
+ type: number
+ untilReadable:
+ type: string
+ timestampReadable:
+ type: string
+ timestampISO:
+ type: string
+ reason:
+ type: string
\ No newline at end of file
diff --git a/public/openapi/read.yaml b/public/openapi/read.yaml
index ce6c0936fe..91a1fdfbb1 100644
--- a/public/openapi/read.yaml
+++ b/public/openapi/read.yaml
@@ -182,14 +182,6 @@ paths:
$ref: 'read/user/username/username.yaml'
"/api/user/email/{email}":
$ref: 'read/user/email/email.yaml'
- "/api/user/{userslug}/export/posts":
- $ref: 'read/user/userslug/export/posts.yaml'
- "/api/user/{userslug}/export/uploads":
- $ref: 'read/user/userslug/export/uploads.yaml'
- "/api/user/{userslug}/export/profile":
- $ref: 'read/user/userslug/export/profile.yaml'
- "/api/user/uid/{userslug}/export/{type}":
- $ref: 'read/user/uid/userslug/export/type.yaml'
/api/categories:
$ref: 'read/categories.yaml'
"/api/categories/{cid}/moderators":
diff --git a/public/openapi/read/admin/advanced/cache.yaml b/public/openapi/read/admin/advanced/cache.yaml
index c6daf4fbea..62217e50ae 100644
--- a/public/openapi/read/admin/advanced/cache.yaml
+++ b/public/openapi/read/admin/advanced/cache.yaml
@@ -20,83 +20,105 @@ get:
allOf:
- type: object
properties:
- postCache:
+ caches:
type: object
properties:
- length:
- type: number
- max:
- type: number
- nullable: true
- itemCount:
- type: number
- percentFull:
- type: number
- hits:
- type: string
- misses:
- type: string
- hitRatio:
- type: string
- enabled:
- type: boolean
- groupCache:
- type: object
- properties:
- length:
- type: number
- max:
- type: number
- itemCount:
- type: number
- percentFull:
- type: number
- hits:
- type: string
- misses:
- type: string
- hitRatio:
- type: string
- enabled:
- type: boolean
- localCache:
- type: object
- properties:
- length:
- type: number
- max:
- type: number
- itemCount:
- type: number
- percentFull:
- type: number
- hits:
- type: string
- misses:
- type: string
- hitRatio:
- type: string
- enabled:
- type: boolean
- objectCache:
- type: object
- properties:
- length:
- type: number
- max:
- type: number
- itemCount:
- type: number
- percentFull:
- type: number
- hits:
- type: string
- misses:
- type: string
- hitRatio:
- type: string
- enabled:
- type: boolean
+ postCache:
+ type: object
+ properties:
+ length:
+ type: number
+ max:
+ type: number
+ nullable: true
+ maxSize:
+ type: number
+ itemCount:
+ type: number
+ percentFull:
+ type: number
+ hits:
+ type: string
+ misses:
+ type: string
+ hitRatio:
+ type: string
+ enabled:
+ type: boolean
+ ttl:
+ type: number
+ groupCache:
+ type: object
+ properties:
+ length:
+ type: number
+ max:
+ type: number
+ nullable: true
+ maxSize:
+ type: number
+ itemCount:
+ type: number
+ percentFull:
+ type: number
+ hits:
+ type: string
+ misses:
+ type: string
+ hitRatio:
+ type: string
+ enabled:
+ type: boolean
+ ttl:
+ type: number
+ localCache:
+ type: object
+ properties:
+ length:
+ type: number
+ max:
+ type: number
+ nullable: true
+ maxSize:
+ type: number
+ itemCount:
+ type: number
+ percentFull:
+ type: number
+ hits:
+ type: string
+ misses:
+ type: string
+ hitRatio:
+ type: string
+ enabled:
+ type: boolean
+ ttl:
+ type: number
+ objectCache:
+ type: object
+ properties:
+ length:
+ type: number
+ max:
+ type: number
+ nullable: true
+ maxSize:
+ type: number
+ itemCount:
+ type: number
+ percentFull:
+ type: number
+ hits:
+ type: string
+ misses:
+ type: string
+ hitRatio:
+ type: string
+ enabled:
+ type: boolean
+ ttl:
+ type: number
required:
- postCache
- groupCache
diff --git a/public/openapi/read/admin/advanced/events.yaml b/public/openapi/read/admin/advanced/events.yaml
index 72ce4be7e2..362dec53c2 100644
--- a/public/openapi/read/admin/advanced/events.yaml
+++ b/public/openapi/read/admin/advanced/events.yaml
@@ -59,6 +59,8 @@ get:
type: string
selected:
type: boolean
+ count:
+ type: number
query:
additionalProperties:
description: An object containing the query string parameters, if any
diff --git a/public/openapi/read/admin/dashboard.yaml b/public/openapi/read/admin/dashboard.yaml
index a281150473..a416d51b56 100644
--- a/public/openapi/read/admin/dashboard.yaml
+++ b/public/openapi/read/admin/dashboard.yaml
@@ -60,5 +60,16 @@ get:
description: An ISO 8601 formatted date string (complementing `timestamp`)
showSystemControls:
type: boolean
+ popularSearches:
+ type: array
+ items:
+ type: object
+ properties:
+ value:
+ type: string
+ description: The search term
+ score:
+ type: number
+ description: How many times it has been queried
- $ref: ../../components/schemas/admin/dashboard.yaml#/Stats
- $ref: ../../components/schemas/CommonProps.yaml#/CommonProps
\ No newline at end of file
diff --git a/public/openapi/read/admin/dashboard/searches.yaml b/public/openapi/read/admin/dashboard/searches.yaml
index 7097c8bcb8..1fda6f8423 100644
--- a/public/openapi/read/admin/dashboard/searches.yaml
+++ b/public/openapi/read/admin/dashboard/searches.yaml
@@ -1,7 +1,7 @@
get:
tags:
- admin
- summary: Get detailed user registration analytics
+ summary: Get detailed search analytics
responses:
"200":
description: A JSON object containing popular searches.
@@ -22,4 +22,12 @@ get:
score:
type: number
description: Number of times this string has been searched
+ startDate:
+ type: string
+ description: A UNIX timestamp of the start date
+ nullable: true
+ endDate:
+ type: string
+ description: A UNIX timestamp of the end date
+ nullable: true
- $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps
\ No newline at end of file
diff --git a/public/openapi/read/admin/dashboard/topics.yaml b/public/openapi/read/admin/dashboard/topics.yaml
index 2a787893c1..7b3ffab7b7 100644
--- a/public/openapi/read/admin/dashboard/topics.yaml
+++ b/public/openapi/read/admin/dashboard/topics.yaml
@@ -1,10 +1,10 @@
get:
tags:
- admin
- summary: Get detailed user registration analytics
+ summary: Get detailed topic creation analytics
responses:
"200":
- description: A JSON object containing more detailed analytics related to user registrations.
+ description: A JSON object containing more detailed analytics related to topic creations.
content:
application/json:
schema:
diff --git a/public/openapi/read/admin/development/info.yaml b/public/openapi/read/admin/development/info.yaml
index 23d277fc3f..493958b564 100644
--- a/public/openapi/read/admin/development/info.yaml
+++ b/public/openapi/read/admin/development/info.yaml
@@ -64,12 +64,7 @@ get:
uptimeHumanReadable:
type: string
cpuUsage:
- type: object
- properties:
- user:
- type: string
- system:
- type: string
+ type: number
os:
type: object
properties:
@@ -90,6 +85,8 @@ get:
type: string
totalmem:
type: string
+ usedmem:
+ type: string
nodebb:
type: object
properties:
diff --git a/public/openapi/read/admin/extend/plugins.yaml b/public/openapi/read/admin/extend/plugins.yaml
index 8613d267fb..cd36a779fa 100644
--- a/public/openapi/read/admin/extend/plugins.yaml
+++ b/public/openapi/read/admin/extend/plugins.yaml
@@ -72,6 +72,8 @@ get:
type: number
inactiveCount:
type: number
+ canChangeState:
+ type: boolean
upgradeCount:
type: number
download:
diff --git a/public/openapi/read/admin/manage/admins-mods.yaml b/public/openapi/read/admin/manage/admins-mods.yaml
index ba922850e9..c5db50d839 100644
--- a/public/openapi/read/admin/manage/admins-mods.yaml
+++ b/public/openapi/read/admin/manage/admins-mods.yaml
@@ -97,11 +97,11 @@ get:
type: array
items:
$ref: ../../../components/schemas/UserObject.yaml#/UserObjectSlim
+ subCategoryCount:
+ type: number
selectedCategory:
- $ref: ../../../components/schemas/CategoryObject.yaml#/CategoryObject
- allPrivileges:
- type: array
- items:
- type: string
- description: A simple array containing user privilege names (used client-side when giving mod privilege)
+ nullable: true
+ anyOf:
+ - $ref: ../../../components/schemas/CategoryObject.yaml#/CategoryObject
+ - $ref: ../../../components/schemas/Pagination.yaml#/Pagination
- $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps
\ No newline at end of file
diff --git a/public/openapi/read/admin/manage/categories.yaml b/public/openapi/read/admin/manage/categories.yaml
index 7cfc8753ff..36b8d4f9a8 100644
--- a/public/openapi/read/admin/manage/categories.yaml
+++ b/public/openapi/read/admin/manage/categories.yaml
@@ -49,5 +49,11 @@ get:
children:
type: array
description: Array of children categories
+ subCategoriesLeft:
+ type: number
+ hasMoreSubCategories:
+ type: boolean
+ showMorePage:
+ type: number
- $ref: ../../../components/schemas/Pagination.yaml#/Pagination
- $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps
\ No newline at end of file
diff --git a/public/openapi/read/admin/manage/privileges/cid.yaml b/public/openapi/read/admin/manage/privileges/cid.yaml
index 2ef7c8d891..75aad276fc 100644
--- a/public/openapi/read/admin/manage/privileges/cid.yaml
+++ b/public/openapi/read/admin/manage/privileges/cid.yaml
@@ -119,4 +119,6 @@ get:
description: A category identifier
group:
type: string
+ isAdminPriv:
+ type: boolean
- $ref: ../../../../components/schemas/CommonProps.yaml#/CommonProps
\ No newline at end of file
diff --git a/public/openapi/read/admin/settings/navigation.yaml b/public/openapi/read/admin/settings/navigation.yaml
index 9f75f9aa28..05ffbc6bf7 100644
--- a/public/openapi/read/admin/settings/navigation.yaml
+++ b/public/openapi/read/admin/settings/navigation.yaml
@@ -87,11 +87,18 @@ get:
type: string
displayName:
type: string
- properties:
- type: object
- properties:
- targetBlank:
- type: boolean
+ targetBlank:
+ type: boolean
+ required:
+ - id
+ - route
+ - title
+ - enabled
+ - iconClass
+ - textClass
+ - text
+ - core
+ - groups
groups:
type: array
items:
diff --git a/public/openapi/read/categories.yaml b/public/openapi/read/categories.yaml
index 74e2a9d486..278ab8a7c1 100644
--- a/public/openapi/read/categories.yaml
+++ b/public/openapi/read/categories.yaml
@@ -193,6 +193,9 @@ get:
description: An ISO 8601 formatted date string (complementing `timestamp`)
pid:
type: number
+ index:
+ type: number
+ description: The index of the post
topic:
type: object
properties:
@@ -200,6 +203,32 @@ get:
type: string
title:
type: string
+ user:
+ type: object
+ properties:
+ uid:
+ type: number
+ example: 1
+ username:
+ type: string
+ example: Dragon Fruit
+ userslug:
+ type: string
+ example: dragon-fruit
+ picture:
+ type: string
+ example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80'
+ nullable: true
+ displayname:
+ type: string
+ description: This is either username or fullname depending on forum and user settings
+ example: Dragon Fruit
+ 'icon:text':
+ type: string
+ example: D
+ 'icon:bgColor':
+ type: string
+ example: '#9c27b0'
imageClass:
type: string
- $ref: ../components/schemas/Pagination.yaml#/Pagination
diff --git a/public/openapi/read/category/category_id.yaml b/public/openapi/read/category/category_id.yaml
index 10a8523774..2735ce5e90 100644
--- a/public/openapi/read/category/category_id.yaml
+++ b/public/openapi/read/category/category_id.yaml
@@ -99,6 +99,16 @@ get:
type: number
reputation:disabled:
type: number
+ selectedTag:
+ type: object
+ properties:
+ label:
+ type: string
+ nullable: true
+ selectedTags:
+ type: array
+ items:
+ type: string
- $ref: ../../components/schemas/Pagination.yaml#/Pagination
- $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: ../../components/schemas/CommonProps.yaml#/CommonProps
\ No newline at end of file
diff --git a/public/openapi/read/config.yaml b/public/openapi/read/config.yaml
index 2d8d2ff07b..bd7c1e8853 100644
--- a/public/openapi/read/config.yaml
+++ b/public/openapi/read/config.yaml
@@ -17,6 +17,8 @@ get:
type: string
assetBaseUrl:
type: string
+ asset_base_url:
+ type: string
siteTitle:
type: string
browserTitle:
@@ -100,6 +102,10 @@ get:
type: string
searchEnabled:
type: boolean
+ searchDefaultInQuick:
+ type: string
+ disableCustomUserSkins:
+ type: boolean
bootswatchSkin:
type: string
enablePostHistory:
@@ -145,4 +151,123 @@ get:
items:
type: string
description: A valid CSS colour code
- example: '#fff'
\ No newline at end of file
+ example: '#fff'
+ emailPrompt:
+ type: number
+ useragent:
+ type: object
+ properties:
+ isYaBrowser:
+ type: boolean
+ isAuthoritative:
+ type: boolean
+ isMobile:
+ type: boolean
+ isMobileNative:
+ type: boolean
+ isTablet:
+ type: boolean
+ isiPad:
+ type: boolean
+ isiPod:
+ type: boolean
+ isiPhone:
+ type: boolean
+ isiPhoneNative:
+ type: boolean
+ isAndroid:
+ type: boolean
+ isAndroidNative:
+ type: boolean
+ isBlackberry:
+ type: boolean
+ isOpera:
+ type: boolean
+ isIE:
+ type: boolean
+ isEdge:
+ type: boolean
+ isIECompatibilityMode:
+ type: boolean
+ isSafari:
+ type: boolean
+ isFirefox:
+ type: boolean
+ isWebkit:
+ type: boolean
+ isChrome:
+ type: boolean
+ isKonqueror:
+ type: boolean
+ isOmniWeb:
+ type: boolean
+ isSeaMonkey:
+ type: boolean
+ isFlock:
+ type: boolean
+ isAmaya:
+ type: boolean
+ isPhantomJS:
+ type: boolean
+ isEpiphany:
+ type: boolean
+ isDesktop:
+ type: boolean
+ isWindows:
+ type: boolean
+ isLinux:
+ type: boolean
+ isLinux64:
+ type: boolean
+ isMac:
+ type: boolean
+ isChromeOS:
+ type: boolean
+ isBada:
+ type: boolean
+ isSamsung:
+ type: boolean
+ isRaspberry:
+ type: boolean
+ isBot:
+ type: boolean
+ isCurl:
+ type: boolean
+ isAndroidTablet:
+ type: boolean
+ isWinJs:
+ type: boolean
+ isKindleFire:
+ type: boolean
+ isSilk:
+ type: boolean
+ isCaptive:
+ type: boolean
+ isSmartTV:
+ type: boolean
+ isUC:
+ type: boolean
+ isFacebook:
+ type: boolean
+ isAlamoFire:
+ type: boolean
+ isElectron:
+ type: boolean
+ silkAccelerated:
+ type: boolean
+ browser:
+ type: string
+ version:
+ type: string
+ os:
+ type: string
+ platform:
+ type: string
+ geoIp:
+ type: object
+ source:
+ type: string
+ isWechat:
+ type: boolean
+ composer-default:
+ type: object
diff --git a/public/openapi/read/confirm/code.yaml b/public/openapi/read/confirm/code.yaml
index c3e75649b8..9d55b016c1 100644
--- a/public/openapi/read/confirm/code.yaml
+++ b/public/openapi/read/confirm/code.yaml
@@ -2,6 +2,14 @@ get:
tags:
- authentication
summary: Verify an email address
+ parameters:
+ - in: path
+ name: code
+ schema:
+ type: string
+ required: true
+ description: a valid confirmation code
+ example: f8c4a54a-47ae-40f5-a0a5-356d6a35c24e
responses:
"200":
description: Email address verified, or confirmation code was incorrect
diff --git a/public/openapi/read/flags.yaml b/public/openapi/read/flags.yaml
index 696a61afab..b354f09226 100644
--- a/public/openapi/read/flags.yaml
+++ b/public/openapi/read/flags.yaml
@@ -42,6 +42,9 @@ get:
assignee:
type: string
nullable: true
+ count:
+ type: number
+ description: The count of returned flags (irrespective of the page count or number of flags per page).
analytics:
type: array
items:
@@ -71,6 +74,105 @@ get:
bgColor:
type: string
nullable: true
+ selected:
+ type: object
+ properties:
+ assignee:
+ type: array
+ items:
+ type: object
+ properties:
+ uid:
+ type: number
+ description: A user identifier
+ username:
+ type: string
+ description: A friendly name for a given user account
+ userslug:
+ type: string
+ description: An URL-safe variant of the username (i.e. lower-cased, spaces
+ removed, etc.)
+ displayname:
+ type: string
+ picture:
+ nullable: true
+ type: string
+ icon:text:
+ type: string
+ description: A single-letter representation of a username. This is used in the
+ auto-generated icon given to users without
+ an avatar
+ icon:bgColor:
+ type: string
+ description: A six-character hexadecimal colour code assigned to the user. This
+ value is used in conjunction with
+ `icon:text` for the user's auto-generated
+ icon
+ example: "#f44336"
+ reporterId:
+ type: array
+ items:
+ type: object
+ properties:
+ uid:
+ type: number
+ description: A user identifier
+ username:
+ type: string
+ description: A friendly name for a given user account
+ userslug:
+ type: string
+ description: An URL-safe variant of the username (i.e. lower-cased, spaces
+ removed, etc.)
+ displayname:
+ type: string
+ picture:
+ nullable: true
+ type: string
+ icon:text:
+ type: string
+ description: A single-letter representation of a username. This is used in the
+ auto-generated icon given to users without
+ an avatar
+ icon:bgColor:
+ type: string
+ description: A six-character hexadecimal colour code assigned to the user. This
+ value is used in conjunction with
+ `icon:text` for the user's auto-generated
+ icon
+ example: "#f44336"
+ targetUid:
+ type: array
+ items:
+ type: object
+ properties:
+ uid:
+ type: number
+ description: A user identifier
+ username:
+ type: string
+ description: A friendly name for a given user account
+ userslug:
+ type: string
+ description: An URL-safe variant of the username (i.e. lower-cased, spaces
+ removed, etc.)
+ displayname:
+ type: string
+ picture:
+ nullable: true
+ type: string
+ icon:text:
+ type: string
+ description: A single-letter representation of a username. This is used in the
+ auto-generated icon given to users without
+ an avatar
+ icon:bgColor:
+ type: string
+ description: A six-character hexadecimal colour code assigned to the user. This
+ value is used in conjunction with
+ `icon:text` for the user's auto-generated
+ icon
+ example: "#f44336"
- $ref: ../components/schemas/Pagination.yaml#/Pagination
- $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: ../components/schemas/CommonProps.yaml#/CommonProps
\ No newline at end of file
diff --git a/public/openapi/read/flags/flagId.yaml b/public/openapi/read/flags/flagId.yaml
index 0939124937..509d5e5204 100644
--- a/public/openapi/read/flags/flagId.yaml
+++ b/public/openapi/read/flags/flagId.yaml
@@ -42,5 +42,39 @@ get:
additionalProperties:
description: "A list of global and admin privileges, and whether the calling user has (or has inherited) them"
type: boolean
+ states:
+ type: object
+ properties:
+ open:
+ type: object
+ properties:
+ label:
+ type: string
+ class:
+ type: string
+ wip:
+ type: object
+ properties:
+ label:
+ type: string
+ class:
+ type: string
+ resolved:
+ type: object
+ properties:
+ label:
+ type: string
+ class:
+ type: string
+ rejected:
+ type: object
+ properties:
+ label:
+ type: string
+ class:
+ type: string
+ additionalProperties:
+ type: object
+ description: Plugins are able to add additional flag states, and so their values would also be present here if so.
- $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: ../../components/schemas/CommonProps.yaml#/CommonProps
\ No newline at end of file
diff --git a/public/openapi/read/groups.yaml b/public/openapi/read/groups.yaml
index 8fc121708b..68173fed4f 100644
--- a/public/openapi/read/groups.yaml
+++ b/public/openapi/read/groups.yaml
@@ -101,6 +101,8 @@ get:
type: boolean
allowGroupCreation:
type: boolean
+ sort:
+ type: string
nextStart:
type: number
title:
diff --git a/public/openapi/read/index.yaml b/public/openapi/read/index.yaml
index 4e6c6e446b..41848f596b 100644
--- a/public/openapi/read/index.yaml
+++ b/public/openapi/read/index.yaml
@@ -195,6 +195,9 @@ get:
description: An ISO 8601 formatted date string (complementing `timestamp`)
pid:
type: number
+ index:
+ type: number
+ description: The index of the post
topic:
type: object
properties:
@@ -202,6 +205,32 @@ get:
type: string
title:
type: string
+ user:
+ type: object
+ properties:
+ uid:
+ type: number
+ example: 1
+ username:
+ type: string
+ example: Dragon Fruit
+ userslug:
+ type: string
+ example: dragon-fruit
+ picture:
+ type: string
+ example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80'
+ nullable: true
+ displayname:
+ type: string
+ description: This is either username or fullname depending on forum and user settings
+ example: Dragon Fruit
+ 'icon:text':
+ type: string
+ example: D
+ 'icon:bgColor':
+ type: string
+ example: '#9c27b0'
imageClass:
type: string
- $ref: ../components/schemas/Pagination.yaml#/Pagination
diff --git a/public/openapi/read/notifications.yaml b/public/openapi/read/notifications.yaml
index 59acc0ad62..14c0d054ce 100644
--- a/public/openapi/read/notifications.yaml
+++ b/public/openapi/read/notifications.yaml
@@ -69,42 +69,13 @@ get:
readClass:
type: string
filters:
- type: array
- items:
- type: object
- additionalProperties: {}
+ $ref: ../components/schemas/NotificationFilters.yaml#/FiltersArray
regularFilters:
- type: array
- items:
- type: object
- properties:
- name:
- type: string
- filter:
- type: string
- selected:
- type: boolean
- required:
- - name
- - filter
+ $ref: ../components/schemas/NotificationFilters.yaml#/FiltersArray
moderatorFilters:
- type: array
- items:
- type: object
- properties:
- name:
- type: string
- filter:
- type: string
+ $ref: ../components/schemas/NotificationFilters.yaml#/FiltersArray
selectedFilter:
- type: object
- properties:
- name:
- type: string
- filter:
- type: string
- selected:
- type: boolean
+ $ref: ../components/schemas/NotificationFilters.yaml#/FiltersObject
title:
type: string
- $ref: ../components/schemas/Pagination.yaml#/Pagination
diff --git a/public/openapi/read/popular.yaml b/public/openapi/read/popular.yaml
index 4d870249f6..67c7d5030f 100644
--- a/public/openapi/read/popular.yaml
+++ b/public/openapi/read/popular.yaml
@@ -48,6 +48,16 @@ get:
type: array
items:
type: number
+ selectedTag:
+ type: object
+ properties:
+ label:
+ type: string
+ nullable: true
+ selectedTags:
+ type: array
+ items:
+ type: string
feeds:disableRSS:
type: number
rssFeedUrl:
diff --git a/public/openapi/read/post-queue.yaml b/public/openapi/read/post-queue.yaml
index fa200b6d6a..35bace62d0 100644
--- a/public/openapi/read/post-queue.yaml
+++ b/public/openapi/read/post-queue.yaml
@@ -162,6 +162,10 @@ get:
titleRaw:
type: string
- $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject
+ isAdmin:
+ type: boolean
+ canAccept:
+ type: boolean
enabled:
type: number
singlePost:
diff --git a/public/openapi/read/recent.yaml b/public/openapi/read/recent.yaml
index 4e019cf157..74d3d91a27 100644
--- a/public/openapi/read/recent.yaml
+++ b/public/openapi/read/recent.yaml
@@ -46,6 +46,16 @@ get:
type: array
items:
type: number
+ selectedTag:
+ type: object
+ properties:
+ label:
+ type: string
+ nullable: true
+ selectedTags:
+ type: array
+ items:
+ type: string
feeds:disableRSS:
type: number
rssFeedUrl:
diff --git a/public/openapi/read/search.yaml b/public/openapi/read/search.yaml
index 9ada567f59..6e36fc3891 100644
--- a/public/openapi/read/search.yaml
+++ b/public/openapi/read/search.yaml
@@ -23,31 +23,65 @@ get:
type: boolean
search_query:
type: string
- term:
+ showAsPosts:
+ type: boolean
+ showAsTopics:
+ type: boolean
+ title:
type: string
- allCategories:
+ filters:
+ type: object
+ userFilterSelected:
+ type: array
+ items:
+ type: object
+ properties:
+ uid:
+ type: number
+ description: A user identifier
+ example: 1
+ username:
+ type: string
+ description: A friendly name for a given user account
+ example: Dragon Fruit
+ displayname:
+ type: string
+ description: This is either username or fullname depending on forum and user settings
+ example: Dragon Fruit
+ userslug:
+ type: string
+ description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.)
+ example: dragon-fruit
+ picture:
+ type: string
+ description: A URL pointing to a picture to be used as the user's avatar
+ example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80'
+ nullable: true
+ 'icon:text':
+ type: string
+ description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar
+ example: D
+ 'icon:bgColor':
+ type: string
+ description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon
+ example: '#9c27b0'
+ tagFilterSelected:
type: array
items:
type: object
properties:
value:
- oneOf:
- - type: string
- - type: number
- text:
type: string
- allCategoriesCount:
- type: number
- expandSearch:
- type: boolean
- showAsPosts:
- type: boolean
- showAsTopics:
- type: boolean
- title:
- type: string
+ valueEscaped:
+ type: string
+ valueEncoded:
+ type: string
+ class:
+ type: string
searchDefaultSortBy:
type: string
+ searchDefaultIn:
+ type: string
privileges:
type: object
properties:
diff --git a/public/openapi/read/tags/tag.yaml b/public/openapi/read/tags/tag.yaml
index 41557d7c61..cae02d0082 100644
--- a/public/openapi/read/tags/tag.yaml
+++ b/public/openapi/read/tags/tag.yaml
@@ -227,6 +227,8 @@ get:
type: string
title:
type: string
+ canPost:
+ type: boolean
showSelect:
type: boolean
showTopicTools:
diff --git a/public/openapi/read/top.yaml b/public/openapi/read/top.yaml
index e9b552ffcf..8594ca9f14 100644
--- a/public/openapi/read/top.yaml
+++ b/public/openapi/read/top.yaml
@@ -59,6 +59,16 @@ get:
type: array
items:
type: number
+ selectedTag:
+ type: object
+ properties:
+ label:
+ type: string
+ nullable: true
+ selectedTags:
+ type: array
+ items:
+ type: string
feeds:disableRSS:
type: number
rssFeedUrl:
diff --git a/public/openapi/read/topic/topic_id.yaml b/public/openapi/read/topic/topic_id.yaml
index 4b890143f7..ea163e05b4 100644
--- a/public/openapi/read/topic/topic_id.yaml
+++ b/public/openapi/read/topic/topic_id.yaml
@@ -126,6 +126,13 @@ get:
type: array
items:
type: string
+ muted:
+ type: boolean
+ description: Whether or not the user has been muted.
+ mutedUntil:
+ type: number
+ description: A UNIX timestamp representing the moment a muted state will be lifted.
+ nullable: true
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
@@ -219,6 +226,19 @@ get:
type: number
selfPost:
type: boolean
+ events:
+ type: array
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ id:
+ type: number
+ timestamp:
+ type: number
+ timestampISO:
+ type: string
topicOwnerPost:
type: boolean
display_edit_tools:
@@ -311,6 +331,8 @@ get:
type: boolean
topics:read:
type: boolean
+ topics:schedule:
+ type: boolean
topics:tag:
type: boolean
topics:delete:
@@ -354,6 +376,8 @@ get:
type: number
feeds:disableRSS:
type: number
+ signatures:hideDuplicates:
+ type: number
bookmarkThreshold:
type: number
necroThreshold:
@@ -370,12 +394,12 @@ get:
type: boolean
privateUploads:
type: boolean
+ showPostPreviewsOnHover:
+ type: boolean
rssFeedUrl:
type: string
postIndex:
type: number
- loggedInUser:
- $ref: ../../components/schemas/UserObject.yaml#/UserObject
- type: object
description: Optional properties that may or may not be present (except for `tid`, which is always present, and is only here as a hack to pass validation)
properties:
@@ -385,6 +409,8 @@ get:
thumb:
type: string
description: An uploaded topic thumbnail
+ loggedInUser:
+ $ref: ../../components/schemas/UserObject.yaml#/UserObject
required:
- tid
- $ref: ../../components/schemas/Pagination.yaml#/Pagination
diff --git a/public/openapi/read/unread.yaml b/public/openapi/read/unread.yaml
index 4d6ad5d902..e63242729c 100644
--- a/public/openapi/read/unread.yaml
+++ b/public/openapi/read/unread.yaml
@@ -13,6 +13,8 @@ get:
allOf:
- type: object
properties:
+ canPost:
+ type: boolean
showSelect:
type: boolean
showTopicTools:
@@ -206,10 +208,24 @@ get:
nullable: true
selectCategoryLabel:
type: string
+ selectCategoryIcon:
+ type: string
+ showCategorySelectLabel:
+ type: boolean
selectedCids:
type: array
items:
type: number
+ selectedTag:
+ type: object
+ properties:
+ label:
+ type: string
+ nullable: true
+ selectedTags:
+ type: array
+ items:
+ type: string
filters:
type: array
items:
diff --git a/public/openapi/read/user/userslug/chats/roomid.yaml b/public/openapi/read/user/userslug/chats/roomid.yaml
index 72fc62a125..767ea88d0c 100644
--- a/public/openapi/read/user/userslug/chats/roomid.yaml
+++ b/public/openapi/read/user/userslug/chats/roomid.yaml
@@ -298,6 +298,8 @@ get:
type: string
usernames:
type: string
+ chatWithMessage:
+ type: string
nextStart:
type: number
title:
@@ -311,4 +313,6 @@ get:
removed, etc.)
canViewInfo:
type: boolean
+ chatWithMessage:
+ type: string
- $ref: ../../../../components/schemas/CommonProps.yaml#/CommonProps
\ No newline at end of file
diff --git a/public/openapi/read/user/userslug/export/posts.yaml b/public/openapi/read/user/userslug/export/posts.yaml
deleted file mode 100644
index 80132ab8ad..0000000000
--- a/public/openapi/read/user/userslug/export/posts.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-get:
- tags:
- - users
- summary: Export a user's posts (.csv)
- description: This route retrieves an existing export of user's posts. To create one go to `/user/{userslug}/consent`
- parameters:
- - name: userslug
- in: path
- required: true
- schema:
- type: string
- example: admin
- responses:
- "200":
- description: "A CSV file containing a user's posts"
- content:
- text/csv:
- schema:
- type: string
- format: binary
\ No newline at end of file
diff --git a/public/openapi/read/user/userslug/export/profile.yaml b/public/openapi/read/user/userslug/export/profile.yaml
deleted file mode 100644
index da0b6bec45..0000000000
--- a/public/openapi/read/user/userslug/export/profile.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-get:
- tags:
- - users
- summary: Export a user's profile data (.json)
- description: This route retrieves an existing export of user's profile data. To create one go to `/user/{userslug}/consent`
- parameters:
- - name: userslug
- in: path
- required: true
- schema:
- type: string
- example: admin
- responses:
- "200":
- description: "A JSON file containing the user profile"
- content:
- text/json:
- schema:
- type: string
- format: binary
\ No newline at end of file
diff --git a/public/openapi/read/user/userslug/export/uploads.yaml b/public/openapi/read/user/userslug/export/uploads.yaml
deleted file mode 100644
index cbe7a9aefa..0000000000
--- a/public/openapi/read/user/userslug/export/uploads.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-get:
- tags:
- - users
- summary: Export a user's uploads (.zip)
- description: This route retrieves an existing export of user's profile data. To create one go to `/user/{userslug}/consent`
- parameters:
- - name: userslug
- in: path
- required: true
- schema:
- type: string
- example: admin
- responses:
- "200":
- description: Successful export of user uploads
- content:
- application/zip:
- schema:
- type: string
- format: binary
\ No newline at end of file
diff --git a/public/openapi/read/user/userslug/info.yaml b/public/openapi/read/user/userslug/info.yaml
index e56f76ec84..afec9bc2bd 100644
--- a/public/openapi/read/user/userslug/info.yaml
+++ b/public/openapi/read/user/userslug/info.yaml
@@ -40,55 +40,9 @@ get:
additionalProperties:
description: Contextual data is added to this object (such as topic data, etc.)
bans:
- type: array
- items:
- type: object
- properties:
- uid:
- type: number
- timestamp:
- type: number
- expire:
- type: number
- fromUid:
- type: number
- user:
- type: object
- properties:
- username:
- type: string
- description: A friendly name for a given user account
- userslug:
- type: string
- description: An URL-safe variant of the username (i.e. lower-cased, spaces
- removed, etc.)
- picture:
- type: string
- uid:
- type: number
- description: A user identifier
- icon:text:
- type: string
- description: A single-letter representation of a username. This is used in the
- auto-generated icon given to users without
- an avatar
- icon:bgColor:
- type: string
- description: A six-character hexadecimal colour code assigned to the user. This
- value is used in conjunction with
- `icon:text` for the user's auto-generated
- icon
- example: "#f44336"
- until:
- type: number
- untilReadable:
- type: string
- timestampReadable:
- type: string
- timestampISO:
- type: string
- reason:
- type: string
+ $ref: ../../../components/schemas/UserObject.yaml#/BanMuteArray
+ mutes:
+ $ref: ../../../components/schemas/UserObject.yaml#/BanMuteArray
sessions:
type: array
items:
diff --git a/public/openapi/write.yaml b/public/openapi/write.yaml
index 6f55dbcfc0..d68c2f45cf 100644
--- a/public/openapi/write.yaml
+++ b/public/openapi/write.yaml
@@ -150,6 +150,8 @@ paths:
$ref: 'write/chats.yaml'
/chats/{roomId}:
$ref: 'write/chats/roomId.yaml'
+ /chats/{roomId}/state:
+ $ref: 'write/chats/roomId/state.yaml'
/chats/{roomId}/users:
$ref: 'write/chats/roomId/users.yaml'
/chats/{roomId}/users/{uid}:
diff --git a/public/openapi/write/categories/cid/moderator/uid.yaml b/public/openapi/write/categories/cid/moderator/uid.yaml
index 4dc5e576ae..189c431e0b 100644
--- a/public/openapi/write/categories/cid/moderator/uid.yaml
+++ b/public/openapi/write/categories/cid/moderator/uid.yaml
@@ -30,6 +30,100 @@ put:
$ref: ../../../../components/schemas/Status.yaml#/Status
response:
type: object
+ properties:
+ labels:
+ type: object
+ properties:
+ users:
+ type: array
+ items:
+ type: string
+ description: Language key of the privilege name's user-friendly name
+ groups:
+ type: array
+ items:
+ type: string
+ description: Language key of the privilege name's user-friendly name
+ users:
+ type: array
+ items:
+ type: object
+ properties:
+ uid:
+ type: number
+ description: A user identifier
+ example: 1
+ username:
+ type: string
+ description: A friendly name for a given user account
+ example: Dragon Fruit
+ displayname:
+ type: string
+ description: This is either username or fullname depending on forum and user settings
+ example: Dragon Fruit
+ picture:
+ type: string
+ description: A URL pointing to a picture to be used as the user's avatar
+ example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80'
+ nullable: true
+ 'icon:text':
+ type: string
+ description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar
+ example: D
+ 'icon:bgColor':
+ type: string
+ description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon
+ example: '#9c27b0'
+ banned:
+ type: number
+ description: A Boolean representing whether a user is banned or not
+ example: 0
+ banned_until_readable:
+ type: string
+ description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned"
+ example: Not Banned
+ privileges:
+ type: object
+ additionalProperties:
+ type: boolean
+ description: A set of privileges with either true or false
+ groups:
+ type: array
+ items:
+ type: object
+ properties:
+ name:
+ type: string
+ nameEscaped:
+ type: string
+ privileges:
+ type: object
+ additionalProperties:
+ type: boolean
+ description: A set of privileges with either true or false
+ isPrivate:
+ type: boolean
+ isSystem:
+ type: boolean
+ keys:
+ type: object
+ properties:
+ users:
+ type: array
+ items:
+ type: string
+ description: "Privilege name"
+ groups:
+ type: array
+ items:
+ type: string
+ description: "Privilege name"
+ columnCountUserOther:
+ type: number
+ description: "The number of additional user privileges added by plugins"
+ columnCountGroupOther:
+ type: number
+ description: "The number of additional user privileges added by plugins"
delete:
tags:
- categories
diff --git a/public/openapi/write/categories/cid/privileges/privilege.yaml b/public/openapi/write/categories/cid/privileges/privilege.yaml
index 1303640b19..6cc1ff7336 100644
--- a/public/openapi/write/categories/cid/privileges/privilege.yaml
+++ b/public/openapi/write/categories/cid/privileges/privilege.yaml
@@ -59,19 +59,44 @@ put:
items:
type: object
properties:
- name:
+ uid:
+ type: number
+ description: A user identifier
+ example: 1
+ username:
type: string
- nameEscaped:
+ description: A friendly name for a given user account
+ example: Dragon Fruit
+ displayname:
+ type: string
+ description: This is either username or fullname depending on forum and user settings
+ example: Dragon Fruit
+ picture:
+ type: string
+ description: A URL pointing to a picture to be used as the user's avatar
+ example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80'
+ nullable: true
+ 'icon:text':
+ type: string
+ description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar
+ example: D
+ 'icon:bgColor':
type: string
+ description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon
+ example: '#9c27b0'
+ banned:
+ type: number
+ description: A Boolean representing whether a user is banned or not
+ example: 0
+ banned_until_readable:
+ type: string
+ description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned"
+ example: Not Banned
privileges:
type: object
additionalProperties:
type: boolean
description: A set of privileges with either true or false
- isPrivate:
- type: boolean
- isSystem:
- type: boolean
groups:
type: array
items:
@@ -170,19 +195,44 @@ delete:
items:
type: object
properties:
- name:
+ uid:
+ type: number
+ description: A user identifier
+ example: 1
+ username:
type: string
- nameEscaped:
+ description: A friendly name for a given user account
+ example: Dragon Fruit
+ displayname:
+ type: string
+ description: This is either username or fullname depending on forum and user settings
+ example: Dragon Fruit
+ picture:
+ type: string
+ description: A URL pointing to a picture to be used as the user's avatar
+ example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80'
+ nullable: true
+ 'icon:text':
+ type: string
+ description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar
+ example: D
+ 'icon:bgColor':
type: string
+ description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon
+ example: '#9c27b0'
+ banned:
+ type: number
+ description: A Boolean representing whether a user is banned or not
+ example: 0
+ banned_until_readable:
+ type: string
+ description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned"
+ example: Not Banned
privileges:
type: object
additionalProperties:
type: boolean
description: A set of privileges with either true or false
- isPrivate:
- type: boolean
- isSystem:
- type: boolean
groups:
type: array
items:
diff --git a/public/openapi/write/chats/roomId/state.yaml b/public/openapi/write/chats/roomId/state.yaml
new file mode 100644
index 0000000000..4a98edcaf2
--- /dev/null
+++ b/public/openapi/write/chats/roomId/state.yaml
@@ -0,0 +1,50 @@
+put:
+ tags:
+ - chats
+ summary: mark chat room as unread
+ description: This operation marks a chat room as unread.
+ parameters:
+ - in: path
+ name: roomId
+ schema:
+ type: number
+ required: true
+ description: a valid room id
+ example: 1
+ responses:
+ '200':
+ description: Chat room marked
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ $ref: ../../../components/schemas/Status.yaml#/Status
+ response:
+ $ref: ../../../components/schemas/Chats.yaml#/RoomObjectFull
+delete:
+ tags:
+ - chats
+ summary: mark chat room as read
+ description: This operation marks a chat room as read.
+ parameters:
+ - in: path
+ name: roomId
+ schema:
+ type: number
+ required: true
+ description: a valid room id
+ example: 1
+ responses:
+ '200':
+ description: Chat room marked
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ $ref: ../../../components/schemas/Status.yaml#/Status
+ response:
+ $ref: ../../../components/schemas/Chats.yaml#/RoomObjectFull
\ No newline at end of file
diff --git a/public/openapi/write/topics/tid/events.yaml b/public/openapi/write/topics/tid/events.yaml
index 0bf03cd604..2217bd5b15 100644
--- a/public/openapi/write/topics/tid/events.yaml
+++ b/public/openapi/write/topics/tid/events.yaml
@@ -22,64 +22,67 @@ get:
status:
$ref: ../../../components/schemas/Status.yaml#/Status
response:
- type: array
- description: A list of the topic events that still remain
- items:
- type: object
- properties:
- type:
- type: string
- description: A valid event type
- id:
- type: number
- description: Unique identifier for this topic event
- timestamp:
- type: number
- timestampISO:
- type: string
- description: An ISO 8601 formatted date string (complementing `timestamp`)
- icon:
- type: string
- description: FontAwesome icon name
- example: fa-bullhorn
- text:
- type: string
- description: A language key
- uid:
- type: number
- user:
+ type: object
+ properties:
+ events:
+ type: array
+ description: A list of the topic events that still remain
+ items:
type: object
properties:
- uid:
- type: number
- description: A user identifier
- username:
- type: string
- description: A friendly name for a given user account
- displayname:
- type: string
- description: This is either username or fullname depending on forum and user settings
- userslug:
+ type:
type: string
- description: An URL-safe variant of the username (i.e. lower-cased, spaces
- removed, etc.)
- picture:
- nullable: true
+ description: A valid event type
+ id:
+ type: number
+ description: Unique identifier for this topic event
+ timestamp:
+ type: number
+ timestampISO:
type: string
- icon:text:
+ description: An ISO 8601 formatted date string (complementing `timestamp`)
+ icon:
type: string
- description: A single-letter representation of a username. This is used in the
- auto-generated icon given to users
- without an avatar
- icon:bgColor:
+ description: FontAwesome icon name
+ example: fa-bullhorn
+ text:
type: string
- description: A six-character hexadecimal colour code assigned to the user. This
- value is used in conjunction with
- `icon:text` for the user's
- auto-generated icon
- example: "#f44336"
- required:
- - type
- - id
- - timestamp
- - timestampISO
\ No newline at end of file
+ description: A language key
+ uid:
+ type: number
+ user:
+ type: object
+ properties:
+ uid:
+ type: number
+ description: A user identifier
+ username:
+ type: string
+ description: A friendly name for a given user account
+ displayname:
+ type: string
+ description: This is either username or fullname depending on forum and user settings
+ userslug:
+ type: string
+ description: An URL-safe variant of the username (i.e. lower-cased, spaces
+ removed, etc.)
+ picture:
+ nullable: true
+ type: string
+ icon:text:
+ type: string
+ description: A single-letter representation of a username. This is used in the
+ auto-generated icon given to users
+ without an avatar
+ icon:bgColor:
+ type: string
+ description: A six-character hexadecimal colour code assigned to the user. This
+ value is used in conjunction with
+ `icon:text` for the user's
+ auto-generated icon
+ example: "#f44336"
+ required:
+ - type
+ - id
+ - timestamp
+ - timestampISO
\ No newline at end of file
diff --git a/public/openapi/write/topics/tid/thumbs.yaml b/public/openapi/write/topics/tid/thumbs.yaml
index a51858aeb3..133da0c20e 100644
--- a/public/openapi/write/topics/tid/thumbs.yaml
+++ b/public/openapi/write/topics/tid/thumbs.yaml
@@ -31,6 +31,8 @@ get:
type: string
name:
type: string
+ path:
+ type: string
url:
type: string
description: Path to a topic thumbnail
@@ -109,8 +111,20 @@ put:
status:
$ref: ../../../components/schemas/Status.yaml#/Status
response:
- type: object
- properties: {}
+ type: array
+ description: A list of the topic thumbnails in the destination topic
+ items:
+ type: object
+ properties:
+ id:
+ type: string
+ name:
+ type: string
+ path:
+ type: string
+ url:
+ type: string
+ description: Path to a topic thumbnail
delete:
tags:
- topics
@@ -155,6 +169,8 @@ delete:
type: string
name:
type: string
+ path:
+ type: string
url:
type: string
description: Path to a topic thumbnail
\ No newline at end of file
diff --git a/public/openapi/write/topics/tid/thumbs/order.yaml b/public/openapi/write/topics/tid/thumbs/order.yaml
index 8e9a12fef1..a0f1602bc8 100644
--- a/public/openapi/write/topics/tid/thumbs/order.yaml
+++ b/public/openapi/write/topics/tid/thumbs/order.yaml
@@ -37,5 +37,17 @@ put:
status:
$ref: ../../../../components/schemas/Status.yaml#/Status
response:
- type: object
- properties: {}
\ No newline at end of file
+ type: array
+ description: A list of the topic thumbnails in the new order
+ items:
+ type: object
+ properties:
+ id:
+ type: string
+ name:
+ type: string
+ path:
+ type: string
+ url:
+ type: string
+ description: Path to a topic thumbnail
diff --git a/public/less/admin/admin.less b/public/scss/admin/admin.scss
similarity index 60%
rename from public/less/admin/admin.less
rename to public/scss/admin/admin.scss
index 26432e1226..c244fe3498 100644
--- a/public/less/admin/admin.less
+++ b/public/scss/admin/admin.scss
@@ -1,8 +1,4 @@
-@import "bootstrap/less/bootstrap";
-@import "./paper/variables";
-@import "./paper/bootswatch";
@import "./mixins";
-@import "./vars";
@import "./header";
@import "./mobile";
@@ -13,24 +9,13 @@
@import "./manage/privileges";
@import "./manage/tags";
@import "./manage/groups";
-@import "./manage/registration";
-@import "./manage/users";
-@import "./manage/admins-mods";
@import "./appearance/customise";
-@import "./appearance/themes";
@import "./extend/plugins";
@import "./extend/rewards";
@import "./extend/widgets";
@import "./advanced/database";
-@import "./advanced/events";
-@import "./advanced/logs";
-@import "./advanced/errors";
-@import "./advanced/hooks";
-@import "./development/info";
@import "./settings";
-@import "../flags";
-
@import "./modules/alerts";
@import "./modules/selectable";
@import "./modules/nprogress";
@@ -46,21 +31,19 @@ body {
h1 {
font-size: 35px;
- margin-bottom: 50px;
}
-
- label {
+ .form-label, .form-check-label {
font-weight: 700;
- height: auto;
}
-
-
.btn {
border-radius: 0;
}
-
- .btn-link {
- color: @link-color;
+ .btn-outline-secondary {
+ color: $gray-700;
+ box-shadow: 0 1px 4px rgba(0, 0, 0, .4) !important;
+ &:hover {
+ background-color: $gray-200 !important;
+ }
}
// .floating-button can either be a container or the button itself
@@ -68,16 +51,16 @@ body {
position: fixed;
right: 30px;
bottom: 30px;
- z-index: 1;
+ z-index: 2;
max-width: 56px;
button {
&.primary {
- background: @brand-primary !important;
+ background: $primary !important;
}
&.success {
- background: @brand-success !important;
+ background: $success !important;
}
&:not(:last-child) {
@@ -86,12 +69,7 @@ body {
}
}
button.floating-button {
- background: @brand-primary !important;
- }
-
- .user-img {
- width:24px;
- height:24px;
+ background: $primary !important;
}
.nodebb-logo {
@@ -102,7 +80,7 @@ body {
vertical-align: -43%;
}
- .box-header-font;
+ @include box-header-font;
color: #fff;
}
@@ -110,48 +88,52 @@ body {
cursor: default;
}
- .acp-panel-heading {
+ @mixin acp-panel-heading() {
padding: 7px 14px;
border: 0;
- .box-header-font;
+ @include box-header-font;
}
- .panel:not([data-container-html]) {
+ .card:not([data-container-html]) {
background-color: #FFF;
box-sizing: border-box;
border-radius: 3px;
+ border-width: 0px;
box-shadow: 0px 1px 3px 0px rgba(165, 165, 165, 0.75);
margin-bottom: 20px;
- &.panel-default >.panel-heading {
- .acp-panel-heading;
+ >.card-header {
+ @include acp-panel-heading;
background: #fefefe;
color: #333;
}
- &.panel-danger >.panel-heading {
- .acp-panel-heading;
+ &.card-danger >.card-header {
+ @include acp-panel-heading;
}
}
.nav-header {
- .box-header-font
+ @include box-header-font;
}
.icon-container {
- .row {
+ .fa-nbb-none {
+ border: 1px dotted black;
+ }
+ .nbb-fa-icons {
margin: 0;
i {
- width:20px;
- height:20px;
- margin: 1px;
- .pointer;
- line-height: 20px;
+ width: 36px;
+ height: 36px;
+ cursor: pointer;
+ line-height: 36px;
text-align: center;
- color: @gray-dark;
+ color: $gray-800;
+ margin: 4px;
&:hover, &.selected {
- background: @brand-primary;
+ background: $primary;
color: white;
}
}
@@ -167,26 +149,13 @@ body {
}
.navbar-nav {
- margin-top: 0;
- margin-bottom: 0;
-
- >li {
- >a {
- padding-top: 15px;
- padding-bottom: 15px;
- }
-
- >a:hover, >a:focus {
- color: @gray-dark;
- background-color: @gray-light;
- }
-
+ >li {
>#reconnect {
- color: @gray-light;
+ color: $gray-700;
}
>#reconnect:focus, >#reconnect:hover {
- color: @gray-light;
+ color: $gray-700;
background-color: transparent;
}
}
@@ -198,7 +167,23 @@ body {
/* Allows the autocomplete dropbox to appear on top of a modal's backdrop */
.ui-autocomplete {
- z-index: @zindex-popover;
+ z-index: $zindex-popover;
+ }
+
+ .bootstrap-tagsinput {
+ width: 100%;
+ border: 0;
+ box-shadow: none;
+ padding-left: 0;
+
+ input {
+ width: 100%;
+ margin-left: 1px;
+ margin-top: 9px;
+ border-bottom: 1px dotted #ccc !important;
+ padding-bottom: 5px;
+ padding-left: 0;
+ }
}
}
@@ -211,16 +196,16 @@ body {
.category-settings-form {
h3 {
margin-top: 0;
- .pointer;
+ cursor: pointer;
}
h4 {
- .pointer;
+ cursor: pointer;
}
}
.category-preview {
- .pointer;
+ cursor: pointer;
width: 100%;
height: 100px;
text-align: center;
@@ -235,13 +220,16 @@ body {
margin: 35px 5px 0 5px;
}
}
+
+.category-dropdown-container.right .category-dropdown-menu {
+ --bs-position: end;
+}
+
[component="category-selector"] {
- .fa-stack {
- border-radius: 50%;
- }
.category-dropdown-menu {
- max-height: 400px;
+ max-height: 500px;
overflow-y: auto;
+ overflow-x: hidden;
}
}
@@ -262,32 +250,38 @@ body {
}
}
-.mdl-switch.is-checked .mdl-switch__ripple-container {
- cursor: pointer !important;
+* > .checkbox:first-child {
+ margin-top: 0px;
}
-.mdl-switch.is-checked .mdl-switch__thumb {
- background: @brand-primary !important;
+.ui-selectable-helper {
+ border: 1px dashed $success;
+ background: lighten($success, 10%);
+ opacity: 0.5;
}
-.mdl-switch.is-checked .mdl-switch__track {
- background: lighten(@brand-primary, 20%) !important;
+form small {
+ color: $gray-700;
}
-* > .checkbox:first-child {
- margin-top: 0px;
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ vertical-align: middle;
+ border-top: 4px dashed;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
}
-[class^="col-"] .mdl-switch__label {
- padding-right: 15px;
-}
+#save {
+ transition: background-color 500ms linear;
-.ui-selectable-helper {
- border: 1px dashed @brand-success;
- background: lighten(@brand-success, 10%);
- opacity: 0.5;
-}
+ &.saved {
+ background-color: $success;
-form small {
- color: @gray-light;
+ i {
+ @include fa-icon-solid($fa-var-check);
+ }
+ }
}
\ No newline at end of file
diff --git a/public/less/admin/advanced/database.less b/public/scss/admin/advanced/database.scss
similarity index 80%
rename from public/less/admin/advanced/database.less
rename to public/scss/admin/advanced/database.scss
index 3799ced20a..a68332708c 100644
--- a/public/less/admin/advanced/database.less
+++ b/public/scss/admin/advanced/database.scss
@@ -4,20 +4,3 @@
width:220px;
}
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/public/less/admin/appearance/customise.less b/public/scss/admin/appearance/customise.scss
similarity index 99%
rename from public/less/admin/appearance/customise.less
rename to public/scss/admin/appearance/customise.scss
index 3bef7fa560..ee4e4b0dd4 100644
--- a/public/less/admin/appearance/customise.less
+++ b/public/scss/admin/appearance/customise.scss
@@ -6,4 +6,4 @@
// ACP text colour when searching through custom CSS or JS.
.ace_search_field {
color: #000 !important;
-}
+}
\ No newline at end of file
diff --git a/public/less/admin/extend/plugins.less b/public/scss/admin/extend/plugins.scss
similarity index 81%
rename from public/less/admin/extend/plugins.less
rename to public/scss/admin/extend/plugins.scss
index d7e4584f02..70c441c190 100644
--- a/public/less/admin/extend/plugins.less
+++ b/public/scss/admin/extend/plugins.scss
@@ -21,7 +21,7 @@
.plugin-list.ui-sortable {
li {
- .pointer;
+ cursor: pointer;
.fa-chevron-up {
margin-right: 10px;
@@ -37,22 +37,14 @@
&:first-child .fa-chevron-up, &:last-child .fa-chevron-down {
pointer-events: none;
- color: @gray-light;
+ color: $gray-300;
}
}
}
.controls .btn {
display: list-item;
- width: 120px;
+ width: 150px;
margin-bottom: 3px;
margin-left: 10px;
}
-
- .acp-sidebar {
- .mdl-switch__label {
- margin-left: 24px;
- display: block;
- left: 0;
- }
- }
}
\ No newline at end of file
diff --git a/public/less/admin/extend/rewards.less b/public/scss/admin/extend/rewards.scss
similarity index 64%
rename from public/less/admin/extend/rewards.less
rename to public/scss/admin/extend/rewards.scss
index e90eb3e717..4f20b44bf2 100644
--- a/public/less/admin/extend/rewards.less
+++ b/public/scss/admin/extend/rewards.scss
@@ -1,13 +1,4 @@
#rewards {
- .well, .panel-body {
- vertical-align: top;
- min-height: 100px;
-
- &.pull-right {
- min-height: 0px;
- }
- }
-
ul {
list-style-type: none;
padding: 0px;
@@ -24,26 +15,26 @@
.rewards { width: 100%; }
- .well {
+ .card {
border-radius: 2px;
border-width: 2px;
color: #333;
&.if-block {
- border-color: @brand-primary;
+ border-color: $primary;
max-width: 33%;
}
&.this-block {
- border-color: @brand-warning;
+ border-color: $warning;
max-width: 33%;
}
&.then-block {
- border-color: @brand-success;
+ border-color: $success;
max-width: 33%;
}
&.reward-block {
- border-color: @brand-success;
- background-color: lighten(@brand-success, 15%);
+ border-color: $success;
+ background-color: lighten($success, 15%);
color: #fff;
a, select, input { color: #fff; }
select > option { color: #333; }
@@ -51,4 +42,11 @@
min-height: 110px;
}
}
+}
+
+.page-admin-rewards {
+ #new {
+ bottom: calc(64px + $spacer);
+ background-color: $success;
+ }
}
\ No newline at end of file
diff --git a/public/less/admin/extend/widgets.less b/public/scss/admin/extend/widgets.scss
similarity index 58%
rename from public/less/admin/extend/widgets.less
rename to public/scss/admin/extend/widgets.scss
index 8316030446..5eca898822 100644
--- a/public/less/admin/extend/widgets.less
+++ b/public/scss/admin/extend/widgets.scss
@@ -1,4 +1,4 @@
-.page-extend-widgets {
+.page-admin-extend.page-admin-widgets {
[component="clone"] {
display: flex;
align-items: stretch;
@@ -16,4 +16,13 @@
border-radius: 0;
}
}
-}
\ No newline at end of file
+ .container-hover {
+ .container-html {
+ // border: 1px solid red!important;
+ @extend .border;
+ @extend .border-2;
+ @extend .border-primary;
+ }
+ }
+
+}
diff --git a/public/less/admin/general/dashboard.less b/public/scss/admin/general/dashboard.scss
similarity index 91%
rename from public/less/admin/general/dashboard.less
rename to public/scss/admin/general/dashboard.scss
index f7e3f8ff72..cb20576dd3 100644
--- a/public/less/admin/general/dashboard.less
+++ b/public/scss/admin/general/dashboard.scss
@@ -1,25 +1,25 @@
.dashboard {
max-width: 1680px;
- .panel {
+ .card {
max-width: 100% !important;
}
- #analytics-panel .panel-heading > div {
+ #analytics-panel .card-header > div {
&.fa-expand {
display: none;
}
- font-family: @font-family-sans-serif;
+ font-family: $font-family-sans-serif;
font-weight: 600;
- color: @gray-dark;
+ color: $gray-300;
padding-left: .5em;
padding: .75em;
- background-color: @gray-lighter;
- color: @gray-base;
+ background-color: $gray-200;
+ color: $black;
cursor: pointer;
- .transition(all .4s);
+ transition: all .4s;
&.active {
display: inline;
@@ -29,12 +29,12 @@
.graph-container {
padding-right: 50px;
position: relative;
- background: @body-bg;
+ background: $body-bg;
&:hover {
.fa-expand {
- color: @gray-lighter;
- background-color: @gray-base;
+ color: $gray-800;
+ background-color: $black;
}
}
@@ -94,7 +94,7 @@
}
.graph-legend {
- .box-header-font;
+ @include box-header-font;
display: inline-block;
max-width: 100%;
position: absolute;
diff --git a/public/less/admin/general/navigation.less b/public/scss/admin/general/navigation.scss
similarity index 85%
rename from public/less/admin/general/navigation.less
rename to public/scss/admin/general/navigation.scss
index 9d0316ee3a..ada36aeeea 100644
--- a/public/less/admin/general/navigation.less
+++ b/public/scss/admin/general/navigation.scss
@@ -24,6 +24,10 @@
li {
display: inline-block;
+ >a:hover, >a:focus {
+ color: $gray-300;
+ background-color: $gray-700;
+ }
}
}
diff --git a/public/less/admin/header.less b/public/scss/admin/header.scss
similarity index 85%
rename from public/less/admin/header.less
rename to public/scss/admin/header.scss
index 63d8e8bcdb..1d9b08b4b9 100644
--- a/public/less/admin/header.less
+++ b/public/scss/admin/header.scss
@@ -1,5 +1,5 @@
.header {
- .no-select;
+ user-select: none;
position: relative;
background: #333;
width: 100%;
@@ -10,7 +10,7 @@
#main-page-title {
position: absolute;
left: 48px;
- bottom: 17px;
+ bottom: 50px;
color: #aaa;
font-size: 47px;
font-weight: 300;
@@ -23,10 +23,6 @@
flex-direction: row-reverse;
margin: 0;
- li {
- align-self: end;
- }
-
> * {
margin-right: 20px;
}
@@ -38,7 +34,7 @@
.alert {
font-size: 14px;
- margin-bottom: 5px;
+ margin-bottom: 0px;
&.alert-info {
background-color: #eee;
@@ -75,10 +71,10 @@
padding: 10px 20px;
width: 250px;
height: 44px;
- background-color: rgba(0, 0, 0, 0.2);
+ background-color: rgba(0,0,0,.2);
border-radius: 3px;
box-shadow: none;
- .transition(.4s ease background-color);
+ transition: .4s ease background-color;
&:focus {
background-color: #eee;
@@ -89,7 +85,7 @@
.dropdown:not(.open) {
&:before {
content: '/';
- border: 1px solid @gray;
+ border: 1px solid $gray-500;
border-radius: 5px;
padding: 0px 6px;
font-size: 12px;
@@ -97,14 +93,14 @@
pointer-events: none;
position: absolute;
- top: 10px;
+ top: 13px;
left: 1em;
}
&:after {
content: attr(data-text);
position: absolute;
- top: 10px;
+ top: 13px;
left: 3em;
font-size: small;
font-weight: 600;
@@ -130,7 +126,7 @@
list-style-type: none;
padding: 0px;
position: absolute;
- bottom: -11px;
+ bottom: -16px;
left: 50px;
> li {
@@ -140,11 +136,11 @@
transition: border-color 150ms linear;
&:hover {
- border-color: darken(@brand-primary, 20%);
+ border-color: darken($primary, 20%);
}
&.active {
- border-color: @brand-primary;
+ border-color: $primary;
}
> a {
diff --git a/public/less/admin/manage/categories.less b/public/scss/admin/manage/categories.scss
similarity index 67%
rename from public/less/admin/manage/categories.less
rename to public/scss/admin/manage/categories.scss
index 8350b574c8..8c5117990f 100644
--- a/public/less/admin/manage/categories.less
+++ b/public/scss/admin/manage/categories.scss
@@ -1,6 +1,6 @@
div.categories {
ul[data-cid] {
- .no-select;
+ user-select: none;
list-style-type: none;
margin: 0;
padding: 0;
@@ -73,22 +73,6 @@ div.categories {
.information {
cursor: move;
padding-left: 3rem;
-
- .icon {
- width: 24px;
- height: 24px;
- border-radius: 50%;
- line-height: 24px;
- text-align: center;
- vertical-align: bottom;
- background-size: cover;
- float: left;
- margin-right: 1rem;
-
- .fa {
- font-size: 85%;
- }
- }
}
.category-header {
@@ -111,25 +95,5 @@ div.categories {
tr > th:first-child {
min-width: 150px;
}
-
- .privilege-table-header {
- background: white;
-
- th {
- text-align: center;
- border-top: 0;
- text-transform: uppercase;
- font-size: 9px;
- vertical-align: bottom;
- }
-
- .arrowed:after {
- border-bottom: 1px dashed #ccc;
- content: "";
- width: 100%;
- display: block;
- padding-top: 5px;
- }
- }
}
}
\ No newline at end of file
diff --git a/public/less/admin/manage/groups.less b/public/scss/admin/manage/groups.scss
similarity index 78%
rename from public/less/admin/manage/groups.less
rename to public/scss/admin/manage/groups.scss
index 2183cc748c..8cad8083b2 100644
--- a/public/less/admin/manage/groups.less
+++ b/public/scss/admin/manage/groups.scss
@@ -35,16 +35,6 @@
[component="category/list"] li {
cursor: pointer;
}
-
- .fa-nbb-none {
- border: 1px dotted black;
- height: 35px;
- width: 35px;
- }
-
- .fa-icons .fa-nbb-none {
- vertical-align: -6px;
- }
#group-icon-preview.fa-nbb-none {
display: none;
diff --git a/public/scss/admin/manage/privileges.scss b/public/scss/admin/manage/privileges.scss
new file mode 100644
index 0000000000..e411bd94e6
--- /dev/null
+++ b/public/scss/admin/manage/privileges.scss
@@ -0,0 +1,19 @@
+.page-admin-privileges {
+ @keyframes fadeOut {
+ 0% {background-color: $primary;}
+ 100% {background-color: white;}
+ }
+
+ [data-group-name].selected, [data-uid].selected {
+ animation-name: fadeOut;
+ animation-duration: 5s;
+ animation-fill-mode: both;
+ animation-timing-function: ease-out;
+ }
+
+ .privilege-table {
+ td:first-child {
+ white-space: nowrap;
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/less/admin/manage/tags.less b/public/scss/admin/manage/tags.scss
similarity index 77%
rename from public/less/admin/manage/tags.less
rename to public/scss/admin/manage/tags.scss
index fc4ea9f2e1..dc7d608129 100644
--- a/public/less/admin/manage/tags.less
+++ b/public/scss/admin/manage/tags.scss
@@ -16,11 +16,11 @@
}
&.ui-selected {
- background: lighten(@brand-success, 25%);
+ background: lighten($success, 25%);
}
&.ui-selecting {
- background: lighten(@brand-success, 40%);
+ background: lighten($success, 40%);
}
}
}
diff --git a/public/less/admin/mixins.less b/public/scss/admin/mixins.scss
similarity index 75%
rename from public/less/admin/mixins.less
rename to public/scss/admin/mixins.scss
index 36315ce5f2..f3725617ef 100644
--- a/public/less/admin/mixins.less
+++ b/public/scss/admin/mixins.scss
@@ -1,6 +1,6 @@
@import "../mixins";
-.box-header-font {
+@mixin box-header-font() {
font-size: 11px;
text-transform: uppercase;
font-weight: 700;
diff --git a/public/less/admin/mobile.less b/public/scss/admin/mobile.scss
similarity index 97%
rename from public/less/admin/mobile.less
rename to public/scss/admin/mobile.scss
index 021145b1ae..d0a509e8ac 100644
--- a/public/less/admin/mobile.less
+++ b/public/scss/admin/mobile.scss
@@ -6,7 +6,7 @@
body {
height: 100%;
}
-
+
#panel {
background-color: inherit;
min-height: 100%;
@@ -31,11 +31,6 @@
font-weight: 400;
}
- #user_label {
- right: 0px;
- bottom: 7px;
- }
-
#main-menu {
display: none;
}
@@ -93,7 +88,7 @@
display: flex;
justify-content: center;
}
-
+
.alert {
border-radius: 0;
@@ -152,7 +147,6 @@
.slideout-panel {
position: relative;
- z-index: 1;
}
.slideout-open,
@@ -170,7 +164,7 @@
height: 100%;
overflow-y: hidden;
}
-
+
.slideout-open {
overflow-y: hidden;
height: 100%;
diff --git a/public/scss/admin/modules/alerts.scss b/public/scss/admin/modules/alerts.scss
new file mode 100644
index 0000000000..a42b684a5f
--- /dev/null
+++ b/public/scss/admin/modules/alerts.scss
@@ -0,0 +1,124 @@
+.alert-window {
+ position: fixed;
+ width: 300px;
+ z-index: 10002;
+
+ right: 20px;
+ bottom: 0px;
+
+ .alert {
+ .close {
+ color: inherit;
+ }
+
+ &::before {
+ position: relative;
+ top: -15px;
+ left: -15px;
+ display: block;
+ height: 2px;
+ width: 0;
+ transition: inherit;
+ }
+
+ &.alert-info {
+ .btn-close {
+ $btn-close-color: $info;
+ background-image: escape-svg(url("data:image/svg+xml, "));
+ }
+
+ &::before {
+ background-color: $info;
+ }
+ }
+
+ &.alert-warning {
+ .btn-close {
+ $btn-close-color: $warning;
+ background-image: escape-svg(url("data:image/svg+xml, "));
+ }
+
+ ::before {
+ background-color: $warning;
+ }
+ }
+
+ &.alert-success {
+ .btn-close {
+ $btn-close-color: $success;
+ background-image: escape-svg(url("data:image/svg+xml, "));
+ }
+
+ ::before {
+ background-color: $success;
+ }
+ }
+
+ &.alert-danger {
+ .btn-close {
+ $btn-close-color: $danger;
+ background-image: escape-svg(url("data:image/svg+xml, "));
+ }
+
+ ::before {
+ background-color: $danger;
+ }
+ }
+
+ &.animate {
+ &.alert-info::before {
+ background-color: lighten($info, 25%);
+ }
+
+ &.alert-warning::before {
+ background-color: lighten($warning, 25%);
+ }
+
+ &.alert-success::before {
+ background-color: lighten($success, 25%);
+ }
+
+ &.alert-danger::before {
+ background-color: lighten($danger, 25%);
+ }
+
+ &::before {
+ width: calc(100% + 50px);
+ }
+ }
+
+ background-color: white;
+ padding-right: 16px;
+ border: 0;
+ border-left: 5px solid !important;
+ box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.25), 0px 2px 10px 0px rgba(0, 0, 0, 0.25);
+
+ strong {
+ text-transform: uppercase;
+ }
+
+ p {
+ padding: 10px 0px 0px;
+ }
+
+ &.alert-info {
+ color: $info;
+ border-color: $info;
+ }
+
+ &.alert-warning {
+ color: $warning;
+ border-color: $warning;
+ }
+
+ &.alert-success {
+ color: $success;
+ border-color: $success;
+ }
+
+ &.alert-danger {
+ color: $danger;
+ border-color: $danger;
+ }
+ }
+}
diff --git a/public/scss/admin/modules/nprogress.scss b/public/scss/admin/modules/nprogress.scss
new file mode 100644
index 0000000000..4584a127d7
--- /dev/null
+++ b/public/scss/admin/modules/nprogress.scss
@@ -0,0 +1,80 @@
+#nprogress {
+ pointer-events: none;
+ }
+
+ #nprogress .bar {
+ background: #29d;
+
+ position: fixed;
+ z-index: 1031;
+ top: 0;
+ left: 0;
+
+ width: 100%;
+ height: 2px;
+ }
+
+ #nprogress .peg {
+ display: block;
+ position: absolute;
+ right: 0px;
+ width: 100px;
+ height: 100%;
+ box-shadow: 0 0 10px #29d, 0 0 5px #29d;
+ opacity: 1.0;
+
+ -webkit-transform: rotate(3deg) translate(0px, -4px);
+ -ms-transform: rotate(3deg) translate(0px, -4px);
+ transform: rotate(3deg) translate(0px, -4px);
+ }
+
+ #nprogress .spinner {
+ display: block;
+ position: fixed;
+ z-index: 1031;
+ top: 165px;
+ right: 35px;
+ }
+
+ @include media-breakpoint-down(sm) {
+ #nprogress .spinner {
+ bottom: 15px;
+ right: 15px;
+ top: initial;
+ }
+ }
+
+
+ #nprogress .spinner-icon {
+ width: 18px;
+ height: 18px;
+ box-sizing: border-box;
+
+ border: solid 2px transparent;
+ border-top-color: #29d;
+ border-left-color: #29d;
+ border-radius: 50%;
+
+ -webkit-animation: nprogress-spinner 400ms linear infinite;
+ animation: nprogress-spinner 400ms linear infinite;
+ }
+
+ .nprogress-custom-parent {
+ overflow: hidden;
+ position: relative;
+ }
+
+ .nprogress-custom-parent #nprogress .spinner,
+ .nprogress-custom-parent #nprogress .bar {
+ position: absolute;
+ }
+
+ @-webkit-keyframes nprogress-spinner {
+ 0% { -webkit-transform: rotate(0deg); }
+ 100% { -webkit-transform: rotate(360deg); }
+ }
+ @keyframes nprogress-spinner {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+ }
+
diff --git a/public/less/admin/modules/search.less b/public/scss/admin/modules/search.scss
similarity index 88%
rename from public/less/admin/modules/search.less
rename to public/scss/admin/modules/search.scss
index d2286005bf..57b8d8613e 100644
--- a/public/less/admin/modules/search.less
+++ b/public/scss/admin/modules/search.scss
@@ -4,9 +4,9 @@
overflow-y: auto;
> li > a {
- &.focus {
- &:extend(.dropdown-menu>li>a:focus);
- }
+ // &.focus {
+ // &:extend(.dropdown-menu>li>a:focus);
+ // }
&:focus {
outline: none;
}
diff --git a/public/less/admin/modules/selectable.less b/public/scss/admin/modules/selectable.scss
similarity index 92%
rename from public/less/admin/modules/selectable.less
rename to public/scss/admin/modules/selectable.scss
index 7a1721fe23..938a459932 100644
--- a/public/less/admin/modules/selectable.less
+++ b/public/scss/admin/modules/selectable.scss
@@ -1,5 +1,5 @@
.selectable {
- .user-select(none);
+ user-select: none;
position: relative;
.selector {
@@ -19,5 +19,5 @@
background-color: #ECF1DB;
border: 1px dashed #9B8;
}
- }
+ }
}
\ No newline at end of file
diff --git a/public/scss/admin/settings.scss b/public/scss/admin/settings.scss
new file mode 100644
index 0000000000..e760d71787
--- /dev/null
+++ b/public/scss/admin/settings.scss
@@ -0,0 +1,20 @@
+.settings {
+ .section-content {
+ border-left: 3px solid $primary;
+
+ ul {
+ list-style-type: none;
+ font-size: 16px;
+ padding-left: 20px;
+ li:not(:last-child) {
+ margin-bottom: 5px;
+ }
+ a {
+ text-decoration: none;
+ &:hover{
+ text-decoration: underline;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/less/admin/vars.less b/public/scss/admin/vars.scss
similarity index 64%
rename from public/less/admin/vars.less
rename to public/scss/admin/vars.scss
index dda7ed1fe8..e5330b8924 100644
--- a/public/less/admin/vars.less
+++ b/public/scss/admin/vars.scss
@@ -16,5 +16,30 @@
// "Apple Color Emoji" : Emoji on iOS and MacOS
// "Segoe UI Emoji", "Segoe UI Symbol" : Emoji on Windows
// "Noto Color Emoji" : Emoji on Android
-@font-family-system: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
-@font-family-sans-serif: @font-family-system;
+$font-family-system: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+$font-family-sans-serif: $font-family-system;
+$font-size-base: 0.875rem!default;
+
+$body-color: #666!default;
+$light: #f5f5f5;
+
+// options
+$enable-gradients: false;
+// no caret on dropdown-toggle
+$enable-caret: false;
+
+$font-size-base: 1rem !default;
+$font-weight-base: 400 !default;
+
+// Buttons
+$input-btn-padding-y: .4rem !default;
+$input-btn-padding-x: 1rem !default;
+
+// Forms
+
+$input-padding-y: 0.4rem !default;
+$input-padding-x: 0 !default;
+$input-padding-y-sm: 0 !default;
+$input-padding-x-sm: 0 !default;
+$input-padding-y-lg: ($font-size-base * 1.25) !default;
+$input-padding-x-lg: 0 !default;
\ No newline at end of file
diff --git a/public/scss/client.scss b/public/scss/client.scss
new file mode 100644
index 0000000000..11e2d14c2f
--- /dev/null
+++ b/public/scss/client.scss
@@ -0,0 +1,7 @@
+// core scss files shared by all themes
+@import "flags";
+@import "global";
+@import "modals";
+@import "modules/picture-switcher";
+@import "modules/bottom-sheet";
+@import "modules/icon-picker";
\ No newline at end of file
diff --git a/public/less/flags.less b/public/scss/flags.scss
similarity index 85%
rename from public/less/flags.less
rename to public/scss/flags.scss
index 0edccd7819..5acc0c4beb 100644
--- a/public/less/flags.less
+++ b/public/scss/flags.scss
@@ -6,7 +6,7 @@
.page-flags {
// hide the all categories li element
- [component="flags/filters"] [component="category/dropdown"] [data-all="all"] {
+ [component="flags/filters"] [component="category/dropdown"] [data-cid="all"] {
display: none;
}
}
@@ -26,7 +26,7 @@
list-style-type: none;
img, .user-icon {
- .user-icon-style(18px, 1rem);
+ @include user-icon-style(18px, 1rem);
margin-right: 1rem;
}
}
@@ -35,7 +35,7 @@
.flag-post-body {
img, .user-icon {
- .user-icon-style(24px, 1.5rem);
+ @include user-icon-style(24px, 1.5rem);
}
}
diff --git a/public/scss/fontawesome.scss b/public/scss/fontawesome.scss
new file mode 100644
index 0000000000..cbe2a7e504
--- /dev/null
+++ b/public/scss/fontawesome.scss
@@ -0,0 +1,7 @@
+$fa-font-path: "vendor/fontawesome/webfonts/6.2.0";
+@import "../public/vendor/fontawesome/scss/fontawesome";
+@import "../public/vendor/fontawesome/scss/regular";
+@import "../public/vendor/fontawesome/scss/solid";
+@import "../public/vendor/fontawesome/scss/brands";
+@import "../public/vendor/fontawesome/scss/v4-shims";
+@import "../public/vendor/fontawesome/scss/nodebb-shims";
\ No newline at end of file
diff --git a/public/scss/generics.scss b/public/scss/generics.scss
new file mode 100644
index 0000000000..017d872434
--- /dev/null
+++ b/public/scss/generics.scss
@@ -0,0 +1,154 @@
+
+.flex-1 {
+ flex: 1 1 0%!important;
+}
+.flex-0 {
+ flex: 0!important;
+}
+
+.pointer {
+ @include pointer;
+}
+
+.text-md { font-size: 1.125rem!important; } // 18px on harmony
+.text-sm { font-size: 0.875rem!important; } // 14px on harmony
+.text-xs { font-size: 0.75rem!important; } // 12px on harmony
+
+.overscroll-behavior-contain {
+ overscroll-behavior: contain;
+}
+
+[component="category-selector"], .category-dropdown-container {
+ #category-dropdown-check:checked + .dropdown-menu {
+ display: block;
+ }
+}
+
+.dropdown-right .dropdown-menu {
+ --bs-position: end;
+}
+
+.category-dropdown-menu {
+ max-height: 500px;
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+.bootstrap-tagsinput {
+ @extend .form-control;
+ box-shadow: none;
+ input {
+ &::placeholder{
+ color: $input-placeholder-color;
+ }
+ color: $input-color;
+ }
+}
+
+@mixin user-icon() {
+ display: inline-flex;
+ justify-content: center;
+ align-items: center;
+ color: $white;
+ font-weight: normal;
+ overflow: hidden; /* stops alt text from overflowing past boundaries if image does not load */
+ white-space: nowrap;
+}
+
+.avatar {
+ /* Contains the user icon class as a mixin, so there's no need to include that in the template */
+ @include user-icon;
+
+ $size: var(--avatar-size);
+ @include user-icon-style($size, calc($size * 0.6));
+
+ &.avatar-rounded {
+ border-radius: 50%;
+ }
+
+ &+.avatar {
+ display: none;
+ }
+}
+
+#crop-picture-modal {
+ #cropped-image {
+ max-width: 100%;
+ }
+
+ .cropper-container.cropper-bg {
+ max-width: 100%;
+ }
+}
+
+blockquote {
+ background-color: $light;
+ font-style: italic;
+ border-left: 4px solid $primary;
+ padding: 1rem;
+ p:last-child {
+ margin-bottom: 0;
+ }
+}
+
+.necro-post {
+ text-align: center;
+ text-transform: uppercase;
+}
+
+.timeline-event {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ .timeline-badge {
+ padding: 1rem;
+ }
+}
+
+.imagedrop {
+ position: absolute;
+ text-align: center;
+ font-size: 24px;
+ color: $gray-600;
+ width: 100%;
+ display: none;
+}
+
+.hover-parent {
+ .hover-d-block, .hover-d-flex {
+ display: none!important;
+ }
+ .hover-visible {
+ visibility: hidden;
+ }
+ &:hover {
+ .hover-d-block {
+ display: block!important;
+ }
+ .hover-d-flex {
+ display: flex!important;
+ }
+ .hover-visible {
+ visibility: visible;
+ }
+ }
+}
+
+.border-muted {
+ border-color: $text-muted!important;
+}
+
+// some classes that are used commonly in themes from bs3
+.hidden, .hide {
+ display: none!important;
+}
+
+// for backwards compat, replace with float-start, float-end respectively
+.pull-left {
+ float: left!important;
+}
+
+.pull-right {
+ float: right!important;
+}
\ No newline at end of file
diff --git a/public/less/global.less b/public/scss/global.scss
similarity index 100%
rename from public/less/global.less
rename to public/scss/global.scss
diff --git a/public/less/install.less b/public/scss/install.scss
similarity index 92%
rename from public/less/install.less
rename to public/scss/install.scss
index ffd98e9f30..831d2a84e1 100644
--- a/public/less/install.less
+++ b/public/scss/install.scss
@@ -1,5 +1,9 @@
@import "./admin/vars";
+.hidden, .hide {
+ display: none!important;
+}
+
.working {
width: 24px;
height: 24px;
@@ -7,7 +11,7 @@
position: relative;
display: inline-block;
vertical-align: bottom;
-
+
&::before, &::after {
content: ' ';
@@ -19,11 +23,11 @@
position: absolute;
top: 0;
left: 0;
-
+
-webkit-animation: sk-bounce 2.0s infinite ease-in-out;
animation: sk-bounce 2.0s infinite ease-in-out;
}
-
+
&::after {
-webkit-animation-delay: -1.0s;
animation-delay: -1.0s;
@@ -36,10 +40,10 @@
}
@keyframes sk-bounce {
- 0%, 100% {
+ 0%, 100% {
transform: scale(0.0);
-webkit-transform: scale(0.0);
- } 50% {
+ } 50% {
transform: scale(1.0);
-webkit-transform: scale(1.0);
}
@@ -55,7 +59,7 @@
}
body, small, p, div {
- font-family: @font-family-sans-serif;
+ font-family: $font-family-sans-serif;
}
.input-row {
diff --git a/public/scss/jquery-ui.scss b/public/scss/jquery-ui.scss
new file mode 100644
index 0000000000..ea14c5ca97
--- /dev/null
+++ b/public/scss/jquery-ui.scss
@@ -0,0 +1,10 @@
+@import 'jquery-ui/themes/base/core';
+@import 'jquery-ui/themes/base/menu';
+@import 'jquery-ui/themes/base/button';
+@import 'jquery-ui/themes/base/datepicker';
+@import 'jquery-ui/themes/base/autocomplete';
+@import 'jquery-ui/themes/base/resizable';
+@import 'jquery-ui/themes/base/selectable';
+@import 'jquery-ui/themes/base/draggable';
+@import 'jquery-ui/themes/base/sortable';
+@import 'jquery-ui/themes/base/theme';
diff --git a/public/scss/mixins.scss b/public/scss/mixins.scss
new file mode 100644
index 0000000000..13bde0b79b
--- /dev/null
+++ b/public/scss/mixins.scss
@@ -0,0 +1,111 @@
+@mixin no-select() {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+@mixin pointer() {
+ cursor: pointer;
+ *cursor: hand;
+}
+
+@mixin inline-block() {
+ display: inline-block;
+ *display: inline;
+ zoom: 1;
+}
+
+@mixin clear() {
+ clear: both;
+}
+
+@mixin zebra() {
+ &:nth-child(even) {
+ background: rgba(191,191,191,0.2);
+ }
+
+ &:nth-child(odd) {
+ background: rgba(223,223,223,0.2);
+ }
+}
+
+@mixin border-radius($radius: 5px){
+ -webkit-border-radius: $radius;
+ -moz-border-radius: $radius;
+ -ms-border-radius: $radius;
+ -o-border-radius: $radius;
+ border-radius: $radius;
+}
+
+@mixin text-ellipsis() {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+@mixin fix-lists() {
+ ul {
+ > li {
+ list-style-type: disc;
+
+ ul > li {
+ list-style-type: circle;
+
+ ul > li {
+ list-style-type: square;
+ }
+ }
+ }
+ }
+
+ 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;
+ }
+}
+
+@mixin user-icon-style($size: 32px, $font-size: 1.5rem, $border-radius: inherit){
+ border-radius: $border-radius;
+ width: $size;
+ height: $size;
+ line-height: $size;
+ font-size: $font-size;
+}
+
+@mixin line-clamp($lines) {
+ overflow: hidden;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: $lines;
+ white-space: initial;
+ max-height: calc(1.5em * $lines);
+}
+
+@for $i from 1 through 6 {
+ .line-clamp-#{$i} {
+ @include line-clamp($i);
+ }
+}
+
+@each $color, $value in $grays {
+ .border-gray-#{$color} {
+ border-color: $value !important;
+ }
+}
\ No newline at end of file
diff --git a/public/less/modals.less b/public/scss/modals.scss
similarity index 72%
rename from public/less/modals.less
rename to public/scss/modals.scss
index 8bf0da402e..bd635cc7fb 100644
--- a/public/less/modals.less
+++ b/public/scss/modals.scss
@@ -2,10 +2,10 @@
position: fixed;
bottom: 10%;
right: 2rem;
- z-index: 1;
+ z-index: $zindex-modal;
}
-@media screen and (min-width: @screen-sm-min) {
+@include media-breakpoint-up(sm) {
.tool-modal {
max-width: 33%;
}
diff --git a/public/scss/modules/bottom-sheet.scss b/public/scss/modules/bottom-sheet.scss
new file mode 100644
index 0000000000..ae51326979
--- /dev/null
+++ b/public/scss/modules/bottom-sheet.scss
@@ -0,0 +1,51 @@
+.bottom-sheet {
+ @include media-breakpoint-down(sm) {
+ .dropdown-menu {
+ display: block;
+ visibility: hidden;
+
+ position: fixed!important;
+ inset: auto 0 0 0!important;
+
+ margin: 0 -1px -1px -1px;
+ padding: 0 5px;
+ max-height: 60%;
+
+ box-shadow: 0 2px 6px rgba(0,0,0,0.35);
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ transform: translate3d(0, 350px, 0);
+ transition: transform 0.3s, visibility 0s 0.3s;
+ z-index: $zindex-popover;
+ padding: 5px 0 10px;
+
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+
+ > li {
+ > a {
+ padding: 10px 20px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ &.divider {
+ padding: 0;
+ }
+ }
+ }
+
+ .dropdown-menu.show {
+ transform: none!important;
+ visibility: visible;
+ transition-delay: 0s;
+ top: auto;
+ width: auto;
+ }
+
+ .dropdown-backdrop {
+ background-color: rgba(0, 0, 0, .3);
+ }
+ }
+}
diff --git a/public/scss/modules/icon-picker.scss b/public/scss/modules/icon-picker.scss
new file mode 100644
index 0000000000..d92b1152be
--- /dev/null
+++ b/public/scss/modules/icon-picker.scss
@@ -0,0 +1,21 @@
+.icon-container {
+ .fa-nbb-none {
+ border: 1px dotted $black;
+ }
+ .nbb-fa-icons {
+ margin: 0;
+ i {
+ width: 36px;
+ height: 36px;
+ cursor: pointer;
+ line-height: 36px;
+ text-align: center;
+ color: $body-color;
+ margin: 4px;
+
+ &:hover, &.selected {
+ background: $component-active-bg;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/scss/modules/picture-switcher.scss b/public/scss/modules/picture-switcher.scss
new file mode 100644
index 0000000000..218f826690
--- /dev/null
+++ b/public/scss/modules/picture-switcher.scss
@@ -0,0 +1,59 @@
+.picture-switcher {
+ h4 {
+ line-height: 46px;
+ margin: 0;
+ }
+
+ .modal-body .btn {
+ padding: 10px 5px;
+ font-size: 13px;
+ }
+
+ label {
+ vertical-align: top;
+ line-height: 26px;
+
+ > input[type="radio"] {
+ display: none;
+
+ &:checked {
+ + span:before {
+ border-radius: 50%;
+ border: 2px solid $primary;
+ position: relative;
+ top: -4px;
+ left: -4px;
+ }
+ }
+
+ &[value="transparent"] {
+ &:checked + span:before {
+ padding-top: 2px;
+ padding-left: 2px;
+ }
+
+ + span:before {
+ content: '\f05e';
+ font-family: FontAwesome;
+ color: $gray-200;
+ font-size: 28px;
+ }
+ }
+ }
+
+ span {
+ display: inline-block;
+ width: 24px;
+ height: 24px;
+ border-radius: 50%;
+ margin-right: .5em;
+
+ &:before {
+ content: '';
+ display: inline-block;
+ width: 32px;
+ height: 32px;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/scss/overrides.scss b/public/scss/overrides.scss
new file mode 100644
index 0000000000..7c733e7ad6
--- /dev/null
+++ b/public/scss/overrides.scss
@@ -0,0 +1 @@
+// global bs5 overrides if necessary
\ No newline at end of file
diff --git a/public/scss/responsive-utilities.scss b/public/scss/responsive-utilities.scss
new file mode 100644
index 0000000000..ea91213edf
--- /dev/null
+++ b/public/scss/responsive-utilities.scss
@@ -0,0 +1,189 @@
+//
+// Responsive: Utility classes
+// --------------------------------------------------
+
+// borders, see https://getbootstrap.com/docs/5.2/utilities/api/#enable-responsive
+$utilities: map-merge(
+ $utilities, (
+ "border": map-merge(
+ map-get($utilities, "border"),
+ ( responsive: true ),
+ ),
+ "border-start": map-merge(
+ map-get($utilities, "border-start"),
+ ( responsive: true ),
+ ),
+ "border-end": map-merge(
+ map-get($utilities, "border-end"),
+ ( responsive: true ),
+ ),
+ "border-top": map-merge(
+ map-get($utilities, "border-top"),
+ ( responsive: true ),
+ ),
+ "border-bottom": map-merge(
+ map-get($utilities, "border-bottom"),
+ ( responsive: true ),
+ ),
+ )
+);
+
+// ported to scss from bs3 less
+@mixin responsive-visibility() {
+ display: block !important;
+ // TODO: fix for scss
+ // table& { display: table; }
+ // tr& { display: table-row !important; }
+ // th&,
+ // td& { display: table-cell !important; }
+}
+
+@mixin responsive-invisibility() {
+ display: none !important;
+}
+
+
+// Visibility utilities
+// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+ @include responsive-invisibility();
+}
+
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+ display: none !important;
+}
+
+.visible-xs {
+ @include media-breakpoint-down(sm) {
+ @include responsive-visibility();
+ }
+}
+
+.visible-xs-block {
+ @include media-breakpoint-down(sm) {
+ display: block !important;
+ }
+}
+.visible-xs-inline {
+ @include media-breakpoint-down(sm) {
+ display: inline !important;
+ }
+}
+.visible-xs-inline-block {
+ @include media-breakpoint-down(sm) {
+ display: inline-block !important;
+ }
+}
+
+.visible-sm {
+ // @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ @include media-breakpoint-between(sm, md) {
+ @include responsive-visibility();
+ }
+}
+.visible-sm-block {
+ // @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ @include media-breakpoint-between(sm, md) {
+ display: block !important;
+ }
+}
+.visible-sm-inline {
+ // @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ @include media-breakpoint-between(sm, md) {
+ display: inline !important;
+ }
+}
+.visible-sm-inline-block {
+ // @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ @include media-breakpoint-between(sm, md) {
+ display: inline-block !important;
+ }
+}
+
+.visible-md {
+ // @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ @include media-breakpoint-between(md, lg) {
+ @include responsive-visibility();
+ }
+}
+.visible-md-block {
+ // @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ @include media-breakpoint-between(md, lg) {
+ display: block !important;
+ }
+}
+.visible-md-inline {
+ // @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ @include media-breakpoint-between(md, lg) {
+ display: inline !important;
+ }
+}
+.visible-md-inline-block {
+ // @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ @include media-breakpoint-between(md, lg) {
+ display: inline-block !important;
+ }
+}
+
+.visible-lg {
+ // @media (min-width: @screen-lg-min) {
+ @include media-breakpoint-up(lg) {
+ @include responsive-visibility();
+ }
+}
+.visible-lg-block {
+ // @media (min-width: @screen-lg-min) {
+ @include media-breakpoint-up(lg) {
+ display: block !important;
+ }
+}
+.visible-lg-inline {
+ // @media (min-width: @screen-lg-min) {
+ @include media-breakpoint-up(lg) {
+ display: inline !important;
+ }
+}
+.visible-lg-inline-block {
+ // @media (min-width: @screen-lg-min) {
+ @include media-breakpoint-up(lg) {
+ display: inline-block !important;
+ }
+}
+
+.hidden-xs {
+ @include media-breakpoint-down(sm) {
+ @include responsive-invisibility();
+ }
+}
+.hidden-sm {
+ @include media-breakpoint-between(sm, md) {
+ // @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ @include responsive-invisibility();
+ }
+}
+.hidden-md {
+ @include media-breakpoint-between(md, lg) {
+ //@media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ @include responsive-invisibility();
+ }
+}
+.hidden-lg {
+ @include media-breakpoint-up(lg) {
+ //@media (min-width: @screen-lg-min) {
+ @include responsive-invisibility();
+ }
+}
diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js
index dd1b80b05e..d65e291ea7 100644
--- a/public/src/admin/admin.js
+++ b/public/src/admin/admin.js
@@ -2,9 +2,9 @@
require('../app');
-// scripts-admin.js contains javascript files
+// scripts-admin.js is generated during build, it contains javascript files
// from plugins that add files to "acpScripts" block in plugin.json
-// eslint-disable-next-line import/no-unresolved
+// eslint-disable-next-line
require('../../scripts-admin');
app.onDomReady();
@@ -163,7 +163,7 @@ app.onDomReady();
// need to preload the compiled alert template
// otherwise it can be unloaded when rebuild & restart is run
// the client can't fetch the template file, resulting in an error
- benchpress.render('alert', {}).then(function () {
+ benchpress.render('partials/toast', {}).then(function () {
$('.rebuild-and-restart').off('click').on('click', function () {
bootbox.confirm('[[admin/admin:alert.confirm-rebuild-and-restart]]', function (confirm) {
if (confirm) {
@@ -210,8 +210,7 @@ app.onDomReady();
slideout.close();
env = utils.findBootstrapEnvironment();
-
- if (env === 'md' || env === 'lg') {
+ if (['xxl', 'xl', 'lg'].includes(env)) {
slideout.disableTouch();
$('#header').css({
position: 'relative',
diff --git a/public/src/admin/advanced/logs.js b/public/src/admin/advanced/logs.js
index 15705bb8a0..9d3be96752 100644
--- a/public/src/admin/advanced/logs.js
+++ b/public/src/admin/advanced/logs.js
@@ -7,8 +7,6 @@ define('admin/advanced/logs', ['alerts'], function (alerts) {
Logs.init = function () {
const logsEl = $('.logs pre');
logsEl.scrollTop(logsEl.prop('scrollHeight'));
- // Affix menu
- $('.affix').affix();
$('.logs').find('button[data-action]').on('click', function () {
const btnEl = $(this);
@@ -16,21 +14,14 @@ define('admin/advanced/logs', ['alerts'], function (alerts) {
switch (action) {
case 'reload':
- socket.emit('admin.logs.get', function (err, logs) {
- if (!err) {
- logsEl.text(logs);
- logsEl.scrollTop(logsEl.prop('scrollHeight'));
- } else {
- alerts.error(err);
- }
- });
+ loadLogs();
break;
case 'clear':
socket.emit('admin.logs.clear', function (err) {
if (!err) {
alerts.success('[[admin/advanced/logs:clear-success]]');
- btnEl.prev().click();
+ loadLogs();
} else {
alerts.error(err);
}
@@ -40,5 +31,17 @@ define('admin/advanced/logs', ['alerts'], function (alerts) {
});
};
+ function loadLogs() {
+ const logsEl = $('.logs pre');
+ socket.emit('admin.logs.get', function (err, logs) {
+ if (!err) {
+ logsEl.text(logs);
+ logsEl.scrollTop(logsEl.prop('scrollHeight'));
+ } else {
+ alerts.error(err);
+ }
+ });
+ }
+
return Logs;
});
diff --git a/public/src/admin/appearance/customise.js b/public/src/admin/appearance/customise.js
index 5e9a943e79..31a156cf3b 100644
--- a/public/src/admin/appearance/customise.js
+++ b/public/src/admin/appearance/customise.js
@@ -9,7 +9,7 @@ define('admin/appearance/customise', ['admin/settings', 'ace/ace'], function (Se
$('#customJS').text($('#customJS-holder').val());
$('#customHTML').text($('#customHTML-holder').val());
- initACE('customCSS', 'less', '#customCSS-holder');
+ initACE('customCSS', 'scss', '#customCSS-holder');
initACE('customJS', 'javascript', '#customJS-holder');
initACE('customHTML', 'html', '#customHTML-holder');
diff --git a/public/src/admin/appearance/skins.js b/public/src/admin/appearance/skins.js
index ea1336bd36..eb3574206d 100644
--- a/public/src/admin/appearance/skins.js
+++ b/public/src/admin/appearance/skins.js
@@ -8,7 +8,7 @@ define('admin/appearance/skins', ['translator', 'alerts'], function (translator,
// Populate skins from Bootswatch API
$.ajax({
method: 'get',
- url: 'https://bootswatch.com/api/3.json',
+ url: 'https://bootswatch.com/api/5.json',
}).done(Skins.render);
$('#skins').on('click', function (e) {
@@ -69,12 +69,11 @@ define('admin/appearance/skins', ['translator', 'alerts'], function (translator,
}, function (html) {
themeContainer.html(html);
- if (config['theme:src']) {
- const skin = config['theme:src']
- .match(/latest\/(\S+)\/bootstrap.min.css/)[1]
- .replace(/(^|\s)([a-z])/g, function (m, p1, p2) { return p1 + p2.toUpperCase(); });
-
- highlightSelectedTheme(skin);
+ if (app.config.bootswatchSkin) {
+ const skin = app.config.bootswatchSkin;
+ highlightSelectedTheme(
+ skin.charAt(0).toUpperCase() + skin.slice(1)
+ );
}
});
};
diff --git a/public/src/admin/dashboard.js b/public/src/admin/dashboard.js
index 43897e8c14..d8bdd5386d 100644
--- a/public/src/admin/dashboard.js
+++ b/public/src/admin/dashboard.js
@@ -43,7 +43,9 @@ define('admin/dashboard', [
isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
- $('[data-toggle="tooltip"]').tooltip();
+ $('[data-bs-toggle="tooltip"]').tooltip({
+ animation: false,
+ });
setupRealtimeButton();
setupGraphs(function () {
@@ -64,19 +66,19 @@ define('admin/dashboard', [
graphData.rooms = data;
- const html = '' +
+ const html = '
' +
'
' + data.onlineRegisteredCount + ' ' +
'
[[admin/dashboard:active-users.users]]
' +
'
' +
- '
' +
+ '
' +
'
' + data.onlineGuestCount + ' ' +
'
[[admin/dashboard:active-users.guests]]
' +
'
' +
- '
'));
}
} else if (location === 'header' && !$('#content [widget-area="header"],#content [data-widget-area="header"]').length) {
- $('#content').prepend($('
'));
+ $('#content').prepend($('
'));
}
area = $('#content [widget-area="' + location + '"],#content [data-widget-area="' + location + '"]').eq(0);
if (html && area.length) {
area.html(html);
- area.find('img:not(.not-responsive)').addClass('img-responsive');
+ area.find('img:not(.not-responsive)').addClass('img-fluid');
}
if (widgetsAtLocation.length) {
diff --git a/public/vendor/fontawesome/LICENSE.txt b/public/vendor/fontawesome/LICENSE.txt
index f31bef92b6..cc557ece45 100644
--- a/public/vendor/fontawesome/LICENSE.txt
+++ b/public/vendor/fontawesome/LICENSE.txt
@@ -1,23 +1,151 @@
+Fonticons, Inc. (https://fontawesome.com)
+
+--------------------------------------------------------------------------------
+
Font Awesome Free License
--------------------------
Font Awesome Free is free, open source, and GPL friendly. You can use it for
commercial projects, open source projects, or really almost whatever you want.
Full Font Awesome Free license: https://fontawesome.com/license/free.
+--------------------------------------------------------------------------------
+
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
-In the Font Awesome Free download, the CC BY 4.0 license applies to all icons
-packaged as SVG and JS file types.
-# Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL)
+The Font Awesome Free download is licensed under a Creative Commons
+Attribution 4.0 International License and applies to all icons packaged
+as SVG and JS file types.
+
+--------------------------------------------------------------------------------
+
+# Fonts: SIL OFL 1.1 License
+
In the Font Awesome Free download, the SIL OFL license applies to all icons
packaged as web and desktop font files.
+Copyright (c) 2022 Fonticons, Inc. (https://fontawesome.com)
+with Reserved Font Name: "Font Awesome".
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+SIL OPEN FONT LICENSE
+Version 1.1 - 26 February 2007
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting — in part or in whole — any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+
+--------------------------------------------------------------------------------
+
# Code: MIT License (https://opensource.org/licenses/MIT)
+
In the Font Awesome Free download, the MIT license applies to all non-font and
non-icon files.
+Copyright 2022 Fonticons, 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.
+
+--------------------------------------------------------------------------------
+
# Attribution
+
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
Awesome Free files already contain embedded comments with sufficient
attribution, so you shouldn't need to do anything additional when using these
@@ -27,7 +155,10 @@ We've kept attribution comments terse, so we ask that you do not actively work
to remove them from files, especially code. They're a great way for folks to
learn about Font Awesome.
+--------------------------------------------------------------------------------
+
# Brand Icons
+
All brand icons are trademarks of their respective owners. The use of these
trademarks does not indicate endorsement of the trademark holder by Font
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
diff --git a/public/vendor/fontawesome/attribution.js b/public/vendor/fontawesome/attribution.js
index 2d28cc90d6..a659606c8d 100644
--- a/public/vendor/fontawesome/attribution.js
+++ b/public/vendor/fontawesome/attribution.js
@@ -1,3 +1,3 @@
-console.log(`Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com
+console.log(`Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
`)
\ No newline at end of file
diff --git a/public/vendor/fontawesome/less/_animated.less b/public/vendor/fontawesome/less/_animated.less
deleted file mode 100644
index 704ec95103..0000000000
--- a/public/vendor/fontawesome/less/_animated.less
+++ /dev/null
@@ -1,19 +0,0 @@
-// Animated Icons
-// --------------------------
-
-.@{fa-css-prefix}-spin {
- animation: fa-spin 2s infinite linear;
-}
-
-.@{fa-css-prefix}-pulse {
- animation: fa-spin 1s infinite steps(8);
-}
-
-@keyframes fa-spin {
- 0% {
- transform: rotate(0deg);
- }
- 100% {
- transform: rotate(360deg);
- }
-}
diff --git a/public/vendor/fontawesome/less/_bordered-pulled.less b/public/vendor/fontawesome/less/_bordered-pulled.less
deleted file mode 100644
index 29a356b423..0000000000
--- a/public/vendor/fontawesome/less/_bordered-pulled.less
+++ /dev/null
@@ -1,16 +0,0 @@
-// Bordered & Pulled
-// -------------------------
-
-.@{fa-css-prefix}-border {
- border-radius: .1em;
- border: solid .08em @fa-border-color;
- padding: .2em .25em .15em;
-}
-
-.@{fa-css-prefix}-pull-left { float: left; }
-.@{fa-css-prefix}-pull-right { float: right; }
-
-.@{fa-css-prefix}, .fas, .far, .fal, .fab {
- &.@{fa-css-prefix}-pull-left { margin-right: .3em; }
- &.@{fa-css-prefix}-pull-right { margin-left: .3em; }
-}
diff --git a/public/vendor/fontawesome/less/_core.less b/public/vendor/fontawesome/less/_core.less
deleted file mode 100644
index e8c2ff3898..0000000000
--- a/public/vendor/fontawesome/less/_core.less
+++ /dev/null
@@ -1,12 +0,0 @@
-// Base Class Definition
-// -------------------------
-
-.@{fa-css-prefix}, .fas, .far, .fal, .fad, .fab {
- -moz-osx-font-smoothing: grayscale;
- -webkit-font-smoothing: antialiased;
- display: inline-block;
- font-style: normal;
- font-variant: normal;
- text-rendering: auto;
- line-height: 1;
-}
diff --git a/public/vendor/fontawesome/less/_fixed-width.less b/public/vendor/fontawesome/less/_fixed-width.less
deleted file mode 100644
index be817c6375..0000000000
--- a/public/vendor/fontawesome/less/_fixed-width.less
+++ /dev/null
@@ -1,6 +0,0 @@
-// Fixed Width Icons
-// -------------------------
-.@{fa-css-prefix}-fw {
- text-align: center;
- width: (20em / 16);
-}
diff --git a/public/vendor/fontawesome/less/_icons.less b/public/vendor/fontawesome/less/_icons.less
deleted file mode 100644
index 5dc7df5ebb..0000000000
--- a/public/vendor/fontawesome/less/_icons.less
+++ /dev/null
@@ -1,1462 +0,0 @@
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
- readers do not read off random characters that represent icons */
-
-.@{fa-css-prefix}-500px:before { content: @fa-var-500px; }
-.@{fa-css-prefix}-accessible-icon:before { content: @fa-var-accessible-icon; }
-.@{fa-css-prefix}-accusoft:before { content: @fa-var-accusoft; }
-.@{fa-css-prefix}-acquisitions-incorporated:before { content: @fa-var-acquisitions-incorporated; }
-.@{fa-css-prefix}-ad:before { content: @fa-var-ad; }
-.@{fa-css-prefix}-address-book:before { content: @fa-var-address-book; }
-.@{fa-css-prefix}-address-card:before { content: @fa-var-address-card; }
-.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; }
-.@{fa-css-prefix}-adn:before { content: @fa-var-adn; }
-.@{fa-css-prefix}-adversal:before { content: @fa-var-adversal; }
-.@{fa-css-prefix}-affiliatetheme:before { content: @fa-var-affiliatetheme; }
-.@{fa-css-prefix}-air-freshener:before { content: @fa-var-air-freshener; }
-.@{fa-css-prefix}-airbnb:before { content: @fa-var-airbnb; }
-.@{fa-css-prefix}-algolia:before { content: @fa-var-algolia; }
-.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; }
-.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; }
-.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; }
-.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; }
-.@{fa-css-prefix}-alipay:before { content: @fa-var-alipay; }
-.@{fa-css-prefix}-allergies:before { content: @fa-var-allergies; }
-.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; }
-.@{fa-css-prefix}-amazon-pay:before { content: @fa-var-amazon-pay; }
-.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; }
-.@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; }
-.@{fa-css-prefix}-amilia:before { content: @fa-var-amilia; }
-.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; }
-.@{fa-css-prefix}-android:before { content: @fa-var-android; }
-.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; }
-.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; }
-.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; }
-.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; }
-.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; }
-.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; }
-.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; }
-.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; }
-.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; }
-.@{fa-css-prefix}-angry:before { content: @fa-var-angry; }
-.@{fa-css-prefix}-angrycreative:before { content: @fa-var-angrycreative; }
-.@{fa-css-prefix}-angular:before { content: @fa-var-angular; }
-.@{fa-css-prefix}-ankh:before { content: @fa-var-ankh; }
-.@{fa-css-prefix}-app-store:before { content: @fa-var-app-store; }
-.@{fa-css-prefix}-app-store-ios:before { content: @fa-var-app-store-ios; }
-.@{fa-css-prefix}-apper:before { content: @fa-var-apper; }
-.@{fa-css-prefix}-apple:before { content: @fa-var-apple; }
-.@{fa-css-prefix}-apple-alt:before { content: @fa-var-apple-alt; }
-.@{fa-css-prefix}-apple-pay:before { content: @fa-var-apple-pay; }
-.@{fa-css-prefix}-archive:before { content: @fa-var-archive; }
-.@{fa-css-prefix}-archway:before { content: @fa-var-archway; }
-.@{fa-css-prefix}-arrow-alt-circle-down:before { content: @fa-var-arrow-alt-circle-down; }
-.@{fa-css-prefix}-arrow-alt-circle-left:before { content: @fa-var-arrow-alt-circle-left; }
-.@{fa-css-prefix}-arrow-alt-circle-right:before { content: @fa-var-arrow-alt-circle-right; }
-.@{fa-css-prefix}-arrow-alt-circle-up:before { content: @fa-var-arrow-alt-circle-up; }
-.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; }
-.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; }
-.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; }
-.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; }
-.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; }
-.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; }
-.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; }
-.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; }
-.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; }
-.@{fa-css-prefix}-arrows-alt-h:before { content: @fa-var-arrows-alt-h; }
-.@{fa-css-prefix}-arrows-alt-v:before { content: @fa-var-arrows-alt-v; }
-.@{fa-css-prefix}-artstation:before { content: @fa-var-artstation; }
-.@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; }
-.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; }
-.@{fa-css-prefix}-asymmetrik:before { content: @fa-var-asymmetrik; }
-.@{fa-css-prefix}-at:before { content: @fa-var-at; }
-.@{fa-css-prefix}-atlas:before { content: @fa-var-atlas; }
-.@{fa-css-prefix}-atlassian:before { content: @fa-var-atlassian; }
-.@{fa-css-prefix}-atom:before { content: @fa-var-atom; }
-.@{fa-css-prefix}-audible:before { content: @fa-var-audible; }
-.@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; }
-.@{fa-css-prefix}-autoprefixer:before { content: @fa-var-autoprefixer; }
-.@{fa-css-prefix}-avianex:before { content: @fa-var-avianex; }
-.@{fa-css-prefix}-aviato:before { content: @fa-var-aviato; }
-.@{fa-css-prefix}-award:before { content: @fa-var-award; }
-.@{fa-css-prefix}-aws:before { content: @fa-var-aws; }
-.@{fa-css-prefix}-baby:before { content: @fa-var-baby; }
-.@{fa-css-prefix}-baby-carriage:before { content: @fa-var-baby-carriage; }
-.@{fa-css-prefix}-backspace:before { content: @fa-var-backspace; }
-.@{fa-css-prefix}-backward:before { content: @fa-var-backward; }
-.@{fa-css-prefix}-bacon:before { content: @fa-var-bacon; }
-.@{fa-css-prefix}-bacteria:before { content: @fa-var-bacteria; }
-.@{fa-css-prefix}-bacterium:before { content: @fa-var-bacterium; }
-.@{fa-css-prefix}-bahai:before { content: @fa-var-bahai; }
-.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; }
-.@{fa-css-prefix}-balance-scale-left:before { content: @fa-var-balance-scale-left; }
-.@{fa-css-prefix}-balance-scale-right:before { content: @fa-var-balance-scale-right; }
-.@{fa-css-prefix}-ban:before { content: @fa-var-ban; }
-.@{fa-css-prefix}-band-aid:before { content: @fa-var-band-aid; }
-.@{fa-css-prefix}-bandcamp:before { content: @fa-var-bandcamp; }
-.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; }
-.@{fa-css-prefix}-bars:before { content: @fa-var-bars; }
-.@{fa-css-prefix}-baseball-ball:before { content: @fa-var-baseball-ball; }
-.@{fa-css-prefix}-basketball-ball:before { content: @fa-var-basketball-ball; }
-.@{fa-css-prefix}-bath:before { content: @fa-var-bath; }
-.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; }
-.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; }
-.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; }
-.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; }
-.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; }
-.@{fa-css-prefix}-battle-net:before { content: @fa-var-battle-net; }
-.@{fa-css-prefix}-bed:before { content: @fa-var-bed; }
-.@{fa-css-prefix}-beer:before { content: @fa-var-beer; }
-.@{fa-css-prefix}-behance:before { content: @fa-var-behance; }
-.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; }
-.@{fa-css-prefix}-bell:before { content: @fa-var-bell; }
-.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; }
-.@{fa-css-prefix}-bezier-curve:before { content: @fa-var-bezier-curve; }
-.@{fa-css-prefix}-bible:before { content: @fa-var-bible; }
-.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; }
-.@{fa-css-prefix}-biking:before { content: @fa-var-biking; }
-.@{fa-css-prefix}-bimobject:before { content: @fa-var-bimobject; }
-.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; }
-.@{fa-css-prefix}-biohazard:before { content: @fa-var-biohazard; }
-.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; }
-.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; }
-.@{fa-css-prefix}-bitcoin:before { content: @fa-var-bitcoin; }
-.@{fa-css-prefix}-bity:before { content: @fa-var-bity; }
-.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; }
-.@{fa-css-prefix}-blackberry:before { content: @fa-var-blackberry; }
-.@{fa-css-prefix}-blender:before { content: @fa-var-blender; }
-.@{fa-css-prefix}-blender-phone:before { content: @fa-var-blender-phone; }
-.@{fa-css-prefix}-blind:before { content: @fa-var-blind; }
-.@{fa-css-prefix}-blog:before { content: @fa-var-blog; }
-.@{fa-css-prefix}-blogger:before { content: @fa-var-blogger; }
-.@{fa-css-prefix}-blogger-b:before { content: @fa-var-blogger-b; }
-.@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; }
-.@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; }
-.@{fa-css-prefix}-bold:before { content: @fa-var-bold; }
-.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; }
-.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; }
-.@{fa-css-prefix}-bone:before { content: @fa-var-bone; }
-.@{fa-css-prefix}-bong:before { content: @fa-var-bong; }
-.@{fa-css-prefix}-book:before { content: @fa-var-book; }
-.@{fa-css-prefix}-book-dead:before { content: @fa-var-book-dead; }
-.@{fa-css-prefix}-book-medical:before { content: @fa-var-book-medical; }
-.@{fa-css-prefix}-book-open:before { content: @fa-var-book-open; }
-.@{fa-css-prefix}-book-reader:before { content: @fa-var-book-reader; }
-.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; }
-.@{fa-css-prefix}-bootstrap:before { content: @fa-var-bootstrap; }
-.@{fa-css-prefix}-border-all:before { content: @fa-var-border-all; }
-.@{fa-css-prefix}-border-none:before { content: @fa-var-border-none; }
-.@{fa-css-prefix}-border-style:before { content: @fa-var-border-style; }
-.@{fa-css-prefix}-bowling-ball:before { content: @fa-var-bowling-ball; }
-.@{fa-css-prefix}-box:before { content: @fa-var-box; }
-.@{fa-css-prefix}-box-open:before { content: @fa-var-box-open; }
-.@{fa-css-prefix}-box-tissue:before { content: @fa-var-box-tissue; }
-.@{fa-css-prefix}-boxes:before { content: @fa-var-boxes; }
-.@{fa-css-prefix}-braille:before { content: @fa-var-braille; }
-.@{fa-css-prefix}-brain:before { content: @fa-var-brain; }
-.@{fa-css-prefix}-bread-slice:before { content: @fa-var-bread-slice; }
-.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; }
-.@{fa-css-prefix}-briefcase-medical:before { content: @fa-var-briefcase-medical; }
-.@{fa-css-prefix}-broadcast-tower:before { content: @fa-var-broadcast-tower; }
-.@{fa-css-prefix}-broom:before { content: @fa-var-broom; }
-.@{fa-css-prefix}-brush:before { content: @fa-var-brush; }
-.@{fa-css-prefix}-btc:before { content: @fa-var-btc; }
-.@{fa-css-prefix}-buffer:before { content: @fa-var-buffer; }
-.@{fa-css-prefix}-bug:before { content: @fa-var-bug; }
-.@{fa-css-prefix}-building:before { content: @fa-var-building; }
-.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; }
-.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; }
-.@{fa-css-prefix}-burn:before { content: @fa-var-burn; }
-.@{fa-css-prefix}-buromobelexperte:before { content: @fa-var-buromobelexperte; }
-.@{fa-css-prefix}-bus:before { content: @fa-var-bus; }
-.@{fa-css-prefix}-bus-alt:before { content: @fa-var-bus-alt; }
-.@{fa-css-prefix}-business-time:before { content: @fa-var-business-time; }
-.@{fa-css-prefix}-buy-n-large:before { content: @fa-var-buy-n-large; }
-.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; }
-.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; }
-.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; }
-.@{fa-css-prefix}-calendar-alt:before { content: @fa-var-calendar-alt; }
-.@{fa-css-prefix}-calendar-check:before { content: @fa-var-calendar-check; }
-.@{fa-css-prefix}-calendar-day:before { content: @fa-var-calendar-day; }
-.@{fa-css-prefix}-calendar-minus:before { content: @fa-var-calendar-minus; }
-.@{fa-css-prefix}-calendar-plus:before { content: @fa-var-calendar-plus; }
-.@{fa-css-prefix}-calendar-times:before { content: @fa-var-calendar-times; }
-.@{fa-css-prefix}-calendar-week:before { content: @fa-var-calendar-week; }
-.@{fa-css-prefix}-camera:before { content: @fa-var-camera; }
-.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; }
-.@{fa-css-prefix}-campground:before { content: @fa-var-campground; }
-.@{fa-css-prefix}-canadian-maple-leaf:before { content: @fa-var-canadian-maple-leaf; }
-.@{fa-css-prefix}-candy-cane:before { content: @fa-var-candy-cane; }
-.@{fa-css-prefix}-cannabis:before { content: @fa-var-cannabis; }
-.@{fa-css-prefix}-capsules:before { content: @fa-var-capsules; }
-.@{fa-css-prefix}-car:before { content: @fa-var-car; }
-.@{fa-css-prefix}-car-alt:before { content: @fa-var-car-alt; }
-.@{fa-css-prefix}-car-battery:before { content: @fa-var-car-battery; }
-.@{fa-css-prefix}-car-crash:before { content: @fa-var-car-crash; }
-.@{fa-css-prefix}-car-side:before { content: @fa-var-car-side; }
-.@{fa-css-prefix}-caravan:before { content: @fa-var-caravan; }
-.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; }
-.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; }
-.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; }
-.@{fa-css-prefix}-caret-square-down:before { content: @fa-var-caret-square-down; }
-.@{fa-css-prefix}-caret-square-left:before { content: @fa-var-caret-square-left; }
-.@{fa-css-prefix}-caret-square-right:before { content: @fa-var-caret-square-right; }
-.@{fa-css-prefix}-caret-square-up:before { content: @fa-var-caret-square-up; }
-.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; }
-.@{fa-css-prefix}-carrot:before { content: @fa-var-carrot; }
-.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; }
-.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; }
-.@{fa-css-prefix}-cash-register:before { content: @fa-var-cash-register; }
-.@{fa-css-prefix}-cat:before { content: @fa-var-cat; }
-.@{fa-css-prefix}-cc-amazon-pay:before { content: @fa-var-cc-amazon-pay; }
-.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; }
-.@{fa-css-prefix}-cc-apple-pay:before { content: @fa-var-cc-apple-pay; }
-.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; }
-.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; }
-.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; }
-.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; }
-.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; }
-.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; }
-.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; }
-.@{fa-css-prefix}-centercode:before { content: @fa-var-centercode; }
-.@{fa-css-prefix}-centos:before { content: @fa-var-centos; }
-.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; }
-.@{fa-css-prefix}-chair:before { content: @fa-var-chair; }
-.@{fa-css-prefix}-chalkboard:before { content: @fa-var-chalkboard; }
-.@{fa-css-prefix}-chalkboard-teacher:before { content: @fa-var-chalkboard-teacher; }
-.@{fa-css-prefix}-charging-station:before { content: @fa-var-charging-station; }
-.@{fa-css-prefix}-chart-area:before { content: @fa-var-chart-area; }
-.@{fa-css-prefix}-chart-bar:before { content: @fa-var-chart-bar; }
-.@{fa-css-prefix}-chart-line:before { content: @fa-var-chart-line; }
-.@{fa-css-prefix}-chart-pie:before { content: @fa-var-chart-pie; }
-.@{fa-css-prefix}-check:before { content: @fa-var-check; }
-.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; }
-.@{fa-css-prefix}-check-double:before { content: @fa-var-check-double; }
-.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; }
-.@{fa-css-prefix}-cheese:before { content: @fa-var-cheese; }
-.@{fa-css-prefix}-chess:before { content: @fa-var-chess; }
-.@{fa-css-prefix}-chess-bishop:before { content: @fa-var-chess-bishop; }
-.@{fa-css-prefix}-chess-board:before { content: @fa-var-chess-board; }
-.@{fa-css-prefix}-chess-king:before { content: @fa-var-chess-king; }
-.@{fa-css-prefix}-chess-knight:before { content: @fa-var-chess-knight; }
-.@{fa-css-prefix}-chess-pawn:before { content: @fa-var-chess-pawn; }
-.@{fa-css-prefix}-chess-queen:before { content: @fa-var-chess-queen; }
-.@{fa-css-prefix}-chess-rook:before { content: @fa-var-chess-rook; }
-.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; }
-.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; }
-.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; }
-.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; }
-.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; }
-.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; }
-.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; }
-.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; }
-.@{fa-css-prefix}-child:before { content: @fa-var-child; }
-.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; }
-.@{fa-css-prefix}-chromecast:before { content: @fa-var-chromecast; }
-.@{fa-css-prefix}-church:before { content: @fa-var-church; }
-.@{fa-css-prefix}-circle:before { content: @fa-var-circle; }
-.@{fa-css-prefix}-circle-notch:before { content: @fa-var-circle-notch; }
-.@{fa-css-prefix}-city:before { content: @fa-var-city; }
-.@{fa-css-prefix}-clinic-medical:before { content: @fa-var-clinic-medical; }
-.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; }
-.@{fa-css-prefix}-clipboard-check:before { content: @fa-var-clipboard-check; }
-.@{fa-css-prefix}-clipboard-list:before { content: @fa-var-clipboard-list; }
-.@{fa-css-prefix}-clock:before { content: @fa-var-clock; }
-.@{fa-css-prefix}-clone:before { content: @fa-var-clone; }
-.@{fa-css-prefix}-closed-captioning:before { content: @fa-var-closed-captioning; }
-.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; }
-.@{fa-css-prefix}-cloud-download-alt:before { content: @fa-var-cloud-download-alt; }
-.@{fa-css-prefix}-cloud-meatball:before { content: @fa-var-cloud-meatball; }
-.@{fa-css-prefix}-cloud-moon:before { content: @fa-var-cloud-moon; }
-.@{fa-css-prefix}-cloud-moon-rain:before { content: @fa-var-cloud-moon-rain; }
-.@{fa-css-prefix}-cloud-rain:before { content: @fa-var-cloud-rain; }
-.@{fa-css-prefix}-cloud-showers-heavy:before { content: @fa-var-cloud-showers-heavy; }
-.@{fa-css-prefix}-cloud-sun:before { content: @fa-var-cloud-sun; }
-.@{fa-css-prefix}-cloud-sun-rain:before { content: @fa-var-cloud-sun-rain; }
-.@{fa-css-prefix}-cloud-upload-alt:before { content: @fa-var-cloud-upload-alt; }
-.@{fa-css-prefix}-cloudflare:before { content: @fa-var-cloudflare; }
-.@{fa-css-prefix}-cloudscale:before { content: @fa-var-cloudscale; }
-.@{fa-css-prefix}-cloudsmith:before { content: @fa-var-cloudsmith; }
-.@{fa-css-prefix}-cloudversify:before { content: @fa-var-cloudversify; }
-.@{fa-css-prefix}-cocktail:before { content: @fa-var-cocktail; }
-.@{fa-css-prefix}-code:before { content: @fa-var-code; }
-.@{fa-css-prefix}-code-branch:before { content: @fa-var-code-branch; }
-.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; }
-.@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; }
-.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; }
-.@{fa-css-prefix}-cog:before { content: @fa-var-cog; }
-.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; }
-.@{fa-css-prefix}-coins:before { content: @fa-var-coins; }
-.@{fa-css-prefix}-columns:before { content: @fa-var-columns; }
-.@{fa-css-prefix}-comment:before { content: @fa-var-comment; }
-.@{fa-css-prefix}-comment-alt:before { content: @fa-var-comment-alt; }
-.@{fa-css-prefix}-comment-dollar:before { content: @fa-var-comment-dollar; }
-.@{fa-css-prefix}-comment-dots:before { content: @fa-var-comment-dots; }
-.@{fa-css-prefix}-comment-medical:before { content: @fa-var-comment-medical; }
-.@{fa-css-prefix}-comment-slash:before { content: @fa-var-comment-slash; }
-.@{fa-css-prefix}-comments:before { content: @fa-var-comments; }
-.@{fa-css-prefix}-comments-dollar:before { content: @fa-var-comments-dollar; }
-.@{fa-css-prefix}-compact-disc:before { content: @fa-var-compact-disc; }
-.@{fa-css-prefix}-compass:before { content: @fa-var-compass; }
-.@{fa-css-prefix}-compress:before { content: @fa-var-compress; }
-.@{fa-css-prefix}-compress-alt:before { content: @fa-var-compress-alt; }
-.@{fa-css-prefix}-compress-arrows-alt:before { content: @fa-var-compress-arrows-alt; }
-.@{fa-css-prefix}-concierge-bell:before { content: @fa-var-concierge-bell; }
-.@{fa-css-prefix}-confluence:before { content: @fa-var-confluence; }
-.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; }
-.@{fa-css-prefix}-contao:before { content: @fa-var-contao; }
-.@{fa-css-prefix}-cookie:before { content: @fa-var-cookie; }
-.@{fa-css-prefix}-cookie-bite:before { content: @fa-var-cookie-bite; }
-.@{fa-css-prefix}-copy:before { content: @fa-var-copy; }
-.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; }
-.@{fa-css-prefix}-cotton-bureau:before { content: @fa-var-cotton-bureau; }
-.@{fa-css-prefix}-couch:before { content: @fa-var-couch; }
-.@{fa-css-prefix}-cpanel:before { content: @fa-var-cpanel; }
-.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; }
-.@{fa-css-prefix}-creative-commons-by:before { content: @fa-var-creative-commons-by; }
-.@{fa-css-prefix}-creative-commons-nc:before { content: @fa-var-creative-commons-nc; }
-.@{fa-css-prefix}-creative-commons-nc-eu:before { content: @fa-var-creative-commons-nc-eu; }
-.@{fa-css-prefix}-creative-commons-nc-jp:before { content: @fa-var-creative-commons-nc-jp; }
-.@{fa-css-prefix}-creative-commons-nd:before { content: @fa-var-creative-commons-nd; }
-.@{fa-css-prefix}-creative-commons-pd:before { content: @fa-var-creative-commons-pd; }
-.@{fa-css-prefix}-creative-commons-pd-alt:before { content: @fa-var-creative-commons-pd-alt; }
-.@{fa-css-prefix}-creative-commons-remix:before { content: @fa-var-creative-commons-remix; }
-.@{fa-css-prefix}-creative-commons-sa:before { content: @fa-var-creative-commons-sa; }
-.@{fa-css-prefix}-creative-commons-sampling:before { content: @fa-var-creative-commons-sampling; }
-.@{fa-css-prefix}-creative-commons-sampling-plus:before { content: @fa-var-creative-commons-sampling-plus; }
-.@{fa-css-prefix}-creative-commons-share:before { content: @fa-var-creative-commons-share; }
-.@{fa-css-prefix}-creative-commons-zero:before { content: @fa-var-creative-commons-zero; }
-.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; }
-.@{fa-css-prefix}-critical-role:before { content: @fa-var-critical-role; }
-.@{fa-css-prefix}-crop:before { content: @fa-var-crop; }
-.@{fa-css-prefix}-crop-alt:before { content: @fa-var-crop-alt; }
-.@{fa-css-prefix}-cross:before { content: @fa-var-cross; }
-.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; }
-.@{fa-css-prefix}-crow:before { content: @fa-var-crow; }
-.@{fa-css-prefix}-crown:before { content: @fa-var-crown; }
-.@{fa-css-prefix}-crutch:before { content: @fa-var-crutch; }
-.@{fa-css-prefix}-css3:before { content: @fa-var-css3; }
-.@{fa-css-prefix}-css3-alt:before { content: @fa-var-css3-alt; }
-.@{fa-css-prefix}-cube:before { content: @fa-var-cube; }
-.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; }
-.@{fa-css-prefix}-cut:before { content: @fa-var-cut; }
-.@{fa-css-prefix}-cuttlefish:before { content: @fa-var-cuttlefish; }
-.@{fa-css-prefix}-d-and-d:before { content: @fa-var-d-and-d; }
-.@{fa-css-prefix}-d-and-d-beyond:before { content: @fa-var-d-and-d-beyond; }
-.@{fa-css-prefix}-dailymotion:before { content: @fa-var-dailymotion; }
-.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; }
-.@{fa-css-prefix}-database:before { content: @fa-var-database; }
-.@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; }
-.@{fa-css-prefix}-deezer:before { content: @fa-var-deezer; }
-.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; }
-.@{fa-css-prefix}-democrat:before { content: @fa-var-democrat; }
-.@{fa-css-prefix}-deploydog:before { content: @fa-var-deploydog; }
-.@{fa-css-prefix}-deskpro:before { content: @fa-var-deskpro; }
-.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; }
-.@{fa-css-prefix}-dev:before { content: @fa-var-dev; }
-.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; }
-.@{fa-css-prefix}-dharmachakra:before { content: @fa-var-dharmachakra; }
-.@{fa-css-prefix}-dhl:before { content: @fa-var-dhl; }
-.@{fa-css-prefix}-diagnoses:before { content: @fa-var-diagnoses; }
-.@{fa-css-prefix}-diaspora:before { content: @fa-var-diaspora; }
-.@{fa-css-prefix}-dice:before { content: @fa-var-dice; }
-.@{fa-css-prefix}-dice-d20:before { content: @fa-var-dice-d20; }
-.@{fa-css-prefix}-dice-d6:before { content: @fa-var-dice-d6; }
-.@{fa-css-prefix}-dice-five:before { content: @fa-var-dice-five; }
-.@{fa-css-prefix}-dice-four:before { content: @fa-var-dice-four; }
-.@{fa-css-prefix}-dice-one:before { content: @fa-var-dice-one; }
-.@{fa-css-prefix}-dice-six:before { content: @fa-var-dice-six; }
-.@{fa-css-prefix}-dice-three:before { content: @fa-var-dice-three; }
-.@{fa-css-prefix}-dice-two:before { content: @fa-var-dice-two; }
-.@{fa-css-prefix}-digg:before { content: @fa-var-digg; }
-.@{fa-css-prefix}-digital-ocean:before { content: @fa-var-digital-ocean; }
-.@{fa-css-prefix}-digital-tachograph:before { content: @fa-var-digital-tachograph; }
-.@{fa-css-prefix}-directions:before { content: @fa-var-directions; }
-.@{fa-css-prefix}-discord:before { content: @fa-var-discord; }
-.@{fa-css-prefix}-discourse:before { content: @fa-var-discourse; }
-.@{fa-css-prefix}-disease:before { content: @fa-var-disease; }
-.@{fa-css-prefix}-divide:before { content: @fa-var-divide; }
-.@{fa-css-prefix}-dizzy:before { content: @fa-var-dizzy; }
-.@{fa-css-prefix}-dna:before { content: @fa-var-dna; }
-.@{fa-css-prefix}-dochub:before { content: @fa-var-dochub; }
-.@{fa-css-prefix}-docker:before { content: @fa-var-docker; }
-.@{fa-css-prefix}-dog:before { content: @fa-var-dog; }
-.@{fa-css-prefix}-dollar-sign:before { content: @fa-var-dollar-sign; }
-.@{fa-css-prefix}-dolly:before { content: @fa-var-dolly; }
-.@{fa-css-prefix}-dolly-flatbed:before { content: @fa-var-dolly-flatbed; }
-.@{fa-css-prefix}-donate:before { content: @fa-var-donate; }
-.@{fa-css-prefix}-door-closed:before { content: @fa-var-door-closed; }
-.@{fa-css-prefix}-door-open:before { content: @fa-var-door-open; }
-.@{fa-css-prefix}-dot-circle:before { content: @fa-var-dot-circle; }
-.@{fa-css-prefix}-dove:before { content: @fa-var-dove; }
-.@{fa-css-prefix}-download:before { content: @fa-var-download; }
-.@{fa-css-prefix}-draft2digital:before { content: @fa-var-draft2digital; }
-.@{fa-css-prefix}-drafting-compass:before { content: @fa-var-drafting-compass; }
-.@{fa-css-prefix}-dragon:before { content: @fa-var-dragon; }
-.@{fa-css-prefix}-draw-polygon:before { content: @fa-var-draw-polygon; }
-.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; }
-.@{fa-css-prefix}-dribbble-square:before { content: @fa-var-dribbble-square; }
-.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; }
-.@{fa-css-prefix}-drum:before { content: @fa-var-drum; }
-.@{fa-css-prefix}-drum-steelpan:before { content: @fa-var-drum-steelpan; }
-.@{fa-css-prefix}-drumstick-bite:before { content: @fa-var-drumstick-bite; }
-.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; }
-.@{fa-css-prefix}-dumbbell:before { content: @fa-var-dumbbell; }
-.@{fa-css-prefix}-dumpster:before { content: @fa-var-dumpster; }
-.@{fa-css-prefix}-dumpster-fire:before { content: @fa-var-dumpster-fire; }
-.@{fa-css-prefix}-dungeon:before { content: @fa-var-dungeon; }
-.@{fa-css-prefix}-dyalog:before { content: @fa-var-dyalog; }
-.@{fa-css-prefix}-earlybirds:before { content: @fa-var-earlybirds; }
-.@{fa-css-prefix}-ebay:before { content: @fa-var-ebay; }
-.@{fa-css-prefix}-edge:before { content: @fa-var-edge; }
-.@{fa-css-prefix}-edge-legacy:before { content: @fa-var-edge-legacy; }
-.@{fa-css-prefix}-edit:before { content: @fa-var-edit; }
-.@{fa-css-prefix}-egg:before { content: @fa-var-egg; }
-.@{fa-css-prefix}-eject:before { content: @fa-var-eject; }
-.@{fa-css-prefix}-elementor:before { content: @fa-var-elementor; }
-.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; }
-.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; }
-.@{fa-css-prefix}-ello:before { content: @fa-var-ello; }
-.@{fa-css-prefix}-ember:before { content: @fa-var-ember; }
-.@{fa-css-prefix}-empire:before { content: @fa-var-empire; }
-.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; }
-.@{fa-css-prefix}-envelope-open:before { content: @fa-var-envelope-open; }
-.@{fa-css-prefix}-envelope-open-text:before { content: @fa-var-envelope-open-text; }
-.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; }
-.@{fa-css-prefix}-envira:before { content: @fa-var-envira; }
-.@{fa-css-prefix}-equals:before { content: @fa-var-equals; }
-.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; }
-.@{fa-css-prefix}-erlang:before { content: @fa-var-erlang; }
-.@{fa-css-prefix}-ethereum:before { content: @fa-var-ethereum; }
-.@{fa-css-prefix}-ethernet:before { content: @fa-var-ethernet; }
-.@{fa-css-prefix}-etsy:before { content: @fa-var-etsy; }
-.@{fa-css-prefix}-euro-sign:before { content: @fa-var-euro-sign; }
-.@{fa-css-prefix}-evernote:before { content: @fa-var-evernote; }
-.@{fa-css-prefix}-exchange-alt:before { content: @fa-var-exchange-alt; }
-.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; }
-.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; }
-.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; }
-.@{fa-css-prefix}-expand:before { content: @fa-var-expand; }
-.@{fa-css-prefix}-expand-alt:before { content: @fa-var-expand-alt; }
-.@{fa-css-prefix}-expand-arrows-alt:before { content: @fa-var-expand-arrows-alt; }
-.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; }
-.@{fa-css-prefix}-external-link-alt:before { content: @fa-var-external-link-alt; }
-.@{fa-css-prefix}-external-link-square-alt:before { content: @fa-var-external-link-square-alt; }
-.@{fa-css-prefix}-eye:before { content: @fa-var-eye; }
-.@{fa-css-prefix}-eye-dropper:before { content: @fa-var-eye-dropper; }
-.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; }
-.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; }
-.@{fa-css-prefix}-facebook-f:before { content: @fa-var-facebook-f; }
-.@{fa-css-prefix}-facebook-messenger:before { content: @fa-var-facebook-messenger; }
-.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; }
-.@{fa-css-prefix}-fan:before { content: @fa-var-fan; }
-.@{fa-css-prefix}-fantasy-flight-games:before { content: @fa-var-fantasy-flight-games; }
-.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; }
-.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; }
-.@{fa-css-prefix}-faucet:before { content: @fa-var-faucet; }
-.@{fa-css-prefix}-fax:before { content: @fa-var-fax; }
-.@{fa-css-prefix}-feather:before { content: @fa-var-feather; }
-.@{fa-css-prefix}-feather-alt:before { content: @fa-var-feather-alt; }
-.@{fa-css-prefix}-fedex:before { content: @fa-var-fedex; }
-.@{fa-css-prefix}-fedora:before { content: @fa-var-fedora; }
-.@{fa-css-prefix}-female:before { content: @fa-var-female; }
-.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; }
-.@{fa-css-prefix}-figma:before { content: @fa-var-figma; }
-.@{fa-css-prefix}-file:before { content: @fa-var-file; }
-.@{fa-css-prefix}-file-alt:before { content: @fa-var-file-alt; }
-.@{fa-css-prefix}-file-archive:before { content: @fa-var-file-archive; }
-.@{fa-css-prefix}-file-audio:before { content: @fa-var-file-audio; }
-.@{fa-css-prefix}-file-code:before { content: @fa-var-file-code; }
-.@{fa-css-prefix}-file-contract:before { content: @fa-var-file-contract; }
-.@{fa-css-prefix}-file-csv:before { content: @fa-var-file-csv; }
-.@{fa-css-prefix}-file-download:before { content: @fa-var-file-download; }
-.@{fa-css-prefix}-file-excel:before { content: @fa-var-file-excel; }
-.@{fa-css-prefix}-file-export:before { content: @fa-var-file-export; }
-.@{fa-css-prefix}-file-image:before { content: @fa-var-file-image; }
-.@{fa-css-prefix}-file-import:before { content: @fa-var-file-import; }
-.@{fa-css-prefix}-file-invoice:before { content: @fa-var-file-invoice; }
-.@{fa-css-prefix}-file-invoice-dollar:before { content: @fa-var-file-invoice-dollar; }
-.@{fa-css-prefix}-file-medical:before { content: @fa-var-file-medical; }
-.@{fa-css-prefix}-file-medical-alt:before { content: @fa-var-file-medical-alt; }
-.@{fa-css-prefix}-file-pdf:before { content: @fa-var-file-pdf; }
-.@{fa-css-prefix}-file-powerpoint:before { content: @fa-var-file-powerpoint; }
-.@{fa-css-prefix}-file-prescription:before { content: @fa-var-file-prescription; }
-.@{fa-css-prefix}-file-signature:before { content: @fa-var-file-signature; }
-.@{fa-css-prefix}-file-upload:before { content: @fa-var-file-upload; }
-.@{fa-css-prefix}-file-video:before { content: @fa-var-file-video; }
-.@{fa-css-prefix}-file-word:before { content: @fa-var-file-word; }
-.@{fa-css-prefix}-fill:before { content: @fa-var-fill; }
-.@{fa-css-prefix}-fill-drip:before { content: @fa-var-fill-drip; }
-.@{fa-css-prefix}-film:before { content: @fa-var-film; }
-.@{fa-css-prefix}-filter:before { content: @fa-var-filter; }
-.@{fa-css-prefix}-fingerprint:before { content: @fa-var-fingerprint; }
-.@{fa-css-prefix}-fire:before { content: @fa-var-fire; }
-.@{fa-css-prefix}-fire-alt:before { content: @fa-var-fire-alt; }
-.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; }
-.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; }
-.@{fa-css-prefix}-firefox-browser:before { content: @fa-var-firefox-browser; }
-.@{fa-css-prefix}-first-aid:before { content: @fa-var-first-aid; }
-.@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; }
-.@{fa-css-prefix}-first-order-alt:before { content: @fa-var-first-order-alt; }
-.@{fa-css-prefix}-firstdraft:before { content: @fa-var-firstdraft; }
-.@{fa-css-prefix}-fish:before { content: @fa-var-fish; }
-.@{fa-css-prefix}-fist-raised:before { content: @fa-var-fist-raised; }
-.@{fa-css-prefix}-flag:before { content: @fa-var-flag; }
-.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; }
-.@{fa-css-prefix}-flag-usa:before { content: @fa-var-flag-usa; }
-.@{fa-css-prefix}-flask:before { content: @fa-var-flask; }
-.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; }
-.@{fa-css-prefix}-flipboard:before { content: @fa-var-flipboard; }
-.@{fa-css-prefix}-flushed:before { content: @fa-var-flushed; }
-.@{fa-css-prefix}-fly:before { content: @fa-var-fly; }
-.@{fa-css-prefix}-folder:before { content: @fa-var-folder; }
-.@{fa-css-prefix}-folder-minus:before { content: @fa-var-folder-minus; }
-.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; }
-.@{fa-css-prefix}-folder-plus:before { content: @fa-var-folder-plus; }
-.@{fa-css-prefix}-font:before { content: @fa-var-font; }
-.@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; }
-.@{fa-css-prefix}-font-awesome-alt:before { content: @fa-var-font-awesome-alt; }
-.@{fa-css-prefix}-font-awesome-flag:before { content: @fa-var-font-awesome-flag; }
-.@{fa-css-prefix}-font-awesome-logo-full:before { content: @fa-var-font-awesome-logo-full; }
-.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; }
-.@{fa-css-prefix}-fonticons-fi:before { content: @fa-var-fonticons-fi; }
-.@{fa-css-prefix}-football-ball:before { content: @fa-var-football-ball; }
-.@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; }
-.@{fa-css-prefix}-fort-awesome-alt:before { content: @fa-var-fort-awesome-alt; }
-.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; }
-.@{fa-css-prefix}-forward:before { content: @fa-var-forward; }
-.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; }
-.@{fa-css-prefix}-free-code-camp:before { content: @fa-var-free-code-camp; }
-.@{fa-css-prefix}-freebsd:before { content: @fa-var-freebsd; }
-.@{fa-css-prefix}-frog:before { content: @fa-var-frog; }
-.@{fa-css-prefix}-frown:before { content: @fa-var-frown; }
-.@{fa-css-prefix}-frown-open:before { content: @fa-var-frown-open; }
-.@{fa-css-prefix}-fulcrum:before { content: @fa-var-fulcrum; }
-.@{fa-css-prefix}-funnel-dollar:before { content: @fa-var-funnel-dollar; }
-.@{fa-css-prefix}-futbol:before { content: @fa-var-futbol; }
-.@{fa-css-prefix}-galactic-republic:before { content: @fa-var-galactic-republic; }
-.@{fa-css-prefix}-galactic-senate:before { content: @fa-var-galactic-senate; }
-.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; }
-.@{fa-css-prefix}-gas-pump:before { content: @fa-var-gas-pump; }
-.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; }
-.@{fa-css-prefix}-gem:before { content: @fa-var-gem; }
-.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; }
-.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; }
-.@{fa-css-prefix}-gg:before { content: @fa-var-gg; }
-.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; }
-.@{fa-css-prefix}-ghost:before { content: @fa-var-ghost; }
-.@{fa-css-prefix}-gift:before { content: @fa-var-gift; }
-.@{fa-css-prefix}-gifts:before { content: @fa-var-gifts; }
-.@{fa-css-prefix}-git:before { content: @fa-var-git; }
-.@{fa-css-prefix}-git-alt:before { content: @fa-var-git-alt; }
-.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; }
-.@{fa-css-prefix}-github:before { content: @fa-var-github; }
-.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; }
-.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; }
-.@{fa-css-prefix}-gitkraken:before { content: @fa-var-gitkraken; }
-.@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; }
-.@{fa-css-prefix}-gitter:before { content: @fa-var-gitter; }
-.@{fa-css-prefix}-glass-cheers:before { content: @fa-var-glass-cheers; }
-.@{fa-css-prefix}-glass-martini:before { content: @fa-var-glass-martini; }
-.@{fa-css-prefix}-glass-martini-alt:before { content: @fa-var-glass-martini-alt; }
-.@{fa-css-prefix}-glass-whiskey:before { content: @fa-var-glass-whiskey; }
-.@{fa-css-prefix}-glasses:before { content: @fa-var-glasses; }
-.@{fa-css-prefix}-glide:before { content: @fa-var-glide; }
-.@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; }
-.@{fa-css-prefix}-globe:before { content: @fa-var-globe; }
-.@{fa-css-prefix}-globe-africa:before { content: @fa-var-globe-africa; }
-.@{fa-css-prefix}-globe-americas:before { content: @fa-var-globe-americas; }
-.@{fa-css-prefix}-globe-asia:before { content: @fa-var-globe-asia; }
-.@{fa-css-prefix}-globe-europe:before { content: @fa-var-globe-europe; }
-.@{fa-css-prefix}-gofore:before { content: @fa-var-gofore; }
-.@{fa-css-prefix}-golf-ball:before { content: @fa-var-golf-ball; }
-.@{fa-css-prefix}-goodreads:before { content: @fa-var-goodreads; }
-.@{fa-css-prefix}-goodreads-g:before { content: @fa-var-goodreads-g; }
-.@{fa-css-prefix}-google:before { content: @fa-var-google; }
-.@{fa-css-prefix}-google-drive:before { content: @fa-var-google-drive; }
-.@{fa-css-prefix}-google-pay:before { content: @fa-var-google-pay; }
-.@{fa-css-prefix}-google-play:before { content: @fa-var-google-play; }
-.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; }
-.@{fa-css-prefix}-google-plus-g:before { content: @fa-var-google-plus-g; }
-.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; }
-.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; }
-.@{fa-css-prefix}-gopuram:before { content: @fa-var-gopuram; }
-.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; }
-.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; }
-.@{fa-css-prefix}-grav:before { content: @fa-var-grav; }
-.@{fa-css-prefix}-greater-than:before { content: @fa-var-greater-than; }
-.@{fa-css-prefix}-greater-than-equal:before { content: @fa-var-greater-than-equal; }
-.@{fa-css-prefix}-grimace:before { content: @fa-var-grimace; }
-.@{fa-css-prefix}-grin:before { content: @fa-var-grin; }
-.@{fa-css-prefix}-grin-alt:before { content: @fa-var-grin-alt; }
-.@{fa-css-prefix}-grin-beam:before { content: @fa-var-grin-beam; }
-.@{fa-css-prefix}-grin-beam-sweat:before { content: @fa-var-grin-beam-sweat; }
-.@{fa-css-prefix}-grin-hearts:before { content: @fa-var-grin-hearts; }
-.@{fa-css-prefix}-grin-squint:before { content: @fa-var-grin-squint; }
-.@{fa-css-prefix}-grin-squint-tears:before { content: @fa-var-grin-squint-tears; }
-.@{fa-css-prefix}-grin-stars:before { content: @fa-var-grin-stars; }
-.@{fa-css-prefix}-grin-tears:before { content: @fa-var-grin-tears; }
-.@{fa-css-prefix}-grin-tongue:before { content: @fa-var-grin-tongue; }
-.@{fa-css-prefix}-grin-tongue-squint:before { content: @fa-var-grin-tongue-squint; }
-.@{fa-css-prefix}-grin-tongue-wink:before { content: @fa-var-grin-tongue-wink; }
-.@{fa-css-prefix}-grin-wink:before { content: @fa-var-grin-wink; }
-.@{fa-css-prefix}-grip-horizontal:before { content: @fa-var-grip-horizontal; }
-.@{fa-css-prefix}-grip-lines:before { content: @fa-var-grip-lines; }
-.@{fa-css-prefix}-grip-lines-vertical:before { content: @fa-var-grip-lines-vertical; }
-.@{fa-css-prefix}-grip-vertical:before { content: @fa-var-grip-vertical; }
-.@{fa-css-prefix}-gripfire:before { content: @fa-var-gripfire; }
-.@{fa-css-prefix}-grunt:before { content: @fa-var-grunt; }
-.@{fa-css-prefix}-guilded:before { content: @fa-var-guilded; }
-.@{fa-css-prefix}-guitar:before { content: @fa-var-guitar; }
-.@{fa-css-prefix}-gulp:before { content: @fa-var-gulp; }
-.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; }
-.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; }
-.@{fa-css-prefix}-hacker-news-square:before { content: @fa-var-hacker-news-square; }
-.@{fa-css-prefix}-hackerrank:before { content: @fa-var-hackerrank; }
-.@{fa-css-prefix}-hamburger:before { content: @fa-var-hamburger; }
-.@{fa-css-prefix}-hammer:before { content: @fa-var-hammer; }
-.@{fa-css-prefix}-hamsa:before { content: @fa-var-hamsa; }
-.@{fa-css-prefix}-hand-holding:before { content: @fa-var-hand-holding; }
-.@{fa-css-prefix}-hand-holding-heart:before { content: @fa-var-hand-holding-heart; }
-.@{fa-css-prefix}-hand-holding-medical:before { content: @fa-var-hand-holding-medical; }
-.@{fa-css-prefix}-hand-holding-usd:before { content: @fa-var-hand-holding-usd; }
-.@{fa-css-prefix}-hand-holding-water:before { content: @fa-var-hand-holding-water; }
-.@{fa-css-prefix}-hand-lizard:before { content: @fa-var-hand-lizard; }
-.@{fa-css-prefix}-hand-middle-finger:before { content: @fa-var-hand-middle-finger; }
-.@{fa-css-prefix}-hand-paper:before { content: @fa-var-hand-paper; }
-.@{fa-css-prefix}-hand-peace:before { content: @fa-var-hand-peace; }
-.@{fa-css-prefix}-hand-point-down:before { content: @fa-var-hand-point-down; }
-.@{fa-css-prefix}-hand-point-left:before { content: @fa-var-hand-point-left; }
-.@{fa-css-prefix}-hand-point-right:before { content: @fa-var-hand-point-right; }
-.@{fa-css-prefix}-hand-point-up:before { content: @fa-var-hand-point-up; }
-.@{fa-css-prefix}-hand-pointer:before { content: @fa-var-hand-pointer; }
-.@{fa-css-prefix}-hand-rock:before { content: @fa-var-hand-rock; }
-.@{fa-css-prefix}-hand-scissors:before { content: @fa-var-hand-scissors; }
-.@{fa-css-prefix}-hand-sparkles:before { content: @fa-var-hand-sparkles; }
-.@{fa-css-prefix}-hand-spock:before { content: @fa-var-hand-spock; }
-.@{fa-css-prefix}-hands:before { content: @fa-var-hands; }
-.@{fa-css-prefix}-hands-helping:before { content: @fa-var-hands-helping; }
-.@{fa-css-prefix}-hands-wash:before { content: @fa-var-hands-wash; }
-.@{fa-css-prefix}-handshake:before { content: @fa-var-handshake; }
-.@{fa-css-prefix}-handshake-alt-slash:before { content: @fa-var-handshake-alt-slash; }
-.@{fa-css-prefix}-handshake-slash:before { content: @fa-var-handshake-slash; }
-.@{fa-css-prefix}-hanukiah:before { content: @fa-var-hanukiah; }
-.@{fa-css-prefix}-hard-hat:before { content: @fa-var-hard-hat; }
-.@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; }
-.@{fa-css-prefix}-hat-cowboy:before { content: @fa-var-hat-cowboy; }
-.@{fa-css-prefix}-hat-cowboy-side:before { content: @fa-var-hat-cowboy-side; }
-.@{fa-css-prefix}-hat-wizard:before { content: @fa-var-hat-wizard; }
-.@{fa-css-prefix}-hdd:before { content: @fa-var-hdd; }
-.@{fa-css-prefix}-head-side-cough:before { content: @fa-var-head-side-cough; }
-.@{fa-css-prefix}-head-side-cough-slash:before { content: @fa-var-head-side-cough-slash; }
-.@{fa-css-prefix}-head-side-mask:before { content: @fa-var-head-side-mask; }
-.@{fa-css-prefix}-head-side-virus:before { content: @fa-var-head-side-virus; }
-.@{fa-css-prefix}-heading:before { content: @fa-var-heading; }
-.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; }
-.@{fa-css-prefix}-headphones-alt:before { content: @fa-var-headphones-alt; }
-.@{fa-css-prefix}-headset:before { content: @fa-var-headset; }
-.@{fa-css-prefix}-heart:before { content: @fa-var-heart; }
-.@{fa-css-prefix}-heart-broken:before { content: @fa-var-heart-broken; }
-.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; }
-.@{fa-css-prefix}-helicopter:before { content: @fa-var-helicopter; }
-.@{fa-css-prefix}-highlighter:before { content: @fa-var-highlighter; }
-.@{fa-css-prefix}-hiking:before { content: @fa-var-hiking; }
-.@{fa-css-prefix}-hippo:before { content: @fa-var-hippo; }
-.@{fa-css-prefix}-hips:before { content: @fa-var-hips; }
-.@{fa-css-prefix}-hire-a-helper:before { content: @fa-var-hire-a-helper; }
-.@{fa-css-prefix}-history:before { content: @fa-var-history; }
-.@{fa-css-prefix}-hive:before { content: @fa-var-hive; }
-.@{fa-css-prefix}-hockey-puck:before { content: @fa-var-hockey-puck; }
-.@{fa-css-prefix}-holly-berry:before { content: @fa-var-holly-berry; }
-.@{fa-css-prefix}-home:before { content: @fa-var-home; }
-.@{fa-css-prefix}-hooli:before { content: @fa-var-hooli; }
-.@{fa-css-prefix}-hornbill:before { content: @fa-var-hornbill; }
-.@{fa-css-prefix}-horse:before { content: @fa-var-horse; }
-.@{fa-css-prefix}-horse-head:before { content: @fa-var-horse-head; }
-.@{fa-css-prefix}-hospital:before { content: @fa-var-hospital; }
-.@{fa-css-prefix}-hospital-alt:before { content: @fa-var-hospital-alt; }
-.@{fa-css-prefix}-hospital-symbol:before { content: @fa-var-hospital-symbol; }
-.@{fa-css-prefix}-hospital-user:before { content: @fa-var-hospital-user; }
-.@{fa-css-prefix}-hot-tub:before { content: @fa-var-hot-tub; }
-.@{fa-css-prefix}-hotdog:before { content: @fa-var-hotdog; }
-.@{fa-css-prefix}-hotel:before { content: @fa-var-hotel; }
-.@{fa-css-prefix}-hotjar:before { content: @fa-var-hotjar; }
-.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; }
-.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; }
-.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; }
-.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; }
-.@{fa-css-prefix}-house-damage:before { content: @fa-var-house-damage; }
-.@{fa-css-prefix}-house-user:before { content: @fa-var-house-user; }
-.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; }
-.@{fa-css-prefix}-hryvnia:before { content: @fa-var-hryvnia; }
-.@{fa-css-prefix}-html5:before { content: @fa-var-html5; }
-.@{fa-css-prefix}-hubspot:before { content: @fa-var-hubspot; }
-.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; }
-.@{fa-css-prefix}-ice-cream:before { content: @fa-var-ice-cream; }
-.@{fa-css-prefix}-icicles:before { content: @fa-var-icicles; }
-.@{fa-css-prefix}-icons:before { content: @fa-var-icons; }
-.@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; }
-.@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; }
-.@{fa-css-prefix}-id-card-alt:before { content: @fa-var-id-card-alt; }
-.@{fa-css-prefix}-ideal:before { content: @fa-var-ideal; }
-.@{fa-css-prefix}-igloo:before { content: @fa-var-igloo; }
-.@{fa-css-prefix}-image:before { content: @fa-var-image; }
-.@{fa-css-prefix}-images:before { content: @fa-var-images; }
-.@{fa-css-prefix}-imdb:before { content: @fa-var-imdb; }
-.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; }
-.@{fa-css-prefix}-indent:before { content: @fa-var-indent; }
-.@{fa-css-prefix}-industry:before { content: @fa-var-industry; }
-.@{fa-css-prefix}-infinity:before { content: @fa-var-infinity; }
-.@{fa-css-prefix}-info:before { content: @fa-var-info; }
-.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; }
-.@{fa-css-prefix}-innosoft:before { content: @fa-var-innosoft; }
-.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; }
-.@{fa-css-prefix}-instagram-square:before { content: @fa-var-instagram-square; }
-.@{fa-css-prefix}-instalod:before { content: @fa-var-instalod; }
-.@{fa-css-prefix}-intercom:before { content: @fa-var-intercom; }
-.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; }
-.@{fa-css-prefix}-invision:before { content: @fa-var-invision; }
-.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; }
-.@{fa-css-prefix}-italic:before { content: @fa-var-italic; }
-.@{fa-css-prefix}-itch-io:before { content: @fa-var-itch-io; }
-.@{fa-css-prefix}-itunes:before { content: @fa-var-itunes; }
-.@{fa-css-prefix}-itunes-note:before { content: @fa-var-itunes-note; }
-.@{fa-css-prefix}-java:before { content: @fa-var-java; }
-.@{fa-css-prefix}-jedi:before { content: @fa-var-jedi; }
-.@{fa-css-prefix}-jedi-order:before { content: @fa-var-jedi-order; }
-.@{fa-css-prefix}-jenkins:before { content: @fa-var-jenkins; }
-.@{fa-css-prefix}-jira:before { content: @fa-var-jira; }
-.@{fa-css-prefix}-joget:before { content: @fa-var-joget; }
-.@{fa-css-prefix}-joint:before { content: @fa-var-joint; }
-.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; }
-.@{fa-css-prefix}-journal-whills:before { content: @fa-var-journal-whills; }
-.@{fa-css-prefix}-js:before { content: @fa-var-js; }
-.@{fa-css-prefix}-js-square:before { content: @fa-var-js-square; }
-.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; }
-.@{fa-css-prefix}-kaaba:before { content: @fa-var-kaaba; }
-.@{fa-css-prefix}-kaggle:before { content: @fa-var-kaggle; }
-.@{fa-css-prefix}-key:before { content: @fa-var-key; }
-.@{fa-css-prefix}-keybase:before { content: @fa-var-keybase; }
-.@{fa-css-prefix}-keyboard:before { content: @fa-var-keyboard; }
-.@{fa-css-prefix}-keycdn:before { content: @fa-var-keycdn; }
-.@{fa-css-prefix}-khanda:before { content: @fa-var-khanda; }
-.@{fa-css-prefix}-kickstarter:before { content: @fa-var-kickstarter; }
-.@{fa-css-prefix}-kickstarter-k:before { content: @fa-var-kickstarter-k; }
-.@{fa-css-prefix}-kiss:before { content: @fa-var-kiss; }
-.@{fa-css-prefix}-kiss-beam:before { content: @fa-var-kiss-beam; }
-.@{fa-css-prefix}-kiss-wink-heart:before { content: @fa-var-kiss-wink-heart; }
-.@{fa-css-prefix}-kiwi-bird:before { content: @fa-var-kiwi-bird; }
-.@{fa-css-prefix}-korvue:before { content: @fa-var-korvue; }
-.@{fa-css-prefix}-landmark:before { content: @fa-var-landmark; }
-.@{fa-css-prefix}-language:before { content: @fa-var-language; }
-.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; }
-.@{fa-css-prefix}-laptop-code:before { content: @fa-var-laptop-code; }
-.@{fa-css-prefix}-laptop-house:before { content: @fa-var-laptop-house; }
-.@{fa-css-prefix}-laptop-medical:before { content: @fa-var-laptop-medical; }
-.@{fa-css-prefix}-laravel:before { content: @fa-var-laravel; }
-.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; }
-.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; }
-.@{fa-css-prefix}-laugh:before { content: @fa-var-laugh; }
-.@{fa-css-prefix}-laugh-beam:before { content: @fa-var-laugh-beam; }
-.@{fa-css-prefix}-laugh-squint:before { content: @fa-var-laugh-squint; }
-.@{fa-css-prefix}-laugh-wink:before { content: @fa-var-laugh-wink; }
-.@{fa-css-prefix}-layer-group:before { content: @fa-var-layer-group; }
-.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; }
-.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; }
-.@{fa-css-prefix}-lemon:before { content: @fa-var-lemon; }
-.@{fa-css-prefix}-less:before { content: @fa-var-less; }
-.@{fa-css-prefix}-less-than:before { content: @fa-var-less-than; }
-.@{fa-css-prefix}-less-than-equal:before { content: @fa-var-less-than-equal; }
-.@{fa-css-prefix}-level-down-alt:before { content: @fa-var-level-down-alt; }
-.@{fa-css-prefix}-level-up-alt:before { content: @fa-var-level-up-alt; }
-.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; }
-.@{fa-css-prefix}-lightbulb:before { content: @fa-var-lightbulb; }
-.@{fa-css-prefix}-line:before { content: @fa-var-line; }
-.@{fa-css-prefix}-link:before { content: @fa-var-link; }
-.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; }
-.@{fa-css-prefix}-linkedin-in:before { content: @fa-var-linkedin-in; }
-.@{fa-css-prefix}-linode:before { content: @fa-var-linode; }
-.@{fa-css-prefix}-linux:before { content: @fa-var-linux; }
-.@{fa-css-prefix}-lira-sign:before { content: @fa-var-lira-sign; }
-.@{fa-css-prefix}-list:before { content: @fa-var-list; }
-.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; }
-.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; }
-.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; }
-.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; }
-.@{fa-css-prefix}-lock:before { content: @fa-var-lock; }
-.@{fa-css-prefix}-lock-open:before { content: @fa-var-lock-open; }
-.@{fa-css-prefix}-long-arrow-alt-down:before { content: @fa-var-long-arrow-alt-down; }
-.@{fa-css-prefix}-long-arrow-alt-left:before { content: @fa-var-long-arrow-alt-left; }
-.@{fa-css-prefix}-long-arrow-alt-right:before { content: @fa-var-long-arrow-alt-right; }
-.@{fa-css-prefix}-long-arrow-alt-up:before { content: @fa-var-long-arrow-alt-up; }
-.@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; }
-.@{fa-css-prefix}-luggage-cart:before { content: @fa-var-luggage-cart; }
-.@{fa-css-prefix}-lungs:before { content: @fa-var-lungs; }
-.@{fa-css-prefix}-lungs-virus:before { content: @fa-var-lungs-virus; }
-.@{fa-css-prefix}-lyft:before { content: @fa-var-lyft; }
-.@{fa-css-prefix}-magento:before { content: @fa-var-magento; }
-.@{fa-css-prefix}-magic:before { content: @fa-var-magic; }
-.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; }
-.@{fa-css-prefix}-mail-bulk:before { content: @fa-var-mail-bulk; }
-.@{fa-css-prefix}-mailchimp:before { content: @fa-var-mailchimp; }
-.@{fa-css-prefix}-male:before { content: @fa-var-male; }
-.@{fa-css-prefix}-mandalorian:before { content: @fa-var-mandalorian; }
-.@{fa-css-prefix}-map:before { content: @fa-var-map; }
-.@{fa-css-prefix}-map-marked:before { content: @fa-var-map-marked; }
-.@{fa-css-prefix}-map-marked-alt:before { content: @fa-var-map-marked-alt; }
-.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; }
-.@{fa-css-prefix}-map-marker-alt:before { content: @fa-var-map-marker-alt; }
-.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; }
-.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; }
-.@{fa-css-prefix}-markdown:before { content: @fa-var-markdown; }
-.@{fa-css-prefix}-marker:before { content: @fa-var-marker; }
-.@{fa-css-prefix}-mars:before { content: @fa-var-mars; }
-.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; }
-.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; }
-.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; }
-.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; }
-.@{fa-css-prefix}-mask:before { content: @fa-var-mask; }
-.@{fa-css-prefix}-mastodon:before { content: @fa-var-mastodon; }
-.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; }
-.@{fa-css-prefix}-mdb:before { content: @fa-var-mdb; }
-.@{fa-css-prefix}-medal:before { content: @fa-var-medal; }
-.@{fa-css-prefix}-medapps:before { content: @fa-var-medapps; }
-.@{fa-css-prefix}-medium:before { content: @fa-var-medium; }
-.@{fa-css-prefix}-medium-m:before { content: @fa-var-medium-m; }
-.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; }
-.@{fa-css-prefix}-medrt:before { content: @fa-var-medrt; }
-.@{fa-css-prefix}-meetup:before { content: @fa-var-meetup; }
-.@{fa-css-prefix}-megaport:before { content: @fa-var-megaport; }
-.@{fa-css-prefix}-meh:before { content: @fa-var-meh; }
-.@{fa-css-prefix}-meh-blank:before { content: @fa-var-meh-blank; }
-.@{fa-css-prefix}-meh-rolling-eyes:before { content: @fa-var-meh-rolling-eyes; }
-.@{fa-css-prefix}-memory:before { content: @fa-var-memory; }
-.@{fa-css-prefix}-mendeley:before { content: @fa-var-mendeley; }
-.@{fa-css-prefix}-menorah:before { content: @fa-var-menorah; }
-.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; }
-.@{fa-css-prefix}-meteor:before { content: @fa-var-meteor; }
-.@{fa-css-prefix}-microblog:before { content: @fa-var-microblog; }
-.@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; }
-.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; }
-.@{fa-css-prefix}-microphone-alt:before { content: @fa-var-microphone-alt; }
-.@{fa-css-prefix}-microphone-alt-slash:before { content: @fa-var-microphone-alt-slash; }
-.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; }
-.@{fa-css-prefix}-microscope:before { content: @fa-var-microscope; }
-.@{fa-css-prefix}-microsoft:before { content: @fa-var-microsoft; }
-.@{fa-css-prefix}-minus:before { content: @fa-var-minus; }
-.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; }
-.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; }
-.@{fa-css-prefix}-mitten:before { content: @fa-var-mitten; }
-.@{fa-css-prefix}-mix:before { content: @fa-var-mix; }
-.@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; }
-.@{fa-css-prefix}-mixer:before { content: @fa-var-mixer; }
-.@{fa-css-prefix}-mizuni:before { content: @fa-var-mizuni; }
-.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; }
-.@{fa-css-prefix}-mobile-alt:before { content: @fa-var-mobile-alt; }
-.@{fa-css-prefix}-modx:before { content: @fa-var-modx; }
-.@{fa-css-prefix}-monero:before { content: @fa-var-monero; }
-.@{fa-css-prefix}-money-bill:before { content: @fa-var-money-bill; }
-.@{fa-css-prefix}-money-bill-alt:before { content: @fa-var-money-bill-alt; }
-.@{fa-css-prefix}-money-bill-wave:before { content: @fa-var-money-bill-wave; }
-.@{fa-css-prefix}-money-bill-wave-alt:before { content: @fa-var-money-bill-wave-alt; }
-.@{fa-css-prefix}-money-check:before { content: @fa-var-money-check; }
-.@{fa-css-prefix}-money-check-alt:before { content: @fa-var-money-check-alt; }
-.@{fa-css-prefix}-monument:before { content: @fa-var-monument; }
-.@{fa-css-prefix}-moon:before { content: @fa-var-moon; }
-.@{fa-css-prefix}-mortar-pestle:before { content: @fa-var-mortar-pestle; }
-.@{fa-css-prefix}-mosque:before { content: @fa-var-mosque; }
-.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; }
-.@{fa-css-prefix}-mountain:before { content: @fa-var-mountain; }
-.@{fa-css-prefix}-mouse:before { content: @fa-var-mouse; }
-.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; }
-.@{fa-css-prefix}-mug-hot:before { content: @fa-var-mug-hot; }
-.@{fa-css-prefix}-music:before { content: @fa-var-music; }
-.@{fa-css-prefix}-napster:before { content: @fa-var-napster; }
-.@{fa-css-prefix}-neos:before { content: @fa-var-neos; }
-.@{fa-css-prefix}-network-wired:before { content: @fa-var-network-wired; }
-.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; }
-.@{fa-css-prefix}-newspaper:before { content: @fa-var-newspaper; }
-.@{fa-css-prefix}-nimblr:before { content: @fa-var-nimblr; }
-.@{fa-css-prefix}-node:before { content: @fa-var-node; }
-.@{fa-css-prefix}-node-js:before { content: @fa-var-node-js; }
-.@{fa-css-prefix}-not-equal:before { content: @fa-var-not-equal; }
-.@{fa-css-prefix}-notes-medical:before { content: @fa-var-notes-medical; }
-.@{fa-css-prefix}-npm:before { content: @fa-var-npm; }
-.@{fa-css-prefix}-ns8:before { content: @fa-var-ns8; }
-.@{fa-css-prefix}-nutritionix:before { content: @fa-var-nutritionix; }
-.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; }
-.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; }
-.@{fa-css-prefix}-octopus-deploy:before { content: @fa-var-octopus-deploy; }
-.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; }
-.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; }
-.@{fa-css-prefix}-oil-can:before { content: @fa-var-oil-can; }
-.@{fa-css-prefix}-old-republic:before { content: @fa-var-old-republic; }
-.@{fa-css-prefix}-om:before { content: @fa-var-om; }
-.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; }
-.@{fa-css-prefix}-openid:before { content: @fa-var-openid; }
-.@{fa-css-prefix}-opera:before { content: @fa-var-opera; }
-.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; }
-.@{fa-css-prefix}-orcid:before { content: @fa-var-orcid; }
-.@{fa-css-prefix}-osi:before { content: @fa-var-osi; }
-.@{fa-css-prefix}-otter:before { content: @fa-var-otter; }
-.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; }
-.@{fa-css-prefix}-page4:before { content: @fa-var-page4; }
-.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; }
-.@{fa-css-prefix}-pager:before { content: @fa-var-pager; }
-.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; }
-.@{fa-css-prefix}-paint-roller:before { content: @fa-var-paint-roller; }
-.@{fa-css-prefix}-palette:before { content: @fa-var-palette; }
-.@{fa-css-prefix}-palfed:before { content: @fa-var-palfed; }
-.@{fa-css-prefix}-pallet:before { content: @fa-var-pallet; }
-.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; }
-.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; }
-.@{fa-css-prefix}-parachute-box:before { content: @fa-var-parachute-box; }
-.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; }
-.@{fa-css-prefix}-parking:before { content: @fa-var-parking; }
-.@{fa-css-prefix}-passport:before { content: @fa-var-passport; }
-.@{fa-css-prefix}-pastafarianism:before { content: @fa-var-pastafarianism; }
-.@{fa-css-prefix}-paste:before { content: @fa-var-paste; }
-.@{fa-css-prefix}-patreon:before { content: @fa-var-patreon; }
-.@{fa-css-prefix}-pause:before { content: @fa-var-pause; }
-.@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; }
-.@{fa-css-prefix}-paw:before { content: @fa-var-paw; }
-.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; }
-.@{fa-css-prefix}-peace:before { content: @fa-var-peace; }
-.@{fa-css-prefix}-pen:before { content: @fa-var-pen; }
-.@{fa-css-prefix}-pen-alt:before { content: @fa-var-pen-alt; }
-.@{fa-css-prefix}-pen-fancy:before { content: @fa-var-pen-fancy; }
-.@{fa-css-prefix}-pen-nib:before { content: @fa-var-pen-nib; }
-.@{fa-css-prefix}-pen-square:before { content: @fa-var-pen-square; }
-.@{fa-css-prefix}-pencil-alt:before { content: @fa-var-pencil-alt; }
-.@{fa-css-prefix}-pencil-ruler:before { content: @fa-var-pencil-ruler; }
-.@{fa-css-prefix}-penny-arcade:before { content: @fa-var-penny-arcade; }
-.@{fa-css-prefix}-people-arrows:before { content: @fa-var-people-arrows; }
-.@{fa-css-prefix}-people-carry:before { content: @fa-var-people-carry; }
-.@{fa-css-prefix}-pepper-hot:before { content: @fa-var-pepper-hot; }
-.@{fa-css-prefix}-perbyte:before { content: @fa-var-perbyte; }
-.@{fa-css-prefix}-percent:before { content: @fa-var-percent; }
-.@{fa-css-prefix}-percentage:before { content: @fa-var-percentage; }
-.@{fa-css-prefix}-periscope:before { content: @fa-var-periscope; }
-.@{fa-css-prefix}-person-booth:before { content: @fa-var-person-booth; }
-.@{fa-css-prefix}-phabricator:before { content: @fa-var-phabricator; }
-.@{fa-css-prefix}-phoenix-framework:before { content: @fa-var-phoenix-framework; }
-.@{fa-css-prefix}-phoenix-squadron:before { content: @fa-var-phoenix-squadron; }
-.@{fa-css-prefix}-phone:before { content: @fa-var-phone; }
-.@{fa-css-prefix}-phone-alt:before { content: @fa-var-phone-alt; }
-.@{fa-css-prefix}-phone-slash:before { content: @fa-var-phone-slash; }
-.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; }
-.@{fa-css-prefix}-phone-square-alt:before { content: @fa-var-phone-square-alt; }
-.@{fa-css-prefix}-phone-volume:before { content: @fa-var-phone-volume; }
-.@{fa-css-prefix}-photo-video:before { content: @fa-var-photo-video; }
-.@{fa-css-prefix}-php:before { content: @fa-var-php; }
-.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; }
-.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; }
-.@{fa-css-prefix}-pied-piper-hat:before { content: @fa-var-pied-piper-hat; }
-.@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; }
-.@{fa-css-prefix}-pied-piper-square:before { content: @fa-var-pied-piper-square; }
-.@{fa-css-prefix}-piggy-bank:before { content: @fa-var-piggy-bank; }
-.@{fa-css-prefix}-pills:before { content: @fa-var-pills; }
-.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; }
-.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; }
-.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; }
-.@{fa-css-prefix}-pizza-slice:before { content: @fa-var-pizza-slice; }
-.@{fa-css-prefix}-place-of-worship:before { content: @fa-var-place-of-worship; }
-.@{fa-css-prefix}-plane:before { content: @fa-var-plane; }
-.@{fa-css-prefix}-plane-arrival:before { content: @fa-var-plane-arrival; }
-.@{fa-css-prefix}-plane-departure:before { content: @fa-var-plane-departure; }
-.@{fa-css-prefix}-plane-slash:before { content: @fa-var-plane-slash; }
-.@{fa-css-prefix}-play:before { content: @fa-var-play; }
-.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; }
-.@{fa-css-prefix}-playstation:before { content: @fa-var-playstation; }
-.@{fa-css-prefix}-plug:before { content: @fa-var-plug; }
-.@{fa-css-prefix}-plus:before { content: @fa-var-plus; }
-.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; }
-.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; }
-.@{fa-css-prefix}-podcast:before { content: @fa-var-podcast; }
-.@{fa-css-prefix}-poll:before { content: @fa-var-poll; }
-.@{fa-css-prefix}-poll-h:before { content: @fa-var-poll-h; }
-.@{fa-css-prefix}-poo:before { content: @fa-var-poo; }
-.@{fa-css-prefix}-poo-storm:before { content: @fa-var-poo-storm; }
-.@{fa-css-prefix}-poop:before { content: @fa-var-poop; }
-.@{fa-css-prefix}-portrait:before { content: @fa-var-portrait; }
-.@{fa-css-prefix}-pound-sign:before { content: @fa-var-pound-sign; }
-.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; }
-.@{fa-css-prefix}-pray:before { content: @fa-var-pray; }
-.@{fa-css-prefix}-praying-hands:before { content: @fa-var-praying-hands; }
-.@{fa-css-prefix}-prescription:before { content: @fa-var-prescription; }
-.@{fa-css-prefix}-prescription-bottle:before { content: @fa-var-prescription-bottle; }
-.@{fa-css-prefix}-prescription-bottle-alt:before { content: @fa-var-prescription-bottle-alt; }
-.@{fa-css-prefix}-print:before { content: @fa-var-print; }
-.@{fa-css-prefix}-procedures:before { content: @fa-var-procedures; }
-.@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; }
-.@{fa-css-prefix}-project-diagram:before { content: @fa-var-project-diagram; }
-.@{fa-css-prefix}-pump-medical:before { content: @fa-var-pump-medical; }
-.@{fa-css-prefix}-pump-soap:before { content: @fa-var-pump-soap; }
-.@{fa-css-prefix}-pushed:before { content: @fa-var-pushed; }
-.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; }
-.@{fa-css-prefix}-python:before { content: @fa-var-python; }
-.@{fa-css-prefix}-qq:before { content: @fa-var-qq; }
-.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; }
-.@{fa-css-prefix}-question:before { content: @fa-var-question; }
-.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; }
-.@{fa-css-prefix}-quidditch:before { content: @fa-var-quidditch; }
-.@{fa-css-prefix}-quinscape:before { content: @fa-var-quinscape; }
-.@{fa-css-prefix}-quora:before { content: @fa-var-quora; }
-.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; }
-.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; }
-.@{fa-css-prefix}-quran:before { content: @fa-var-quran; }
-.@{fa-css-prefix}-r-project:before { content: @fa-var-r-project; }
-.@{fa-css-prefix}-radiation:before { content: @fa-var-radiation; }
-.@{fa-css-prefix}-radiation-alt:before { content: @fa-var-radiation-alt; }
-.@{fa-css-prefix}-rainbow:before { content: @fa-var-rainbow; }
-.@{fa-css-prefix}-random:before { content: @fa-var-random; }
-.@{fa-css-prefix}-raspberry-pi:before { content: @fa-var-raspberry-pi; }
-.@{fa-css-prefix}-ravelry:before { content: @fa-var-ravelry; }
-.@{fa-css-prefix}-react:before { content: @fa-var-react; }
-.@{fa-css-prefix}-reacteurope:before { content: @fa-var-reacteurope; }
-.@{fa-css-prefix}-readme:before { content: @fa-var-readme; }
-.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; }
-.@{fa-css-prefix}-receipt:before { content: @fa-var-receipt; }
-.@{fa-css-prefix}-record-vinyl:before { content: @fa-var-record-vinyl; }
-.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; }
-.@{fa-css-prefix}-red-river:before { content: @fa-var-red-river; }
-.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; }
-.@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; }
-.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; }
-.@{fa-css-prefix}-redhat:before { content: @fa-var-redhat; }
-.@{fa-css-prefix}-redo:before { content: @fa-var-redo; }
-.@{fa-css-prefix}-redo-alt:before { content: @fa-var-redo-alt; }
-.@{fa-css-prefix}-registered:before { content: @fa-var-registered; }
-.@{fa-css-prefix}-remove-format:before { content: @fa-var-remove-format; }
-.@{fa-css-prefix}-renren:before { content: @fa-var-renren; }
-.@{fa-css-prefix}-reply:before { content: @fa-var-reply; }
-.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; }
-.@{fa-css-prefix}-replyd:before { content: @fa-var-replyd; }
-.@{fa-css-prefix}-republican:before { content: @fa-var-republican; }
-.@{fa-css-prefix}-researchgate:before { content: @fa-var-researchgate; }
-.@{fa-css-prefix}-resolving:before { content: @fa-var-resolving; }
-.@{fa-css-prefix}-restroom:before { content: @fa-var-restroom; }
-.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; }
-.@{fa-css-prefix}-rev:before { content: @fa-var-rev; }
-.@{fa-css-prefix}-ribbon:before { content: @fa-var-ribbon; }
-.@{fa-css-prefix}-ring:before { content: @fa-var-ring; }
-.@{fa-css-prefix}-road:before { content: @fa-var-road; }
-.@{fa-css-prefix}-robot:before { content: @fa-var-robot; }
-.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; }
-.@{fa-css-prefix}-rocketchat:before { content: @fa-var-rocketchat; }
-.@{fa-css-prefix}-rockrms:before { content: @fa-var-rockrms; }
-.@{fa-css-prefix}-route:before { content: @fa-var-route; }
-.@{fa-css-prefix}-rss:before { content: @fa-var-rss; }
-.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; }
-.@{fa-css-prefix}-ruble-sign:before { content: @fa-var-ruble-sign; }
-.@{fa-css-prefix}-ruler:before { content: @fa-var-ruler; }
-.@{fa-css-prefix}-ruler-combined:before { content: @fa-var-ruler-combined; }
-.@{fa-css-prefix}-ruler-horizontal:before { content: @fa-var-ruler-horizontal; }
-.@{fa-css-prefix}-ruler-vertical:before { content: @fa-var-ruler-vertical; }
-.@{fa-css-prefix}-running:before { content: @fa-var-running; }
-.@{fa-css-prefix}-rupee-sign:before { content: @fa-var-rupee-sign; }
-.@{fa-css-prefix}-rust:before { content: @fa-var-rust; }
-.@{fa-css-prefix}-sad-cry:before { content: @fa-var-sad-cry; }
-.@{fa-css-prefix}-sad-tear:before { content: @fa-var-sad-tear; }
-.@{fa-css-prefix}-safari:before { content: @fa-var-safari; }
-.@{fa-css-prefix}-salesforce:before { content: @fa-var-salesforce; }
-.@{fa-css-prefix}-sass:before { content: @fa-var-sass; }
-.@{fa-css-prefix}-satellite:before { content: @fa-var-satellite; }
-.@{fa-css-prefix}-satellite-dish:before { content: @fa-var-satellite-dish; }
-.@{fa-css-prefix}-save:before { content: @fa-var-save; }
-.@{fa-css-prefix}-schlix:before { content: @fa-var-schlix; }
-.@{fa-css-prefix}-school:before { content: @fa-var-school; }
-.@{fa-css-prefix}-screwdriver:before { content: @fa-var-screwdriver; }
-.@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; }
-.@{fa-css-prefix}-scroll:before { content: @fa-var-scroll; }
-.@{fa-css-prefix}-sd-card:before { content: @fa-var-sd-card; }
-.@{fa-css-prefix}-search:before { content: @fa-var-search; }
-.@{fa-css-prefix}-search-dollar:before { content: @fa-var-search-dollar; }
-.@{fa-css-prefix}-search-location:before { content: @fa-var-search-location; }
-.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; }
-.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; }
-.@{fa-css-prefix}-searchengin:before { content: @fa-var-searchengin; }
-.@{fa-css-prefix}-seedling:before { content: @fa-var-seedling; }
-.@{fa-css-prefix}-sellcast:before { content: @fa-var-sellcast; }
-.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; }
-.@{fa-css-prefix}-server:before { content: @fa-var-server; }
-.@{fa-css-prefix}-servicestack:before { content: @fa-var-servicestack; }
-.@{fa-css-prefix}-shapes:before { content: @fa-var-shapes; }
-.@{fa-css-prefix}-share:before { content: @fa-var-share; }
-.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; }
-.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; }
-.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; }
-.@{fa-css-prefix}-shekel-sign:before { content: @fa-var-shekel-sign; }
-.@{fa-css-prefix}-shield-alt:before { content: @fa-var-shield-alt; }
-.@{fa-css-prefix}-shield-virus:before { content: @fa-var-shield-virus; }
-.@{fa-css-prefix}-ship:before { content: @fa-var-ship; }
-.@{fa-css-prefix}-shipping-fast:before { content: @fa-var-shipping-fast; }
-.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; }
-.@{fa-css-prefix}-shoe-prints:before { content: @fa-var-shoe-prints; }
-.@{fa-css-prefix}-shopify:before { content: @fa-var-shopify; }
-.@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; }
-.@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; }
-.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; }
-.@{fa-css-prefix}-shopware:before { content: @fa-var-shopware; }
-.@{fa-css-prefix}-shower:before { content: @fa-var-shower; }
-.@{fa-css-prefix}-shuttle-van:before { content: @fa-var-shuttle-van; }
-.@{fa-css-prefix}-sign:before { content: @fa-var-sign; }
-.@{fa-css-prefix}-sign-in-alt:before { content: @fa-var-sign-in-alt; }
-.@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; }
-.@{fa-css-prefix}-sign-out-alt:before { content: @fa-var-sign-out-alt; }
-.@{fa-css-prefix}-signal:before { content: @fa-var-signal; }
-.@{fa-css-prefix}-signature:before { content: @fa-var-signature; }
-.@{fa-css-prefix}-sim-card:before { content: @fa-var-sim-card; }
-.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; }
-.@{fa-css-prefix}-sink:before { content: @fa-var-sink; }
-.@{fa-css-prefix}-sistrix:before { content: @fa-var-sistrix; }
-.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; }
-.@{fa-css-prefix}-sith:before { content: @fa-var-sith; }
-.@{fa-css-prefix}-skating:before { content: @fa-var-skating; }
-.@{fa-css-prefix}-sketch:before { content: @fa-var-sketch; }
-.@{fa-css-prefix}-skiing:before { content: @fa-var-skiing; }
-.@{fa-css-prefix}-skiing-nordic:before { content: @fa-var-skiing-nordic; }
-.@{fa-css-prefix}-skull:before { content: @fa-var-skull; }
-.@{fa-css-prefix}-skull-crossbones:before { content: @fa-var-skull-crossbones; }
-.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; }
-.@{fa-css-prefix}-skype:before { content: @fa-var-skype; }
-.@{fa-css-prefix}-slack:before { content: @fa-var-slack; }
-.@{fa-css-prefix}-slack-hash:before { content: @fa-var-slack-hash; }
-.@{fa-css-prefix}-slash:before { content: @fa-var-slash; }
-.@{fa-css-prefix}-sleigh:before { content: @fa-var-sleigh; }
-.@{fa-css-prefix}-sliders-h:before { content: @fa-var-sliders-h; }
-.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; }
-.@{fa-css-prefix}-smile:before { content: @fa-var-smile; }
-.@{fa-css-prefix}-smile-beam:before { content: @fa-var-smile-beam; }
-.@{fa-css-prefix}-smile-wink:before { content: @fa-var-smile-wink; }
-.@{fa-css-prefix}-smog:before { content: @fa-var-smog; }
-.@{fa-css-prefix}-smoking:before { content: @fa-var-smoking; }
-.@{fa-css-prefix}-smoking-ban:before { content: @fa-var-smoking-ban; }
-.@{fa-css-prefix}-sms:before { content: @fa-var-sms; }
-.@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; }
-.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; }
-.@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; }
-.@{fa-css-prefix}-snowboarding:before { content: @fa-var-snowboarding; }
-.@{fa-css-prefix}-snowflake:before { content: @fa-var-snowflake; }
-.@{fa-css-prefix}-snowman:before { content: @fa-var-snowman; }
-.@{fa-css-prefix}-snowplow:before { content: @fa-var-snowplow; }
-.@{fa-css-prefix}-soap:before { content: @fa-var-soap; }
-.@{fa-css-prefix}-socks:before { content: @fa-var-socks; }
-.@{fa-css-prefix}-solar-panel:before { content: @fa-var-solar-panel; }
-.@{fa-css-prefix}-sort:before { content: @fa-var-sort; }
-.@{fa-css-prefix}-sort-alpha-down:before { content: @fa-var-sort-alpha-down; }
-.@{fa-css-prefix}-sort-alpha-down-alt:before { content: @fa-var-sort-alpha-down-alt; }
-.@{fa-css-prefix}-sort-alpha-up:before { content: @fa-var-sort-alpha-up; }
-.@{fa-css-prefix}-sort-alpha-up-alt:before { content: @fa-var-sort-alpha-up-alt; }
-.@{fa-css-prefix}-sort-amount-down:before { content: @fa-var-sort-amount-down; }
-.@{fa-css-prefix}-sort-amount-down-alt:before { content: @fa-var-sort-amount-down-alt; }
-.@{fa-css-prefix}-sort-amount-up:before { content: @fa-var-sort-amount-up; }
-.@{fa-css-prefix}-sort-amount-up-alt:before { content: @fa-var-sort-amount-up-alt; }
-.@{fa-css-prefix}-sort-down:before { content: @fa-var-sort-down; }
-.@{fa-css-prefix}-sort-numeric-down:before { content: @fa-var-sort-numeric-down; }
-.@{fa-css-prefix}-sort-numeric-down-alt:before { content: @fa-var-sort-numeric-down-alt; }
-.@{fa-css-prefix}-sort-numeric-up:before { content: @fa-var-sort-numeric-up; }
-.@{fa-css-prefix}-sort-numeric-up-alt:before { content: @fa-var-sort-numeric-up-alt; }
-.@{fa-css-prefix}-sort-up:before { content: @fa-var-sort-up; }
-.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; }
-.@{fa-css-prefix}-sourcetree:before { content: @fa-var-sourcetree; }
-.@{fa-css-prefix}-spa:before { content: @fa-var-spa; }
-.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; }
-.@{fa-css-prefix}-speakap:before { content: @fa-var-speakap; }
-.@{fa-css-prefix}-speaker-deck:before { content: @fa-var-speaker-deck; }
-.@{fa-css-prefix}-spell-check:before { content: @fa-var-spell-check; }
-.@{fa-css-prefix}-spider:before { content: @fa-var-spider; }
-.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; }
-.@{fa-css-prefix}-splotch:before { content: @fa-var-splotch; }
-.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; }
-.@{fa-css-prefix}-spray-can:before { content: @fa-var-spray-can; }
-.@{fa-css-prefix}-square:before { content: @fa-var-square; }
-.@{fa-css-prefix}-square-full:before { content: @fa-var-square-full; }
-.@{fa-css-prefix}-square-root-alt:before { content: @fa-var-square-root-alt; }
-.@{fa-css-prefix}-squarespace:before { content: @fa-var-squarespace; }
-.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; }
-.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; }
-.@{fa-css-prefix}-stackpath:before { content: @fa-var-stackpath; }
-.@{fa-css-prefix}-stamp:before { content: @fa-var-stamp; }
-.@{fa-css-prefix}-star:before { content: @fa-var-star; }
-.@{fa-css-prefix}-star-and-crescent:before { content: @fa-var-star-and-crescent; }
-.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; }
-.@{fa-css-prefix}-star-half-alt:before { content: @fa-var-star-half-alt; }
-.@{fa-css-prefix}-star-of-david:before { content: @fa-var-star-of-david; }
-.@{fa-css-prefix}-star-of-life:before { content: @fa-var-star-of-life; }
-.@{fa-css-prefix}-staylinked:before { content: @fa-var-staylinked; }
-.@{fa-css-prefix}-steam:before { content: @fa-var-steam; }
-.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; }
-.@{fa-css-prefix}-steam-symbol:before { content: @fa-var-steam-symbol; }
-.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; }
-.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; }
-.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; }
-.@{fa-css-prefix}-sticker-mule:before { content: @fa-var-sticker-mule; }
-.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; }
-.@{fa-css-prefix}-stop:before { content: @fa-var-stop; }
-.@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; }
-.@{fa-css-prefix}-stopwatch:before { content: @fa-var-stopwatch; }
-.@{fa-css-prefix}-stopwatch-20:before { content: @fa-var-stopwatch-20; }
-.@{fa-css-prefix}-store:before { content: @fa-var-store; }
-.@{fa-css-prefix}-store-alt:before { content: @fa-var-store-alt; }
-.@{fa-css-prefix}-store-alt-slash:before { content: @fa-var-store-alt-slash; }
-.@{fa-css-prefix}-store-slash:before { content: @fa-var-store-slash; }
-.@{fa-css-prefix}-strava:before { content: @fa-var-strava; }
-.@{fa-css-prefix}-stream:before { content: @fa-var-stream; }
-.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; }
-.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; }
-.@{fa-css-prefix}-stripe:before { content: @fa-var-stripe; }
-.@{fa-css-prefix}-stripe-s:before { content: @fa-var-stripe-s; }
-.@{fa-css-prefix}-stroopwafel:before { content: @fa-var-stroopwafel; }
-.@{fa-css-prefix}-studiovinari:before { content: @fa-var-studiovinari; }
-.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; }
-.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; }
-.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; }
-.@{fa-css-prefix}-subway:before { content: @fa-var-subway; }
-.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; }
-.@{fa-css-prefix}-suitcase-rolling:before { content: @fa-var-suitcase-rolling; }
-.@{fa-css-prefix}-sun:before { content: @fa-var-sun; }
-.@{fa-css-prefix}-superpowers:before { content: @fa-var-superpowers; }
-.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; }
-.@{fa-css-prefix}-supple:before { content: @fa-var-supple; }
-.@{fa-css-prefix}-surprise:before { content: @fa-var-surprise; }
-.@{fa-css-prefix}-suse:before { content: @fa-var-suse; }
-.@{fa-css-prefix}-swatchbook:before { content: @fa-var-swatchbook; }
-.@{fa-css-prefix}-swift:before { content: @fa-var-swift; }
-.@{fa-css-prefix}-swimmer:before { content: @fa-var-swimmer; }
-.@{fa-css-prefix}-swimming-pool:before { content: @fa-var-swimming-pool; }
-.@{fa-css-prefix}-symfony:before { content: @fa-var-symfony; }
-.@{fa-css-prefix}-synagogue:before { content: @fa-var-synagogue; }
-.@{fa-css-prefix}-sync:before { content: @fa-var-sync; }
-.@{fa-css-prefix}-sync-alt:before { content: @fa-var-sync-alt; }
-.@{fa-css-prefix}-syringe:before { content: @fa-var-syringe; }
-.@{fa-css-prefix}-table:before { content: @fa-var-table; }
-.@{fa-css-prefix}-table-tennis:before { content: @fa-var-table-tennis; }
-.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; }
-.@{fa-css-prefix}-tablet-alt:before { content: @fa-var-tablet-alt; }
-.@{fa-css-prefix}-tablets:before { content: @fa-var-tablets; }
-.@{fa-css-prefix}-tachometer-alt:before { content: @fa-var-tachometer-alt; }
-.@{fa-css-prefix}-tag:before { content: @fa-var-tag; }
-.@{fa-css-prefix}-tags:before { content: @fa-var-tags; }
-.@{fa-css-prefix}-tape:before { content: @fa-var-tape; }
-.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; }
-.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; }
-.@{fa-css-prefix}-teamspeak:before { content: @fa-var-teamspeak; }
-.@{fa-css-prefix}-teeth:before { content: @fa-var-teeth; }
-.@{fa-css-prefix}-teeth-open:before { content: @fa-var-teeth-open; }
-.@{fa-css-prefix}-telegram:before { content: @fa-var-telegram; }
-.@{fa-css-prefix}-telegram-plane:before { content: @fa-var-telegram-plane; }
-.@{fa-css-prefix}-temperature-high:before { content: @fa-var-temperature-high; }
-.@{fa-css-prefix}-temperature-low:before { content: @fa-var-temperature-low; }
-.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; }
-.@{fa-css-prefix}-tenge:before { content: @fa-var-tenge; }
-.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; }
-.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; }
-.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; }
-.@{fa-css-prefix}-th:before { content: @fa-var-th; }
-.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; }
-.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; }
-.@{fa-css-prefix}-the-red-yeti:before { content: @fa-var-the-red-yeti; }
-.@{fa-css-prefix}-theater-masks:before { content: @fa-var-theater-masks; }
-.@{fa-css-prefix}-themeco:before { content: @fa-var-themeco; }
-.@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; }
-.@{fa-css-prefix}-thermometer:before { content: @fa-var-thermometer; }
-.@{fa-css-prefix}-thermometer-empty:before { content: @fa-var-thermometer-empty; }
-.@{fa-css-prefix}-thermometer-full:before { content: @fa-var-thermometer-full; }
-.@{fa-css-prefix}-thermometer-half:before { content: @fa-var-thermometer-half; }
-.@{fa-css-prefix}-thermometer-quarter:before { content: @fa-var-thermometer-quarter; }
-.@{fa-css-prefix}-thermometer-three-quarters:before { content: @fa-var-thermometer-three-quarters; }
-.@{fa-css-prefix}-think-peaks:before { content: @fa-var-think-peaks; }
-.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; }
-.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; }
-.@{fa-css-prefix}-thumbtack:before { content: @fa-var-thumbtack; }
-.@{fa-css-prefix}-ticket-alt:before { content: @fa-var-ticket-alt; }
-.@{fa-css-prefix}-tiktok:before { content: @fa-var-tiktok; }
-.@{fa-css-prefix}-times:before { content: @fa-var-times; }
-.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; }
-.@{fa-css-prefix}-tint:before { content: @fa-var-tint; }
-.@{fa-css-prefix}-tint-slash:before { content: @fa-var-tint-slash; }
-.@{fa-css-prefix}-tired:before { content: @fa-var-tired; }
-.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; }
-.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; }
-.@{fa-css-prefix}-toilet:before { content: @fa-var-toilet; }
-.@{fa-css-prefix}-toilet-paper:before { content: @fa-var-toilet-paper; }
-.@{fa-css-prefix}-toilet-paper-slash:before { content: @fa-var-toilet-paper-slash; }
-.@{fa-css-prefix}-toolbox:before { content: @fa-var-toolbox; }
-.@{fa-css-prefix}-tools:before { content: @fa-var-tools; }
-.@{fa-css-prefix}-tooth:before { content: @fa-var-tooth; }
-.@{fa-css-prefix}-torah:before { content: @fa-var-torah; }
-.@{fa-css-prefix}-torii-gate:before { content: @fa-var-torii-gate; }
-.@{fa-css-prefix}-tractor:before { content: @fa-var-tractor; }
-.@{fa-css-prefix}-trade-federation:before { content: @fa-var-trade-federation; }
-.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; }
-.@{fa-css-prefix}-traffic-light:before { content: @fa-var-traffic-light; }
-.@{fa-css-prefix}-trailer:before { content: @fa-var-trailer; }
-.@{fa-css-prefix}-train:before { content: @fa-var-train; }
-.@{fa-css-prefix}-tram:before { content: @fa-var-tram; }
-.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; }
-.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; }
-.@{fa-css-prefix}-trash:before { content: @fa-var-trash; }
-.@{fa-css-prefix}-trash-alt:before { content: @fa-var-trash-alt; }
-.@{fa-css-prefix}-trash-restore:before { content: @fa-var-trash-restore; }
-.@{fa-css-prefix}-trash-restore-alt:before { content: @fa-var-trash-restore-alt; }
-.@{fa-css-prefix}-tree:before { content: @fa-var-tree; }
-.@{fa-css-prefix}-trello:before { content: @fa-var-trello; }
-.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; }
-.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; }
-.@{fa-css-prefix}-truck:before { content: @fa-var-truck; }
-.@{fa-css-prefix}-truck-loading:before { content: @fa-var-truck-loading; }
-.@{fa-css-prefix}-truck-monster:before { content: @fa-var-truck-monster; }
-.@{fa-css-prefix}-truck-moving:before { content: @fa-var-truck-moving; }
-.@{fa-css-prefix}-truck-pickup:before { content: @fa-var-truck-pickup; }
-.@{fa-css-prefix}-tshirt:before { content: @fa-var-tshirt; }
-.@{fa-css-prefix}-tty:before { content: @fa-var-tty; }
-.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; }
-.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; }
-.@{fa-css-prefix}-tv:before { content: @fa-var-tv; }
-.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; }
-.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; }
-.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; }
-.@{fa-css-prefix}-typo3:before { content: @fa-var-typo3; }
-.@{fa-css-prefix}-uber:before { content: @fa-var-uber; }
-.@{fa-css-prefix}-ubuntu:before { content: @fa-var-ubuntu; }
-.@{fa-css-prefix}-uikit:before { content: @fa-var-uikit; }
-.@{fa-css-prefix}-umbraco:before { content: @fa-var-umbraco; }
-.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; }
-.@{fa-css-prefix}-umbrella-beach:before { content: @fa-var-umbrella-beach; }
-.@{fa-css-prefix}-uncharted:before { content: @fa-var-uncharted; }
-.@{fa-css-prefix}-underline:before { content: @fa-var-underline; }
-.@{fa-css-prefix}-undo:before { content: @fa-var-undo; }
-.@{fa-css-prefix}-undo-alt:before { content: @fa-var-undo-alt; }
-.@{fa-css-prefix}-uniregistry:before { content: @fa-var-uniregistry; }
-.@{fa-css-prefix}-unity:before { content: @fa-var-unity; }
-.@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; }
-.@{fa-css-prefix}-university:before { content: @fa-var-university; }
-.@{fa-css-prefix}-unlink:before { content: @fa-var-unlink; }
-.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; }
-.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; }
-.@{fa-css-prefix}-unsplash:before { content: @fa-var-unsplash; }
-.@{fa-css-prefix}-untappd:before { content: @fa-var-untappd; }
-.@{fa-css-prefix}-upload:before { content: @fa-var-upload; }
-.@{fa-css-prefix}-ups:before { content: @fa-var-ups; }
-.@{fa-css-prefix}-usb:before { content: @fa-var-usb; }
-.@{fa-css-prefix}-user:before { content: @fa-var-user; }
-.@{fa-css-prefix}-user-alt:before { content: @fa-var-user-alt; }
-.@{fa-css-prefix}-user-alt-slash:before { content: @fa-var-user-alt-slash; }
-.@{fa-css-prefix}-user-astronaut:before { content: @fa-var-user-astronaut; }
-.@{fa-css-prefix}-user-check:before { content: @fa-var-user-check; }
-.@{fa-css-prefix}-user-circle:before { content: @fa-var-user-circle; }
-.@{fa-css-prefix}-user-clock:before { content: @fa-var-user-clock; }
-.@{fa-css-prefix}-user-cog:before { content: @fa-var-user-cog; }
-.@{fa-css-prefix}-user-edit:before { content: @fa-var-user-edit; }
-.@{fa-css-prefix}-user-friends:before { content: @fa-var-user-friends; }
-.@{fa-css-prefix}-user-graduate:before { content: @fa-var-user-graduate; }
-.@{fa-css-prefix}-user-injured:before { content: @fa-var-user-injured; }
-.@{fa-css-prefix}-user-lock:before { content: @fa-var-user-lock; }
-.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; }
-.@{fa-css-prefix}-user-minus:before { content: @fa-var-user-minus; }
-.@{fa-css-prefix}-user-ninja:before { content: @fa-var-user-ninja; }
-.@{fa-css-prefix}-user-nurse:before { content: @fa-var-user-nurse; }
-.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; }
-.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; }
-.@{fa-css-prefix}-user-shield:before { content: @fa-var-user-shield; }
-.@{fa-css-prefix}-user-slash:before { content: @fa-var-user-slash; }
-.@{fa-css-prefix}-user-tag:before { content: @fa-var-user-tag; }
-.@{fa-css-prefix}-user-tie:before { content: @fa-var-user-tie; }
-.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; }
-.@{fa-css-prefix}-users:before { content: @fa-var-users; }
-.@{fa-css-prefix}-users-cog:before { content: @fa-var-users-cog; }
-.@{fa-css-prefix}-users-slash:before { content: @fa-var-users-slash; }
-.@{fa-css-prefix}-usps:before { content: @fa-var-usps; }
-.@{fa-css-prefix}-ussunnah:before { content: @fa-var-ussunnah; }
-.@{fa-css-prefix}-utensil-spoon:before { content: @fa-var-utensil-spoon; }
-.@{fa-css-prefix}-utensils:before { content: @fa-var-utensils; }
-.@{fa-css-prefix}-vaadin:before { content: @fa-var-vaadin; }
-.@{fa-css-prefix}-vector-square:before { content: @fa-var-vector-square; }
-.@{fa-css-prefix}-venus:before { content: @fa-var-venus; }
-.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; }
-.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; }
-.@{fa-css-prefix}-vest:before { content: @fa-var-vest; }
-.@{fa-css-prefix}-vest-patches:before { content: @fa-var-vest-patches; }
-.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; }
-.@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; }
-.@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; }
-.@{fa-css-prefix}-vial:before { content: @fa-var-vial; }
-.@{fa-css-prefix}-vials:before { content: @fa-var-vials; }
-.@{fa-css-prefix}-viber:before { content: @fa-var-viber; }
-.@{fa-css-prefix}-video:before { content: @fa-var-video; }
-.@{fa-css-prefix}-video-slash:before { content: @fa-var-video-slash; }
-.@{fa-css-prefix}-vihara:before { content: @fa-var-vihara; }
-.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; }
-.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; }
-.@{fa-css-prefix}-vimeo-v:before { content: @fa-var-vimeo-v; }
-.@{fa-css-prefix}-vine:before { content: @fa-var-vine; }
-.@{fa-css-prefix}-virus:before { content: @fa-var-virus; }
-.@{fa-css-prefix}-virus-slash:before { content: @fa-var-virus-slash; }
-.@{fa-css-prefix}-viruses:before { content: @fa-var-viruses; }
-.@{fa-css-prefix}-vk:before { content: @fa-var-vk; }
-.@{fa-css-prefix}-vnv:before { content: @fa-var-vnv; }
-.@{fa-css-prefix}-voicemail:before { content: @fa-var-voicemail; }
-.@{fa-css-prefix}-volleyball-ball:before { content: @fa-var-volleyball-ball; }
-.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; }
-.@{fa-css-prefix}-volume-mute:before { content: @fa-var-volume-mute; }
-.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; }
-.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; }
-.@{fa-css-prefix}-vote-yea:before { content: @fa-var-vote-yea; }
-.@{fa-css-prefix}-vr-cardboard:before { content: @fa-var-vr-cardboard; }
-.@{fa-css-prefix}-vuejs:before { content: @fa-var-vuejs; }
-.@{fa-css-prefix}-walking:before { content: @fa-var-walking; }
-.@{fa-css-prefix}-wallet:before { content: @fa-var-wallet; }
-.@{fa-css-prefix}-warehouse:before { content: @fa-var-warehouse; }
-.@{fa-css-prefix}-watchman-monitoring:before { content: @fa-var-watchman-monitoring; }
-.@{fa-css-prefix}-water:before { content: @fa-var-water; }
-.@{fa-css-prefix}-wave-square:before { content: @fa-var-wave-square; }
-.@{fa-css-prefix}-waze:before { content: @fa-var-waze; }
-.@{fa-css-prefix}-weebly:before { content: @fa-var-weebly; }
-.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; }
-.@{fa-css-prefix}-weight:before { content: @fa-var-weight; }
-.@{fa-css-prefix}-weight-hanging:before { content: @fa-var-weight-hanging; }
-.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; }
-.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; }
-.@{fa-css-prefix}-whatsapp-square:before { content: @fa-var-whatsapp-square; }
-.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; }
-.@{fa-css-prefix}-whmcs:before { content: @fa-var-whmcs; }
-.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; }
-.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; }
-.@{fa-css-prefix}-wind:before { content: @fa-var-wind; }
-.@{fa-css-prefix}-window-close:before { content: @fa-var-window-close; }
-.@{fa-css-prefix}-window-maximize:before { content: @fa-var-window-maximize; }
-.@{fa-css-prefix}-window-minimize:before { content: @fa-var-window-minimize; }
-.@{fa-css-prefix}-window-restore:before { content: @fa-var-window-restore; }
-.@{fa-css-prefix}-windows:before { content: @fa-var-windows; }
-.@{fa-css-prefix}-wine-bottle:before { content: @fa-var-wine-bottle; }
-.@{fa-css-prefix}-wine-glass:before { content: @fa-var-wine-glass; }
-.@{fa-css-prefix}-wine-glass-alt:before { content: @fa-var-wine-glass-alt; }
-.@{fa-css-prefix}-wix:before { content: @fa-var-wix; }
-.@{fa-css-prefix}-wizards-of-the-coast:before { content: @fa-var-wizards-of-the-coast; }
-.@{fa-css-prefix}-wodu:before { content: @fa-var-wodu; }
-.@{fa-css-prefix}-wolf-pack-battalion:before { content: @fa-var-wolf-pack-battalion; }
-.@{fa-css-prefix}-won-sign:before { content: @fa-var-won-sign; }
-.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; }
-.@{fa-css-prefix}-wordpress-simple:before { content: @fa-var-wordpress-simple; }
-.@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; }
-.@{fa-css-prefix}-wpexplorer:before { content: @fa-var-wpexplorer; }
-.@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; }
-.@{fa-css-prefix}-wpressr:before { content: @fa-var-wpressr; }
-.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; }
-.@{fa-css-prefix}-x-ray:before { content: @fa-var-x-ray; }
-.@{fa-css-prefix}-xbox:before { content: @fa-var-xbox; }
-.@{fa-css-prefix}-xing:before { content: @fa-var-xing; }
-.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; }
-.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; }
-.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; }
-.@{fa-css-prefix}-yammer:before { content: @fa-var-yammer; }
-.@{fa-css-prefix}-yandex:before { content: @fa-var-yandex; }
-.@{fa-css-prefix}-yandex-international:before { content: @fa-var-yandex-international; }
-.@{fa-css-prefix}-yarn:before { content: @fa-var-yarn; }
-.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; }
-.@{fa-css-prefix}-yen-sign:before { content: @fa-var-yen-sign; }
-.@{fa-css-prefix}-yin-yang:before { content: @fa-var-yin-yang; }
-.@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; }
-.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; }
-.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; }
-.@{fa-css-prefix}-zhihu:before { content: @fa-var-zhihu; }
diff --git a/public/vendor/fontawesome/less/_larger.less b/public/vendor/fontawesome/less/_larger.less
deleted file mode 100644
index 6cbb1ec6ec..0000000000
--- a/public/vendor/fontawesome/less/_larger.less
+++ /dev/null
@@ -1,27 +0,0 @@
-// Icon Sizes
-// -------------------------
-
-.larger(@factor) when (@factor > 0) {
- .larger((@factor - 1));
-
- .@{fa-css-prefix}-@{factor}x {
- font-size: (@factor * 1em);
- }
-}
-
-/* makes the font 33% larger relative to the icon container */
-.@{fa-css-prefix}-lg {
- font-size: (4em / 3);
- line-height: (3em / 4);
- vertical-align: -.0667em;
-}
-
-.@{fa-css-prefix}-xs {
- font-size: .75em;
-}
-
-.@{fa-css-prefix}-sm {
- font-size: .875em;
-}
-
-.larger(10);
diff --git a/public/vendor/fontawesome/less/_list.less b/public/vendor/fontawesome/less/_list.less
deleted file mode 100644
index 318aaa96ac..0000000000
--- a/public/vendor/fontawesome/less/_list.less
+++ /dev/null
@@ -1,18 +0,0 @@
-// List Icons
-// -------------------------
-
-.@{fa-css-prefix}-ul {
- list-style-type: none;
- margin-left: (@fa-li-width * 5/4);
- padding-left: 0;
-
- > li { position: relative; }
-}
-
-.@{fa-css-prefix}-li {
- left: -@fa-li-width;
- position: absolute;
- text-align: center;
- width: @fa-li-width;
- line-height: inherit;
-}
diff --git a/public/vendor/fontawesome/less/_mixins.less b/public/vendor/fontawesome/less/_mixins.less
deleted file mode 100644
index be561347ee..0000000000
--- a/public/vendor/fontawesome/less/_mixins.less
+++ /dev/null
@@ -1,56 +0,0 @@
-// Mixins
-// --------------------------
-
-.fa-icon() {
- -moz-osx-font-smoothing: grayscale;
- -webkit-font-smoothing: antialiased;
- display: inline-block;
- font-style: normal;
- font-variant: normal;
- font-weight: normal;
- line-height: 1;
-}
-
-.fa-icon-rotate(@degrees, @rotation) {
- -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})";
- transform: rotate(@degrees);
-}
-
-.fa-icon-flip(@horiz, @vert, @rotation) {
- -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)";
- transform: scale(@horiz, @vert);
-}
-
-
-// Only display content to screen readers. A la Bootstrap 4.
-//
-// See: http://a11yproject.com/posts/how-to-hide-content/
-
-.sr-only() {
- border: 0;
- clip: rect(0,0,0,0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-
-// Use in conjunction with .sr-only to only display content when it's focused.
-//
-// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
-//
-// Credit: HTML5 Boilerplate
-
-.sr-only-focusable() {
- &:active,
- &:focus {
- clip: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- position: static;
- width: auto;
- }
-}
diff --git a/public/vendor/fontawesome/less/_rotated-flipped.less b/public/vendor/fontawesome/less/_rotated-flipped.less
deleted file mode 100644
index d0c63ff80a..0000000000
--- a/public/vendor/fontawesome/less/_rotated-flipped.less
+++ /dev/null
@@ -1,24 +0,0 @@
-// Rotated & Flipped Icons
-// -------------------------
-
-.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
-.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
-.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
-
-.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
-.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
-.@{fa-css-prefix}-flip-both, .@{fa-css-prefix}-flip-horizontal.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(-1, -1, 2); }
-
-// Hook for IE8-9
-// -------------------------
-
-:root {
- .@{fa-css-prefix}-rotate-90,
- .@{fa-css-prefix}-rotate-180,
- .@{fa-css-prefix}-rotate-270,
- .@{fa-css-prefix}-flip-horizontal,
- .@{fa-css-prefix}-flip-vertical,
- .@{fa-css-prefix}-flip-both {
- filter: none;
- }
-}
diff --git a/public/vendor/fontawesome/less/_screen-reader.less b/public/vendor/fontawesome/less/_screen-reader.less
deleted file mode 100644
index 11c188196d..0000000000
--- a/public/vendor/fontawesome/less/_screen-reader.less
+++ /dev/null
@@ -1,5 +0,0 @@
-// Screen Readers
-// -------------------------
-
-.sr-only { .sr-only(); }
-.sr-only-focusable { .sr-only-focusable(); }
diff --git a/public/vendor/fontawesome/less/_shims.less b/public/vendor/fontawesome/less/_shims.less
deleted file mode 100644
index 3c8d86d744..0000000000
--- a/public/vendor/fontawesome/less/_shims.less
+++ /dev/null
@@ -1,2066 +0,0 @@
-.@{fa-css-prefix}.@{fa-css-prefix}-glass:before { content: @fa-var-glass-martini; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-meetup {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-star-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-star-o:before { content: @fa-var-star; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-remove:before { content: @fa-var-times; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-close:before { content: @fa-var-times; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-gear:before { content: @fa-var-cog; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-trash-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-o:before { content: @fa-var-file; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-clock-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-down {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-alt-circle-down; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-up {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-alt-circle-up; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-play-circle-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-repeat:before { content: @fa-var-redo; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-rotate-right:before { content: @fa-var-redo; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-refresh:before { content: @fa-var-sync; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-list-alt {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-dedent:before { content: @fa-var-outdent; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-video-camera:before { content: @fa-var-video; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-picture-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-picture-o:before { content: @fa-var-image; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-photo {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-photo:before { content: @fa-var-image; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-image {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-image:before { content: @fa-var-image; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-pencil-square-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-edit; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-share-square-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-check-square-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-times-circle-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-check-circle-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-mail-forward:before { content: @fa-var-share; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-expand:before { content: @fa-var-expand-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-compress:before { content: @fa-var-compress-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-eye {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-eye-slash {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-warning:before { content: @fa-var-exclamation-triangle; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-alt-v; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-alt-h; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-bar-chart {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-bar-chart:before { content: @fa-var-chart-bar; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-bar-chart-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-bar-chart-o:before { content: @fa-var-chart-bar; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-twitter-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-facebook-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-gears:before { content: @fa-var-cogs; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-thumbs-o-up {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-up; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-thumbs-o-down {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-down; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-heart-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-linkedin-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumbtack; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-github-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-lemon-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-square-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-square-o:before { content: @fa-var-square; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-bookmark-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-twitter {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-facebook {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook-f; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-facebook-f {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-facebook-f:before { content: @fa-var-facebook-f; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-github {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-credit-card {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-feed:before { content: @fa-var-rss; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hdd-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-right {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-point-right; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-left {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-point-left; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-up {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-point-up; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-down {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-point-down; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-expand-arrows-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-group:before { content: @fa-var-users; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-chain:before { content: @fa-var-link; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-scissors:before { content: @fa-var-cut; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-files-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-files-o:before { content: @fa-var-copy; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-floppy-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-floppy-o:before { content: @fa-var-save; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-navicon:before { content: @fa-var-bars; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-reorder:before { content: @fa-var-bars; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-pinterest {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-pinterest-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-google-plus-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-google-plus {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus-g; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-money {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-money:before { content: @fa-var-money-bill-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-unsorted:before { content: @fa-var-sort; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-down; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-up; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-linkedin {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin-in; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-rotate-left:before { content: @fa-var-undo; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-legal:before { content: @fa-var-gavel; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-dashboard:before { content: @fa-var-tachometer-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-comment-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-comments-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-flash:before { content: @fa-var-bolt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-clipboard {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-paste {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-paste:before { content: @fa-var-clipboard; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-lightbulb-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-bell-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cutlery:before { content: @fa-var-utensils; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-text-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-building-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-building-o:before { content: @fa-var-building; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hospital-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-mobile-phone:before { content: @fa-var-mobile-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-circle-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-mail-reply:before { content: @fa-var-reply; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-github-alt {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-folder-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-folder-open-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-smile-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-frown-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-meh-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-keyboard-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-flag-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-mail-reply-all:before { content: @fa-var-reply-all; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-star-half-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-star-half-empty {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-star-half-empty:before { content: @fa-var-star-half; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-star-half-full {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-star-half-full:before { content: @fa-var-star-half; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-branch; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-chain-broken:before { content: @fa-var-unlink; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-shield:before { content: @fa-var-shield-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-calendar-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-maxcdn {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-html5 {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-css3 {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-minus-square-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pen-square; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-compass {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-down {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-down; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-toggle-down {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-toggle-down:before { content: @fa-var-caret-square-down; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-up {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-up; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-toggle-up {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-toggle-up:before { content: @fa-var-caret-square-up; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-right {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-right; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-toggle-right {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-toggle-right:before { content: @fa-var-caret-square-right; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-eur:before { content: @fa-var-euro-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-euro:before { content: @fa-var-euro-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-gbp:before { content: @fa-var-pound-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-usd:before { content: @fa-var-dollar-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-dollar:before { content: @fa-var-dollar-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-inr:before { content: @fa-var-rupee-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-rupee:before { content: @fa-var-rupee-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-jpy:before { content: @fa-var-yen-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cny:before { content: @fa-var-yen-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-rmb:before { content: @fa-var-yen-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-yen:before { content: @fa-var-yen-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-rub:before { content: @fa-var-ruble-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-ruble:before { content: @fa-var-ruble-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-rouble:before { content: @fa-var-ruble-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-krw:before { content: @fa-var-won-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-won:before { content: @fa-var-won-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-btc {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-bitcoin {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-bitcoin:before { content: @fa-var-btc; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-text:before { content: @fa-var-file-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-down; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-down-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-down; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-down-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-down; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-down-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-youtube-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-youtube {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-xing {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-xing-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-youtube-play {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-dropbox {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-stack-overflow {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-instagram {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-flickr {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-adn {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-bitbucket {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-bitbucket-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-tumblr {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-tumblr-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-alt-down; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-alt-up; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-alt-left; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-alt-right; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-apple {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-windows {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-android {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-linux {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-dribbble {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-skype {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-foursquare {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-trello {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-gratipay {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-gittip {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-gittip:before { content: @fa-var-gratipay; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sun-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-moon-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-vk {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-weibo {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-renren {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-pagelines {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-stack-exchange {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-right {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-alt-circle-right; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-left {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-alt-circle-left; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-left {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-left; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-toggle-left {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-toggle-left:before { content: @fa-var-caret-square-left; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-dot-circle-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-vimeo-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-try:before { content: @fa-var-lira-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-turkish-lira:before { content: @fa-var-lira-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-plus-square-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-slack {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-wordpress {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-openid {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-institution:before { content: @fa-var-university; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-bank:before { content: @fa-var-university; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-mortar-board:before { content: @fa-var-graduation-cap; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-yahoo {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-google {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-reddit {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-reddit-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-stumbleupon-circle {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-stumbleupon {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-delicious {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-digg {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-pied-piper-pp {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-pied-piper-alt {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-drupal {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-joomla {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-spoon:before { content: @fa-var-utensil-spoon; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-behance {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-behance-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-steam {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-steam-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-automobile:before { content: @fa-var-car; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-envelope-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-spotify {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-deviantart {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-soundcloud {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-pdf-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-word-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-excel-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-powerpoint-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-image-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-photo-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-photo-o:before { content: @fa-var-file-image; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-picture-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-picture-o:before { content: @fa-var-file-image; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-archive-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-zip-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-zip-o:before { content: @fa-var-file-archive; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-audio-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-sound-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-sound-o:before { content: @fa-var-file-audio; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-video-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-movie-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-movie-o:before { content: @fa-var-file-video; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-file-code-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-vine {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-codepen {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-jsfiddle {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-life-ring {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-life-bouy {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-life-bouy:before { content: @fa-var-life-ring; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-life-buoy {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-life-buoy:before { content: @fa-var-life-ring; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-life-saver {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-life-saver:before { content: @fa-var-life-ring; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-support {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-support:before { content: @fa-var-life-ring; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-notch; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-rebel {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-ra {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-ra:before { content: @fa-var-rebel; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-resistance {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-resistance:before { content: @fa-var-rebel; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-empire {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-ge {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-ge:before { content: @fa-var-empire; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-git-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-git {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hacker-news {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-y-combinator-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-y-combinator-square:before { content: @fa-var-hacker-news; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-yc-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-yc-square:before { content: @fa-var-hacker-news; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-tencent-weibo {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-qq {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-weixin {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-wechat {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-wechat:before { content: @fa-var-weixin; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-send:before { content: @fa-var-paper-plane; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-paper-plane-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-send-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-send-o:before { content: @fa-var-paper-plane; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-circle-thin {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-header:before { content: @fa-var-heading; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders-h; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-futbol-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-soccer-ball-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-soccer-ball-o:before { content: @fa-var-futbol; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-slideshare {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-twitch {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-yelp {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-newspaper-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-paypal {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-google-wallet {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cc-visa {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cc-mastercard {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cc-discover {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cc-amex {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cc-paypal {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cc-stripe {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-bell-slash-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-trash:before { content: @fa-var-trash-alt; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-copyright {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eye-dropper; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-area-chart:before { content: @fa-var-chart-area; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-pie-chart:before { content: @fa-var-chart-pie; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-line-chart:before { content: @fa-var-chart-line; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-lastfm {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-lastfm-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-ioxhost {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-angellist {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cc {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-cc:before { content: @fa-var-closed-captioning; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-ils:before { content: @fa-var-shekel-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-shekel:before { content: @fa-var-shekel-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sheqel:before { content: @fa-var-shekel-sign; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-meanpath {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-meanpath:before { content: @fa-var-font-awesome; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-buysellads {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-connectdevelop {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-dashcube {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-forumbee {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-leanpub {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sellsy {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-shirtsinbulk {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-simplybuilt {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-skyatlas {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-diamond {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-diamond:before { content: @fa-var-gem; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-intersex:before { content: @fa-var-transgender; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-facebook-official {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-pinterest-p {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-whatsapp {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hotel:before { content: @fa-var-bed; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-viacoin {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-medium {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-y-combinator {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-yc {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-yc:before { content: @fa-var-y-combinator; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-optin-monster {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-opencart {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-expeditedssl {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-battery-4:before { content: @fa-var-battery-full; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-battery:before { content: @fa-var-battery-full; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-battery-3:before { content: @fa-var-battery-three-quarters; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-battery-2:before { content: @fa-var-battery-half; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-battery-1:before { content: @fa-var-battery-quarter; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-battery-0:before { content: @fa-var-battery-empty; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-object-group {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-object-ungroup {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-sticky-note-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cc-jcb {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cc-diners-club {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-clone {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hourglass-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hourglass-1:before { content: @fa-var-hourglass-start; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hourglass-2:before { content: @fa-var-hourglass-half; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hourglass-3:before { content: @fa-var-hourglass-end; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-rock-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-grab-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-grab-o:before { content: @fa-var-hand-rock; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-paper-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-stop-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-stop-o:before { content: @fa-var-hand-paper; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-scissors-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-lizard-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-spock-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-pointer-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-peace-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-registered {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-creative-commons {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-gg {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-gg-circle {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-tripadvisor {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-odnoklassniki {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-odnoklassniki-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-get-pocket {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-wikipedia-w {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-safari {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-chrome {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-firefox {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-opera {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-internet-explorer {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-television:before { content: @fa-var-tv; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-contao {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-500px {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-amazon {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-calendar-plus-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-calendar-minus-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-calendar-times-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-calendar-check-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-map-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-map-o:before { content: @fa-var-map; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-commenting:before { content: @fa-var-comment-dots; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-commenting-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-commenting-o:before { content: @fa-var-comment-dots; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-houzz {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-vimeo {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo-v; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-black-tie {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-fonticons {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-reddit-alien {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-edge {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-codiepie {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-modx {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-fort-awesome {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-usb {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-product-hunt {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-mixcloud {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-scribd {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-pause-circle-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-stop-circle-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-bluetooth {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-bluetooth-b {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-gitlab {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-wpbeginner {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-wpforms {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-envira {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-wheelchair-alt {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-accessible-icon; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-question-circle-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-phone-volume; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-asl-interpreting:before { content: @fa-var-american-sign-language-interpreting; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-deafness:before { content: @fa-var-deaf; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-hard-of-hearing:before { content: @fa-var-deaf; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-glide {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-glide-g {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-signing:before { content: @fa-var-sign-language; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-viadeo {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-viadeo-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-snapchat {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-snapchat-ghost {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-snapchat-square {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-pied-piper {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-first-order {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-yoast {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-themeisle {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-google-plus-official {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-google-plus-circle {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-google-plus-circle:before { content: @fa-var-google-plus; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-font-awesome {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-fa {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-fa:before { content: @fa-var-font-awesome; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-handshake-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-envelope-open-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-linode {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-address-book-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-vcard:before { content: @fa-var-address-card; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-address-card-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-vcard-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-vcard-o:before { content: @fa-var-address-card; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-user-circle-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-user-circle-o:before { content: @fa-var-user-circle; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-user-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-user-o:before { content: @fa-var-user; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-id-badge {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-drivers-license:before { content: @fa-var-id-card; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-id-card-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-drivers-license-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-drivers-license-o:before { content: @fa-var-id-card; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-quora {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-free-code-camp {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-telegram {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-thermometer-4:before { content: @fa-var-thermometer-full; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-thermometer:before { content: @fa-var-thermometer-full; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-thermometer-3:before { content: @fa-var-thermometer-three-quarters; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-thermometer-2:before { content: @fa-var-thermometer-half; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-thermometer-1:before { content: @fa-var-thermometer-quarter; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-thermometer-0:before { content: @fa-var-thermometer-empty; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-bathtub:before { content: @fa-var-bath; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-s15:before { content: @fa-var-bath; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-window-maximize {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-window-restore {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-times-rectangle:before { content: @fa-var-window-close; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-window-close-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-window-close-o:before { content: @fa-var-window-close; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-times-rectangle-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-times-rectangle-o:before { content: @fa-var-window-close; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-bandcamp {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-grav {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-etsy {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-imdb {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-ravelry {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-eercast {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-eercast:before { content: @fa-var-sellcast; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-snowflake-o {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
-.@{fa-css-prefix}.@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake; }
-
-.@{fa-css-prefix}.@{fa-css-prefix}-superpowers {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-wpexplorer {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
-
-.@{fa-css-prefix}.@{fa-css-prefix}-cab:before { content: @fa-var-taxi; }
-
diff --git a/public/vendor/fontawesome/less/_stacked.less b/public/vendor/fontawesome/less/_stacked.less
deleted file mode 100644
index 263b5c44fc..0000000000
--- a/public/vendor/fontawesome/less/_stacked.less
+++ /dev/null
@@ -1,22 +0,0 @@
-// Stacked Icons
-// -------------------------
-
-.@{fa-css-prefix}-stack {
- display: inline-block;
- height: 2em;
- line-height: 2em;
- position: relative;
- vertical-align: middle;
- width: 2em;
-}
-
-.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
- left: 0;
- position: absolute;
- text-align: center;
- width: 100%;
-}
-
-.@{fa-css-prefix}-stack-1x { line-height: inherit; }
-.@{fa-css-prefix}-stack-2x { font-size: 2em; }
-.@{fa-css-prefix}-inverse { color: @fa-inverse; }
diff --git a/public/vendor/fontawesome/less/_variables.less b/public/vendor/fontawesome/less/_variables.less
deleted file mode 100644
index f4fafb7551..0000000000
--- a/public/vendor/fontawesome/less/_variables.less
+++ /dev/null
@@ -1,1474 +0,0 @@
-// Variables
-// --------------------------
-
-@fa-font-path: "vendor/fontawesome/webfonts";
-@fa-font-size-base: 16px;
-@fa-font-display: block;
-@fa-line-height-base: 1;
-@fa-css-prefix: fa;
-@fa-version: "5.15.3";
-@fa-border-color: #eee;
-@fa-inverse: #fff;
-@fa-li-width: 2em;
-@fa-primary-opacity: 1;
-@fa-secondary-opacity: .4;
-
-@fa-var-500px: "\f26e";
-@fa-var-accessible-icon: "\f368";
-@fa-var-accusoft: "\f369";
-@fa-var-acquisitions-incorporated: "\f6af";
-@fa-var-ad: "\f641";
-@fa-var-address-book: "\f2b9";
-@fa-var-address-card: "\f2bb";
-@fa-var-adjust: "\f042";
-@fa-var-adn: "\f170";
-@fa-var-adversal: "\f36a";
-@fa-var-affiliatetheme: "\f36b";
-@fa-var-air-freshener: "\f5d0";
-@fa-var-airbnb: "\f834";
-@fa-var-algolia: "\f36c";
-@fa-var-align-center: "\f037";
-@fa-var-align-justify: "\f039";
-@fa-var-align-left: "\f036";
-@fa-var-align-right: "\f038";
-@fa-var-alipay: "\f642";
-@fa-var-allergies: "\f461";
-@fa-var-amazon: "\f270";
-@fa-var-amazon-pay: "\f42c";
-@fa-var-ambulance: "\f0f9";
-@fa-var-american-sign-language-interpreting: "\f2a3";
-@fa-var-amilia: "\f36d";
-@fa-var-anchor: "\f13d";
-@fa-var-android: "\f17b";
-@fa-var-angellist: "\f209";
-@fa-var-angle-double-down: "\f103";
-@fa-var-angle-double-left: "\f100";
-@fa-var-angle-double-right: "\f101";
-@fa-var-angle-double-up: "\f102";
-@fa-var-angle-down: "\f107";
-@fa-var-angle-left: "\f104";
-@fa-var-angle-right: "\f105";
-@fa-var-angle-up: "\f106";
-@fa-var-angry: "\f556";
-@fa-var-angrycreative: "\f36e";
-@fa-var-angular: "\f420";
-@fa-var-ankh: "\f644";
-@fa-var-app-store: "\f36f";
-@fa-var-app-store-ios: "\f370";
-@fa-var-apper: "\f371";
-@fa-var-apple: "\f179";
-@fa-var-apple-alt: "\f5d1";
-@fa-var-apple-pay: "\f415";
-@fa-var-archive: "\f187";
-@fa-var-archway: "\f557";
-@fa-var-arrow-alt-circle-down: "\f358";
-@fa-var-arrow-alt-circle-left: "\f359";
-@fa-var-arrow-alt-circle-right: "\f35a";
-@fa-var-arrow-alt-circle-up: "\f35b";
-@fa-var-arrow-circle-down: "\f0ab";
-@fa-var-arrow-circle-left: "\f0a8";
-@fa-var-arrow-circle-right: "\f0a9";
-@fa-var-arrow-circle-up: "\f0aa";
-@fa-var-arrow-down: "\f063";
-@fa-var-arrow-left: "\f060";
-@fa-var-arrow-right: "\f061";
-@fa-var-arrow-up: "\f062";
-@fa-var-arrows-alt: "\f0b2";
-@fa-var-arrows-alt-h: "\f337";
-@fa-var-arrows-alt-v: "\f338";
-@fa-var-artstation: "\f77a";
-@fa-var-assistive-listening-systems: "\f2a2";
-@fa-var-asterisk: "\f069";
-@fa-var-asymmetrik: "\f372";
-@fa-var-at: "\f1fa";
-@fa-var-atlas: "\f558";
-@fa-var-atlassian: "\f77b";
-@fa-var-atom: "\f5d2";
-@fa-var-audible: "\f373";
-@fa-var-audio-description: "\f29e";
-@fa-var-autoprefixer: "\f41c";
-@fa-var-avianex: "\f374";
-@fa-var-aviato: "\f421";
-@fa-var-award: "\f559";
-@fa-var-aws: "\f375";
-@fa-var-baby: "\f77c";
-@fa-var-baby-carriage: "\f77d";
-@fa-var-backspace: "\f55a";
-@fa-var-backward: "\f04a";
-@fa-var-bacon: "\f7e5";
-@fa-var-bacteria: "\e059";
-@fa-var-bacterium: "\e05a";
-@fa-var-bahai: "\f666";
-@fa-var-balance-scale: "\f24e";
-@fa-var-balance-scale-left: "\f515";
-@fa-var-balance-scale-right: "\f516";
-@fa-var-ban: "\f05e";
-@fa-var-band-aid: "\f462";
-@fa-var-bandcamp: "\f2d5";
-@fa-var-barcode: "\f02a";
-@fa-var-bars: "\f0c9";
-@fa-var-baseball-ball: "\f433";
-@fa-var-basketball-ball: "\f434";
-@fa-var-bath: "\f2cd";
-@fa-var-battery-empty: "\f244";
-@fa-var-battery-full: "\f240";
-@fa-var-battery-half: "\f242";
-@fa-var-battery-quarter: "\f243";
-@fa-var-battery-three-quarters: "\f241";
-@fa-var-battle-net: "\f835";
-@fa-var-bed: "\f236";
-@fa-var-beer: "\f0fc";
-@fa-var-behance: "\f1b4";
-@fa-var-behance-square: "\f1b5";
-@fa-var-bell: "\f0f3";
-@fa-var-bell-slash: "\f1f6";
-@fa-var-bezier-curve: "\f55b";
-@fa-var-bible: "\f647";
-@fa-var-bicycle: "\f206";
-@fa-var-biking: "\f84a";
-@fa-var-bimobject: "\f378";
-@fa-var-binoculars: "\f1e5";
-@fa-var-biohazard: "\f780";
-@fa-var-birthday-cake: "\f1fd";
-@fa-var-bitbucket: "\f171";
-@fa-var-bitcoin: "\f379";
-@fa-var-bity: "\f37a";
-@fa-var-black-tie: "\f27e";
-@fa-var-blackberry: "\f37b";
-@fa-var-blender: "\f517";
-@fa-var-blender-phone: "\f6b6";
-@fa-var-blind: "\f29d";
-@fa-var-blog: "\f781";
-@fa-var-blogger: "\f37c";
-@fa-var-blogger-b: "\f37d";
-@fa-var-bluetooth: "\f293";
-@fa-var-bluetooth-b: "\f294";
-@fa-var-bold: "\f032";
-@fa-var-bolt: "\f0e7";
-@fa-var-bomb: "\f1e2";
-@fa-var-bone: "\f5d7";
-@fa-var-bong: "\f55c";
-@fa-var-book: "\f02d";
-@fa-var-book-dead: "\f6b7";
-@fa-var-book-medical: "\f7e6";
-@fa-var-book-open: "\f518";
-@fa-var-book-reader: "\f5da";
-@fa-var-bookmark: "\f02e";
-@fa-var-bootstrap: "\f836";
-@fa-var-border-all: "\f84c";
-@fa-var-border-none: "\f850";
-@fa-var-border-style: "\f853";
-@fa-var-bowling-ball: "\f436";
-@fa-var-box: "\f466";
-@fa-var-box-open: "\f49e";
-@fa-var-box-tissue: "\e05b";
-@fa-var-boxes: "\f468";
-@fa-var-braille: "\f2a1";
-@fa-var-brain: "\f5dc";
-@fa-var-bread-slice: "\f7ec";
-@fa-var-briefcase: "\f0b1";
-@fa-var-briefcase-medical: "\f469";
-@fa-var-broadcast-tower: "\f519";
-@fa-var-broom: "\f51a";
-@fa-var-brush: "\f55d";
-@fa-var-btc: "\f15a";
-@fa-var-buffer: "\f837";
-@fa-var-bug: "\f188";
-@fa-var-building: "\f1ad";
-@fa-var-bullhorn: "\f0a1";
-@fa-var-bullseye: "\f140";
-@fa-var-burn: "\f46a";
-@fa-var-buromobelexperte: "\f37f";
-@fa-var-bus: "\f207";
-@fa-var-bus-alt: "\f55e";
-@fa-var-business-time: "\f64a";
-@fa-var-buy-n-large: "\f8a6";
-@fa-var-buysellads: "\f20d";
-@fa-var-calculator: "\f1ec";
-@fa-var-calendar: "\f133";
-@fa-var-calendar-alt: "\f073";
-@fa-var-calendar-check: "\f274";
-@fa-var-calendar-day: "\f783";
-@fa-var-calendar-minus: "\f272";
-@fa-var-calendar-plus: "\f271";
-@fa-var-calendar-times: "\f273";
-@fa-var-calendar-week: "\f784";
-@fa-var-camera: "\f030";
-@fa-var-camera-retro: "\f083";
-@fa-var-campground: "\f6bb";
-@fa-var-canadian-maple-leaf: "\f785";
-@fa-var-candy-cane: "\f786";
-@fa-var-cannabis: "\f55f";
-@fa-var-capsules: "\f46b";
-@fa-var-car: "\f1b9";
-@fa-var-car-alt: "\f5de";
-@fa-var-car-battery: "\f5df";
-@fa-var-car-crash: "\f5e1";
-@fa-var-car-side: "\f5e4";
-@fa-var-caravan: "\f8ff";
-@fa-var-caret-down: "\f0d7";
-@fa-var-caret-left: "\f0d9";
-@fa-var-caret-right: "\f0da";
-@fa-var-caret-square-down: "\f150";
-@fa-var-caret-square-left: "\f191";
-@fa-var-caret-square-right: "\f152";
-@fa-var-caret-square-up: "\f151";
-@fa-var-caret-up: "\f0d8";
-@fa-var-carrot: "\f787";
-@fa-var-cart-arrow-down: "\f218";
-@fa-var-cart-plus: "\f217";
-@fa-var-cash-register: "\f788";
-@fa-var-cat: "\f6be";
-@fa-var-cc-amazon-pay: "\f42d";
-@fa-var-cc-amex: "\f1f3";
-@fa-var-cc-apple-pay: "\f416";
-@fa-var-cc-diners-club: "\f24c";
-@fa-var-cc-discover: "\f1f2";
-@fa-var-cc-jcb: "\f24b";
-@fa-var-cc-mastercard: "\f1f1";
-@fa-var-cc-paypal: "\f1f4";
-@fa-var-cc-stripe: "\f1f5";
-@fa-var-cc-visa: "\f1f0";
-@fa-var-centercode: "\f380";
-@fa-var-centos: "\f789";
-@fa-var-certificate: "\f0a3";
-@fa-var-chair: "\f6c0";
-@fa-var-chalkboard: "\f51b";
-@fa-var-chalkboard-teacher: "\f51c";
-@fa-var-charging-station: "\f5e7";
-@fa-var-chart-area: "\f1fe";
-@fa-var-chart-bar: "\f080";
-@fa-var-chart-line: "\f201";
-@fa-var-chart-pie: "\f200";
-@fa-var-check: "\f00c";
-@fa-var-check-circle: "\f058";
-@fa-var-check-double: "\f560";
-@fa-var-check-square: "\f14a";
-@fa-var-cheese: "\f7ef";
-@fa-var-chess: "\f439";
-@fa-var-chess-bishop: "\f43a";
-@fa-var-chess-board: "\f43c";
-@fa-var-chess-king: "\f43f";
-@fa-var-chess-knight: "\f441";
-@fa-var-chess-pawn: "\f443";
-@fa-var-chess-queen: "\f445";
-@fa-var-chess-rook: "\f447";
-@fa-var-chevron-circle-down: "\f13a";
-@fa-var-chevron-circle-left: "\f137";
-@fa-var-chevron-circle-right: "\f138";
-@fa-var-chevron-circle-up: "\f139";
-@fa-var-chevron-down: "\f078";
-@fa-var-chevron-left: "\f053";
-@fa-var-chevron-right: "\f054";
-@fa-var-chevron-up: "\f077";
-@fa-var-child: "\f1ae";
-@fa-var-chrome: "\f268";
-@fa-var-chromecast: "\f838";
-@fa-var-church: "\f51d";
-@fa-var-circle: "\f111";
-@fa-var-circle-notch: "\f1ce";
-@fa-var-city: "\f64f";
-@fa-var-clinic-medical: "\f7f2";
-@fa-var-clipboard: "\f328";
-@fa-var-clipboard-check: "\f46c";
-@fa-var-clipboard-list: "\f46d";
-@fa-var-clock: "\f017";
-@fa-var-clone: "\f24d";
-@fa-var-closed-captioning: "\f20a";
-@fa-var-cloud: "\f0c2";
-@fa-var-cloud-download-alt: "\f381";
-@fa-var-cloud-meatball: "\f73b";
-@fa-var-cloud-moon: "\f6c3";
-@fa-var-cloud-moon-rain: "\f73c";
-@fa-var-cloud-rain: "\f73d";
-@fa-var-cloud-showers-heavy: "\f740";
-@fa-var-cloud-sun: "\f6c4";
-@fa-var-cloud-sun-rain: "\f743";
-@fa-var-cloud-upload-alt: "\f382";
-@fa-var-cloudflare: "\e07d";
-@fa-var-cloudscale: "\f383";
-@fa-var-cloudsmith: "\f384";
-@fa-var-cloudversify: "\f385";
-@fa-var-cocktail: "\f561";
-@fa-var-code: "\f121";
-@fa-var-code-branch: "\f126";
-@fa-var-codepen: "\f1cb";
-@fa-var-codiepie: "\f284";
-@fa-var-coffee: "\f0f4";
-@fa-var-cog: "\f013";
-@fa-var-cogs: "\f085";
-@fa-var-coins: "\f51e";
-@fa-var-columns: "\f0db";
-@fa-var-comment: "\f075";
-@fa-var-comment-alt: "\f27a";
-@fa-var-comment-dollar: "\f651";
-@fa-var-comment-dots: "\f4ad";
-@fa-var-comment-medical: "\f7f5";
-@fa-var-comment-slash: "\f4b3";
-@fa-var-comments: "\f086";
-@fa-var-comments-dollar: "\f653";
-@fa-var-compact-disc: "\f51f";
-@fa-var-compass: "\f14e";
-@fa-var-compress: "\f066";
-@fa-var-compress-alt: "\f422";
-@fa-var-compress-arrows-alt: "\f78c";
-@fa-var-concierge-bell: "\f562";
-@fa-var-confluence: "\f78d";
-@fa-var-connectdevelop: "\f20e";
-@fa-var-contao: "\f26d";
-@fa-var-cookie: "\f563";
-@fa-var-cookie-bite: "\f564";
-@fa-var-copy: "\f0c5";
-@fa-var-copyright: "\f1f9";
-@fa-var-cotton-bureau: "\f89e";
-@fa-var-couch: "\f4b8";
-@fa-var-cpanel: "\f388";
-@fa-var-creative-commons: "\f25e";
-@fa-var-creative-commons-by: "\f4e7";
-@fa-var-creative-commons-nc: "\f4e8";
-@fa-var-creative-commons-nc-eu: "\f4e9";
-@fa-var-creative-commons-nc-jp: "\f4ea";
-@fa-var-creative-commons-nd: "\f4eb";
-@fa-var-creative-commons-pd: "\f4ec";
-@fa-var-creative-commons-pd-alt: "\f4ed";
-@fa-var-creative-commons-remix: "\f4ee";
-@fa-var-creative-commons-sa: "\f4ef";
-@fa-var-creative-commons-sampling: "\f4f0";
-@fa-var-creative-commons-sampling-plus: "\f4f1";
-@fa-var-creative-commons-share: "\f4f2";
-@fa-var-creative-commons-zero: "\f4f3";
-@fa-var-credit-card: "\f09d";
-@fa-var-critical-role: "\f6c9";
-@fa-var-crop: "\f125";
-@fa-var-crop-alt: "\f565";
-@fa-var-cross: "\f654";
-@fa-var-crosshairs: "\f05b";
-@fa-var-crow: "\f520";
-@fa-var-crown: "\f521";
-@fa-var-crutch: "\f7f7";
-@fa-var-css3: "\f13c";
-@fa-var-css3-alt: "\f38b";
-@fa-var-cube: "\f1b2";
-@fa-var-cubes: "\f1b3";
-@fa-var-cut: "\f0c4";
-@fa-var-cuttlefish: "\f38c";
-@fa-var-d-and-d: "\f38d";
-@fa-var-d-and-d-beyond: "\f6ca";
-@fa-var-dailymotion: "\e052";
-@fa-var-dashcube: "\f210";
-@fa-var-database: "\f1c0";
-@fa-var-deaf: "\f2a4";
-@fa-var-deezer: "\e077";
-@fa-var-delicious: "\f1a5";
-@fa-var-democrat: "\f747";
-@fa-var-deploydog: "\f38e";
-@fa-var-deskpro: "\f38f";
-@fa-var-desktop: "\f108";
-@fa-var-dev: "\f6cc";
-@fa-var-deviantart: "\f1bd";
-@fa-var-dharmachakra: "\f655";
-@fa-var-dhl: "\f790";
-@fa-var-diagnoses: "\f470";
-@fa-var-diaspora: "\f791";
-@fa-var-dice: "\f522";
-@fa-var-dice-d20: "\f6cf";
-@fa-var-dice-d6: "\f6d1";
-@fa-var-dice-five: "\f523";
-@fa-var-dice-four: "\f524";
-@fa-var-dice-one: "\f525";
-@fa-var-dice-six: "\f526";
-@fa-var-dice-three: "\f527";
-@fa-var-dice-two: "\f528";
-@fa-var-digg: "\f1a6";
-@fa-var-digital-ocean: "\f391";
-@fa-var-digital-tachograph: "\f566";
-@fa-var-directions: "\f5eb";
-@fa-var-discord: "\f392";
-@fa-var-discourse: "\f393";
-@fa-var-disease: "\f7fa";
-@fa-var-divide: "\f529";
-@fa-var-dizzy: "\f567";
-@fa-var-dna: "\f471";
-@fa-var-dochub: "\f394";
-@fa-var-docker: "\f395";
-@fa-var-dog: "\f6d3";
-@fa-var-dollar-sign: "\f155";
-@fa-var-dolly: "\f472";
-@fa-var-dolly-flatbed: "\f474";
-@fa-var-donate: "\f4b9";
-@fa-var-door-closed: "\f52a";
-@fa-var-door-open: "\f52b";
-@fa-var-dot-circle: "\f192";
-@fa-var-dove: "\f4ba";
-@fa-var-download: "\f019";
-@fa-var-draft2digital: "\f396";
-@fa-var-drafting-compass: "\f568";
-@fa-var-dragon: "\f6d5";
-@fa-var-draw-polygon: "\f5ee";
-@fa-var-dribbble: "\f17d";
-@fa-var-dribbble-square: "\f397";
-@fa-var-dropbox: "\f16b";
-@fa-var-drum: "\f569";
-@fa-var-drum-steelpan: "\f56a";
-@fa-var-drumstick-bite: "\f6d7";
-@fa-var-drupal: "\f1a9";
-@fa-var-dumbbell: "\f44b";
-@fa-var-dumpster: "\f793";
-@fa-var-dumpster-fire: "\f794";
-@fa-var-dungeon: "\f6d9";
-@fa-var-dyalog: "\f399";
-@fa-var-earlybirds: "\f39a";
-@fa-var-ebay: "\f4f4";
-@fa-var-edge: "\f282";
-@fa-var-edge-legacy: "\e078";
-@fa-var-edit: "\f044";
-@fa-var-egg: "\f7fb";
-@fa-var-eject: "\f052";
-@fa-var-elementor: "\f430";
-@fa-var-ellipsis-h: "\f141";
-@fa-var-ellipsis-v: "\f142";
-@fa-var-ello: "\f5f1";
-@fa-var-ember: "\f423";
-@fa-var-empire: "\f1d1";
-@fa-var-envelope: "\f0e0";
-@fa-var-envelope-open: "\f2b6";
-@fa-var-envelope-open-text: "\f658";
-@fa-var-envelope-square: "\f199";
-@fa-var-envira: "\f299";
-@fa-var-equals: "\f52c";
-@fa-var-eraser: "\f12d";
-@fa-var-erlang: "\f39d";
-@fa-var-ethereum: "\f42e";
-@fa-var-ethernet: "\f796";
-@fa-var-etsy: "\f2d7";
-@fa-var-euro-sign: "\f153";
-@fa-var-evernote: "\f839";
-@fa-var-exchange-alt: "\f362";
-@fa-var-exclamation: "\f12a";
-@fa-var-exclamation-circle: "\f06a";
-@fa-var-exclamation-triangle: "\f071";
-@fa-var-expand: "\f065";
-@fa-var-expand-alt: "\f424";
-@fa-var-expand-arrows-alt: "\f31e";
-@fa-var-expeditedssl: "\f23e";
-@fa-var-external-link-alt: "\f35d";
-@fa-var-external-link-square-alt: "\f360";
-@fa-var-eye: "\f06e";
-@fa-var-eye-dropper: "\f1fb";
-@fa-var-eye-slash: "\f070";
-@fa-var-facebook: "\f09a";
-@fa-var-facebook-f: "\f39e";
-@fa-var-facebook-messenger: "\f39f";
-@fa-var-facebook-square: "\f082";
-@fa-var-fan: "\f863";
-@fa-var-fantasy-flight-games: "\f6dc";
-@fa-var-fast-backward: "\f049";
-@fa-var-fast-forward: "\f050";
-@fa-var-faucet: "\e005";
-@fa-var-fax: "\f1ac";
-@fa-var-feather: "\f52d";
-@fa-var-feather-alt: "\f56b";
-@fa-var-fedex: "\f797";
-@fa-var-fedora: "\f798";
-@fa-var-female: "\f182";
-@fa-var-fighter-jet: "\f0fb";
-@fa-var-figma: "\f799";
-@fa-var-file: "\f15b";
-@fa-var-file-alt: "\f15c";
-@fa-var-file-archive: "\f1c6";
-@fa-var-file-audio: "\f1c7";
-@fa-var-file-code: "\f1c9";
-@fa-var-file-contract: "\f56c";
-@fa-var-file-csv: "\f6dd";
-@fa-var-file-download: "\f56d";
-@fa-var-file-excel: "\f1c3";
-@fa-var-file-export: "\f56e";
-@fa-var-file-image: "\f1c5";
-@fa-var-file-import: "\f56f";
-@fa-var-file-invoice: "\f570";
-@fa-var-file-invoice-dollar: "\f571";
-@fa-var-file-medical: "\f477";
-@fa-var-file-medical-alt: "\f478";
-@fa-var-file-pdf: "\f1c1";
-@fa-var-file-powerpoint: "\f1c4";
-@fa-var-file-prescription: "\f572";
-@fa-var-file-signature: "\f573";
-@fa-var-file-upload: "\f574";
-@fa-var-file-video: "\f1c8";
-@fa-var-file-word: "\f1c2";
-@fa-var-fill: "\f575";
-@fa-var-fill-drip: "\f576";
-@fa-var-film: "\f008";
-@fa-var-filter: "\f0b0";
-@fa-var-fingerprint: "\f577";
-@fa-var-fire: "\f06d";
-@fa-var-fire-alt: "\f7e4";
-@fa-var-fire-extinguisher: "\f134";
-@fa-var-firefox: "\f269";
-@fa-var-firefox-browser: "\e007";
-@fa-var-first-aid: "\f479";
-@fa-var-first-order: "\f2b0";
-@fa-var-first-order-alt: "\f50a";
-@fa-var-firstdraft: "\f3a1";
-@fa-var-fish: "\f578";
-@fa-var-fist-raised: "\f6de";
-@fa-var-flag: "\f024";
-@fa-var-flag-checkered: "\f11e";
-@fa-var-flag-usa: "\f74d";
-@fa-var-flask: "\f0c3";
-@fa-var-flickr: "\f16e";
-@fa-var-flipboard: "\f44d";
-@fa-var-flushed: "\f579";
-@fa-var-fly: "\f417";
-@fa-var-folder: "\f07b";
-@fa-var-folder-minus: "\f65d";
-@fa-var-folder-open: "\f07c";
-@fa-var-folder-plus: "\f65e";
-@fa-var-font: "\f031";
-@fa-var-font-awesome: "\f2b4";
-@fa-var-font-awesome-alt: "\f35c";
-@fa-var-font-awesome-flag: "\f425";
-@fa-var-font-awesome-logo-full: "\f4e6";
-@fa-var-fonticons: "\f280";
-@fa-var-fonticons-fi: "\f3a2";
-@fa-var-football-ball: "\f44e";
-@fa-var-fort-awesome: "\f286";
-@fa-var-fort-awesome-alt: "\f3a3";
-@fa-var-forumbee: "\f211";
-@fa-var-forward: "\f04e";
-@fa-var-foursquare: "\f180";
-@fa-var-free-code-camp: "\f2c5";
-@fa-var-freebsd: "\f3a4";
-@fa-var-frog: "\f52e";
-@fa-var-frown: "\f119";
-@fa-var-frown-open: "\f57a";
-@fa-var-fulcrum: "\f50b";
-@fa-var-funnel-dollar: "\f662";
-@fa-var-futbol: "\f1e3";
-@fa-var-galactic-republic: "\f50c";
-@fa-var-galactic-senate: "\f50d";
-@fa-var-gamepad: "\f11b";
-@fa-var-gas-pump: "\f52f";
-@fa-var-gavel: "\f0e3";
-@fa-var-gem: "\f3a5";
-@fa-var-genderless: "\f22d";
-@fa-var-get-pocket: "\f265";
-@fa-var-gg: "\f260";
-@fa-var-gg-circle: "\f261";
-@fa-var-ghost: "\f6e2";
-@fa-var-gift: "\f06b";
-@fa-var-gifts: "\f79c";
-@fa-var-git: "\f1d3";
-@fa-var-git-alt: "\f841";
-@fa-var-git-square: "\f1d2";
-@fa-var-github: "\f09b";
-@fa-var-github-alt: "\f113";
-@fa-var-github-square: "\f092";
-@fa-var-gitkraken: "\f3a6";
-@fa-var-gitlab: "\f296";
-@fa-var-gitter: "\f426";
-@fa-var-glass-cheers: "\f79f";
-@fa-var-glass-martini: "\f000";
-@fa-var-glass-martini-alt: "\f57b";
-@fa-var-glass-whiskey: "\f7a0";
-@fa-var-glasses: "\f530";
-@fa-var-glide: "\f2a5";
-@fa-var-glide-g: "\f2a6";
-@fa-var-globe: "\f0ac";
-@fa-var-globe-africa: "\f57c";
-@fa-var-globe-americas: "\f57d";
-@fa-var-globe-asia: "\f57e";
-@fa-var-globe-europe: "\f7a2";
-@fa-var-gofore: "\f3a7";
-@fa-var-golf-ball: "\f450";
-@fa-var-goodreads: "\f3a8";
-@fa-var-goodreads-g: "\f3a9";
-@fa-var-google: "\f1a0";
-@fa-var-google-drive: "\f3aa";
-@fa-var-google-pay: "\e079";
-@fa-var-google-play: "\f3ab";
-@fa-var-google-plus: "\f2b3";
-@fa-var-google-plus-g: "\f0d5";
-@fa-var-google-plus-square: "\f0d4";
-@fa-var-google-wallet: "\f1ee";
-@fa-var-gopuram: "\f664";
-@fa-var-graduation-cap: "\f19d";
-@fa-var-gratipay: "\f184";
-@fa-var-grav: "\f2d6";
-@fa-var-greater-than: "\f531";
-@fa-var-greater-than-equal: "\f532";
-@fa-var-grimace: "\f57f";
-@fa-var-grin: "\f580";
-@fa-var-grin-alt: "\f581";
-@fa-var-grin-beam: "\f582";
-@fa-var-grin-beam-sweat: "\f583";
-@fa-var-grin-hearts: "\f584";
-@fa-var-grin-squint: "\f585";
-@fa-var-grin-squint-tears: "\f586";
-@fa-var-grin-stars: "\f587";
-@fa-var-grin-tears: "\f588";
-@fa-var-grin-tongue: "\f589";
-@fa-var-grin-tongue-squint: "\f58a";
-@fa-var-grin-tongue-wink: "\f58b";
-@fa-var-grin-wink: "\f58c";
-@fa-var-grip-horizontal: "\f58d";
-@fa-var-grip-lines: "\f7a4";
-@fa-var-grip-lines-vertical: "\f7a5";
-@fa-var-grip-vertical: "\f58e";
-@fa-var-gripfire: "\f3ac";
-@fa-var-grunt: "\f3ad";
-@fa-var-guilded: "\e07e";
-@fa-var-guitar: "\f7a6";
-@fa-var-gulp: "\f3ae";
-@fa-var-h-square: "\f0fd";
-@fa-var-hacker-news: "\f1d4";
-@fa-var-hacker-news-square: "\f3af";
-@fa-var-hackerrank: "\f5f7";
-@fa-var-hamburger: "\f805";
-@fa-var-hammer: "\f6e3";
-@fa-var-hamsa: "\f665";
-@fa-var-hand-holding: "\f4bd";
-@fa-var-hand-holding-heart: "\f4be";
-@fa-var-hand-holding-medical: "\e05c";
-@fa-var-hand-holding-usd: "\f4c0";
-@fa-var-hand-holding-water: "\f4c1";
-@fa-var-hand-lizard: "\f258";
-@fa-var-hand-middle-finger: "\f806";
-@fa-var-hand-paper: "\f256";
-@fa-var-hand-peace: "\f25b";
-@fa-var-hand-point-down: "\f0a7";
-@fa-var-hand-point-left: "\f0a5";
-@fa-var-hand-point-right: "\f0a4";
-@fa-var-hand-point-up: "\f0a6";
-@fa-var-hand-pointer: "\f25a";
-@fa-var-hand-rock: "\f255";
-@fa-var-hand-scissors: "\f257";
-@fa-var-hand-sparkles: "\e05d";
-@fa-var-hand-spock: "\f259";
-@fa-var-hands: "\f4c2";
-@fa-var-hands-helping: "\f4c4";
-@fa-var-hands-wash: "\e05e";
-@fa-var-handshake: "\f2b5";
-@fa-var-handshake-alt-slash: "\e05f";
-@fa-var-handshake-slash: "\e060";
-@fa-var-hanukiah: "\f6e6";
-@fa-var-hard-hat: "\f807";
-@fa-var-hashtag: "\f292";
-@fa-var-hat-cowboy: "\f8c0";
-@fa-var-hat-cowboy-side: "\f8c1";
-@fa-var-hat-wizard: "\f6e8";
-@fa-var-hdd: "\f0a0";
-@fa-var-head-side-cough: "\e061";
-@fa-var-head-side-cough-slash: "\e062";
-@fa-var-head-side-mask: "\e063";
-@fa-var-head-side-virus: "\e064";
-@fa-var-heading: "\f1dc";
-@fa-var-headphones: "\f025";
-@fa-var-headphones-alt: "\f58f";
-@fa-var-headset: "\f590";
-@fa-var-heart: "\f004";
-@fa-var-heart-broken: "\f7a9";
-@fa-var-heartbeat: "\f21e";
-@fa-var-helicopter: "\f533";
-@fa-var-highlighter: "\f591";
-@fa-var-hiking: "\f6ec";
-@fa-var-hippo: "\f6ed";
-@fa-var-hips: "\f452";
-@fa-var-hire-a-helper: "\f3b0";
-@fa-var-history: "\f1da";
-@fa-var-hive: "\e07f";
-@fa-var-hockey-puck: "\f453";
-@fa-var-holly-berry: "\f7aa";
-@fa-var-home: "\f015";
-@fa-var-hooli: "\f427";
-@fa-var-hornbill: "\f592";
-@fa-var-horse: "\f6f0";
-@fa-var-horse-head: "\f7ab";
-@fa-var-hospital: "\f0f8";
-@fa-var-hospital-alt: "\f47d";
-@fa-var-hospital-symbol: "\f47e";
-@fa-var-hospital-user: "\f80d";
-@fa-var-hot-tub: "\f593";
-@fa-var-hotdog: "\f80f";
-@fa-var-hotel: "\f594";
-@fa-var-hotjar: "\f3b1";
-@fa-var-hourglass: "\f254";
-@fa-var-hourglass-end: "\f253";
-@fa-var-hourglass-half: "\f252";
-@fa-var-hourglass-start: "\f251";
-@fa-var-house-damage: "\f6f1";
-@fa-var-house-user: "\e065";
-@fa-var-houzz: "\f27c";
-@fa-var-hryvnia: "\f6f2";
-@fa-var-html5: "\f13b";
-@fa-var-hubspot: "\f3b2";
-@fa-var-i-cursor: "\f246";
-@fa-var-ice-cream: "\f810";
-@fa-var-icicles: "\f7ad";
-@fa-var-icons: "\f86d";
-@fa-var-id-badge: "\f2c1";
-@fa-var-id-card: "\f2c2";
-@fa-var-id-card-alt: "\f47f";
-@fa-var-ideal: "\e013";
-@fa-var-igloo: "\f7ae";
-@fa-var-image: "\f03e";
-@fa-var-images: "\f302";
-@fa-var-imdb: "\f2d8";
-@fa-var-inbox: "\f01c";
-@fa-var-indent: "\f03c";
-@fa-var-industry: "\f275";
-@fa-var-infinity: "\f534";
-@fa-var-info: "\f129";
-@fa-var-info-circle: "\f05a";
-@fa-var-innosoft: "\e080";
-@fa-var-instagram: "\f16d";
-@fa-var-instagram-square: "\e055";
-@fa-var-instalod: "\e081";
-@fa-var-intercom: "\f7af";
-@fa-var-internet-explorer: "\f26b";
-@fa-var-invision: "\f7b0";
-@fa-var-ioxhost: "\f208";
-@fa-var-italic: "\f033";
-@fa-var-itch-io: "\f83a";
-@fa-var-itunes: "\f3b4";
-@fa-var-itunes-note: "\f3b5";
-@fa-var-java: "\f4e4";
-@fa-var-jedi: "\f669";
-@fa-var-jedi-order: "\f50e";
-@fa-var-jenkins: "\f3b6";
-@fa-var-jira: "\f7b1";
-@fa-var-joget: "\f3b7";
-@fa-var-joint: "\f595";
-@fa-var-joomla: "\f1aa";
-@fa-var-journal-whills: "\f66a";
-@fa-var-js: "\f3b8";
-@fa-var-js-square: "\f3b9";
-@fa-var-jsfiddle: "\f1cc";
-@fa-var-kaaba: "\f66b";
-@fa-var-kaggle: "\f5fa";
-@fa-var-key: "\f084";
-@fa-var-keybase: "\f4f5";
-@fa-var-keyboard: "\f11c";
-@fa-var-keycdn: "\f3ba";
-@fa-var-khanda: "\f66d";
-@fa-var-kickstarter: "\f3bb";
-@fa-var-kickstarter-k: "\f3bc";
-@fa-var-kiss: "\f596";
-@fa-var-kiss-beam: "\f597";
-@fa-var-kiss-wink-heart: "\f598";
-@fa-var-kiwi-bird: "\f535";
-@fa-var-korvue: "\f42f";
-@fa-var-landmark: "\f66f";
-@fa-var-language: "\f1ab";
-@fa-var-laptop: "\f109";
-@fa-var-laptop-code: "\f5fc";
-@fa-var-laptop-house: "\e066";
-@fa-var-laptop-medical: "\f812";
-@fa-var-laravel: "\f3bd";
-@fa-var-lastfm: "\f202";
-@fa-var-lastfm-square: "\f203";
-@fa-var-laugh: "\f599";
-@fa-var-laugh-beam: "\f59a";
-@fa-var-laugh-squint: "\f59b";
-@fa-var-laugh-wink: "\f59c";
-@fa-var-layer-group: "\f5fd";
-@fa-var-leaf: "\f06c";
-@fa-var-leanpub: "\f212";
-@fa-var-lemon: "\f094";
-@fa-var-less: "\f41d";
-@fa-var-less-than: "\f536";
-@fa-var-less-than-equal: "\f537";
-@fa-var-level-down-alt: "\f3be";
-@fa-var-level-up-alt: "\f3bf";
-@fa-var-life-ring: "\f1cd";
-@fa-var-lightbulb: "\f0eb";
-@fa-var-line: "\f3c0";
-@fa-var-link: "\f0c1";
-@fa-var-linkedin: "\f08c";
-@fa-var-linkedin-in: "\f0e1";
-@fa-var-linode: "\f2b8";
-@fa-var-linux: "\f17c";
-@fa-var-lira-sign: "\f195";
-@fa-var-list: "\f03a";
-@fa-var-list-alt: "\f022";
-@fa-var-list-ol: "\f0cb";
-@fa-var-list-ul: "\f0ca";
-@fa-var-location-arrow: "\f124";
-@fa-var-lock: "\f023";
-@fa-var-lock-open: "\f3c1";
-@fa-var-long-arrow-alt-down: "\f309";
-@fa-var-long-arrow-alt-left: "\f30a";
-@fa-var-long-arrow-alt-right: "\f30b";
-@fa-var-long-arrow-alt-up: "\f30c";
-@fa-var-low-vision: "\f2a8";
-@fa-var-luggage-cart: "\f59d";
-@fa-var-lungs: "\f604";
-@fa-var-lungs-virus: "\e067";
-@fa-var-lyft: "\f3c3";
-@fa-var-magento: "\f3c4";
-@fa-var-magic: "\f0d0";
-@fa-var-magnet: "\f076";
-@fa-var-mail-bulk: "\f674";
-@fa-var-mailchimp: "\f59e";
-@fa-var-male: "\f183";
-@fa-var-mandalorian: "\f50f";
-@fa-var-map: "\f279";
-@fa-var-map-marked: "\f59f";
-@fa-var-map-marked-alt: "\f5a0";
-@fa-var-map-marker: "\f041";
-@fa-var-map-marker-alt: "\f3c5";
-@fa-var-map-pin: "\f276";
-@fa-var-map-signs: "\f277";
-@fa-var-markdown: "\f60f";
-@fa-var-marker: "\f5a1";
-@fa-var-mars: "\f222";
-@fa-var-mars-double: "\f227";
-@fa-var-mars-stroke: "\f229";
-@fa-var-mars-stroke-h: "\f22b";
-@fa-var-mars-stroke-v: "\f22a";
-@fa-var-mask: "\f6fa";
-@fa-var-mastodon: "\f4f6";
-@fa-var-maxcdn: "\f136";
-@fa-var-mdb: "\f8ca";
-@fa-var-medal: "\f5a2";
-@fa-var-medapps: "\f3c6";
-@fa-var-medium: "\f23a";
-@fa-var-medium-m: "\f3c7";
-@fa-var-medkit: "\f0fa";
-@fa-var-medrt: "\f3c8";
-@fa-var-meetup: "\f2e0";
-@fa-var-megaport: "\f5a3";
-@fa-var-meh: "\f11a";
-@fa-var-meh-blank: "\f5a4";
-@fa-var-meh-rolling-eyes: "\f5a5";
-@fa-var-memory: "\f538";
-@fa-var-mendeley: "\f7b3";
-@fa-var-menorah: "\f676";
-@fa-var-mercury: "\f223";
-@fa-var-meteor: "\f753";
-@fa-var-microblog: "\e01a";
-@fa-var-microchip: "\f2db";
-@fa-var-microphone: "\f130";
-@fa-var-microphone-alt: "\f3c9";
-@fa-var-microphone-alt-slash: "\f539";
-@fa-var-microphone-slash: "\f131";
-@fa-var-microscope: "\f610";
-@fa-var-microsoft: "\f3ca";
-@fa-var-minus: "\f068";
-@fa-var-minus-circle: "\f056";
-@fa-var-minus-square: "\f146";
-@fa-var-mitten: "\f7b5";
-@fa-var-mix: "\f3cb";
-@fa-var-mixcloud: "\f289";
-@fa-var-mixer: "\e056";
-@fa-var-mizuni: "\f3cc";
-@fa-var-mobile: "\f10b";
-@fa-var-mobile-alt: "\f3cd";
-@fa-var-modx: "\f285";
-@fa-var-monero: "\f3d0";
-@fa-var-money-bill: "\f0d6";
-@fa-var-money-bill-alt: "\f3d1";
-@fa-var-money-bill-wave: "\f53a";
-@fa-var-money-bill-wave-alt: "\f53b";
-@fa-var-money-check: "\f53c";
-@fa-var-money-check-alt: "\f53d";
-@fa-var-monument: "\f5a6";
-@fa-var-moon: "\f186";
-@fa-var-mortar-pestle: "\f5a7";
-@fa-var-mosque: "\f678";
-@fa-var-motorcycle: "\f21c";
-@fa-var-mountain: "\f6fc";
-@fa-var-mouse: "\f8cc";
-@fa-var-mouse-pointer: "\f245";
-@fa-var-mug-hot: "\f7b6";
-@fa-var-music: "\f001";
-@fa-var-napster: "\f3d2";
-@fa-var-neos: "\f612";
-@fa-var-network-wired: "\f6ff";
-@fa-var-neuter: "\f22c";
-@fa-var-newspaper: "\f1ea";
-@fa-var-nimblr: "\f5a8";
-@fa-var-node: "\f419";
-@fa-var-node-js: "\f3d3";
-@fa-var-not-equal: "\f53e";
-@fa-var-notes-medical: "\f481";
-@fa-var-npm: "\f3d4";
-@fa-var-ns8: "\f3d5";
-@fa-var-nutritionix: "\f3d6";
-@fa-var-object-group: "\f247";
-@fa-var-object-ungroup: "\f248";
-@fa-var-octopus-deploy: "\e082";
-@fa-var-odnoklassniki: "\f263";
-@fa-var-odnoklassniki-square: "\f264";
-@fa-var-oil-can: "\f613";
-@fa-var-old-republic: "\f510";
-@fa-var-om: "\f679";
-@fa-var-opencart: "\f23d";
-@fa-var-openid: "\f19b";
-@fa-var-opera: "\f26a";
-@fa-var-optin-monster: "\f23c";
-@fa-var-orcid: "\f8d2";
-@fa-var-osi: "\f41a";
-@fa-var-otter: "\f700";
-@fa-var-outdent: "\f03b";
-@fa-var-page4: "\f3d7";
-@fa-var-pagelines: "\f18c";
-@fa-var-pager: "\f815";
-@fa-var-paint-brush: "\f1fc";
-@fa-var-paint-roller: "\f5aa";
-@fa-var-palette: "\f53f";
-@fa-var-palfed: "\f3d8";
-@fa-var-pallet: "\f482";
-@fa-var-paper-plane: "\f1d8";
-@fa-var-paperclip: "\f0c6";
-@fa-var-parachute-box: "\f4cd";
-@fa-var-paragraph: "\f1dd";
-@fa-var-parking: "\f540";
-@fa-var-passport: "\f5ab";
-@fa-var-pastafarianism: "\f67b";
-@fa-var-paste: "\f0ea";
-@fa-var-patreon: "\f3d9";
-@fa-var-pause: "\f04c";
-@fa-var-pause-circle: "\f28b";
-@fa-var-paw: "\f1b0";
-@fa-var-paypal: "\f1ed";
-@fa-var-peace: "\f67c";
-@fa-var-pen: "\f304";
-@fa-var-pen-alt: "\f305";
-@fa-var-pen-fancy: "\f5ac";
-@fa-var-pen-nib: "\f5ad";
-@fa-var-pen-square: "\f14b";
-@fa-var-pencil-alt: "\f303";
-@fa-var-pencil-ruler: "\f5ae";
-@fa-var-penny-arcade: "\f704";
-@fa-var-people-arrows: "\e068";
-@fa-var-people-carry: "\f4ce";
-@fa-var-pepper-hot: "\f816";
-@fa-var-perbyte: "\e083";
-@fa-var-percent: "\f295";
-@fa-var-percentage: "\f541";
-@fa-var-periscope: "\f3da";
-@fa-var-person-booth: "\f756";
-@fa-var-phabricator: "\f3db";
-@fa-var-phoenix-framework: "\f3dc";
-@fa-var-phoenix-squadron: "\f511";
-@fa-var-phone: "\f095";
-@fa-var-phone-alt: "\f879";
-@fa-var-phone-slash: "\f3dd";
-@fa-var-phone-square: "\f098";
-@fa-var-phone-square-alt: "\f87b";
-@fa-var-phone-volume: "\f2a0";
-@fa-var-photo-video: "\f87c";
-@fa-var-php: "\f457";
-@fa-var-pied-piper: "\f2ae";
-@fa-var-pied-piper-alt: "\f1a8";
-@fa-var-pied-piper-hat: "\f4e5";
-@fa-var-pied-piper-pp: "\f1a7";
-@fa-var-pied-piper-square: "\e01e";
-@fa-var-piggy-bank: "\f4d3";
-@fa-var-pills: "\f484";
-@fa-var-pinterest: "\f0d2";
-@fa-var-pinterest-p: "\f231";
-@fa-var-pinterest-square: "\f0d3";
-@fa-var-pizza-slice: "\f818";
-@fa-var-place-of-worship: "\f67f";
-@fa-var-plane: "\f072";
-@fa-var-plane-arrival: "\f5af";
-@fa-var-plane-departure: "\f5b0";
-@fa-var-plane-slash: "\e069";
-@fa-var-play: "\f04b";
-@fa-var-play-circle: "\f144";
-@fa-var-playstation: "\f3df";
-@fa-var-plug: "\f1e6";
-@fa-var-plus: "\f067";
-@fa-var-plus-circle: "\f055";
-@fa-var-plus-square: "\f0fe";
-@fa-var-podcast: "\f2ce";
-@fa-var-poll: "\f681";
-@fa-var-poll-h: "\f682";
-@fa-var-poo: "\f2fe";
-@fa-var-poo-storm: "\f75a";
-@fa-var-poop: "\f619";
-@fa-var-portrait: "\f3e0";
-@fa-var-pound-sign: "\f154";
-@fa-var-power-off: "\f011";
-@fa-var-pray: "\f683";
-@fa-var-praying-hands: "\f684";
-@fa-var-prescription: "\f5b1";
-@fa-var-prescription-bottle: "\f485";
-@fa-var-prescription-bottle-alt: "\f486";
-@fa-var-print: "\f02f";
-@fa-var-procedures: "\f487";
-@fa-var-product-hunt: "\f288";
-@fa-var-project-diagram: "\f542";
-@fa-var-pump-medical: "\e06a";
-@fa-var-pump-soap: "\e06b";
-@fa-var-pushed: "\f3e1";
-@fa-var-puzzle-piece: "\f12e";
-@fa-var-python: "\f3e2";
-@fa-var-qq: "\f1d6";
-@fa-var-qrcode: "\f029";
-@fa-var-question: "\f128";
-@fa-var-question-circle: "\f059";
-@fa-var-quidditch: "\f458";
-@fa-var-quinscape: "\f459";
-@fa-var-quora: "\f2c4";
-@fa-var-quote-left: "\f10d";
-@fa-var-quote-right: "\f10e";
-@fa-var-quran: "\f687";
-@fa-var-r-project: "\f4f7";
-@fa-var-radiation: "\f7b9";
-@fa-var-radiation-alt: "\f7ba";
-@fa-var-rainbow: "\f75b";
-@fa-var-random: "\f074";
-@fa-var-raspberry-pi: "\f7bb";
-@fa-var-ravelry: "\f2d9";
-@fa-var-react: "\f41b";
-@fa-var-reacteurope: "\f75d";
-@fa-var-readme: "\f4d5";
-@fa-var-rebel: "\f1d0";
-@fa-var-receipt: "\f543";
-@fa-var-record-vinyl: "\f8d9";
-@fa-var-recycle: "\f1b8";
-@fa-var-red-river: "\f3e3";
-@fa-var-reddit: "\f1a1";
-@fa-var-reddit-alien: "\f281";
-@fa-var-reddit-square: "\f1a2";
-@fa-var-redhat: "\f7bc";
-@fa-var-redo: "\f01e";
-@fa-var-redo-alt: "\f2f9";
-@fa-var-registered: "\f25d";
-@fa-var-remove-format: "\f87d";
-@fa-var-renren: "\f18b";
-@fa-var-reply: "\f3e5";
-@fa-var-reply-all: "\f122";
-@fa-var-replyd: "\f3e6";
-@fa-var-republican: "\f75e";
-@fa-var-researchgate: "\f4f8";
-@fa-var-resolving: "\f3e7";
-@fa-var-restroom: "\f7bd";
-@fa-var-retweet: "\f079";
-@fa-var-rev: "\f5b2";
-@fa-var-ribbon: "\f4d6";
-@fa-var-ring: "\f70b";
-@fa-var-road: "\f018";
-@fa-var-robot: "\f544";
-@fa-var-rocket: "\f135";
-@fa-var-rocketchat: "\f3e8";
-@fa-var-rockrms: "\f3e9";
-@fa-var-route: "\f4d7";
-@fa-var-rss: "\f09e";
-@fa-var-rss-square: "\f143";
-@fa-var-ruble-sign: "\f158";
-@fa-var-ruler: "\f545";
-@fa-var-ruler-combined: "\f546";
-@fa-var-ruler-horizontal: "\f547";
-@fa-var-ruler-vertical: "\f548";
-@fa-var-running: "\f70c";
-@fa-var-rupee-sign: "\f156";
-@fa-var-rust: "\e07a";
-@fa-var-sad-cry: "\f5b3";
-@fa-var-sad-tear: "\f5b4";
-@fa-var-safari: "\f267";
-@fa-var-salesforce: "\f83b";
-@fa-var-sass: "\f41e";
-@fa-var-satellite: "\f7bf";
-@fa-var-satellite-dish: "\f7c0";
-@fa-var-save: "\f0c7";
-@fa-var-schlix: "\f3ea";
-@fa-var-school: "\f549";
-@fa-var-screwdriver: "\f54a";
-@fa-var-scribd: "\f28a";
-@fa-var-scroll: "\f70e";
-@fa-var-sd-card: "\f7c2";
-@fa-var-search: "\f002";
-@fa-var-search-dollar: "\f688";
-@fa-var-search-location: "\f689";
-@fa-var-search-minus: "\f010";
-@fa-var-search-plus: "\f00e";
-@fa-var-searchengin: "\f3eb";
-@fa-var-seedling: "\f4d8";
-@fa-var-sellcast: "\f2da";
-@fa-var-sellsy: "\f213";
-@fa-var-server: "\f233";
-@fa-var-servicestack: "\f3ec";
-@fa-var-shapes: "\f61f";
-@fa-var-share: "\f064";
-@fa-var-share-alt: "\f1e0";
-@fa-var-share-alt-square: "\f1e1";
-@fa-var-share-square: "\f14d";
-@fa-var-shekel-sign: "\f20b";
-@fa-var-shield-alt: "\f3ed";
-@fa-var-shield-virus: "\e06c";
-@fa-var-ship: "\f21a";
-@fa-var-shipping-fast: "\f48b";
-@fa-var-shirtsinbulk: "\f214";
-@fa-var-shoe-prints: "\f54b";
-@fa-var-shopify: "\e057";
-@fa-var-shopping-bag: "\f290";
-@fa-var-shopping-basket: "\f291";
-@fa-var-shopping-cart: "\f07a";
-@fa-var-shopware: "\f5b5";
-@fa-var-shower: "\f2cc";
-@fa-var-shuttle-van: "\f5b6";
-@fa-var-sign: "\f4d9";
-@fa-var-sign-in-alt: "\f2f6";
-@fa-var-sign-language: "\f2a7";
-@fa-var-sign-out-alt: "\f2f5";
-@fa-var-signal: "\f012";
-@fa-var-signature: "\f5b7";
-@fa-var-sim-card: "\f7c4";
-@fa-var-simplybuilt: "\f215";
-@fa-var-sink: "\e06d";
-@fa-var-sistrix: "\f3ee";
-@fa-var-sitemap: "\f0e8";
-@fa-var-sith: "\f512";
-@fa-var-skating: "\f7c5";
-@fa-var-sketch: "\f7c6";
-@fa-var-skiing: "\f7c9";
-@fa-var-skiing-nordic: "\f7ca";
-@fa-var-skull: "\f54c";
-@fa-var-skull-crossbones: "\f714";
-@fa-var-skyatlas: "\f216";
-@fa-var-skype: "\f17e";
-@fa-var-slack: "\f198";
-@fa-var-slack-hash: "\f3ef";
-@fa-var-slash: "\f715";
-@fa-var-sleigh: "\f7cc";
-@fa-var-sliders-h: "\f1de";
-@fa-var-slideshare: "\f1e7";
-@fa-var-smile: "\f118";
-@fa-var-smile-beam: "\f5b8";
-@fa-var-smile-wink: "\f4da";
-@fa-var-smog: "\f75f";
-@fa-var-smoking: "\f48d";
-@fa-var-smoking-ban: "\f54d";
-@fa-var-sms: "\f7cd";
-@fa-var-snapchat: "\f2ab";
-@fa-var-snapchat-ghost: "\f2ac";
-@fa-var-snapchat-square: "\f2ad";
-@fa-var-snowboarding: "\f7ce";
-@fa-var-snowflake: "\f2dc";
-@fa-var-snowman: "\f7d0";
-@fa-var-snowplow: "\f7d2";
-@fa-var-soap: "\e06e";
-@fa-var-socks: "\f696";
-@fa-var-solar-panel: "\f5ba";
-@fa-var-sort: "\f0dc";
-@fa-var-sort-alpha-down: "\f15d";
-@fa-var-sort-alpha-down-alt: "\f881";
-@fa-var-sort-alpha-up: "\f15e";
-@fa-var-sort-alpha-up-alt: "\f882";
-@fa-var-sort-amount-down: "\f160";
-@fa-var-sort-amount-down-alt: "\f884";
-@fa-var-sort-amount-up: "\f161";
-@fa-var-sort-amount-up-alt: "\f885";
-@fa-var-sort-down: "\f0dd";
-@fa-var-sort-numeric-down: "\f162";
-@fa-var-sort-numeric-down-alt: "\f886";
-@fa-var-sort-numeric-up: "\f163";
-@fa-var-sort-numeric-up-alt: "\f887";
-@fa-var-sort-up: "\f0de";
-@fa-var-soundcloud: "\f1be";
-@fa-var-sourcetree: "\f7d3";
-@fa-var-spa: "\f5bb";
-@fa-var-space-shuttle: "\f197";
-@fa-var-speakap: "\f3f3";
-@fa-var-speaker-deck: "\f83c";
-@fa-var-spell-check: "\f891";
-@fa-var-spider: "\f717";
-@fa-var-spinner: "\f110";
-@fa-var-splotch: "\f5bc";
-@fa-var-spotify: "\f1bc";
-@fa-var-spray-can: "\f5bd";
-@fa-var-square: "\f0c8";
-@fa-var-square-full: "\f45c";
-@fa-var-square-root-alt: "\f698";
-@fa-var-squarespace: "\f5be";
-@fa-var-stack-exchange: "\f18d";
-@fa-var-stack-overflow: "\f16c";
-@fa-var-stackpath: "\f842";
-@fa-var-stamp: "\f5bf";
-@fa-var-star: "\f005";
-@fa-var-star-and-crescent: "\f699";
-@fa-var-star-half: "\f089";
-@fa-var-star-half-alt: "\f5c0";
-@fa-var-star-of-david: "\f69a";
-@fa-var-star-of-life: "\f621";
-@fa-var-staylinked: "\f3f5";
-@fa-var-steam: "\f1b6";
-@fa-var-steam-square: "\f1b7";
-@fa-var-steam-symbol: "\f3f6";
-@fa-var-step-backward: "\f048";
-@fa-var-step-forward: "\f051";
-@fa-var-stethoscope: "\f0f1";
-@fa-var-sticker-mule: "\f3f7";
-@fa-var-sticky-note: "\f249";
-@fa-var-stop: "\f04d";
-@fa-var-stop-circle: "\f28d";
-@fa-var-stopwatch: "\f2f2";
-@fa-var-stopwatch-20: "\e06f";
-@fa-var-store: "\f54e";
-@fa-var-store-alt: "\f54f";
-@fa-var-store-alt-slash: "\e070";
-@fa-var-store-slash: "\e071";
-@fa-var-strava: "\f428";
-@fa-var-stream: "\f550";
-@fa-var-street-view: "\f21d";
-@fa-var-strikethrough: "\f0cc";
-@fa-var-stripe: "\f429";
-@fa-var-stripe-s: "\f42a";
-@fa-var-stroopwafel: "\f551";
-@fa-var-studiovinari: "\f3f8";
-@fa-var-stumbleupon: "\f1a4";
-@fa-var-stumbleupon-circle: "\f1a3";
-@fa-var-subscript: "\f12c";
-@fa-var-subway: "\f239";
-@fa-var-suitcase: "\f0f2";
-@fa-var-suitcase-rolling: "\f5c1";
-@fa-var-sun: "\f185";
-@fa-var-superpowers: "\f2dd";
-@fa-var-superscript: "\f12b";
-@fa-var-supple: "\f3f9";
-@fa-var-surprise: "\f5c2";
-@fa-var-suse: "\f7d6";
-@fa-var-swatchbook: "\f5c3";
-@fa-var-swift: "\f8e1";
-@fa-var-swimmer: "\f5c4";
-@fa-var-swimming-pool: "\f5c5";
-@fa-var-symfony: "\f83d";
-@fa-var-synagogue: "\f69b";
-@fa-var-sync: "\f021";
-@fa-var-sync-alt: "\f2f1";
-@fa-var-syringe: "\f48e";
-@fa-var-table: "\f0ce";
-@fa-var-table-tennis: "\f45d";
-@fa-var-tablet: "\f10a";
-@fa-var-tablet-alt: "\f3fa";
-@fa-var-tablets: "\f490";
-@fa-var-tachometer-alt: "\f3fd";
-@fa-var-tag: "\f02b";
-@fa-var-tags: "\f02c";
-@fa-var-tape: "\f4db";
-@fa-var-tasks: "\f0ae";
-@fa-var-taxi: "\f1ba";
-@fa-var-teamspeak: "\f4f9";
-@fa-var-teeth: "\f62e";
-@fa-var-teeth-open: "\f62f";
-@fa-var-telegram: "\f2c6";
-@fa-var-telegram-plane: "\f3fe";
-@fa-var-temperature-high: "\f769";
-@fa-var-temperature-low: "\f76b";
-@fa-var-tencent-weibo: "\f1d5";
-@fa-var-tenge: "\f7d7";
-@fa-var-terminal: "\f120";
-@fa-var-text-height: "\f034";
-@fa-var-text-width: "\f035";
-@fa-var-th: "\f00a";
-@fa-var-th-large: "\f009";
-@fa-var-th-list: "\f00b";
-@fa-var-the-red-yeti: "\f69d";
-@fa-var-theater-masks: "\f630";
-@fa-var-themeco: "\f5c6";
-@fa-var-themeisle: "\f2b2";
-@fa-var-thermometer: "\f491";
-@fa-var-thermometer-empty: "\f2cb";
-@fa-var-thermometer-full: "\f2c7";
-@fa-var-thermometer-half: "\f2c9";
-@fa-var-thermometer-quarter: "\f2ca";
-@fa-var-thermometer-three-quarters: "\f2c8";
-@fa-var-think-peaks: "\f731";
-@fa-var-thumbs-down: "\f165";
-@fa-var-thumbs-up: "\f164";
-@fa-var-thumbtack: "\f08d";
-@fa-var-ticket-alt: "\f3ff";
-@fa-var-tiktok: "\e07b";
-@fa-var-times: "\f00d";
-@fa-var-times-circle: "\f057";
-@fa-var-tint: "\f043";
-@fa-var-tint-slash: "\f5c7";
-@fa-var-tired: "\f5c8";
-@fa-var-toggle-off: "\f204";
-@fa-var-toggle-on: "\f205";
-@fa-var-toilet: "\f7d8";
-@fa-var-toilet-paper: "\f71e";
-@fa-var-toilet-paper-slash: "\e072";
-@fa-var-toolbox: "\f552";
-@fa-var-tools: "\f7d9";
-@fa-var-tooth: "\f5c9";
-@fa-var-torah: "\f6a0";
-@fa-var-torii-gate: "\f6a1";
-@fa-var-tractor: "\f722";
-@fa-var-trade-federation: "\f513";
-@fa-var-trademark: "\f25c";
-@fa-var-traffic-light: "\f637";
-@fa-var-trailer: "\e041";
-@fa-var-train: "\f238";
-@fa-var-tram: "\f7da";
-@fa-var-transgender: "\f224";
-@fa-var-transgender-alt: "\f225";
-@fa-var-trash: "\f1f8";
-@fa-var-trash-alt: "\f2ed";
-@fa-var-trash-restore: "\f829";
-@fa-var-trash-restore-alt: "\f82a";
-@fa-var-tree: "\f1bb";
-@fa-var-trello: "\f181";
-@fa-var-tripadvisor: "\f262";
-@fa-var-trophy: "\f091";
-@fa-var-truck: "\f0d1";
-@fa-var-truck-loading: "\f4de";
-@fa-var-truck-monster: "\f63b";
-@fa-var-truck-moving: "\f4df";
-@fa-var-truck-pickup: "\f63c";
-@fa-var-tshirt: "\f553";
-@fa-var-tty: "\f1e4";
-@fa-var-tumblr: "\f173";
-@fa-var-tumblr-square: "\f174";
-@fa-var-tv: "\f26c";
-@fa-var-twitch: "\f1e8";
-@fa-var-twitter: "\f099";
-@fa-var-twitter-square: "\f081";
-@fa-var-typo3: "\f42b";
-@fa-var-uber: "\f402";
-@fa-var-ubuntu: "\f7df";
-@fa-var-uikit: "\f403";
-@fa-var-umbraco: "\f8e8";
-@fa-var-umbrella: "\f0e9";
-@fa-var-umbrella-beach: "\f5ca";
-@fa-var-uncharted: "\e084";
-@fa-var-underline: "\f0cd";
-@fa-var-undo: "\f0e2";
-@fa-var-undo-alt: "\f2ea";
-@fa-var-uniregistry: "\f404";
-@fa-var-unity: "\e049";
-@fa-var-universal-access: "\f29a";
-@fa-var-university: "\f19c";
-@fa-var-unlink: "\f127";
-@fa-var-unlock: "\f09c";
-@fa-var-unlock-alt: "\f13e";
-@fa-var-unsplash: "\e07c";
-@fa-var-untappd: "\f405";
-@fa-var-upload: "\f093";
-@fa-var-ups: "\f7e0";
-@fa-var-usb: "\f287";
-@fa-var-user: "\f007";
-@fa-var-user-alt: "\f406";
-@fa-var-user-alt-slash: "\f4fa";
-@fa-var-user-astronaut: "\f4fb";
-@fa-var-user-check: "\f4fc";
-@fa-var-user-circle: "\f2bd";
-@fa-var-user-clock: "\f4fd";
-@fa-var-user-cog: "\f4fe";
-@fa-var-user-edit: "\f4ff";
-@fa-var-user-friends: "\f500";
-@fa-var-user-graduate: "\f501";
-@fa-var-user-injured: "\f728";
-@fa-var-user-lock: "\f502";
-@fa-var-user-md: "\f0f0";
-@fa-var-user-minus: "\f503";
-@fa-var-user-ninja: "\f504";
-@fa-var-user-nurse: "\f82f";
-@fa-var-user-plus: "\f234";
-@fa-var-user-secret: "\f21b";
-@fa-var-user-shield: "\f505";
-@fa-var-user-slash: "\f506";
-@fa-var-user-tag: "\f507";
-@fa-var-user-tie: "\f508";
-@fa-var-user-times: "\f235";
-@fa-var-users: "\f0c0";
-@fa-var-users-cog: "\f509";
-@fa-var-users-slash: "\e073";
-@fa-var-usps: "\f7e1";
-@fa-var-ussunnah: "\f407";
-@fa-var-utensil-spoon: "\f2e5";
-@fa-var-utensils: "\f2e7";
-@fa-var-vaadin: "\f408";
-@fa-var-vector-square: "\f5cb";
-@fa-var-venus: "\f221";
-@fa-var-venus-double: "\f226";
-@fa-var-venus-mars: "\f228";
-@fa-var-vest: "\e085";
-@fa-var-vest-patches: "\e086";
-@fa-var-viacoin: "\f237";
-@fa-var-viadeo: "\f2a9";
-@fa-var-viadeo-square: "\f2aa";
-@fa-var-vial: "\f492";
-@fa-var-vials: "\f493";
-@fa-var-viber: "\f409";
-@fa-var-video: "\f03d";
-@fa-var-video-slash: "\f4e2";
-@fa-var-vihara: "\f6a7";
-@fa-var-vimeo: "\f40a";
-@fa-var-vimeo-square: "\f194";
-@fa-var-vimeo-v: "\f27d";
-@fa-var-vine: "\f1ca";
-@fa-var-virus: "\e074";
-@fa-var-virus-slash: "\e075";
-@fa-var-viruses: "\e076";
-@fa-var-vk: "\f189";
-@fa-var-vnv: "\f40b";
-@fa-var-voicemail: "\f897";
-@fa-var-volleyball-ball: "\f45f";
-@fa-var-volume-down: "\f027";
-@fa-var-volume-mute: "\f6a9";
-@fa-var-volume-off: "\f026";
-@fa-var-volume-up: "\f028";
-@fa-var-vote-yea: "\f772";
-@fa-var-vr-cardboard: "\f729";
-@fa-var-vuejs: "\f41f";
-@fa-var-walking: "\f554";
-@fa-var-wallet: "\f555";
-@fa-var-warehouse: "\f494";
-@fa-var-watchman-monitoring: "\e087";
-@fa-var-water: "\f773";
-@fa-var-wave-square: "\f83e";
-@fa-var-waze: "\f83f";
-@fa-var-weebly: "\f5cc";
-@fa-var-weibo: "\f18a";
-@fa-var-weight: "\f496";
-@fa-var-weight-hanging: "\f5cd";
-@fa-var-weixin: "\f1d7";
-@fa-var-whatsapp: "\f232";
-@fa-var-whatsapp-square: "\f40c";
-@fa-var-wheelchair: "\f193";
-@fa-var-whmcs: "\f40d";
-@fa-var-wifi: "\f1eb";
-@fa-var-wikipedia-w: "\f266";
-@fa-var-wind: "\f72e";
-@fa-var-window-close: "\f410";
-@fa-var-window-maximize: "\f2d0";
-@fa-var-window-minimize: "\f2d1";
-@fa-var-window-restore: "\f2d2";
-@fa-var-windows: "\f17a";
-@fa-var-wine-bottle: "\f72f";
-@fa-var-wine-glass: "\f4e3";
-@fa-var-wine-glass-alt: "\f5ce";
-@fa-var-wix: "\f5cf";
-@fa-var-wizards-of-the-coast: "\f730";
-@fa-var-wodu: "\e088";
-@fa-var-wolf-pack-battalion: "\f514";
-@fa-var-won-sign: "\f159";
-@fa-var-wordpress: "\f19a";
-@fa-var-wordpress-simple: "\f411";
-@fa-var-wpbeginner: "\f297";
-@fa-var-wpexplorer: "\f2de";
-@fa-var-wpforms: "\f298";
-@fa-var-wpressr: "\f3e4";
-@fa-var-wrench: "\f0ad";
-@fa-var-x-ray: "\f497";
-@fa-var-xbox: "\f412";
-@fa-var-xing: "\f168";
-@fa-var-xing-square: "\f169";
-@fa-var-y-combinator: "\f23b";
-@fa-var-yahoo: "\f19e";
-@fa-var-yammer: "\f840";
-@fa-var-yandex: "\f413";
-@fa-var-yandex-international: "\f414";
-@fa-var-yarn: "\f7e3";
-@fa-var-yelp: "\f1e9";
-@fa-var-yen-sign: "\f157";
-@fa-var-yin-yang: "\f6ad";
-@fa-var-yoast: "\f2b1";
-@fa-var-youtube: "\f167";
-@fa-var-youtube-square: "\f431";
-@fa-var-zhihu: "\f63f";
diff --git a/public/vendor/fontawesome/less/brands.less b/public/vendor/fontawesome/less/brands.less
deleted file mode 100644
index 030b7ae909..0000000000
--- a/public/vendor/fontawesome/less/brands.less
+++ /dev/null
@@ -1,23 +0,0 @@
-/*!
- * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- */
-@import "_variables.less";
-
-@font-face {
- font-family: 'Font Awesome 5 Brands';
- font-style: normal;
- font-weight: 400;
- font-display: @fa-font-display;
- src: url('@{fa-font-path}/fa-brands-400.eot');
- src: url('@{fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'),
- url('@{fa-font-path}/fa-brands-400.woff2') format('woff2'),
- url('@{fa-font-path}/fa-brands-400.woff') format('woff'),
- url('@{fa-font-path}/fa-brands-400.ttf') format('truetype'),
- url('@{fa-font-path}/fa-brands-400.svg#fontawesome') format('svg');
-}
-
-.fab {
- font-family: 'Font Awesome 5 Brands';
- font-weight: 400;
-}
diff --git a/public/vendor/fontawesome/less/fontawesome.less b/public/vendor/fontawesome/less/fontawesome.less
deleted file mode 100644
index 826afc5e5e..0000000000
--- a/public/vendor/fontawesome/less/fontawesome.less
+++ /dev/null
@@ -1,16 +0,0 @@
-/*!
- * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- */
-@import "_variables.less";
-@import "_mixins.less";
-@import "_core.less";
-@import "_larger.less";
-@import "_fixed-width.less";
-@import "_list.less";
-@import "_bordered-pulled.less";
-@import "_animated.less";
-@import "_rotated-flipped.less";
-@import "_stacked.less";
-@import "_icons.less";
-@import "_screen-reader.less";
diff --git a/public/vendor/fontawesome/less/nodebb-shims.less b/public/vendor/fontawesome/less/nodebb-shims.less
deleted file mode 100644
index a2621fb4ef..0000000000
--- a/public/vendor/fontawesome/less/nodebb-shims.less
+++ /dev/null
@@ -1,321 +0,0 @@
-@import "_variables.less";
-
-
-@font-face {
- font-family: 'FontAwesome';
- font-style: normal;
- font-weight: 400;
- font-display: @fa-font-display;
- src: url('@{fa-font-path}/fa-solid-900.eot');
- src: url('@{fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'),
- url('@{fa-font-path}/fa-solid-900.woff2') format('woff2'),
- url('@{fa-font-path}/fa-solid-900.woff') format('woff'),
- url('@{fa-font-path}/fa-solid-900.ttf') format('truetype'),
- url('@{fa-font-path}/fa-solid-900.svg#fontawesome') format('svg');
-}
-@font-face {
- font-family: 'FontAwesome';
- font-style: normal;
- font-weight: 400;
- font-display: @fa-font-display;
- src: url('@{fa-font-path}/fa-brands-400.eot');
- src: url('@{fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'),
- url('@{fa-font-path}/fa-brands-400.woff2') format('woff2'),
- url('@{fa-font-path}/fa-brands-400.woff') format('woff'),
- url('@{fa-font-path}/fa-brands-400.ttf') format('truetype'),
- url('@{fa-font-path}/fa-brands-400.svg#fontawesome') format('svg');
-}
-@font-face {
- font-family: 'FontAwesome';
- font-style: normal;
- font-weight: 400;
- font-display: @fa-font-display;
- src: url('@{fa-font-path}/fa-regular-400.eot');
- src: url('@{fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'),
- url('@{fa-font-path}/fa-regular-400.woff2') format('woff2'),
- url('@{fa-font-path}/fa-regular-400.woff') format('woff'),
- url('@{fa-font-path}/fa-regular-400.ttf') format('truetype'),
- url('@{fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');
-}
-
-
-@fa-var-address-book-o: @fa-var-address-book;
-@fa-var-address-card-o: @fa-var-address-card;
-@fa-var-area-chart: @fa-var-chart-area;
-@fa-var-arrow-circle-o-down: @fa-var-arrow-alt-circle-down;
-@fa-var-arrow-circle-o-left: @fa-var-arrow-alt-circle-left;
-@fa-var-arrow-circle-o-right: @fa-var-arrow-alt-circle-right;
-@fa-var-arrow-circle-o-up: @fa-var-arrow-alt-circle-up;
-@fa-var-arrows: @fa-var-arrows-alt;
-@fa-var-arrows-alt: @fa-var-expand-arrows-alt;
-@fa-var-arrows-h: @fa-var-arrows-alt-h;
-@fa-var-arrows-v: @fa-var-arrows-alt-v;
-@fa-var-asl-interpreting: @fa-var-american-sign-language-interpreting;
-@fa-var-automobile: @fa-var-car;
-@fa-var-bank: @fa-var-university;
-@fa-var-bar-chart: @fa-var-chart-bar;
-@fa-var-bar-chart-o: @fa-var-chart-bar;
-@fa-var-bathtub: @fa-var-bath;
-@fa-var-battery: @fa-var-battery-full;
-@fa-var-battery-0: @fa-var-battery-empty;
-@fa-var-battery-1: @fa-var-battery-quarter;
-@fa-var-battery-2: @fa-var-battery-half;
-@fa-var-battery-3: @fa-var-battery-three-quarters;
-@fa-var-battery-4: @fa-var-battery-full;
-@fa-var-bell-o: @fa-var-bell;
-@fa-var-bell-slash-o: @fa-var-bell-slash;
-@fa-var-bitbucket-square: @fa-var-bitbucket;
-@fa-var-bitcoin: @fa-var-btc;
-@fa-var-bookmark-o: @fa-var-bookmark;
-@fa-var-building-o: @fa-var-building;
-@fa-var-cab: @fa-var-taxi;
-@fa-var-calendar: @fa-var-calendar-alt;
-@fa-var-calendar-check-o: @fa-var-calendar-check;
-@fa-var-calendar-minus-o: @fa-var-calendar-minus;
-@fa-var-calendar-o: @fa-var-calendar;
-@fa-var-calendar-plus-o: @fa-var-calendar-plus;
-@fa-var-calendar-times-o: @fa-var-calendar-times;
-@fa-var-caret-square-o-down: @fa-var-caret-square-down;
-@fa-var-caret-square-o-left: @fa-var-caret-square-left;
-@fa-var-caret-square-o-right: @fa-var-caret-square-right;
-@fa-var-caret-square-o-up: @fa-var-caret-square-up;
-@fa-var-cc: @fa-var-closed-captioning;
-@fa-var-chain: @fa-var-link;
-@fa-var-chain-broken: @fa-var-unlink;
-@fa-var-check-circle-o: @fa-var-check-circle;
-@fa-var-check-square-o: @fa-var-check-square;
-@fa-var-circle-o: @fa-var-circle;
-@fa-var-circle-o-notch: @fa-var-circle-notch;
-@fa-var-circle-thin: @fa-var-circle;
-@fa-var-clock-o: @fa-var-clock;
-@fa-var-close: @fa-var-times;
-@fa-var-cloud-download: @fa-var-cloud-download-alt;
-@fa-var-cloud-upload: @fa-var-cloud-upload-alt;
-@fa-var-cny: @fa-var-yen-sign;
-@fa-var-code-fork: @fa-var-code-branch;
-@fa-var-comment-o: @fa-var-comment;
-@fa-var-commenting: @fa-var-comment-dots;
-@fa-var-commenting-o: @fa-var-comment-dots;
-@fa-var-comments-o: @fa-var-comments;
-@fa-var-credit-card-alt: @fa-var-credit-card;
-@fa-var-cutlery: @fa-var-utensils;
-@fa-var-dashboard: @fa-var-tachometer-alt;
-@fa-var-deafness: @fa-var-deaf;
-@fa-var-dedent: @fa-var-outdent;
-@fa-var-diamond: @fa-var-gem;
-@fa-var-dollar: @fa-var-dollar-sign;
-@fa-var-dot-circle-o: @fa-var-dot-circle;
-@fa-var-drivers-license: @fa-var-id-card;
-@fa-var-drivers-license-o: @fa-var-id-card;
-@fa-var-eercast: @fa-var-sellcast;
-@fa-var-envelope-o: @fa-var-envelope;
-@fa-var-envelope-open-o: @fa-var-envelope-open;
-@fa-var-eur: @fa-var-euro-sign;
-@fa-var-euro: @fa-var-euro-sign;
-@fa-var-exchange: @fa-var-exchange-alt;
-@fa-var-external-link: @fa-var-external-link-alt;
-@fa-var-external-link-square: @fa-var-external-link-square-alt;
-@fa-var-eyedropper: @fa-var-eye-dropper;
-@fa-var-fa: @fa-var-font-awesome;
-@fa-var-facebook: @fa-var-facebook-f;
-@fa-var-facebook-official: @fa-var-facebook;
-@fa-var-feed: @fa-var-rss;
-@fa-var-file-archive-o: @fa-var-file-archive;
-@fa-var-file-audio-o: @fa-var-file-audio;
-@fa-var-file-code-o: @fa-var-file-code;
-@fa-var-file-excel-o: @fa-var-file-excel;
-@fa-var-file-image-o: @fa-var-file-image;
-@fa-var-file-movie-o: @fa-var-file-video;
-@fa-var-file-o: @fa-var-file;
-@fa-var-file-pdf-o: @fa-var-file-pdf;
-@fa-var-file-photo-o: @fa-var-file-image;
-@fa-var-file-picture-o: @fa-var-file-image;
-@fa-var-file-powerpoint-o: @fa-var-file-powerpoint;
-@fa-var-file-sound-o: @fa-var-file-audio;
-@fa-var-file-text: @fa-var-file-alt;
-@fa-var-file-text-o: @fa-var-file-alt;
-@fa-var-file-video-o: @fa-var-file-video;
-@fa-var-file-word-o: @fa-var-file-word;
-@fa-var-file-zip-o: @fa-var-file-archive;
-@fa-var-files-o: @fa-var-copy;
-@fa-var-flag-o: @fa-var-flag;
-@fa-var-flash: @fa-var-bolt;
-@fa-var-floppy-o: @fa-var-save;
-@fa-var-folder-o: @fa-var-folder;
-@fa-var-folder-open-o: @fa-var-folder-open;
-@fa-var-frown-o: @fa-var-frown;
-@fa-var-futbol-o: @fa-var-futbol;
-@fa-var-gbp: @fa-var-pound-sign;
-@fa-var-ge: @fa-var-empire;
-@fa-var-gear: @fa-var-cog;
-@fa-var-gears: @fa-var-cogs;
-@fa-var-gittip: @fa-var-gratipay;
-@fa-var-glass: @fa-var-glass-martini;
-@fa-var-google-plus: @fa-var-google-plus-g;
-@fa-var-google-plus-circle: @fa-var-google-plus;
-@fa-var-google-plus-official: @fa-var-google-plus;
-@fa-var-group: @fa-var-users;
-@fa-var-hand-grab-o: @fa-var-hand-rock;
-@fa-var-hand-lizard-o: @fa-var-hand-lizard;
-@fa-var-hand-o-down: @fa-var-hand-point-down;
-@fa-var-hand-o-left: @fa-var-hand-point-left;
-@fa-var-hand-o-right: @fa-var-hand-point-right;
-@fa-var-hand-o-up: @fa-var-hand-point-up;
-@fa-var-hand-paper-o: @fa-var-hand-paper;
-@fa-var-hand-peace-o: @fa-var-hand-peace;
-@fa-var-hand-pointer-o: @fa-var-hand-pointer;
-@fa-var-hand-rock-o: @fa-var-hand-rock;
-@fa-var-hand-scissors-o: @fa-var-hand-scissors;
-@fa-var-hand-spock-o: @fa-var-hand-spock;
-@fa-var-hand-stop-o: @fa-var-hand-paper;
-@fa-var-handshake-o: @fa-var-handshake;
-@fa-var-hard-of-hearing: @fa-var-deaf;
-@fa-var-hdd-o: @fa-var-hdd;
-@fa-var-header: @fa-var-heading;
-@fa-var-heart-o: @fa-var-heart;
-@fa-var-hospital-o: @fa-var-hospital;
-@fa-var-hotel: @fa-var-bed;
-@fa-var-hourglass-1: @fa-var-hourglass-start;
-@fa-var-hourglass-2: @fa-var-hourglass-half;
-@fa-var-hourglass-3: @fa-var-hourglass-end;
-@fa-var-hourglass-o: @fa-var-hourglass;
-@fa-var-id-card-o: @fa-var-id-card;
-@fa-var-ils: @fa-var-shekel-sign;
-@fa-var-inr: @fa-var-rupee-sign;
-@fa-var-institution: @fa-var-university;
-@fa-var-intersex: @fa-var-transgender;
-@fa-var-jpy: @fa-var-yen-sign;
-@fa-var-keyboard-o: @fa-var-keyboard;
-@fa-var-krw: @fa-var-won-sign;
-@fa-var-legal: @fa-var-gavel;
-@fa-var-lemon-o: @fa-var-lemon;
-@fa-var-level-down: @fa-var-level-down-alt;
-@fa-var-level-up: @fa-var-level-up-alt;
-@fa-var-life-bouy: @fa-var-life-ring;
-@fa-var-life-buoy: @fa-var-life-ring;
-@fa-var-life-saver: @fa-var-life-ring;
-@fa-var-lightbulb-o: @fa-var-lightbulb;
-@fa-var-line-chart: @fa-var-chart-line;
-@fa-var-linkedin: @fa-var-linkedin-in;
-@fa-var-linkedin-square: @fa-var-linkedin;
-@fa-var-long-arrow-down: @fa-var-long-arrow-alt-down;
-@fa-var-long-arrow-left: @fa-var-long-arrow-alt-left;
-@fa-var-long-arrow-right: @fa-var-long-arrow-alt-right;
-@fa-var-long-arrow-up: @fa-var-long-arrow-alt-up;
-@fa-var-mail-forward: @fa-var-share;
-@fa-var-mail-reply: @fa-var-reply;
-@fa-var-mail-reply-all: @fa-var-reply-all;
-@fa-var-map-marker: @fa-var-map-marker-alt;
-@fa-var-map-o: @fa-var-map;
-@fa-var-meanpath: @fa-var-font-awesome;
-@fa-var-meh-o: @fa-var-meh;
-@fa-var-minus-square-o: @fa-var-minus-square;
-@fa-var-mobile: @fa-var-mobile-alt;
-@fa-var-mobile-phone: @fa-var-mobile-alt;
-@fa-var-money: @fa-var-money-bill-alt;
-@fa-var-moon-o: @fa-var-moon;
-@fa-var-mortar-board: @fa-var-graduation-cap;
-@fa-var-navicon: @fa-var-bars;
-@fa-var-newspaper-o: @fa-var-newspaper;
-@fa-var-paper-plane-o: @fa-var-paper-plane;
-@fa-var-paste: @fa-var-clipboard;
-@fa-var-pause-circle-o: @fa-var-pause-circle;
-@fa-var-pencil: @fa-var-pencil-alt;
-@fa-var-pencil-square: @fa-var-pen-square;
-@fa-var-pencil-square-o: @fa-var-edit;
-@fa-var-photo: @fa-var-image;
-@fa-var-picture-o: @fa-var-image;
-@fa-var-pie-chart: @fa-var-chart-pie;
-@fa-var-play-circle-o: @fa-var-play-circle;
-@fa-var-plus-square-o: @fa-var-plus-square;
-@fa-var-question-circle-o: @fa-var-question-circle;
-@fa-var-ra: @fa-var-rebel;
-@fa-var-refresh: @fa-var-sync;
-@fa-var-remove: @fa-var-times;
-@fa-var-reorder: @fa-var-bars;
-@fa-var-repeat: @fa-var-redo;
-@fa-var-resistance: @fa-var-rebel;
-@fa-var-rmb: @fa-var-yen-sign;
-@fa-var-rotate-left: @fa-var-undo;
-@fa-var-rotate-right: @fa-var-redo;
-@fa-var-rouble: @fa-var-ruble-sign;
-@fa-var-rub: @fa-var-ruble-sign;
-@fa-var-ruble: @fa-var-ruble-sign;
-@fa-var-rupee: @fa-var-rupee-sign;
-@fa-var-s15: @fa-var-bath;
-@fa-var-scissors: @fa-var-cut;
-@fa-var-send: @fa-var-paper-plane;
-@fa-var-send-o: @fa-var-paper-plane;
-@fa-var-share-square-o: @fa-var-share-square;
-@fa-var-shekel: @fa-var-shekel-sign;
-@fa-var-sheqel: @fa-var-shekel-sign;
-@fa-var-shield: @fa-var-shield-alt;
-@fa-var-sign-in: @fa-var-sign-in-alt;
-@fa-var-sign-out: @fa-var-sign-out-alt;
-@fa-var-signing: @fa-var-sign-language;
-@fa-var-sliders: @fa-var-sliders-h;
-@fa-var-smile-o: @fa-var-smile;
-@fa-var-snowflake-o: @fa-var-snowflake;
-@fa-var-soccer-ball-o: @fa-var-futbol;
-@fa-var-sort-alpha-asc: @fa-var-sort-alpha-down;
-@fa-var-sort-alpha-desc: @fa-var-sort-alpha-up;
-@fa-var-sort-amount-asc: @fa-var-sort-amount-down;
-@fa-var-sort-amount-desc: @fa-var-sort-amount-up;
-@fa-var-sort-asc: @fa-var-sort-up;
-@fa-var-sort-desc: @fa-var-sort-down;
-@fa-var-sort-numeric-asc: @fa-var-sort-numeric-down;
-@fa-var-sort-numeric-desc: @fa-var-sort-numeric-up;
-@fa-var-spoon: @fa-var-utensil-spoon;
-@fa-var-square-o: @fa-var-square;
-@fa-var-star-half-empty: @fa-var-star-half;
-@fa-var-star-half-full: @fa-var-star-half;
-@fa-var-star-half-o: @fa-var-star-half;
-@fa-var-star-o: @fa-var-star;
-@fa-var-sticky-note-o: @fa-var-sticky-note;
-@fa-var-stop-circle-o: @fa-var-stop-circle;
-@fa-var-sun-o: @fa-var-sun;
-@fa-var-support: @fa-var-life-ring;
-@fa-var-tablet: @fa-var-tablet-alt;
-@fa-var-tachometer: @fa-var-tachometer-alt;
-@fa-var-television: @fa-var-tv;
-@fa-var-thermometer: @fa-var-thermometer-full;
-@fa-var-thermometer-0: @fa-var-thermometer-empty;
-@fa-var-thermometer-1: @fa-var-thermometer-quarter;
-@fa-var-thermometer-2: @fa-var-thermometer-half;
-@fa-var-thermometer-3: @fa-var-thermometer-three-quarters;
-@fa-var-thermometer-4: @fa-var-thermometer-full;
-@fa-var-thumb-tack: @fa-var-thumbtack;
-@fa-var-thumbs-o-down: @fa-var-thumbs-down;
-@fa-var-thumbs-o-up: @fa-var-thumbs-up;
-@fa-var-ticket: @fa-var-ticket-alt;
-@fa-var-times-circle-o: @fa-var-times-circle;
-@fa-var-times-rectangle: @fa-var-window-close;
-@fa-var-times-rectangle-o: @fa-var-window-close;
-@fa-var-toggle-down: @fa-var-caret-square-down;
-@fa-var-toggle-left: @fa-var-caret-square-left;
-@fa-var-toggle-right: @fa-var-caret-square-right;
-@fa-var-toggle-up: @fa-var-caret-square-up;
-@fa-var-trash: @fa-var-trash-alt;
-@fa-var-trash-o: @fa-var-trash-alt;
-@fa-var-try: @fa-var-lira-sign;
-@fa-var-turkish-lira: @fa-var-lira-sign;
-@fa-var-unsorted: @fa-var-sort;
-@fa-var-usd: @fa-var-dollar-sign;
-@fa-var-user-circle-o: @fa-var-user-circle;
-@fa-var-user-o: @fa-var-user;
-@fa-var-vcard: @fa-var-address-card;
-@fa-var-vcard-o: @fa-var-address-card;
-@fa-var-video-camera: @fa-var-video;
-@fa-var-vimeo: @fa-var-vimeo-v;
-@fa-var-volume-control-phone: @fa-var-phone-volume;
-@fa-var-warning: @fa-var-exclamation-triangle;
-@fa-var-wechat: @fa-var-weixin;
-@fa-var-wheelchair-alt: @fa-var-accessible-icon;
-@fa-var-window-close-o: @fa-var-window-close;
-@fa-var-won: @fa-var-won-sign;
-@fa-var-y-combinator-square: @fa-var-hacker-news;
-@fa-var-yc: @fa-var-y-combinator;
-@fa-var-yc-square: @fa-var-hacker-news;
-@fa-var-yen: @fa-var-yen-sign;
-@fa-var-youtube-play: @fa-var-youtube;
-
diff --git a/public/vendor/fontawesome/less/regular.less b/public/vendor/fontawesome/less/regular.less
deleted file mode 100644
index 8057ddd92f..0000000000
--- a/public/vendor/fontawesome/less/regular.less
+++ /dev/null
@@ -1,23 +0,0 @@
-/*!
- * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- */
-@import "_variables.less";
-
-@font-face {
- font-family: 'Font Awesome 5 Free';
- font-style: normal;
- font-weight: 400;
- font-display: @fa-font-display;
- src: url('@{fa-font-path}/fa-regular-400.eot');
- src: url('@{fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'),
- url('@{fa-font-path}/fa-regular-400.woff2') format('woff2'),
- url('@{fa-font-path}/fa-regular-400.woff') format('woff'),
- url('@{fa-font-path}/fa-regular-400.ttf') format('truetype'),
- url('@{fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');
-}
-
-.far {
- font-family: 'Font Awesome 5 Free';
- font-weight: 400;
-}
diff --git a/public/vendor/fontawesome/less/solid.less b/public/vendor/fontawesome/less/solid.less
deleted file mode 100644
index ea03f05c07..0000000000
--- a/public/vendor/fontawesome/less/solid.less
+++ /dev/null
@@ -1,24 +0,0 @@
-/*!
- * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- */
-@import "_variables.less";
-
-@font-face {
- font-family: 'Font Awesome 5 Free';
- font-style: normal;
- font-weight: 900;
- font-display: @fa-font-display;
- src: url('@{fa-font-path}/fa-solid-900.eot');
- src: url('@{fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'),
- url('@{fa-font-path}/fa-solid-900.woff2') format('woff2'),
- url('@{fa-font-path}/fa-solid-900.woff') format('woff'),
- url('@{fa-font-path}/fa-solid-900.ttf') format('truetype'),
- url('@{fa-font-path}/fa-solid-900.svg#fontawesome') format('svg');
-}
-
-.fa,
-.fas {
- font-family: 'Font Awesome 5 Free';
- font-weight: 900;
-}
diff --git a/public/vendor/fontawesome/less/v4-shims.less b/public/vendor/fontawesome/less/v4-shims.less
deleted file mode 100644
index e7e0e7e9ce..0000000000
--- a/public/vendor/fontawesome/less/v4-shims.less
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- */
-@import '_variables.less';
-@import '_shims.less';
diff --git a/public/vendor/fontawesome/scss/_animated.scss b/public/vendor/fontawesome/scss/_animated.scss
new file mode 100644
index 0000000000..93555b2f43
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_animated.scss
@@ -0,0 +1,153 @@
+// animating icons
+// --------------------------
+
+.#{$fa-css-prefix}-beat {
+ animation-name: #{$fa-css-prefix}-beat;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);
+}
+
+.#{$fa-css-prefix}-bounce {
+ animation-name: #{$fa-css-prefix}-bounce;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(0.280, 0.840, 0.420, 1));
+}
+
+.#{$fa-css-prefix}-fade {
+ animation-name: #{$fa-css-prefix}-fade;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1));
+}
+
+.#{$fa-css-prefix}-beat-fade {
+ animation-name: #{$fa-css-prefix}-beat-fade;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1));
+}
+
+.#{$fa-css-prefix}-flip {
+ animation-name: #{$fa-css-prefix}-flip;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);
+}
+
+.#{$fa-css-prefix}-shake {
+ animation-name: #{$fa-css-prefix}-shake;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);
+}
+
+.#{$fa-css-prefix}-spin {
+ animation-name: #{$fa-css-prefix}-spin;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 2s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);
+}
+
+.#{$fa-css-prefix}-spin-reverse {
+ --#{$fa-css-prefix}-animation-direction: reverse;
+}
+
+.#{$fa-css-prefix}-pulse,
+.#{$fa-css-prefix}-spin-pulse {
+ animation-name: #{$fa-css-prefix}-spin;
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, steps(8));
+}
+
+// if agent or operating system prefers reduced motion, disable animations
+// see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/
+// see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion
+@media (prefers-reduced-motion: reduce) {
+ .#{$fa-css-prefix}-beat,
+ .#{$fa-css-prefix}-bounce,
+ .#{$fa-css-prefix}-fade,
+ .#{$fa-css-prefix}-beat-fade,
+ .#{$fa-css-prefix}-flip,
+ .#{$fa-css-prefix}-pulse,
+ .#{$fa-css-prefix}-shake,
+ .#{$fa-css-prefix}-spin,
+ .#{$fa-css-prefix}-spin-pulse {
+ animation-delay: -1ms;
+ animation-duration: 1ms;
+ animation-iteration-count: 1;
+ transition-delay: 0s;
+ transition-duration: 0s;
+ }
+}
+
+@keyframes #{$fa-css-prefix}-beat {
+ 0%, 90% { transform: scale(1); }
+ 45% { transform: scale(var(--#{$fa-css-prefix}-beat-scale, 1.25)); }
+}
+
+@keyframes #{$fa-css-prefix}-bounce {
+ 0% { transform: scale(1,1) translateY(0); }
+ 10% { transform: scale(var(--#{$fa-css-prefix}-bounce-start-scale-x, 1.1),var(--#{$fa-css-prefix}-bounce-start-scale-y, 0.9)) translateY(0); }
+ 30% { transform: scale(var(--#{$fa-css-prefix}-bounce-jump-scale-x, 0.9),var(--#{$fa-css-prefix}-bounce-jump-scale-y, 1.1)) translateY(var(--#{$fa-css-prefix}-bounce-height, -0.5em)); }
+ 50% { transform: scale(var(--#{$fa-css-prefix}-bounce-land-scale-x, 1.05),var(--#{$fa-css-prefix}-bounce-land-scale-y, 0.95)) translateY(0); }
+ 57% { transform: scale(1,1) translateY(var(--#{$fa-css-prefix}-bounce-rebound, -0.125em)); }
+ 64% { transform: scale(1,1) translateY(0); }
+ 100% { transform: scale(1,1) translateY(0); }
+}
+
+@keyframes #{$fa-css-prefix}-fade {
+ 50% { opacity: var(--#{$fa-css-prefix}-fade-opacity, 0.4); }
+}
+
+@keyframes #{$fa-css-prefix}-beat-fade {
+ 0%, 100% {
+ opacity: var(--#{$fa-css-prefix}-beat-fade-opacity, 0.4);
+ transform: scale(1);
+ }
+ 50% {
+ opacity: 1;
+ transform: scale(var(--#{$fa-css-prefix}-beat-fade-scale, 1.125));
+ }
+}
+
+@keyframes #{$fa-css-prefix}-flip {
+ 50% {
+ transform: rotate3d(var(--#{$fa-css-prefix}-flip-x, 0), var(--#{$fa-css-prefix}-flip-y, 1), var(--#{$fa-css-prefix}-flip-z, 0), var(--#{$fa-css-prefix}-flip-angle, -180deg));
+ }
+}
+
+@keyframes #{$fa-css-prefix}-shake {
+ 0% { transform: rotate(-15deg); }
+ 4% { transform: rotate(15deg); }
+ 8%, 24% { transform: rotate(-18deg); }
+ 12%, 28% { transform: rotate(18deg); }
+ 16% { transform: rotate(-22deg); }
+ 20% { transform: rotate(22deg); }
+ 32% { transform: rotate(-12deg); }
+ 36% { transform: rotate(12deg); }
+ 40%, 100% { transform: rotate(0deg); }
+}
+
+@keyframes #{$fa-css-prefix}-spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
+
diff --git a/public/vendor/fontawesome/scss/_bordered-pulled.scss b/public/vendor/fontawesome/scss/_bordered-pulled.scss
new file mode 100644
index 0000000000..9068253a74
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_bordered-pulled.scss
@@ -0,0 +1,20 @@
+// bordered + pulled icons
+// -------------------------
+
+.#{$fa-css-prefix}-border {
+ border-color: var(--#{$fa-css-prefix}-border-color, #{$fa-border-color});
+ border-radius: var(--#{$fa-css-prefix}-border-radius, #{$fa-border-radius});
+ border-style: var(--#{$fa-css-prefix}-border-style, #{$fa-border-style});
+ border-width: var(--#{$fa-css-prefix}-border-width, #{$fa-border-width});
+ padding: var(--#{$fa-css-prefix}-border-padding, #{$fa-border-padding});
+}
+
+.#{$fa-css-prefix}-pull-left {
+ float: left;
+ margin-right: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin});
+}
+
+.#{$fa-css-prefix}-pull-right {
+ float: right;
+ margin-left: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin});
+}
diff --git a/public/vendor/fontawesome/scss/_core.scss b/public/vendor/fontawesome/scss/_core.scss
new file mode 100644
index 0000000000..1b2fd99205
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_core.scss
@@ -0,0 +1,43 @@
+// base icon class definition
+// -------------------------
+
+.#{$fa-css-prefix} {
+ font-family: var(--#{$fa-css-prefix}-style-family, '#{$fa-style-family}');
+ font-weight: var(--#{$fa-css-prefix}-style, #{$fa-style});
+}
+
+.#{$fa-css-prefix},
+.#{$fa-css-prefix}-classic,
+.#{$fa-css-prefix}-sharp,
+.fas,
+.#{$fa-css-prefix}-solid,
+.far,
+.#{$fa-css-prefix}-regular,
+.fab,
+.#{$fa-css-prefix}-brands {
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ display: var(--#{$fa-css-prefix}-display, #{$fa-display});
+ font-style: normal;
+ font-variant: normal;
+ line-height: 1;
+ text-rendering: auto;
+}
+
+.fas,
+.#{$fa-css-prefix}-classic,
+.#{$fa-css-prefix}-solid,
+.far,
+.#{$fa-css-prefix}-regular {
+ font-family: 'Font Awesome 6 Free';
+}
+
+.fab,
+.#{$fa-css-prefix}-brands {
+ font-family: 'Font Awesome 6 Brands';
+}
+
+
+%fa-icon {
+ @include fa-icon;
+}
diff --git a/public/vendor/fontawesome/scss/_fixed-width.scss b/public/vendor/fontawesome/scss/_fixed-width.scss
new file mode 100644
index 0000000000..72342368af
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_fixed-width.scss
@@ -0,0 +1,7 @@
+// fixed-width icons
+// -------------------------
+
+.#{$fa-css-prefix}-fw {
+ text-align: center;
+ width: $fa-fw-width;
+}
diff --git a/public/vendor/fontawesome/scss/_functions.scss b/public/vendor/fontawesome/scss/_functions.scss
new file mode 100644
index 0000000000..a17ffe87cc
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_functions.scss
@@ -0,0 +1,57 @@
+// functions
+// --------------------------
+
+// fa-content: convenience function used to set content property
+@function fa-content($fa-var) {
+ @return unquote("\"#{ $fa-var }\"");
+}
+
+// fa-divide: Originally obtained from the Bootstrap https://github.com/twbs/bootstrap
+//
+// Licensed under: 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.
+
+@function fa-divide($dividend, $divisor, $precision: 10) {
+ $sign: if($dividend > 0 and $divisor > 0, 1, -1);
+ $dividend: abs($dividend);
+ $divisor: abs($divisor);
+ $quotient: 0;
+ $remainder: $dividend;
+ @if $dividend == 0 {
+ @return 0;
+ }
+ @if $divisor == 0 {
+ @error "Cannot divide by 0";
+ }
+ @if $divisor == 1 {
+ @return $dividend;
+ }
+ @while $remainder >= $divisor {
+ $quotient: $quotient + 1;
+ $remainder: $remainder - $divisor;
+ }
+ @if $remainder > 0 and $precision > 0 {
+ $remainder: fa-divide($remainder * 10, $divisor, $precision - 1) * .1;
+ }
+ @return ($quotient + $remainder) * $sign;
+}
diff --git a/public/vendor/fontawesome/scss/_icons.scss b/public/vendor/fontawesome/scss/_icons.scss
new file mode 100644
index 0000000000..9e57e39cb3
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_icons.scss
@@ -0,0 +1,9 @@
+// specific icon class definition
+// -------------------------
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+readers do not read off random characters that represent icons */
+
+@each $name, $icon in $fa-icons {
+ .#{$fa-css-prefix}-#{$name}::before { content: unquote("\"#{ $icon }\""); }
+}
diff --git a/public/vendor/fontawesome/scss/_larger.scss b/public/vendor/fontawesome/scss/_larger.scss
new file mode 100644
index 0000000000..e88f4e54d0
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_larger.scss
@@ -0,0 +1,24 @@
+// Icon Sizes
+// -------------------------
+@use "sass:math";
+
+// makes the font 33% larger relative to the icon container
+.#{$fa-css-prefix}-lg {
+ font-size: math.div(4em, 3);
+ line-height: math.div(3em, 4);
+ vertical-align: -.0667em;
+}
+
+.#{$fa-css-prefix}-xs {
+ font-size: .75em;
+}
+
+.#{$fa-css-prefix}-sm {
+ font-size: .875em;
+}
+
+@for $i from 1 through 10 {
+ .#{$fa-css-prefix}-#{$i}x {
+ font-size: $i * 1em;
+ }
+}
diff --git a/public/vendor/fontawesome/scss/_list.scss b/public/vendor/fontawesome/scss/_list.scss
new file mode 100644
index 0000000000..ced36e20a2
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_list.scss
@@ -0,0 +1,18 @@
+// icons in a list
+// -------------------------
+
+.#{$fa-css-prefix}-ul {
+ list-style-type: none;
+ margin-left: var(--#{$fa-css-prefix}-li-margin, #{$fa-li-margin});
+ padding-left: 0;
+
+ > li { position: relative; }
+}
+
+.#{$fa-css-prefix}-li {
+ left: calc(var(--#{$fa-css-prefix}-li-width, #{$fa-li-width}) * -1);
+ position: absolute;
+ text-align: center;
+ width: var(--#{$fa-css-prefix}-li-width, #{$fa-li-width});
+ line-height: inherit;
+}
diff --git a/public/vendor/fontawesome/scss/_mixins.scss b/public/vendor/fontawesome/scss/_mixins.scss
new file mode 100644
index 0000000000..e06b69aa54
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_mixins.scss
@@ -0,0 +1,75 @@
+// mixins
+// --------------------------
+
+// base rendering for an icon
+@mixin fa-icon {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ display: inline-block;
+ font-style: normal;
+ font-variant: normal;
+ font-weight: normal;
+ line-height: 1;
+}
+
+// sets relative font-sizing and alignment (in _sizing)
+@mixin fa-size ($font-size) {
+ font-size: fa-divide($font-size, $fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base
+ line-height: fa-divide(1, $font-size) * 1em; // sets the line-height of the icon back to that of it's parent
+ vertical-align: (fa-divide(6, $font-size) - fa-divide(3, 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender
+}
+
+// only display content to screen readers
+// see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
+// see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
+@mixin fa-sr-only() {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border-width: 0;
+}
+
+// use in conjunction with .sr-only to only display content when it's focused
+@mixin fa-sr-only-focusable() {
+ &:not(:focus) {
+ @include fa-sr-only();
+ }
+}
+
+// sets a specific icon family to use alongside style + icon mixins
+
+// convenience mixins for declaring pseudo-elements by CSS variable,
+// including all style-specific font properties, and both the ::before
+// and ::after elements in the duotone case.
+@mixin fa-icon-solid($fa-var) {
+ @extend %fa-icon;
+ @extend .fa-solid;
+
+ &::before {
+ content: unquote("\"#{ $fa-var }\"");
+ }
+}
+
+@mixin fa-icon-regular($fa-var) {
+ @extend %fa-icon;
+ @extend .fa-regular;
+
+ &::before {
+ content: unquote("\"#{ $fa-var }\"");
+ }
+}
+
+@mixin fa-icon-brands($fa-var) {
+ @extend %fa-icon;
+ @extend .fa-brands;
+
+ &::before {
+ content: unquote("\"#{ $fa-var }\"");
+ }
+}
+
diff --git a/public/vendor/fontawesome/scss/_rotated-flipped.scss b/public/vendor/fontawesome/scss/_rotated-flipped.scss
new file mode 100644
index 0000000000..f27fabee40
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_rotated-flipped.scss
@@ -0,0 +1,31 @@
+// rotating + flipping icons
+// -------------------------
+
+.#{$fa-css-prefix}-rotate-90 {
+ transform: rotate(90deg);
+}
+
+.#{$fa-css-prefix}-rotate-180 {
+ transform: rotate(180deg);
+}
+
+.#{$fa-css-prefix}-rotate-270 {
+ transform: rotate(270deg);
+}
+
+.#{$fa-css-prefix}-flip-horizontal {
+ transform: scale(-1, 1);
+}
+
+.#{$fa-css-prefix}-flip-vertical {
+ transform: scale(1, -1);
+}
+
+.#{$fa-css-prefix}-flip-both,
+.#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical {
+ transform: scale(-1, -1);
+}
+
+.#{$fa-css-prefix}-rotate-by {
+ transform: rotate(var(--#{$fa-css-prefix}-rotate-angle, none));
+}
diff --git a/public/vendor/fontawesome/scss/_screen-reader.scss b/public/vendor/fontawesome/scss/_screen-reader.scss
new file mode 100644
index 0000000000..2beb887b49
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_screen-reader.scss
@@ -0,0 +1,14 @@
+// screen-reader utilities
+// -------------------------
+
+// only display content to screen readers
+.sr-only,
+.#{$fa-css-prefix}-sr-only {
+ @include fa-sr-only;
+}
+
+// use in conjunction with .sr-only to only display content when it's focused
+.sr-only-focusable,
+.#{$fa-css-prefix}-sr-only-focusable {
+ @include fa-sr-only-focusable;
+}
diff --git a/public/vendor/fontawesome/scss/_shims.scss b/public/vendor/fontawesome/scss/_shims.scss
new file mode 100644
index 0000000000..7809aa6490
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_shims.scss
@@ -0,0 +1,2042 @@
+.#{$fa-css-prefix}.#{$fa-css-prefix}-glass:before { content: unquote("\"#{ $fa-var-martini-glass-empty }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o:before { content: unquote("\"#{ $fa-var-envelope }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-o:before { content: unquote("\"#{ $fa-var-star }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-remove:before { content: unquote("\"#{ $fa-var-xmark }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-close:before { content: unquote("\"#{ $fa-var-xmark }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gear:before { content: unquote("\"#{ $fa-var-gear }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-trash-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-trash-o:before { content: unquote("\"#{ $fa-var-trash-can }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-home:before { content: unquote("\"#{ $fa-var-house }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-o:before { content: unquote("\"#{ $fa-var-file }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-clock-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-clock-o:before { content: unquote("\"#{ $fa-var-clock }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-down {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-down:before { content: unquote("\"#{ $fa-var-circle-down }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-up {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-up:before { content: unquote("\"#{ $fa-var-circle-up }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-play-circle-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-play-circle-o:before { content: unquote("\"#{ $fa-var-circle-play }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-repeat:before { content: unquote("\"#{ $fa-var-arrow-rotate-right }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rotate-right:before { content: unquote("\"#{ $fa-var-arrow-rotate-right }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-refresh:before { content: unquote("\"#{ $fa-var-arrows-rotate }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-list-alt {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-list-alt:before { content: unquote("\"#{ $fa-var-rectangle-list }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dedent:before { content: unquote("\"#{ $fa-var-outdent }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-video-camera:before { content: unquote("\"#{ $fa-var-video }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-picture-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-picture-o:before { content: unquote("\"#{ $fa-var-image }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-photo {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-photo:before { content: unquote("\"#{ $fa-var-image }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-image {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-image:before { content: unquote("\"#{ $fa-var-image }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-map-marker:before { content: unquote("\"#{ $fa-var-location-dot }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square-o:before { content: unquote("\"#{ $fa-var-pen-to-square }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-edit {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-edit:before { content: unquote("\"#{ $fa-var-pen-to-square }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-share-square-o:before { content: unquote("\"#{ $fa-var-share-from-square }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-check-square-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-check-square-o:before { content: unquote("\"#{ $fa-var-square-check }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows:before { content: unquote("\"#{ $fa-var-up-down-left-right }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-circle-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-circle-o:before { content: unquote("\"#{ $fa-var-circle-xmark }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-check-circle-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-check-circle-o:before { content: unquote("\"#{ $fa-var-circle-check }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-forward:before { content: unquote("\"#{ $fa-var-share }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-expand:before { content: unquote("\"#{ $fa-var-up-right-and-down-left-from-center }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-compress:before { content: unquote("\"#{ $fa-var-down-left-and-up-right-to-center }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eye {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eye-slash {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-warning:before { content: unquote("\"#{ $fa-var-triangle-exclamation }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar:before { content: unquote("\"#{ $fa-var-calendar-days }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-v:before { content: unquote("\"#{ $fa-var-up-down }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-h:before { content: unquote("\"#{ $fa-var-left-right }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart:before { content: unquote("\"#{ $fa-var-chart-column }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart-o:before { content: unquote("\"#{ $fa-var-chart-column }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-twitter-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-twitter-square:before { content: unquote("\"#{ $fa-var-square-twitter }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-square:before { content: unquote("\"#{ $fa-var-square-facebook }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gears:before { content: unquote("\"#{ $fa-var-gears }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-up {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-up:before { content: unquote("\"#{ $fa-var-thumbs-up }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-down {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-down:before { content: unquote("\"#{ $fa-var-thumbs-down }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-heart-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-heart-o:before { content: unquote("\"#{ $fa-var-heart }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sign-out:before { content: unquote("\"#{ $fa-var-right-from-bracket }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin-square:before { content: unquote("\"#{ $fa-var-linkedin }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumb-tack:before { content: unquote("\"#{ $fa-var-thumbtack }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-external-link:before { content: unquote("\"#{ $fa-var-up-right-from-square }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sign-in:before { content: unquote("\"#{ $fa-var-right-to-bracket }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-github-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-github-square:before { content: unquote("\"#{ $fa-var-square-github }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lemon-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lemon-o:before { content: unquote("\"#{ $fa-var-lemon }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-square-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-square-o:before { content: unquote("\"#{ $fa-var-square }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bookmark-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bookmark-o:before { content: unquote("\"#{ $fa-var-bookmark }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-twitter {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook:before { content: unquote("\"#{ $fa-var-facebook-f }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-f {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-f:before { content: unquote("\"#{ $fa-var-facebook-f }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-github {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-credit-card {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-feed:before { content: unquote("\"#{ $fa-var-rss }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hdd-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hdd-o:before { content: unquote("\"#{ $fa-var-hard-drive }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-right {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-right:before { content: unquote("\"#{ $fa-var-hand-point-right }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-left {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-left:before { content: unquote("\"#{ $fa-var-hand-point-left }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-up {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-up:before { content: unquote("\"#{ $fa-var-hand-point-up }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-down {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-down:before { content: unquote("\"#{ $fa-var-hand-point-down }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-globe:before { content: unquote("\"#{ $fa-var-earth-americas }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tasks:before { content: unquote("\"#{ $fa-var-bars-progress }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-alt:before { content: unquote("\"#{ $fa-var-maximize }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-group:before { content: unquote("\"#{ $fa-var-users }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-chain:before { content: unquote("\"#{ $fa-var-link }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cut:before { content: unquote("\"#{ $fa-var-scissors }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-files-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-files-o:before { content: unquote("\"#{ $fa-var-copy }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-floppy-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-floppy-o:before { content: unquote("\"#{ $fa-var-floppy-disk }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-save {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-save:before { content: unquote("\"#{ $fa-var-floppy-disk }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-navicon:before { content: unquote("\"#{ $fa-var-bars }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reorder:before { content: unquote("\"#{ $fa-var-bars }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-magic:before { content: unquote("\"#{ $fa-var-wand-magic-sparkles }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-square:before { content: unquote("\"#{ $fa-var-square-pinterest }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-square:before { content: unquote("\"#{ $fa-var-square-google-plus }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus:before { content: unquote("\"#{ $fa-var-google-plus-g }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-money:before { content: unquote("\"#{ $fa-var-money-bill-1 }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-unsorted:before { content: unquote("\"#{ $fa-var-sort }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-desc:before { content: unquote("\"#{ $fa-var-sort-down }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-asc:before { content: unquote("\"#{ $fa-var-sort-up }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin:before { content: unquote("\"#{ $fa-var-linkedin-in }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rotate-left:before { content: unquote("\"#{ $fa-var-arrow-rotate-left }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-legal:before { content: unquote("\"#{ $fa-var-gavel }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tachometer:before { content: unquote("\"#{ $fa-var-gauge-high }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dashboard:before { content: unquote("\"#{ $fa-var-gauge-high }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-comment-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-comment-o:before { content: unquote("\"#{ $fa-var-comment }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-comments-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-comments-o:before { content: unquote("\"#{ $fa-var-comments }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-flash:before { content: unquote("\"#{ $fa-var-bolt }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-clipboard:before { content: unquote("\"#{ $fa-var-paste }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lightbulb-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lightbulb-o:before { content: unquote("\"#{ $fa-var-lightbulb }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-exchange:before { content: unquote("\"#{ $fa-var-right-left }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cloud-download:before { content: unquote("\"#{ $fa-var-cloud-arrow-down }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cloud-upload:before { content: unquote("\"#{ $fa-var-cloud-arrow-up }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-o:before { content: unquote("\"#{ $fa-var-bell }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cutlery:before { content: unquote("\"#{ $fa-var-utensils }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text-o:before { content: unquote("\"#{ $fa-var-file-lines }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-building-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-building-o:before { content: unquote("\"#{ $fa-var-building }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hospital-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hospital-o:before { content: unquote("\"#{ $fa-var-hospital }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tablet:before { content: unquote("\"#{ $fa-var-tablet-screen-button }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mobile:before { content: unquote("\"#{ $fa-var-mobile-screen-button }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mobile-phone:before { content: unquote("\"#{ $fa-var-mobile-screen-button }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o:before { content: unquote("\"#{ $fa-var-circle }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-reply:before { content: unquote("\"#{ $fa-var-reply }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-github-alt {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-o:before { content: unquote("\"#{ $fa-var-folder }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-open-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-open-o:before { content: unquote("\"#{ $fa-var-folder-open }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-smile-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-smile-o:before { content: unquote("\"#{ $fa-var-face-smile }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-frown-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-frown-o:before { content: unquote("\"#{ $fa-var-face-frown }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-meh-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-meh-o:before { content: unquote("\"#{ $fa-var-face-meh }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-keyboard-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-keyboard-o:before { content: unquote("\"#{ $fa-var-keyboard }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-flag-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-flag-o:before { content: unquote("\"#{ $fa-var-flag }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-reply-all:before { content: unquote("\"#{ $fa-var-reply-all }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-o:before { content: unquote("\"#{ $fa-var-star-half-stroke }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-empty {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-empty:before { content: unquote("\"#{ $fa-var-star-half-stroke }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-full {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-full:before { content: unquote("\"#{ $fa-var-star-half-stroke }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-code-fork:before { content: unquote("\"#{ $fa-var-code-branch }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-chain-broken:before { content: unquote("\"#{ $fa-var-link-slash }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-unlink:before { content: unquote("\"#{ $fa-var-link-slash }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-o:before { content: unquote("\"#{ $fa-var-calendar }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-maxcdn {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-html5 {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-css3 {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-unlock-alt:before { content: unquote("\"#{ $fa-var-unlock }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-minus-square-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-minus-square-o:before { content: unquote("\"#{ $fa-var-square-minus }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-level-up:before { content: unquote("\"#{ $fa-var-turn-up }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-level-down:before { content: unquote("\"#{ $fa-var-turn-down }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square:before { content: unquote("\"#{ $fa-var-square-pen }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-external-link-square:before { content: unquote("\"#{ $fa-var-square-up-right }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-compass {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-down {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-down:before { content: unquote("\"#{ $fa-var-square-caret-down }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-down {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-down:before { content: unquote("\"#{ $fa-var-square-caret-down }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-up {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-up:before { content: unquote("\"#{ $fa-var-square-caret-up }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-up {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-up:before { content: unquote("\"#{ $fa-var-square-caret-up }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-right {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-right:before { content: unquote("\"#{ $fa-var-square-caret-right }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-right {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-right:before { content: unquote("\"#{ $fa-var-square-caret-right }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eur:before { content: unquote("\"#{ $fa-var-euro-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-euro:before { content: unquote("\"#{ $fa-var-euro-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gbp:before { content: unquote("\"#{ $fa-var-sterling-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-usd:before { content: unquote("\"#{ $fa-var-dollar-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dollar:before { content: unquote("\"#{ $fa-var-dollar-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-inr:before { content: unquote("\"#{ $fa-var-indian-rupee-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rupee:before { content: unquote("\"#{ $fa-var-indian-rupee-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-jpy:before { content: unquote("\"#{ $fa-var-yen-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cny:before { content: unquote("\"#{ $fa-var-yen-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rmb:before { content: unquote("\"#{ $fa-var-yen-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yen:before { content: unquote("\"#{ $fa-var-yen-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rub:before { content: unquote("\"#{ $fa-var-ruble-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ruble:before { content: unquote("\"#{ $fa-var-ruble-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rouble:before { content: unquote("\"#{ $fa-var-ruble-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-krw:before { content: unquote("\"#{ $fa-var-won-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-won:before { content: unquote("\"#{ $fa-var-won-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-btc {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitcoin {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitcoin:before { content: unquote("\"#{ $fa-var-btc }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text:before { content: unquote("\"#{ $fa-var-file-lines }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-asc:before { content: unquote("\"#{ $fa-var-arrow-down-a-z }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-desc:before { content: unquote("\"#{ $fa-var-arrow-down-z-a }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-asc:before { content: unquote("\"#{ $fa-var-arrow-down-short-wide }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-desc:before { content: unquote("\"#{ $fa-var-arrow-down-wide-short }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-asc:before { content: unquote("\"#{ $fa-var-arrow-down-1-9 }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-desc:before { content: unquote("\"#{ $fa-var-arrow-down-9-1 }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-square:before { content: unquote("\"#{ $fa-var-square-youtube }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-xing {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-xing-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-xing-square:before { content: unquote("\"#{ $fa-var-square-xing }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-play {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-play:before { content: unquote("\"#{ $fa-var-youtube }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dropbox {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stack-overflow {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-instagram {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-flickr {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-adn {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket-square:before { content: unquote("\"#{ $fa-var-bitbucket }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr-square:before { content: unquote("\"#{ $fa-var-square-tumblr }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-down:before { content: unquote("\"#{ $fa-var-down-long }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-up:before { content: unquote("\"#{ $fa-var-up-long }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-left:before { content: unquote("\"#{ $fa-var-left-long }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-right:before { content: unquote("\"#{ $fa-var-right-long }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-apple {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-windows {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-android {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linux {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dribbble {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-skype {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-foursquare {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-trello {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gratipay {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gittip {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gittip:before { content: unquote("\"#{ $fa-var-gratipay }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sun-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sun-o:before { content: unquote("\"#{ $fa-var-sun }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-moon-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-moon-o:before { content: unquote("\"#{ $fa-var-moon }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vk {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-weibo {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-renren {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pagelines {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stack-exchange {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-right {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-right:before { content: unquote("\"#{ $fa-var-circle-right }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-left {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-left:before { content: unquote("\"#{ $fa-var-circle-left }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-left {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-left:before { content: unquote("\"#{ $fa-var-square-caret-left }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-left {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-left:before { content: unquote("\"#{ $fa-var-square-caret-left }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dot-circle-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dot-circle-o:before { content: unquote("\"#{ $fa-var-circle-dot }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo-square:before { content: unquote("\"#{ $fa-var-square-vimeo }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-try:before { content: unquote("\"#{ $fa-var-turkish-lira-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-turkish-lira:before { content: unquote("\"#{ $fa-var-turkish-lira-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-plus-square-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-plus-square-o:before { content: unquote("\"#{ $fa-var-square-plus }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-slack {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wordpress {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-openid {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-institution:before { content: unquote("\"#{ $fa-var-building-columns }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bank:before { content: unquote("\"#{ $fa-var-building-columns }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mortar-board:before { content: unquote("\"#{ $fa-var-graduation-cap }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yahoo {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-square:before { content: unquote("\"#{ $fa-var-square-reddit }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stumbleupon-circle {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stumbleupon {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-delicious {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-digg {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper-pp {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper-alt {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-drupal {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-joomla {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-behance {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-behance-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-behance-square:before { content: unquote("\"#{ $fa-var-square-behance }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-steam {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-steam-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-steam-square:before { content: unquote("\"#{ $fa-var-square-steam }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-automobile:before { content: unquote("\"#{ $fa-var-car }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cab:before { content: unquote("\"#{ $fa-var-taxi }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-spotify {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-deviantart {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-soundcloud {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-pdf-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-pdf-o:before { content: unquote("\"#{ $fa-var-file-pdf }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-word-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-word-o:before { content: unquote("\"#{ $fa-var-file-word }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-excel-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-excel-o:before { content: unquote("\"#{ $fa-var-file-excel }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-powerpoint-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-powerpoint-o:before { content: unquote("\"#{ $fa-var-file-powerpoint }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-image-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-image-o:before { content: unquote("\"#{ $fa-var-file-image }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-photo-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-photo-o:before { content: unquote("\"#{ $fa-var-file-image }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-picture-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-picture-o:before { content: unquote("\"#{ $fa-var-file-image }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-archive-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-archive-o:before { content: unquote("\"#{ $fa-var-file-zipper }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-zip-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-zip-o:before { content: unquote("\"#{ $fa-var-file-zipper }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-audio-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-audio-o:before { content: unquote("\"#{ $fa-var-file-audio }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-sound-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-sound-o:before { content: unquote("\"#{ $fa-var-file-audio }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-video-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-video-o:before { content: unquote("\"#{ $fa-var-file-video }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-movie-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-movie-o:before { content: unquote("\"#{ $fa-var-file-video }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-code-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-code-o:before { content: unquote("\"#{ $fa-var-file-code }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vine {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-codepen {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-jsfiddle {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-life-bouy:before { content: unquote("\"#{ $fa-var-life-ring }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-life-buoy:before { content: unquote("\"#{ $fa-var-life-ring }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-life-saver:before { content: unquote("\"#{ $fa-var-life-ring }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-support:before { content: unquote("\"#{ $fa-var-life-ring }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o-notch:before { content: unquote("\"#{ $fa-var-circle-notch }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rebel {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ra {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ra:before { content: unquote("\"#{ $fa-var-rebel }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-resistance {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-resistance:before { content: unquote("\"#{ $fa-var-rebel }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-empire {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ge {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ge:before { content: unquote("\"#{ $fa-var-empire }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-git-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-git-square:before { content: unquote("\"#{ $fa-var-square-git }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-git {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hacker-news {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator-square:before { content: unquote("\"#{ $fa-var-hacker-news }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yc-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yc-square:before { content: unquote("\"#{ $fa-var-hacker-news }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tencent-weibo {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-qq {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-weixin {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wechat {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wechat:before { content: unquote("\"#{ $fa-var-weixin }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-send:before { content: unquote("\"#{ $fa-var-paper-plane }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-paper-plane-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-paper-plane-o:before { content: unquote("\"#{ $fa-var-paper-plane }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-send-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-send-o:before { content: unquote("\"#{ $fa-var-paper-plane }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-thin {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-thin:before { content: unquote("\"#{ $fa-var-circle }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-header:before { content: unquote("\"#{ $fa-var-heading }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-futbol-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-futbol-o:before { content: unquote("\"#{ $fa-var-futbol }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-soccer-ball-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-soccer-ball-o:before { content: unquote("\"#{ $fa-var-futbol }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-slideshare {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-twitch {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yelp {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-newspaper-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-newspaper-o:before { content: unquote("\"#{ $fa-var-newspaper }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-paypal {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-wallet {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-visa {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-mastercard {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-discover {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-amex {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-paypal {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-stripe {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-slash-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-slash-o:before { content: unquote("\"#{ $fa-var-bell-slash }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-trash:before { content: unquote("\"#{ $fa-var-trash-can }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-copyright {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eyedropper:before { content: unquote("\"#{ $fa-var-eye-dropper }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-area-chart:before { content: unquote("\"#{ $fa-var-chart-area }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pie-chart:before { content: unquote("\"#{ $fa-var-chart-pie }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-line-chart:before { content: unquote("\"#{ $fa-var-chart-line }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm-square:before { content: unquote("\"#{ $fa-var-square-lastfm }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ioxhost {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-angellist {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc:before { content: unquote("\"#{ $fa-var-closed-captioning }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ils:before { content: unquote("\"#{ $fa-var-shekel-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-shekel:before { content: unquote("\"#{ $fa-var-shekel-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sheqel:before { content: unquote("\"#{ $fa-var-shekel-sign }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-buysellads {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-connectdevelop {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dashcube {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-forumbee {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-leanpub {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sellsy {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-shirtsinbulk {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-simplybuilt {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-skyatlas {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-diamond {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-diamond:before { content: unquote("\"#{ $fa-var-gem }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-transgender:before { content: unquote("\"#{ $fa-var-mars-and-venus }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-intersex:before { content: unquote("\"#{ $fa-var-mars-and-venus }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-transgender-alt:before { content: unquote("\"#{ $fa-var-transgender }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-official {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-official:before { content: unquote("\"#{ $fa-var-facebook }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-p {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-whatsapp {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hotel:before { content: unquote("\"#{ $fa-var-bed }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-viacoin {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-medium {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yc {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yc:before { content: unquote("\"#{ $fa-var-y-combinator }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-optin-monster {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-opencart {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-expeditedssl {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-4:before { content: unquote("\"#{ $fa-var-battery-full }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery:before { content: unquote("\"#{ $fa-var-battery-full }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-3:before { content: unquote("\"#{ $fa-var-battery-three-quarters }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-2:before { content: unquote("\"#{ $fa-var-battery-half }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-1:before { content: unquote("\"#{ $fa-var-battery-quarter }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-0:before { content: unquote("\"#{ $fa-var-battery-empty }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-object-group {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-object-ungroup {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sticky-note-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sticky-note-o:before { content: unquote("\"#{ $fa-var-note-sticky }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-jcb {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-diners-club {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-clone {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-o:before { content: unquote("\"#{ $fa-var-hourglass }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-1:before { content: unquote("\"#{ $fa-var-hourglass-start }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-2:before { content: unquote("\"#{ $fa-var-hourglass-half }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-3:before { content: unquote("\"#{ $fa-var-hourglass-end }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-rock-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-rock-o:before { content: unquote("\"#{ $fa-var-hand-back-fist }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-grab-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-grab-o:before { content: unquote("\"#{ $fa-var-hand-back-fist }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-paper-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-paper-o:before { content: unquote("\"#{ $fa-var-hand }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-stop-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-stop-o:before { content: unquote("\"#{ $fa-var-hand }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-scissors-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-scissors-o:before { content: unquote("\"#{ $fa-var-hand-scissors }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-lizard-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-lizard-o:before { content: unquote("\"#{ $fa-var-hand-lizard }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-spock-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-spock-o:before { content: unquote("\"#{ $fa-var-hand-spock }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-pointer-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-pointer-o:before { content: unquote("\"#{ $fa-var-hand-pointer }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-peace-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-peace-o:before { content: unquote("\"#{ $fa-var-hand-peace }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-registered {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-creative-commons {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gg {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gg-circle {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki-square:before { content: unquote("\"#{ $fa-var-square-odnoklassniki }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-get-pocket {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wikipedia-w {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-safari {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-chrome {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-firefox {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-opera {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-internet-explorer {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-television:before { content: unquote("\"#{ $fa-var-tv }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-contao {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-500px {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-amazon {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-plus-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-plus-o:before { content: unquote("\"#{ $fa-var-calendar-plus }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-minus-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-minus-o:before { content: unquote("\"#{ $fa-var-calendar-minus }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-times-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-times-o:before { content: unquote("\"#{ $fa-var-calendar-xmark }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-check-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-check-o:before { content: unquote("\"#{ $fa-var-calendar-check }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-map-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-map-o:before { content: unquote("\"#{ $fa-var-map }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting:before { content: unquote("\"#{ $fa-var-comment-dots }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting-o:before { content: unquote("\"#{ $fa-var-comment-dots }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-houzz {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo:before { content: unquote("\"#{ $fa-var-vimeo-v }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-black-tie {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-fonticons {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-alien {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-edge {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-credit-card-alt:before { content: unquote("\"#{ $fa-var-credit-card }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-codiepie {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-modx {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-fort-awesome {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-usb {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-product-hunt {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mixcloud {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-scribd {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pause-circle-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pause-circle-o:before { content: unquote("\"#{ $fa-var-circle-pause }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stop-circle-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stop-circle-o:before { content: unquote("\"#{ $fa-var-circle-stop }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bluetooth {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bluetooth-b {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gitlab {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wpbeginner {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wpforms {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envira {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wheelchair-alt {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wheelchair-alt:before { content: unquote("\"#{ $fa-var-accessible-icon }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-question-circle-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-question-circle-o:before { content: unquote("\"#{ $fa-var-circle-question }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-volume-control-phone:before { content: unquote("\"#{ $fa-var-phone-volume }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-asl-interpreting:before { content: unquote("\"#{ $fa-var-hands-asl-interpreting }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-deafness:before { content: unquote("\"#{ $fa-var-ear-deaf }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hard-of-hearing:before { content: unquote("\"#{ $fa-var-ear-deaf }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-glide {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-glide-g {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-signing:before { content: unquote("\"#{ $fa-var-hands }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo-square:before { content: unquote("\"#{ $fa-var-square-viadeo }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-ghost {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-ghost:before { content: unquote("\"#{ $fa-var-snapchat }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-square {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-square:before { content: unquote("\"#{ $fa-var-square-snapchat }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-first-order {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yoast {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-themeisle {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-official {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-official:before { content: unquote("\"#{ $fa-var-google-plus }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-circle {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-circle:before { content: unquote("\"#{ $fa-var-google-plus }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-font-awesome {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-fa {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-fa:before { content: unquote("\"#{ $fa-var-font-awesome }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-handshake-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-handshake-o:before { content: unquote("\"#{ $fa-var-handshake }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-open-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-open-o:before { content: unquote("\"#{ $fa-var-envelope-open }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linode {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-address-book-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-address-book-o:before { content: unquote("\"#{ $fa-var-address-book }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard:before { content: unquote("\"#{ $fa-var-address-card }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-address-card-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-address-card-o:before { content: unquote("\"#{ $fa-var-address-card }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard-o:before { content: unquote("\"#{ $fa-var-address-card }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-user-circle-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-user-circle-o:before { content: unquote("\"#{ $fa-var-circle-user }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-user-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-user-o:before { content: unquote("\"#{ $fa-var-user }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-id-badge {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license:before { content: unquote("\"#{ $fa-var-id-card }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-id-card-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-id-card-o:before { content: unquote("\"#{ $fa-var-id-card }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license-o:before { content: unquote("\"#{ $fa-var-id-card }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-quora {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-free-code-camp {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-telegram {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-4:before { content: unquote("\"#{ $fa-var-temperature-full }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer:before { content: unquote("\"#{ $fa-var-temperature-full }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-3:before { content: unquote("\"#{ $fa-var-temperature-three-quarters }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-2:before { content: unquote("\"#{ $fa-var-temperature-half }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-1:before { content: unquote("\"#{ $fa-var-temperature-quarter }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-0:before { content: unquote("\"#{ $fa-var-temperature-empty }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bathtub:before { content: unquote("\"#{ $fa-var-bath }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-s15:before { content: unquote("\"#{ $fa-var-bath }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-window-maximize {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-window-restore {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle:before { content: unquote("\"#{ $fa-var-rectangle-xmark }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-window-close-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-window-close-o:before { content: unquote("\"#{ $fa-var-rectangle-xmark }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle-o:before { content: unquote("\"#{ $fa-var-rectangle-xmark }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bandcamp {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-grav {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-etsy {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-imdb {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ravelry {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eercast {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eercast:before { content: unquote("\"#{ $fa-var-sellcast }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snowflake-o {
+ font-family: 'Font Awesome 6 Free';
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snowflake-o:before { content: unquote("\"#{ $fa-var-snowflake }\""); }
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-superpowers {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wpexplorer {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-meetup {
+ font-family: 'Font Awesome 6 Brands';
+ font-weight: 400;
+}
+
diff --git a/public/vendor/fontawesome/scss/_sizing.scss b/public/vendor/fontawesome/scss/_sizing.scss
new file mode 100644
index 0000000000..e171e7df4c
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_sizing.scss
@@ -0,0 +1,16 @@
+// sizing icons
+// -------------------------
+
+// literal magnification scale
+@for $i from 1 through 10 {
+ .#{$fa-css-prefix}-#{$i}x {
+ font-size: $i * 1em;
+ }
+}
+
+// step-based scale (with alignment)
+@each $size, $value in $fa-sizes {
+ .#{$fa-css-prefix}-#{$size} {
+ @include fa-size($value);
+ }
+}
diff --git a/public/vendor/fontawesome/scss/_stacked.scss b/public/vendor/fontawesome/scss/_stacked.scss
new file mode 100644
index 0000000000..d9a9d4e98f
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_stacked.scss
@@ -0,0 +1,32 @@
+// stacking icons
+// -------------------------
+
+.#{$fa-css-prefix}-stack {
+ display: inline-block;
+ height: 2em;
+ line-height: 2em;
+ position: relative;
+ vertical-align: $fa-stack-vertical-align;
+ width: $fa-stack-width;
+}
+
+.#{$fa-css-prefix}-stack-1x,
+.#{$fa-css-prefix}-stack-2x {
+ left: 0;
+ position: absolute;
+ text-align: center;
+ width: 100%;
+ z-index: var(--#{$fa-css-prefix}-stack-z-index, #{$fa-stack-z-index});
+}
+
+.#{$fa-css-prefix}-stack-1x {
+ line-height: inherit;
+}
+
+.#{$fa-css-prefix}-stack-2x {
+ font-size: 2em;
+}
+
+.#{$fa-css-prefix}-inverse {
+ color: var(--#{$fa-css-prefix}-inverse, #{$fa-inverse});
+}
diff --git a/public/vendor/fontawesome/scss/_variables.scss b/public/vendor/fontawesome/scss/_variables.scss
new file mode 100644
index 0000000000..e3a920deab
--- /dev/null
+++ b/public/vendor/fontawesome/scss/_variables.scss
@@ -0,0 +1,4951 @@
+// variables
+// --------------------------
+
+$fa-css-prefix : fa !default;
+$fa-style : 900 !default;
+$fa-style-family : "Font Awesome 6 Free" !default;
+
+$fa-display : inline-block !default;
+
+$fa-fw-width : fa-divide(20em, 16) !default;
+$fa-inverse : #fff !default;
+
+$fa-border-color : #eee !default;
+$fa-border-padding : .2em .25em .15em !default;
+$fa-border-radius : .1em !default;
+$fa-border-style : solid !default;
+$fa-border-width : .08em !default;
+
+$fa-size-scale-2xs : 10 !default;
+$fa-size-scale-xs : 12 !default;
+$fa-size-scale-sm : 14 !default;
+$fa-size-scale-base : 16 !default;
+$fa-size-scale-lg : 20 !default;
+$fa-size-scale-xl : 24 !default;
+$fa-size-scale-2xl : 32 !default;
+
+$fa-sizes: (
+ "2xs" : $fa-size-scale-2xs,
+ "xs" : $fa-size-scale-xs,
+ "sm" : $fa-size-scale-sm,
+ "lg" : $fa-size-scale-lg,
+ "xl" : $fa-size-scale-xl,
+ "2xl" : $fa-size-scale-2xl
+) !default;
+
+$fa-li-width : 2em !default;
+$fa-li-margin : $fa-li-width * fa-divide(5, 4) !default;
+
+$fa-pull-margin : .3em !default;
+
+$fa-primary-opacity : 1 !default;
+$fa-secondary-opacity : .4 !default;
+
+$fa-stack-vertical-align: middle !default;
+$fa-stack-width : ($fa-fw-width * 2) !default;
+$fa-stack-z-index : auto !default;
+
+$fa-font-display : block !default;
+$fa-font-path : "../webfonts" !default;
+
+$fa-var-0: \30;
+$fa-var-1: \31;
+$fa-var-2: \32;
+$fa-var-3: \33;
+$fa-var-4: \34;
+$fa-var-5: \35;
+$fa-var-6: \36;
+$fa-var-7: \37;
+$fa-var-8: \38;
+$fa-var-9: \39;
+$fa-var-fill-drip: \f576;
+$fa-var-arrows-to-circle: \e4bd;
+$fa-var-circle-chevron-right: \f138;
+$fa-var-chevron-circle-right: \f138;
+$fa-var-at: \40;
+$fa-var-trash-can: \f2ed;
+$fa-var-trash-alt: \f2ed;
+$fa-var-text-height: \f034;
+$fa-var-user-xmark: \f235;
+$fa-var-user-times: \f235;
+$fa-var-stethoscope: \f0f1;
+$fa-var-message: \f27a;
+$fa-var-comment-alt: \f27a;
+$fa-var-info: \f129;
+$fa-var-down-left-and-up-right-to-center: \f422;
+$fa-var-compress-alt: \f422;
+$fa-var-explosion: \e4e9;
+$fa-var-file-lines: \f15c;
+$fa-var-file-alt: \f15c;
+$fa-var-file-text: \f15c;
+$fa-var-wave-square: \f83e;
+$fa-var-ring: \f70b;
+$fa-var-building-un: \e4d9;
+$fa-var-dice-three: \f527;
+$fa-var-calendar-days: \f073;
+$fa-var-calendar-alt: \f073;
+$fa-var-anchor-circle-check: \e4aa;
+$fa-var-building-circle-arrow-right: \e4d1;
+$fa-var-volleyball: \f45f;
+$fa-var-volleyball-ball: \f45f;
+$fa-var-arrows-up-to-line: \e4c2;
+$fa-var-sort-down: \f0dd;
+$fa-var-sort-desc: \f0dd;
+$fa-var-circle-minus: \f056;
+$fa-var-minus-circle: \f056;
+$fa-var-door-open: \f52b;
+$fa-var-right-from-bracket: \f2f5;
+$fa-var-sign-out-alt: \f2f5;
+$fa-var-atom: \f5d2;
+$fa-var-soap: \e06e;
+$fa-var-icons: \f86d;
+$fa-var-heart-music-camera-bolt: \f86d;
+$fa-var-microphone-lines-slash: \f539;
+$fa-var-microphone-alt-slash: \f539;
+$fa-var-bridge-circle-check: \e4c9;
+$fa-var-pump-medical: \e06a;
+$fa-var-fingerprint: \f577;
+$fa-var-hand-point-right: \f0a4;
+$fa-var-magnifying-glass-location: \f689;
+$fa-var-search-location: \f689;
+$fa-var-forward-step: \f051;
+$fa-var-step-forward: \f051;
+$fa-var-face-smile-beam: \f5b8;
+$fa-var-smile-beam: \f5b8;
+$fa-var-flag-checkered: \f11e;
+$fa-var-football: \f44e;
+$fa-var-football-ball: \f44e;
+$fa-var-school-circle-exclamation: \e56c;
+$fa-var-crop: \f125;
+$fa-var-angles-down: \f103;
+$fa-var-angle-double-down: \f103;
+$fa-var-users-rectangle: \e594;
+$fa-var-people-roof: \e537;
+$fa-var-people-line: \e534;
+$fa-var-beer-mug-empty: \f0fc;
+$fa-var-beer: \f0fc;
+$fa-var-diagram-predecessor: \e477;
+$fa-var-arrow-up-long: \f176;
+$fa-var-long-arrow-up: \f176;
+$fa-var-fire-flame-simple: \f46a;
+$fa-var-burn: \f46a;
+$fa-var-person: \f183;
+$fa-var-male: \f183;
+$fa-var-laptop: \f109;
+$fa-var-file-csv: \f6dd;
+$fa-var-menorah: \f676;
+$fa-var-truck-plane: \e58f;
+$fa-var-record-vinyl: \f8d9;
+$fa-var-face-grin-stars: \f587;
+$fa-var-grin-stars: \f587;
+$fa-var-bong: \f55c;
+$fa-var-spaghetti-monster-flying: \f67b;
+$fa-var-pastafarianism: \f67b;
+$fa-var-arrow-down-up-across-line: \e4af;
+$fa-var-spoon: \f2e5;
+$fa-var-utensil-spoon: \f2e5;
+$fa-var-jar-wheat: \e517;
+$fa-var-envelopes-bulk: \f674;
+$fa-var-mail-bulk: \f674;
+$fa-var-file-circle-exclamation: \e4eb;
+$fa-var-circle-h: \f47e;
+$fa-var-hospital-symbol: \f47e;
+$fa-var-pager: \f815;
+$fa-var-address-book: \f2b9;
+$fa-var-contact-book: \f2b9;
+$fa-var-strikethrough: \f0cc;
+$fa-var-k: \4b;
+$fa-var-landmark-flag: \e51c;
+$fa-var-pencil: \f303;
+$fa-var-pencil-alt: \f303;
+$fa-var-backward: \f04a;
+$fa-var-caret-right: \f0da;
+$fa-var-comments: \f086;
+$fa-var-paste: \f0ea;
+$fa-var-file-clipboard: \f0ea;
+$fa-var-code-pull-request: \e13c;
+$fa-var-clipboard-list: \f46d;
+$fa-var-truck-ramp-box: \f4de;
+$fa-var-truck-loading: \f4de;
+$fa-var-user-check: \f4fc;
+$fa-var-vial-virus: \e597;
+$fa-var-sheet-plastic: \e571;
+$fa-var-blog: \f781;
+$fa-var-user-ninja: \f504;
+$fa-var-person-arrow-up-from-line: \e539;
+$fa-var-scroll-torah: \f6a0;
+$fa-var-torah: \f6a0;
+$fa-var-broom-ball: \f458;
+$fa-var-quidditch: \f458;
+$fa-var-quidditch-broom-ball: \f458;
+$fa-var-toggle-off: \f204;
+$fa-var-box-archive: \f187;
+$fa-var-archive: \f187;
+$fa-var-person-drowning: \e545;
+$fa-var-arrow-down-9-1: \f886;
+$fa-var-sort-numeric-desc: \f886;
+$fa-var-sort-numeric-down-alt: \f886;
+$fa-var-face-grin-tongue-squint: \f58a;
+$fa-var-grin-tongue-squint: \f58a;
+$fa-var-spray-can: \f5bd;
+$fa-var-truck-monster: \f63b;
+$fa-var-w: \57;
+$fa-var-earth-africa: \f57c;
+$fa-var-globe-africa: \f57c;
+$fa-var-rainbow: \f75b;
+$fa-var-circle-notch: \f1ce;
+$fa-var-tablet-screen-button: \f3fa;
+$fa-var-tablet-alt: \f3fa;
+$fa-var-paw: \f1b0;
+$fa-var-cloud: \f0c2;
+$fa-var-trowel-bricks: \e58a;
+$fa-var-face-flushed: \f579;
+$fa-var-flushed: \f579;
+$fa-var-hospital-user: \f80d;
+$fa-var-tent-arrow-left-right: \e57f;
+$fa-var-gavel: \f0e3;
+$fa-var-legal: \f0e3;
+$fa-var-binoculars: \f1e5;
+$fa-var-microphone-slash: \f131;
+$fa-var-box-tissue: \e05b;
+$fa-var-motorcycle: \f21c;
+$fa-var-bell-concierge: \f562;
+$fa-var-concierge-bell: \f562;
+$fa-var-pen-ruler: \f5ae;
+$fa-var-pencil-ruler: \f5ae;
+$fa-var-people-arrows: \e068;
+$fa-var-people-arrows-left-right: \e068;
+$fa-var-mars-and-venus-burst: \e523;
+$fa-var-square-caret-right: \f152;
+$fa-var-caret-square-right: \f152;
+$fa-var-scissors: \f0c4;
+$fa-var-cut: \f0c4;
+$fa-var-sun-plant-wilt: \e57a;
+$fa-var-toilets-portable: \e584;
+$fa-var-hockey-puck: \f453;
+$fa-var-table: \f0ce;
+$fa-var-magnifying-glass-arrow-right: \e521;
+$fa-var-tachograph-digital: \f566;
+$fa-var-digital-tachograph: \f566;
+$fa-var-users-slash: \e073;
+$fa-var-clover: \e139;
+$fa-var-reply: \f3e5;
+$fa-var-mail-reply: \f3e5;
+$fa-var-star-and-crescent: \f699;
+$fa-var-house-fire: \e50c;
+$fa-var-square-minus: \f146;
+$fa-var-minus-square: \f146;
+$fa-var-helicopter: \f533;
+$fa-var-compass: \f14e;
+$fa-var-square-caret-down: \f150;
+$fa-var-caret-square-down: \f150;
+$fa-var-file-circle-question: \e4ef;
+$fa-var-laptop-code: \f5fc;
+$fa-var-swatchbook: \f5c3;
+$fa-var-prescription-bottle: \f485;
+$fa-var-bars: \f0c9;
+$fa-var-navicon: \f0c9;
+$fa-var-people-group: \e533;
+$fa-var-hourglass-end: \f253;
+$fa-var-hourglass-3: \f253;
+$fa-var-heart-crack: \f7a9;
+$fa-var-heart-broken: \f7a9;
+$fa-var-square-up-right: \f360;
+$fa-var-external-link-square-alt: \f360;
+$fa-var-face-kiss-beam: \f597;
+$fa-var-kiss-beam: \f597;
+$fa-var-film: \f008;
+$fa-var-ruler-horizontal: \f547;
+$fa-var-people-robbery: \e536;
+$fa-var-lightbulb: \f0eb;
+$fa-var-caret-left: \f0d9;
+$fa-var-circle-exclamation: \f06a;
+$fa-var-exclamation-circle: \f06a;
+$fa-var-school-circle-xmark: \e56d;
+$fa-var-arrow-right-from-bracket: \f08b;
+$fa-var-sign-out: \f08b;
+$fa-var-circle-chevron-down: \f13a;
+$fa-var-chevron-circle-down: \f13a;
+$fa-var-unlock-keyhole: \f13e;
+$fa-var-unlock-alt: \f13e;
+$fa-var-cloud-showers-heavy: \f740;
+$fa-var-headphones-simple: \f58f;
+$fa-var-headphones-alt: \f58f;
+$fa-var-sitemap: \f0e8;
+$fa-var-circle-dollar-to-slot: \f4b9;
+$fa-var-donate: \f4b9;
+$fa-var-memory: \f538;
+$fa-var-road-spikes: \e568;
+$fa-var-fire-burner: \e4f1;
+$fa-var-flag: \f024;
+$fa-var-hanukiah: \f6e6;
+$fa-var-feather: \f52d;
+$fa-var-volume-low: \f027;
+$fa-var-volume-down: \f027;
+$fa-var-comment-slash: \f4b3;
+$fa-var-cloud-sun-rain: \f743;
+$fa-var-compress: \f066;
+$fa-var-wheat-awn: \e2cd;
+$fa-var-wheat-alt: \e2cd;
+$fa-var-ankh: \f644;
+$fa-var-hands-holding-child: \e4fa;
+$fa-var-asterisk: \2a;
+$fa-var-square-check: \f14a;
+$fa-var-check-square: \f14a;
+$fa-var-peseta-sign: \e221;
+$fa-var-heading: \f1dc;
+$fa-var-header: \f1dc;
+$fa-var-ghost: \f6e2;
+$fa-var-list: \f03a;
+$fa-var-list-squares: \f03a;
+$fa-var-square-phone-flip: \f87b;
+$fa-var-phone-square-alt: \f87b;
+$fa-var-cart-plus: \f217;
+$fa-var-gamepad: \f11b;
+$fa-var-circle-dot: \f192;
+$fa-var-dot-circle: \f192;
+$fa-var-face-dizzy: \f567;
+$fa-var-dizzy: \f567;
+$fa-var-egg: \f7fb;
+$fa-var-house-medical-circle-xmark: \e513;
+$fa-var-campground: \f6bb;
+$fa-var-folder-plus: \f65e;
+$fa-var-futbol: \f1e3;
+$fa-var-futbol-ball: \f1e3;
+$fa-var-soccer-ball: \f1e3;
+$fa-var-paintbrush: \f1fc;
+$fa-var-paint-brush: \f1fc;
+$fa-var-lock: \f023;
+$fa-var-gas-pump: \f52f;
+$fa-var-hot-tub-person: \f593;
+$fa-var-hot-tub: \f593;
+$fa-var-map-location: \f59f;
+$fa-var-map-marked: \f59f;
+$fa-var-house-flood-water: \e50e;
+$fa-var-tree: \f1bb;
+$fa-var-bridge-lock: \e4cc;
+$fa-var-sack-dollar: \f81d;
+$fa-var-pen-to-square: \f044;
+$fa-var-edit: \f044;
+$fa-var-car-side: \f5e4;
+$fa-var-share-nodes: \f1e0;
+$fa-var-share-alt: \f1e0;
+$fa-var-heart-circle-minus: \e4ff;
+$fa-var-hourglass-half: \f252;
+$fa-var-hourglass-2: \f252;
+$fa-var-microscope: \f610;
+$fa-var-sink: \e06d;
+$fa-var-bag-shopping: \f290;
+$fa-var-shopping-bag: \f290;
+$fa-var-arrow-down-z-a: \f881;
+$fa-var-sort-alpha-desc: \f881;
+$fa-var-sort-alpha-down-alt: \f881;
+$fa-var-mitten: \f7b5;
+$fa-var-person-rays: \e54d;
+$fa-var-users: \f0c0;
+$fa-var-eye-slash: \f070;
+$fa-var-flask-vial: \e4f3;
+$fa-var-hand: \f256;
+$fa-var-hand-paper: \f256;
+$fa-var-om: \f679;
+$fa-var-worm: \e599;
+$fa-var-house-circle-xmark: \e50b;
+$fa-var-plug: \f1e6;
+$fa-var-chevron-up: \f077;
+$fa-var-hand-spock: \f259;
+$fa-var-stopwatch: \f2f2;
+$fa-var-face-kiss: \f596;
+$fa-var-kiss: \f596;
+$fa-var-bridge-circle-xmark: \e4cb;
+$fa-var-face-grin-tongue: \f589;
+$fa-var-grin-tongue: \f589;
+$fa-var-chess-bishop: \f43a;
+$fa-var-face-grin-wink: \f58c;
+$fa-var-grin-wink: \f58c;
+$fa-var-ear-deaf: \f2a4;
+$fa-var-deaf: \f2a4;
+$fa-var-deafness: \f2a4;
+$fa-var-hard-of-hearing: \f2a4;
+$fa-var-road-circle-check: \e564;
+$fa-var-dice-five: \f523;
+$fa-var-square-rss: \f143;
+$fa-var-rss-square: \f143;
+$fa-var-land-mine-on: \e51b;
+$fa-var-i-cursor: \f246;
+$fa-var-stamp: \f5bf;
+$fa-var-stairs: \e289;
+$fa-var-i: \49;
+$fa-var-hryvnia-sign: \f6f2;
+$fa-var-hryvnia: \f6f2;
+$fa-var-pills: \f484;
+$fa-var-face-grin-wide: \f581;
+$fa-var-grin-alt: \f581;
+$fa-var-tooth: \f5c9;
+$fa-var-v: \56;
+$fa-var-bicycle: \f206;
+$fa-var-staff-snake: \e579;
+$fa-var-rod-asclepius: \e579;
+$fa-var-rod-snake: \e579;
+$fa-var-staff-aesculapius: \e579;
+$fa-var-head-side-cough-slash: \e062;
+$fa-var-truck-medical: \f0f9;
+$fa-var-ambulance: \f0f9;
+$fa-var-wheat-awn-circle-exclamation: \e598;
+$fa-var-snowman: \f7d0;
+$fa-var-mortar-pestle: \f5a7;
+$fa-var-road-barrier: \e562;
+$fa-var-school: \f549;
+$fa-var-igloo: \f7ae;
+$fa-var-joint: \f595;
+$fa-var-angle-right: \f105;
+$fa-var-horse: \f6f0;
+$fa-var-q: \51;
+$fa-var-g: \47;
+$fa-var-notes-medical: \f481;
+$fa-var-temperature-half: \f2c9;
+$fa-var-temperature-2: \f2c9;
+$fa-var-thermometer-2: \f2c9;
+$fa-var-thermometer-half: \f2c9;
+$fa-var-dong-sign: \e169;
+$fa-var-capsules: \f46b;
+$fa-var-poo-storm: \f75a;
+$fa-var-poo-bolt: \f75a;
+$fa-var-face-frown-open: \f57a;
+$fa-var-frown-open: \f57a;
+$fa-var-hand-point-up: \f0a6;
+$fa-var-money-bill: \f0d6;
+$fa-var-bookmark: \f02e;
+$fa-var-align-justify: \f039;
+$fa-var-umbrella-beach: \f5ca;
+$fa-var-helmet-un: \e503;
+$fa-var-bullseye: \f140;
+$fa-var-bacon: \f7e5;
+$fa-var-hand-point-down: \f0a7;
+$fa-var-arrow-up-from-bracket: \e09a;
+$fa-var-folder: \f07b;
+$fa-var-folder-blank: \f07b;
+$fa-var-file-waveform: \f478;
+$fa-var-file-medical-alt: \f478;
+$fa-var-radiation: \f7b9;
+$fa-var-chart-simple: \e473;
+$fa-var-mars-stroke: \f229;
+$fa-var-vial: \f492;
+$fa-var-gauge: \f624;
+$fa-var-dashboard: \f624;
+$fa-var-gauge-med: \f624;
+$fa-var-tachometer-alt-average: \f624;
+$fa-var-wand-magic-sparkles: \e2ca;
+$fa-var-magic-wand-sparkles: \e2ca;
+$fa-var-e: \45;
+$fa-var-pen-clip: \f305;
+$fa-var-pen-alt: \f305;
+$fa-var-bridge-circle-exclamation: \e4ca;
+$fa-var-user: \f007;
+$fa-var-school-circle-check: \e56b;
+$fa-var-dumpster: \f793;
+$fa-var-van-shuttle: \f5b6;
+$fa-var-shuttle-van: \f5b6;
+$fa-var-building-user: \e4da;
+$fa-var-square-caret-left: \f191;
+$fa-var-caret-square-left: \f191;
+$fa-var-highlighter: \f591;
+$fa-var-key: \f084;
+$fa-var-bullhorn: \f0a1;
+$fa-var-globe: \f0ac;
+$fa-var-synagogue: \f69b;
+$fa-var-person-half-dress: \e548;
+$fa-var-road-bridge: \e563;
+$fa-var-location-arrow: \f124;
+$fa-var-c: \43;
+$fa-var-tablet-button: \f10a;
+$fa-var-building-lock: \e4d6;
+$fa-var-pizza-slice: \f818;
+$fa-var-money-bill-wave: \f53a;
+$fa-var-chart-area: \f1fe;
+$fa-var-area-chart: \f1fe;
+$fa-var-house-flag: \e50d;
+$fa-var-person-circle-minus: \e540;
+$fa-var-ban: \f05e;
+$fa-var-cancel: \f05e;
+$fa-var-camera-rotate: \e0d8;
+$fa-var-spray-can-sparkles: \f5d0;
+$fa-var-air-freshener: \f5d0;
+$fa-var-star: \f005;
+$fa-var-repeat: \f363;
+$fa-var-cross: \f654;
+$fa-var-box: \f466;
+$fa-var-venus-mars: \f228;
+$fa-var-arrow-pointer: \f245;
+$fa-var-mouse-pointer: \f245;
+$fa-var-maximize: \f31e;
+$fa-var-expand-arrows-alt: \f31e;
+$fa-var-charging-station: \f5e7;
+$fa-var-shapes: \f61f;
+$fa-var-triangle-circle-square: \f61f;
+$fa-var-shuffle: \f074;
+$fa-var-random: \f074;
+$fa-var-person-running: \f70c;
+$fa-var-running: \f70c;
+$fa-var-mobile-retro: \e527;
+$fa-var-grip-lines-vertical: \f7a5;
+$fa-var-spider: \f717;
+$fa-var-hands-bound: \e4f9;
+$fa-var-file-invoice-dollar: \f571;
+$fa-var-plane-circle-exclamation: \e556;
+$fa-var-x-ray: \f497;
+$fa-var-spell-check: \f891;
+$fa-var-slash: \f715;
+$fa-var-computer-mouse: \f8cc;
+$fa-var-mouse: \f8cc;
+$fa-var-arrow-right-to-bracket: \f090;
+$fa-var-sign-in: \f090;
+$fa-var-shop-slash: \e070;
+$fa-var-store-alt-slash: \e070;
+$fa-var-server: \f233;
+$fa-var-virus-covid-slash: \e4a9;
+$fa-var-shop-lock: \e4a5;
+$fa-var-hourglass-start: \f251;
+$fa-var-hourglass-1: \f251;
+$fa-var-blender-phone: \f6b6;
+$fa-var-building-wheat: \e4db;
+$fa-var-person-breastfeeding: \e53a;
+$fa-var-right-to-bracket: \f2f6;
+$fa-var-sign-in-alt: \f2f6;
+$fa-var-venus: \f221;
+$fa-var-passport: \f5ab;
+$fa-var-heart-pulse: \f21e;
+$fa-var-heartbeat: \f21e;
+$fa-var-people-carry-box: \f4ce;
+$fa-var-people-carry: \f4ce;
+$fa-var-temperature-high: \f769;
+$fa-var-microchip: \f2db;
+$fa-var-crown: \f521;
+$fa-var-weight-hanging: \f5cd;
+$fa-var-xmarks-lines: \e59a;
+$fa-var-file-prescription: \f572;
+$fa-var-weight-scale: \f496;
+$fa-var-weight: \f496;
+$fa-var-user-group: \f500;
+$fa-var-user-friends: \f500;
+$fa-var-arrow-up-a-z: \f15e;
+$fa-var-sort-alpha-up: \f15e;
+$fa-var-chess-knight: \f441;
+$fa-var-face-laugh-squint: \f59b;
+$fa-var-laugh-squint: \f59b;
+$fa-var-wheelchair: \f193;
+$fa-var-circle-arrow-up: \f0aa;
+$fa-var-arrow-circle-up: \f0aa;
+$fa-var-toggle-on: \f205;
+$fa-var-person-walking: \f554;
+$fa-var-walking: \f554;
+$fa-var-l: \4c;
+$fa-var-fire: \f06d;
+$fa-var-bed-pulse: \f487;
+$fa-var-procedures: \f487;
+$fa-var-shuttle-space: \f197;
+$fa-var-space-shuttle: \f197;
+$fa-var-face-laugh: \f599;
+$fa-var-laugh: \f599;
+$fa-var-folder-open: \f07c;
+$fa-var-heart-circle-plus: \e500;
+$fa-var-code-fork: \e13b;
+$fa-var-city: \f64f;
+$fa-var-microphone-lines: \f3c9;
+$fa-var-microphone-alt: \f3c9;
+$fa-var-pepper-hot: \f816;
+$fa-var-unlock: \f09c;
+$fa-var-colon-sign: \e140;
+$fa-var-headset: \f590;
+$fa-var-store-slash: \e071;
+$fa-var-road-circle-xmark: \e566;
+$fa-var-user-minus: \f503;
+$fa-var-mars-stroke-up: \f22a;
+$fa-var-mars-stroke-v: \f22a;
+$fa-var-champagne-glasses: \f79f;
+$fa-var-glass-cheers: \f79f;
+$fa-var-clipboard: \f328;
+$fa-var-house-circle-exclamation: \e50a;
+$fa-var-file-arrow-up: \f574;
+$fa-var-file-upload: \f574;
+$fa-var-wifi: \f1eb;
+$fa-var-wifi-3: \f1eb;
+$fa-var-wifi-strong: \f1eb;
+$fa-var-bath: \f2cd;
+$fa-var-bathtub: \f2cd;
+$fa-var-underline: \f0cd;
+$fa-var-user-pen: \f4ff;
+$fa-var-user-edit: \f4ff;
+$fa-var-signature: \f5b7;
+$fa-var-stroopwafel: \f551;
+$fa-var-bold: \f032;
+$fa-var-anchor-lock: \e4ad;
+$fa-var-building-ngo: \e4d7;
+$fa-var-manat-sign: \e1d5;
+$fa-var-not-equal: \f53e;
+$fa-var-border-top-left: \f853;
+$fa-var-border-style: \f853;
+$fa-var-map-location-dot: \f5a0;
+$fa-var-map-marked-alt: \f5a0;
+$fa-var-jedi: \f669;
+$fa-var-square-poll-vertical: \f681;
+$fa-var-poll: \f681;
+$fa-var-mug-hot: \f7b6;
+$fa-var-car-battery: \f5df;
+$fa-var-battery-car: \f5df;
+$fa-var-gift: \f06b;
+$fa-var-dice-two: \f528;
+$fa-var-chess-queen: \f445;
+$fa-var-glasses: \f530;
+$fa-var-chess-board: \f43c;
+$fa-var-building-circle-check: \e4d2;
+$fa-var-person-chalkboard: \e53d;
+$fa-var-mars-stroke-right: \f22b;
+$fa-var-mars-stroke-h: \f22b;
+$fa-var-hand-back-fist: \f255;
+$fa-var-hand-rock: \f255;
+$fa-var-square-caret-up: \f151;
+$fa-var-caret-square-up: \f151;
+$fa-var-cloud-showers-water: \e4e4;
+$fa-var-chart-bar: \f080;
+$fa-var-bar-chart: \f080;
+$fa-var-hands-bubbles: \e05e;
+$fa-var-hands-wash: \e05e;
+$fa-var-less-than-equal: \f537;
+$fa-var-train: \f238;
+$fa-var-eye-low-vision: \f2a8;
+$fa-var-low-vision: \f2a8;
+$fa-var-crow: \f520;
+$fa-var-sailboat: \e445;
+$fa-var-window-restore: \f2d2;
+$fa-var-square-plus: \f0fe;
+$fa-var-plus-square: \f0fe;
+$fa-var-torii-gate: \f6a1;
+$fa-var-frog: \f52e;
+$fa-var-bucket: \e4cf;
+$fa-var-image: \f03e;
+$fa-var-microphone: \f130;
+$fa-var-cow: \f6c8;
+$fa-var-caret-up: \f0d8;
+$fa-var-screwdriver: \f54a;
+$fa-var-folder-closed: \e185;
+$fa-var-house-tsunami: \e515;
+$fa-var-square-nfi: \e576;
+$fa-var-arrow-up-from-ground-water: \e4b5;
+$fa-var-martini-glass: \f57b;
+$fa-var-glass-martini-alt: \f57b;
+$fa-var-rotate-left: \f2ea;
+$fa-var-rotate-back: \f2ea;
+$fa-var-rotate-backward: \f2ea;
+$fa-var-undo-alt: \f2ea;
+$fa-var-table-columns: \f0db;
+$fa-var-columns: \f0db;
+$fa-var-lemon: \f094;
+$fa-var-head-side-mask: \e063;
+$fa-var-handshake: \f2b5;
+$fa-var-gem: \f3a5;
+$fa-var-dolly: \f472;
+$fa-var-dolly-box: \f472;
+$fa-var-smoking: \f48d;
+$fa-var-minimize: \f78c;
+$fa-var-compress-arrows-alt: \f78c;
+$fa-var-monument: \f5a6;
+$fa-var-snowplow: \f7d2;
+$fa-var-angles-right: \f101;
+$fa-var-angle-double-right: \f101;
+$fa-var-cannabis: \f55f;
+$fa-var-circle-play: \f144;
+$fa-var-play-circle: \f144;
+$fa-var-tablets: \f490;
+$fa-var-ethernet: \f796;
+$fa-var-euro-sign: \f153;
+$fa-var-eur: \f153;
+$fa-var-euro: \f153;
+$fa-var-chair: \f6c0;
+$fa-var-circle-check: \f058;
+$fa-var-check-circle: \f058;
+$fa-var-circle-stop: \f28d;
+$fa-var-stop-circle: \f28d;
+$fa-var-compass-drafting: \f568;
+$fa-var-drafting-compass: \f568;
+$fa-var-plate-wheat: \e55a;
+$fa-var-icicles: \f7ad;
+$fa-var-person-shelter: \e54f;
+$fa-var-neuter: \f22c;
+$fa-var-id-badge: \f2c1;
+$fa-var-marker: \f5a1;
+$fa-var-face-laugh-beam: \f59a;
+$fa-var-laugh-beam: \f59a;
+$fa-var-helicopter-symbol: \e502;
+$fa-var-universal-access: \f29a;
+$fa-var-circle-chevron-up: \f139;
+$fa-var-chevron-circle-up: \f139;
+$fa-var-lari-sign: \e1c8;
+$fa-var-volcano: \f770;
+$fa-var-person-walking-dashed-line-arrow-right: \e553;
+$fa-var-sterling-sign: \f154;
+$fa-var-gbp: \f154;
+$fa-var-pound-sign: \f154;
+$fa-var-viruses: \e076;
+$fa-var-square-person-confined: \e577;
+$fa-var-user-tie: \f508;
+$fa-var-arrow-down-long: \f175;
+$fa-var-long-arrow-down: \f175;
+$fa-var-tent-arrow-down-to-line: \e57e;
+$fa-var-certificate: \f0a3;
+$fa-var-reply-all: \f122;
+$fa-var-mail-reply-all: \f122;
+$fa-var-suitcase: \f0f2;
+$fa-var-person-skating: \f7c5;
+$fa-var-skating: \f7c5;
+$fa-var-filter-circle-dollar: \f662;
+$fa-var-funnel-dollar: \f662;
+$fa-var-camera-retro: \f083;
+$fa-var-circle-arrow-down: \f0ab;
+$fa-var-arrow-circle-down: \f0ab;
+$fa-var-file-import: \f56f;
+$fa-var-arrow-right-to-file: \f56f;
+$fa-var-square-arrow-up-right: \f14c;
+$fa-var-external-link-square: \f14c;
+$fa-var-box-open: \f49e;
+$fa-var-scroll: \f70e;
+$fa-var-spa: \f5bb;
+$fa-var-location-pin-lock: \e51f;
+$fa-var-pause: \f04c;
+$fa-var-hill-avalanche: \e507;
+$fa-var-temperature-empty: \f2cb;
+$fa-var-temperature-0: \f2cb;
+$fa-var-thermometer-0: \f2cb;
+$fa-var-thermometer-empty: \f2cb;
+$fa-var-bomb: \f1e2;
+$fa-var-registered: \f25d;
+$fa-var-address-card: \f2bb;
+$fa-var-contact-card: \f2bb;
+$fa-var-vcard: \f2bb;
+$fa-var-scale-unbalanced-flip: \f516;
+$fa-var-balance-scale-right: \f516;
+$fa-var-subscript: \f12c;
+$fa-var-diamond-turn-right: \f5eb;
+$fa-var-directions: \f5eb;
+$fa-var-burst: \e4dc;
+$fa-var-house-laptop: \e066;
+$fa-var-laptop-house: \e066;
+$fa-var-face-tired: \f5c8;
+$fa-var-tired: \f5c8;
+$fa-var-money-bills: \e1f3;
+$fa-var-smog: \f75f;
+$fa-var-crutch: \f7f7;
+$fa-var-cloud-arrow-up: \f0ee;
+$fa-var-cloud-upload: \f0ee;
+$fa-var-cloud-upload-alt: \f0ee;
+$fa-var-palette: \f53f;
+$fa-var-arrows-turn-right: \e4c0;
+$fa-var-vest: \e085;
+$fa-var-ferry: \e4ea;
+$fa-var-arrows-down-to-people: \e4b9;
+$fa-var-seedling: \f4d8;
+$fa-var-sprout: \f4d8;
+$fa-var-left-right: \f337;
+$fa-var-arrows-alt-h: \f337;
+$fa-var-boxes-packing: \e4c7;
+$fa-var-circle-arrow-left: \f0a8;
+$fa-var-arrow-circle-left: \f0a8;
+$fa-var-group-arrows-rotate: \e4f6;
+$fa-var-bowl-food: \e4c6;
+$fa-var-candy-cane: \f786;
+$fa-var-arrow-down-wide-short: \f160;
+$fa-var-sort-amount-asc: \f160;
+$fa-var-sort-amount-down: \f160;
+$fa-var-cloud-bolt: \f76c;
+$fa-var-thunderstorm: \f76c;
+$fa-var-text-slash: \f87d;
+$fa-var-remove-format: \f87d;
+$fa-var-face-smile-wink: \f4da;
+$fa-var-smile-wink: \f4da;
+$fa-var-file-word: \f1c2;
+$fa-var-file-powerpoint: \f1c4;
+$fa-var-arrows-left-right: \f07e;
+$fa-var-arrows-h: \f07e;
+$fa-var-house-lock: \e510;
+$fa-var-cloud-arrow-down: \f0ed;
+$fa-var-cloud-download: \f0ed;
+$fa-var-cloud-download-alt: \f0ed;
+$fa-var-children: \e4e1;
+$fa-var-chalkboard: \f51b;
+$fa-var-blackboard: \f51b;
+$fa-var-user-large-slash: \f4fa;
+$fa-var-user-alt-slash: \f4fa;
+$fa-var-envelope-open: \f2b6;
+$fa-var-handshake-simple-slash: \e05f;
+$fa-var-handshake-alt-slash: \e05f;
+$fa-var-mattress-pillow: \e525;
+$fa-var-guarani-sign: \e19a;
+$fa-var-arrows-rotate: \f021;
+$fa-var-refresh: \f021;
+$fa-var-sync: \f021;
+$fa-var-fire-extinguisher: \f134;
+$fa-var-cruzeiro-sign: \e152;
+$fa-var-greater-than-equal: \f532;
+$fa-var-shield-halved: \f3ed;
+$fa-var-shield-alt: \f3ed;
+$fa-var-book-atlas: \f558;
+$fa-var-atlas: \f558;
+$fa-var-virus: \e074;
+$fa-var-envelope-circle-check: \e4e8;
+$fa-var-layer-group: \f5fd;
+$fa-var-arrows-to-dot: \e4be;
+$fa-var-archway: \f557;
+$fa-var-heart-circle-check: \e4fd;
+$fa-var-house-chimney-crack: \f6f1;
+$fa-var-house-damage: \f6f1;
+$fa-var-file-zipper: \f1c6;
+$fa-var-file-archive: \f1c6;
+$fa-var-square: \f0c8;
+$fa-var-martini-glass-empty: \f000;
+$fa-var-glass-martini: \f000;
+$fa-var-couch: \f4b8;
+$fa-var-cedi-sign: \e0df;
+$fa-var-italic: \f033;
+$fa-var-church: \f51d;
+$fa-var-comments-dollar: \f653;
+$fa-var-democrat: \f747;
+$fa-var-z: \5a;
+$fa-var-person-skiing: \f7c9;
+$fa-var-skiing: \f7c9;
+$fa-var-road-lock: \e567;
+$fa-var-a: \41;
+$fa-var-temperature-arrow-down: \e03f;
+$fa-var-temperature-down: \e03f;
+$fa-var-feather-pointed: \f56b;
+$fa-var-feather-alt: \f56b;
+$fa-var-p: \50;
+$fa-var-snowflake: \f2dc;
+$fa-var-newspaper: \f1ea;
+$fa-var-rectangle-ad: \f641;
+$fa-var-ad: \f641;
+$fa-var-circle-arrow-right: \f0a9;
+$fa-var-arrow-circle-right: \f0a9;
+$fa-var-filter-circle-xmark: \e17b;
+$fa-var-locust: \e520;
+$fa-var-sort: \f0dc;
+$fa-var-unsorted: \f0dc;
+$fa-var-list-ol: \f0cb;
+$fa-var-list-1-2: \f0cb;
+$fa-var-list-numeric: \f0cb;
+$fa-var-person-dress-burst: \e544;
+$fa-var-money-check-dollar: \f53d;
+$fa-var-money-check-alt: \f53d;
+$fa-var-vector-square: \f5cb;
+$fa-var-bread-slice: \f7ec;
+$fa-var-language: \f1ab;
+$fa-var-face-kiss-wink-heart: \f598;
+$fa-var-kiss-wink-heart: \f598;
+$fa-var-filter: \f0b0;
+$fa-var-question: \3f;
+$fa-var-file-signature: \f573;
+$fa-var-up-down-left-right: \f0b2;
+$fa-var-arrows-alt: \f0b2;
+$fa-var-house-chimney-user: \e065;
+$fa-var-hand-holding-heart: \f4be;
+$fa-var-puzzle-piece: \f12e;
+$fa-var-money-check: \f53c;
+$fa-var-star-half-stroke: \f5c0;
+$fa-var-star-half-alt: \f5c0;
+$fa-var-code: \f121;
+$fa-var-whiskey-glass: \f7a0;
+$fa-var-glass-whiskey: \f7a0;
+$fa-var-building-circle-exclamation: \e4d3;
+$fa-var-magnifying-glass-chart: \e522;
+$fa-var-arrow-up-right-from-square: \f08e;
+$fa-var-external-link: \f08e;
+$fa-var-cubes-stacked: \e4e6;
+$fa-var-won-sign: \f159;
+$fa-var-krw: \f159;
+$fa-var-won: \f159;
+$fa-var-virus-covid: \e4a8;
+$fa-var-austral-sign: \e0a9;
+$fa-var-f: \46;
+$fa-var-leaf: \f06c;
+$fa-var-road: \f018;
+$fa-var-taxi: \f1ba;
+$fa-var-cab: \f1ba;
+$fa-var-person-circle-plus: \e541;
+$fa-var-chart-pie: \f200;
+$fa-var-pie-chart: \f200;
+$fa-var-bolt-lightning: \e0b7;
+$fa-var-sack-xmark: \e56a;
+$fa-var-file-excel: \f1c3;
+$fa-var-file-contract: \f56c;
+$fa-var-fish-fins: \e4f2;
+$fa-var-building-flag: \e4d5;
+$fa-var-face-grin-beam: \f582;
+$fa-var-grin-beam: \f582;
+$fa-var-object-ungroup: \f248;
+$fa-var-poop: \f619;
+$fa-var-location-pin: \f041;
+$fa-var-map-marker: \f041;
+$fa-var-kaaba: \f66b;
+$fa-var-toilet-paper: \f71e;
+$fa-var-helmet-safety: \f807;
+$fa-var-hard-hat: \f807;
+$fa-var-hat-hard: \f807;
+$fa-var-eject: \f052;
+$fa-var-circle-right: \f35a;
+$fa-var-arrow-alt-circle-right: \f35a;
+$fa-var-plane-circle-check: \e555;
+$fa-var-face-rolling-eyes: \f5a5;
+$fa-var-meh-rolling-eyes: \f5a5;
+$fa-var-object-group: \f247;
+$fa-var-chart-line: \f201;
+$fa-var-line-chart: \f201;
+$fa-var-mask-ventilator: \e524;
+$fa-var-arrow-right: \f061;
+$fa-var-signs-post: \f277;
+$fa-var-map-signs: \f277;
+$fa-var-cash-register: \f788;
+$fa-var-person-circle-question: \e542;
+$fa-var-h: \48;
+$fa-var-tarp: \e57b;
+$fa-var-screwdriver-wrench: \f7d9;
+$fa-var-tools: \f7d9;
+$fa-var-arrows-to-eye: \e4bf;
+$fa-var-plug-circle-bolt: \e55b;
+$fa-var-heart: \f004;
+$fa-var-mars-and-venus: \f224;
+$fa-var-house-user: \e1b0;
+$fa-var-home-user: \e1b0;
+$fa-var-dumpster-fire: \f794;
+$fa-var-house-crack: \e3b1;
+$fa-var-martini-glass-citrus: \f561;
+$fa-var-cocktail: \f561;
+$fa-var-face-surprise: \f5c2;
+$fa-var-surprise: \f5c2;
+$fa-var-bottle-water: \e4c5;
+$fa-var-circle-pause: \f28b;
+$fa-var-pause-circle: \f28b;
+$fa-var-toilet-paper-slash: \e072;
+$fa-var-apple-whole: \f5d1;
+$fa-var-apple-alt: \f5d1;
+$fa-var-kitchen-set: \e51a;
+$fa-var-r: \52;
+$fa-var-temperature-quarter: \f2ca;
+$fa-var-temperature-1: \f2ca;
+$fa-var-thermometer-1: \f2ca;
+$fa-var-thermometer-quarter: \f2ca;
+$fa-var-cube: \f1b2;
+$fa-var-bitcoin-sign: \e0b4;
+$fa-var-shield-dog: \e573;
+$fa-var-solar-panel: \f5ba;
+$fa-var-lock-open: \f3c1;
+$fa-var-elevator: \e16d;
+$fa-var-money-bill-transfer: \e528;
+$fa-var-money-bill-trend-up: \e529;
+$fa-var-house-flood-water-circle-arrow-right: \e50f;
+$fa-var-square-poll-horizontal: \f682;
+$fa-var-poll-h: \f682;
+$fa-var-circle: \f111;
+$fa-var-backward-fast: \f049;
+$fa-var-fast-backward: \f049;
+$fa-var-recycle: \f1b8;
+$fa-var-user-astronaut: \f4fb;
+$fa-var-plane-slash: \e069;
+$fa-var-trademark: \f25c;
+$fa-var-basketball: \f434;
+$fa-var-basketball-ball: \f434;
+$fa-var-satellite-dish: \f7c0;
+$fa-var-circle-up: \f35b;
+$fa-var-arrow-alt-circle-up: \f35b;
+$fa-var-mobile-screen-button: \f3cd;
+$fa-var-mobile-alt: \f3cd;
+$fa-var-volume-high: \f028;
+$fa-var-volume-up: \f028;
+$fa-var-users-rays: \e593;
+$fa-var-wallet: \f555;
+$fa-var-clipboard-check: \f46c;
+$fa-var-file-audio: \f1c7;
+$fa-var-burger: \f805;
+$fa-var-hamburger: \f805;
+$fa-var-wrench: \f0ad;
+$fa-var-bugs: \e4d0;
+$fa-var-rupee-sign: \f156;
+$fa-var-rupee: \f156;
+$fa-var-file-image: \f1c5;
+$fa-var-circle-question: \f059;
+$fa-var-question-circle: \f059;
+$fa-var-plane-departure: \f5b0;
+$fa-var-handshake-slash: \e060;
+$fa-var-book-bookmark: \e0bb;
+$fa-var-code-branch: \f126;
+$fa-var-hat-cowboy: \f8c0;
+$fa-var-bridge: \e4c8;
+$fa-var-phone-flip: \f879;
+$fa-var-phone-alt: \f879;
+$fa-var-truck-front: \e2b7;
+$fa-var-cat: \f6be;
+$fa-var-anchor-circle-exclamation: \e4ab;
+$fa-var-truck-field: \e58d;
+$fa-var-route: \f4d7;
+$fa-var-clipboard-question: \e4e3;
+$fa-var-panorama: \e209;
+$fa-var-comment-medical: \f7f5;
+$fa-var-teeth-open: \f62f;
+$fa-var-file-circle-minus: \e4ed;
+$fa-var-tags: \f02c;
+$fa-var-wine-glass: \f4e3;
+$fa-var-forward-fast: \f050;
+$fa-var-fast-forward: \f050;
+$fa-var-face-meh-blank: \f5a4;
+$fa-var-meh-blank: \f5a4;
+$fa-var-square-parking: \f540;
+$fa-var-parking: \f540;
+$fa-var-house-signal: \e012;
+$fa-var-bars-progress: \f828;
+$fa-var-tasks-alt: \f828;
+$fa-var-faucet-drip: \e006;
+$fa-var-cart-flatbed: \f474;
+$fa-var-dolly-flatbed: \f474;
+$fa-var-ban-smoking: \f54d;
+$fa-var-smoking-ban: \f54d;
+$fa-var-terminal: \f120;
+$fa-var-mobile-button: \f10b;
+$fa-var-house-medical-flag: \e514;
+$fa-var-basket-shopping: \f291;
+$fa-var-shopping-basket: \f291;
+$fa-var-tape: \f4db;
+$fa-var-bus-simple: \f55e;
+$fa-var-bus-alt: \f55e;
+$fa-var-eye: \f06e;
+$fa-var-face-sad-cry: \f5b3;
+$fa-var-sad-cry: \f5b3;
+$fa-var-audio-description: \f29e;
+$fa-var-person-military-to-person: \e54c;
+$fa-var-file-shield: \e4f0;
+$fa-var-user-slash: \f506;
+$fa-var-pen: \f304;
+$fa-var-tower-observation: \e586;
+$fa-var-file-code: \f1c9;
+$fa-var-signal: \f012;
+$fa-var-signal-5: \f012;
+$fa-var-signal-perfect: \f012;
+$fa-var-bus: \f207;
+$fa-var-heart-circle-xmark: \e501;
+$fa-var-house-chimney: \e3af;
+$fa-var-home-lg: \e3af;
+$fa-var-window-maximize: \f2d0;
+$fa-var-face-frown: \f119;
+$fa-var-frown: \f119;
+$fa-var-prescription: \f5b1;
+$fa-var-shop: \f54f;
+$fa-var-store-alt: \f54f;
+$fa-var-floppy-disk: \f0c7;
+$fa-var-save: \f0c7;
+$fa-var-vihara: \f6a7;
+$fa-var-scale-unbalanced: \f515;
+$fa-var-balance-scale-left: \f515;
+$fa-var-sort-up: \f0de;
+$fa-var-sort-asc: \f0de;
+$fa-var-comment-dots: \f4ad;
+$fa-var-commenting: \f4ad;
+$fa-var-plant-wilt: \e5aa;
+$fa-var-diamond: \f219;
+$fa-var-face-grin-squint: \f585;
+$fa-var-grin-squint: \f585;
+$fa-var-hand-holding-dollar: \f4c0;
+$fa-var-hand-holding-usd: \f4c0;
+$fa-var-bacterium: \e05a;
+$fa-var-hand-pointer: \f25a;
+$fa-var-drum-steelpan: \f56a;
+$fa-var-hand-scissors: \f257;
+$fa-var-hands-praying: \f684;
+$fa-var-praying-hands: \f684;
+$fa-var-arrow-rotate-right: \f01e;
+$fa-var-arrow-right-rotate: \f01e;
+$fa-var-arrow-rotate-forward: \f01e;
+$fa-var-redo: \f01e;
+$fa-var-biohazard: \f780;
+$fa-var-location-crosshairs: \f601;
+$fa-var-location: \f601;
+$fa-var-mars-double: \f227;
+$fa-var-child-dress: \e59c;
+$fa-var-users-between-lines: \e591;
+$fa-var-lungs-virus: \e067;
+$fa-var-face-grin-tears: \f588;
+$fa-var-grin-tears: \f588;
+$fa-var-phone: \f095;
+$fa-var-calendar-xmark: \f273;
+$fa-var-calendar-times: \f273;
+$fa-var-child-reaching: \e59d;
+$fa-var-head-side-virus: \e064;
+$fa-var-user-gear: \f4fe;
+$fa-var-user-cog: \f4fe;
+$fa-var-arrow-up-1-9: \f163;
+$fa-var-sort-numeric-up: \f163;
+$fa-var-door-closed: \f52a;
+$fa-var-shield-virus: \e06c;
+$fa-var-dice-six: \f526;
+$fa-var-mosquito-net: \e52c;
+$fa-var-bridge-water: \e4ce;
+$fa-var-person-booth: \f756;
+$fa-var-text-width: \f035;
+$fa-var-hat-wizard: \f6e8;
+$fa-var-pen-fancy: \f5ac;
+$fa-var-person-digging: \f85e;
+$fa-var-digging: \f85e;
+$fa-var-trash: \f1f8;
+$fa-var-gauge-simple: \f629;
+$fa-var-gauge-simple-med: \f629;
+$fa-var-tachometer-average: \f629;
+$fa-var-book-medical: \f7e6;
+$fa-var-poo: \f2fe;
+$fa-var-quote-right: \f10e;
+$fa-var-quote-right-alt: \f10e;
+$fa-var-shirt: \f553;
+$fa-var-t-shirt: \f553;
+$fa-var-tshirt: \f553;
+$fa-var-cubes: \f1b3;
+$fa-var-divide: \f529;
+$fa-var-tenge-sign: \f7d7;
+$fa-var-tenge: \f7d7;
+$fa-var-headphones: \f025;
+$fa-var-hands-holding: \f4c2;
+$fa-var-hands-clapping: \e1a8;
+$fa-var-republican: \f75e;
+$fa-var-arrow-left: \f060;
+$fa-var-person-circle-xmark: \e543;
+$fa-var-ruler: \f545;
+$fa-var-align-left: \f036;
+$fa-var-dice-d6: \f6d1;
+$fa-var-restroom: \f7bd;
+$fa-var-j: \4a;
+$fa-var-users-viewfinder: \e595;
+$fa-var-file-video: \f1c8;
+$fa-var-up-right-from-square: \f35d;
+$fa-var-external-link-alt: \f35d;
+$fa-var-table-cells: \f00a;
+$fa-var-th: \f00a;
+$fa-var-file-pdf: \f1c1;
+$fa-var-book-bible: \f647;
+$fa-var-bible: \f647;
+$fa-var-o: \4f;
+$fa-var-suitcase-medical: \f0fa;
+$fa-var-medkit: \f0fa;
+$fa-var-user-secret: \f21b;
+$fa-var-otter: \f700;
+$fa-var-person-dress: \f182;
+$fa-var-female: \f182;
+$fa-var-comment-dollar: \f651;
+$fa-var-business-time: \f64a;
+$fa-var-briefcase-clock: \f64a;
+$fa-var-table-cells-large: \f009;
+$fa-var-th-large: \f009;
+$fa-var-book-tanakh: \f827;
+$fa-var-tanakh: \f827;
+$fa-var-phone-volume: \f2a0;
+$fa-var-volume-control-phone: \f2a0;
+$fa-var-hat-cowboy-side: \f8c1;
+$fa-var-clipboard-user: \f7f3;
+$fa-var-child: \f1ae;
+$fa-var-lira-sign: \f195;
+$fa-var-satellite: \f7bf;
+$fa-var-plane-lock: \e558;
+$fa-var-tag: \f02b;
+$fa-var-comment: \f075;
+$fa-var-cake-candles: \f1fd;
+$fa-var-birthday-cake: \f1fd;
+$fa-var-cake: \f1fd;
+$fa-var-envelope: \f0e0;
+$fa-var-angles-up: \f102;
+$fa-var-angle-double-up: \f102;
+$fa-var-paperclip: \f0c6;
+$fa-var-arrow-right-to-city: \e4b3;
+$fa-var-ribbon: \f4d6;
+$fa-var-lungs: \f604;
+$fa-var-arrow-up-9-1: \f887;
+$fa-var-sort-numeric-up-alt: \f887;
+$fa-var-litecoin-sign: \e1d3;
+$fa-var-border-none: \f850;
+$fa-var-circle-nodes: \e4e2;
+$fa-var-parachute-box: \f4cd;
+$fa-var-indent: \f03c;
+$fa-var-truck-field-un: \e58e;
+$fa-var-hourglass: \f254;
+$fa-var-hourglass-empty: \f254;
+$fa-var-mountain: \f6fc;
+$fa-var-user-doctor: \f0f0;
+$fa-var-user-md: \f0f0;
+$fa-var-circle-info: \f05a;
+$fa-var-info-circle: \f05a;
+$fa-var-cloud-meatball: \f73b;
+$fa-var-camera: \f030;
+$fa-var-camera-alt: \f030;
+$fa-var-square-virus: \e578;
+$fa-var-meteor: \f753;
+$fa-var-car-on: \e4dd;
+$fa-var-sleigh: \f7cc;
+$fa-var-arrow-down-1-9: \f162;
+$fa-var-sort-numeric-asc: \f162;
+$fa-var-sort-numeric-down: \f162;
+$fa-var-hand-holding-droplet: \f4c1;
+$fa-var-hand-holding-water: \f4c1;
+$fa-var-water: \f773;
+$fa-var-calendar-check: \f274;
+$fa-var-braille: \f2a1;
+$fa-var-prescription-bottle-medical: \f486;
+$fa-var-prescription-bottle-alt: \f486;
+$fa-var-landmark: \f66f;
+$fa-var-truck: \f0d1;
+$fa-var-crosshairs: \f05b;
+$fa-var-person-cane: \e53c;
+$fa-var-tent: \e57d;
+$fa-var-vest-patches: \e086;
+$fa-var-check-double: \f560;
+$fa-var-arrow-down-a-z: \f15d;
+$fa-var-sort-alpha-asc: \f15d;
+$fa-var-sort-alpha-down: \f15d;
+$fa-var-money-bill-wheat: \e52a;
+$fa-var-cookie: \f563;
+$fa-var-arrow-rotate-left: \f0e2;
+$fa-var-arrow-left-rotate: \f0e2;
+$fa-var-arrow-rotate-back: \f0e2;
+$fa-var-arrow-rotate-backward: \f0e2;
+$fa-var-undo: \f0e2;
+$fa-var-hard-drive: \f0a0;
+$fa-var-hdd: \f0a0;
+$fa-var-face-grin-squint-tears: \f586;
+$fa-var-grin-squint-tears: \f586;
+$fa-var-dumbbell: \f44b;
+$fa-var-rectangle-list: \f022;
+$fa-var-list-alt: \f022;
+$fa-var-tarp-droplet: \e57c;
+$fa-var-house-medical-circle-check: \e511;
+$fa-var-person-skiing-nordic: \f7ca;
+$fa-var-skiing-nordic: \f7ca;
+$fa-var-calendar-plus: \f271;
+$fa-var-plane-arrival: \f5af;
+$fa-var-circle-left: \f359;
+$fa-var-arrow-alt-circle-left: \f359;
+$fa-var-train-subway: \f239;
+$fa-var-subway: \f239;
+$fa-var-chart-gantt: \e0e4;
+$fa-var-indian-rupee-sign: \e1bc;
+$fa-var-indian-rupee: \e1bc;
+$fa-var-inr: \e1bc;
+$fa-var-crop-simple: \f565;
+$fa-var-crop-alt: \f565;
+$fa-var-money-bill-1: \f3d1;
+$fa-var-money-bill-alt: \f3d1;
+$fa-var-left-long: \f30a;
+$fa-var-long-arrow-alt-left: \f30a;
+$fa-var-dna: \f471;
+$fa-var-virus-slash: \e075;
+$fa-var-minus: \f068;
+$fa-var-subtract: \f068;
+$fa-var-child-rifle: \e4e0;
+$fa-var-chess: \f439;
+$fa-var-arrow-left-long: \f177;
+$fa-var-long-arrow-left: \f177;
+$fa-var-plug-circle-check: \e55c;
+$fa-var-street-view: \f21d;
+$fa-var-franc-sign: \e18f;
+$fa-var-volume-off: \f026;
+$fa-var-hands-asl-interpreting: \f2a3;
+$fa-var-american-sign-language-interpreting: \f2a3;
+$fa-var-asl-interpreting: \f2a3;
+$fa-var-hands-american-sign-language-interpreting: \f2a3;
+$fa-var-gear: \f013;
+$fa-var-cog: \f013;
+$fa-var-droplet-slash: \f5c7;
+$fa-var-tint-slash: \f5c7;
+$fa-var-mosque: \f678;
+$fa-var-mosquito: \e52b;
+$fa-var-star-of-david: \f69a;
+$fa-var-person-military-rifle: \e54b;
+$fa-var-cart-shopping: \f07a;
+$fa-var-shopping-cart: \f07a;
+$fa-var-vials: \f493;
+$fa-var-plug-circle-plus: \e55f;
+$fa-var-place-of-worship: \f67f;
+$fa-var-grip-vertical: \f58e;
+$fa-var-arrow-turn-up: \f148;
+$fa-var-level-up: \f148;
+$fa-var-u: \55;
+$fa-var-square-root-variable: \f698;
+$fa-var-square-root-alt: \f698;
+$fa-var-clock: \f017;
+$fa-var-clock-four: \f017;
+$fa-var-backward-step: \f048;
+$fa-var-step-backward: \f048;
+$fa-var-pallet: \f482;
+$fa-var-faucet: \e005;
+$fa-var-baseball-bat-ball: \f432;
+$fa-var-s: \53;
+$fa-var-timeline: \e29c;
+$fa-var-keyboard: \f11c;
+$fa-var-caret-down: \f0d7;
+$fa-var-house-chimney-medical: \f7f2;
+$fa-var-clinic-medical: \f7f2;
+$fa-var-temperature-three-quarters: \f2c8;
+$fa-var-temperature-3: \f2c8;
+$fa-var-thermometer-3: \f2c8;
+$fa-var-thermometer-three-quarters: \f2c8;
+$fa-var-mobile-screen: \f3cf;
+$fa-var-mobile-android-alt: \f3cf;
+$fa-var-plane-up: \e22d;
+$fa-var-piggy-bank: \f4d3;
+$fa-var-battery-half: \f242;
+$fa-var-battery-3: \f242;
+$fa-var-mountain-city: \e52e;
+$fa-var-coins: \f51e;
+$fa-var-khanda: \f66d;
+$fa-var-sliders: \f1de;
+$fa-var-sliders-h: \f1de;
+$fa-var-folder-tree: \f802;
+$fa-var-network-wired: \f6ff;
+$fa-var-map-pin: \f276;
+$fa-var-hamsa: \f665;
+$fa-var-cent-sign: \e3f5;
+$fa-var-flask: \f0c3;
+$fa-var-person-pregnant: \e31e;
+$fa-var-wand-sparkles: \f72b;
+$fa-var-ellipsis-vertical: \f142;
+$fa-var-ellipsis-v: \f142;
+$fa-var-ticket: \f145;
+$fa-var-power-off: \f011;
+$fa-var-right-long: \f30b;
+$fa-var-long-arrow-alt-right: \f30b;
+$fa-var-flag-usa: \f74d;
+$fa-var-laptop-file: \e51d;
+$fa-var-tty: \f1e4;
+$fa-var-teletype: \f1e4;
+$fa-var-diagram-next: \e476;
+$fa-var-person-rifle: \e54e;
+$fa-var-house-medical-circle-exclamation: \e512;
+$fa-var-closed-captioning: \f20a;
+$fa-var-person-hiking: \f6ec;
+$fa-var-hiking: \f6ec;
+$fa-var-venus-double: \f226;
+$fa-var-images: \f302;
+$fa-var-calculator: \f1ec;
+$fa-var-people-pulling: \e535;
+$fa-var-n: \4e;
+$fa-var-cable-car: \f7da;
+$fa-var-tram: \f7da;
+$fa-var-cloud-rain: \f73d;
+$fa-var-building-circle-xmark: \e4d4;
+$fa-var-ship: \f21a;
+$fa-var-arrows-down-to-line: \e4b8;
+$fa-var-download: \f019;
+$fa-var-face-grin: \f580;
+$fa-var-grin: \f580;
+$fa-var-delete-left: \f55a;
+$fa-var-backspace: \f55a;
+$fa-var-eye-dropper: \f1fb;
+$fa-var-eye-dropper-empty: \f1fb;
+$fa-var-eyedropper: \f1fb;
+$fa-var-file-circle-check: \e5a0;
+$fa-var-forward: \f04e;
+$fa-var-mobile: \f3ce;
+$fa-var-mobile-android: \f3ce;
+$fa-var-mobile-phone: \f3ce;
+$fa-var-face-meh: \f11a;
+$fa-var-meh: \f11a;
+$fa-var-align-center: \f037;
+$fa-var-book-skull: \f6b7;
+$fa-var-book-dead: \f6b7;
+$fa-var-id-card: \f2c2;
+$fa-var-drivers-license: \f2c2;
+$fa-var-outdent: \f03b;
+$fa-var-dedent: \f03b;
+$fa-var-heart-circle-exclamation: \e4fe;
+$fa-var-house: \f015;
+$fa-var-home: \f015;
+$fa-var-home-alt: \f015;
+$fa-var-home-lg-alt: \f015;
+$fa-var-calendar-week: \f784;
+$fa-var-laptop-medical: \f812;
+$fa-var-b: \42;
+$fa-var-file-medical: \f477;
+$fa-var-dice-one: \f525;
+$fa-var-kiwi-bird: \f535;
+$fa-var-arrow-right-arrow-left: \f0ec;
+$fa-var-exchange: \f0ec;
+$fa-var-rotate-right: \f2f9;
+$fa-var-redo-alt: \f2f9;
+$fa-var-rotate-forward: \f2f9;
+$fa-var-utensils: \f2e7;
+$fa-var-cutlery: \f2e7;
+$fa-var-arrow-up-wide-short: \f161;
+$fa-var-sort-amount-up: \f161;
+$fa-var-mill-sign: \e1ed;
+$fa-var-bowl-rice: \e2eb;
+$fa-var-skull: \f54c;
+$fa-var-tower-broadcast: \f519;
+$fa-var-broadcast-tower: \f519;
+$fa-var-truck-pickup: \f63c;
+$fa-var-up-long: \f30c;
+$fa-var-long-arrow-alt-up: \f30c;
+$fa-var-stop: \f04d;
+$fa-var-code-merge: \f387;
+$fa-var-upload: \f093;
+$fa-var-hurricane: \f751;
+$fa-var-mound: \e52d;
+$fa-var-toilet-portable: \e583;
+$fa-var-compact-disc: \f51f;
+$fa-var-file-arrow-down: \f56d;
+$fa-var-file-download: \f56d;
+$fa-var-caravan: \f8ff;
+$fa-var-shield-cat: \e572;
+$fa-var-bolt: \f0e7;
+$fa-var-zap: \f0e7;
+$fa-var-glass-water: \e4f4;
+$fa-var-oil-well: \e532;
+$fa-var-vault: \e2c5;
+$fa-var-mars: \f222;
+$fa-var-toilet: \f7d8;
+$fa-var-plane-circle-xmark: \e557;
+$fa-var-yen-sign: \f157;
+$fa-var-cny: \f157;
+$fa-var-jpy: \f157;
+$fa-var-rmb: \f157;
+$fa-var-yen: \f157;
+$fa-var-ruble-sign: \f158;
+$fa-var-rouble: \f158;
+$fa-var-rub: \f158;
+$fa-var-ruble: \f158;
+$fa-var-sun: \f185;
+$fa-var-guitar: \f7a6;
+$fa-var-face-laugh-wink: \f59c;
+$fa-var-laugh-wink: \f59c;
+$fa-var-horse-head: \f7ab;
+$fa-var-bore-hole: \e4c3;
+$fa-var-industry: \f275;
+$fa-var-circle-down: \f358;
+$fa-var-arrow-alt-circle-down: \f358;
+$fa-var-arrows-turn-to-dots: \e4c1;
+$fa-var-florin-sign: \e184;
+$fa-var-arrow-down-short-wide: \f884;
+$fa-var-sort-amount-desc: \f884;
+$fa-var-sort-amount-down-alt: \f884;
+$fa-var-less-than: \3c;
+$fa-var-angle-down: \f107;
+$fa-var-car-tunnel: \e4de;
+$fa-var-head-side-cough: \e061;
+$fa-var-grip-lines: \f7a4;
+$fa-var-thumbs-down: \f165;
+$fa-var-user-lock: \f502;
+$fa-var-arrow-right-long: \f178;
+$fa-var-long-arrow-right: \f178;
+$fa-var-anchor-circle-xmark: \e4ac;
+$fa-var-ellipsis: \f141;
+$fa-var-ellipsis-h: \f141;
+$fa-var-chess-pawn: \f443;
+$fa-var-kit-medical: \f479;
+$fa-var-first-aid: \f479;
+$fa-var-person-through-window: \e5a9;
+$fa-var-toolbox: \f552;
+$fa-var-hands-holding-circle: \e4fb;
+$fa-var-bug: \f188;
+$fa-var-credit-card: \f09d;
+$fa-var-credit-card-alt: \f09d;
+$fa-var-car: \f1b9;
+$fa-var-automobile: \f1b9;
+$fa-var-hand-holding-hand: \e4f7;
+$fa-var-book-open-reader: \f5da;
+$fa-var-book-reader: \f5da;
+$fa-var-mountain-sun: \e52f;
+$fa-var-arrows-left-right-to-line: \e4ba;
+$fa-var-dice-d20: \f6cf;
+$fa-var-truck-droplet: \e58c;
+$fa-var-file-circle-xmark: \e5a1;
+$fa-var-temperature-arrow-up: \e040;
+$fa-var-temperature-up: \e040;
+$fa-var-medal: \f5a2;
+$fa-var-bed: \f236;
+$fa-var-square-h: \f0fd;
+$fa-var-h-square: \f0fd;
+$fa-var-podcast: \f2ce;
+$fa-var-temperature-full: \f2c7;
+$fa-var-temperature-4: \f2c7;
+$fa-var-thermometer-4: \f2c7;
+$fa-var-thermometer-full: \f2c7;
+$fa-var-bell: \f0f3;
+$fa-var-superscript: \f12b;
+$fa-var-plug-circle-xmark: \e560;
+$fa-var-star-of-life: \f621;
+$fa-var-phone-slash: \f3dd;
+$fa-var-paint-roller: \f5aa;
+$fa-var-handshake-angle: \f4c4;
+$fa-var-hands-helping: \f4c4;
+$fa-var-location-dot: \f3c5;
+$fa-var-map-marker-alt: \f3c5;
+$fa-var-file: \f15b;
+$fa-var-greater-than: \3e;
+$fa-var-person-swimming: \f5c4;
+$fa-var-swimmer: \f5c4;
+$fa-var-arrow-down: \f063;
+$fa-var-droplet: \f043;
+$fa-var-tint: \f043;
+$fa-var-eraser: \f12d;
+$fa-var-earth-americas: \f57d;
+$fa-var-earth: \f57d;
+$fa-var-earth-america: \f57d;
+$fa-var-globe-americas: \f57d;
+$fa-var-person-burst: \e53b;
+$fa-var-dove: \f4ba;
+$fa-var-battery-empty: \f244;
+$fa-var-battery-0: \f244;
+$fa-var-socks: \f696;
+$fa-var-inbox: \f01c;
+$fa-var-section: \e447;
+$fa-var-gauge-high: \f625;
+$fa-var-tachometer-alt: \f625;
+$fa-var-tachometer-alt-fast: \f625;
+$fa-var-envelope-open-text: \f658;
+$fa-var-hospital: \f0f8;
+$fa-var-hospital-alt: \f0f8;
+$fa-var-hospital-wide: \f0f8;
+$fa-var-wine-bottle: \f72f;
+$fa-var-chess-rook: \f447;
+$fa-var-bars-staggered: \f550;
+$fa-var-reorder: \f550;
+$fa-var-stream: \f550;
+$fa-var-dharmachakra: \f655;
+$fa-var-hotdog: \f80f;
+$fa-var-person-walking-with-cane: \f29d;
+$fa-var-blind: \f29d;
+$fa-var-drum: \f569;
+$fa-var-ice-cream: \f810;
+$fa-var-heart-circle-bolt: \e4fc;
+$fa-var-fax: \f1ac;
+$fa-var-paragraph: \f1dd;
+$fa-var-check-to-slot: \f772;
+$fa-var-vote-yea: \f772;
+$fa-var-star-half: \f089;
+$fa-var-boxes-stacked: \f468;
+$fa-var-boxes: \f468;
+$fa-var-boxes-alt: \f468;
+$fa-var-link: \f0c1;
+$fa-var-chain: \f0c1;
+$fa-var-ear-listen: \f2a2;
+$fa-var-assistive-listening-systems: \f2a2;
+$fa-var-tree-city: \e587;
+$fa-var-play: \f04b;
+$fa-var-font: \f031;
+$fa-var-rupiah-sign: \e23d;
+$fa-var-magnifying-glass: \f002;
+$fa-var-search: \f002;
+$fa-var-table-tennis-paddle-ball: \f45d;
+$fa-var-ping-pong-paddle-ball: \f45d;
+$fa-var-table-tennis: \f45d;
+$fa-var-person-dots-from-line: \f470;
+$fa-var-diagnoses: \f470;
+$fa-var-trash-can-arrow-up: \f82a;
+$fa-var-trash-restore-alt: \f82a;
+$fa-var-naira-sign: \e1f6;
+$fa-var-cart-arrow-down: \f218;
+$fa-var-walkie-talkie: \f8ef;
+$fa-var-file-pen: \f31c;
+$fa-var-file-edit: \f31c;
+$fa-var-receipt: \f543;
+$fa-var-square-pen: \f14b;
+$fa-var-pen-square: \f14b;
+$fa-var-pencil-square: \f14b;
+$fa-var-suitcase-rolling: \f5c1;
+$fa-var-person-circle-exclamation: \e53f;
+$fa-var-chevron-down: \f078;
+$fa-var-battery-full: \f240;
+$fa-var-battery: \f240;
+$fa-var-battery-5: \f240;
+$fa-var-skull-crossbones: \f714;
+$fa-var-code-compare: \e13a;
+$fa-var-list-ul: \f0ca;
+$fa-var-list-dots: \f0ca;
+$fa-var-school-lock: \e56f;
+$fa-var-tower-cell: \e585;
+$fa-var-down-long: \f309;
+$fa-var-long-arrow-alt-down: \f309;
+$fa-var-ranking-star: \e561;
+$fa-var-chess-king: \f43f;
+$fa-var-person-harassing: \e549;
+$fa-var-brazilian-real-sign: \e46c;
+$fa-var-landmark-dome: \f752;
+$fa-var-landmark-alt: \f752;
+$fa-var-arrow-up: \f062;
+$fa-var-tv: \f26c;
+$fa-var-television: \f26c;
+$fa-var-tv-alt: \f26c;
+$fa-var-shrimp: \e448;
+$fa-var-list-check: \f0ae;
+$fa-var-tasks: \f0ae;
+$fa-var-jug-detergent: \e519;
+$fa-var-circle-user: \f2bd;
+$fa-var-user-circle: \f2bd;
+$fa-var-user-shield: \f505;
+$fa-var-wind: \f72e;
+$fa-var-car-burst: \f5e1;
+$fa-var-car-crash: \f5e1;
+$fa-var-y: \59;
+$fa-var-person-snowboarding: \f7ce;
+$fa-var-snowboarding: \f7ce;
+$fa-var-truck-fast: \f48b;
+$fa-var-shipping-fast: \f48b;
+$fa-var-fish: \f578;
+$fa-var-user-graduate: \f501;
+$fa-var-circle-half-stroke: \f042;
+$fa-var-adjust: \f042;
+$fa-var-clapperboard: \e131;
+$fa-var-circle-radiation: \f7ba;
+$fa-var-radiation-alt: \f7ba;
+$fa-var-baseball: \f433;
+$fa-var-baseball-ball: \f433;
+$fa-var-jet-fighter-up: \e518;
+$fa-var-diagram-project: \f542;
+$fa-var-project-diagram: \f542;
+$fa-var-copy: \f0c5;
+$fa-var-volume-xmark: \f6a9;
+$fa-var-volume-mute: \f6a9;
+$fa-var-volume-times: \f6a9;
+$fa-var-hand-sparkles: \e05d;
+$fa-var-grip: \f58d;
+$fa-var-grip-horizontal: \f58d;
+$fa-var-share-from-square: \f14d;
+$fa-var-share-square: \f14d;
+$fa-var-gun: \e19b;
+$fa-var-square-phone: \f098;
+$fa-var-phone-square: \f098;
+$fa-var-plus: \2b;
+$fa-var-add: \2b;
+$fa-var-expand: \f065;
+$fa-var-computer: \e4e5;
+$fa-var-xmark: \f00d;
+$fa-var-close: \f00d;
+$fa-var-multiply: \f00d;
+$fa-var-remove: \f00d;
+$fa-var-times: \f00d;
+$fa-var-arrows-up-down-left-right: \f047;
+$fa-var-arrows: \f047;
+$fa-var-chalkboard-user: \f51c;
+$fa-var-chalkboard-teacher: \f51c;
+$fa-var-peso-sign: \e222;
+$fa-var-building-shield: \e4d8;
+$fa-var-baby: \f77c;
+$fa-var-users-line: \e592;
+$fa-var-quote-left: \f10d;
+$fa-var-quote-left-alt: \f10d;
+$fa-var-tractor: \f722;
+$fa-var-trash-arrow-up: \f829;
+$fa-var-trash-restore: \f829;
+$fa-var-arrow-down-up-lock: \e4b0;
+$fa-var-lines-leaning: \e51e;
+$fa-var-ruler-combined: \f546;
+$fa-var-copyright: \f1f9;
+$fa-var-equals: \3d;
+$fa-var-blender: \f517;
+$fa-var-teeth: \f62e;
+$fa-var-shekel-sign: \f20b;
+$fa-var-ils: \f20b;
+$fa-var-shekel: \f20b;
+$fa-var-sheqel: \f20b;
+$fa-var-sheqel-sign: \f20b;
+$fa-var-map: \f279;
+$fa-var-rocket: \f135;
+$fa-var-photo-film: \f87c;
+$fa-var-photo-video: \f87c;
+$fa-var-folder-minus: \f65d;
+$fa-var-store: \f54e;
+$fa-var-arrow-trend-up: \e098;
+$fa-var-plug-circle-minus: \e55e;
+$fa-var-sign-hanging: \f4d9;
+$fa-var-sign: \f4d9;
+$fa-var-bezier-curve: \f55b;
+$fa-var-bell-slash: \f1f6;
+$fa-var-tablet: \f3fb;
+$fa-var-tablet-android: \f3fb;
+$fa-var-school-flag: \e56e;
+$fa-var-fill: \f575;
+$fa-var-angle-up: \f106;
+$fa-var-drumstick-bite: \f6d7;
+$fa-var-holly-berry: \f7aa;
+$fa-var-chevron-left: \f053;
+$fa-var-bacteria: \e059;
+$fa-var-hand-lizard: \f258;
+$fa-var-disease: \f7fa;
+$fa-var-briefcase-medical: \f469;
+$fa-var-genderless: \f22d;
+$fa-var-chevron-right: \f054;
+$fa-var-retweet: \f079;
+$fa-var-car-rear: \f5de;
+$fa-var-car-alt: \f5de;
+$fa-var-pump-soap: \e06b;
+$fa-var-video-slash: \f4e2;
+$fa-var-battery-quarter: \f243;
+$fa-var-battery-2: \f243;
+$fa-var-radio: \f8d7;
+$fa-var-baby-carriage: \f77d;
+$fa-var-carriage-baby: \f77d;
+$fa-var-traffic-light: \f637;
+$fa-var-thermometer: \f491;
+$fa-var-vr-cardboard: \f729;
+$fa-var-hand-middle-finger: \f806;
+$fa-var-percent: \25;
+$fa-var-percentage: \25;
+$fa-var-truck-moving: \f4df;
+$fa-var-glass-water-droplet: \e4f5;
+$fa-var-display: \e163;
+$fa-var-face-smile: \f118;
+$fa-var-smile: \f118;
+$fa-var-thumbtack: \f08d;
+$fa-var-thumb-tack: \f08d;
+$fa-var-trophy: \f091;
+$fa-var-person-praying: \f683;
+$fa-var-pray: \f683;
+$fa-var-hammer: \f6e3;
+$fa-var-hand-peace: \f25b;
+$fa-var-rotate: \f2f1;
+$fa-var-sync-alt: \f2f1;
+$fa-var-spinner: \f110;
+$fa-var-robot: \f544;
+$fa-var-peace: \f67c;
+$fa-var-gears: \f085;
+$fa-var-cogs: \f085;
+$fa-var-warehouse: \f494;
+$fa-var-arrow-up-right-dots: \e4b7;
+$fa-var-splotch: \f5bc;
+$fa-var-face-grin-hearts: \f584;
+$fa-var-grin-hearts: \f584;
+$fa-var-dice-four: \f524;
+$fa-var-sim-card: \f7c4;
+$fa-var-transgender: \f225;
+$fa-var-transgender-alt: \f225;
+$fa-var-mercury: \f223;
+$fa-var-arrow-turn-down: \f149;
+$fa-var-level-down: \f149;
+$fa-var-person-falling-burst: \e547;
+$fa-var-award: \f559;
+$fa-var-ticket-simple: \f3ff;
+$fa-var-ticket-alt: \f3ff;
+$fa-var-building: \f1ad;
+$fa-var-angles-left: \f100;
+$fa-var-angle-double-left: \f100;
+$fa-var-qrcode: \f029;
+$fa-var-clock-rotate-left: \f1da;
+$fa-var-history: \f1da;
+$fa-var-face-grin-beam-sweat: \f583;
+$fa-var-grin-beam-sweat: \f583;
+$fa-var-file-export: \f56e;
+$fa-var-arrow-right-from-file: \f56e;
+$fa-var-shield: \f132;
+$fa-var-shield-blank: \f132;
+$fa-var-arrow-up-short-wide: \f885;
+$fa-var-sort-amount-up-alt: \f885;
+$fa-var-house-medical: \e3b2;
+$fa-var-golf-ball-tee: \f450;
+$fa-var-golf-ball: \f450;
+$fa-var-circle-chevron-left: \f137;
+$fa-var-chevron-circle-left: \f137;
+$fa-var-house-chimney-window: \e00d;
+$fa-var-pen-nib: \f5ad;
+$fa-var-tent-arrow-turn-left: \e580;
+$fa-var-tents: \e582;
+$fa-var-wand-magic: \f0d0;
+$fa-var-magic: \f0d0;
+$fa-var-dog: \f6d3;
+$fa-var-carrot: \f787;
+$fa-var-moon: \f186;
+$fa-var-wine-glass-empty: \f5ce;
+$fa-var-wine-glass-alt: \f5ce;
+$fa-var-cheese: \f7ef;
+$fa-var-yin-yang: \f6ad;
+$fa-var-music: \f001;
+$fa-var-code-commit: \f386;
+$fa-var-temperature-low: \f76b;
+$fa-var-person-biking: \f84a;
+$fa-var-biking: \f84a;
+$fa-var-broom: \f51a;
+$fa-var-shield-heart: \e574;
+$fa-var-gopuram: \f664;
+$fa-var-earth-oceania: \e47b;
+$fa-var-globe-oceania: \e47b;
+$fa-var-square-xmark: \f2d3;
+$fa-var-times-square: \f2d3;
+$fa-var-xmark-square: \f2d3;
+$fa-var-hashtag: \23;
+$fa-var-up-right-and-down-left-from-center: \f424;
+$fa-var-expand-alt: \f424;
+$fa-var-oil-can: \f613;
+$fa-var-t: \54;
+$fa-var-hippo: \f6ed;
+$fa-var-chart-column: \e0e3;
+$fa-var-infinity: \f534;
+$fa-var-vial-circle-check: \e596;
+$fa-var-person-arrow-down-to-line: \e538;
+$fa-var-voicemail: \f897;
+$fa-var-fan: \f863;
+$fa-var-person-walking-luggage: \e554;
+$fa-var-up-down: \f338;
+$fa-var-arrows-alt-v: \f338;
+$fa-var-cloud-moon-rain: \f73c;
+$fa-var-calendar: \f133;
+$fa-var-trailer: \e041;
+$fa-var-bahai: \f666;
+$fa-var-haykal: \f666;
+$fa-var-sd-card: \f7c2;
+$fa-var-dragon: \f6d5;
+$fa-var-shoe-prints: \f54b;
+$fa-var-circle-plus: \f055;
+$fa-var-plus-circle: \f055;
+$fa-var-face-grin-tongue-wink: \f58b;
+$fa-var-grin-tongue-wink: \f58b;
+$fa-var-hand-holding: \f4bd;
+$fa-var-plug-circle-exclamation: \e55d;
+$fa-var-link-slash: \f127;
+$fa-var-chain-broken: \f127;
+$fa-var-chain-slash: \f127;
+$fa-var-unlink: \f127;
+$fa-var-clone: \f24d;
+$fa-var-person-walking-arrow-loop-left: \e551;
+$fa-var-arrow-up-z-a: \f882;
+$fa-var-sort-alpha-up-alt: \f882;
+$fa-var-fire-flame-curved: \f7e4;
+$fa-var-fire-alt: \f7e4;
+$fa-var-tornado: \f76f;
+$fa-var-file-circle-plus: \e494;
+$fa-var-book-quran: \f687;
+$fa-var-quran: \f687;
+$fa-var-anchor: \f13d;
+$fa-var-border-all: \f84c;
+$fa-var-face-angry: \f556;
+$fa-var-angry: \f556;
+$fa-var-cookie-bite: \f564;
+$fa-var-arrow-trend-down: \e097;
+$fa-var-rss: \f09e;
+$fa-var-feed: \f09e;
+$fa-var-draw-polygon: \f5ee;
+$fa-var-scale-balanced: \f24e;
+$fa-var-balance-scale: \f24e;
+$fa-var-gauge-simple-high: \f62a;
+$fa-var-tachometer: \f62a;
+$fa-var-tachometer-fast: \f62a;
+$fa-var-shower: \f2cc;
+$fa-var-desktop: \f390;
+$fa-var-desktop-alt: \f390;
+$fa-var-m: \4d;
+$fa-var-table-list: \f00b;
+$fa-var-th-list: \f00b;
+$fa-var-comment-sms: \f7cd;
+$fa-var-sms: \f7cd;
+$fa-var-book: \f02d;
+$fa-var-user-plus: \f234;
+$fa-var-check: \f00c;
+$fa-var-battery-three-quarters: \f241;
+$fa-var-battery-4: \f241;
+$fa-var-house-circle-check: \e509;
+$fa-var-angle-left: \f104;
+$fa-var-diagram-successor: \e47a;
+$fa-var-truck-arrow-right: \e58b;
+$fa-var-arrows-split-up-and-left: \e4bc;
+$fa-var-hand-fist: \f6de;
+$fa-var-fist-raised: \f6de;
+$fa-var-cloud-moon: \f6c3;
+$fa-var-briefcase: \f0b1;
+$fa-var-person-falling: \e546;
+$fa-var-image-portrait: \f3e0;
+$fa-var-portrait: \f3e0;
+$fa-var-user-tag: \f507;
+$fa-var-rug: \e569;
+$fa-var-earth-europe: \f7a2;
+$fa-var-globe-europe: \f7a2;
+$fa-var-cart-flatbed-suitcase: \f59d;
+$fa-var-luggage-cart: \f59d;
+$fa-var-rectangle-xmark: \f410;
+$fa-var-rectangle-times: \f410;
+$fa-var-times-rectangle: \f410;
+$fa-var-window-close: \f410;
+$fa-var-baht-sign: \e0ac;
+$fa-var-book-open: \f518;
+$fa-var-book-journal-whills: \f66a;
+$fa-var-journal-whills: \f66a;
+$fa-var-handcuffs: \e4f8;
+$fa-var-triangle-exclamation: \f071;
+$fa-var-exclamation-triangle: \f071;
+$fa-var-warning: \f071;
+$fa-var-database: \f1c0;
+$fa-var-share: \f064;
+$fa-var-arrow-turn-right: \f064;
+$fa-var-mail-forward: \f064;
+$fa-var-bottle-droplet: \e4c4;
+$fa-var-mask-face: \e1d7;
+$fa-var-hill-rockslide: \e508;
+$fa-var-right-left: \f362;
+$fa-var-exchange-alt: \f362;
+$fa-var-paper-plane: \f1d8;
+$fa-var-road-circle-exclamation: \e565;
+$fa-var-dungeon: \f6d9;
+$fa-var-align-right: \f038;
+$fa-var-money-bill-1-wave: \f53b;
+$fa-var-money-bill-wave-alt: \f53b;
+$fa-var-life-ring: \f1cd;
+$fa-var-hands: \f2a7;
+$fa-var-sign-language: \f2a7;
+$fa-var-signing: \f2a7;
+$fa-var-calendar-day: \f783;
+$fa-var-water-ladder: \f5c5;
+$fa-var-ladder-water: \f5c5;
+$fa-var-swimming-pool: \f5c5;
+$fa-var-arrows-up-down: \f07d;
+$fa-var-arrows-v: \f07d;
+$fa-var-face-grimace: \f57f;
+$fa-var-grimace: \f57f;
+$fa-var-wheelchair-move: \e2ce;
+$fa-var-wheelchair-alt: \e2ce;
+$fa-var-turn-down: \f3be;
+$fa-var-level-down-alt: \f3be;
+$fa-var-person-walking-arrow-right: \e552;
+$fa-var-square-envelope: \f199;
+$fa-var-envelope-square: \f199;
+$fa-var-dice: \f522;
+$fa-var-bowling-ball: \f436;
+$fa-var-brain: \f5dc;
+$fa-var-bandage: \f462;
+$fa-var-band-aid: \f462;
+$fa-var-calendar-minus: \f272;
+$fa-var-circle-xmark: \f057;
+$fa-var-times-circle: \f057;
+$fa-var-xmark-circle: \f057;
+$fa-var-gifts: \f79c;
+$fa-var-hotel: \f594;
+$fa-var-earth-asia: \f57e;
+$fa-var-globe-asia: \f57e;
+$fa-var-id-card-clip: \f47f;
+$fa-var-id-card-alt: \f47f;
+$fa-var-magnifying-glass-plus: \f00e;
+$fa-var-search-plus: \f00e;
+$fa-var-thumbs-up: \f164;
+$fa-var-user-clock: \f4fd;
+$fa-var-hand-dots: \f461;
+$fa-var-allergies: \f461;
+$fa-var-file-invoice: \f570;
+$fa-var-window-minimize: \f2d1;
+$fa-var-mug-saucer: \f0f4;
+$fa-var-coffee: \f0f4;
+$fa-var-brush: \f55d;
+$fa-var-mask: \f6fa;
+$fa-var-magnifying-glass-minus: \f010;
+$fa-var-search-minus: \f010;
+$fa-var-ruler-vertical: \f548;
+$fa-var-user-large: \f406;
+$fa-var-user-alt: \f406;
+$fa-var-train-tram: \e5b4;
+$fa-var-user-nurse: \f82f;
+$fa-var-syringe: \f48e;
+$fa-var-cloud-sun: \f6c4;
+$fa-var-stopwatch-20: \e06f;
+$fa-var-square-full: \f45c;
+$fa-var-magnet: \f076;
+$fa-var-jar: \e516;
+$fa-var-note-sticky: \f249;
+$fa-var-sticky-note: \f249;
+$fa-var-bug-slash: \e490;
+$fa-var-arrow-up-from-water-pump: \e4b6;
+$fa-var-bone: \f5d7;
+$fa-var-user-injured: \f728;
+$fa-var-face-sad-tear: \f5b4;
+$fa-var-sad-tear: \f5b4;
+$fa-var-plane: \f072;
+$fa-var-tent-arrows-down: \e581;
+$fa-var-exclamation: \21;
+$fa-var-arrows-spin: \e4bb;
+$fa-var-print: \f02f;
+$fa-var-turkish-lira-sign: \e2bb;
+$fa-var-try: \e2bb;
+$fa-var-turkish-lira: \e2bb;
+$fa-var-dollar-sign: \24;
+$fa-var-dollar: \24;
+$fa-var-usd: \24;
+$fa-var-x: \58;
+$fa-var-magnifying-glass-dollar: \f688;
+$fa-var-search-dollar: \f688;
+$fa-var-users-gear: \f509;
+$fa-var-users-cog: \f509;
+$fa-var-person-military-pointing: \e54a;
+$fa-var-building-columns: \f19c;
+$fa-var-bank: \f19c;
+$fa-var-institution: \f19c;
+$fa-var-museum: \f19c;
+$fa-var-university: \f19c;
+$fa-var-umbrella: \f0e9;
+$fa-var-trowel: \e589;
+$fa-var-d: \44;
+$fa-var-stapler: \e5af;
+$fa-var-masks-theater: \f630;
+$fa-var-theater-masks: \f630;
+$fa-var-kip-sign: \e1c4;
+$fa-var-hand-point-left: \f0a5;
+$fa-var-handshake-simple: \f4c6;
+$fa-var-handshake-alt: \f4c6;
+$fa-var-jet-fighter: \f0fb;
+$fa-var-fighter-jet: \f0fb;
+$fa-var-square-share-nodes: \f1e1;
+$fa-var-share-alt-square: \f1e1;
+$fa-var-barcode: \f02a;
+$fa-var-plus-minus: \e43c;
+$fa-var-video: \f03d;
+$fa-var-video-camera: \f03d;
+$fa-var-graduation-cap: \f19d;
+$fa-var-mortar-board: \f19d;
+$fa-var-hand-holding-medical: \e05c;
+$fa-var-person-circle-check: \e53e;
+$fa-var-turn-up: \f3bf;
+$fa-var-level-up-alt: \f3bf;
+
+$fa-var-monero: \f3d0;
+$fa-var-hooli: \f427;
+$fa-var-yelp: \f1e9;
+$fa-var-cc-visa: \f1f0;
+$fa-var-lastfm: \f202;
+$fa-var-shopware: \f5b5;
+$fa-var-creative-commons-nc: \f4e8;
+$fa-var-aws: \f375;
+$fa-var-redhat: \f7bc;
+$fa-var-yoast: \f2b1;
+$fa-var-cloudflare: \e07d;
+$fa-var-ups: \f7e0;
+$fa-var-wpexplorer: \f2de;
+$fa-var-dyalog: \f399;
+$fa-var-bity: \f37a;
+$fa-var-stackpath: \f842;
+$fa-var-buysellads: \f20d;
+$fa-var-first-order: \f2b0;
+$fa-var-modx: \f285;
+$fa-var-guilded: \e07e;
+$fa-var-vnv: \f40b;
+$fa-var-square-js: \f3b9;
+$fa-var-js-square: \f3b9;
+$fa-var-microsoft: \f3ca;
+$fa-var-qq: \f1d6;
+$fa-var-orcid: \f8d2;
+$fa-var-java: \f4e4;
+$fa-var-invision: \f7b0;
+$fa-var-creative-commons-pd-alt: \f4ed;
+$fa-var-centercode: \f380;
+$fa-var-glide-g: \f2a6;
+$fa-var-drupal: \f1a9;
+$fa-var-hire-a-helper: \f3b0;
+$fa-var-creative-commons-by: \f4e7;
+$fa-var-unity: \e049;
+$fa-var-whmcs: \f40d;
+$fa-var-rocketchat: \f3e8;
+$fa-var-vk: \f189;
+$fa-var-untappd: \f405;
+$fa-var-mailchimp: \f59e;
+$fa-var-css3-alt: \f38b;
+$fa-var-square-reddit: \f1a2;
+$fa-var-reddit-square: \f1a2;
+$fa-var-vimeo-v: \f27d;
+$fa-var-contao: \f26d;
+$fa-var-square-font-awesome: \e5ad;
+$fa-var-deskpro: \f38f;
+$fa-var-sistrix: \f3ee;
+$fa-var-square-instagram: \e055;
+$fa-var-instagram-square: \e055;
+$fa-var-battle-net: \f835;
+$fa-var-the-red-yeti: \f69d;
+$fa-var-square-hacker-news: \f3af;
+$fa-var-hacker-news-square: \f3af;
+$fa-var-edge: \f282;
+$fa-var-napster: \f3d2;
+$fa-var-square-snapchat: \f2ad;
+$fa-var-snapchat-square: \f2ad;
+$fa-var-google-plus-g: \f0d5;
+$fa-var-artstation: \f77a;
+$fa-var-markdown: \f60f;
+$fa-var-sourcetree: \f7d3;
+$fa-var-google-plus: \f2b3;
+$fa-var-diaspora: \f791;
+$fa-var-foursquare: \f180;
+$fa-var-stack-overflow: \f16c;
+$fa-var-github-alt: \f113;
+$fa-var-phoenix-squadron: \f511;
+$fa-var-pagelines: \f18c;
+$fa-var-algolia: \f36c;
+$fa-var-red-river: \f3e3;
+$fa-var-creative-commons-sa: \f4ef;
+$fa-var-safari: \f267;
+$fa-var-google: \f1a0;
+$fa-var-square-font-awesome-stroke: \f35c;
+$fa-var-font-awesome-alt: \f35c;
+$fa-var-atlassian: \f77b;
+$fa-var-linkedin-in: \f0e1;
+$fa-var-digital-ocean: \f391;
+$fa-var-nimblr: \f5a8;
+$fa-var-chromecast: \f838;
+$fa-var-evernote: \f839;
+$fa-var-hacker-news: \f1d4;
+$fa-var-creative-commons-sampling: \f4f0;
+$fa-var-adversal: \f36a;
+$fa-var-creative-commons: \f25e;
+$fa-var-watchman-monitoring: \e087;
+$fa-var-fonticons: \f280;
+$fa-var-weixin: \f1d7;
+$fa-var-shirtsinbulk: \f214;
+$fa-var-codepen: \f1cb;
+$fa-var-git-alt: \f841;
+$fa-var-lyft: \f3c3;
+$fa-var-rev: \f5b2;
+$fa-var-windows: \f17a;
+$fa-var-wizards-of-the-coast: \f730;
+$fa-var-square-viadeo: \f2aa;
+$fa-var-viadeo-square: \f2aa;
+$fa-var-meetup: \f2e0;
+$fa-var-centos: \f789;
+$fa-var-adn: \f170;
+$fa-var-cloudsmith: \f384;
+$fa-var-pied-piper-alt: \f1a8;
+$fa-var-square-dribbble: \f397;
+$fa-var-dribbble-square: \f397;
+$fa-var-codiepie: \f284;
+$fa-var-node: \f419;
+$fa-var-mix: \f3cb;
+$fa-var-steam: \f1b6;
+$fa-var-cc-apple-pay: \f416;
+$fa-var-scribd: \f28a;
+$fa-var-openid: \f19b;
+$fa-var-instalod: \e081;
+$fa-var-expeditedssl: \f23e;
+$fa-var-sellcast: \f2da;
+$fa-var-square-twitter: \f081;
+$fa-var-twitter-square: \f081;
+$fa-var-r-project: \f4f7;
+$fa-var-delicious: \f1a5;
+$fa-var-freebsd: \f3a4;
+$fa-var-vuejs: \f41f;
+$fa-var-accusoft: \f369;
+$fa-var-ioxhost: \f208;
+$fa-var-fonticons-fi: \f3a2;
+$fa-var-app-store: \f36f;
+$fa-var-cc-mastercard: \f1f1;
+$fa-var-itunes-note: \f3b5;
+$fa-var-golang: \e40f;
+$fa-var-kickstarter: \f3bb;
+$fa-var-grav: \f2d6;
+$fa-var-weibo: \f18a;
+$fa-var-uncharted: \e084;
+$fa-var-firstdraft: \f3a1;
+$fa-var-square-youtube: \f431;
+$fa-var-youtube-square: \f431;
+$fa-var-wikipedia-w: \f266;
+$fa-var-wpressr: \f3e4;
+$fa-var-rendact: \f3e4;
+$fa-var-angellist: \f209;
+$fa-var-galactic-republic: \f50c;
+$fa-var-nfc-directional: \e530;
+$fa-var-skype: \f17e;
+$fa-var-joget: \f3b7;
+$fa-var-fedora: \f798;
+$fa-var-stripe-s: \f42a;
+$fa-var-meta: \e49b;
+$fa-var-laravel: \f3bd;
+$fa-var-hotjar: \f3b1;
+$fa-var-bluetooth-b: \f294;
+$fa-var-sticker-mule: \f3f7;
+$fa-var-creative-commons-zero: \f4f3;
+$fa-var-hips: \f452;
+$fa-var-behance: \f1b4;
+$fa-var-reddit: \f1a1;
+$fa-var-discord: \f392;
+$fa-var-chrome: \f268;
+$fa-var-app-store-ios: \f370;
+$fa-var-cc-discover: \f1f2;
+$fa-var-wpbeginner: \f297;
+$fa-var-confluence: \f78d;
+$fa-var-mdb: \f8ca;
+$fa-var-dochub: \f394;
+$fa-var-accessible-icon: \f368;
+$fa-var-ebay: \f4f4;
+$fa-var-amazon: \f270;
+$fa-var-unsplash: \e07c;
+$fa-var-yarn: \f7e3;
+$fa-var-square-steam: \f1b7;
+$fa-var-steam-square: \f1b7;
+$fa-var-500px: \f26e;
+$fa-var-square-vimeo: \f194;
+$fa-var-vimeo-square: \f194;
+$fa-var-asymmetrik: \f372;
+$fa-var-font-awesome: \f2b4;
+$fa-var-font-awesome-flag: \f2b4;
+$fa-var-font-awesome-logo-full: \f2b4;
+$fa-var-gratipay: \f184;
+$fa-var-apple: \f179;
+$fa-var-hive: \e07f;
+$fa-var-gitkraken: \f3a6;
+$fa-var-keybase: \f4f5;
+$fa-var-apple-pay: \f415;
+$fa-var-padlet: \e4a0;
+$fa-var-amazon-pay: \f42c;
+$fa-var-square-github: \f092;
+$fa-var-github-square: \f092;
+$fa-var-stumbleupon: \f1a4;
+$fa-var-fedex: \f797;
+$fa-var-phoenix-framework: \f3dc;
+$fa-var-shopify: \e057;
+$fa-var-neos: \f612;
+$fa-var-hackerrank: \f5f7;
+$fa-var-researchgate: \f4f8;
+$fa-var-swift: \f8e1;
+$fa-var-angular: \f420;
+$fa-var-speakap: \f3f3;
+$fa-var-angrycreative: \f36e;
+$fa-var-y-combinator: \f23b;
+$fa-var-empire: \f1d1;
+$fa-var-envira: \f299;
+$fa-var-square-gitlab: \e5ae;
+$fa-var-gitlab-square: \e5ae;
+$fa-var-studiovinari: \f3f8;
+$fa-var-pied-piper: \f2ae;
+$fa-var-wordpress: \f19a;
+$fa-var-product-hunt: \f288;
+$fa-var-firefox: \f269;
+$fa-var-linode: \f2b8;
+$fa-var-goodreads: \f3a8;
+$fa-var-square-odnoklassniki: \f264;
+$fa-var-odnoklassniki-square: \f264;
+$fa-var-jsfiddle: \f1cc;
+$fa-var-sith: \f512;
+$fa-var-themeisle: \f2b2;
+$fa-var-page4: \f3d7;
+$fa-var-hashnode: \e499;
+$fa-var-react: \f41b;
+$fa-var-cc-paypal: \f1f4;
+$fa-var-squarespace: \f5be;
+$fa-var-cc-stripe: \f1f5;
+$fa-var-creative-commons-share: \f4f2;
+$fa-var-bitcoin: \f379;
+$fa-var-keycdn: \f3ba;
+$fa-var-opera: \f26a;
+$fa-var-itch-io: \f83a;
+$fa-var-umbraco: \f8e8;
+$fa-var-galactic-senate: \f50d;
+$fa-var-ubuntu: \f7df;
+$fa-var-draft2digital: \f396;
+$fa-var-stripe: \f429;
+$fa-var-houzz: \f27c;
+$fa-var-gg: \f260;
+$fa-var-dhl: \f790;
+$fa-var-square-pinterest: \f0d3;
+$fa-var-pinterest-square: \f0d3;
+$fa-var-xing: \f168;
+$fa-var-blackberry: \f37b;
+$fa-var-creative-commons-pd: \f4ec;
+$fa-var-playstation: \f3df;
+$fa-var-quinscape: \f459;
+$fa-var-less: \f41d;
+$fa-var-blogger-b: \f37d;
+$fa-var-opencart: \f23d;
+$fa-var-vine: \f1ca;
+$fa-var-paypal: \f1ed;
+$fa-var-gitlab: \f296;
+$fa-var-typo3: \f42b;
+$fa-var-reddit-alien: \f281;
+$fa-var-yahoo: \f19e;
+$fa-var-dailymotion: \e052;
+$fa-var-affiliatetheme: \f36b;
+$fa-var-pied-piper-pp: \f1a7;
+$fa-var-bootstrap: \f836;
+$fa-var-odnoklassniki: \f263;
+$fa-var-nfc-symbol: \e531;
+$fa-var-ethereum: \f42e;
+$fa-var-speaker-deck: \f83c;
+$fa-var-creative-commons-nc-eu: \f4e9;
+$fa-var-patreon: \f3d9;
+$fa-var-avianex: \f374;
+$fa-var-ello: \f5f1;
+$fa-var-gofore: \f3a7;
+$fa-var-bimobject: \f378;
+$fa-var-facebook-f: \f39e;
+$fa-var-square-google-plus: \f0d4;
+$fa-var-google-plus-square: \f0d4;
+$fa-var-mandalorian: \f50f;
+$fa-var-first-order-alt: \f50a;
+$fa-var-osi: \f41a;
+$fa-var-google-wallet: \f1ee;
+$fa-var-d-and-d-beyond: \f6ca;
+$fa-var-periscope: \f3da;
+$fa-var-fulcrum: \f50b;
+$fa-var-cloudscale: \f383;
+$fa-var-forumbee: \f211;
+$fa-var-mizuni: \f3cc;
+$fa-var-schlix: \f3ea;
+$fa-var-square-xing: \f169;
+$fa-var-xing-square: \f169;
+$fa-var-bandcamp: \f2d5;
+$fa-var-wpforms: \f298;
+$fa-var-cloudversify: \f385;
+$fa-var-usps: \f7e1;
+$fa-var-megaport: \f5a3;
+$fa-var-magento: \f3c4;
+$fa-var-spotify: \f1bc;
+$fa-var-optin-monster: \f23c;
+$fa-var-fly: \f417;
+$fa-var-aviato: \f421;
+$fa-var-itunes: \f3b4;
+$fa-var-cuttlefish: \f38c;
+$fa-var-blogger: \f37c;
+$fa-var-flickr: \f16e;
+$fa-var-viber: \f409;
+$fa-var-soundcloud: \f1be;
+$fa-var-digg: \f1a6;
+$fa-var-tencent-weibo: \f1d5;
+$fa-var-symfony: \f83d;
+$fa-var-maxcdn: \f136;
+$fa-var-etsy: \f2d7;
+$fa-var-facebook-messenger: \f39f;
+$fa-var-audible: \f373;
+$fa-var-think-peaks: \f731;
+$fa-var-bilibili: \e3d9;
+$fa-var-erlang: \f39d;
+$fa-var-cotton-bureau: \f89e;
+$fa-var-dashcube: \f210;
+$fa-var-42-group: \e080;
+$fa-var-innosoft: \e080;
+$fa-var-stack-exchange: \f18d;
+$fa-var-elementor: \f430;
+$fa-var-square-pied-piper: \e01e;
+$fa-var-pied-piper-square: \e01e;
+$fa-var-creative-commons-nd: \f4eb;
+$fa-var-palfed: \f3d8;
+$fa-var-superpowers: \f2dd;
+$fa-var-resolving: \f3e7;
+$fa-var-xbox: \f412;
+$fa-var-searchengin: \f3eb;
+$fa-var-tiktok: \e07b;
+$fa-var-square-facebook: \f082;
+$fa-var-facebook-square: \f082;
+$fa-var-renren: \f18b;
+$fa-var-linux: \f17c;
+$fa-var-glide: \f2a5;
+$fa-var-linkedin: \f08c;
+$fa-var-hubspot: \f3b2;
+$fa-var-deploydog: \f38e;
+$fa-var-twitch: \f1e8;
+$fa-var-ravelry: \f2d9;
+$fa-var-mixer: \e056;
+$fa-var-square-lastfm: \f203;
+$fa-var-lastfm-square: \f203;
+$fa-var-vimeo: \f40a;
+$fa-var-mendeley: \f7b3;
+$fa-var-uniregistry: \f404;
+$fa-var-figma: \f799;
+$fa-var-creative-commons-remix: \f4ee;
+$fa-var-cc-amazon-pay: \f42d;
+$fa-var-dropbox: \f16b;
+$fa-var-instagram: \f16d;
+$fa-var-cmplid: \e360;
+$fa-var-facebook: \f09a;
+$fa-var-gripfire: \f3ac;
+$fa-var-jedi-order: \f50e;
+$fa-var-uikit: \f403;
+$fa-var-fort-awesome-alt: \f3a3;
+$fa-var-phabricator: \f3db;
+$fa-var-ussunnah: \f407;
+$fa-var-earlybirds: \f39a;
+$fa-var-trade-federation: \f513;
+$fa-var-autoprefixer: \f41c;
+$fa-var-whatsapp: \f232;
+$fa-var-slideshare: \f1e7;
+$fa-var-google-play: \f3ab;
+$fa-var-viadeo: \f2a9;
+$fa-var-line: \f3c0;
+$fa-var-google-drive: \f3aa;
+$fa-var-servicestack: \f3ec;
+$fa-var-simplybuilt: \f215;
+$fa-var-bitbucket: \f171;
+$fa-var-imdb: \f2d8;
+$fa-var-deezer: \e077;
+$fa-var-raspberry-pi: \f7bb;
+$fa-var-jira: \f7b1;
+$fa-var-docker: \f395;
+$fa-var-screenpal: \e570;
+$fa-var-bluetooth: \f293;
+$fa-var-gitter: \f426;
+$fa-var-d-and-d: \f38d;
+$fa-var-microblog: \e01a;
+$fa-var-cc-diners-club: \f24c;
+$fa-var-gg-circle: \f261;
+$fa-var-pied-piper-hat: \f4e5;
+$fa-var-kickstarter-k: \f3bc;
+$fa-var-yandex: \f413;
+$fa-var-readme: \f4d5;
+$fa-var-html5: \f13b;
+$fa-var-sellsy: \f213;
+$fa-var-sass: \f41e;
+$fa-var-wirsindhandwerk: \e2d0;
+$fa-var-wsh: \e2d0;
+$fa-var-buromobelexperte: \f37f;
+$fa-var-salesforce: \f83b;
+$fa-var-octopus-deploy: \e082;
+$fa-var-medapps: \f3c6;
+$fa-var-ns8: \f3d5;
+$fa-var-pinterest-p: \f231;
+$fa-var-apper: \f371;
+$fa-var-fort-awesome: \f286;
+$fa-var-waze: \f83f;
+$fa-var-cc-jcb: \f24b;
+$fa-var-snapchat: \f2ab;
+$fa-var-snapchat-ghost: \f2ab;
+$fa-var-fantasy-flight-games: \f6dc;
+$fa-var-rust: \e07a;
+$fa-var-wix: \f5cf;
+$fa-var-square-behance: \f1b5;
+$fa-var-behance-square: \f1b5;
+$fa-var-supple: \f3f9;
+$fa-var-rebel: \f1d0;
+$fa-var-css3: \f13c;
+$fa-var-staylinked: \f3f5;
+$fa-var-kaggle: \f5fa;
+$fa-var-space-awesome: \e5ac;
+$fa-var-deviantart: \f1bd;
+$fa-var-cpanel: \f388;
+$fa-var-goodreads-g: \f3a9;
+$fa-var-square-git: \f1d2;
+$fa-var-git-square: \f1d2;
+$fa-var-square-tumblr: \f174;
+$fa-var-tumblr-square: \f174;
+$fa-var-trello: \f181;
+$fa-var-creative-commons-nc-jp: \f4ea;
+$fa-var-get-pocket: \f265;
+$fa-var-perbyte: \e083;
+$fa-var-grunt: \f3ad;
+$fa-var-weebly: \f5cc;
+$fa-var-connectdevelop: \f20e;
+$fa-var-leanpub: \f212;
+$fa-var-black-tie: \f27e;
+$fa-var-themeco: \f5c6;
+$fa-var-python: \f3e2;
+$fa-var-android: \f17b;
+$fa-var-bots: \e340;
+$fa-var-free-code-camp: \f2c5;
+$fa-var-hornbill: \f592;
+$fa-var-js: \f3b8;
+$fa-var-ideal: \e013;
+$fa-var-git: \f1d3;
+$fa-var-dev: \f6cc;
+$fa-var-sketch: \f7c6;
+$fa-var-yandex-international: \f414;
+$fa-var-cc-amex: \f1f3;
+$fa-var-uber: \f402;
+$fa-var-github: \f09b;
+$fa-var-php: \f457;
+$fa-var-alipay: \f642;
+$fa-var-youtube: \f167;
+$fa-var-skyatlas: \f216;
+$fa-var-firefox-browser: \e007;
+$fa-var-replyd: \f3e6;
+$fa-var-suse: \f7d6;
+$fa-var-jenkins: \f3b6;
+$fa-var-twitter: \f099;
+$fa-var-rockrms: \f3e9;
+$fa-var-pinterest: \f0d2;
+$fa-var-buffer: \f837;
+$fa-var-npm: \f3d4;
+$fa-var-yammer: \f840;
+$fa-var-btc: \f15a;
+$fa-var-dribbble: \f17d;
+$fa-var-stumbleupon-circle: \f1a3;
+$fa-var-internet-explorer: \f26b;
+$fa-var-telegram: \f2c6;
+$fa-var-telegram-plane: \f2c6;
+$fa-var-old-republic: \f510;
+$fa-var-square-whatsapp: \f40c;
+$fa-var-whatsapp-square: \f40c;
+$fa-var-node-js: \f3d3;
+$fa-var-edge-legacy: \e078;
+$fa-var-slack: \f198;
+$fa-var-slack-hash: \f198;
+$fa-var-medrt: \f3c8;
+$fa-var-usb: \f287;
+$fa-var-tumblr: \f173;
+$fa-var-vaadin: \f408;
+$fa-var-quora: \f2c4;
+$fa-var-reacteurope: \f75d;
+$fa-var-medium: \f23a;
+$fa-var-medium-m: \f23a;
+$fa-var-amilia: \f36d;
+$fa-var-mixcloud: \f289;
+$fa-var-flipboard: \f44d;
+$fa-var-viacoin: \f237;
+$fa-var-critical-role: \f6c9;
+$fa-var-sitrox: \e44a;
+$fa-var-discourse: \f393;
+$fa-var-joomla: \f1aa;
+$fa-var-mastodon: \f4f6;
+$fa-var-airbnb: \f834;
+$fa-var-wolf-pack-battalion: \f514;
+$fa-var-buy-n-large: \f8a6;
+$fa-var-gulp: \f3ae;
+$fa-var-creative-commons-sampling-plus: \f4f1;
+$fa-var-strava: \f428;
+$fa-var-ember: \f423;
+$fa-var-canadian-maple-leaf: \f785;
+$fa-var-teamspeak: \f4f9;
+$fa-var-pushed: \f3e1;
+$fa-var-wordpress-simple: \f411;
+$fa-var-nutritionix: \f3d6;
+$fa-var-wodu: \e088;
+$fa-var-google-pay: \e079;
+$fa-var-intercom: \f7af;
+$fa-var-zhihu: \f63f;
+$fa-var-korvue: \f42f;
+$fa-var-pix: \e43a;
+$fa-var-steam-symbol: \f3f6;
+
+$fa-icons: (
+ "0": $fa-var-0,
+ "1": $fa-var-1,
+ "2": $fa-var-2,
+ "3": $fa-var-3,
+ "4": $fa-var-4,
+ "5": $fa-var-5,
+ "6": $fa-var-6,
+ "7": $fa-var-7,
+ "8": $fa-var-8,
+ "9": $fa-var-9,
+ "fill-drip": $fa-var-fill-drip,
+ "arrows-to-circle": $fa-var-arrows-to-circle,
+ "circle-chevron-right": $fa-var-circle-chevron-right,
+ "chevron-circle-right": $fa-var-chevron-circle-right,
+ "at": $fa-var-at,
+ "trash-can": $fa-var-trash-can,
+ "trash-alt": $fa-var-trash-alt,
+ "text-height": $fa-var-text-height,
+ "user-xmark": $fa-var-user-xmark,
+ "user-times": $fa-var-user-times,
+ "stethoscope": $fa-var-stethoscope,
+ "message": $fa-var-message,
+ "comment-alt": $fa-var-comment-alt,
+ "info": $fa-var-info,
+ "down-left-and-up-right-to-center": $fa-var-down-left-and-up-right-to-center,
+ "compress-alt": $fa-var-compress-alt,
+ "explosion": $fa-var-explosion,
+ "file-lines": $fa-var-file-lines,
+ "file-alt": $fa-var-file-alt,
+ "file-text": $fa-var-file-text,
+ "wave-square": $fa-var-wave-square,
+ "ring": $fa-var-ring,
+ "building-un": $fa-var-building-un,
+ "dice-three": $fa-var-dice-three,
+ "calendar-days": $fa-var-calendar-days,
+ "calendar-alt": $fa-var-calendar-alt,
+ "anchor-circle-check": $fa-var-anchor-circle-check,
+ "building-circle-arrow-right": $fa-var-building-circle-arrow-right,
+ "volleyball": $fa-var-volleyball,
+ "volleyball-ball": $fa-var-volleyball-ball,
+ "arrows-up-to-line": $fa-var-arrows-up-to-line,
+ "sort-down": $fa-var-sort-down,
+ "sort-desc": $fa-var-sort-desc,
+ "circle-minus": $fa-var-circle-minus,
+ "minus-circle": $fa-var-minus-circle,
+ "door-open": $fa-var-door-open,
+ "right-from-bracket": $fa-var-right-from-bracket,
+ "sign-out-alt": $fa-var-sign-out-alt,
+ "atom": $fa-var-atom,
+ "soap": $fa-var-soap,
+ "icons": $fa-var-icons,
+ "heart-music-camera-bolt": $fa-var-heart-music-camera-bolt,
+ "microphone-lines-slash": $fa-var-microphone-lines-slash,
+ "microphone-alt-slash": $fa-var-microphone-alt-slash,
+ "bridge-circle-check": $fa-var-bridge-circle-check,
+ "pump-medical": $fa-var-pump-medical,
+ "fingerprint": $fa-var-fingerprint,
+ "hand-point-right": $fa-var-hand-point-right,
+ "magnifying-glass-location": $fa-var-magnifying-glass-location,
+ "search-location": $fa-var-search-location,
+ "forward-step": $fa-var-forward-step,
+ "step-forward": $fa-var-step-forward,
+ "face-smile-beam": $fa-var-face-smile-beam,
+ "smile-beam": $fa-var-smile-beam,
+ "flag-checkered": $fa-var-flag-checkered,
+ "football": $fa-var-football,
+ "football-ball": $fa-var-football-ball,
+ "school-circle-exclamation": $fa-var-school-circle-exclamation,
+ "crop": $fa-var-crop,
+ "angles-down": $fa-var-angles-down,
+ "angle-double-down": $fa-var-angle-double-down,
+ "users-rectangle": $fa-var-users-rectangle,
+ "people-roof": $fa-var-people-roof,
+ "people-line": $fa-var-people-line,
+ "beer-mug-empty": $fa-var-beer-mug-empty,
+ "beer": $fa-var-beer,
+ "diagram-predecessor": $fa-var-diagram-predecessor,
+ "arrow-up-long": $fa-var-arrow-up-long,
+ "long-arrow-up": $fa-var-long-arrow-up,
+ "fire-flame-simple": $fa-var-fire-flame-simple,
+ "burn": $fa-var-burn,
+ "person": $fa-var-person,
+ "male": $fa-var-male,
+ "laptop": $fa-var-laptop,
+ "file-csv": $fa-var-file-csv,
+ "menorah": $fa-var-menorah,
+ "truck-plane": $fa-var-truck-plane,
+ "record-vinyl": $fa-var-record-vinyl,
+ "face-grin-stars": $fa-var-face-grin-stars,
+ "grin-stars": $fa-var-grin-stars,
+ "bong": $fa-var-bong,
+ "spaghetti-monster-flying": $fa-var-spaghetti-monster-flying,
+ "pastafarianism": $fa-var-pastafarianism,
+ "arrow-down-up-across-line": $fa-var-arrow-down-up-across-line,
+ "spoon": $fa-var-spoon,
+ "utensil-spoon": $fa-var-utensil-spoon,
+ "jar-wheat": $fa-var-jar-wheat,
+ "envelopes-bulk": $fa-var-envelopes-bulk,
+ "mail-bulk": $fa-var-mail-bulk,
+ "file-circle-exclamation": $fa-var-file-circle-exclamation,
+ "circle-h": $fa-var-circle-h,
+ "hospital-symbol": $fa-var-hospital-symbol,
+ "pager": $fa-var-pager,
+ "address-book": $fa-var-address-book,
+ "contact-book": $fa-var-contact-book,
+ "strikethrough": $fa-var-strikethrough,
+ "k": $fa-var-k,
+ "landmark-flag": $fa-var-landmark-flag,
+ "pencil": $fa-var-pencil,
+ "pencil-alt": $fa-var-pencil-alt,
+ "backward": $fa-var-backward,
+ "caret-right": $fa-var-caret-right,
+ "comments": $fa-var-comments,
+ "paste": $fa-var-paste,
+ "file-clipboard": $fa-var-file-clipboard,
+ "code-pull-request": $fa-var-code-pull-request,
+ "clipboard-list": $fa-var-clipboard-list,
+ "truck-ramp-box": $fa-var-truck-ramp-box,
+ "truck-loading": $fa-var-truck-loading,
+ "user-check": $fa-var-user-check,
+ "vial-virus": $fa-var-vial-virus,
+ "sheet-plastic": $fa-var-sheet-plastic,
+ "blog": $fa-var-blog,
+ "user-ninja": $fa-var-user-ninja,
+ "person-arrow-up-from-line": $fa-var-person-arrow-up-from-line,
+ "scroll-torah": $fa-var-scroll-torah,
+ "torah": $fa-var-torah,
+ "broom-ball": $fa-var-broom-ball,
+ "quidditch": $fa-var-quidditch,
+ "quidditch-broom-ball": $fa-var-quidditch-broom-ball,
+ "toggle-off": $fa-var-toggle-off,
+ "box-archive": $fa-var-box-archive,
+ "archive": $fa-var-archive,
+ "person-drowning": $fa-var-person-drowning,
+ "arrow-down-9-1": $fa-var-arrow-down-9-1,
+ "sort-numeric-desc": $fa-var-sort-numeric-desc,
+ "sort-numeric-down-alt": $fa-var-sort-numeric-down-alt,
+ "face-grin-tongue-squint": $fa-var-face-grin-tongue-squint,
+ "grin-tongue-squint": $fa-var-grin-tongue-squint,
+ "spray-can": $fa-var-spray-can,
+ "truck-monster": $fa-var-truck-monster,
+ "w": $fa-var-w,
+ "earth-africa": $fa-var-earth-africa,
+ "globe-africa": $fa-var-globe-africa,
+ "rainbow": $fa-var-rainbow,
+ "circle-notch": $fa-var-circle-notch,
+ "tablet-screen-button": $fa-var-tablet-screen-button,
+ "tablet-alt": $fa-var-tablet-alt,
+ "paw": $fa-var-paw,
+ "cloud": $fa-var-cloud,
+ "trowel-bricks": $fa-var-trowel-bricks,
+ "face-flushed": $fa-var-face-flushed,
+ "flushed": $fa-var-flushed,
+ "hospital-user": $fa-var-hospital-user,
+ "tent-arrow-left-right": $fa-var-tent-arrow-left-right,
+ "gavel": $fa-var-gavel,
+ "legal": $fa-var-legal,
+ "binoculars": $fa-var-binoculars,
+ "microphone-slash": $fa-var-microphone-slash,
+ "box-tissue": $fa-var-box-tissue,
+ "motorcycle": $fa-var-motorcycle,
+ "bell-concierge": $fa-var-bell-concierge,
+ "concierge-bell": $fa-var-concierge-bell,
+ "pen-ruler": $fa-var-pen-ruler,
+ "pencil-ruler": $fa-var-pencil-ruler,
+ "people-arrows": $fa-var-people-arrows,
+ "people-arrows-left-right": $fa-var-people-arrows-left-right,
+ "mars-and-venus-burst": $fa-var-mars-and-venus-burst,
+ "square-caret-right": $fa-var-square-caret-right,
+ "caret-square-right": $fa-var-caret-square-right,
+ "scissors": $fa-var-scissors,
+ "cut": $fa-var-cut,
+ "sun-plant-wilt": $fa-var-sun-plant-wilt,
+ "toilets-portable": $fa-var-toilets-portable,
+ "hockey-puck": $fa-var-hockey-puck,
+ "table": $fa-var-table,
+ "magnifying-glass-arrow-right": $fa-var-magnifying-glass-arrow-right,
+ "tachograph-digital": $fa-var-tachograph-digital,
+ "digital-tachograph": $fa-var-digital-tachograph,
+ "users-slash": $fa-var-users-slash,
+ "clover": $fa-var-clover,
+ "reply": $fa-var-reply,
+ "mail-reply": $fa-var-mail-reply,
+ "star-and-crescent": $fa-var-star-and-crescent,
+ "house-fire": $fa-var-house-fire,
+ "square-minus": $fa-var-square-minus,
+ "minus-square": $fa-var-minus-square,
+ "helicopter": $fa-var-helicopter,
+ "compass": $fa-var-compass,
+ "square-caret-down": $fa-var-square-caret-down,
+ "caret-square-down": $fa-var-caret-square-down,
+ "file-circle-question": $fa-var-file-circle-question,
+ "laptop-code": $fa-var-laptop-code,
+ "swatchbook": $fa-var-swatchbook,
+ "prescription-bottle": $fa-var-prescription-bottle,
+ "bars": $fa-var-bars,
+ "navicon": $fa-var-navicon,
+ "people-group": $fa-var-people-group,
+ "hourglass-end": $fa-var-hourglass-end,
+ "hourglass-3": $fa-var-hourglass-3,
+ "heart-crack": $fa-var-heart-crack,
+ "heart-broken": $fa-var-heart-broken,
+ "square-up-right": $fa-var-square-up-right,
+ "external-link-square-alt": $fa-var-external-link-square-alt,
+ "face-kiss-beam": $fa-var-face-kiss-beam,
+ "kiss-beam": $fa-var-kiss-beam,
+ "film": $fa-var-film,
+ "ruler-horizontal": $fa-var-ruler-horizontal,
+ "people-robbery": $fa-var-people-robbery,
+ "lightbulb": $fa-var-lightbulb,
+ "caret-left": $fa-var-caret-left,
+ "circle-exclamation": $fa-var-circle-exclamation,
+ "exclamation-circle": $fa-var-exclamation-circle,
+ "school-circle-xmark": $fa-var-school-circle-xmark,
+ "arrow-right-from-bracket": $fa-var-arrow-right-from-bracket,
+ "sign-out": $fa-var-sign-out,
+ "circle-chevron-down": $fa-var-circle-chevron-down,
+ "chevron-circle-down": $fa-var-chevron-circle-down,
+ "unlock-keyhole": $fa-var-unlock-keyhole,
+ "unlock-alt": $fa-var-unlock-alt,
+ "cloud-showers-heavy": $fa-var-cloud-showers-heavy,
+ "headphones-simple": $fa-var-headphones-simple,
+ "headphones-alt": $fa-var-headphones-alt,
+ "sitemap": $fa-var-sitemap,
+ "circle-dollar-to-slot": $fa-var-circle-dollar-to-slot,
+ "donate": $fa-var-donate,
+ "memory": $fa-var-memory,
+ "road-spikes": $fa-var-road-spikes,
+ "fire-burner": $fa-var-fire-burner,
+ "flag": $fa-var-flag,
+ "hanukiah": $fa-var-hanukiah,
+ "feather": $fa-var-feather,
+ "volume-low": $fa-var-volume-low,
+ "volume-down": $fa-var-volume-down,
+ "comment-slash": $fa-var-comment-slash,
+ "cloud-sun-rain": $fa-var-cloud-sun-rain,
+ "compress": $fa-var-compress,
+ "wheat-awn": $fa-var-wheat-awn,
+ "wheat-alt": $fa-var-wheat-alt,
+ "ankh": $fa-var-ankh,
+ "hands-holding-child": $fa-var-hands-holding-child,
+ "asterisk": $fa-var-asterisk,
+ "square-check": $fa-var-square-check,
+ "check-square": $fa-var-check-square,
+ "peseta-sign": $fa-var-peseta-sign,
+ "heading": $fa-var-heading,
+ "header": $fa-var-header,
+ "ghost": $fa-var-ghost,
+ "list": $fa-var-list,
+ "list-squares": $fa-var-list-squares,
+ "square-phone-flip": $fa-var-square-phone-flip,
+ "phone-square-alt": $fa-var-phone-square-alt,
+ "cart-plus": $fa-var-cart-plus,
+ "gamepad": $fa-var-gamepad,
+ "circle-dot": $fa-var-circle-dot,
+ "dot-circle": $fa-var-dot-circle,
+ "face-dizzy": $fa-var-face-dizzy,
+ "dizzy": $fa-var-dizzy,
+ "egg": $fa-var-egg,
+ "house-medical-circle-xmark": $fa-var-house-medical-circle-xmark,
+ "campground": $fa-var-campground,
+ "folder-plus": $fa-var-folder-plus,
+ "futbol": $fa-var-futbol,
+ "futbol-ball": $fa-var-futbol-ball,
+ "soccer-ball": $fa-var-soccer-ball,
+ "paintbrush": $fa-var-paintbrush,
+ "paint-brush": $fa-var-paint-brush,
+ "lock": $fa-var-lock,
+ "gas-pump": $fa-var-gas-pump,
+ "hot-tub-person": $fa-var-hot-tub-person,
+ "hot-tub": $fa-var-hot-tub,
+ "map-location": $fa-var-map-location,
+ "map-marked": $fa-var-map-marked,
+ "house-flood-water": $fa-var-house-flood-water,
+ "tree": $fa-var-tree,
+ "bridge-lock": $fa-var-bridge-lock,
+ "sack-dollar": $fa-var-sack-dollar,
+ "pen-to-square": $fa-var-pen-to-square,
+ "edit": $fa-var-edit,
+ "car-side": $fa-var-car-side,
+ "share-nodes": $fa-var-share-nodes,
+ "share-alt": $fa-var-share-alt,
+ "heart-circle-minus": $fa-var-heart-circle-minus,
+ "hourglass-half": $fa-var-hourglass-half,
+ "hourglass-2": $fa-var-hourglass-2,
+ "microscope": $fa-var-microscope,
+ "sink": $fa-var-sink,
+ "bag-shopping": $fa-var-bag-shopping,
+ "shopping-bag": $fa-var-shopping-bag,
+ "arrow-down-z-a": $fa-var-arrow-down-z-a,
+ "sort-alpha-desc": $fa-var-sort-alpha-desc,
+ "sort-alpha-down-alt": $fa-var-sort-alpha-down-alt,
+ "mitten": $fa-var-mitten,
+ "person-rays": $fa-var-person-rays,
+ "users": $fa-var-users,
+ "eye-slash": $fa-var-eye-slash,
+ "flask-vial": $fa-var-flask-vial,
+ "hand": $fa-var-hand,
+ "hand-paper": $fa-var-hand-paper,
+ "om": $fa-var-om,
+ "worm": $fa-var-worm,
+ "house-circle-xmark": $fa-var-house-circle-xmark,
+ "plug": $fa-var-plug,
+ "chevron-up": $fa-var-chevron-up,
+ "hand-spock": $fa-var-hand-spock,
+ "stopwatch": $fa-var-stopwatch,
+ "face-kiss": $fa-var-face-kiss,
+ "kiss": $fa-var-kiss,
+ "bridge-circle-xmark": $fa-var-bridge-circle-xmark,
+ "face-grin-tongue": $fa-var-face-grin-tongue,
+ "grin-tongue": $fa-var-grin-tongue,
+ "chess-bishop": $fa-var-chess-bishop,
+ "face-grin-wink": $fa-var-face-grin-wink,
+ "grin-wink": $fa-var-grin-wink,
+ "ear-deaf": $fa-var-ear-deaf,
+ "deaf": $fa-var-deaf,
+ "deafness": $fa-var-deafness,
+ "hard-of-hearing": $fa-var-hard-of-hearing,
+ "road-circle-check": $fa-var-road-circle-check,
+ "dice-five": $fa-var-dice-five,
+ "square-rss": $fa-var-square-rss,
+ "rss-square": $fa-var-rss-square,
+ "land-mine-on": $fa-var-land-mine-on,
+ "i-cursor": $fa-var-i-cursor,
+ "stamp": $fa-var-stamp,
+ "stairs": $fa-var-stairs,
+ "i": $fa-var-i,
+ "hryvnia-sign": $fa-var-hryvnia-sign,
+ "hryvnia": $fa-var-hryvnia,
+ "pills": $fa-var-pills,
+ "face-grin-wide": $fa-var-face-grin-wide,
+ "grin-alt": $fa-var-grin-alt,
+ "tooth": $fa-var-tooth,
+ "v": $fa-var-v,
+ "bicycle": $fa-var-bicycle,
+ "staff-snake": $fa-var-staff-snake,
+ "rod-asclepius": $fa-var-rod-asclepius,
+ "rod-snake": $fa-var-rod-snake,
+ "staff-aesculapius": $fa-var-staff-aesculapius,
+ "head-side-cough-slash": $fa-var-head-side-cough-slash,
+ "truck-medical": $fa-var-truck-medical,
+ "ambulance": $fa-var-ambulance,
+ "wheat-awn-circle-exclamation": $fa-var-wheat-awn-circle-exclamation,
+ "snowman": $fa-var-snowman,
+ "mortar-pestle": $fa-var-mortar-pestle,
+ "road-barrier": $fa-var-road-barrier,
+ "school": $fa-var-school,
+ "igloo": $fa-var-igloo,
+ "joint": $fa-var-joint,
+ "angle-right": $fa-var-angle-right,
+ "horse": $fa-var-horse,
+ "q": $fa-var-q,
+ "g": $fa-var-g,
+ "notes-medical": $fa-var-notes-medical,
+ "temperature-half": $fa-var-temperature-half,
+ "temperature-2": $fa-var-temperature-2,
+ "thermometer-2": $fa-var-thermometer-2,
+ "thermometer-half": $fa-var-thermometer-half,
+ "dong-sign": $fa-var-dong-sign,
+ "capsules": $fa-var-capsules,
+ "poo-storm": $fa-var-poo-storm,
+ "poo-bolt": $fa-var-poo-bolt,
+ "face-frown-open": $fa-var-face-frown-open,
+ "frown-open": $fa-var-frown-open,
+ "hand-point-up": $fa-var-hand-point-up,
+ "money-bill": $fa-var-money-bill,
+ "bookmark": $fa-var-bookmark,
+ "align-justify": $fa-var-align-justify,
+ "umbrella-beach": $fa-var-umbrella-beach,
+ "helmet-un": $fa-var-helmet-un,
+ "bullseye": $fa-var-bullseye,
+ "bacon": $fa-var-bacon,
+ "hand-point-down": $fa-var-hand-point-down,
+ "arrow-up-from-bracket": $fa-var-arrow-up-from-bracket,
+ "folder": $fa-var-folder,
+ "folder-blank": $fa-var-folder-blank,
+ "file-waveform": $fa-var-file-waveform,
+ "file-medical-alt": $fa-var-file-medical-alt,
+ "radiation": $fa-var-radiation,
+ "chart-simple": $fa-var-chart-simple,
+ "mars-stroke": $fa-var-mars-stroke,
+ "vial": $fa-var-vial,
+ "gauge": $fa-var-gauge,
+ "dashboard": $fa-var-dashboard,
+ "gauge-med": $fa-var-gauge-med,
+ "tachometer-alt-average": $fa-var-tachometer-alt-average,
+ "wand-magic-sparkles": $fa-var-wand-magic-sparkles,
+ "magic-wand-sparkles": $fa-var-magic-wand-sparkles,
+ "e": $fa-var-e,
+ "pen-clip": $fa-var-pen-clip,
+ "pen-alt": $fa-var-pen-alt,
+ "bridge-circle-exclamation": $fa-var-bridge-circle-exclamation,
+ "user": $fa-var-user,
+ "school-circle-check": $fa-var-school-circle-check,
+ "dumpster": $fa-var-dumpster,
+ "van-shuttle": $fa-var-van-shuttle,
+ "shuttle-van": $fa-var-shuttle-van,
+ "building-user": $fa-var-building-user,
+ "square-caret-left": $fa-var-square-caret-left,
+ "caret-square-left": $fa-var-caret-square-left,
+ "highlighter": $fa-var-highlighter,
+ "key": $fa-var-key,
+ "bullhorn": $fa-var-bullhorn,
+ "globe": $fa-var-globe,
+ "synagogue": $fa-var-synagogue,
+ "person-half-dress": $fa-var-person-half-dress,
+ "road-bridge": $fa-var-road-bridge,
+ "location-arrow": $fa-var-location-arrow,
+ "c": $fa-var-c,
+ "tablet-button": $fa-var-tablet-button,
+ "building-lock": $fa-var-building-lock,
+ "pizza-slice": $fa-var-pizza-slice,
+ "money-bill-wave": $fa-var-money-bill-wave,
+ "chart-area": $fa-var-chart-area,
+ "area-chart": $fa-var-area-chart,
+ "house-flag": $fa-var-house-flag,
+ "person-circle-minus": $fa-var-person-circle-minus,
+ "ban": $fa-var-ban,
+ "cancel": $fa-var-cancel,
+ "camera-rotate": $fa-var-camera-rotate,
+ "spray-can-sparkles": $fa-var-spray-can-sparkles,
+ "air-freshener": $fa-var-air-freshener,
+ "star": $fa-var-star,
+ "repeat": $fa-var-repeat,
+ "cross": $fa-var-cross,
+ "box": $fa-var-box,
+ "venus-mars": $fa-var-venus-mars,
+ "arrow-pointer": $fa-var-arrow-pointer,
+ "mouse-pointer": $fa-var-mouse-pointer,
+ "maximize": $fa-var-maximize,
+ "expand-arrows-alt": $fa-var-expand-arrows-alt,
+ "charging-station": $fa-var-charging-station,
+ "shapes": $fa-var-shapes,
+ "triangle-circle-square": $fa-var-triangle-circle-square,
+ "shuffle": $fa-var-shuffle,
+ "random": $fa-var-random,
+ "person-running": $fa-var-person-running,
+ "running": $fa-var-running,
+ "mobile-retro": $fa-var-mobile-retro,
+ "grip-lines-vertical": $fa-var-grip-lines-vertical,
+ "spider": $fa-var-spider,
+ "hands-bound": $fa-var-hands-bound,
+ "file-invoice-dollar": $fa-var-file-invoice-dollar,
+ "plane-circle-exclamation": $fa-var-plane-circle-exclamation,
+ "x-ray": $fa-var-x-ray,
+ "spell-check": $fa-var-spell-check,
+ "slash": $fa-var-slash,
+ "computer-mouse": $fa-var-computer-mouse,
+ "mouse": $fa-var-mouse,
+ "arrow-right-to-bracket": $fa-var-arrow-right-to-bracket,
+ "sign-in": $fa-var-sign-in,
+ "shop-slash": $fa-var-shop-slash,
+ "store-alt-slash": $fa-var-store-alt-slash,
+ "server": $fa-var-server,
+ "virus-covid-slash": $fa-var-virus-covid-slash,
+ "shop-lock": $fa-var-shop-lock,
+ "hourglass-start": $fa-var-hourglass-start,
+ "hourglass-1": $fa-var-hourglass-1,
+ "blender-phone": $fa-var-blender-phone,
+ "building-wheat": $fa-var-building-wheat,
+ "person-breastfeeding": $fa-var-person-breastfeeding,
+ "right-to-bracket": $fa-var-right-to-bracket,
+ "sign-in-alt": $fa-var-sign-in-alt,
+ "venus": $fa-var-venus,
+ "passport": $fa-var-passport,
+ "heart-pulse": $fa-var-heart-pulse,
+ "heartbeat": $fa-var-heartbeat,
+ "people-carry-box": $fa-var-people-carry-box,
+ "people-carry": $fa-var-people-carry,
+ "temperature-high": $fa-var-temperature-high,
+ "microchip": $fa-var-microchip,
+ "crown": $fa-var-crown,
+ "weight-hanging": $fa-var-weight-hanging,
+ "xmarks-lines": $fa-var-xmarks-lines,
+ "file-prescription": $fa-var-file-prescription,
+ "weight-scale": $fa-var-weight-scale,
+ "weight": $fa-var-weight,
+ "user-group": $fa-var-user-group,
+ "user-friends": $fa-var-user-friends,
+ "arrow-up-a-z": $fa-var-arrow-up-a-z,
+ "sort-alpha-up": $fa-var-sort-alpha-up,
+ "chess-knight": $fa-var-chess-knight,
+ "face-laugh-squint": $fa-var-face-laugh-squint,
+ "laugh-squint": $fa-var-laugh-squint,
+ "wheelchair": $fa-var-wheelchair,
+ "circle-arrow-up": $fa-var-circle-arrow-up,
+ "arrow-circle-up": $fa-var-arrow-circle-up,
+ "toggle-on": $fa-var-toggle-on,
+ "person-walking": $fa-var-person-walking,
+ "walking": $fa-var-walking,
+ "l": $fa-var-l,
+ "fire": $fa-var-fire,
+ "bed-pulse": $fa-var-bed-pulse,
+ "procedures": $fa-var-procedures,
+ "shuttle-space": $fa-var-shuttle-space,
+ "space-shuttle": $fa-var-space-shuttle,
+ "face-laugh": $fa-var-face-laugh,
+ "laugh": $fa-var-laugh,
+ "folder-open": $fa-var-folder-open,
+ "heart-circle-plus": $fa-var-heart-circle-plus,
+ "code-fork": $fa-var-code-fork,
+ "city": $fa-var-city,
+ "microphone-lines": $fa-var-microphone-lines,
+ "microphone-alt": $fa-var-microphone-alt,
+ "pepper-hot": $fa-var-pepper-hot,
+ "unlock": $fa-var-unlock,
+ "colon-sign": $fa-var-colon-sign,
+ "headset": $fa-var-headset,
+ "store-slash": $fa-var-store-slash,
+ "road-circle-xmark": $fa-var-road-circle-xmark,
+ "user-minus": $fa-var-user-minus,
+ "mars-stroke-up": $fa-var-mars-stroke-up,
+ "mars-stroke-v": $fa-var-mars-stroke-v,
+ "champagne-glasses": $fa-var-champagne-glasses,
+ "glass-cheers": $fa-var-glass-cheers,
+ "clipboard": $fa-var-clipboard,
+ "house-circle-exclamation": $fa-var-house-circle-exclamation,
+ "file-arrow-up": $fa-var-file-arrow-up,
+ "file-upload": $fa-var-file-upload,
+ "wifi": $fa-var-wifi,
+ "wifi-3": $fa-var-wifi-3,
+ "wifi-strong": $fa-var-wifi-strong,
+ "bath": $fa-var-bath,
+ "bathtub": $fa-var-bathtub,
+ "underline": $fa-var-underline,
+ "user-pen": $fa-var-user-pen,
+ "user-edit": $fa-var-user-edit,
+ "signature": $fa-var-signature,
+ "stroopwafel": $fa-var-stroopwafel,
+ "bold": $fa-var-bold,
+ "anchor-lock": $fa-var-anchor-lock,
+ "building-ngo": $fa-var-building-ngo,
+ "manat-sign": $fa-var-manat-sign,
+ "not-equal": $fa-var-not-equal,
+ "border-top-left": $fa-var-border-top-left,
+ "border-style": $fa-var-border-style,
+ "map-location-dot": $fa-var-map-location-dot,
+ "map-marked-alt": $fa-var-map-marked-alt,
+ "jedi": $fa-var-jedi,
+ "square-poll-vertical": $fa-var-square-poll-vertical,
+ "poll": $fa-var-poll,
+ "mug-hot": $fa-var-mug-hot,
+ "car-battery": $fa-var-car-battery,
+ "battery-car": $fa-var-battery-car,
+ "gift": $fa-var-gift,
+ "dice-two": $fa-var-dice-two,
+ "chess-queen": $fa-var-chess-queen,
+ "glasses": $fa-var-glasses,
+ "chess-board": $fa-var-chess-board,
+ "building-circle-check": $fa-var-building-circle-check,
+ "person-chalkboard": $fa-var-person-chalkboard,
+ "mars-stroke-right": $fa-var-mars-stroke-right,
+ "mars-stroke-h": $fa-var-mars-stroke-h,
+ "hand-back-fist": $fa-var-hand-back-fist,
+ "hand-rock": $fa-var-hand-rock,
+ "square-caret-up": $fa-var-square-caret-up,
+ "caret-square-up": $fa-var-caret-square-up,
+ "cloud-showers-water": $fa-var-cloud-showers-water,
+ "chart-bar": $fa-var-chart-bar,
+ "bar-chart": $fa-var-bar-chart,
+ "hands-bubbles": $fa-var-hands-bubbles,
+ "hands-wash": $fa-var-hands-wash,
+ "less-than-equal": $fa-var-less-than-equal,
+ "train": $fa-var-train,
+ "eye-low-vision": $fa-var-eye-low-vision,
+ "low-vision": $fa-var-low-vision,
+ "crow": $fa-var-crow,
+ "sailboat": $fa-var-sailboat,
+ "window-restore": $fa-var-window-restore,
+ "square-plus": $fa-var-square-plus,
+ "plus-square": $fa-var-plus-square,
+ "torii-gate": $fa-var-torii-gate,
+ "frog": $fa-var-frog,
+ "bucket": $fa-var-bucket,
+ "image": $fa-var-image,
+ "microphone": $fa-var-microphone,
+ "cow": $fa-var-cow,
+ "caret-up": $fa-var-caret-up,
+ "screwdriver": $fa-var-screwdriver,
+ "folder-closed": $fa-var-folder-closed,
+ "house-tsunami": $fa-var-house-tsunami,
+ "square-nfi": $fa-var-square-nfi,
+ "arrow-up-from-ground-water": $fa-var-arrow-up-from-ground-water,
+ "martini-glass": $fa-var-martini-glass,
+ "glass-martini-alt": $fa-var-glass-martini-alt,
+ "rotate-left": $fa-var-rotate-left,
+ "rotate-back": $fa-var-rotate-back,
+ "rotate-backward": $fa-var-rotate-backward,
+ "undo-alt": $fa-var-undo-alt,
+ "table-columns": $fa-var-table-columns,
+ "columns": $fa-var-columns,
+ "lemon": $fa-var-lemon,
+ "head-side-mask": $fa-var-head-side-mask,
+ "handshake": $fa-var-handshake,
+ "gem": $fa-var-gem,
+ "dolly": $fa-var-dolly,
+ "dolly-box": $fa-var-dolly-box,
+ "smoking": $fa-var-smoking,
+ "minimize": $fa-var-minimize,
+ "compress-arrows-alt": $fa-var-compress-arrows-alt,
+ "monument": $fa-var-monument,
+ "snowplow": $fa-var-snowplow,
+ "angles-right": $fa-var-angles-right,
+ "angle-double-right": $fa-var-angle-double-right,
+ "cannabis": $fa-var-cannabis,
+ "circle-play": $fa-var-circle-play,
+ "play-circle": $fa-var-play-circle,
+ "tablets": $fa-var-tablets,
+ "ethernet": $fa-var-ethernet,
+ "euro-sign": $fa-var-euro-sign,
+ "eur": $fa-var-eur,
+ "euro": $fa-var-euro,
+ "chair": $fa-var-chair,
+ "circle-check": $fa-var-circle-check,
+ "check-circle": $fa-var-check-circle,
+ "circle-stop": $fa-var-circle-stop,
+ "stop-circle": $fa-var-stop-circle,
+ "compass-drafting": $fa-var-compass-drafting,
+ "drafting-compass": $fa-var-drafting-compass,
+ "plate-wheat": $fa-var-plate-wheat,
+ "icicles": $fa-var-icicles,
+ "person-shelter": $fa-var-person-shelter,
+ "neuter": $fa-var-neuter,
+ "id-badge": $fa-var-id-badge,
+ "marker": $fa-var-marker,
+ "face-laugh-beam": $fa-var-face-laugh-beam,
+ "laugh-beam": $fa-var-laugh-beam,
+ "helicopter-symbol": $fa-var-helicopter-symbol,
+ "universal-access": $fa-var-universal-access,
+ "circle-chevron-up": $fa-var-circle-chevron-up,
+ "chevron-circle-up": $fa-var-chevron-circle-up,
+ "lari-sign": $fa-var-lari-sign,
+ "volcano": $fa-var-volcano,
+ "person-walking-dashed-line-arrow-right": $fa-var-person-walking-dashed-line-arrow-right,
+ "sterling-sign": $fa-var-sterling-sign,
+ "gbp": $fa-var-gbp,
+ "pound-sign": $fa-var-pound-sign,
+ "viruses": $fa-var-viruses,
+ "square-person-confined": $fa-var-square-person-confined,
+ "user-tie": $fa-var-user-tie,
+ "arrow-down-long": $fa-var-arrow-down-long,
+ "long-arrow-down": $fa-var-long-arrow-down,
+ "tent-arrow-down-to-line": $fa-var-tent-arrow-down-to-line,
+ "certificate": $fa-var-certificate,
+ "reply-all": $fa-var-reply-all,
+ "mail-reply-all": $fa-var-mail-reply-all,
+ "suitcase": $fa-var-suitcase,
+ "person-skating": $fa-var-person-skating,
+ "skating": $fa-var-skating,
+ "filter-circle-dollar": $fa-var-filter-circle-dollar,
+ "funnel-dollar": $fa-var-funnel-dollar,
+ "camera-retro": $fa-var-camera-retro,
+ "circle-arrow-down": $fa-var-circle-arrow-down,
+ "arrow-circle-down": $fa-var-arrow-circle-down,
+ "file-import": $fa-var-file-import,
+ "arrow-right-to-file": $fa-var-arrow-right-to-file,
+ "square-arrow-up-right": $fa-var-square-arrow-up-right,
+ "external-link-square": $fa-var-external-link-square,
+ "box-open": $fa-var-box-open,
+ "scroll": $fa-var-scroll,
+ "spa": $fa-var-spa,
+ "location-pin-lock": $fa-var-location-pin-lock,
+ "pause": $fa-var-pause,
+ "hill-avalanche": $fa-var-hill-avalanche,
+ "temperature-empty": $fa-var-temperature-empty,
+ "temperature-0": $fa-var-temperature-0,
+ "thermometer-0": $fa-var-thermometer-0,
+ "thermometer-empty": $fa-var-thermometer-empty,
+ "bomb": $fa-var-bomb,
+ "registered": $fa-var-registered,
+ "address-card": $fa-var-address-card,
+ "contact-card": $fa-var-contact-card,
+ "vcard": $fa-var-vcard,
+ "scale-unbalanced-flip": $fa-var-scale-unbalanced-flip,
+ "balance-scale-right": $fa-var-balance-scale-right,
+ "subscript": $fa-var-subscript,
+ "diamond-turn-right": $fa-var-diamond-turn-right,
+ "directions": $fa-var-directions,
+ "burst": $fa-var-burst,
+ "house-laptop": $fa-var-house-laptop,
+ "laptop-house": $fa-var-laptop-house,
+ "face-tired": $fa-var-face-tired,
+ "tired": $fa-var-tired,
+ "money-bills": $fa-var-money-bills,
+ "smog": $fa-var-smog,
+ "crutch": $fa-var-crutch,
+ "cloud-arrow-up": $fa-var-cloud-arrow-up,
+ "cloud-upload": $fa-var-cloud-upload,
+ "cloud-upload-alt": $fa-var-cloud-upload-alt,
+ "palette": $fa-var-palette,
+ "arrows-turn-right": $fa-var-arrows-turn-right,
+ "vest": $fa-var-vest,
+ "ferry": $fa-var-ferry,
+ "arrows-down-to-people": $fa-var-arrows-down-to-people,
+ "seedling": $fa-var-seedling,
+ "sprout": $fa-var-sprout,
+ "left-right": $fa-var-left-right,
+ "arrows-alt-h": $fa-var-arrows-alt-h,
+ "boxes-packing": $fa-var-boxes-packing,
+ "circle-arrow-left": $fa-var-circle-arrow-left,
+ "arrow-circle-left": $fa-var-arrow-circle-left,
+ "group-arrows-rotate": $fa-var-group-arrows-rotate,
+ "bowl-food": $fa-var-bowl-food,
+ "candy-cane": $fa-var-candy-cane,
+ "arrow-down-wide-short": $fa-var-arrow-down-wide-short,
+ "sort-amount-asc": $fa-var-sort-amount-asc,
+ "sort-amount-down": $fa-var-sort-amount-down,
+ "cloud-bolt": $fa-var-cloud-bolt,
+ "thunderstorm": $fa-var-thunderstorm,
+ "text-slash": $fa-var-text-slash,
+ "remove-format": $fa-var-remove-format,
+ "face-smile-wink": $fa-var-face-smile-wink,
+ "smile-wink": $fa-var-smile-wink,
+ "file-word": $fa-var-file-word,
+ "file-powerpoint": $fa-var-file-powerpoint,
+ "arrows-left-right": $fa-var-arrows-left-right,
+ "arrows-h": $fa-var-arrows-h,
+ "house-lock": $fa-var-house-lock,
+ "cloud-arrow-down": $fa-var-cloud-arrow-down,
+ "cloud-download": $fa-var-cloud-download,
+ "cloud-download-alt": $fa-var-cloud-download-alt,
+ "children": $fa-var-children,
+ "chalkboard": $fa-var-chalkboard,
+ "blackboard": $fa-var-blackboard,
+ "user-large-slash": $fa-var-user-large-slash,
+ "user-alt-slash": $fa-var-user-alt-slash,
+ "envelope-open": $fa-var-envelope-open,
+ "handshake-simple-slash": $fa-var-handshake-simple-slash,
+ "handshake-alt-slash": $fa-var-handshake-alt-slash,
+ "mattress-pillow": $fa-var-mattress-pillow,
+ "guarani-sign": $fa-var-guarani-sign,
+ "arrows-rotate": $fa-var-arrows-rotate,
+ "refresh": $fa-var-refresh,
+ "sync": $fa-var-sync,
+ "fire-extinguisher": $fa-var-fire-extinguisher,
+ "cruzeiro-sign": $fa-var-cruzeiro-sign,
+ "greater-than-equal": $fa-var-greater-than-equal,
+ "shield-halved": $fa-var-shield-halved,
+ "shield-alt": $fa-var-shield-alt,
+ "book-atlas": $fa-var-book-atlas,
+ "atlas": $fa-var-atlas,
+ "virus": $fa-var-virus,
+ "envelope-circle-check": $fa-var-envelope-circle-check,
+ "layer-group": $fa-var-layer-group,
+ "arrows-to-dot": $fa-var-arrows-to-dot,
+ "archway": $fa-var-archway,
+ "heart-circle-check": $fa-var-heart-circle-check,
+ "house-chimney-crack": $fa-var-house-chimney-crack,
+ "house-damage": $fa-var-house-damage,
+ "file-zipper": $fa-var-file-zipper,
+ "file-archive": $fa-var-file-archive,
+ "square": $fa-var-square,
+ "martini-glass-empty": $fa-var-martini-glass-empty,
+ "glass-martini": $fa-var-glass-martini,
+ "couch": $fa-var-couch,
+ "cedi-sign": $fa-var-cedi-sign,
+ "italic": $fa-var-italic,
+ "church": $fa-var-church,
+ "comments-dollar": $fa-var-comments-dollar,
+ "democrat": $fa-var-democrat,
+ "z": $fa-var-z,
+ "person-skiing": $fa-var-person-skiing,
+ "skiing": $fa-var-skiing,
+ "road-lock": $fa-var-road-lock,
+ "a": $fa-var-a,
+ "temperature-arrow-down": $fa-var-temperature-arrow-down,
+ "temperature-down": $fa-var-temperature-down,
+ "feather-pointed": $fa-var-feather-pointed,
+ "feather-alt": $fa-var-feather-alt,
+ "p": $fa-var-p,
+ "snowflake": $fa-var-snowflake,
+ "newspaper": $fa-var-newspaper,
+ "rectangle-ad": $fa-var-rectangle-ad,
+ "ad": $fa-var-ad,
+ "circle-arrow-right": $fa-var-circle-arrow-right,
+ "arrow-circle-right": $fa-var-arrow-circle-right,
+ "filter-circle-xmark": $fa-var-filter-circle-xmark,
+ "locust": $fa-var-locust,
+ "sort": $fa-var-sort,
+ "unsorted": $fa-var-unsorted,
+ "list-ol": $fa-var-list-ol,
+ "list-1-2": $fa-var-list-1-2,
+ "list-numeric": $fa-var-list-numeric,
+ "person-dress-burst": $fa-var-person-dress-burst,
+ "money-check-dollar": $fa-var-money-check-dollar,
+ "money-check-alt": $fa-var-money-check-alt,
+ "vector-square": $fa-var-vector-square,
+ "bread-slice": $fa-var-bread-slice,
+ "language": $fa-var-language,
+ "face-kiss-wink-heart": $fa-var-face-kiss-wink-heart,
+ "kiss-wink-heart": $fa-var-kiss-wink-heart,
+ "filter": $fa-var-filter,
+ "question": $fa-var-question,
+ "file-signature": $fa-var-file-signature,
+ "up-down-left-right": $fa-var-up-down-left-right,
+ "arrows-alt": $fa-var-arrows-alt,
+ "house-chimney-user": $fa-var-house-chimney-user,
+ "hand-holding-heart": $fa-var-hand-holding-heart,
+ "puzzle-piece": $fa-var-puzzle-piece,
+ "money-check": $fa-var-money-check,
+ "star-half-stroke": $fa-var-star-half-stroke,
+ "star-half-alt": $fa-var-star-half-alt,
+ "code": $fa-var-code,
+ "whiskey-glass": $fa-var-whiskey-glass,
+ "glass-whiskey": $fa-var-glass-whiskey,
+ "building-circle-exclamation": $fa-var-building-circle-exclamation,
+ "magnifying-glass-chart": $fa-var-magnifying-glass-chart,
+ "arrow-up-right-from-square": $fa-var-arrow-up-right-from-square,
+ "external-link": $fa-var-external-link,
+ "cubes-stacked": $fa-var-cubes-stacked,
+ "won-sign": $fa-var-won-sign,
+ "krw": $fa-var-krw,
+ "won": $fa-var-won,
+ "virus-covid": $fa-var-virus-covid,
+ "austral-sign": $fa-var-austral-sign,
+ "f": $fa-var-f,
+ "leaf": $fa-var-leaf,
+ "road": $fa-var-road,
+ "taxi": $fa-var-taxi,
+ "cab": $fa-var-cab,
+ "person-circle-plus": $fa-var-person-circle-plus,
+ "chart-pie": $fa-var-chart-pie,
+ "pie-chart": $fa-var-pie-chart,
+ "bolt-lightning": $fa-var-bolt-lightning,
+ "sack-xmark": $fa-var-sack-xmark,
+ "file-excel": $fa-var-file-excel,
+ "file-contract": $fa-var-file-contract,
+ "fish-fins": $fa-var-fish-fins,
+ "building-flag": $fa-var-building-flag,
+ "face-grin-beam": $fa-var-face-grin-beam,
+ "grin-beam": $fa-var-grin-beam,
+ "object-ungroup": $fa-var-object-ungroup,
+ "poop": $fa-var-poop,
+ "location-pin": $fa-var-location-pin,
+ "map-marker": $fa-var-map-marker,
+ "kaaba": $fa-var-kaaba,
+ "toilet-paper": $fa-var-toilet-paper,
+ "helmet-safety": $fa-var-helmet-safety,
+ "hard-hat": $fa-var-hard-hat,
+ "hat-hard": $fa-var-hat-hard,
+ "eject": $fa-var-eject,
+ "circle-right": $fa-var-circle-right,
+ "arrow-alt-circle-right": $fa-var-arrow-alt-circle-right,
+ "plane-circle-check": $fa-var-plane-circle-check,
+ "face-rolling-eyes": $fa-var-face-rolling-eyes,
+ "meh-rolling-eyes": $fa-var-meh-rolling-eyes,
+ "object-group": $fa-var-object-group,
+ "chart-line": $fa-var-chart-line,
+ "line-chart": $fa-var-line-chart,
+ "mask-ventilator": $fa-var-mask-ventilator,
+ "arrow-right": $fa-var-arrow-right,
+ "signs-post": $fa-var-signs-post,
+ "map-signs": $fa-var-map-signs,
+ "cash-register": $fa-var-cash-register,
+ "person-circle-question": $fa-var-person-circle-question,
+ "h": $fa-var-h,
+ "tarp": $fa-var-tarp,
+ "screwdriver-wrench": $fa-var-screwdriver-wrench,
+ "tools": $fa-var-tools,
+ "arrows-to-eye": $fa-var-arrows-to-eye,
+ "plug-circle-bolt": $fa-var-plug-circle-bolt,
+ "heart": $fa-var-heart,
+ "mars-and-venus": $fa-var-mars-and-venus,
+ "house-user": $fa-var-house-user,
+ "home-user": $fa-var-home-user,
+ "dumpster-fire": $fa-var-dumpster-fire,
+ "house-crack": $fa-var-house-crack,
+ "martini-glass-citrus": $fa-var-martini-glass-citrus,
+ "cocktail": $fa-var-cocktail,
+ "face-surprise": $fa-var-face-surprise,
+ "surprise": $fa-var-surprise,
+ "bottle-water": $fa-var-bottle-water,
+ "circle-pause": $fa-var-circle-pause,
+ "pause-circle": $fa-var-pause-circle,
+ "toilet-paper-slash": $fa-var-toilet-paper-slash,
+ "apple-whole": $fa-var-apple-whole,
+ "apple-alt": $fa-var-apple-alt,
+ "kitchen-set": $fa-var-kitchen-set,
+ "r": $fa-var-r,
+ "temperature-quarter": $fa-var-temperature-quarter,
+ "temperature-1": $fa-var-temperature-1,
+ "thermometer-1": $fa-var-thermometer-1,
+ "thermometer-quarter": $fa-var-thermometer-quarter,
+ "cube": $fa-var-cube,
+ "bitcoin-sign": $fa-var-bitcoin-sign,
+ "shield-dog": $fa-var-shield-dog,
+ "solar-panel": $fa-var-solar-panel,
+ "lock-open": $fa-var-lock-open,
+ "elevator": $fa-var-elevator,
+ "money-bill-transfer": $fa-var-money-bill-transfer,
+ "money-bill-trend-up": $fa-var-money-bill-trend-up,
+ "house-flood-water-circle-arrow-right": $fa-var-house-flood-water-circle-arrow-right,
+ "square-poll-horizontal": $fa-var-square-poll-horizontal,
+ "poll-h": $fa-var-poll-h,
+ "circle": $fa-var-circle,
+ "backward-fast": $fa-var-backward-fast,
+ "fast-backward": $fa-var-fast-backward,
+ "recycle": $fa-var-recycle,
+ "user-astronaut": $fa-var-user-astronaut,
+ "plane-slash": $fa-var-plane-slash,
+ "trademark": $fa-var-trademark,
+ "basketball": $fa-var-basketball,
+ "basketball-ball": $fa-var-basketball-ball,
+ "satellite-dish": $fa-var-satellite-dish,
+ "circle-up": $fa-var-circle-up,
+ "arrow-alt-circle-up": $fa-var-arrow-alt-circle-up,
+ "mobile-screen-button": $fa-var-mobile-screen-button,
+ "mobile-alt": $fa-var-mobile-alt,
+ "volume-high": $fa-var-volume-high,
+ "volume-up": $fa-var-volume-up,
+ "users-rays": $fa-var-users-rays,
+ "wallet": $fa-var-wallet,
+ "clipboard-check": $fa-var-clipboard-check,
+ "file-audio": $fa-var-file-audio,
+ "burger": $fa-var-burger,
+ "hamburger": $fa-var-hamburger,
+ "wrench": $fa-var-wrench,
+ "bugs": $fa-var-bugs,
+ "rupee-sign": $fa-var-rupee-sign,
+ "rupee": $fa-var-rupee,
+ "file-image": $fa-var-file-image,
+ "circle-question": $fa-var-circle-question,
+ "question-circle": $fa-var-question-circle,
+ "plane-departure": $fa-var-plane-departure,
+ "handshake-slash": $fa-var-handshake-slash,
+ "book-bookmark": $fa-var-book-bookmark,
+ "code-branch": $fa-var-code-branch,
+ "hat-cowboy": $fa-var-hat-cowboy,
+ "bridge": $fa-var-bridge,
+ "phone-flip": $fa-var-phone-flip,
+ "phone-alt": $fa-var-phone-alt,
+ "truck-front": $fa-var-truck-front,
+ "cat": $fa-var-cat,
+ "anchor-circle-exclamation": $fa-var-anchor-circle-exclamation,
+ "truck-field": $fa-var-truck-field,
+ "route": $fa-var-route,
+ "clipboard-question": $fa-var-clipboard-question,
+ "panorama": $fa-var-panorama,
+ "comment-medical": $fa-var-comment-medical,
+ "teeth-open": $fa-var-teeth-open,
+ "file-circle-minus": $fa-var-file-circle-minus,
+ "tags": $fa-var-tags,
+ "wine-glass": $fa-var-wine-glass,
+ "forward-fast": $fa-var-forward-fast,
+ "fast-forward": $fa-var-fast-forward,
+ "face-meh-blank": $fa-var-face-meh-blank,
+ "meh-blank": $fa-var-meh-blank,
+ "square-parking": $fa-var-square-parking,
+ "parking": $fa-var-parking,
+ "house-signal": $fa-var-house-signal,
+ "bars-progress": $fa-var-bars-progress,
+ "tasks-alt": $fa-var-tasks-alt,
+ "faucet-drip": $fa-var-faucet-drip,
+ "cart-flatbed": $fa-var-cart-flatbed,
+ "dolly-flatbed": $fa-var-dolly-flatbed,
+ "ban-smoking": $fa-var-ban-smoking,
+ "smoking-ban": $fa-var-smoking-ban,
+ "terminal": $fa-var-terminal,
+ "mobile-button": $fa-var-mobile-button,
+ "house-medical-flag": $fa-var-house-medical-flag,
+ "basket-shopping": $fa-var-basket-shopping,
+ "shopping-basket": $fa-var-shopping-basket,
+ "tape": $fa-var-tape,
+ "bus-simple": $fa-var-bus-simple,
+ "bus-alt": $fa-var-bus-alt,
+ "eye": $fa-var-eye,
+ "face-sad-cry": $fa-var-face-sad-cry,
+ "sad-cry": $fa-var-sad-cry,
+ "audio-description": $fa-var-audio-description,
+ "person-military-to-person": $fa-var-person-military-to-person,
+ "file-shield": $fa-var-file-shield,
+ "user-slash": $fa-var-user-slash,
+ "pen": $fa-var-pen,
+ "tower-observation": $fa-var-tower-observation,
+ "file-code": $fa-var-file-code,
+ "signal": $fa-var-signal,
+ "signal-5": $fa-var-signal-5,
+ "signal-perfect": $fa-var-signal-perfect,
+ "bus": $fa-var-bus,
+ "heart-circle-xmark": $fa-var-heart-circle-xmark,
+ "house-chimney": $fa-var-house-chimney,
+ "home-lg": $fa-var-home-lg,
+ "window-maximize": $fa-var-window-maximize,
+ "face-frown": $fa-var-face-frown,
+ "frown": $fa-var-frown,
+ "prescription": $fa-var-prescription,
+ "shop": $fa-var-shop,
+ "store-alt": $fa-var-store-alt,
+ "floppy-disk": $fa-var-floppy-disk,
+ "save": $fa-var-save,
+ "vihara": $fa-var-vihara,
+ "scale-unbalanced": $fa-var-scale-unbalanced,
+ "balance-scale-left": $fa-var-balance-scale-left,
+ "sort-up": $fa-var-sort-up,
+ "sort-asc": $fa-var-sort-asc,
+ "comment-dots": $fa-var-comment-dots,
+ "commenting": $fa-var-commenting,
+ "plant-wilt": $fa-var-plant-wilt,
+ "diamond": $fa-var-diamond,
+ "face-grin-squint": $fa-var-face-grin-squint,
+ "grin-squint": $fa-var-grin-squint,
+ "hand-holding-dollar": $fa-var-hand-holding-dollar,
+ "hand-holding-usd": $fa-var-hand-holding-usd,
+ "bacterium": $fa-var-bacterium,
+ "hand-pointer": $fa-var-hand-pointer,
+ "drum-steelpan": $fa-var-drum-steelpan,
+ "hand-scissors": $fa-var-hand-scissors,
+ "hands-praying": $fa-var-hands-praying,
+ "praying-hands": $fa-var-praying-hands,
+ "arrow-rotate-right": $fa-var-arrow-rotate-right,
+ "arrow-right-rotate": $fa-var-arrow-right-rotate,
+ "arrow-rotate-forward": $fa-var-arrow-rotate-forward,
+ "redo": $fa-var-redo,
+ "biohazard": $fa-var-biohazard,
+ "location-crosshairs": $fa-var-location-crosshairs,
+ "location": $fa-var-location,
+ "mars-double": $fa-var-mars-double,
+ "child-dress": $fa-var-child-dress,
+ "users-between-lines": $fa-var-users-between-lines,
+ "lungs-virus": $fa-var-lungs-virus,
+ "face-grin-tears": $fa-var-face-grin-tears,
+ "grin-tears": $fa-var-grin-tears,
+ "phone": $fa-var-phone,
+ "calendar-xmark": $fa-var-calendar-xmark,
+ "calendar-times": $fa-var-calendar-times,
+ "child-reaching": $fa-var-child-reaching,
+ "head-side-virus": $fa-var-head-side-virus,
+ "user-gear": $fa-var-user-gear,
+ "user-cog": $fa-var-user-cog,
+ "arrow-up-1-9": $fa-var-arrow-up-1-9,
+ "sort-numeric-up": $fa-var-sort-numeric-up,
+ "door-closed": $fa-var-door-closed,
+ "shield-virus": $fa-var-shield-virus,
+ "dice-six": $fa-var-dice-six,
+ "mosquito-net": $fa-var-mosquito-net,
+ "bridge-water": $fa-var-bridge-water,
+ "person-booth": $fa-var-person-booth,
+ "text-width": $fa-var-text-width,
+ "hat-wizard": $fa-var-hat-wizard,
+ "pen-fancy": $fa-var-pen-fancy,
+ "person-digging": $fa-var-person-digging,
+ "digging": $fa-var-digging,
+ "trash": $fa-var-trash,
+ "gauge-simple": $fa-var-gauge-simple,
+ "gauge-simple-med": $fa-var-gauge-simple-med,
+ "tachometer-average": $fa-var-tachometer-average,
+ "book-medical": $fa-var-book-medical,
+ "poo": $fa-var-poo,
+ "quote-right": $fa-var-quote-right,
+ "quote-right-alt": $fa-var-quote-right-alt,
+ "shirt": $fa-var-shirt,
+ "t-shirt": $fa-var-t-shirt,
+ "tshirt": $fa-var-tshirt,
+ "cubes": $fa-var-cubes,
+ "divide": $fa-var-divide,
+ "tenge-sign": $fa-var-tenge-sign,
+ "tenge": $fa-var-tenge,
+ "headphones": $fa-var-headphones,
+ "hands-holding": $fa-var-hands-holding,
+ "hands-clapping": $fa-var-hands-clapping,
+ "republican": $fa-var-republican,
+ "arrow-left": $fa-var-arrow-left,
+ "person-circle-xmark": $fa-var-person-circle-xmark,
+ "ruler": $fa-var-ruler,
+ "align-left": $fa-var-align-left,
+ "dice-d6": $fa-var-dice-d6,
+ "restroom": $fa-var-restroom,
+ "j": $fa-var-j,
+ "users-viewfinder": $fa-var-users-viewfinder,
+ "file-video": $fa-var-file-video,
+ "up-right-from-square": $fa-var-up-right-from-square,
+ "external-link-alt": $fa-var-external-link-alt,
+ "table-cells": $fa-var-table-cells,
+ "th": $fa-var-th,
+ "file-pdf": $fa-var-file-pdf,
+ "book-bible": $fa-var-book-bible,
+ "bible": $fa-var-bible,
+ "o": $fa-var-o,
+ "suitcase-medical": $fa-var-suitcase-medical,
+ "medkit": $fa-var-medkit,
+ "user-secret": $fa-var-user-secret,
+ "otter": $fa-var-otter,
+ "person-dress": $fa-var-person-dress,
+ "female": $fa-var-female,
+ "comment-dollar": $fa-var-comment-dollar,
+ "business-time": $fa-var-business-time,
+ "briefcase-clock": $fa-var-briefcase-clock,
+ "table-cells-large": $fa-var-table-cells-large,
+ "th-large": $fa-var-th-large,
+ "book-tanakh": $fa-var-book-tanakh,
+ "tanakh": $fa-var-tanakh,
+ "phone-volume": $fa-var-phone-volume,
+ "volume-control-phone": $fa-var-volume-control-phone,
+ "hat-cowboy-side": $fa-var-hat-cowboy-side,
+ "clipboard-user": $fa-var-clipboard-user,
+ "child": $fa-var-child,
+ "lira-sign": $fa-var-lira-sign,
+ "satellite": $fa-var-satellite,
+ "plane-lock": $fa-var-plane-lock,
+ "tag": $fa-var-tag,
+ "comment": $fa-var-comment,
+ "cake-candles": $fa-var-cake-candles,
+ "birthday-cake": $fa-var-birthday-cake,
+ "cake": $fa-var-cake,
+ "envelope": $fa-var-envelope,
+ "angles-up": $fa-var-angles-up,
+ "angle-double-up": $fa-var-angle-double-up,
+ "paperclip": $fa-var-paperclip,
+ "arrow-right-to-city": $fa-var-arrow-right-to-city,
+ "ribbon": $fa-var-ribbon,
+ "lungs": $fa-var-lungs,
+ "arrow-up-9-1": $fa-var-arrow-up-9-1,
+ "sort-numeric-up-alt": $fa-var-sort-numeric-up-alt,
+ "litecoin-sign": $fa-var-litecoin-sign,
+ "border-none": $fa-var-border-none,
+ "circle-nodes": $fa-var-circle-nodes,
+ "parachute-box": $fa-var-parachute-box,
+ "indent": $fa-var-indent,
+ "truck-field-un": $fa-var-truck-field-un,
+ "hourglass": $fa-var-hourglass,
+ "hourglass-empty": $fa-var-hourglass-empty,
+ "mountain": $fa-var-mountain,
+ "user-doctor": $fa-var-user-doctor,
+ "user-md": $fa-var-user-md,
+ "circle-info": $fa-var-circle-info,
+ "info-circle": $fa-var-info-circle,
+ "cloud-meatball": $fa-var-cloud-meatball,
+ "camera": $fa-var-camera,
+ "camera-alt": $fa-var-camera-alt,
+ "square-virus": $fa-var-square-virus,
+ "meteor": $fa-var-meteor,
+ "car-on": $fa-var-car-on,
+ "sleigh": $fa-var-sleigh,
+ "arrow-down-1-9": $fa-var-arrow-down-1-9,
+ "sort-numeric-asc": $fa-var-sort-numeric-asc,
+ "sort-numeric-down": $fa-var-sort-numeric-down,
+ "hand-holding-droplet": $fa-var-hand-holding-droplet,
+ "hand-holding-water": $fa-var-hand-holding-water,
+ "water": $fa-var-water,
+ "calendar-check": $fa-var-calendar-check,
+ "braille": $fa-var-braille,
+ "prescription-bottle-medical": $fa-var-prescription-bottle-medical,
+ "prescription-bottle-alt": $fa-var-prescription-bottle-alt,
+ "landmark": $fa-var-landmark,
+ "truck": $fa-var-truck,
+ "crosshairs": $fa-var-crosshairs,
+ "person-cane": $fa-var-person-cane,
+ "tent": $fa-var-tent,
+ "vest-patches": $fa-var-vest-patches,
+ "check-double": $fa-var-check-double,
+ "arrow-down-a-z": $fa-var-arrow-down-a-z,
+ "sort-alpha-asc": $fa-var-sort-alpha-asc,
+ "sort-alpha-down": $fa-var-sort-alpha-down,
+ "money-bill-wheat": $fa-var-money-bill-wheat,
+ "cookie": $fa-var-cookie,
+ "arrow-rotate-left": $fa-var-arrow-rotate-left,
+ "arrow-left-rotate": $fa-var-arrow-left-rotate,
+ "arrow-rotate-back": $fa-var-arrow-rotate-back,
+ "arrow-rotate-backward": $fa-var-arrow-rotate-backward,
+ "undo": $fa-var-undo,
+ "hard-drive": $fa-var-hard-drive,
+ "hdd": $fa-var-hdd,
+ "face-grin-squint-tears": $fa-var-face-grin-squint-tears,
+ "grin-squint-tears": $fa-var-grin-squint-tears,
+ "dumbbell": $fa-var-dumbbell,
+ "rectangle-list": $fa-var-rectangle-list,
+ "list-alt": $fa-var-list-alt,
+ "tarp-droplet": $fa-var-tarp-droplet,
+ "house-medical-circle-check": $fa-var-house-medical-circle-check,
+ "person-skiing-nordic": $fa-var-person-skiing-nordic,
+ "skiing-nordic": $fa-var-skiing-nordic,
+ "calendar-plus": $fa-var-calendar-plus,
+ "plane-arrival": $fa-var-plane-arrival,
+ "circle-left": $fa-var-circle-left,
+ "arrow-alt-circle-left": $fa-var-arrow-alt-circle-left,
+ "train-subway": $fa-var-train-subway,
+ "subway": $fa-var-subway,
+ "chart-gantt": $fa-var-chart-gantt,
+ "indian-rupee-sign": $fa-var-indian-rupee-sign,
+ "indian-rupee": $fa-var-indian-rupee,
+ "inr": $fa-var-inr,
+ "crop-simple": $fa-var-crop-simple,
+ "crop-alt": $fa-var-crop-alt,
+ "money-bill-1": $fa-var-money-bill-1,
+ "money-bill-alt": $fa-var-money-bill-alt,
+ "left-long": $fa-var-left-long,
+ "long-arrow-alt-left": $fa-var-long-arrow-alt-left,
+ "dna": $fa-var-dna,
+ "virus-slash": $fa-var-virus-slash,
+ "minus": $fa-var-minus,
+ "subtract": $fa-var-subtract,
+ "child-rifle": $fa-var-child-rifle,
+ "chess": $fa-var-chess,
+ "arrow-left-long": $fa-var-arrow-left-long,
+ "long-arrow-left": $fa-var-long-arrow-left,
+ "plug-circle-check": $fa-var-plug-circle-check,
+ "street-view": $fa-var-street-view,
+ "franc-sign": $fa-var-franc-sign,
+ "volume-off": $fa-var-volume-off,
+ "hands-asl-interpreting": $fa-var-hands-asl-interpreting,
+ "american-sign-language-interpreting": $fa-var-american-sign-language-interpreting,
+ "asl-interpreting": $fa-var-asl-interpreting,
+ "hands-american-sign-language-interpreting": $fa-var-hands-american-sign-language-interpreting,
+ "gear": $fa-var-gear,
+ "cog": $fa-var-cog,
+ "droplet-slash": $fa-var-droplet-slash,
+ "tint-slash": $fa-var-tint-slash,
+ "mosque": $fa-var-mosque,
+ "mosquito": $fa-var-mosquito,
+ "star-of-david": $fa-var-star-of-david,
+ "person-military-rifle": $fa-var-person-military-rifle,
+ "cart-shopping": $fa-var-cart-shopping,
+ "shopping-cart": $fa-var-shopping-cart,
+ "vials": $fa-var-vials,
+ "plug-circle-plus": $fa-var-plug-circle-plus,
+ "place-of-worship": $fa-var-place-of-worship,
+ "grip-vertical": $fa-var-grip-vertical,
+ "arrow-turn-up": $fa-var-arrow-turn-up,
+ "level-up": $fa-var-level-up,
+ "u": $fa-var-u,
+ "square-root-variable": $fa-var-square-root-variable,
+ "square-root-alt": $fa-var-square-root-alt,
+ "clock": $fa-var-clock,
+ "clock-four": $fa-var-clock-four,
+ "backward-step": $fa-var-backward-step,
+ "step-backward": $fa-var-step-backward,
+ "pallet": $fa-var-pallet,
+ "faucet": $fa-var-faucet,
+ "baseball-bat-ball": $fa-var-baseball-bat-ball,
+ "s": $fa-var-s,
+ "timeline": $fa-var-timeline,
+ "keyboard": $fa-var-keyboard,
+ "caret-down": $fa-var-caret-down,
+ "house-chimney-medical": $fa-var-house-chimney-medical,
+ "clinic-medical": $fa-var-clinic-medical,
+ "temperature-three-quarters": $fa-var-temperature-three-quarters,
+ "temperature-3": $fa-var-temperature-3,
+ "thermometer-3": $fa-var-thermometer-3,
+ "thermometer-three-quarters": $fa-var-thermometer-three-quarters,
+ "mobile-screen": $fa-var-mobile-screen,
+ "mobile-android-alt": $fa-var-mobile-android-alt,
+ "plane-up": $fa-var-plane-up,
+ "piggy-bank": $fa-var-piggy-bank,
+ "battery-half": $fa-var-battery-half,
+ "battery-3": $fa-var-battery-3,
+ "mountain-city": $fa-var-mountain-city,
+ "coins": $fa-var-coins,
+ "khanda": $fa-var-khanda,
+ "sliders": $fa-var-sliders,
+ "sliders-h": $fa-var-sliders-h,
+ "folder-tree": $fa-var-folder-tree,
+ "network-wired": $fa-var-network-wired,
+ "map-pin": $fa-var-map-pin,
+ "hamsa": $fa-var-hamsa,
+ "cent-sign": $fa-var-cent-sign,
+ "flask": $fa-var-flask,
+ "person-pregnant": $fa-var-person-pregnant,
+ "wand-sparkles": $fa-var-wand-sparkles,
+ "ellipsis-vertical": $fa-var-ellipsis-vertical,
+ "ellipsis-v": $fa-var-ellipsis-v,
+ "ticket": $fa-var-ticket,
+ "power-off": $fa-var-power-off,
+ "right-long": $fa-var-right-long,
+ "long-arrow-alt-right": $fa-var-long-arrow-alt-right,
+ "flag-usa": $fa-var-flag-usa,
+ "laptop-file": $fa-var-laptop-file,
+ "tty": $fa-var-tty,
+ "teletype": $fa-var-teletype,
+ "diagram-next": $fa-var-diagram-next,
+ "person-rifle": $fa-var-person-rifle,
+ "house-medical-circle-exclamation": $fa-var-house-medical-circle-exclamation,
+ "closed-captioning": $fa-var-closed-captioning,
+ "person-hiking": $fa-var-person-hiking,
+ "hiking": $fa-var-hiking,
+ "venus-double": $fa-var-venus-double,
+ "images": $fa-var-images,
+ "calculator": $fa-var-calculator,
+ "people-pulling": $fa-var-people-pulling,
+ "n": $fa-var-n,
+ "cable-car": $fa-var-cable-car,
+ "tram": $fa-var-tram,
+ "cloud-rain": $fa-var-cloud-rain,
+ "building-circle-xmark": $fa-var-building-circle-xmark,
+ "ship": $fa-var-ship,
+ "arrows-down-to-line": $fa-var-arrows-down-to-line,
+ "download": $fa-var-download,
+ "face-grin": $fa-var-face-grin,
+ "grin": $fa-var-grin,
+ "delete-left": $fa-var-delete-left,
+ "backspace": $fa-var-backspace,
+ "eye-dropper": $fa-var-eye-dropper,
+ "eye-dropper-empty": $fa-var-eye-dropper-empty,
+ "eyedropper": $fa-var-eyedropper,
+ "file-circle-check": $fa-var-file-circle-check,
+ "forward": $fa-var-forward,
+ "mobile": $fa-var-mobile,
+ "mobile-android": $fa-var-mobile-android,
+ "mobile-phone": $fa-var-mobile-phone,
+ "face-meh": $fa-var-face-meh,
+ "meh": $fa-var-meh,
+ "align-center": $fa-var-align-center,
+ "book-skull": $fa-var-book-skull,
+ "book-dead": $fa-var-book-dead,
+ "id-card": $fa-var-id-card,
+ "drivers-license": $fa-var-drivers-license,
+ "outdent": $fa-var-outdent,
+ "dedent": $fa-var-dedent,
+ "heart-circle-exclamation": $fa-var-heart-circle-exclamation,
+ "house": $fa-var-house,
+ "home": $fa-var-home,
+ "home-alt": $fa-var-home-alt,
+ "home-lg-alt": $fa-var-home-lg-alt,
+ "calendar-week": $fa-var-calendar-week,
+ "laptop-medical": $fa-var-laptop-medical,
+ "b": $fa-var-b,
+ "file-medical": $fa-var-file-medical,
+ "dice-one": $fa-var-dice-one,
+ "kiwi-bird": $fa-var-kiwi-bird,
+ "arrow-right-arrow-left": $fa-var-arrow-right-arrow-left,
+ "exchange": $fa-var-exchange,
+ "rotate-right": $fa-var-rotate-right,
+ "redo-alt": $fa-var-redo-alt,
+ "rotate-forward": $fa-var-rotate-forward,
+ "utensils": $fa-var-utensils,
+ "cutlery": $fa-var-cutlery,
+ "arrow-up-wide-short": $fa-var-arrow-up-wide-short,
+ "sort-amount-up": $fa-var-sort-amount-up,
+ "mill-sign": $fa-var-mill-sign,
+ "bowl-rice": $fa-var-bowl-rice,
+ "skull": $fa-var-skull,
+ "tower-broadcast": $fa-var-tower-broadcast,
+ "broadcast-tower": $fa-var-broadcast-tower,
+ "truck-pickup": $fa-var-truck-pickup,
+ "up-long": $fa-var-up-long,
+ "long-arrow-alt-up": $fa-var-long-arrow-alt-up,
+ "stop": $fa-var-stop,
+ "code-merge": $fa-var-code-merge,
+ "upload": $fa-var-upload,
+ "hurricane": $fa-var-hurricane,
+ "mound": $fa-var-mound,
+ "toilet-portable": $fa-var-toilet-portable,
+ "compact-disc": $fa-var-compact-disc,
+ "file-arrow-down": $fa-var-file-arrow-down,
+ "file-download": $fa-var-file-download,
+ "caravan": $fa-var-caravan,
+ "shield-cat": $fa-var-shield-cat,
+ "bolt": $fa-var-bolt,
+ "zap": $fa-var-zap,
+ "glass-water": $fa-var-glass-water,
+ "oil-well": $fa-var-oil-well,
+ "vault": $fa-var-vault,
+ "mars": $fa-var-mars,
+ "toilet": $fa-var-toilet,
+ "plane-circle-xmark": $fa-var-plane-circle-xmark,
+ "yen-sign": $fa-var-yen-sign,
+ "cny": $fa-var-cny,
+ "jpy": $fa-var-jpy,
+ "rmb": $fa-var-rmb,
+ "yen": $fa-var-yen,
+ "ruble-sign": $fa-var-ruble-sign,
+ "rouble": $fa-var-rouble,
+ "rub": $fa-var-rub,
+ "ruble": $fa-var-ruble,
+ "sun": $fa-var-sun,
+ "guitar": $fa-var-guitar,
+ "face-laugh-wink": $fa-var-face-laugh-wink,
+ "laugh-wink": $fa-var-laugh-wink,
+ "horse-head": $fa-var-horse-head,
+ "bore-hole": $fa-var-bore-hole,
+ "industry": $fa-var-industry,
+ "circle-down": $fa-var-circle-down,
+ "arrow-alt-circle-down": $fa-var-arrow-alt-circle-down,
+ "arrows-turn-to-dots": $fa-var-arrows-turn-to-dots,
+ "florin-sign": $fa-var-florin-sign,
+ "arrow-down-short-wide": $fa-var-arrow-down-short-wide,
+ "sort-amount-desc": $fa-var-sort-amount-desc,
+ "sort-amount-down-alt": $fa-var-sort-amount-down-alt,
+ "less-than": $fa-var-less-than,
+ "angle-down": $fa-var-angle-down,
+ "car-tunnel": $fa-var-car-tunnel,
+ "head-side-cough": $fa-var-head-side-cough,
+ "grip-lines": $fa-var-grip-lines,
+ "thumbs-down": $fa-var-thumbs-down,
+ "user-lock": $fa-var-user-lock,
+ "arrow-right-long": $fa-var-arrow-right-long,
+ "long-arrow-right": $fa-var-long-arrow-right,
+ "anchor-circle-xmark": $fa-var-anchor-circle-xmark,
+ "ellipsis": $fa-var-ellipsis,
+ "ellipsis-h": $fa-var-ellipsis-h,
+ "chess-pawn": $fa-var-chess-pawn,
+ "kit-medical": $fa-var-kit-medical,
+ "first-aid": $fa-var-first-aid,
+ "person-through-window": $fa-var-person-through-window,
+ "toolbox": $fa-var-toolbox,
+ "hands-holding-circle": $fa-var-hands-holding-circle,
+ "bug": $fa-var-bug,
+ "credit-card": $fa-var-credit-card,
+ "credit-card-alt": $fa-var-credit-card-alt,
+ "car": $fa-var-car,
+ "automobile": $fa-var-automobile,
+ "hand-holding-hand": $fa-var-hand-holding-hand,
+ "book-open-reader": $fa-var-book-open-reader,
+ "book-reader": $fa-var-book-reader,
+ "mountain-sun": $fa-var-mountain-sun,
+ "arrows-left-right-to-line": $fa-var-arrows-left-right-to-line,
+ "dice-d20": $fa-var-dice-d20,
+ "truck-droplet": $fa-var-truck-droplet,
+ "file-circle-xmark": $fa-var-file-circle-xmark,
+ "temperature-arrow-up": $fa-var-temperature-arrow-up,
+ "temperature-up": $fa-var-temperature-up,
+ "medal": $fa-var-medal,
+ "bed": $fa-var-bed,
+ "square-h": $fa-var-square-h,
+ "h-square": $fa-var-h-square,
+ "podcast": $fa-var-podcast,
+ "temperature-full": $fa-var-temperature-full,
+ "temperature-4": $fa-var-temperature-4,
+ "thermometer-4": $fa-var-thermometer-4,
+ "thermometer-full": $fa-var-thermometer-full,
+ "bell": $fa-var-bell,
+ "superscript": $fa-var-superscript,
+ "plug-circle-xmark": $fa-var-plug-circle-xmark,
+ "star-of-life": $fa-var-star-of-life,
+ "phone-slash": $fa-var-phone-slash,
+ "paint-roller": $fa-var-paint-roller,
+ "handshake-angle": $fa-var-handshake-angle,
+ "hands-helping": $fa-var-hands-helping,
+ "location-dot": $fa-var-location-dot,
+ "map-marker-alt": $fa-var-map-marker-alt,
+ "file": $fa-var-file,
+ "greater-than": $fa-var-greater-than,
+ "person-swimming": $fa-var-person-swimming,
+ "swimmer": $fa-var-swimmer,
+ "arrow-down": $fa-var-arrow-down,
+ "droplet": $fa-var-droplet,
+ "tint": $fa-var-tint,
+ "eraser": $fa-var-eraser,
+ "earth-americas": $fa-var-earth-americas,
+ "earth": $fa-var-earth,
+ "earth-america": $fa-var-earth-america,
+ "globe-americas": $fa-var-globe-americas,
+ "person-burst": $fa-var-person-burst,
+ "dove": $fa-var-dove,
+ "battery-empty": $fa-var-battery-empty,
+ "battery-0": $fa-var-battery-0,
+ "socks": $fa-var-socks,
+ "inbox": $fa-var-inbox,
+ "section": $fa-var-section,
+ "gauge-high": $fa-var-gauge-high,
+ "tachometer-alt": $fa-var-tachometer-alt,
+ "tachometer-alt-fast": $fa-var-tachometer-alt-fast,
+ "envelope-open-text": $fa-var-envelope-open-text,
+ "hospital": $fa-var-hospital,
+ "hospital-alt": $fa-var-hospital-alt,
+ "hospital-wide": $fa-var-hospital-wide,
+ "wine-bottle": $fa-var-wine-bottle,
+ "chess-rook": $fa-var-chess-rook,
+ "bars-staggered": $fa-var-bars-staggered,
+ "reorder": $fa-var-reorder,
+ "stream": $fa-var-stream,
+ "dharmachakra": $fa-var-dharmachakra,
+ "hotdog": $fa-var-hotdog,
+ "person-walking-with-cane": $fa-var-person-walking-with-cane,
+ "blind": $fa-var-blind,
+ "drum": $fa-var-drum,
+ "ice-cream": $fa-var-ice-cream,
+ "heart-circle-bolt": $fa-var-heart-circle-bolt,
+ "fax": $fa-var-fax,
+ "paragraph": $fa-var-paragraph,
+ "check-to-slot": $fa-var-check-to-slot,
+ "vote-yea": $fa-var-vote-yea,
+ "star-half": $fa-var-star-half,
+ "boxes-stacked": $fa-var-boxes-stacked,
+ "boxes": $fa-var-boxes,
+ "boxes-alt": $fa-var-boxes-alt,
+ "link": $fa-var-link,
+ "chain": $fa-var-chain,
+ "ear-listen": $fa-var-ear-listen,
+ "assistive-listening-systems": $fa-var-assistive-listening-systems,
+ "tree-city": $fa-var-tree-city,
+ "play": $fa-var-play,
+ "font": $fa-var-font,
+ "rupiah-sign": $fa-var-rupiah-sign,
+ "magnifying-glass": $fa-var-magnifying-glass,
+ "search": $fa-var-search,
+ "table-tennis-paddle-ball": $fa-var-table-tennis-paddle-ball,
+ "ping-pong-paddle-ball": $fa-var-ping-pong-paddle-ball,
+ "table-tennis": $fa-var-table-tennis,
+ "person-dots-from-line": $fa-var-person-dots-from-line,
+ "diagnoses": $fa-var-diagnoses,
+ "trash-can-arrow-up": $fa-var-trash-can-arrow-up,
+ "trash-restore-alt": $fa-var-trash-restore-alt,
+ "naira-sign": $fa-var-naira-sign,
+ "cart-arrow-down": $fa-var-cart-arrow-down,
+ "walkie-talkie": $fa-var-walkie-talkie,
+ "file-pen": $fa-var-file-pen,
+ "file-edit": $fa-var-file-edit,
+ "receipt": $fa-var-receipt,
+ "square-pen": $fa-var-square-pen,
+ "pen-square": $fa-var-pen-square,
+ "pencil-square": $fa-var-pencil-square,
+ "suitcase-rolling": $fa-var-suitcase-rolling,
+ "person-circle-exclamation": $fa-var-person-circle-exclamation,
+ "chevron-down": $fa-var-chevron-down,
+ "battery-full": $fa-var-battery-full,
+ "battery": $fa-var-battery,
+ "battery-5": $fa-var-battery-5,
+ "skull-crossbones": $fa-var-skull-crossbones,
+ "code-compare": $fa-var-code-compare,
+ "list-ul": $fa-var-list-ul,
+ "list-dots": $fa-var-list-dots,
+ "school-lock": $fa-var-school-lock,
+ "tower-cell": $fa-var-tower-cell,
+ "down-long": $fa-var-down-long,
+ "long-arrow-alt-down": $fa-var-long-arrow-alt-down,
+ "ranking-star": $fa-var-ranking-star,
+ "chess-king": $fa-var-chess-king,
+ "person-harassing": $fa-var-person-harassing,
+ "brazilian-real-sign": $fa-var-brazilian-real-sign,
+ "landmark-dome": $fa-var-landmark-dome,
+ "landmark-alt": $fa-var-landmark-alt,
+ "arrow-up": $fa-var-arrow-up,
+ "tv": $fa-var-tv,
+ "television": $fa-var-television,
+ "tv-alt": $fa-var-tv-alt,
+ "shrimp": $fa-var-shrimp,
+ "list-check": $fa-var-list-check,
+ "tasks": $fa-var-tasks,
+ "jug-detergent": $fa-var-jug-detergent,
+ "circle-user": $fa-var-circle-user,
+ "user-circle": $fa-var-user-circle,
+ "user-shield": $fa-var-user-shield,
+ "wind": $fa-var-wind,
+ "car-burst": $fa-var-car-burst,
+ "car-crash": $fa-var-car-crash,
+ "y": $fa-var-y,
+ "person-snowboarding": $fa-var-person-snowboarding,
+ "snowboarding": $fa-var-snowboarding,
+ "truck-fast": $fa-var-truck-fast,
+ "shipping-fast": $fa-var-shipping-fast,
+ "fish": $fa-var-fish,
+ "user-graduate": $fa-var-user-graduate,
+ "circle-half-stroke": $fa-var-circle-half-stroke,
+ "adjust": $fa-var-adjust,
+ "clapperboard": $fa-var-clapperboard,
+ "circle-radiation": $fa-var-circle-radiation,
+ "radiation-alt": $fa-var-radiation-alt,
+ "baseball": $fa-var-baseball,
+ "baseball-ball": $fa-var-baseball-ball,
+ "jet-fighter-up": $fa-var-jet-fighter-up,
+ "diagram-project": $fa-var-diagram-project,
+ "project-diagram": $fa-var-project-diagram,
+ "copy": $fa-var-copy,
+ "volume-xmark": $fa-var-volume-xmark,
+ "volume-mute": $fa-var-volume-mute,
+ "volume-times": $fa-var-volume-times,
+ "hand-sparkles": $fa-var-hand-sparkles,
+ "grip": $fa-var-grip,
+ "grip-horizontal": $fa-var-grip-horizontal,
+ "share-from-square": $fa-var-share-from-square,
+ "share-square": $fa-var-share-square,
+ "gun": $fa-var-gun,
+ "square-phone": $fa-var-square-phone,
+ "phone-square": $fa-var-phone-square,
+ "plus": $fa-var-plus,
+ "add": $fa-var-add,
+ "expand": $fa-var-expand,
+ "computer": $fa-var-computer,
+ "xmark": $fa-var-xmark,
+ "close": $fa-var-close,
+ "multiply": $fa-var-multiply,
+ "remove": $fa-var-remove,
+ "times": $fa-var-times,
+ "arrows-up-down-left-right": $fa-var-arrows-up-down-left-right,
+ "arrows": $fa-var-arrows,
+ "chalkboard-user": $fa-var-chalkboard-user,
+ "chalkboard-teacher": $fa-var-chalkboard-teacher,
+ "peso-sign": $fa-var-peso-sign,
+ "building-shield": $fa-var-building-shield,
+ "baby": $fa-var-baby,
+ "users-line": $fa-var-users-line,
+ "quote-left": $fa-var-quote-left,
+ "quote-left-alt": $fa-var-quote-left-alt,
+ "tractor": $fa-var-tractor,
+ "trash-arrow-up": $fa-var-trash-arrow-up,
+ "trash-restore": $fa-var-trash-restore,
+ "arrow-down-up-lock": $fa-var-arrow-down-up-lock,
+ "lines-leaning": $fa-var-lines-leaning,
+ "ruler-combined": $fa-var-ruler-combined,
+ "copyright": $fa-var-copyright,
+ "equals": $fa-var-equals,
+ "blender": $fa-var-blender,
+ "teeth": $fa-var-teeth,
+ "shekel-sign": $fa-var-shekel-sign,
+ "ils": $fa-var-ils,
+ "shekel": $fa-var-shekel,
+ "sheqel": $fa-var-sheqel,
+ "sheqel-sign": $fa-var-sheqel-sign,
+ "map": $fa-var-map,
+ "rocket": $fa-var-rocket,
+ "photo-film": $fa-var-photo-film,
+ "photo-video": $fa-var-photo-video,
+ "folder-minus": $fa-var-folder-minus,
+ "store": $fa-var-store,
+ "arrow-trend-up": $fa-var-arrow-trend-up,
+ "plug-circle-minus": $fa-var-plug-circle-minus,
+ "sign-hanging": $fa-var-sign-hanging,
+ "sign": $fa-var-sign,
+ "bezier-curve": $fa-var-bezier-curve,
+ "bell-slash": $fa-var-bell-slash,
+ "tablet": $fa-var-tablet,
+ "tablet-android": $fa-var-tablet-android,
+ "school-flag": $fa-var-school-flag,
+ "fill": $fa-var-fill,
+ "angle-up": $fa-var-angle-up,
+ "drumstick-bite": $fa-var-drumstick-bite,
+ "holly-berry": $fa-var-holly-berry,
+ "chevron-left": $fa-var-chevron-left,
+ "bacteria": $fa-var-bacteria,
+ "hand-lizard": $fa-var-hand-lizard,
+ "disease": $fa-var-disease,
+ "briefcase-medical": $fa-var-briefcase-medical,
+ "genderless": $fa-var-genderless,
+ "chevron-right": $fa-var-chevron-right,
+ "retweet": $fa-var-retweet,
+ "car-rear": $fa-var-car-rear,
+ "car-alt": $fa-var-car-alt,
+ "pump-soap": $fa-var-pump-soap,
+ "video-slash": $fa-var-video-slash,
+ "battery-quarter": $fa-var-battery-quarter,
+ "battery-2": $fa-var-battery-2,
+ "radio": $fa-var-radio,
+ "baby-carriage": $fa-var-baby-carriage,
+ "carriage-baby": $fa-var-carriage-baby,
+ "traffic-light": $fa-var-traffic-light,
+ "thermometer": $fa-var-thermometer,
+ "vr-cardboard": $fa-var-vr-cardboard,
+ "hand-middle-finger": $fa-var-hand-middle-finger,
+ "percent": $fa-var-percent,
+ "percentage": $fa-var-percentage,
+ "truck-moving": $fa-var-truck-moving,
+ "glass-water-droplet": $fa-var-glass-water-droplet,
+ "display": $fa-var-display,
+ "face-smile": $fa-var-face-smile,
+ "smile": $fa-var-smile,
+ "thumbtack": $fa-var-thumbtack,
+ "thumb-tack": $fa-var-thumb-tack,
+ "trophy": $fa-var-trophy,
+ "person-praying": $fa-var-person-praying,
+ "pray": $fa-var-pray,
+ "hammer": $fa-var-hammer,
+ "hand-peace": $fa-var-hand-peace,
+ "rotate": $fa-var-rotate,
+ "sync-alt": $fa-var-sync-alt,
+ "spinner": $fa-var-spinner,
+ "robot": $fa-var-robot,
+ "peace": $fa-var-peace,
+ "gears": $fa-var-gears,
+ "cogs": $fa-var-cogs,
+ "warehouse": $fa-var-warehouse,
+ "arrow-up-right-dots": $fa-var-arrow-up-right-dots,
+ "splotch": $fa-var-splotch,
+ "face-grin-hearts": $fa-var-face-grin-hearts,
+ "grin-hearts": $fa-var-grin-hearts,
+ "dice-four": $fa-var-dice-four,
+ "sim-card": $fa-var-sim-card,
+ "transgender": $fa-var-transgender,
+ "transgender-alt": $fa-var-transgender-alt,
+ "mercury": $fa-var-mercury,
+ "arrow-turn-down": $fa-var-arrow-turn-down,
+ "level-down": $fa-var-level-down,
+ "person-falling-burst": $fa-var-person-falling-burst,
+ "award": $fa-var-award,
+ "ticket-simple": $fa-var-ticket-simple,
+ "ticket-alt": $fa-var-ticket-alt,
+ "building": $fa-var-building,
+ "angles-left": $fa-var-angles-left,
+ "angle-double-left": $fa-var-angle-double-left,
+ "qrcode": $fa-var-qrcode,
+ "clock-rotate-left": $fa-var-clock-rotate-left,
+ "history": $fa-var-history,
+ "face-grin-beam-sweat": $fa-var-face-grin-beam-sweat,
+ "grin-beam-sweat": $fa-var-grin-beam-sweat,
+ "file-export": $fa-var-file-export,
+ "arrow-right-from-file": $fa-var-arrow-right-from-file,
+ "shield": $fa-var-shield,
+ "shield-blank": $fa-var-shield-blank,
+ "arrow-up-short-wide": $fa-var-arrow-up-short-wide,
+ "sort-amount-up-alt": $fa-var-sort-amount-up-alt,
+ "house-medical": $fa-var-house-medical,
+ "golf-ball-tee": $fa-var-golf-ball-tee,
+ "golf-ball": $fa-var-golf-ball,
+ "circle-chevron-left": $fa-var-circle-chevron-left,
+ "chevron-circle-left": $fa-var-chevron-circle-left,
+ "house-chimney-window": $fa-var-house-chimney-window,
+ "pen-nib": $fa-var-pen-nib,
+ "tent-arrow-turn-left": $fa-var-tent-arrow-turn-left,
+ "tents": $fa-var-tents,
+ "wand-magic": $fa-var-wand-magic,
+ "magic": $fa-var-magic,
+ "dog": $fa-var-dog,
+ "carrot": $fa-var-carrot,
+ "moon": $fa-var-moon,
+ "wine-glass-empty": $fa-var-wine-glass-empty,
+ "wine-glass-alt": $fa-var-wine-glass-alt,
+ "cheese": $fa-var-cheese,
+ "yin-yang": $fa-var-yin-yang,
+ "music": $fa-var-music,
+ "code-commit": $fa-var-code-commit,
+ "temperature-low": $fa-var-temperature-low,
+ "person-biking": $fa-var-person-biking,
+ "biking": $fa-var-biking,
+ "broom": $fa-var-broom,
+ "shield-heart": $fa-var-shield-heart,
+ "gopuram": $fa-var-gopuram,
+ "earth-oceania": $fa-var-earth-oceania,
+ "globe-oceania": $fa-var-globe-oceania,
+ "square-xmark": $fa-var-square-xmark,
+ "times-square": $fa-var-times-square,
+ "xmark-square": $fa-var-xmark-square,
+ "hashtag": $fa-var-hashtag,
+ "up-right-and-down-left-from-center": $fa-var-up-right-and-down-left-from-center,
+ "expand-alt": $fa-var-expand-alt,
+ "oil-can": $fa-var-oil-can,
+ "t": $fa-var-t,
+ "hippo": $fa-var-hippo,
+ "chart-column": $fa-var-chart-column,
+ "infinity": $fa-var-infinity,
+ "vial-circle-check": $fa-var-vial-circle-check,
+ "person-arrow-down-to-line": $fa-var-person-arrow-down-to-line,
+ "voicemail": $fa-var-voicemail,
+ "fan": $fa-var-fan,
+ "person-walking-luggage": $fa-var-person-walking-luggage,
+ "up-down": $fa-var-up-down,
+ "arrows-alt-v": $fa-var-arrows-alt-v,
+ "cloud-moon-rain": $fa-var-cloud-moon-rain,
+ "calendar": $fa-var-calendar,
+ "trailer": $fa-var-trailer,
+ "bahai": $fa-var-bahai,
+ "haykal": $fa-var-haykal,
+ "sd-card": $fa-var-sd-card,
+ "dragon": $fa-var-dragon,
+ "shoe-prints": $fa-var-shoe-prints,
+ "circle-plus": $fa-var-circle-plus,
+ "plus-circle": $fa-var-plus-circle,
+ "face-grin-tongue-wink": $fa-var-face-grin-tongue-wink,
+ "grin-tongue-wink": $fa-var-grin-tongue-wink,
+ "hand-holding": $fa-var-hand-holding,
+ "plug-circle-exclamation": $fa-var-plug-circle-exclamation,
+ "link-slash": $fa-var-link-slash,
+ "chain-broken": $fa-var-chain-broken,
+ "chain-slash": $fa-var-chain-slash,
+ "unlink": $fa-var-unlink,
+ "clone": $fa-var-clone,
+ "person-walking-arrow-loop-left": $fa-var-person-walking-arrow-loop-left,
+ "arrow-up-z-a": $fa-var-arrow-up-z-a,
+ "sort-alpha-up-alt": $fa-var-sort-alpha-up-alt,
+ "fire-flame-curved": $fa-var-fire-flame-curved,
+ "fire-alt": $fa-var-fire-alt,
+ "tornado": $fa-var-tornado,
+ "file-circle-plus": $fa-var-file-circle-plus,
+ "book-quran": $fa-var-book-quran,
+ "quran": $fa-var-quran,
+ "anchor": $fa-var-anchor,
+ "border-all": $fa-var-border-all,
+ "face-angry": $fa-var-face-angry,
+ "angry": $fa-var-angry,
+ "cookie-bite": $fa-var-cookie-bite,
+ "arrow-trend-down": $fa-var-arrow-trend-down,
+ "rss": $fa-var-rss,
+ "feed": $fa-var-feed,
+ "draw-polygon": $fa-var-draw-polygon,
+ "scale-balanced": $fa-var-scale-balanced,
+ "balance-scale": $fa-var-balance-scale,
+ "gauge-simple-high": $fa-var-gauge-simple-high,
+ "tachometer": $fa-var-tachometer,
+ "tachometer-fast": $fa-var-tachometer-fast,
+ "shower": $fa-var-shower,
+ "desktop": $fa-var-desktop,
+ "desktop-alt": $fa-var-desktop-alt,
+ "m": $fa-var-m,
+ "table-list": $fa-var-table-list,
+ "th-list": $fa-var-th-list,
+ "comment-sms": $fa-var-comment-sms,
+ "sms": $fa-var-sms,
+ "book": $fa-var-book,
+ "user-plus": $fa-var-user-plus,
+ "check": $fa-var-check,
+ "battery-three-quarters": $fa-var-battery-three-quarters,
+ "battery-4": $fa-var-battery-4,
+ "house-circle-check": $fa-var-house-circle-check,
+ "angle-left": $fa-var-angle-left,
+ "diagram-successor": $fa-var-diagram-successor,
+ "truck-arrow-right": $fa-var-truck-arrow-right,
+ "arrows-split-up-and-left": $fa-var-arrows-split-up-and-left,
+ "hand-fist": $fa-var-hand-fist,
+ "fist-raised": $fa-var-fist-raised,
+ "cloud-moon": $fa-var-cloud-moon,
+ "briefcase": $fa-var-briefcase,
+ "person-falling": $fa-var-person-falling,
+ "image-portrait": $fa-var-image-portrait,
+ "portrait": $fa-var-portrait,
+ "user-tag": $fa-var-user-tag,
+ "rug": $fa-var-rug,
+ "earth-europe": $fa-var-earth-europe,
+ "globe-europe": $fa-var-globe-europe,
+ "cart-flatbed-suitcase": $fa-var-cart-flatbed-suitcase,
+ "luggage-cart": $fa-var-luggage-cart,
+ "rectangle-xmark": $fa-var-rectangle-xmark,
+ "rectangle-times": $fa-var-rectangle-times,
+ "times-rectangle": $fa-var-times-rectangle,
+ "window-close": $fa-var-window-close,
+ "baht-sign": $fa-var-baht-sign,
+ "book-open": $fa-var-book-open,
+ "book-journal-whills": $fa-var-book-journal-whills,
+ "journal-whills": $fa-var-journal-whills,
+ "handcuffs": $fa-var-handcuffs,
+ "triangle-exclamation": $fa-var-triangle-exclamation,
+ "exclamation-triangle": $fa-var-exclamation-triangle,
+ "warning": $fa-var-warning,
+ "database": $fa-var-database,
+ "share": $fa-var-share,
+ "arrow-turn-right": $fa-var-arrow-turn-right,
+ "mail-forward": $fa-var-mail-forward,
+ "bottle-droplet": $fa-var-bottle-droplet,
+ "mask-face": $fa-var-mask-face,
+ "hill-rockslide": $fa-var-hill-rockslide,
+ "right-left": $fa-var-right-left,
+ "exchange-alt": $fa-var-exchange-alt,
+ "paper-plane": $fa-var-paper-plane,
+ "road-circle-exclamation": $fa-var-road-circle-exclamation,
+ "dungeon": $fa-var-dungeon,
+ "align-right": $fa-var-align-right,
+ "money-bill-1-wave": $fa-var-money-bill-1-wave,
+ "money-bill-wave-alt": $fa-var-money-bill-wave-alt,
+ "life-ring": $fa-var-life-ring,
+ "hands": $fa-var-hands,
+ "sign-language": $fa-var-sign-language,
+ "signing": $fa-var-signing,
+ "calendar-day": $fa-var-calendar-day,
+ "water-ladder": $fa-var-water-ladder,
+ "ladder-water": $fa-var-ladder-water,
+ "swimming-pool": $fa-var-swimming-pool,
+ "arrows-up-down": $fa-var-arrows-up-down,
+ "arrows-v": $fa-var-arrows-v,
+ "face-grimace": $fa-var-face-grimace,
+ "grimace": $fa-var-grimace,
+ "wheelchair-move": $fa-var-wheelchair-move,
+ "wheelchair-alt": $fa-var-wheelchair-alt,
+ "turn-down": $fa-var-turn-down,
+ "level-down-alt": $fa-var-level-down-alt,
+ "person-walking-arrow-right": $fa-var-person-walking-arrow-right,
+ "square-envelope": $fa-var-square-envelope,
+ "envelope-square": $fa-var-envelope-square,
+ "dice": $fa-var-dice,
+ "bowling-ball": $fa-var-bowling-ball,
+ "brain": $fa-var-brain,
+ "bandage": $fa-var-bandage,
+ "band-aid": $fa-var-band-aid,
+ "calendar-minus": $fa-var-calendar-minus,
+ "circle-xmark": $fa-var-circle-xmark,
+ "times-circle": $fa-var-times-circle,
+ "xmark-circle": $fa-var-xmark-circle,
+ "gifts": $fa-var-gifts,
+ "hotel": $fa-var-hotel,
+ "earth-asia": $fa-var-earth-asia,
+ "globe-asia": $fa-var-globe-asia,
+ "id-card-clip": $fa-var-id-card-clip,
+ "id-card-alt": $fa-var-id-card-alt,
+ "magnifying-glass-plus": $fa-var-magnifying-glass-plus,
+ "search-plus": $fa-var-search-plus,
+ "thumbs-up": $fa-var-thumbs-up,
+ "user-clock": $fa-var-user-clock,
+ "hand-dots": $fa-var-hand-dots,
+ "allergies": $fa-var-allergies,
+ "file-invoice": $fa-var-file-invoice,
+ "window-minimize": $fa-var-window-minimize,
+ "mug-saucer": $fa-var-mug-saucer,
+ "coffee": $fa-var-coffee,
+ "brush": $fa-var-brush,
+ "mask": $fa-var-mask,
+ "magnifying-glass-minus": $fa-var-magnifying-glass-minus,
+ "search-minus": $fa-var-search-minus,
+ "ruler-vertical": $fa-var-ruler-vertical,
+ "user-large": $fa-var-user-large,
+ "user-alt": $fa-var-user-alt,
+ "train-tram": $fa-var-train-tram,
+ "user-nurse": $fa-var-user-nurse,
+ "syringe": $fa-var-syringe,
+ "cloud-sun": $fa-var-cloud-sun,
+ "stopwatch-20": $fa-var-stopwatch-20,
+ "square-full": $fa-var-square-full,
+ "magnet": $fa-var-magnet,
+ "jar": $fa-var-jar,
+ "note-sticky": $fa-var-note-sticky,
+ "sticky-note": $fa-var-sticky-note,
+ "bug-slash": $fa-var-bug-slash,
+ "arrow-up-from-water-pump": $fa-var-arrow-up-from-water-pump,
+ "bone": $fa-var-bone,
+ "user-injured": $fa-var-user-injured,
+ "face-sad-tear": $fa-var-face-sad-tear,
+ "sad-tear": $fa-var-sad-tear,
+ "plane": $fa-var-plane,
+ "tent-arrows-down": $fa-var-tent-arrows-down,
+ "exclamation": $fa-var-exclamation,
+ "arrows-spin": $fa-var-arrows-spin,
+ "print": $fa-var-print,
+ "turkish-lira-sign": $fa-var-turkish-lira-sign,
+ "try": $fa-var-try,
+ "turkish-lira": $fa-var-turkish-lira,
+ "dollar-sign": $fa-var-dollar-sign,
+ "dollar": $fa-var-dollar,
+ "usd": $fa-var-usd,
+ "x": $fa-var-x,
+ "magnifying-glass-dollar": $fa-var-magnifying-glass-dollar,
+ "search-dollar": $fa-var-search-dollar,
+ "users-gear": $fa-var-users-gear,
+ "users-cog": $fa-var-users-cog,
+ "person-military-pointing": $fa-var-person-military-pointing,
+ "building-columns": $fa-var-building-columns,
+ "bank": $fa-var-bank,
+ "institution": $fa-var-institution,
+ "museum": $fa-var-museum,
+ "university": $fa-var-university,
+ "umbrella": $fa-var-umbrella,
+ "trowel": $fa-var-trowel,
+ "d": $fa-var-d,
+ "stapler": $fa-var-stapler,
+ "masks-theater": $fa-var-masks-theater,
+ "theater-masks": $fa-var-theater-masks,
+ "kip-sign": $fa-var-kip-sign,
+ "hand-point-left": $fa-var-hand-point-left,
+ "handshake-simple": $fa-var-handshake-simple,
+ "handshake-alt": $fa-var-handshake-alt,
+ "jet-fighter": $fa-var-jet-fighter,
+ "fighter-jet": $fa-var-fighter-jet,
+ "square-share-nodes": $fa-var-square-share-nodes,
+ "share-alt-square": $fa-var-share-alt-square,
+ "barcode": $fa-var-barcode,
+ "plus-minus": $fa-var-plus-minus,
+ "video": $fa-var-video,
+ "video-camera": $fa-var-video-camera,
+ "graduation-cap": $fa-var-graduation-cap,
+ "mortar-board": $fa-var-mortar-board,
+ "hand-holding-medical": $fa-var-hand-holding-medical,
+ "person-circle-check": $fa-var-person-circle-check,
+ "turn-up": $fa-var-turn-up,
+ "level-up-alt": $fa-var-level-up-alt,
+);
+
+$fa-brand-icons: (
+ "monero": $fa-var-monero,
+ "hooli": $fa-var-hooli,
+ "yelp": $fa-var-yelp,
+ "cc-visa": $fa-var-cc-visa,
+ "lastfm": $fa-var-lastfm,
+ "shopware": $fa-var-shopware,
+ "creative-commons-nc": $fa-var-creative-commons-nc,
+ "aws": $fa-var-aws,
+ "redhat": $fa-var-redhat,
+ "yoast": $fa-var-yoast,
+ "cloudflare": $fa-var-cloudflare,
+ "ups": $fa-var-ups,
+ "wpexplorer": $fa-var-wpexplorer,
+ "dyalog": $fa-var-dyalog,
+ "bity": $fa-var-bity,
+ "stackpath": $fa-var-stackpath,
+ "buysellads": $fa-var-buysellads,
+ "first-order": $fa-var-first-order,
+ "modx": $fa-var-modx,
+ "guilded": $fa-var-guilded,
+ "vnv": $fa-var-vnv,
+ "square-js": $fa-var-square-js,
+ "js-square": $fa-var-js-square,
+ "microsoft": $fa-var-microsoft,
+ "qq": $fa-var-qq,
+ "orcid": $fa-var-orcid,
+ "java": $fa-var-java,
+ "invision": $fa-var-invision,
+ "creative-commons-pd-alt": $fa-var-creative-commons-pd-alt,
+ "centercode": $fa-var-centercode,
+ "glide-g": $fa-var-glide-g,
+ "drupal": $fa-var-drupal,
+ "hire-a-helper": $fa-var-hire-a-helper,
+ "creative-commons-by": $fa-var-creative-commons-by,
+ "unity": $fa-var-unity,
+ "whmcs": $fa-var-whmcs,
+ "rocketchat": $fa-var-rocketchat,
+ "vk": $fa-var-vk,
+ "untappd": $fa-var-untappd,
+ "mailchimp": $fa-var-mailchimp,
+ "css3-alt": $fa-var-css3-alt,
+ "square-reddit": $fa-var-square-reddit,
+ "reddit-square": $fa-var-reddit-square,
+ "vimeo-v": $fa-var-vimeo-v,
+ "contao": $fa-var-contao,
+ "square-font-awesome": $fa-var-square-font-awesome,
+ "deskpro": $fa-var-deskpro,
+ "sistrix": $fa-var-sistrix,
+ "square-instagram": $fa-var-square-instagram,
+ "instagram-square": $fa-var-instagram-square,
+ "battle-net": $fa-var-battle-net,
+ "the-red-yeti": $fa-var-the-red-yeti,
+ "square-hacker-news": $fa-var-square-hacker-news,
+ "hacker-news-square": $fa-var-hacker-news-square,
+ "edge": $fa-var-edge,
+ "napster": $fa-var-napster,
+ "square-snapchat": $fa-var-square-snapchat,
+ "snapchat-square": $fa-var-snapchat-square,
+ "google-plus-g": $fa-var-google-plus-g,
+ "artstation": $fa-var-artstation,
+ "markdown": $fa-var-markdown,
+ "sourcetree": $fa-var-sourcetree,
+ "google-plus": $fa-var-google-plus,
+ "diaspora": $fa-var-diaspora,
+ "foursquare": $fa-var-foursquare,
+ "stack-overflow": $fa-var-stack-overflow,
+ "github-alt": $fa-var-github-alt,
+ "phoenix-squadron": $fa-var-phoenix-squadron,
+ "pagelines": $fa-var-pagelines,
+ "algolia": $fa-var-algolia,
+ "red-river": $fa-var-red-river,
+ "creative-commons-sa": $fa-var-creative-commons-sa,
+ "safari": $fa-var-safari,
+ "google": $fa-var-google,
+ "square-font-awesome-stroke": $fa-var-square-font-awesome-stroke,
+ "font-awesome-alt": $fa-var-font-awesome-alt,
+ "atlassian": $fa-var-atlassian,
+ "linkedin-in": $fa-var-linkedin-in,
+ "digital-ocean": $fa-var-digital-ocean,
+ "nimblr": $fa-var-nimblr,
+ "chromecast": $fa-var-chromecast,
+ "evernote": $fa-var-evernote,
+ "hacker-news": $fa-var-hacker-news,
+ "creative-commons-sampling": $fa-var-creative-commons-sampling,
+ "adversal": $fa-var-adversal,
+ "creative-commons": $fa-var-creative-commons,
+ "watchman-monitoring": $fa-var-watchman-monitoring,
+ "fonticons": $fa-var-fonticons,
+ "weixin": $fa-var-weixin,
+ "shirtsinbulk": $fa-var-shirtsinbulk,
+ "codepen": $fa-var-codepen,
+ "git-alt": $fa-var-git-alt,
+ "lyft": $fa-var-lyft,
+ "rev": $fa-var-rev,
+ "windows": $fa-var-windows,
+ "wizards-of-the-coast": $fa-var-wizards-of-the-coast,
+ "square-viadeo": $fa-var-square-viadeo,
+ "viadeo-square": $fa-var-viadeo-square,
+ "meetup": $fa-var-meetup,
+ "centos": $fa-var-centos,
+ "adn": $fa-var-adn,
+ "cloudsmith": $fa-var-cloudsmith,
+ "pied-piper-alt": $fa-var-pied-piper-alt,
+ "square-dribbble": $fa-var-square-dribbble,
+ "dribbble-square": $fa-var-dribbble-square,
+ "codiepie": $fa-var-codiepie,
+ "node": $fa-var-node,
+ "mix": $fa-var-mix,
+ "steam": $fa-var-steam,
+ "cc-apple-pay": $fa-var-cc-apple-pay,
+ "scribd": $fa-var-scribd,
+ "openid": $fa-var-openid,
+ "instalod": $fa-var-instalod,
+ "expeditedssl": $fa-var-expeditedssl,
+ "sellcast": $fa-var-sellcast,
+ "square-twitter": $fa-var-square-twitter,
+ "twitter-square": $fa-var-twitter-square,
+ "r-project": $fa-var-r-project,
+ "delicious": $fa-var-delicious,
+ "freebsd": $fa-var-freebsd,
+ "vuejs": $fa-var-vuejs,
+ "accusoft": $fa-var-accusoft,
+ "ioxhost": $fa-var-ioxhost,
+ "fonticons-fi": $fa-var-fonticons-fi,
+ "app-store": $fa-var-app-store,
+ "cc-mastercard": $fa-var-cc-mastercard,
+ "itunes-note": $fa-var-itunes-note,
+ "golang": $fa-var-golang,
+ "kickstarter": $fa-var-kickstarter,
+ "grav": $fa-var-grav,
+ "weibo": $fa-var-weibo,
+ "uncharted": $fa-var-uncharted,
+ "firstdraft": $fa-var-firstdraft,
+ "square-youtube": $fa-var-square-youtube,
+ "youtube-square": $fa-var-youtube-square,
+ "wikipedia-w": $fa-var-wikipedia-w,
+ "wpressr": $fa-var-wpressr,
+ "rendact": $fa-var-rendact,
+ "angellist": $fa-var-angellist,
+ "galactic-republic": $fa-var-galactic-republic,
+ "nfc-directional": $fa-var-nfc-directional,
+ "skype": $fa-var-skype,
+ "joget": $fa-var-joget,
+ "fedora": $fa-var-fedora,
+ "stripe-s": $fa-var-stripe-s,
+ "meta": $fa-var-meta,
+ "laravel": $fa-var-laravel,
+ "hotjar": $fa-var-hotjar,
+ "bluetooth-b": $fa-var-bluetooth-b,
+ "sticker-mule": $fa-var-sticker-mule,
+ "creative-commons-zero": $fa-var-creative-commons-zero,
+ "hips": $fa-var-hips,
+ "behance": $fa-var-behance,
+ "reddit": $fa-var-reddit,
+ "discord": $fa-var-discord,
+ "chrome": $fa-var-chrome,
+ "app-store-ios": $fa-var-app-store-ios,
+ "cc-discover": $fa-var-cc-discover,
+ "wpbeginner": $fa-var-wpbeginner,
+ "confluence": $fa-var-confluence,
+ "mdb": $fa-var-mdb,
+ "dochub": $fa-var-dochub,
+ "accessible-icon": $fa-var-accessible-icon,
+ "ebay": $fa-var-ebay,
+ "amazon": $fa-var-amazon,
+ "unsplash": $fa-var-unsplash,
+ "yarn": $fa-var-yarn,
+ "square-steam": $fa-var-square-steam,
+ "steam-square": $fa-var-steam-square,
+ "500px": $fa-var-500px,
+ "square-vimeo": $fa-var-square-vimeo,
+ "vimeo-square": $fa-var-vimeo-square,
+ "asymmetrik": $fa-var-asymmetrik,
+ "font-awesome": $fa-var-font-awesome,
+ "font-awesome-flag": $fa-var-font-awesome-flag,
+ "font-awesome-logo-full": $fa-var-font-awesome-logo-full,
+ "gratipay": $fa-var-gratipay,
+ "apple": $fa-var-apple,
+ "hive": $fa-var-hive,
+ "gitkraken": $fa-var-gitkraken,
+ "keybase": $fa-var-keybase,
+ "apple-pay": $fa-var-apple-pay,
+ "padlet": $fa-var-padlet,
+ "amazon-pay": $fa-var-amazon-pay,
+ "square-github": $fa-var-square-github,
+ "github-square": $fa-var-github-square,
+ "stumbleupon": $fa-var-stumbleupon,
+ "fedex": $fa-var-fedex,
+ "phoenix-framework": $fa-var-phoenix-framework,
+ "shopify": $fa-var-shopify,
+ "neos": $fa-var-neos,
+ "hackerrank": $fa-var-hackerrank,
+ "researchgate": $fa-var-researchgate,
+ "swift": $fa-var-swift,
+ "angular": $fa-var-angular,
+ "speakap": $fa-var-speakap,
+ "angrycreative": $fa-var-angrycreative,
+ "y-combinator": $fa-var-y-combinator,
+ "empire": $fa-var-empire,
+ "envira": $fa-var-envira,
+ "square-gitlab": $fa-var-square-gitlab,
+ "gitlab-square": $fa-var-gitlab-square,
+ "studiovinari": $fa-var-studiovinari,
+ "pied-piper": $fa-var-pied-piper,
+ "wordpress": $fa-var-wordpress,
+ "product-hunt": $fa-var-product-hunt,
+ "firefox": $fa-var-firefox,
+ "linode": $fa-var-linode,
+ "goodreads": $fa-var-goodreads,
+ "square-odnoklassniki": $fa-var-square-odnoklassniki,
+ "odnoklassniki-square": $fa-var-odnoklassniki-square,
+ "jsfiddle": $fa-var-jsfiddle,
+ "sith": $fa-var-sith,
+ "themeisle": $fa-var-themeisle,
+ "page4": $fa-var-page4,
+ "hashnode": $fa-var-hashnode,
+ "react": $fa-var-react,
+ "cc-paypal": $fa-var-cc-paypal,
+ "squarespace": $fa-var-squarespace,
+ "cc-stripe": $fa-var-cc-stripe,
+ "creative-commons-share": $fa-var-creative-commons-share,
+ "bitcoin": $fa-var-bitcoin,
+ "keycdn": $fa-var-keycdn,
+ "opera": $fa-var-opera,
+ "itch-io": $fa-var-itch-io,
+ "umbraco": $fa-var-umbraco,
+ "galactic-senate": $fa-var-galactic-senate,
+ "ubuntu": $fa-var-ubuntu,
+ "draft2digital": $fa-var-draft2digital,
+ "stripe": $fa-var-stripe,
+ "houzz": $fa-var-houzz,
+ "gg": $fa-var-gg,
+ "dhl": $fa-var-dhl,
+ "square-pinterest": $fa-var-square-pinterest,
+ "pinterest-square": $fa-var-pinterest-square,
+ "xing": $fa-var-xing,
+ "blackberry": $fa-var-blackberry,
+ "creative-commons-pd": $fa-var-creative-commons-pd,
+ "playstation": $fa-var-playstation,
+ "quinscape": $fa-var-quinscape,
+ "less": $fa-var-less,
+ "blogger-b": $fa-var-blogger-b,
+ "opencart": $fa-var-opencart,
+ "vine": $fa-var-vine,
+ "paypal": $fa-var-paypal,
+ "gitlab": $fa-var-gitlab,
+ "typo3": $fa-var-typo3,
+ "reddit-alien": $fa-var-reddit-alien,
+ "yahoo": $fa-var-yahoo,
+ "dailymotion": $fa-var-dailymotion,
+ "affiliatetheme": $fa-var-affiliatetheme,
+ "pied-piper-pp": $fa-var-pied-piper-pp,
+ "bootstrap": $fa-var-bootstrap,
+ "odnoklassniki": $fa-var-odnoklassniki,
+ "nfc-symbol": $fa-var-nfc-symbol,
+ "ethereum": $fa-var-ethereum,
+ "speaker-deck": $fa-var-speaker-deck,
+ "creative-commons-nc-eu": $fa-var-creative-commons-nc-eu,
+ "patreon": $fa-var-patreon,
+ "avianex": $fa-var-avianex,
+ "ello": $fa-var-ello,
+ "gofore": $fa-var-gofore,
+ "bimobject": $fa-var-bimobject,
+ "facebook-f": $fa-var-facebook-f,
+ "square-google-plus": $fa-var-square-google-plus,
+ "google-plus-square": $fa-var-google-plus-square,
+ "mandalorian": $fa-var-mandalorian,
+ "first-order-alt": $fa-var-first-order-alt,
+ "osi": $fa-var-osi,
+ "google-wallet": $fa-var-google-wallet,
+ "d-and-d-beyond": $fa-var-d-and-d-beyond,
+ "periscope": $fa-var-periscope,
+ "fulcrum": $fa-var-fulcrum,
+ "cloudscale": $fa-var-cloudscale,
+ "forumbee": $fa-var-forumbee,
+ "mizuni": $fa-var-mizuni,
+ "schlix": $fa-var-schlix,
+ "square-xing": $fa-var-square-xing,
+ "xing-square": $fa-var-xing-square,
+ "bandcamp": $fa-var-bandcamp,
+ "wpforms": $fa-var-wpforms,
+ "cloudversify": $fa-var-cloudversify,
+ "usps": $fa-var-usps,
+ "megaport": $fa-var-megaport,
+ "magento": $fa-var-magento,
+ "spotify": $fa-var-spotify,
+ "optin-monster": $fa-var-optin-monster,
+ "fly": $fa-var-fly,
+ "aviato": $fa-var-aviato,
+ "itunes": $fa-var-itunes,
+ "cuttlefish": $fa-var-cuttlefish,
+ "blogger": $fa-var-blogger,
+ "flickr": $fa-var-flickr,
+ "viber": $fa-var-viber,
+ "soundcloud": $fa-var-soundcloud,
+ "digg": $fa-var-digg,
+ "tencent-weibo": $fa-var-tencent-weibo,
+ "symfony": $fa-var-symfony,
+ "maxcdn": $fa-var-maxcdn,
+ "etsy": $fa-var-etsy,
+ "facebook-messenger": $fa-var-facebook-messenger,
+ "audible": $fa-var-audible,
+ "think-peaks": $fa-var-think-peaks,
+ "bilibili": $fa-var-bilibili,
+ "erlang": $fa-var-erlang,
+ "cotton-bureau": $fa-var-cotton-bureau,
+ "dashcube": $fa-var-dashcube,
+ "42-group": $fa-var-42-group,
+ "innosoft": $fa-var-innosoft,
+ "stack-exchange": $fa-var-stack-exchange,
+ "elementor": $fa-var-elementor,
+ "square-pied-piper": $fa-var-square-pied-piper,
+ "pied-piper-square": $fa-var-pied-piper-square,
+ "creative-commons-nd": $fa-var-creative-commons-nd,
+ "palfed": $fa-var-palfed,
+ "superpowers": $fa-var-superpowers,
+ "resolving": $fa-var-resolving,
+ "xbox": $fa-var-xbox,
+ "searchengin": $fa-var-searchengin,
+ "tiktok": $fa-var-tiktok,
+ "square-facebook": $fa-var-square-facebook,
+ "facebook-square": $fa-var-facebook-square,
+ "renren": $fa-var-renren,
+ "linux": $fa-var-linux,
+ "glide": $fa-var-glide,
+ "linkedin": $fa-var-linkedin,
+ "hubspot": $fa-var-hubspot,
+ "deploydog": $fa-var-deploydog,
+ "twitch": $fa-var-twitch,
+ "ravelry": $fa-var-ravelry,
+ "mixer": $fa-var-mixer,
+ "square-lastfm": $fa-var-square-lastfm,
+ "lastfm-square": $fa-var-lastfm-square,
+ "vimeo": $fa-var-vimeo,
+ "mendeley": $fa-var-mendeley,
+ "uniregistry": $fa-var-uniregistry,
+ "figma": $fa-var-figma,
+ "creative-commons-remix": $fa-var-creative-commons-remix,
+ "cc-amazon-pay": $fa-var-cc-amazon-pay,
+ "dropbox": $fa-var-dropbox,
+ "instagram": $fa-var-instagram,
+ "cmplid": $fa-var-cmplid,
+ "facebook": $fa-var-facebook,
+ "gripfire": $fa-var-gripfire,
+ "jedi-order": $fa-var-jedi-order,
+ "uikit": $fa-var-uikit,
+ "fort-awesome-alt": $fa-var-fort-awesome-alt,
+ "phabricator": $fa-var-phabricator,
+ "ussunnah": $fa-var-ussunnah,
+ "earlybirds": $fa-var-earlybirds,
+ "trade-federation": $fa-var-trade-federation,
+ "autoprefixer": $fa-var-autoprefixer,
+ "whatsapp": $fa-var-whatsapp,
+ "slideshare": $fa-var-slideshare,
+ "google-play": $fa-var-google-play,
+ "viadeo": $fa-var-viadeo,
+ "line": $fa-var-line,
+ "google-drive": $fa-var-google-drive,
+ "servicestack": $fa-var-servicestack,
+ "simplybuilt": $fa-var-simplybuilt,
+ "bitbucket": $fa-var-bitbucket,
+ "imdb": $fa-var-imdb,
+ "deezer": $fa-var-deezer,
+ "raspberry-pi": $fa-var-raspberry-pi,
+ "jira": $fa-var-jira,
+ "docker": $fa-var-docker,
+ "screenpal": $fa-var-screenpal,
+ "bluetooth": $fa-var-bluetooth,
+ "gitter": $fa-var-gitter,
+ "d-and-d": $fa-var-d-and-d,
+ "microblog": $fa-var-microblog,
+ "cc-diners-club": $fa-var-cc-diners-club,
+ "gg-circle": $fa-var-gg-circle,
+ "pied-piper-hat": $fa-var-pied-piper-hat,
+ "kickstarter-k": $fa-var-kickstarter-k,
+ "yandex": $fa-var-yandex,
+ "readme": $fa-var-readme,
+ "html5": $fa-var-html5,
+ "sellsy": $fa-var-sellsy,
+ "sass": $fa-var-sass,
+ "wirsindhandwerk": $fa-var-wirsindhandwerk,
+ "wsh": $fa-var-wsh,
+ "buromobelexperte": $fa-var-buromobelexperte,
+ "salesforce": $fa-var-salesforce,
+ "octopus-deploy": $fa-var-octopus-deploy,
+ "medapps": $fa-var-medapps,
+ "ns8": $fa-var-ns8,
+ "pinterest-p": $fa-var-pinterest-p,
+ "apper": $fa-var-apper,
+ "fort-awesome": $fa-var-fort-awesome,
+ "waze": $fa-var-waze,
+ "cc-jcb": $fa-var-cc-jcb,
+ "snapchat": $fa-var-snapchat,
+ "snapchat-ghost": $fa-var-snapchat-ghost,
+ "fantasy-flight-games": $fa-var-fantasy-flight-games,
+ "rust": $fa-var-rust,
+ "wix": $fa-var-wix,
+ "square-behance": $fa-var-square-behance,
+ "behance-square": $fa-var-behance-square,
+ "supple": $fa-var-supple,
+ "rebel": $fa-var-rebel,
+ "css3": $fa-var-css3,
+ "staylinked": $fa-var-staylinked,
+ "kaggle": $fa-var-kaggle,
+ "space-awesome": $fa-var-space-awesome,
+ "deviantart": $fa-var-deviantart,
+ "cpanel": $fa-var-cpanel,
+ "goodreads-g": $fa-var-goodreads-g,
+ "square-git": $fa-var-square-git,
+ "git-square": $fa-var-git-square,
+ "square-tumblr": $fa-var-square-tumblr,
+ "tumblr-square": $fa-var-tumblr-square,
+ "trello": $fa-var-trello,
+ "creative-commons-nc-jp": $fa-var-creative-commons-nc-jp,
+ "get-pocket": $fa-var-get-pocket,
+ "perbyte": $fa-var-perbyte,
+ "grunt": $fa-var-grunt,
+ "weebly": $fa-var-weebly,
+ "connectdevelop": $fa-var-connectdevelop,
+ "leanpub": $fa-var-leanpub,
+ "black-tie": $fa-var-black-tie,
+ "themeco": $fa-var-themeco,
+ "python": $fa-var-python,
+ "android": $fa-var-android,
+ "bots": $fa-var-bots,
+ "free-code-camp": $fa-var-free-code-camp,
+ "hornbill": $fa-var-hornbill,
+ "js": $fa-var-js,
+ "ideal": $fa-var-ideal,
+ "git": $fa-var-git,
+ "dev": $fa-var-dev,
+ "sketch": $fa-var-sketch,
+ "yandex-international": $fa-var-yandex-international,
+ "cc-amex": $fa-var-cc-amex,
+ "uber": $fa-var-uber,
+ "github": $fa-var-github,
+ "php": $fa-var-php,
+ "alipay": $fa-var-alipay,
+ "youtube": $fa-var-youtube,
+ "skyatlas": $fa-var-skyatlas,
+ "firefox-browser": $fa-var-firefox-browser,
+ "replyd": $fa-var-replyd,
+ "suse": $fa-var-suse,
+ "jenkins": $fa-var-jenkins,
+ "twitter": $fa-var-twitter,
+ "rockrms": $fa-var-rockrms,
+ "pinterest": $fa-var-pinterest,
+ "buffer": $fa-var-buffer,
+ "npm": $fa-var-npm,
+ "yammer": $fa-var-yammer,
+ "btc": $fa-var-btc,
+ "dribbble": $fa-var-dribbble,
+ "stumbleupon-circle": $fa-var-stumbleupon-circle,
+ "internet-explorer": $fa-var-internet-explorer,
+ "telegram": $fa-var-telegram,
+ "telegram-plane": $fa-var-telegram-plane,
+ "old-republic": $fa-var-old-republic,
+ "square-whatsapp": $fa-var-square-whatsapp,
+ "whatsapp-square": $fa-var-whatsapp-square,
+ "node-js": $fa-var-node-js,
+ "edge-legacy": $fa-var-edge-legacy,
+ "slack": $fa-var-slack,
+ "slack-hash": $fa-var-slack-hash,
+ "medrt": $fa-var-medrt,
+ "usb": $fa-var-usb,
+ "tumblr": $fa-var-tumblr,
+ "vaadin": $fa-var-vaadin,
+ "quora": $fa-var-quora,
+ "reacteurope": $fa-var-reacteurope,
+ "medium": $fa-var-medium,
+ "medium-m": $fa-var-medium-m,
+ "amilia": $fa-var-amilia,
+ "mixcloud": $fa-var-mixcloud,
+ "flipboard": $fa-var-flipboard,
+ "viacoin": $fa-var-viacoin,
+ "critical-role": $fa-var-critical-role,
+ "sitrox": $fa-var-sitrox,
+ "discourse": $fa-var-discourse,
+ "joomla": $fa-var-joomla,
+ "mastodon": $fa-var-mastodon,
+ "airbnb": $fa-var-airbnb,
+ "wolf-pack-battalion": $fa-var-wolf-pack-battalion,
+ "buy-n-large": $fa-var-buy-n-large,
+ "gulp": $fa-var-gulp,
+ "creative-commons-sampling-plus": $fa-var-creative-commons-sampling-plus,
+ "strava": $fa-var-strava,
+ "ember": $fa-var-ember,
+ "canadian-maple-leaf": $fa-var-canadian-maple-leaf,
+ "teamspeak": $fa-var-teamspeak,
+ "pushed": $fa-var-pushed,
+ "wordpress-simple": $fa-var-wordpress-simple,
+ "nutritionix": $fa-var-nutritionix,
+ "wodu": $fa-var-wodu,
+ "google-pay": $fa-var-google-pay,
+ "intercom": $fa-var-intercom,
+ "zhihu": $fa-var-zhihu,
+ "korvue": $fa-var-korvue,
+ "pix": $fa-var-pix,
+ "steam-symbol": $fa-var-steam-symbol,
+);
diff --git a/public/vendor/fontawesome/scss/brands.scss b/public/vendor/fontawesome/scss/brands.scss
new file mode 100644
index 0000000000..617535bba8
--- /dev/null
+++ b/public/vendor/fontawesome/scss/brands.scss
@@ -0,0 +1,30 @@
+/*!
+ * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2022 Fonticons, Inc.
+ */
+@import 'functions';
+@import 'variables';
+
+:root, :host {
+ --#{$fa-css-prefix}-style-family-brands: 'Font Awesome 6 Brands';
+ --#{$fa-css-prefix}-font-brands: normal 400 1em/1 'Font Awesome 6 Brands';
+}
+
+@font-face {
+ font-family: 'Font Awesome 6 Brands';
+ font-style: normal;
+ font-weight: 400;
+ font-display: $fa-font-display;
+ src: url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'),
+ url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype');
+}
+
+.fab,
+.#{$fa-css-prefix}-brands {
+ font-weight: 400;
+}
+
+@each $name, $icon in $fa-brand-icons {
+ .#{$fa-css-prefix}-#{$name}:before { content: unquote("\"#{ $icon }\""); }
+}
diff --git a/public/vendor/fontawesome/scss/fontawesome.scss b/public/vendor/fontawesome/scss/fontawesome.scss
new file mode 100644
index 0000000000..c14ee94283
--- /dev/null
+++ b/public/vendor/fontawesome/scss/fontawesome.scss
@@ -0,0 +1,21 @@
+/*!
+ * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2022 Fonticons, Inc.
+ */
+// Font Awesome core compile (Web Fonts-based)
+// -------------------------
+
+@import 'functions';
+@import 'variables';
+@import 'mixins';
+@import 'core';
+@import 'sizing';
+@import 'fixed-width';
+@import 'list';
+@import 'bordered-pulled';
+@import 'animated';
+@import 'rotated-flipped';
+@import 'stacked';
+@import 'icons';
+@import 'screen-reader';
diff --git a/public/vendor/fontawesome/scss/nodebb-shims.scss b/public/vendor/fontawesome/scss/nodebb-shims.scss
new file mode 100644
index 0000000000..8c3bc5230d
--- /dev/null
+++ b/public/vendor/fontawesome/scss/nodebb-shims.scss
@@ -0,0 +1,312 @@
+@import "_variables.scss";
+
+@font-face {
+ font-family: 'FontAwesome';
+ font-style: normal;
+ font-weight: 400;
+ font-display: $fa-font-display;
+ src: url('#{$fa-font-path}/fa-solid-900.woff2');
+ src: url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
+ url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype');
+}
+
+@font-face {
+ font-family: 'FontAwesome';
+ font-style: normal;
+ font-weight: 400;
+ font-display: $fa-font-display;
+ src: url('#{$fa-font-path}/fa-brands-400.woff2');
+ src: url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'),
+ url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype');
+}
+
+@font-face {
+ font-family: 'FontAwesome';
+ font-style: normal;
+ font-weight: 400;
+ font-display: $fa-font-display;
+ src: url('#{$fa-font-path}/fa-regular-400.woff2');
+ src: url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
+ url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype');
+}
+
+
+$fa-var-address-book-o: $fa-var-address-book;
+$fa-var-address-card-o: $fa-var-address-card;
+$fa-var-area-chart: $fa-var-chart-area;
+$fa-var-arrow-circle-o-down: $fa-var-arrow-alt-circle-down;
+$fa-var-arrow-circle-o-left: $fa-var-arrow-alt-circle-left;
+$fa-var-arrow-circle-o-right: $fa-var-arrow-alt-circle-right;
+$fa-var-arrow-circle-o-up: $fa-var-arrow-alt-circle-up;
+$fa-var-arrows: $fa-var-arrows-alt;
+$fa-var-arrows-alt: $fa-var-expand-arrows-alt;
+$fa-var-arrows-h: $fa-var-arrows-alt-h;
+$fa-var-arrows-v: $fa-var-arrows-alt-v;
+$fa-var-asl-interpreting: $fa-var-american-sign-language-interpreting;
+$fa-var-automobile: $fa-var-car;
+$fa-var-bank: $fa-var-university;
+$fa-var-bar-chart: $fa-var-chart-bar;
+$fa-var-bar-chart-o: $fa-var-chart-bar;
+$fa-var-bathtub: $fa-var-bath;
+$fa-var-battery: $fa-var-battery-full;
+$fa-var-battery-0: $fa-var-battery-empty;
+$fa-var-battery-1: $fa-var-battery-quarter;
+$fa-var-battery-2: $fa-var-battery-half;
+$fa-var-battery-3: $fa-var-battery-three-quarters;
+$fa-var-battery-4: $fa-var-battery-full;
+$fa-var-bell-o: $fa-var-bell;
+$fa-var-bell-slash-o: $fa-var-bell-slash;
+$fa-var-bitbucket-square: $fa-var-bitbucket;
+$fa-var-bitcoin: $fa-var-btc;
+$fa-var-bookmark-o: $fa-var-bookmark;
+$fa-var-building-o: $fa-var-building;
+$fa-var-cab: $fa-var-taxi;
+$fa-var-calendar: $fa-var-calendar-alt;
+$fa-var-calendar-check-o: $fa-var-calendar-check;
+$fa-var-calendar-minus-o: $fa-var-calendar-minus;
+$fa-var-calendar-o: $fa-var-calendar;
+$fa-var-calendar-plus-o: $fa-var-calendar-plus;
+$fa-var-calendar-times-o: $fa-var-calendar-times;
+$fa-var-caret-square-o-down: $fa-var-caret-square-down;
+$fa-var-caret-square-o-left: $fa-var-caret-square-left;
+$fa-var-caret-square-o-right: $fa-var-caret-square-right;
+$fa-var-caret-square-o-up: $fa-var-caret-square-up;
+$fa-var-cc: $fa-var-closed-captioning;
+$fa-var-chain: $fa-var-link;
+$fa-var-chain-broken: $fa-var-unlink;
+$fa-var-check-circle-o: $fa-var-check-circle;
+$fa-var-check-square-o: $fa-var-check-square;
+$fa-var-circle-o: $fa-var-circle;
+$fa-var-circle-o-notch: $fa-var-circle-notch;
+$fa-var-circle-thin: $fa-var-circle;
+$fa-var-clock-o: $fa-var-clock;
+$fa-var-close: $fa-var-times;
+$fa-var-cloud-download: $fa-var-cloud-download-alt;
+$fa-var-cloud-upload: $fa-var-cloud-upload-alt;
+$fa-var-cny: $fa-var-yen-sign;
+$fa-var-code-fork: $fa-var-code-branch;
+$fa-var-comment-o: $fa-var-comment;
+$fa-var-commenting: $fa-var-comment-dots;
+$fa-var-commenting-o: $fa-var-comment-dots;
+$fa-var-comments-o: $fa-var-comments;
+$fa-var-credit-card-alt: $fa-var-credit-card;
+$fa-var-cutlery: $fa-var-utensils;
+$fa-var-dashboard: $fa-var-tachometer-alt;
+$fa-var-deafness: $fa-var-deaf;
+$fa-var-dedent: $fa-var-outdent;
+$fa-var-diamond: $fa-var-gem;
+$fa-var-dollar: $fa-var-dollar-sign;
+$fa-var-dot-circle-o: $fa-var-dot-circle;
+$fa-var-drivers-license: $fa-var-id-card;
+$fa-var-drivers-license-o: $fa-var-id-card;
+$fa-var-eercast: $fa-var-sellcast;
+$fa-var-envelope-o: $fa-var-envelope;
+$fa-var-envelope-open-o: $fa-var-envelope-open;
+$fa-var-eur: $fa-var-euro-sign;
+$fa-var-euro: $fa-var-euro-sign;
+$fa-var-exchange: $fa-var-exchange-alt;
+$fa-var-external-link: $fa-var-external-link-alt;
+$fa-var-external-link-square: $fa-var-external-link-square-alt;
+$fa-var-eyedropper: $fa-var-eye-dropper;
+$fa-var-fa: $fa-var-font-awesome;
+$fa-var-facebook: $fa-var-facebook-f;
+$fa-var-facebook-official: $fa-var-facebook;
+$fa-var-feed: $fa-var-rss;
+$fa-var-file-archive-o: $fa-var-file-archive;
+$fa-var-file-audio-o: $fa-var-file-audio;
+$fa-var-file-code-o: $fa-var-file-code;
+$fa-var-file-excel-o: $fa-var-file-excel;
+$fa-var-file-image-o: $fa-var-file-image;
+$fa-var-file-movie-o: $fa-var-file-video;
+$fa-var-file-o: $fa-var-file;
+$fa-var-file-pdf-o: $fa-var-file-pdf;
+$fa-var-file-photo-o: $fa-var-file-image;
+$fa-var-file-picture-o: $fa-var-file-image;
+$fa-var-file-powerpoint-o: $fa-var-file-powerpoint;
+$fa-var-file-sound-o: $fa-var-file-audio;
+$fa-var-file-text: $fa-var-file-alt;
+$fa-var-file-text-o: $fa-var-file-alt;
+$fa-var-file-video-o: $fa-var-file-video;
+$fa-var-file-word-o: $fa-var-file-word;
+$fa-var-file-zip-o: $fa-var-file-archive;
+$fa-var-files-o: $fa-var-copy;
+$fa-var-flag-o: $fa-var-flag;
+$fa-var-flash: $fa-var-bolt;
+$fa-var-floppy-o: $fa-var-save;
+$fa-var-folder-o: $fa-var-folder;
+$fa-var-folder-open-o: $fa-var-folder-open;
+$fa-var-frown-o: $fa-var-frown;
+$fa-var-futbol-o: $fa-var-futbol;
+$fa-var-gbp: $fa-var-pound-sign;
+$fa-var-ge: $fa-var-empire;
+$fa-var-gear: $fa-var-cog;
+$fa-var-gears: $fa-var-cogs;
+$fa-var-gittip: $fa-var-gratipay;
+$fa-var-glass: $fa-var-glass-martini;
+$fa-var-google-plus: $fa-var-google-plus-g;
+$fa-var-google-plus-circle: $fa-var-google-plus;
+$fa-var-google-plus-official: $fa-var-google-plus;
+$fa-var-group: $fa-var-users;
+$fa-var-hand-grab-o: $fa-var-hand-rock;
+$fa-var-hand-lizard-o: $fa-var-hand-lizard;
+$fa-var-hand-o-down: $fa-var-hand-point-down;
+$fa-var-hand-o-left: $fa-var-hand-point-left;
+$fa-var-hand-o-right: $fa-var-hand-point-right;
+$fa-var-hand-o-up: $fa-var-hand-point-up;
+$fa-var-hand-paper-o: $fa-var-hand-paper;
+$fa-var-hand-peace-o: $fa-var-hand-peace;
+$fa-var-hand-pointer-o: $fa-var-hand-pointer;
+$fa-var-hand-rock-o: $fa-var-hand-rock;
+$fa-var-hand-scissors-o: $fa-var-hand-scissors;
+$fa-var-hand-spock-o: $fa-var-hand-spock;
+$fa-var-hand-stop-o: $fa-var-hand-paper;
+$fa-var-handshake-o: $fa-var-handshake;
+$fa-var-hard-of-hearing: $fa-var-deaf;
+$fa-var-hdd-o: $fa-var-hdd;
+$fa-var-header: $fa-var-heading;
+$fa-var-heart-o: $fa-var-heart;
+$fa-var-hospital-o: $fa-var-hospital;
+$fa-var-hotel: $fa-var-bed;
+$fa-var-hourglass-1: $fa-var-hourglass-start;
+$fa-var-hourglass-2: $fa-var-hourglass-half;
+$fa-var-hourglass-3: $fa-var-hourglass-end;
+$fa-var-hourglass-o: $fa-var-hourglass;
+$fa-var-id-card-o: $fa-var-id-card;
+$fa-var-ils: $fa-var-shekel-sign;
+$fa-var-inr: $fa-var-rupee-sign;
+$fa-var-institution: $fa-var-university;
+$fa-var-intersex: $fa-var-transgender;
+$fa-var-jpy: $fa-var-yen-sign;
+$fa-var-keyboard-o: $fa-var-keyboard;
+$fa-var-krw: $fa-var-won-sign;
+$fa-var-legal: $fa-var-gavel;
+$fa-var-lemon-o: $fa-var-lemon;
+$fa-var-level-down: $fa-var-level-down-alt;
+$fa-var-level-up: $fa-var-level-up-alt;
+$fa-var-life-bouy: $fa-var-life-ring;
+$fa-var-life-buoy: $fa-var-life-ring;
+$fa-var-life-saver: $fa-var-life-ring;
+$fa-var-lightbulb-o: $fa-var-lightbulb;
+$fa-var-line-chart: $fa-var-chart-line;
+$fa-var-linkedin: $fa-var-linkedin-in;
+$fa-var-linkedin-square: $fa-var-linkedin;
+$fa-var-long-arrow-down: $fa-var-long-arrow-alt-down;
+$fa-var-long-arrow-left: $fa-var-long-arrow-alt-left;
+$fa-var-long-arrow-right: $fa-var-long-arrow-alt-right;
+$fa-var-long-arrow-up: $fa-var-long-arrow-alt-up;
+$fa-var-mail-forward: $fa-var-share;
+$fa-var-mail-reply: $fa-var-reply;
+$fa-var-mail-reply-all: $fa-var-reply-all;
+$fa-var-map-marker: $fa-var-map-marker-alt;
+$fa-var-map-o: $fa-var-map;
+$fa-var-meanpath: $fa-var-font-awesome;
+$fa-var-meh-o: $fa-var-meh;
+$fa-var-minus-square-o: $fa-var-minus-square;
+$fa-var-mobile: $fa-var-mobile-alt;
+$fa-var-mobile-phone: $fa-var-mobile-alt;
+$fa-var-money: $fa-var-money-bill-alt;
+$fa-var-moon-o: $fa-var-moon;
+$fa-var-mortar-board: $fa-var-graduation-cap;
+$fa-var-navicon: $fa-var-bars;
+$fa-var-newspaper-o: $fa-var-newspaper;
+$fa-var-paper-plane-o: $fa-var-paper-plane;
+$fa-var-paste: $fa-var-clipboard;
+$fa-var-pause-circle-o: $fa-var-pause-circle;
+$fa-var-pencil: $fa-var-pencil-alt;
+$fa-var-pencil-square: $fa-var-pen-square;
+$fa-var-pencil-square-o: $fa-var-edit;
+$fa-var-photo: $fa-var-image;
+$fa-var-picture-o: $fa-var-image;
+$fa-var-pie-chart: $fa-var-chart-pie;
+$fa-var-play-circle-o: $fa-var-play-circle;
+$fa-var-plus-square-o: $fa-var-plus-square;
+$fa-var-question-circle-o: $fa-var-question-circle;
+$fa-var-ra: $fa-var-rebel;
+$fa-var-refresh: $fa-var-sync;
+$fa-var-remove: $fa-var-times;
+$fa-var-reorder: $fa-var-bars;
+$fa-var-repeat: $fa-var-redo;
+$fa-var-resistance: $fa-var-rebel;
+$fa-var-rmb: $fa-var-yen-sign;
+$fa-var-rotate-left: $fa-var-undo;
+$fa-var-rotate-right: $fa-var-redo;
+$fa-var-rouble: $fa-var-ruble-sign;
+$fa-var-rub: $fa-var-ruble-sign;
+$fa-var-ruble: $fa-var-ruble-sign;
+$fa-var-rupee: $fa-var-rupee-sign;
+$fa-var-s15: $fa-var-bath;
+$fa-var-scissors: $fa-var-cut;
+$fa-var-send: $fa-var-paper-plane;
+$fa-var-send-o: $fa-var-paper-plane;
+$fa-var-share-square-o: $fa-var-share-square;
+$fa-var-shekel: $fa-var-shekel-sign;
+$fa-var-sheqel: $fa-var-shekel-sign;
+$fa-var-shield: $fa-var-shield-alt;
+$fa-var-sign-in: $fa-var-sign-in-alt;
+$fa-var-sign-out: $fa-var-sign-out-alt;
+$fa-var-signing: $fa-var-sign-language;
+$fa-var-sliders: $fa-var-sliders-h;
+$fa-var-smile-o: $fa-var-smile;
+$fa-var-snowflake-o: $fa-var-snowflake;
+$fa-var-soccer-ball-o: $fa-var-futbol;
+$fa-var-sort-alpha-asc: $fa-var-sort-alpha-down;
+$fa-var-sort-alpha-desc: $fa-var-sort-alpha-up;
+$fa-var-sort-amount-asc: $fa-var-sort-amount-down;
+$fa-var-sort-amount-desc: $fa-var-sort-amount-up;
+$fa-var-sort-asc: $fa-var-sort-up;
+$fa-var-sort-desc: $fa-var-sort-down;
+$fa-var-sort-numeric-asc: $fa-var-sort-numeric-down;
+$fa-var-sort-numeric-desc: $fa-var-sort-numeric-up;
+$fa-var-spoon: $fa-var-utensil-spoon;
+$fa-var-square-o: $fa-var-square;
+$fa-var-star-half-empty: $fa-var-star-half;
+$fa-var-star-half-full: $fa-var-star-half;
+$fa-var-star-half-o: $fa-var-star-half;
+$fa-var-star-o: $fa-var-star;
+$fa-var-sticky-note-o: $fa-var-sticky-note;
+$fa-var-stop-circle-o: $fa-var-stop-circle;
+$fa-var-sun-o: $fa-var-sun;
+$fa-var-support: $fa-var-life-ring;
+$fa-var-tablet: $fa-var-tablet-alt;
+$fa-var-tachometer: $fa-var-tachometer-alt;
+$fa-var-television: $fa-var-tv;
+$fa-var-thermometer: $fa-var-thermometer-full;
+$fa-var-thermometer-0: $fa-var-thermometer-empty;
+$fa-var-thermometer-1: $fa-var-thermometer-quarter;
+$fa-var-thermometer-2: $fa-var-thermometer-half;
+$fa-var-thermometer-3: $fa-var-thermometer-three-quarters;
+$fa-var-thermometer-4: $fa-var-thermometer-full;
+$fa-var-thumb-tack: $fa-var-thumbtack;
+$fa-var-thumbs-o-down: $fa-var-thumbs-down;
+$fa-var-thumbs-o-up: $fa-var-thumbs-up;
+$fa-var-ticket: $fa-var-ticket-alt;
+$fa-var-times-circle-o: $fa-var-times-circle;
+$fa-var-times-rectangle: $fa-var-window-close;
+$fa-var-times-rectangle-o: $fa-var-window-close;
+$fa-var-toggle-down: $fa-var-caret-square-down;
+$fa-var-toggle-left: $fa-var-caret-square-left;
+$fa-var-toggle-right: $fa-var-caret-square-right;
+$fa-var-toggle-up: $fa-var-caret-square-up;
+$fa-var-trash: $fa-var-trash-alt;
+$fa-var-trash-o: $fa-var-trash-alt;
+$fa-var-try: $fa-var-lira-sign;
+$fa-var-turkish-lira: $fa-var-lira-sign;
+$fa-var-unsorted: $fa-var-sort;
+$fa-var-usd: $fa-var-dollar-sign;
+$fa-var-user-circle-o: $fa-var-user-circle;
+$fa-var-user-o: $fa-var-user;
+$fa-var-vcard: $fa-var-address-card;
+$fa-var-vcard-o: $fa-var-address-card;
+$fa-var-video-camera: $fa-var-video;
+$fa-var-vimeo: $fa-var-vimeo-v;
+$fa-var-volume-control-phone: $fa-var-phone-volume;
+$fa-var-warning: $fa-var-exclamation-triangle;
+$fa-var-wechat: $fa-var-weixin;
+$fa-var-wheelchair-alt: $fa-var-accessible-icon;
+$fa-var-window-close-o: $fa-var-window-close;
+$fa-var-won: $fa-var-won-sign;
+$fa-var-y-combinator-square: $fa-var-hacker-news;
+$fa-var-yc: $fa-var-y-combinator;
+$fa-var-yc-square: $fa-var-hacker-news;
+$fa-var-yen: $fa-var-yen-sign;
+$fa-var-youtube-play: $fa-var-youtube;
diff --git a/public/vendor/fontawesome/scss/regular.scss b/public/vendor/fontawesome/scss/regular.scss
new file mode 100644
index 0000000000..0985c48df0
--- /dev/null
+++ b/public/vendor/fontawesome/scss/regular.scss
@@ -0,0 +1,26 @@
+/*!
+ * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2022 Fonticons, Inc.
+ */
+@import 'functions';
+@import 'variables';
+
+:root, :host {
+ --#{$fa-css-prefix}-style-family-classic: '#{ $fa-style-family }';
+ --#{$fa-css-prefix}-font-regular: normal 400 1em/1 '#{ $fa-style-family }';
+}
+
+@font-face {
+ font-family: 'Font Awesome 6 Free';
+ font-style: normal;
+ font-weight: 400;
+ font-display: $fa-font-display;
+ src: url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
+ url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype');
+}
+
+.far,
+.#{$fa-css-prefix}-regular {
+ font-weight: 400;
+}
diff --git a/public/vendor/fontawesome/scss/solid.scss b/public/vendor/fontawesome/scss/solid.scss
new file mode 100644
index 0000000000..9b90120033
--- /dev/null
+++ b/public/vendor/fontawesome/scss/solid.scss
@@ -0,0 +1,26 @@
+/*!
+ * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2022 Fonticons, Inc.
+ */
+@import 'functions';
+@import 'variables';
+
+:root, :host {
+ --#{$fa-css-prefix}-style-family-classic: '#{ $fa-style-family }';
+ --#{$fa-css-prefix}-font-solid: normal 900 1em/1 '#{ $fa-style-family }';
+}
+
+@font-face {
+ font-family: 'Font Awesome 6 Free';
+ font-style: normal;
+ font-weight: 900;
+ font-display: $fa-font-display;
+ src: url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
+ url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype');
+}
+
+.fas,
+.#{$fa-css-prefix}-solid {
+ font-weight: 900;
+}
diff --git a/public/vendor/fontawesome/scss/v4-shims.scss b/public/vendor/fontawesome/scss/v4-shims.scss
new file mode 100644
index 0000000000..2e267770a9
--- /dev/null
+++ b/public/vendor/fontawesome/scss/v4-shims.scss
@@ -0,0 +1,11 @@
+/*!
+ * Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2022 Fonticons, Inc.
+ */
+// V4 shims compile (Web Fonts-based)
+// -------------------------
+
+@import 'functions';
+@import 'variables';
+@import 'shims';
diff --git a/public/vendor/fontawesome/webfonts/6.2.0/fa-brands-400.ttf b/public/vendor/fontawesome/webfonts/6.2.0/fa-brands-400.ttf
new file mode 100644
index 0000000000..502f3621e7
Binary files /dev/null and b/public/vendor/fontawesome/webfonts/6.2.0/fa-brands-400.ttf differ
diff --git a/public/vendor/fontawesome/webfonts/6.2.0/fa-brands-400.woff2 b/public/vendor/fontawesome/webfonts/6.2.0/fa-brands-400.woff2
new file mode 100644
index 0000000000..d801b51f66
Binary files /dev/null and b/public/vendor/fontawesome/webfonts/6.2.0/fa-brands-400.woff2 differ
diff --git a/public/vendor/fontawesome/webfonts/6.2.0/fa-regular-400.ttf b/public/vendor/fontawesome/webfonts/6.2.0/fa-regular-400.ttf
new file mode 100644
index 0000000000..e0abe2710f
Binary files /dev/null and b/public/vendor/fontawesome/webfonts/6.2.0/fa-regular-400.ttf differ
diff --git a/public/vendor/fontawesome/webfonts/6.2.0/fa-regular-400.woff2 b/public/vendor/fontawesome/webfonts/6.2.0/fa-regular-400.woff2
new file mode 100644
index 0000000000..d736e4b24c
Binary files /dev/null and b/public/vendor/fontawesome/webfonts/6.2.0/fa-regular-400.woff2 differ
diff --git a/public/vendor/fontawesome/webfonts/6.2.0/fa-solid-900.ttf b/public/vendor/fontawesome/webfonts/6.2.0/fa-solid-900.ttf
new file mode 100644
index 0000000000..13c9489771
Binary files /dev/null and b/public/vendor/fontawesome/webfonts/6.2.0/fa-solid-900.ttf differ
diff --git a/public/vendor/fontawesome/webfonts/6.2.0/fa-solid-900.woff2 b/public/vendor/fontawesome/webfonts/6.2.0/fa-solid-900.woff2
new file mode 100644
index 0000000000..3516fdbe33
Binary files /dev/null and b/public/vendor/fontawesome/webfonts/6.2.0/fa-solid-900.woff2 differ
diff --git a/public/vendor/fontawesome/webfonts/6.2.0/fa-v4compatibility.ttf b/public/vendor/fontawesome/webfonts/6.2.0/fa-v4compatibility.ttf
new file mode 100644
index 0000000000..dc2981941d
Binary files /dev/null and b/public/vendor/fontawesome/webfonts/6.2.0/fa-v4compatibility.ttf differ
diff --git a/public/vendor/fontawesome/webfonts/6.2.0/fa-v4compatibility.woff2 b/public/vendor/fontawesome/webfonts/6.2.0/fa-v4compatibility.woff2
new file mode 100644
index 0000000000..28d46b15ac
Binary files /dev/null and b/public/vendor/fontawesome/webfonts/6.2.0/fa-v4compatibility.woff2 differ
diff --git a/public/vendor/fontawesome/webfonts/fa-brands-400.eot b/public/vendor/fontawesome/webfonts/fa-brands-400.eot
deleted file mode 100644
index d05ea581fb..0000000000
Binary files a/public/vendor/fontawesome/webfonts/fa-brands-400.eot and /dev/null differ
diff --git a/public/vendor/fontawesome/webfonts/fa-brands-400.svg b/public/vendor/fontawesome/webfonts/fa-brands-400.svg
deleted file mode 100644
index 4e48a46697..0000000000
--- a/public/vendor/fontawesome/webfonts/fa-brands-400.svg
+++ /dev/null
@@ -1,3717 +0,0 @@
-
-
-
-
-Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021
- By Robert Madole
-Copyright (c) Font Awesome
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/public/vendor/fontawesome/webfonts/fa-brands-400.ttf b/public/vendor/fontawesome/webfonts/fa-brands-400.ttf
deleted file mode 100644
index fc567cd2f1..0000000000
Binary files a/public/vendor/fontawesome/webfonts/fa-brands-400.ttf and /dev/null differ
diff --git a/public/vendor/fontawesome/webfonts/fa-brands-400.woff b/public/vendor/fontawesome/webfonts/fa-brands-400.woff
deleted file mode 100644
index db70e73e47..0000000000
Binary files a/public/vendor/fontawesome/webfonts/fa-brands-400.woff and /dev/null differ
diff --git a/public/vendor/fontawesome/webfonts/fa-brands-400.woff2 b/public/vendor/fontawesome/webfonts/fa-brands-400.woff2
deleted file mode 100644
index b8a8f656e1..0000000000
Binary files a/public/vendor/fontawesome/webfonts/fa-brands-400.woff2 and /dev/null differ
diff --git a/public/vendor/fontawesome/webfonts/fa-regular-400.eot b/public/vendor/fontawesome/webfonts/fa-regular-400.eot
deleted file mode 100644
index fae180dacc..0000000000
Binary files a/public/vendor/fontawesome/webfonts/fa-regular-400.eot and /dev/null differ
diff --git a/public/vendor/fontawesome/webfonts/fa-regular-400.svg b/public/vendor/fontawesome/webfonts/fa-regular-400.svg
deleted file mode 100644
index 9dba8c340b..0000000000
--- a/public/vendor/fontawesome/webfonts/fa-regular-400.svg
+++ /dev/null
@@ -1,801 +0,0 @@
-
-
-
-
-Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021
- By Robert Madole
-Copyright (c) Font Awesome
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/public/vendor/fontawesome/webfonts/fa-regular-400.ttf b/public/vendor/fontawesome/webfonts/fa-regular-400.ttf
deleted file mode 100644
index d1ac9ba116..0000000000
Binary files a/public/vendor/fontawesome/webfonts/fa-regular-400.ttf and /dev/null differ
diff --git a/public/vendor/fontawesome/webfonts/fa-regular-400.woff b/public/vendor/fontawesome/webfonts/fa-regular-400.woff
deleted file mode 100644
index e9f54b13d5..0000000000
Binary files a/public/vendor/fontawesome/webfonts/fa-regular-400.woff and /dev/null differ
diff --git a/public/vendor/fontawesome/webfonts/fa-regular-400.woff2 b/public/vendor/fontawesome/webfonts/fa-regular-400.woff2
deleted file mode 100644
index 9df490e8cf..0000000000
Binary files a/public/vendor/fontawesome/webfonts/fa-regular-400.woff2 and /dev/null differ
diff --git a/public/vendor/fontawesome/webfonts/fa-solid-900.eot b/public/vendor/fontawesome/webfonts/fa-solid-900.eot
deleted file mode 100644
index afe315244f..0000000000
Binary files a/public/vendor/fontawesome/webfonts/fa-solid-900.eot and /dev/null differ
diff --git a/public/vendor/fontawesome/webfonts/fa-solid-900.svg b/public/vendor/fontawesome/webfonts/fa-solid-900.svg
deleted file mode 100644
index dce459d0e5..0000000000
--- a/public/vendor/fontawesome/webfonts/fa-solid-900.svg
+++ /dev/null
@@ -1,5034 +0,0 @@
-
-
-
-
-Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021
- By Robert Madole
-Copyright (c) Font Awesome
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/public/vendor/fontawesome/webfonts/fa-solid-900.ttf b/public/vendor/fontawesome/webfonts/fa-solid-900.ttf
deleted file mode 100644
index f33e816299..0000000000
Binary files a/public/vendor/fontawesome/webfonts/fa-solid-900.ttf and /dev/null differ
diff --git a/public/vendor/fontawesome/webfonts/fa-solid-900.woff b/public/vendor/fontawesome/webfonts/fa-solid-900.woff
deleted file mode 100644
index 73c1a4d5d1..0000000000
Binary files a/public/vendor/fontawesome/webfonts/fa-solid-900.woff and /dev/null differ
diff --git a/public/vendor/fontawesome/webfonts/fa-solid-900.woff2 b/public/vendor/fontawesome/webfonts/fa-solid-900.woff2
deleted file mode 100644
index dc52d954d8..0000000000
Binary files a/public/vendor/fontawesome/webfonts/fa-solid-900.woff2 and /dev/null differ
diff --git a/public/vendor/mdl/material.css b/public/vendor/mdl/material.css
deleted file mode 100644
index 74b6b7b71f..0000000000
--- a/public/vendor/mdl/material.css
+++ /dev/null
@@ -1,11476 +0,0 @@
-/**
- * material-design-lite - Material Design Components in CSS, JS and HTML
- * @version v1.3.0
- * @license Apache-2.0
- * @copyright 2015 Google, Inc.
- * @link https://github.com/google/material-design-lite
- */
-@charset "UTF-8";
-/**
- * Copyright 2015 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.
- */
-/* Material Design Lite */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/*
- * 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: rgba(0,0,0, 0.87);
- font-size: 1em;
- line-height: 1.4; }*/
-
-/*
- * Remove text-shadow in selection highlight:
- * https://twitter.com/miketaylr/status/12228805301
- *
- * These selection rule sets have to be separate.
- * 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; }
-
-/* ==========================================================================
- Browser Upgrade Prompt
- ========================================================================== */
-.browserupgrade {
- margin: 0.2em 0;
- background: #ccc;
- color: #000;
- padding: 0.2em 0; }
-
-/* ==========================================================================
- Author's custom styles
- ========================================================================== */
-/* ==========================================================================
- Helper classes
- ========================================================================== */
-/*
- * Hide visually and from screen readers:
- */
-.hidden {
- display: none !important; }
-
-/*
- * Hide only visually, but have it available for screen readers:
- * http://snook.ca/archives/html_and_css/hiding-content-for-accessibility
- */
-.visuallyhidden {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px; }
-
-/*
- * Extends the .visuallyhidden class to allow the element
- * to be focusable when navigated to via the keyboard:
- * https://www.drupal.org/node/897638
- */
-.visuallyhidden.focusable:active,
-.visuallyhidden.focusable:focus {
- clip: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- position: static;
- 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: " ";
- /* 1 */
- display: table;
- /* 2 */ }
-
-.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:
- http://www.phpied.com/delay-loading-your-print-css/
- ========================================================================== */
-@media print {
- *,
- *:before,
- *:after,
- *:first-letter {
- background: transparent !important;
- color: #000 !important;
- /* Black prints faster: http://www.sanbeiji.com/archives/953 */
- box-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,
- blockquote {
- border: 1px solid #999;
- page-break-inside: avoid; }
- /*
- * Printing Tables:
- * http://css-discuss.incutio.com/wiki/Printing_Tables
- */
- thead {
- display: table-header-group; }
- tr,
- img {
- page-break-inside: avoid; }
- img {
- max-width: 100% !important; }
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3; }
- h2,
- h3 {
- page-break-after: avoid; } }
-
-/**
- * Copyright 2015 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.
- */
-/* Remove the unwanted box around FAB buttons */
-/* More info: http://goo.gl/IPwKi */
-a, .mdl-accordion, .mdl-button, .mdl-card, .mdl-checkbox, .mdl-dropdown-menu,
-.mdl-icon-toggle, .mdl-item, .mdl-radio, .mdl-slider, .mdl-switch, .mdl-tabs__tab {
- -webkit-tap-highlight-color: transparent;
- -webkit-tap-highlight-color: rgba(255, 255, 255, 0); }
-
-/*
- * Make html take up the entire screen
- * Then set touch-action to avoid touch delay on mobile IE
- */
-html {
- width: 100%;
- height: 100%;
- -ms-touch-action: manipulation;
- touch-action: manipulation; }
-
-/*
-* Make body take up the entire screen
-* Remove body margin so layout containers don't cause extra overflow.
-*/
-body {
- width: 100%;
- min-height: 100%;
- margin: 0; }
-
-/*
- * Main display reset for IE support.
- * Source: http://weblog.west-wind.com/posts/2015/Jan/12/main-HTML5-Tag-not-working-in-Internet-Explorer-91011
- */
-main {
- display: block; }
-
-/*
-* Apply no display to elements with the hidden attribute.
-* IE 9 and 10 support.
-*/
-*[hidden] {
- display: none !important; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-/*html, body {
- font-family: "Helvetica", "Arial", sans-serif;
- font-size: 14px;
- font-weight: 400;
- line-height: 20px; }
-
-h1, h2, h3, h4, h5, h6, p {
- margin: 0;
- padding: 0; }*/
-
-/**
- * Styles for HTML elements
- */
-/*h1 small, h2 small, h3 small, h4 small, h5 small, h6 small {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 56px;
- font-weight: 400;
- line-height: 1.35;
- letter-spacing: -0.02em;
- opacity: 0.54;
- font-size: 0.6em; }
-
-h1 {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 56px;
- font-weight: 400;
- line-height: 1.35;
- letter-spacing: -0.02em;
- margin-top: 24px;
- margin-bottom: 24px; }
-
-h2 {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 45px;
- font-weight: 400;
- line-height: 48px;
- margin-top: 24px;
- margin-bottom: 24px; }
-
-h3 {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 34px;
- font-weight: 400;
- line-height: 40px;
- margin-top: 24px;
- margin-bottom: 24px; }
-
-h4 {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 24px;
- font-weight: 400;
- line-height: 32px;
- -moz-osx-font-smoothing: grayscale;
- margin-top: 24px;
- margin-bottom: 16px; }
-
-h5 {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 20px;
- font-weight: 500;
- line-height: 1;
- letter-spacing: 0.02em;
- margin-top: 24px;
- margin-bottom: 16px; }
-
-h6 {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 16px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0.04em;
- margin-top: 24px;
- margin-bottom: 16px; }
-
-p {
- font-size: 14px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0;
- margin-bottom: 16px; }
-
-a {
- color: rgb(255,64,129);
- font-weight: 500; }
-
-blockquote {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- position: relative;
- font-size: 24px;
- font-weight: 300;
- font-style: italic;
- line-height: 1.35;
- letter-spacing: 0.08em; }
- blockquote:before {
- position: absolute;
- left: -0.5em;
- content: '“'; }
- blockquote:after {
- content: '”';
- margin-left: -0.05em; }
-
-mark {
- background-color: #f4ff81; }
-
-dt {
- font-weight: 700; }
-
-address {
- font-size: 12px;
- font-weight: 400;
- line-height: 1;
- letter-spacing: 0;
- font-style: normal; }
-
-ul, ol {
- font-size: 14px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0; }*/
-
-/**
- * Class Name Styles
- */
-.mdl-typography--display-4 {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 112px;
- font-weight: 300;
- line-height: 1;
- letter-spacing: -0.04em; }
-
-.mdl-typography--display-4-color-contrast {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 112px;
- font-weight: 300;
- line-height: 1;
- letter-spacing: -0.04em;
- opacity: 0.54; }
-
-.mdl-typography--display-3 {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 56px;
- font-weight: 400;
- line-height: 1.35;
- letter-spacing: -0.02em; }
-
-.mdl-typography--display-3-color-contrast {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 56px;
- font-weight: 400;
- line-height: 1.35;
- letter-spacing: -0.02em;
- opacity: 0.54; }
-
-.mdl-typography--display-2 {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 45px;
- font-weight: 400;
- line-height: 48px; }
-
-.mdl-typography--display-2-color-contrast {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 45px;
- font-weight: 400;
- line-height: 48px;
- opacity: 0.54; }
-
-.mdl-typography--display-1 {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 34px;
- font-weight: 400;
- line-height: 40px; }
-
-.mdl-typography--display-1-color-contrast {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 34px;
- font-weight: 400;
- line-height: 40px;
- opacity: 0.54; }
-
-.mdl-typography--headline {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 24px;
- font-weight: 400;
- line-height: 32px;
- -moz-osx-font-smoothing: grayscale; }
-
-.mdl-typography--headline-color-contrast {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 24px;
- font-weight: 400;
- line-height: 32px;
- -moz-osx-font-smoothing: grayscale;
- opacity: 0.87; }
-
-.mdl-typography--title {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 20px;
- font-weight: 500;
- line-height: 1;
- letter-spacing: 0.02em; }
-
-.mdl-typography--title-color-contrast {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 20px;
- font-weight: 500;
- line-height: 1;
- letter-spacing: 0.02em;
- opacity: 0.87; }
-
-.mdl-typography--subhead {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 16px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0.04em; }
-
-.mdl-typography--subhead-color-contrast {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 16px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0.04em;
- opacity: 0.87; }
-
-.mdl-typography--body-2 {
- font-size: 14px;
- font-weight: bold;
- line-height: 24px;
- letter-spacing: 0; }
-
-.mdl-typography--body-2-color-contrast {
- font-size: 14px;
- font-weight: bold;
- line-height: 24px;
- letter-spacing: 0;
- opacity: 0.87; }
-
-.mdl-typography--body-1 {
- font-size: 14px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0; }
-
-.mdl-typography--body-1-color-contrast {
- font-size: 14px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0;
- opacity: 0.87; }
-
-.mdl-typography--body-2-force-preferred-font {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 14px;
- font-weight: 500;
- line-height: 24px;
- letter-spacing: 0; }
-
-.mdl-typography--body-2-force-preferred-font-color-contrast {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 14px;
- font-weight: 500;
- line-height: 24px;
- letter-spacing: 0;
- opacity: 0.87; }
-
-.mdl-typography--body-1-force-preferred-font {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 14px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0; }
-
-.mdl-typography--body-1-force-preferred-font-color-contrast {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 14px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0;
- opacity: 0.87; }
-
-.mdl-typography--caption {
- font-size: 12px;
- font-weight: 400;
- line-height: 1;
- letter-spacing: 0; }
-
-.mdl-typography--caption-force-preferred-font {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 12px;
- font-weight: 400;
- line-height: 1;
- letter-spacing: 0; }
-
-.mdl-typography--caption-color-contrast {
- font-size: 12px;
- font-weight: 400;
- line-height: 1;
- letter-spacing: 0;
- opacity: 0.54; }
-
-.mdl-typography--caption-force-preferred-font-color-contrast {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 12px;
- font-weight: 400;
- line-height: 1;
- letter-spacing: 0;
- opacity: 0.54; }
-
-.mdl-typography--menu {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 14px;
- font-weight: 500;
- line-height: 1;
- letter-spacing: 0; }
-
-.mdl-typography--menu-color-contrast {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 14px;
- font-weight: 500;
- line-height: 1;
- letter-spacing: 0;
- opacity: 0.87; }
-
-.mdl-typography--button {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 14px;
- font-weight: 500;
- text-transform: uppercase;
- line-height: 1;
- letter-spacing: 0; }
-
-.mdl-typography--button-color-contrast {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 14px;
- font-weight: 500;
- text-transform: uppercase;
- line-height: 1;
- letter-spacing: 0;
- opacity: 0.87; }
-
-.mdl-typography--text-left {
- text-align: left; }
-
-.mdl-typography--text-right {
- text-align: right; }
-
-.mdl-typography--text-center {
- text-align: center; }
-
-.mdl-typography--text-justify {
- text-align: justify; }
-
-.mdl-typography--text-nowrap {
- white-space: nowrap; }
-
-.mdl-typography--text-lowercase {
- text-transform: lowercase; }
-
-.mdl-typography--text-uppercase {
- text-transform: uppercase; }
-
-.mdl-typography--text-capitalize {
- text-transform: capitalize; }
-
-.mdl-typography--font-thin {
- font-weight: 200 !important; }
-
-.mdl-typography--font-light {
- font-weight: 300 !important; }
-
-.mdl-typography--font-regular {
- font-weight: 400 !important; }
-
-.mdl-typography--font-medium {
- font-weight: 500 !important; }
-
-.mdl-typography--font-bold {
- font-weight: 700 !important; }
-
-.mdl-typography--font-black {
- font-weight: 900 !important; }
-
-.material-icons {
- font-family: 'Material Icons';
- font-weight: normal;
- font-style: normal;
- font-size: 24px;
- line-height: 1;
- letter-spacing: normal;
- text-transform: none;
- display: inline-block;
- word-wrap: normal;
- -moz-font-feature-settings: 'liga';
- font-feature-settings: 'liga';
- -webkit-font-feature-settings: 'liga';
- -webkit-font-smoothing: antialiased; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-.mdl-color-text--red {
- color: rgb(244,67,54) !important; }
-
-.mdl-color--red {
- background-color: rgb(244,67,54) !important; }
-
-.mdl-color-text--red-50 {
- color: rgb(255,235,238) !important; }
-
-.mdl-color--red-50 {
- background-color: rgb(255,235,238) !important; }
-
-.mdl-color-text--red-100 {
- color: rgb(255,205,210) !important; }
-
-.mdl-color--red-100 {
- background-color: rgb(255,205,210) !important; }
-
-.mdl-color-text--red-200 {
- color: rgb(239,154,154) !important; }
-
-.mdl-color--red-200 {
- background-color: rgb(239,154,154) !important; }
-
-.mdl-color-text--red-300 {
- color: rgb(229,115,115) !important; }
-
-.mdl-color--red-300 {
- background-color: rgb(229,115,115) !important; }
-
-.mdl-color-text--red-400 {
- color: rgb(239,83,80) !important; }
-
-.mdl-color--red-400 {
- background-color: rgb(239,83,80) !important; }
-
-.mdl-color-text--red-500 {
- color: rgb(244,67,54) !important; }
-
-.mdl-color--red-500 {
- background-color: rgb(244,67,54) !important; }
-
-.mdl-color-text--red-600 {
- color: rgb(229,57,53) !important; }
-
-.mdl-color--red-600 {
- background-color: rgb(229,57,53) !important; }
-
-.mdl-color-text--red-700 {
- color: rgb(211,47,47) !important; }
-
-.mdl-color--red-700 {
- background-color: rgb(211,47,47) !important; }
-
-.mdl-color-text--red-800 {
- color: rgb(198,40,40) !important; }
-
-.mdl-color--red-800 {
- background-color: rgb(198,40,40) !important; }
-
-.mdl-color-text--red-900 {
- color: rgb(183,28,28) !important; }
-
-.mdl-color--red-900 {
- background-color: rgb(183,28,28) !important; }
-
-.mdl-color-text--red-A100 {
- color: rgb(255,138,128) !important; }
-
-.mdl-color--red-A100 {
- background-color: rgb(255,138,128) !important; }
-
-.mdl-color-text--red-A200 {
- color: rgb(255,82,82) !important; }
-
-.mdl-color--red-A200 {
- background-color: rgb(255,82,82) !important; }
-
-.mdl-color-text--red-A400 {
- color: rgb(255,23,68) !important; }
-
-.mdl-color--red-A400 {
- background-color: rgb(255,23,68) !important; }
-
-.mdl-color-text--red-A700 {
- color: rgb(213,0,0) !important; }
-
-.mdl-color--red-A700 {
- background-color: rgb(213,0,0) !important; }
-
-.mdl-color-text--pink {
- color: rgb(233,30,99) !important; }
-
-.mdl-color--pink {
- background-color: rgb(233,30,99) !important; }
-
-.mdl-color-text--pink-50 {
- color: rgb(252,228,236) !important; }
-
-.mdl-color--pink-50 {
- background-color: rgb(252,228,236) !important; }
-
-.mdl-color-text--pink-100 {
- color: rgb(248,187,208) !important; }
-
-.mdl-color--pink-100 {
- background-color: rgb(248,187,208) !important; }
-
-.mdl-color-text--pink-200 {
- color: rgb(244,143,177) !important; }
-
-.mdl-color--pink-200 {
- background-color: rgb(244,143,177) !important; }
-
-.mdl-color-text--pink-300 {
- color: rgb(240,98,146) !important; }
-
-.mdl-color--pink-300 {
- background-color: rgb(240,98,146) !important; }
-
-.mdl-color-text--pink-400 {
- color: rgb(236,64,122) !important; }
-
-.mdl-color--pink-400 {
- background-color: rgb(236,64,122) !important; }
-
-.mdl-color-text--pink-500 {
- color: rgb(233,30,99) !important; }
-
-.mdl-color--pink-500 {
- background-color: rgb(233,30,99) !important; }
-
-.mdl-color-text--pink-600 {
- color: rgb(216,27,96) !important; }
-
-.mdl-color--pink-600 {
- background-color: rgb(216,27,96) !important; }
-
-.mdl-color-text--pink-700 {
- color: rgb(194,24,91) !important; }
-
-.mdl-color--pink-700 {
- background-color: rgb(194,24,91) !important; }
-
-.mdl-color-text--pink-800 {
- color: rgb(173,20,87) !important; }
-
-.mdl-color--pink-800 {
- background-color: rgb(173,20,87) !important; }
-
-.mdl-color-text--pink-900 {
- color: rgb(136,14,79) !important; }
-
-.mdl-color--pink-900 {
- background-color: rgb(136,14,79) !important; }
-
-.mdl-color-text--pink-A100 {
- color: rgb(255,128,171) !important; }
-
-.mdl-color--pink-A100 {
- background-color: rgb(255,128,171) !important; }
-
-.mdl-color-text--pink-A200 {
- color: rgb(255,64,129) !important; }
-
-.mdl-color--pink-A200 {
- background-color: rgb(255,64,129) !important; }
-
-.mdl-color-text--pink-A400 {
- color: rgb(245,0,87) !important; }
-
-.mdl-color--pink-A400 {
- background-color: rgb(245,0,87) !important; }
-
-.mdl-color-text--pink-A700 {
- color: rgb(197,17,98) !important; }
-
-.mdl-color--pink-A700 {
- background-color: rgb(197,17,98) !important; }
-
-.mdl-color-text--purple {
- color: rgb(156,39,176) !important; }
-
-.mdl-color--purple {
- background-color: rgb(156,39,176) !important; }
-
-.mdl-color-text--purple-50 {
- color: rgb(243,229,245) !important; }
-
-.mdl-color--purple-50 {
- background-color: rgb(243,229,245) !important; }
-
-.mdl-color-text--purple-100 {
- color: rgb(225,190,231) !important; }
-
-.mdl-color--purple-100 {
- background-color: rgb(225,190,231) !important; }
-
-.mdl-color-text--purple-200 {
- color: rgb(206,147,216) !important; }
-
-.mdl-color--purple-200 {
- background-color: rgb(206,147,216) !important; }
-
-.mdl-color-text--purple-300 {
- color: rgb(186,104,200) !important; }
-
-.mdl-color--purple-300 {
- background-color: rgb(186,104,200) !important; }
-
-.mdl-color-text--purple-400 {
- color: rgb(171,71,188) !important; }
-
-.mdl-color--purple-400 {
- background-color: rgb(171,71,188) !important; }
-
-.mdl-color-text--purple-500 {
- color: rgb(156,39,176) !important; }
-
-.mdl-color--purple-500 {
- background-color: rgb(156,39,176) !important; }
-
-.mdl-color-text--purple-600 {
- color: rgb(142,36,170) !important; }
-
-.mdl-color--purple-600 {
- background-color: rgb(142,36,170) !important; }
-
-.mdl-color-text--purple-700 {
- color: rgb(123,31,162) !important; }
-
-.mdl-color--purple-700 {
- background-color: rgb(123,31,162) !important; }
-
-.mdl-color-text--purple-800 {
- color: rgb(106,27,154) !important; }
-
-.mdl-color--purple-800 {
- background-color: rgb(106,27,154) !important; }
-
-.mdl-color-text--purple-900 {
- color: rgb(74,20,140) !important; }
-
-.mdl-color--purple-900 {
- background-color: rgb(74,20,140) !important; }
-
-.mdl-color-text--purple-A100 {
- color: rgb(234,128,252) !important; }
-
-.mdl-color--purple-A100 {
- background-color: rgb(234,128,252) !important; }
-
-.mdl-color-text--purple-A200 {
- color: rgb(224,64,251) !important; }
-
-.mdl-color--purple-A200 {
- background-color: rgb(224,64,251) !important; }
-
-.mdl-color-text--purple-A400 {
- color: rgb(213,0,249) !important; }
-
-.mdl-color--purple-A400 {
- background-color: rgb(213,0,249) !important; }
-
-.mdl-color-text--purple-A700 {
- color: rgb(170,0,255) !important; }
-
-.mdl-color--purple-A700 {
- background-color: rgb(170,0,255) !important; }
-
-.mdl-color-text--deep-purple {
- color: rgb(103,58,183) !important; }
-
-.mdl-color--deep-purple {
- background-color: rgb(103,58,183) !important; }
-
-.mdl-color-text--deep-purple-50 {
- color: rgb(237,231,246) !important; }
-
-.mdl-color--deep-purple-50 {
- background-color: rgb(237,231,246) !important; }
-
-.mdl-color-text--deep-purple-100 {
- color: rgb(209,196,233) !important; }
-
-.mdl-color--deep-purple-100 {
- background-color: rgb(209,196,233) !important; }
-
-.mdl-color-text--deep-purple-200 {
- color: rgb(179,157,219) !important; }
-
-.mdl-color--deep-purple-200 {
- background-color: rgb(179,157,219) !important; }
-
-.mdl-color-text--deep-purple-300 {
- color: rgb(149,117,205) !important; }
-
-.mdl-color--deep-purple-300 {
- background-color: rgb(149,117,205) !important; }
-
-.mdl-color-text--deep-purple-400 {
- color: rgb(126,87,194) !important; }
-
-.mdl-color--deep-purple-400 {
- background-color: rgb(126,87,194) !important; }
-
-.mdl-color-text--deep-purple-500 {
- color: rgb(103,58,183) !important; }
-
-.mdl-color--deep-purple-500 {
- background-color: rgb(103,58,183) !important; }
-
-.mdl-color-text--deep-purple-600 {
- color: rgb(94,53,177) !important; }
-
-.mdl-color--deep-purple-600 {
- background-color: rgb(94,53,177) !important; }
-
-.mdl-color-text--deep-purple-700 {
- color: rgb(81,45,168) !important; }
-
-.mdl-color--deep-purple-700 {
- background-color: rgb(81,45,168) !important; }
-
-.mdl-color-text--deep-purple-800 {
- color: rgb(69,39,160) !important; }
-
-.mdl-color--deep-purple-800 {
- background-color: rgb(69,39,160) !important; }
-
-.mdl-color-text--deep-purple-900 {
- color: rgb(49,27,146) !important; }
-
-.mdl-color--deep-purple-900 {
- background-color: rgb(49,27,146) !important; }
-
-.mdl-color-text--deep-purple-A100 {
- color: rgb(179,136,255) !important; }
-
-.mdl-color--deep-purple-A100 {
- background-color: rgb(179,136,255) !important; }
-
-.mdl-color-text--deep-purple-A200 {
- color: rgb(124,77,255) !important; }
-
-.mdl-color--deep-purple-A200 {
- background-color: rgb(124,77,255) !important; }
-
-.mdl-color-text--deep-purple-A400 {
- color: rgb(101,31,255) !important; }
-
-.mdl-color--deep-purple-A400 {
- background-color: rgb(101,31,255) !important; }
-
-.mdl-color-text--deep-purple-A700 {
- color: rgb(98,0,234) !important; }
-
-.mdl-color--deep-purple-A700 {
- background-color: rgb(98,0,234) !important; }
-
-.mdl-color-text--indigo {
- color: rgb(63,81,181) !important; }
-
-.mdl-color--indigo {
- background-color: rgb(63,81,181) !important; }
-
-.mdl-color-text--indigo-50 {
- color: rgb(232,234,246) !important; }
-
-.mdl-color--indigo-50 {
- background-color: rgb(232,234,246) !important; }
-
-.mdl-color-text--indigo-100 {
- color: rgb(197,202,233) !important; }
-
-.mdl-color--indigo-100 {
- background-color: rgb(197,202,233) !important; }
-
-.mdl-color-text--indigo-200 {
- color: rgb(159,168,218) !important; }
-
-.mdl-color--indigo-200 {
- background-color: rgb(159,168,218) !important; }
-
-.mdl-color-text--indigo-300 {
- color: rgb(121,134,203) !important; }
-
-.mdl-color--indigo-300 {
- background-color: rgb(121,134,203) !important; }
-
-.mdl-color-text--indigo-400 {
- color: rgb(92,107,192) !important; }
-
-.mdl-color--indigo-400 {
- background-color: rgb(92,107,192) !important; }
-
-.mdl-color-text--indigo-500 {
- color: rgb(63,81,181) !important; }
-
-.mdl-color--indigo-500 {
- background-color: rgb(63,81,181) !important; }
-
-.mdl-color-text--indigo-600 {
- color: rgb(57,73,171) !important; }
-
-.mdl-color--indigo-600 {
- background-color: rgb(57,73,171) !important; }
-
-.mdl-color-text--indigo-700 {
- color: rgb(48,63,159) !important; }
-
-.mdl-color--indigo-700 {
- background-color: rgb(48,63,159) !important; }
-
-.mdl-color-text--indigo-800 {
- color: rgb(40,53,147) !important; }
-
-.mdl-color--indigo-800 {
- background-color: rgb(40,53,147) !important; }
-
-.mdl-color-text--indigo-900 {
- color: rgb(26,35,126) !important; }
-
-.mdl-color--indigo-900 {
- background-color: rgb(26,35,126) !important; }
-
-.mdl-color-text--indigo-A100 {
- color: rgb(140,158,255) !important; }
-
-.mdl-color--indigo-A100 {
- background-color: rgb(140,158,255) !important; }
-
-.mdl-color-text--indigo-A200 {
- color: rgb(83,109,254) !important; }
-
-.mdl-color--indigo-A200 {
- background-color: rgb(83,109,254) !important; }
-
-.mdl-color-text--indigo-A400 {
- color: rgb(61,90,254) !important; }
-
-.mdl-color--indigo-A400 {
- background-color: rgb(61,90,254) !important; }
-
-.mdl-color-text--indigo-A700 {
- color: rgb(48,79,254) !important; }
-
-.mdl-color--indigo-A700 {
- background-color: rgb(48,79,254) !important; }
-
-.mdl-color-text--blue {
- color: rgb(33,150,243) !important; }
-
-.mdl-color--blue {
- background-color: rgb(33,150,243) !important; }
-
-.mdl-color-text--blue-50 {
- color: rgb(227,242,253) !important; }
-
-.mdl-color--blue-50 {
- background-color: rgb(227,242,253) !important; }
-
-.mdl-color-text--blue-100 {
- color: rgb(187,222,251) !important; }
-
-.mdl-color--blue-100 {
- background-color: rgb(187,222,251) !important; }
-
-.mdl-color-text--blue-200 {
- color: rgb(144,202,249) !important; }
-
-.mdl-color--blue-200 {
- background-color: rgb(144,202,249) !important; }
-
-.mdl-color-text--blue-300 {
- color: rgb(100,181,246) !important; }
-
-.mdl-color--blue-300 {
- background-color: rgb(100,181,246) !important; }
-
-.mdl-color-text--blue-400 {
- color: rgb(66,165,245) !important; }
-
-.mdl-color--blue-400 {
- background-color: rgb(66,165,245) !important; }
-
-.mdl-color-text--blue-500 {
- color: rgb(33,150,243) !important; }
-
-.mdl-color--blue-500 {
- background-color: rgb(33,150,243) !important; }
-
-.mdl-color-text--blue-600 {
- color: rgb(30,136,229) !important; }
-
-.mdl-color--blue-600 {
- background-color: rgb(30,136,229) !important; }
-
-.mdl-color-text--blue-700 {
- color: rgb(25,118,210) !important; }
-
-.mdl-color--blue-700 {
- background-color: rgb(25,118,210) !important; }
-
-.mdl-color-text--blue-800 {
- color: rgb(21,101,192) !important; }
-
-.mdl-color--blue-800 {
- background-color: rgb(21,101,192) !important; }
-
-.mdl-color-text--blue-900 {
- color: rgb(13,71,161) !important; }
-
-.mdl-color--blue-900 {
- background-color: rgb(13,71,161) !important; }
-
-.mdl-color-text--blue-A100 {
- color: rgb(130,177,255) !important; }
-
-.mdl-color--blue-A100 {
- background-color: rgb(130,177,255) !important; }
-
-.mdl-color-text--blue-A200 {
- color: rgb(68,138,255) !important; }
-
-.mdl-color--blue-A200 {
- background-color: rgb(68,138,255) !important; }
-
-.mdl-color-text--blue-A400 {
- color: rgb(41,121,255) !important; }
-
-.mdl-color--blue-A400 {
- background-color: rgb(41,121,255) !important; }
-
-.mdl-color-text--blue-A700 {
- color: rgb(41,98,255) !important; }
-
-.mdl-color--blue-A700 {
- background-color: rgb(41,98,255) !important; }
-
-.mdl-color-text--light-blue {
- color: rgb(3,169,244) !important; }
-
-.mdl-color--light-blue {
- background-color: rgb(3,169,244) !important; }
-
-.mdl-color-text--light-blue-50 {
- color: rgb(225,245,254) !important; }
-
-.mdl-color--light-blue-50 {
- background-color: rgb(225,245,254) !important; }
-
-.mdl-color-text--light-blue-100 {
- color: rgb(179,229,252) !important; }
-
-.mdl-color--light-blue-100 {
- background-color: rgb(179,229,252) !important; }
-
-.mdl-color-text--light-blue-200 {
- color: rgb(129,212,250) !important; }
-
-.mdl-color--light-blue-200 {
- background-color: rgb(129,212,250) !important; }
-
-.mdl-color-text--light-blue-300 {
- color: rgb(79,195,247) !important; }
-
-.mdl-color--light-blue-300 {
- background-color: rgb(79,195,247) !important; }
-
-.mdl-color-text--light-blue-400 {
- color: rgb(41,182,246) !important; }
-
-.mdl-color--light-blue-400 {
- background-color: rgb(41,182,246) !important; }
-
-.mdl-color-text--light-blue-500 {
- color: rgb(3,169,244) !important; }
-
-.mdl-color--light-blue-500 {
- background-color: rgb(3,169,244) !important; }
-
-.mdl-color-text--light-blue-600 {
- color: rgb(3,155,229) !important; }
-
-.mdl-color--light-blue-600 {
- background-color: rgb(3,155,229) !important; }
-
-.mdl-color-text--light-blue-700 {
- color: rgb(2,136,209) !important; }
-
-.mdl-color--light-blue-700 {
- background-color: rgb(2,136,209) !important; }
-
-.mdl-color-text--light-blue-800 {
- color: rgb(2,119,189) !important; }
-
-.mdl-color--light-blue-800 {
- background-color: rgb(2,119,189) !important; }
-
-.mdl-color-text--light-blue-900 {
- color: rgb(1,87,155) !important; }
-
-.mdl-color--light-blue-900 {
- background-color: rgb(1,87,155) !important; }
-
-.mdl-color-text--light-blue-A100 {
- color: rgb(128,216,255) !important; }
-
-.mdl-color--light-blue-A100 {
- background-color: rgb(128,216,255) !important; }
-
-.mdl-color-text--light-blue-A200 {
- color: rgb(64,196,255) !important; }
-
-.mdl-color--light-blue-A200 {
- background-color: rgb(64,196,255) !important; }
-
-.mdl-color-text--light-blue-A400 {
- color: rgb(0,176,255) !important; }
-
-.mdl-color--light-blue-A400 {
- background-color: rgb(0,176,255) !important; }
-
-.mdl-color-text--light-blue-A700 {
- color: rgb(0,145,234) !important; }
-
-.mdl-color--light-blue-A700 {
- background-color: rgb(0,145,234) !important; }
-
-.mdl-color-text--cyan {
- color: rgb(0,188,212) !important; }
-
-.mdl-color--cyan {
- background-color: rgb(0,188,212) !important; }
-
-.mdl-color-text--cyan-50 {
- color: rgb(224,247,250) !important; }
-
-.mdl-color--cyan-50 {
- background-color: rgb(224,247,250) !important; }
-
-.mdl-color-text--cyan-100 {
- color: rgb(178,235,242) !important; }
-
-.mdl-color--cyan-100 {
- background-color: rgb(178,235,242) !important; }
-
-.mdl-color-text--cyan-200 {
- color: rgb(128,222,234) !important; }
-
-.mdl-color--cyan-200 {
- background-color: rgb(128,222,234) !important; }
-
-.mdl-color-text--cyan-300 {
- color: rgb(77,208,225) !important; }
-
-.mdl-color--cyan-300 {
- background-color: rgb(77,208,225) !important; }
-
-.mdl-color-text--cyan-400 {
- color: rgb(38,198,218) !important; }
-
-.mdl-color--cyan-400 {
- background-color: rgb(38,198,218) !important; }
-
-.mdl-color-text--cyan-500 {
- color: rgb(0,188,212) !important; }
-
-.mdl-color--cyan-500 {
- background-color: rgb(0,188,212) !important; }
-
-.mdl-color-text--cyan-600 {
- color: rgb(0,172,193) !important; }
-
-.mdl-color--cyan-600 {
- background-color: rgb(0,172,193) !important; }
-
-.mdl-color-text--cyan-700 {
- color: rgb(0,151,167) !important; }
-
-.mdl-color--cyan-700 {
- background-color: rgb(0,151,167) !important; }
-
-.mdl-color-text--cyan-800 {
- color: rgb(0,131,143) !important; }
-
-.mdl-color--cyan-800 {
- background-color: rgb(0,131,143) !important; }
-
-.mdl-color-text--cyan-900 {
- color: rgb(0,96,100) !important; }
-
-.mdl-color--cyan-900 {
- background-color: rgb(0,96,100) !important; }
-
-.mdl-color-text--cyan-A100 {
- color: rgb(132,255,255) !important; }
-
-.mdl-color--cyan-A100 {
- background-color: rgb(132,255,255) !important; }
-
-.mdl-color-text--cyan-A200 {
- color: rgb(24,255,255) !important; }
-
-.mdl-color--cyan-A200 {
- background-color: rgb(24,255,255) !important; }
-
-.mdl-color-text--cyan-A400 {
- color: rgb(0,229,255) !important; }
-
-.mdl-color--cyan-A400 {
- background-color: rgb(0,229,255) !important; }
-
-.mdl-color-text--cyan-A700 {
- color: rgb(0,184,212) !important; }
-
-.mdl-color--cyan-A700 {
- background-color: rgb(0,184,212) !important; }
-
-.mdl-color-text--teal {
- color: rgb(0,150,136) !important; }
-
-.mdl-color--teal {
- background-color: rgb(0,150,136) !important; }
-
-.mdl-color-text--teal-50 {
- color: rgb(224,242,241) !important; }
-
-.mdl-color--teal-50 {
- background-color: rgb(224,242,241) !important; }
-
-.mdl-color-text--teal-100 {
- color: rgb(178,223,219) !important; }
-
-.mdl-color--teal-100 {
- background-color: rgb(178,223,219) !important; }
-
-.mdl-color-text--teal-200 {
- color: rgb(128,203,196) !important; }
-
-.mdl-color--teal-200 {
- background-color: rgb(128,203,196) !important; }
-
-.mdl-color-text--teal-300 {
- color: rgb(77,182,172) !important; }
-
-.mdl-color--teal-300 {
- background-color: rgb(77,182,172) !important; }
-
-.mdl-color-text--teal-400 {
- color: rgb(38,166,154) !important; }
-
-.mdl-color--teal-400 {
- background-color: rgb(38,166,154) !important; }
-
-.mdl-color-text--teal-500 {
- color: rgb(0,150,136) !important; }
-
-.mdl-color--teal-500 {
- background-color: rgb(0,150,136) !important; }
-
-.mdl-color-text--teal-600 {
- color: rgb(0,137,123) !important; }
-
-.mdl-color--teal-600 {
- background-color: rgb(0,137,123) !important; }
-
-.mdl-color-text--teal-700 {
- color: rgb(0,121,107) !important; }
-
-.mdl-color--teal-700 {
- background-color: rgb(0,121,107) !important; }
-
-.mdl-color-text--teal-800 {
- color: rgb(0,105,92) !important; }
-
-.mdl-color--teal-800 {
- background-color: rgb(0,105,92) !important; }
-
-.mdl-color-text--teal-900 {
- color: rgb(0,77,64) !important; }
-
-.mdl-color--teal-900 {
- background-color: rgb(0,77,64) !important; }
-
-.mdl-color-text--teal-A100 {
- color: rgb(167,255,235) !important; }
-
-.mdl-color--teal-A100 {
- background-color: rgb(167,255,235) !important; }
-
-.mdl-color-text--teal-A200 {
- color: rgb(100,255,218) !important; }
-
-.mdl-color--teal-A200 {
- background-color: rgb(100,255,218) !important; }
-
-.mdl-color-text--teal-A400 {
- color: rgb(29,233,182) !important; }
-
-.mdl-color--teal-A400 {
- background-color: rgb(29,233,182) !important; }
-
-.mdl-color-text--teal-A700 {
- color: rgb(0,191,165) !important; }
-
-.mdl-color--teal-A700 {
- background-color: rgb(0,191,165) !important; }
-
-.mdl-color-text--green {
- color: rgb(76,175,80) !important; }
-
-.mdl-color--green {
- background-color: rgb(76,175,80) !important; }
-
-.mdl-color-text--green-50 {
- color: rgb(232,245,233) !important; }
-
-.mdl-color--green-50 {
- background-color: rgb(232,245,233) !important; }
-
-.mdl-color-text--green-100 {
- color: rgb(200,230,201) !important; }
-
-.mdl-color--green-100 {
- background-color: rgb(200,230,201) !important; }
-
-.mdl-color-text--green-200 {
- color: rgb(165,214,167) !important; }
-
-.mdl-color--green-200 {
- background-color: rgb(165,214,167) !important; }
-
-.mdl-color-text--green-300 {
- color: rgb(129,199,132) !important; }
-
-.mdl-color--green-300 {
- background-color: rgb(129,199,132) !important; }
-
-.mdl-color-text--green-400 {
- color: rgb(102,187,106) !important; }
-
-.mdl-color--green-400 {
- background-color: rgb(102,187,106) !important; }
-
-.mdl-color-text--green-500 {
- color: rgb(76,175,80) !important; }
-
-.mdl-color--green-500 {
- background-color: rgb(76,175,80) !important; }
-
-.mdl-color-text--green-600 {
- color: rgb(67,160,71) !important; }
-
-.mdl-color--green-600 {
- background-color: rgb(67,160,71) !important; }
-
-.mdl-color-text--green-700 {
- color: rgb(56,142,60) !important; }
-
-.mdl-color--green-700 {
- background-color: rgb(56,142,60) !important; }
-
-.mdl-color-text--green-800 {
- color: rgb(46,125,50) !important; }
-
-.mdl-color--green-800 {
- background-color: rgb(46,125,50) !important; }
-
-.mdl-color-text--green-900 {
- color: rgb(27,94,32) !important; }
-
-.mdl-color--green-900 {
- background-color: rgb(27,94,32) !important; }
-
-.mdl-color-text--green-A100 {
- color: rgb(185,246,202) !important; }
-
-.mdl-color--green-A100 {
- background-color: rgb(185,246,202) !important; }
-
-.mdl-color-text--green-A200 {
- color: rgb(105,240,174) !important; }
-
-.mdl-color--green-A200 {
- background-color: rgb(105,240,174) !important; }
-
-.mdl-color-text--green-A400 {
- color: rgb(0,230,118) !important; }
-
-.mdl-color--green-A400 {
- background-color: rgb(0,230,118) !important; }
-
-.mdl-color-text--green-A700 {
- color: rgb(0,200,83) !important; }
-
-.mdl-color--green-A700 {
- background-color: rgb(0,200,83) !important; }
-
-.mdl-color-text--light-green {
- color: rgb(139,195,74) !important; }
-
-.mdl-color--light-green {
- background-color: rgb(139,195,74) !important; }
-
-.mdl-color-text--light-green-50 {
- color: rgb(241,248,233) !important; }
-
-.mdl-color--light-green-50 {
- background-color: rgb(241,248,233) !important; }
-
-.mdl-color-text--light-green-100 {
- color: rgb(220,237,200) !important; }
-
-.mdl-color--light-green-100 {
- background-color: rgb(220,237,200) !important; }
-
-.mdl-color-text--light-green-200 {
- color: rgb(197,225,165) !important; }
-
-.mdl-color--light-green-200 {
- background-color: rgb(197,225,165) !important; }
-
-.mdl-color-text--light-green-300 {
- color: rgb(174,213,129) !important; }
-
-.mdl-color--light-green-300 {
- background-color: rgb(174,213,129) !important; }
-
-.mdl-color-text--light-green-400 {
- color: rgb(156,204,101) !important; }
-
-.mdl-color--light-green-400 {
- background-color: rgb(156,204,101) !important; }
-
-.mdl-color-text--light-green-500 {
- color: rgb(139,195,74) !important; }
-
-.mdl-color--light-green-500 {
- background-color: rgb(139,195,74) !important; }
-
-.mdl-color-text--light-green-600 {
- color: rgb(124,179,66) !important; }
-
-.mdl-color--light-green-600 {
- background-color: rgb(124,179,66) !important; }
-
-.mdl-color-text--light-green-700 {
- color: rgb(104,159,56) !important; }
-
-.mdl-color--light-green-700 {
- background-color: rgb(104,159,56) !important; }
-
-.mdl-color-text--light-green-800 {
- color: rgb(85,139,47) !important; }
-
-.mdl-color--light-green-800 {
- background-color: rgb(85,139,47) !important; }
-
-.mdl-color-text--light-green-900 {
- color: rgb(51,105,30) !important; }
-
-.mdl-color--light-green-900 {
- background-color: rgb(51,105,30) !important; }
-
-.mdl-color-text--light-green-A100 {
- color: rgb(204,255,144) !important; }
-
-.mdl-color--light-green-A100 {
- background-color: rgb(204,255,144) !important; }
-
-.mdl-color-text--light-green-A200 {
- color: rgb(178,255,89) !important; }
-
-.mdl-color--light-green-A200 {
- background-color: rgb(178,255,89) !important; }
-
-.mdl-color-text--light-green-A400 {
- color: rgb(118,255,3) !important; }
-
-.mdl-color--light-green-A400 {
- background-color: rgb(118,255,3) !important; }
-
-.mdl-color-text--light-green-A700 {
- color: rgb(100,221,23) !important; }
-
-.mdl-color--light-green-A700 {
- background-color: rgb(100,221,23) !important; }
-
-.mdl-color-text--lime {
- color: rgb(205,220,57) !important; }
-
-.mdl-color--lime {
- background-color: rgb(205,220,57) !important; }
-
-.mdl-color-text--lime-50 {
- color: rgb(249,251,231) !important; }
-
-.mdl-color--lime-50 {
- background-color: rgb(249,251,231) !important; }
-
-.mdl-color-text--lime-100 {
- color: rgb(240,244,195) !important; }
-
-.mdl-color--lime-100 {
- background-color: rgb(240,244,195) !important; }
-
-.mdl-color-text--lime-200 {
- color: rgb(230,238,156) !important; }
-
-.mdl-color--lime-200 {
- background-color: rgb(230,238,156) !important; }
-
-.mdl-color-text--lime-300 {
- color: rgb(220,231,117) !important; }
-
-.mdl-color--lime-300 {
- background-color: rgb(220,231,117) !important; }
-
-.mdl-color-text--lime-400 {
- color: rgb(212,225,87) !important; }
-
-.mdl-color--lime-400 {
- background-color: rgb(212,225,87) !important; }
-
-.mdl-color-text--lime-500 {
- color: rgb(205,220,57) !important; }
-
-.mdl-color--lime-500 {
- background-color: rgb(205,220,57) !important; }
-
-.mdl-color-text--lime-600 {
- color: rgb(192,202,51) !important; }
-
-.mdl-color--lime-600 {
- background-color: rgb(192,202,51) !important; }
-
-.mdl-color-text--lime-700 {
- color: rgb(175,180,43) !important; }
-
-.mdl-color--lime-700 {
- background-color: rgb(175,180,43) !important; }
-
-.mdl-color-text--lime-800 {
- color: rgb(158,157,36) !important; }
-
-.mdl-color--lime-800 {
- background-color: rgb(158,157,36) !important; }
-
-.mdl-color-text--lime-900 {
- color: rgb(130,119,23) !important; }
-
-.mdl-color--lime-900 {
- background-color: rgb(130,119,23) !important; }
-
-.mdl-color-text--lime-A100 {
- color: rgb(244,255,129) !important; }
-
-.mdl-color--lime-A100 {
- background-color: rgb(244,255,129) !important; }
-
-.mdl-color-text--lime-A200 {
- color: rgb(238,255,65) !important; }
-
-.mdl-color--lime-A200 {
- background-color: rgb(238,255,65) !important; }
-
-.mdl-color-text--lime-A400 {
- color: rgb(198,255,0) !important; }
-
-.mdl-color--lime-A400 {
- background-color: rgb(198,255,0) !important; }
-
-.mdl-color-text--lime-A700 {
- color: rgb(174,234,0) !important; }
-
-.mdl-color--lime-A700 {
- background-color: rgb(174,234,0) !important; }
-
-.mdl-color-text--yellow {
- color: rgb(255,235,59) !important; }
-
-.mdl-color--yellow {
- background-color: rgb(255,235,59) !important; }
-
-.mdl-color-text--yellow-50 {
- color: rgb(255,253,231) !important; }
-
-.mdl-color--yellow-50 {
- background-color: rgb(255,253,231) !important; }
-
-.mdl-color-text--yellow-100 {
- color: rgb(255,249,196) !important; }
-
-.mdl-color--yellow-100 {
- background-color: rgb(255,249,196) !important; }
-
-.mdl-color-text--yellow-200 {
- color: rgb(255,245,157) !important; }
-
-.mdl-color--yellow-200 {
- background-color: rgb(255,245,157) !important; }
-
-.mdl-color-text--yellow-300 {
- color: rgb(255,241,118) !important; }
-
-.mdl-color--yellow-300 {
- background-color: rgb(255,241,118) !important; }
-
-.mdl-color-text--yellow-400 {
- color: rgb(255,238,88) !important; }
-
-.mdl-color--yellow-400 {
- background-color: rgb(255,238,88) !important; }
-
-.mdl-color-text--yellow-500 {
- color: rgb(255,235,59) !important; }
-
-.mdl-color--yellow-500 {
- background-color: rgb(255,235,59) !important; }
-
-.mdl-color-text--yellow-600 {
- color: rgb(253,216,53) !important; }
-
-.mdl-color--yellow-600 {
- background-color: rgb(253,216,53) !important; }
-
-.mdl-color-text--yellow-700 {
- color: rgb(251,192,45) !important; }
-
-.mdl-color--yellow-700 {
- background-color: rgb(251,192,45) !important; }
-
-.mdl-color-text--yellow-800 {
- color: rgb(249,168,37) !important; }
-
-.mdl-color--yellow-800 {
- background-color: rgb(249,168,37) !important; }
-
-.mdl-color-text--yellow-900 {
- color: rgb(245,127,23) !important; }
-
-.mdl-color--yellow-900 {
- background-color: rgb(245,127,23) !important; }
-
-.mdl-color-text--yellow-A100 {
- color: rgb(255,255,141) !important; }
-
-.mdl-color--yellow-A100 {
- background-color: rgb(255,255,141) !important; }
-
-.mdl-color-text--yellow-A200 {
- color: rgb(255,255,0) !important; }
-
-.mdl-color--yellow-A200 {
- background-color: rgb(255,255,0) !important; }
-
-.mdl-color-text--yellow-A400 {
- color: rgb(255,234,0) !important; }
-
-.mdl-color--yellow-A400 {
- background-color: rgb(255,234,0) !important; }
-
-.mdl-color-text--yellow-A700 {
- color: rgb(255,214,0) !important; }
-
-.mdl-color--yellow-A700 {
- background-color: rgb(255,214,0) !important; }
-
-.mdl-color-text--amber {
- color: rgb(255,193,7) !important; }
-
-.mdl-color--amber {
- background-color: rgb(255,193,7) !important; }
-
-.mdl-color-text--amber-50 {
- color: rgb(255,248,225) !important; }
-
-.mdl-color--amber-50 {
- background-color: rgb(255,248,225) !important; }
-
-.mdl-color-text--amber-100 {
- color: rgb(255,236,179) !important; }
-
-.mdl-color--amber-100 {
- background-color: rgb(255,236,179) !important; }
-
-.mdl-color-text--amber-200 {
- color: rgb(255,224,130) !important; }
-
-.mdl-color--amber-200 {
- background-color: rgb(255,224,130) !important; }
-
-.mdl-color-text--amber-300 {
- color: rgb(255,213,79) !important; }
-
-.mdl-color--amber-300 {
- background-color: rgb(255,213,79) !important; }
-
-.mdl-color-text--amber-400 {
- color: rgb(255,202,40) !important; }
-
-.mdl-color--amber-400 {
- background-color: rgb(255,202,40) !important; }
-
-.mdl-color-text--amber-500 {
- color: rgb(255,193,7) !important; }
-
-.mdl-color--amber-500 {
- background-color: rgb(255,193,7) !important; }
-
-.mdl-color-text--amber-600 {
- color: rgb(255,179,0) !important; }
-
-.mdl-color--amber-600 {
- background-color: rgb(255,179,0) !important; }
-
-.mdl-color-text--amber-700 {
- color: rgb(255,160,0) !important; }
-
-.mdl-color--amber-700 {
- background-color: rgb(255,160,0) !important; }
-
-.mdl-color-text--amber-800 {
- color: rgb(255,143,0) !important; }
-
-.mdl-color--amber-800 {
- background-color: rgb(255,143,0) !important; }
-
-.mdl-color-text--amber-900 {
- color: rgb(255,111,0) !important; }
-
-.mdl-color--amber-900 {
- background-color: rgb(255,111,0) !important; }
-
-.mdl-color-text--amber-A100 {
- color: rgb(255,229,127) !important; }
-
-.mdl-color--amber-A100 {
- background-color: rgb(255,229,127) !important; }
-
-.mdl-color-text--amber-A200 {
- color: rgb(255,215,64) !important; }
-
-.mdl-color--amber-A200 {
- background-color: rgb(255,215,64) !important; }
-
-.mdl-color-text--amber-A400 {
- color: rgb(255,196,0) !important; }
-
-.mdl-color--amber-A400 {
- background-color: rgb(255,196,0) !important; }
-
-.mdl-color-text--amber-A700 {
- color: rgb(255,171,0) !important; }
-
-.mdl-color--amber-A700 {
- background-color: rgb(255,171,0) !important; }
-
-.mdl-color-text--orange {
- color: rgb(255,152,0) !important; }
-
-.mdl-color--orange {
- background-color: rgb(255,152,0) !important; }
-
-.mdl-color-text--orange-50 {
- color: rgb(255,243,224) !important; }
-
-.mdl-color--orange-50 {
- background-color: rgb(255,243,224) !important; }
-
-.mdl-color-text--orange-100 {
- color: rgb(255,224,178) !important; }
-
-.mdl-color--orange-100 {
- background-color: rgb(255,224,178) !important; }
-
-.mdl-color-text--orange-200 {
- color: rgb(255,204,128) !important; }
-
-.mdl-color--orange-200 {
- background-color: rgb(255,204,128) !important; }
-
-.mdl-color-text--orange-300 {
- color: rgb(255,183,77) !important; }
-
-.mdl-color--orange-300 {
- background-color: rgb(255,183,77) !important; }
-
-.mdl-color-text--orange-400 {
- color: rgb(255,167,38) !important; }
-
-.mdl-color--orange-400 {
- background-color: rgb(255,167,38) !important; }
-
-.mdl-color-text--orange-500 {
- color: rgb(255,152,0) !important; }
-
-.mdl-color--orange-500 {
- background-color: rgb(255,152,0) !important; }
-
-.mdl-color-text--orange-600 {
- color: rgb(251,140,0) !important; }
-
-.mdl-color--orange-600 {
- background-color: rgb(251,140,0) !important; }
-
-.mdl-color-text--orange-700 {
- color: rgb(245,124,0) !important; }
-
-.mdl-color--orange-700 {
- background-color: rgb(245,124,0) !important; }
-
-.mdl-color-text--orange-800 {
- color: rgb(239,108,0) !important; }
-
-.mdl-color--orange-800 {
- background-color: rgb(239,108,0) !important; }
-
-.mdl-color-text--orange-900 {
- color: rgb(230,81,0) !important; }
-
-.mdl-color--orange-900 {
- background-color: rgb(230,81,0) !important; }
-
-.mdl-color-text--orange-A100 {
- color: rgb(255,209,128) !important; }
-
-.mdl-color--orange-A100 {
- background-color: rgb(255,209,128) !important; }
-
-.mdl-color-text--orange-A200 {
- color: rgb(255,171,64) !important; }
-
-.mdl-color--orange-A200 {
- background-color: rgb(255,171,64) !important; }
-
-.mdl-color-text--orange-A400 {
- color: rgb(255,145,0) !important; }
-
-.mdl-color--orange-A400 {
- background-color: rgb(255,145,0) !important; }
-
-.mdl-color-text--orange-A700 {
- color: rgb(255,109,0) !important; }
-
-.mdl-color--orange-A700 {
- background-color: rgb(255,109,0) !important; }
-
-.mdl-color-text--deep-orange {
- color: rgb(255,87,34) !important; }
-
-.mdl-color--deep-orange {
- background-color: rgb(255,87,34) !important; }
-
-.mdl-color-text--deep-orange-50 {
- color: rgb(251,233,231) !important; }
-
-.mdl-color--deep-orange-50 {
- background-color: rgb(251,233,231) !important; }
-
-.mdl-color-text--deep-orange-100 {
- color: rgb(255,204,188) !important; }
-
-.mdl-color--deep-orange-100 {
- background-color: rgb(255,204,188) !important; }
-
-.mdl-color-text--deep-orange-200 {
- color: rgb(255,171,145) !important; }
-
-.mdl-color--deep-orange-200 {
- background-color: rgb(255,171,145) !important; }
-
-.mdl-color-text--deep-orange-300 {
- color: rgb(255,138,101) !important; }
-
-.mdl-color--deep-orange-300 {
- background-color: rgb(255,138,101) !important; }
-
-.mdl-color-text--deep-orange-400 {
- color: rgb(255,112,67) !important; }
-
-.mdl-color--deep-orange-400 {
- background-color: rgb(255,112,67) !important; }
-
-.mdl-color-text--deep-orange-500 {
- color: rgb(255,87,34) !important; }
-
-.mdl-color--deep-orange-500 {
- background-color: rgb(255,87,34) !important; }
-
-.mdl-color-text--deep-orange-600 {
- color: rgb(244,81,30) !important; }
-
-.mdl-color--deep-orange-600 {
- background-color: rgb(244,81,30) !important; }
-
-.mdl-color-text--deep-orange-700 {
- color: rgb(230,74,25) !important; }
-
-.mdl-color--deep-orange-700 {
- background-color: rgb(230,74,25) !important; }
-
-.mdl-color-text--deep-orange-800 {
- color: rgb(216,67,21) !important; }
-
-.mdl-color--deep-orange-800 {
- background-color: rgb(216,67,21) !important; }
-
-.mdl-color-text--deep-orange-900 {
- color: rgb(191,54,12) !important; }
-
-.mdl-color--deep-orange-900 {
- background-color: rgb(191,54,12) !important; }
-
-.mdl-color-text--deep-orange-A100 {
- color: rgb(255,158,128) !important; }
-
-.mdl-color--deep-orange-A100 {
- background-color: rgb(255,158,128) !important; }
-
-.mdl-color-text--deep-orange-A200 {
- color: rgb(255,110,64) !important; }
-
-.mdl-color--deep-orange-A200 {
- background-color: rgb(255,110,64) !important; }
-
-.mdl-color-text--deep-orange-A400 {
- color: rgb(255,61,0) !important; }
-
-.mdl-color--deep-orange-A400 {
- background-color: rgb(255,61,0) !important; }
-
-.mdl-color-text--deep-orange-A700 {
- color: rgb(221,44,0) !important; }
-
-.mdl-color--deep-orange-A700 {
- background-color: rgb(221,44,0) !important; }
-
-.mdl-color-text--brown {
- color: rgb(121,85,72) !important; }
-
-.mdl-color--brown {
- background-color: rgb(121,85,72) !important; }
-
-.mdl-color-text--brown-50 {
- color: rgb(239,235,233) !important; }
-
-.mdl-color--brown-50 {
- background-color: rgb(239,235,233) !important; }
-
-.mdl-color-text--brown-100 {
- color: rgb(215,204,200) !important; }
-
-.mdl-color--brown-100 {
- background-color: rgb(215,204,200) !important; }
-
-.mdl-color-text--brown-200 {
- color: rgb(188,170,164) !important; }
-
-.mdl-color--brown-200 {
- background-color: rgb(188,170,164) !important; }
-
-.mdl-color-text--brown-300 {
- color: rgb(161,136,127) !important; }
-
-.mdl-color--brown-300 {
- background-color: rgb(161,136,127) !important; }
-
-.mdl-color-text--brown-400 {
- color: rgb(141,110,99) !important; }
-
-.mdl-color--brown-400 {
- background-color: rgb(141,110,99) !important; }
-
-.mdl-color-text--brown-500 {
- color: rgb(121,85,72) !important; }
-
-.mdl-color--brown-500 {
- background-color: rgb(121,85,72) !important; }
-
-.mdl-color-text--brown-600 {
- color: rgb(109,76,65) !important; }
-
-.mdl-color--brown-600 {
- background-color: rgb(109,76,65) !important; }
-
-.mdl-color-text--brown-700 {
- color: rgb(93,64,55) !important; }
-
-.mdl-color--brown-700 {
- background-color: rgb(93,64,55) !important; }
-
-.mdl-color-text--brown-800 {
- color: rgb(78,52,46) !important; }
-
-.mdl-color--brown-800 {
- background-color: rgb(78,52,46) !important; }
-
-.mdl-color-text--brown-900 {
- color: rgb(62,39,35) !important; }
-
-.mdl-color--brown-900 {
- background-color: rgb(62,39,35) !important; }
-
-.mdl-color-text--grey {
- color: rgb(158,158,158) !important; }
-
-.mdl-color--grey {
- background-color: rgb(158,158,158) !important; }
-
-.mdl-color-text--grey-50 {
- color: rgb(250,250,250) !important; }
-
-.mdl-color--grey-50 {
- background-color: rgb(250,250,250) !important; }
-
-.mdl-color-text--grey-100 {
- color: rgb(245,245,245) !important; }
-
-.mdl-color--grey-100 {
- background-color: rgb(245,245,245) !important; }
-
-.mdl-color-text--grey-200 {
- color: rgb(238,238,238) !important; }
-
-.mdl-color--grey-200 {
- background-color: rgb(238,238,238) !important; }
-
-.mdl-color-text--grey-300 {
- color: rgb(224,224,224) !important; }
-
-.mdl-color--grey-300 {
- background-color: rgb(224,224,224) !important; }
-
-.mdl-color-text--grey-400 {
- color: rgb(189,189,189) !important; }
-
-.mdl-color--grey-400 {
- background-color: rgb(189,189,189) !important; }
-
-.mdl-color-text--grey-500 {
- color: rgb(158,158,158) !important; }
-
-.mdl-color--grey-500 {
- background-color: rgb(158,158,158) !important; }
-
-.mdl-color-text--grey-600 {
- color: rgb(117,117,117) !important; }
-
-.mdl-color--grey-600 {
- background-color: rgb(117,117,117) !important; }
-
-.mdl-color-text--grey-700 {
- color: rgb(97,97,97) !important; }
-
-.mdl-color--grey-700 {
- background-color: rgb(97,97,97) !important; }
-
-.mdl-color-text--grey-800 {
- color: rgb(66,66,66) !important; }
-
-.mdl-color--grey-800 {
- background-color: rgb(66,66,66) !important; }
-
-.mdl-color-text--grey-900 {
- color: rgb(33,33,33) !important; }
-
-.mdl-color--grey-900 {
- background-color: rgb(33,33,33) !important; }
-
-.mdl-color-text--blue-grey {
- color: rgb(96,125,139) !important; }
-
-.mdl-color--blue-grey {
- background-color: rgb(96,125,139) !important; }
-
-.mdl-color-text--blue-grey-50 {
- color: rgb(236,239,241) !important; }
-
-.mdl-color--blue-grey-50 {
- background-color: rgb(236,239,241) !important; }
-
-.mdl-color-text--blue-grey-100 {
- color: rgb(207,216,220) !important; }
-
-.mdl-color--blue-grey-100 {
- background-color: rgb(207,216,220) !important; }
-
-.mdl-color-text--blue-grey-200 {
- color: rgb(176,190,197) !important; }
-
-.mdl-color--blue-grey-200 {
- background-color: rgb(176,190,197) !important; }
-
-.mdl-color-text--blue-grey-300 {
- color: rgb(144,164,174) !important; }
-
-.mdl-color--blue-grey-300 {
- background-color: rgb(144,164,174) !important; }
-
-.mdl-color-text--blue-grey-400 {
- color: rgb(120,144,156) !important; }
-
-.mdl-color--blue-grey-400 {
- background-color: rgb(120,144,156) !important; }
-
-.mdl-color-text--blue-grey-500 {
- color: rgb(96,125,139) !important; }
-
-.mdl-color--blue-grey-500 {
- background-color: rgb(96,125,139) !important; }
-
-.mdl-color-text--blue-grey-600 {
- color: rgb(84,110,122) !important; }
-
-.mdl-color--blue-grey-600 {
- background-color: rgb(84,110,122) !important; }
-
-.mdl-color-text--blue-grey-700 {
- color: rgb(69,90,100) !important; }
-
-.mdl-color--blue-grey-700 {
- background-color: rgb(69,90,100) !important; }
-
-.mdl-color-text--blue-grey-800 {
- color: rgb(55,71,79) !important; }
-
-.mdl-color--blue-grey-800 {
- background-color: rgb(55,71,79) !important; }
-
-.mdl-color-text--blue-grey-900 {
- color: rgb(38,50,56) !important; }
-
-.mdl-color--blue-grey-900 {
- background-color: rgb(38,50,56) !important; }
-
-.mdl-color--black {
- background-color: rgb(0,0,0) !important; }
-
-.mdl-color-text--black {
- color: rgb(0,0,0) !important; }
-
-.mdl-color--white {
- background-color: rgb(255,255,255) !important; }
-
-.mdl-color-text--white {
- color: rgb(255,255,255) !important; }
-
-.mdl-color--primary {
- background-color: rgb(63,81,181) !important; }
-
-.mdl-color--primary-contrast {
- background-color: rgb(255,255,255) !important; }
-
-.mdl-color--primary-dark {
- background-color: rgb(48,63,159) !important; }
-
-.mdl-color--accent {
- background-color: rgb(255,64,129) !important; }
-
-.mdl-color--accent-contrast {
- background-color: rgb(255,255,255) !important; }
-
-.mdl-color-text--primary {
- color: rgb(63,81,181) !important; }
-
-.mdl-color-text--primary-contrast {
- color: rgb(255,255,255) !important; }
-
-.mdl-color-text--primary-dark {
- color: rgb(48,63,159) !important; }
-
-.mdl-color-text--accent {
- color: rgb(255,64,129) !important; }
-
-.mdl-color-text--accent-contrast {
- color: rgb(255,255,255) !important; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-.mdl-ripple {
- background: rgb(0,0,0);
- border-radius: 50%;
- height: 50px;
- left: 0;
- opacity: 0;
- pointer-events: none;
- position: absolute;
- top: 0;
- -webkit-transform: translate(-50%, -50%);
- transform: translate(-50%, -50%);
- width: 50px;
- overflow: hidden; }
- .mdl-ripple.is-animating {
- transition: width 0.3s cubic-bezier(0, 0, 0.2, 1), height 0.3s cubic-bezier(0, 0, 0.2, 1), opacity 0.6s cubic-bezier(0, 0, 0.2, 1), -webkit-transform 0.3s cubic-bezier(0, 0, 0.2, 1);
- transition: transform 0.3s cubic-bezier(0, 0, 0.2, 1), width 0.3s cubic-bezier(0, 0, 0.2, 1), height 0.3s cubic-bezier(0, 0, 0.2, 1), opacity 0.6s cubic-bezier(0, 0, 0.2, 1);
- transition: transform 0.3s cubic-bezier(0, 0, 0.2, 1), width 0.3s cubic-bezier(0, 0, 0.2, 1), height 0.3s cubic-bezier(0, 0, 0.2, 1), opacity 0.6s cubic-bezier(0, 0, 0.2, 1), -webkit-transform 0.3s cubic-bezier(0, 0, 0.2, 1); }
- .mdl-ripple.is-visible {
- opacity: 0.3; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-.mdl-animation--default {
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }
-
-.mdl-animation--fast-out-slow-in {
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }
-
-.mdl-animation--linear-out-slow-in {
- transition-timing-function: cubic-bezier(0, 0, 0.2, 1); }
-
-.mdl-animation--fast-out-linear-in {
- transition-timing-function: cubic-bezier(0.4, 0, 1, 1); }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-.mdl-badge {
- position: relative;
- white-space: nowrap;
- margin-right: 24px; }
- .mdl-badge:not([data-badge]) {
- margin-right: auto; }
- .mdl-badge[data-badge]:after {
- content: attr(data-badge);
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-direction: row;
- -ms-flex-direction: row;
- flex-direction: row;
- -webkit-flex-wrap: wrap;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-align-content: center;
- -ms-flex-line-pack: center;
- align-content: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- position: absolute;
- top: -11px;
- right: -24px;
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-weight: 600;
- font-size: 12px;
- width: 22px;
- height: 22px;
- border-radius: 50%;
- background: rgb(255,64,129);
- color: rgb(255,255,255); }
- .mdl-button .mdl-badge[data-badge]:after {
- top: -10px;
- right: -5px; }
- .mdl-badge.mdl-badge--no-background[data-badge]:after {
- color: rgb(255,64,129);
- background: rgba(255,255,255,0.2);
- box-shadow: 0 0 1px gray; }
- .mdl-badge.mdl-badge--overlap {
- margin-right: 10px; }
- .mdl-badge.mdl-badge--overlap:after {
- right: -10px; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-button {
- background: transparent;
- border: none;
- border-radius: 2px;
- color: rgb(0,0,0);
- position: relative;
- height: 36px;
- margin: 0;
- min-width: 64px;
- padding: 0 16px;
- display: inline-block;
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 14px;
- font-weight: 500;
- text-transform: uppercase;
- line-height: 1;
- letter-spacing: 0;
- overflow: hidden;
- will-change: box-shadow;
- transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1);
- outline: none;
- cursor: pointer;
- text-decoration: none;
- text-align: center;
- line-height: 36px;
- vertical-align: middle; }
- .mdl-button::-moz-focus-inner {
- border: 0; }
- .mdl-button:hover {
- background-color: rgba(158,158,158, 0.20); }
- .mdl-button:focus:not(:active) {
- background-color: rgba(0,0,0, 0.12); }
- .mdl-button:active {
- background-color: rgba(158,158,158, 0.40); }
- .mdl-button.mdl-button--colored {
- color: rgb(63,81,181); }
- .mdl-button.mdl-button--colored:focus:not(:active) {
- background-color: rgba(0,0,0, 0.12); }
-
-input.mdl-button[type="submit"] {
- -webkit-appearance: none; }
-
-.mdl-button--raised {
- background: rgba(158,158,158, 0.20);
- box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); }
- .mdl-button--raised:active {
- 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.2);
- background-color: rgba(158,158,158, 0.40); }
- .mdl-button--raised:focus:not(:active) {
- box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36);
- background-color: rgba(158,158,158, 0.40); }
- .mdl-button--raised.mdl-button--colored {
- background: rgb(63,81,181);
- color: rgb(255,255,255); }
- .mdl-button--raised.mdl-button--colored:hover {
- background-color: rgb(63,81,181); }
- .mdl-button--raised.mdl-button--colored:active {
- background-color: rgb(63,81,181); }
- .mdl-button--raised.mdl-button--colored:focus:not(:active) {
- background-color: rgb(63,81,181); }
- .mdl-button--raised.mdl-button--colored .mdl-ripple {
- background: rgb(255,255,255); }
-
-.mdl-button--fab {
- border-radius: 50%;
- font-size: 24px;
- height: 56px;
- margin: auto;
- min-width: 56px;
- width: 56px;
- padding: 0;
- overflow: hidden;
- background: rgba(158,158,158, 0.20);
- box-shadow: 0 1px 1.5px 0 rgba(0, 0, 0, 0.12), 0 1px 1px 0 rgba(0, 0, 0, 0.24);
- position: relative;
- line-height: normal; }
- .mdl-button--fab .material-icons {
- position: absolute;
- top: 50%;
- left: 50%;
- -webkit-transform: translate(-12px, -12px);
- transform: translate(-12px, -12px);
- line-height: 24px;
- width: 24px; }
- .mdl-button--fab.mdl-button--mini-fab {
- height: 40px;
- min-width: 40px;
- width: 40px; }
- .mdl-button--fab .mdl-button__ripple-container {
- border-radius: 50%;
- -webkit-mask-image: -webkit-radial-gradient(circle, white, black); }
- .mdl-button--fab:active {
- 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.2);
- background-color: rgba(158,158,158, 0.40); }
- .mdl-button--fab:focus:not(:active) {
- box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36);
- background-color: rgba(158,158,158, 0.40); }
- .mdl-button--fab.mdl-button--colored {
- background: rgb(255,64,129);
- color: rgb(255,255,255); }
- .mdl-button--fab.mdl-button--colored:hover {
- background-color: rgb(255,64,129); }
- .mdl-button--fab.mdl-button--colored:focus:not(:active) {
- background-color: rgb(255,64,129); }
- .mdl-button--fab.mdl-button--colored:active {
- background-color: rgb(255,64,129); }
- .mdl-button--fab.mdl-button--colored .mdl-ripple {
- background: rgb(255,255,255); }
-
-.mdl-button--icon {
- border-radius: 50%;
- font-size: 24px;
- height: 32px;
- margin-left: 0;
- margin-right: 0;
- min-width: 32px;
- width: 32px;
- padding: 0;
- overflow: hidden;
- color: inherit;
- line-height: normal; }
- .mdl-button--icon .material-icons {
- position: absolute;
- top: 50%;
- left: 50%;
- -webkit-transform: translate(-12px, -12px);
- transform: translate(-12px, -12px);
- line-height: 24px;
- width: 24px; }
- .mdl-button--icon.mdl-button--mini-icon {
- height: 24px;
- min-width: 24px;
- width: 24px; }
- .mdl-button--icon.mdl-button--mini-icon .material-icons {
- top: 0px;
- left: 0px; }
- .mdl-button--icon .mdl-button__ripple-container {
- border-radius: 50%;
- -webkit-mask-image: -webkit-radial-gradient(circle, white, black); }
-
-.mdl-button__ripple-container {
- display: block;
- height: 100%;
- left: 0px;
- position: absolute;
- top: 0px;
- width: 100%;
- z-index: 0;
- overflow: hidden; }
- .mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple,
- .mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple {
- background-color: transparent; }
-
-.mdl-button--primary.mdl-button--primary {
- color: rgb(63,81,181); }
- .mdl-button--primary.mdl-button--primary .mdl-ripple {
- background: rgb(255,255,255); }
- .mdl-button--primary.mdl-button--primary.mdl-button--raised, .mdl-button--primary.mdl-button--primary.mdl-button--fab {
- color: rgb(255,255,255);
- background-color: rgb(63,81,181); }
-
-.mdl-button--accent.mdl-button--accent {
- color: rgb(255,64,129); }
- .mdl-button--accent.mdl-button--accent .mdl-ripple {
- background: rgb(255,255,255); }
- .mdl-button--accent.mdl-button--accent.mdl-button--raised, .mdl-button--accent.mdl-button--accent.mdl-button--fab {
- color: rgb(255,255,255);
- background-color: rgb(255,64,129); }
-
-.mdl-button[disabled][disabled], .mdl-button.mdl-button--disabled.mdl-button--disabled {
- color: rgba(0,0,0, 0.26);
- cursor: default;
- background-color: transparent; }
-
-.mdl-button--fab[disabled][disabled], .mdl-button--fab.mdl-button--disabled.mdl-button--disabled {
- background-color: rgba(0,0,0, 0.12);
- color: rgba(0,0,0, 0.26); }
-
-.mdl-button--raised[disabled][disabled], .mdl-button--raised.mdl-button--disabled.mdl-button--disabled {
- background-color: rgba(0,0,0, 0.12);
- color: rgba(0,0,0, 0.26);
- box-shadow: none; }
-
-.mdl-button--colored[disabled][disabled], .mdl-button--colored.mdl-button--disabled.mdl-button--disabled {
- color: rgba(0,0,0, 0.26); }
-
-.mdl-button .material-icons {
- vertical-align: middle; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-.mdl-card {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- font-size: 16px;
- font-weight: 400;
- min-height: 200px;
- overflow: hidden;
- width: 330px;
- z-index: 1;
- position: relative;
- background: rgb(255,255,255);
- border-radius: 2px;
- box-sizing: border-box; }
-
-.mdl-card__media {
- background-color: rgb(255,64,129);
- background-repeat: repeat;
- background-position: 50% 50%;
- background-size: cover;
- background-origin: padding-box;
- background-attachment: scroll;
- box-sizing: border-box; }
-
-.mdl-card__title {
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- color: rgb(0,0,0);
- display: block;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-justify-content: stretch;
- -ms-flex-pack: stretch;
- justify-content: stretch;
- line-height: normal;
- padding: 16px 16px;
- -webkit-perspective-origin: 165px 56px;
- perspective-origin: 165px 56px;
- -webkit-transform-origin: 165px 56px;
- transform-origin: 165px 56px;
- box-sizing: border-box; }
- .mdl-card__title.mdl-card--border {
- border-bottom: 1px solid rgba(0, 0, 0, 0.1); }
-
-.mdl-card__title-text {
- -webkit-align-self: flex-end;
- -ms-flex-item-align: end;
- align-self: flex-end;
- color: inherit;
- display: block;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- font-size: 24px;
- font-weight: 300;
- line-height: normal;
- overflow: hidden;
- -webkit-transform-origin: 149px 48px;
- transform-origin: 149px 48px;
- margin: 0; }
-
-.mdl-card__subtitle-text {
- font-size: 14px;
- color: rgba(0,0,0, 0.54);
- margin: 0; }
-
-.mdl-card__supporting-text {
- color: rgba(0,0,0, 0.54);
- font-size: 1rem;
- line-height: 18px;
- overflow: hidden;
- padding: 16px 16px;
- width: 90%; }
- .mdl-card__supporting-text.mdl-card--border {
- border-bottom: 1px solid rgba(0, 0, 0, 0.1); }
-
-.mdl-card__actions {
- font-size: 16px;
- line-height: normal;
- width: 100%;
- background-color: transparent;
- padding: 8px;
- box-sizing: border-box; }
- .mdl-card__actions.mdl-card--border {
- border-top: 1px solid rgba(0, 0, 0, 0.1); }
-
-.mdl-card--expand {
- -webkit-flex-grow: 1;
- -ms-flex-positive: 1;
- flex-grow: 1; }
-
-.mdl-card__menu {
- position: absolute;
- right: 16px;
- top: 16px; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-checkbox {
- position: relative;
- z-index: 1;
- vertical-align: middle;
- display: inline-block;
- box-sizing: border-box;
- width: 100%;
- height: 24px;
- margin: 0;
- padding: 0; }
- .mdl-checkbox.is-upgraded {
- padding-left: 24px; }
-
-.mdl-checkbox__input {
- line-height: 24px; }
- .mdl-checkbox.is-upgraded .mdl-checkbox__input {
- position: absolute;
- width: 0;
- height: 0;
- margin: 0;
- padding: 0;
- opacity: 0;
- -ms-appearance: none;
- -moz-appearance: none;
- -webkit-appearance: none;
- appearance: none;
- border: none; }
-
-.mdl-checkbox__box-outline {
- position: absolute;
- top: 3px;
- left: 0;
- display: inline-block;
- box-sizing: border-box;
- width: 16px;
- height: 16px;
- margin: 0;
- cursor: pointer;
- overflow: hidden;
- border: 2px solid rgba(0,0,0, 0.54);
- border-radius: 2px;
- z-index: 2; }
- .mdl-checkbox.is-checked .mdl-checkbox__box-outline {
- border: 2px solid rgb(63,81,181); }
- fieldset[disabled] .mdl-checkbox .mdl-checkbox__box-outline,
- .mdl-checkbox.is-disabled .mdl-checkbox__box-outline {
- border: 2px solid rgba(0,0,0, 0.26);
- cursor: auto; }
-
-.mdl-checkbox__focus-helper {
- position: absolute;
- top: 3px;
- left: 0;
- display: inline-block;
- box-sizing: border-box;
- width: 16px;
- height: 16px;
- border-radius: 50%;
- background-color: transparent; }
- .mdl-checkbox.is-focused .mdl-checkbox__focus-helper {
- box-shadow: 0 0 0px 8px rgba(0, 0, 0, 0.1);
- background-color: rgba(0, 0, 0, 0.1); }
- .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper {
- box-shadow: 0 0 0px 8px rgba(63,81,181, 0.26);
- background-color: rgba(63,81,181, 0.26); }
-
-.mdl-checkbox__tick-outline {
- position: absolute;
- top: 0;
- left: 0;
- height: 100%;
- width: 100%;
- -webkit-mask: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==");
- mask: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==");
- background: transparent;
- transition-duration: 0.28s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-property: background; }
- .mdl-checkbox.is-checked .mdl-checkbox__tick-outline {
- background: rgb(63,81,181) url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K"); }
- fieldset[disabled] .mdl-checkbox.is-checked .mdl-checkbox__tick-outline,
- .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline {
- background: rgba(0,0,0, 0.26) url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K"); }
-
-.mdl-checkbox__label {
- position: relative;
- cursor: pointer;
- font-size: 16px;
- line-height: 24px;
- margin: 0; }
- fieldset[disabled] .mdl-checkbox .mdl-checkbox__label,
- .mdl-checkbox.is-disabled .mdl-checkbox__label {
- color: rgba(0,0,0, 0.26);
- cursor: auto; }
-
-.mdl-checkbox__ripple-container {
- position: absolute;
- z-index: 2;
- top: -6px;
- left: -10px;
- box-sizing: border-box;
- width: 36px;
- height: 36px;
- border-radius: 50%;
- cursor: pointer;
- overflow: hidden;
- -webkit-mask-image: -webkit-radial-gradient(circle, white, black); }
- .mdl-checkbox__ripple-container .mdl-ripple {
- background: rgb(63,81,181); }
- fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container,
- .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container {
- cursor: auto; }
- fieldset[disabled] .mdl-checkbox .mdl-checkbox__ripple-container .mdl-ripple,
- .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple {
- background: transparent; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-chip {
- height: 32px;
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- line-height: 32px;
- padding: 0 12px;
- border: 0;
- border-radius: 16px;
- background-color: #dedede;
- display: inline-block;
- color: rgba(0,0,0, 0.87);
- margin: 2px 0;
- font-size: 0;
- white-space: nowrap; }
- .mdl-chip__text {
- font-size: 13px;
- vertical-align: middle;
- display: inline-block; }
- .mdl-chip__action {
- height: 24px;
- width: 24px;
- background: transparent;
- opacity: 0.54;
- display: inline-block;
- cursor: pointer;
- text-align: center;
- vertical-align: middle;
- padding: 0;
- margin: 0 0 0 4px;
- font-size: 13px;
- text-decoration: none;
- color: rgba(0,0,0, 0.87);
- border: none;
- outline: none;
- overflow: hidden; }
- .mdl-chip__contact {
- height: 32px;
- width: 32px;
- border-radius: 16px;
- display: inline-block;
- vertical-align: middle;
- margin-right: 8px;
- overflow: hidden;
- text-align: center;
- font-size: 18px;
- line-height: 32px; }
- .mdl-chip:focus {
- outline: 0;
- box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); }
- .mdl-chip:active {
- background-color: #d6d6d6; }
- .mdl-chip--deletable {
- padding-right: 4px; }
- .mdl-chip--contact {
- padding-left: 0; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-data-table {
- position: relative;
- border: 1px solid rgba(0, 0, 0, 0.12);
- border-collapse: collapse;
- white-space: nowrap;
- font-size: 13px;
- background-color: rgb(255,255,255); }
- .mdl-data-table thead {
- padding-bottom: 3px; }
- .mdl-data-table thead .mdl-data-table__select {
- margin-top: 0; }
- .mdl-data-table tbody tr {
- position: relative;
- height: 48px;
- transition-duration: 0.28s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-property: background-color; }
- .mdl-data-table tbody tr.is-selected {
- background-color: #e0e0e0; }
- .mdl-data-table tbody tr:hover {
- background-color: #eeeeee; }
- .mdl-data-table td, .mdl-data-table th {
- padding: 0 18px 12px 18px;
- text-align: right; }
- .mdl-data-table td:first-of-type, .mdl-data-table th:first-of-type {
- padding-left: 24px; }
- .mdl-data-table td:last-of-type, .mdl-data-table th:last-of-type {
- padding-right: 24px; }
- .mdl-data-table td {
- position: relative;
- vertical-align: middle;
- height: 48px;
- border-top: 1px solid rgba(0, 0, 0, 0.12);
- border-bottom: 1px solid rgba(0, 0, 0, 0.12);
- padding-top: 12px;
- box-sizing: border-box; }
- .mdl-data-table td .mdl-data-table__select {
- vertical-align: middle; }
- .mdl-data-table th {
- position: relative;
- vertical-align: bottom;
- text-overflow: ellipsis;
- font-size: 14px;
- font-weight: bold;
- line-height: 24px;
- letter-spacing: 0;
- height: 48px;
- font-size: 12px;
- color: rgba(0, 0, 0, 0.54);
- padding-bottom: 8px;
- box-sizing: border-box; }
- .mdl-data-table th.mdl-data-table__header--sorted-ascending, .mdl-data-table th.mdl-data-table__header--sorted-descending {
- color: rgba(0, 0, 0, 0.87); }
- .mdl-data-table th.mdl-data-table__header--sorted-ascending:before, .mdl-data-table th.mdl-data-table__header--sorted-descending:before {
- font-family: 'Material Icons';
- font-weight: normal;
- font-style: normal;
- font-size: 24px;
- line-height: 1;
- letter-spacing: normal;
- text-transform: none;
- display: inline-block;
- word-wrap: normal;
- -moz-font-feature-settings: 'liga';
- font-feature-settings: 'liga';
- -webkit-font-feature-settings: 'liga';
- -webkit-font-smoothing: antialiased;
- font-size: 16px;
- content: "\e5d8";
- margin-right: 5px;
- vertical-align: sub; }
- .mdl-data-table th.mdl-data-table__header--sorted-ascending:hover, .mdl-data-table th.mdl-data-table__header--sorted-descending:hover {
- cursor: pointer; }
- .mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before, .mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before {
- color: rgba(0, 0, 0, 0.26); }
- .mdl-data-table th.mdl-data-table__header--sorted-descending:before {
- content: "\e5db"; }
-
-.mdl-data-table__select {
- width: 16px; }
-
-.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric {
- text-align: left; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-dialog {
- border: none;
- box-shadow: 0 9px 46px 8px rgba(0, 0, 0, 0.14), 0 11px 15px -7px rgba(0, 0, 0, 0.12), 0 24px 38px 3px rgba(0, 0, 0, 0.2);
- width: 280px; }
- .mdl-dialog__title {
- padding: 24px 24px 0;
- margin: 0;
- font-size: 2.5rem; }
- .mdl-dialog__actions {
- padding: 8px 8px 8px 24px;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-direction: row-reverse;
- -ms-flex-direction: row-reverse;
- flex-direction: row-reverse;
- -webkit-flex-wrap: wrap;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap; }
- .mdl-dialog__actions > * {
- margin-right: 8px;
- height: 36px; }
- .mdl-dialog__actions > *:first-child {
- margin-right: 0; }
- .mdl-dialog__actions--full-width {
- padding: 0 0 8px 0; }
- .mdl-dialog__actions--full-width > * {
- height: 48px;
- -webkit-flex: 0 0 100%;
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- padding-right: 16px;
- margin-right: 0;
- text-align: right; }
- .mdl-dialog__content {
- padding: 20px 24px 24px 24px;
- color: rgba(0,0,0, 0.54); }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-mega-footer {
- padding: 16px 40px;
- color: rgb(158,158,158);
- background-color: rgb(66,66,66); }
-
-.mdl-mega-footer--top-section:after,
-.mdl-mega-footer--middle-section:after,
-.mdl-mega-footer--bottom-section:after,
-.mdl-mega-footer__top-section:after,
-.mdl-mega-footer__middle-section:after,
-.mdl-mega-footer__bottom-section:after {
- content: '';
- display: block;
- clear: both; }
-
-.mdl-mega-footer--left-section,
-.mdl-mega-footer__left-section {
- margin-bottom: 16px; }
-
-.mdl-mega-footer--right-section,
-.mdl-mega-footer__right-section {
- margin-bottom: 16px; }
-
-.mdl-mega-footer--right-section a,
-.mdl-mega-footer__right-section a {
- display: block;
- margin-bottom: 16px;
- color: inherit;
- text-decoration: none; }
-
-@media screen and (min-width: 760px) {
- .mdl-mega-footer--left-section,
- .mdl-mega-footer__left-section {
- float: left; }
- .mdl-mega-footer--right-section,
- .mdl-mega-footer__right-section {
- float: right; }
- .mdl-mega-footer--right-section a,
- .mdl-mega-footer__right-section a {
- display: inline-block;
- margin-left: 16px;
- line-height: 36px;
- vertical-align: middle; } }
-
-.mdl-mega-footer--social-btn,
-.mdl-mega-footer__social-btn {
- width: 36px;
- height: 36px;
- padding: 0;
- margin: 0;
- background-color: rgb(158,158,158);
- border: none; }
-
-.mdl-mega-footer--drop-down-section,
-.mdl-mega-footer__drop-down-section {
- display: block;
- position: relative; }
-
-@media screen and (min-width: 760px) {
- .mdl-mega-footer--drop-down-section,
- .mdl-mega-footer__drop-down-section {
- width: 33%; }
- .mdl-mega-footer--drop-down-section:nth-child(1),
- .mdl-mega-footer--drop-down-section:nth-child(2),
- .mdl-mega-footer__drop-down-section:nth-child(1),
- .mdl-mega-footer__drop-down-section:nth-child(2) {
- float: left; }
- .mdl-mega-footer--drop-down-section:nth-child(3),
- .mdl-mega-footer__drop-down-section:nth-child(3) {
- float: right; }
- .mdl-mega-footer--drop-down-section:nth-child(3):after,
- .mdl-mega-footer__drop-down-section:nth-child(3):after {
- clear: right; }
- .mdl-mega-footer--drop-down-section:nth-child(4),
- .mdl-mega-footer__drop-down-section:nth-child(4) {
- clear: right;
- float: right; }
- .mdl-mega-footer--middle-section:after,
- .mdl-mega-footer__middle-section:after {
- content: '';
- display: block;
- clear: both; }
- .mdl-mega-footer--bottom-section,
- .mdl-mega-footer__bottom-section {
- padding-top: 0; } }
-
-@media screen and (min-width: 1024px) {
- .mdl-mega-footer--drop-down-section,
- .mdl-mega-footer--drop-down-section:nth-child(3),
- .mdl-mega-footer--drop-down-section:nth-child(4),
- .mdl-mega-footer__drop-down-section,
- .mdl-mega-footer__drop-down-section:nth-child(3),
- .mdl-mega-footer__drop-down-section:nth-child(4) {
- width: 24%;
- float: left; } }
-
-.mdl-mega-footer--heading-checkbox,
-.mdl-mega-footer__heading-checkbox {
- position: absolute;
- width: 100%;
- height: 55.8px;
- padding: 32px;
- margin: 0;
- margin-top: -16px;
- cursor: pointer;
- z-index: 1;
- opacity: 0; }
- .mdl-mega-footer--heading-checkbox + .mdl-mega-footer--heading:after,
- .mdl-mega-footer--heading-checkbox + .mdl-mega-footer__heading:after,
- .mdl-mega-footer__heading-checkbox + .mdl-mega-footer--heading:after,
- .mdl-mega-footer__heading-checkbox + .mdl-mega-footer__heading:after {
- font-family: 'Material Icons';
- content: '\E5CE'; }
-
-.mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer--link-list,
-.mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer__link-list,
-.mdl-mega-footer--heading-checkbox:checked + .mdl-mega-footer--heading + .mdl-mega-footer--link-list,
-.mdl-mega-footer--heading-checkbox:checked + .mdl-mega-footer__heading + .mdl-mega-footer__link-list,
-.mdl-mega-footer__heading-checkbox:checked ~ .mdl-mega-footer--link-list,
-.mdl-mega-footer__heading-checkbox:checked ~ .mdl-mega-footer__link-list,
-.mdl-mega-footer__heading-checkbox:checked + .mdl-mega-footer--heading + .mdl-mega-footer--link-list,
-.mdl-mega-footer__heading-checkbox:checked + .mdl-mega-footer__heading + .mdl-mega-footer__link-list {
- display: none; }
-
-.mdl-mega-footer--heading-checkbox:checked + .mdl-mega-footer--heading:after,
-.mdl-mega-footer--heading-checkbox:checked + .mdl-mega-footer__heading:after,
-.mdl-mega-footer__heading-checkbox:checked + .mdl-mega-footer--heading:after,
-.mdl-mega-footer__heading-checkbox:checked + .mdl-mega-footer__heading:after {
- font-family: 'Material Icons';
- content: '\E5CF'; }
-
-.mdl-mega-footer--heading,
-.mdl-mega-footer__heading {
- position: relative;
- width: 100%;
- padding-right: 39.8px;
- margin-bottom: 16px;
- box-sizing: border-box;
- font-size: 14px;
- line-height: 23.8px;
- font-weight: 500;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
- color: rgb(224,224,224); }
-
-.mdl-mega-footer--heading:after,
-.mdl-mega-footer__heading:after {
- content: '';
- position: absolute;
- top: 0;
- right: 0;
- display: block;
- width: 23.8px;
- height: 23.8px;
- background-size: cover; }
-
-.mdl-mega-footer--link-list,
-.mdl-mega-footer__link-list {
- list-style: none;
- margin: 0;
- padding: 0;
- margin-bottom: 32px; }
- .mdl-mega-footer--link-list:after,
- .mdl-mega-footer__link-list:after {
- clear: both;
- display: block;
- content: ''; }
-
-.mdl-mega-footer--link-list li,
-.mdl-mega-footer__link-list li {
- font-size: 14px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0;
- line-height: 20px; }
-
-.mdl-mega-footer--link-list a,
-.mdl-mega-footer__link-list a {
- color: inherit;
- text-decoration: none;
- white-space: nowrap; }
-
-@media screen and (min-width: 760px) {
- .mdl-mega-footer--heading-checkbox,
- .mdl-mega-footer__heading-checkbox {
- display: none; }
- .mdl-mega-footer--heading-checkbox + .mdl-mega-footer--heading:after,
- .mdl-mega-footer--heading-checkbox + .mdl-mega-footer__heading:after,
- .mdl-mega-footer__heading-checkbox + .mdl-mega-footer--heading:after,
- .mdl-mega-footer__heading-checkbox + .mdl-mega-footer__heading:after {
- content: ''; }
- .mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer--link-list,
- .mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer__link-list,
- .mdl-mega-footer--heading-checkbox:checked + .mdl-mega-footer__heading + .mdl-mega-footer__link-list,
- .mdl-mega-footer--heading-checkbox:checked + .mdl-mega-footer--heading + .mdl-mega-footer--link-list,
- .mdl-mega-footer__heading-checkbox:checked ~ .mdl-mega-footer--link-list,
- .mdl-mega-footer__heading-checkbox:checked ~ .mdl-mega-footer__link-list,
- .mdl-mega-footer__heading-checkbox:checked + .mdl-mega-footer__heading + .mdl-mega-footer__link-list,
- .mdl-mega-footer__heading-checkbox:checked + .mdl-mega-footer--heading + .mdl-mega-footer--link-list {
- display: block; }
- .mdl-mega-footer--heading-checkbox:checked + .mdl-mega-footer--heading:after,
- .mdl-mega-footer--heading-checkbox:checked + .mdl-mega-footer__heading:after,
- .mdl-mega-footer__heading-checkbox:checked + .mdl-mega-footer--heading:after,
- .mdl-mega-footer__heading-checkbox:checked + .mdl-mega-footer__heading:after {
- content: ''; } }
-
-.mdl-mega-footer--bottom-section,
-.mdl-mega-footer__bottom-section {
- padding-top: 16px;
- margin-bottom: 16px; }
-
-.mdl-logo {
- margin-bottom: 16px;
- color: white; }
-
-.mdl-mega-footer--bottom-section .mdl-mega-footer--link-list li,
-.mdl-mega-footer__bottom-section .mdl-mega-footer__link-list li {
- float: left;
- margin-bottom: 0;
- margin-right: 16px; }
-
-@media screen and (min-width: 760px) {
- .mdl-logo {
- float: left;
- margin-bottom: 0;
- margin-right: 16px; } }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-.mdl-mini-footer {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-flow: row wrap;
- -ms-flex-flow: row wrap;
- flex-flow: row wrap;
- -webkit-justify-content: space-between;
- -ms-flex-pack: justify;
- justify-content: space-between;
- padding: 32px 16px;
- color: rgb(158,158,158);
- background-color: rgb(66,66,66); }
- .mdl-mini-footer:after {
- content: '';
- display: block; }
- .mdl-mini-footer .mdl-logo {
- line-height: 36px; }
-
-.mdl-mini-footer--link-list,
-.mdl-mini-footer__link-list {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-flow: row nowrap;
- -ms-flex-flow: row nowrap;
- flex-flow: row nowrap;
- list-style: none;
- margin: 0;
- padding: 0; }
- .mdl-mini-footer--link-list li,
- .mdl-mini-footer__link-list li {
- margin-bottom: 0;
- margin-right: 16px; }
- @media screen and (min-width: 760px) {
- .mdl-mini-footer--link-list li,
- .mdl-mini-footer__link-list li {
- line-height: 36px; } }
- .mdl-mini-footer--link-list a,
- .mdl-mini-footer__link-list a {
- color: inherit;
- text-decoration: none;
- white-space: nowrap; }
-
-.mdl-mini-footer--left-section,
-.mdl-mini-footer__left-section {
- display: inline-block;
- -webkit-order: 0;
- -ms-flex-order: 0;
- order: 0; }
-
-.mdl-mini-footer--right-section,
-.mdl-mini-footer__right-section {
- display: inline-block;
- -webkit-order: 1;
- -ms-flex-order: 1;
- order: 1; }
-
-.mdl-mini-footer--social-btn,
-.mdl-mini-footer__social-btn {
- width: 36px;
- height: 36px;
- padding: 0;
- margin: 0;
- background-color: rgb(158,158,158);
- border: none; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-.mdl-icon-toggle {
- position: relative;
- z-index: 1;
- vertical-align: middle;
- display: inline-block;
- height: 32px;
- margin: 0;
- padding: 0; }
-
-.mdl-icon-toggle__input {
- line-height: 32px; }
- .mdl-icon-toggle.is-upgraded .mdl-icon-toggle__input {
- position: absolute;
- width: 0;
- height: 0;
- margin: 0;
- padding: 0;
- opacity: 0;
- -ms-appearance: none;
- -moz-appearance: none;
- -webkit-appearance: none;
- appearance: none;
- border: none; }
-
-.mdl-icon-toggle__label {
- display: inline-block;
- position: relative;
- cursor: pointer;
- height: 32px;
- width: 32px;
- min-width: 32px;
- color: rgb(97,97,97);
- border-radius: 50%;
- padding: 0;
- margin-left: 0;
- margin-right: 0;
- text-align: center;
- background-color: transparent;
- will-change: background-color;
- transition: background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1); }
- .mdl-icon-toggle__label.material-icons {
- line-height: 32px;
- font-size: 24px; }
- .mdl-icon-toggle.is-checked .mdl-icon-toggle__label {
- color: rgb(63,81,181); }
- .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label {
- color: rgba(0,0,0, 0.26);
- cursor: auto;
- transition: none; }
- .mdl-icon-toggle.is-focused .mdl-icon-toggle__label {
- background-color: rgba(0,0,0, 0.12); }
- .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label {
- background-color: rgba(63,81,181, 0.26); }
-
-.mdl-icon-toggle__ripple-container {
- position: absolute;
- z-index: 2;
- top: -2px;
- left: -2px;
- box-sizing: border-box;
- width: 36px;
- height: 36px;
- border-radius: 50%;
- cursor: pointer;
- overflow: hidden;
- -webkit-mask-image: -webkit-radial-gradient(circle, white, black); }
- .mdl-icon-toggle__ripple-container .mdl-ripple {
- background: rgb(97,97,97); }
- .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container {
- cursor: auto; }
- .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple {
- background: transparent; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-list {
- display: block;
- padding: 8px 0;
- list-style: none; }
-
-.mdl-list__item {
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 16px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0.04em;
- line-height: 1;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- min-height: 48px;
- box-sizing: border-box;
- -webkit-flex-direction: row;
- -ms-flex-direction: row;
- flex-direction: row;
- -webkit-flex-wrap: nowrap;
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- padding: 16px;
- cursor: default;
- color: rgba(0,0,0, 0.87);
- overflow: hidden; }
- .mdl-list__item .mdl-list__item-primary-content {
- -webkit-order: 0;
- -ms-flex-order: 0;
- order: 0;
- -webkit-flex-grow: 2;
- -ms-flex-positive: 2;
- flex-grow: 2;
- text-decoration: none;
- box-sizing: border-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center; }
- .mdl-list__item .mdl-list__item-primary-content .mdl-list__item-icon {
- margin-right: 32px; }
- .mdl-list__item .mdl-list__item-primary-content .mdl-list__item-avatar {
- margin-right: 16px; }
- .mdl-list__item .mdl-list__item-secondary-content {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-flow: column;
- -ms-flex-flow: column;
- flex-flow: column;
- -webkit-align-items: flex-end;
- -ms-flex-align: end;
- align-items: flex-end;
- margin-left: 16px; }
- .mdl-list__item .mdl-list__item-secondary-content .mdl-list__item-secondary-action label {
- display: inline; }
- .mdl-list__item .mdl-list__item-secondary-content .mdl-list__item-secondary-info {
- font-size: 12px;
- font-weight: 400;
- line-height: 1;
- letter-spacing: 0;
- color: rgba(0,0,0, 0.54); }
- .mdl-list__item .mdl-list__item-secondary-content .mdl-list__item-sub-header {
- padding: 0 0 0 16px; }
-
-.mdl-list__item-icon,
-.mdl-list__item-icon.material-icons {
- height: 24px;
- width: 24px;
- font-size: 24px;
- box-sizing: border-box;
- color: rgb(117,117,117); }
-
-.mdl-list__item-avatar,
-.mdl-list__item-avatar.material-icons {
- height: 40px;
- width: 40px;
- box-sizing: border-box;
- border-radius: 50%;
- background-color: rgb(117,117,117);
- font-size: 40px;
- color: white; }
-
-.mdl-list__item--two-line {
- height: 72px; }
- .mdl-list__item--two-line .mdl-list__item-primary-content {
- height: 36px;
- line-height: 20px;
- display: block; }
- .mdl-list__item--two-line .mdl-list__item-primary-content .mdl-list__item-avatar {
- float: left; }
- .mdl-list__item--two-line .mdl-list__item-primary-content .mdl-list__item-icon {
- float: left;
- margin-top: 6px; }
- .mdl-list__item--two-line .mdl-list__item-primary-content .mdl-list__item-secondary-content {
- height: 36px; }
- .mdl-list__item--two-line .mdl-list__item-primary-content .mdl-list__item-sub-title {
- font-size: 14px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0;
- line-height: 18px;
- color: rgba(0,0,0, 0.54);
- display: block;
- padding: 0; }
-
-.mdl-list__item--three-line {
- height: 88px; }
- .mdl-list__item--three-line .mdl-list__item-primary-content {
- height: 52px;
- line-height: 20px;
- display: block; }
- .mdl-list__item--three-line .mdl-list__item-primary-content .mdl-list__item-avatar,
- .mdl-list__item--three-line .mdl-list__item-primary-content .mdl-list__item-icon {
- float: left; }
- .mdl-list__item--three-line .mdl-list__item-secondary-content {
- height: 52px; }
- .mdl-list__item--three-line .mdl-list__item-text-body {
- font-size: 14px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0;
- line-height: 18px;
- height: 52px;
- color: rgba(0,0,0, 0.54);
- display: block;
- padding: 0; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-menu__container {
- display: block;
- margin: 0;
- padding: 0;
- border: none;
- position: absolute;
- overflow: visible;
- height: 0;
- width: 0;
- visibility: hidden;
- z-index: -1; }
- .mdl-menu__container.is-visible, .mdl-menu__container.is-animating {
- z-index: 999;
- visibility: visible; }
-
-.mdl-menu__outline {
- display: block;
- background: rgb(255,255,255);
- margin: 0;
- padding: 0;
- border: none;
- border-radius: 2px;
- position: absolute;
- top: 0;
- left: 0;
- overflow: hidden;
- opacity: 0;
- -webkit-transform: scale(0);
- transform: scale(0);
- -webkit-transform-origin: 0 0;
- transform-origin: 0 0;
- box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
- will-change: transform;
- transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
- transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
- transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
- z-index: -1; }
- .mdl-menu__container.is-visible .mdl-menu__outline {
- opacity: 1;
- -webkit-transform: scale(1);
- transform: scale(1);
- z-index: 999; }
- .mdl-menu__outline.mdl-menu--bottom-right {
- -webkit-transform-origin: 100% 0;
- transform-origin: 100% 0; }
- .mdl-menu__outline.mdl-menu--top-left {
- -webkit-transform-origin: 0 100%;
- transform-origin: 0 100%; }
- .mdl-menu__outline.mdl-menu--top-right {
- -webkit-transform-origin: 100% 100%;
- transform-origin: 100% 100%; }
-
-.mdl-menu {
- position: absolute;
- list-style: none;
- top: 0;
- left: 0;
- height: auto;
- width: auto;
- min-width: 124px;
- padding: 8px 0;
- margin: 0;
- opacity: 0;
- clip: rect(0 0 0 0);
- z-index: -1; }
- .mdl-menu__container.is-visible .mdl-menu {
- opacity: 1;
- z-index: 999; }
- .mdl-menu.is-animating {
- transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), clip 0.3s cubic-bezier(0.4, 0, 0.2, 1); }
- .mdl-menu.mdl-menu--bottom-right {
- left: auto;
- right: 0; }
- .mdl-menu.mdl-menu--top-left {
- top: auto;
- bottom: 0; }
- .mdl-menu.mdl-menu--top-right {
- top: auto;
- left: auto;
- bottom: 0;
- right: 0; }
- .mdl-menu.mdl-menu--unaligned {
- top: auto;
- left: auto; }
-
-.mdl-menu__item {
- display: block;
- border: none;
- color: rgba(0,0,0, 0.87);
- background-color: transparent;
- text-align: left;
- margin: 0;
- padding: 0 16px;
- outline-color: rgb(189,189,189);
- position: relative;
- overflow: hidden;
- font-size: 14px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0;
- text-decoration: none;
- cursor: pointer;
- height: 48px;
- line-height: 48px;
- white-space: nowrap;
- opacity: 0;
- transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none; }
- .mdl-menu__container.is-visible .mdl-menu__item {
- opacity: 1; }
- .mdl-menu__item::-moz-focus-inner {
- border: 0; }
- .mdl-menu__item--full-bleed-divider {
- border-bottom: 1px solid rgba(0,0,0, 0.12); }
- .mdl-menu__item[disabled], .mdl-menu__item[data-mdl-disabled] {
- color: rgb(189,189,189);
- background-color: transparent;
- cursor: auto; }
- .mdl-menu__item[disabled]:hover, .mdl-menu__item[data-mdl-disabled]:hover {
- background-color: transparent; }
- .mdl-menu__item[disabled]:focus, .mdl-menu__item[data-mdl-disabled]:focus {
- background-color: transparent; }
- .mdl-menu__item[disabled] .mdl-ripple, .mdl-menu__item[data-mdl-disabled] .mdl-ripple {
- background: transparent; }
- .mdl-menu__item:hover {
- background-color: rgb(238,238,238); }
- .mdl-menu__item:focus {
- outline: none;
- background-color: rgb(238,238,238); }
- .mdl-menu__item:active {
- background-color: rgb(224,224,224); }
-
-.mdl-menu__item--ripple-container {
- display: block;
- height: 100%;
- left: 0px;
- position: absolute;
- top: 0px;
- width: 100%;
- z-index: 0;
- overflow: hidden; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-.mdl-progress {
- display: block;
- position: relative;
- height: 4px;
- width: 500px;
- max-width: 100%; }
-
-.mdl-progress > .bar {
- display: block;
- position: absolute;
- top: 0;
- bottom: 0;
- width: 0%;
- transition: width 0.2s cubic-bezier(0.4, 0, 0.2, 1); }
-
-.mdl-progress > .progressbar {
- background-color: rgb(63,81,181);
- z-index: 1;
- left: 0; }
-
-.mdl-progress > .bufferbar {
- background-image: linear-gradient(to right, rgba(255,255,255, 0.7), rgba(255,255,255, 0.7)), linear-gradient(to right, rgb(63,81,181), rgb(63,81,181));
- z-index: 0;
- left: 0; }
-
-.mdl-progress > .auxbar {
- right: 0; }
-
-@supports (-webkit-appearance: none) {
- .mdl-progress:not(.mdl-progress--indeterminate):not(.mdl-progress--indeterminate) > .auxbar,
- .mdl-progress:not(.mdl-progress__indeterminate):not(.mdl-progress__indeterminate) > .auxbar {
- background-image: linear-gradient(to right, rgba(255,255,255, 0.7), rgba(255,255,255, 0.7)), linear-gradient(to right, rgb(63,81,181), rgb(63,81,181));
- -webkit-mask: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=");
- mask: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo="); } }
-
-.mdl-progress:not(.mdl-progress--indeterminate) > .auxbar,
-.mdl-progress:not(.mdl-progress__indeterminate) > .auxbar {
- background-image: linear-gradient(to right, rgba(255,255,255, 0.9), rgba(255,255,255, 0.9)), linear-gradient(to right, rgb(63,81,181), rgb(63,81,181)); }
-
-.mdl-progress.mdl-progress--indeterminate > .bar1,
-.mdl-progress.mdl-progress__indeterminate > .bar1 {
- background-color: rgb(63,81,181);
- -webkit-animation-name: indeterminate1;
- animation-name: indeterminate1;
- -webkit-animation-duration: 2s;
- animation-duration: 2s;
- -webkit-animation-iteration-count: infinite;
- animation-iteration-count: infinite;
- -webkit-animation-timing-function: linear;
- animation-timing-function: linear; }
-
-.mdl-progress.mdl-progress--indeterminate > .bar3,
-.mdl-progress.mdl-progress__indeterminate > .bar3 {
- background-image: none;
- background-color: rgb(63,81,181);
- -webkit-animation-name: indeterminate2;
- animation-name: indeterminate2;
- -webkit-animation-duration: 2s;
- animation-duration: 2s;
- -webkit-animation-iteration-count: infinite;
- animation-iteration-count: infinite;
- -webkit-animation-timing-function: linear;
- animation-timing-function: linear; }
-
-@-webkit-keyframes indeterminate1 {
- 0% {
- left: 0%;
- width: 0%; }
- 50% {
- left: 25%;
- width: 75%; }
- 75% {
- left: 100%;
- width: 0%; } }
-
-@keyframes indeterminate1 {
- 0% {
- left: 0%;
- width: 0%; }
- 50% {
- left: 25%;
- width: 75%; }
- 75% {
- left: 100%;
- width: 0%; } }
-
-@-webkit-keyframes indeterminate2 {
- 0% {
- left: 0%;
- width: 0%; }
- 50% {
- left: 0%;
- width: 0%; }
- 75% {
- left: 0%;
- width: 25%; }
- 100% {
- left: 100%;
- width: 0%; } }
-
-@keyframes indeterminate2 {
- 0% {
- left: 0%;
- width: 0%; }
- 50% {
- left: 0%;
- width: 0%; }
- 75% {
- left: 0%;
- width: 25%; }
- 100% {
- left: 100%;
- width: 0%; } }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-navigation {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-wrap: nowrap;
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap;
- box-sizing: border-box; }
-
-.mdl-navigation__link {
- color: rgb(66,66,66);
- text-decoration: none;
- margin: 0;
- font-size: 14px;
- font-weight: 400;
- line-height: 24px;
- letter-spacing: 0;
- opacity: 0.87; }
- .mdl-navigation__link .material-icons {
- vertical-align: middle; }
-
-.mdl-layout {
- width: 100%;
- height: 100%;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- overflow-y: auto;
- overflow-x: hidden;
- position: relative;
- -webkit-overflow-scrolling: touch; }
-
-.mdl-layout.is-small-screen .mdl-layout--large-screen-only {
- display: none; }
-
-.mdl-layout:not(.is-small-screen) .mdl-layout--small-screen-only {
- display: none; }
-
-.mdl-layout__container {
- position: absolute;
- width: 100%;
- height: 100%; }
-
-.mdl-layout__title,
-.mdl-layout-title {
- display: block;
- position: relative;
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 20px;
- font-weight: 500;
- line-height: 1;
- letter-spacing: 0.02em;
- font-weight: 400;
- box-sizing: border-box; }
-
-.mdl-layout-spacer {
- -webkit-flex-grow: 1;
- -ms-flex-positive: 1;
- flex-grow: 1; }
-
-.mdl-layout__drawer {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-flex-wrap: nowrap;
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap;
- width: 240px;
- height: 100%;
- max-height: 100%;
- position: absolute;
- top: 0;
- left: 0;
- box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
- box-sizing: border-box;
- border-right: 1px solid rgb(224,224,224);
- background: rgb(250,250,250);
- -webkit-transform: translateX(-250px);
- transform: translateX(-250px);
- -webkit-transform-style: preserve-3d;
- transform-style: preserve-3d;
- will-change: transform;
- transition-duration: 0.2s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-property: -webkit-transform;
- transition-property: transform;
- transition-property: transform, -webkit-transform;
- color: rgb(66,66,66);
- overflow: visible;
- overflow-y: auto;
- z-index: 5; }
- .mdl-layout__drawer.is-visible {
- -webkit-transform: translateX(0);
- transform: translateX(0); }
- .mdl-layout__drawer.is-visible ~ .mdl-layout__content.mdl-layout__content {
- overflow: hidden; }
- .mdl-layout__drawer > * {
- -webkit-flex-shrink: 0;
- -ms-flex-negative: 0;
- flex-shrink: 0; }
- .mdl-layout__drawer > .mdl-layout__title,
- .mdl-layout__drawer > .mdl-layout-title {
- line-height: 64px;
- padding-left: 40px; }
- @media screen and (max-width: 1024px) {
- .mdl-layout__drawer > .mdl-layout__title,
- .mdl-layout__drawer > .mdl-layout-title {
- line-height: 56px;
- padding-left: 16px; } }
- .mdl-layout__drawer .mdl-navigation {
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-align-items: stretch;
- -ms-flex-align: stretch;
- align-items: stretch;
- padding-top: 16px; }
- .mdl-layout__drawer .mdl-navigation .mdl-navigation__link {
- display: block;
- -webkit-flex-shrink: 0;
- -ms-flex-negative: 0;
- flex-shrink: 0;
- padding: 16px 40px;
- margin: 0;
- color: #757575; }
- @media screen and (max-width: 1024px) {
- .mdl-layout__drawer .mdl-navigation .mdl-navigation__link {
- padding: 16px 16px; } }
- .mdl-layout__drawer .mdl-navigation .mdl-navigation__link:hover {
- background-color: rgb(224,224,224); }
- .mdl-layout__drawer .mdl-navigation .mdl-navigation__link--current {
- background-color: rgb(224,224,224);
- color: rgb(0,0,0); }
- @media screen and (min-width: 1025px) {
- .mdl-layout--fixed-drawer > .mdl-layout__drawer {
- -webkit-transform: translateX(0);
- transform: translateX(0); } }
-
-.mdl-layout__drawer-button {
- display: block;
- position: absolute;
- height: 48px;
- width: 48px;
- border: 0;
- -webkit-flex-shrink: 0;
- -ms-flex-negative: 0;
- flex-shrink: 0;
- overflow: hidden;
- text-align: center;
- cursor: pointer;
- font-size: 26px;
- line-height: 56px;
- font-family: Helvetica, Arial, sans-serif;
- margin: 8px 12px;
- top: 0;
- left: 0;
- color: rgb(255,255,255);
- z-index: 4; }
- .mdl-layout__header .mdl-layout__drawer-button {
- position: absolute;
- color: rgb(255,255,255);
- background-color: inherit; }
- @media screen and (max-width: 1024px) {
- .mdl-layout__header .mdl-layout__drawer-button {
- margin: 4px; } }
- @media screen and (max-width: 1024px) {
- .mdl-layout__drawer-button {
- margin: 4px;
- color: rgba(0, 0, 0, 0.5); } }
- @media screen and (min-width: 1025px) {
- .mdl-layout__drawer-button {
- line-height: 54px; }
- .mdl-layout--no-desktop-drawer-button .mdl-layout__drawer-button,
- .mdl-layout--fixed-drawer > .mdl-layout__drawer-button,
- .mdl-layout--no-drawer-button .mdl-layout__drawer-button {
- display: none; } }
-
-.mdl-layout__header {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-flex-wrap: nowrap;
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap;
- -webkit-justify-content: flex-start;
- -ms-flex-pack: start;
- justify-content: flex-start;
- box-sizing: border-box;
- -webkit-flex-shrink: 0;
- -ms-flex-negative: 0;
- flex-shrink: 0;
- width: 100%;
- margin: 0;
- padding: 0;
- border: none;
- min-height: 64px;
- max-height: 1000px;
- z-index: 3;
- background-color: rgb(63,81,181);
- color: rgb(255,255,255);
- box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
- transition-duration: 0.2s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-property: max-height, box-shadow; }
- @media screen and (max-width: 1024px) {
- .mdl-layout__header {
- min-height: 56px; } }
- .mdl-layout--fixed-drawer.is-upgraded:not(.is-small-screen) > .mdl-layout__header {
- margin-left: 240px;
- width: calc(100% - 240px); }
- @media screen and (min-width: 1025px) {
- .mdl-layout--fixed-drawer > .mdl-layout__header .mdl-layout__header-row {
- padding-left: 40px; } }
- .mdl-layout__header > .mdl-layout-icon {
- position: absolute;
- left: 40px;
- top: 16px;
- height: 32px;
- width: 32px;
- overflow: hidden;
- z-index: 3;
- display: block; }
- @media screen and (max-width: 1024px) {
- .mdl-layout__header > .mdl-layout-icon {
- left: 16px;
- top: 12px; } }
- .mdl-layout.has-drawer .mdl-layout__header > .mdl-layout-icon {
- display: none; }
- .mdl-layout__header.is-compact {
- max-height: 64px; }
- @media screen and (max-width: 1024px) {
- .mdl-layout__header.is-compact {
- max-height: 56px; } }
- .mdl-layout__header.is-compact.has-tabs {
- height: 112px; }
- @media screen and (max-width: 1024px) {
- .mdl-layout__header.is-compact.has-tabs {
- min-height: 104px; } }
- @media screen and (max-width: 1024px) {
- .mdl-layout__header {
- display: none; }
- .mdl-layout--fixed-header > .mdl-layout__header {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex; } }
-
-.mdl-layout__header--transparent.mdl-layout__header--transparent {
- background-color: transparent;
- box-shadow: none; }
-
-.mdl-layout__header--seamed {
- box-shadow: none; }
-
-.mdl-layout__header--scroll {
- box-shadow: none; }
-
-.mdl-layout__header--waterfall {
- box-shadow: none;
- overflow: hidden; }
- .mdl-layout__header--waterfall.is-casting-shadow {
- box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); }
- .mdl-layout__header--waterfall.mdl-layout__header--waterfall-hide-top {
- -webkit-justify-content: flex-end;
- -ms-flex-pack: end;
- justify-content: flex-end; }
-
-.mdl-layout__header-row {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-direction: row;
- -ms-flex-direction: row;
- flex-direction: row;
- -webkit-flex-wrap: nowrap;
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap;
- -webkit-flex-shrink: 0;
- -ms-flex-negative: 0;
- flex-shrink: 0;
- box-sizing: border-box;
- -webkit-align-self: stretch;
- -ms-flex-item-align: stretch;
- align-self: stretch;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- height: 64px;
- margin: 0;
- padding: 0 40px 0 80px; }
- .mdl-layout--no-drawer-button .mdl-layout__header-row {
- padding-left: 40px; }
- @media screen and (min-width: 1025px) {
- .mdl-layout--no-desktop-drawer-button .mdl-layout__header-row {
- padding-left: 40px; } }
- @media screen and (max-width: 1024px) {
- .mdl-layout__header-row {
- height: 56px;
- padding: 0 16px 0 72px; }
- .mdl-layout--no-drawer-button .mdl-layout__header-row {
- padding-left: 16px; } }
- .mdl-layout__header-row > * {
- -webkit-flex-shrink: 0;
- -ms-flex-negative: 0;
- flex-shrink: 0; }
- .mdl-layout__header--scroll .mdl-layout__header-row {
- width: 100%; }
- .mdl-layout__header-row .mdl-navigation {
- margin: 0;
- padding: 0;
- height: 64px;
- -webkit-flex-direction: row;
- -ms-flex-direction: row;
- flex-direction: row;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center; }
- @media screen and (max-width: 1024px) {
- .mdl-layout__header-row .mdl-navigation {
- height: 56px; } }
- .mdl-layout__header-row .mdl-navigation__link {
- display: block;
- color: rgb(255,255,255);
- line-height: 64px;
- padding: 0 24px; }
- @media screen and (max-width: 1024px) {
- .mdl-layout__header-row .mdl-navigation__link {
- line-height: 56px;
- padding: 0 16px; } }
-
-.mdl-layout__obfuscator {
- background-color: transparent;
- position: absolute;
- top: 0;
- left: 0;
- height: 100%;
- width: 100%;
- z-index: 4;
- visibility: hidden;
- transition-property: background-color;
- transition-duration: 0.2s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }
- .mdl-layout__obfuscator.is-visible {
- background-color: rgba(0, 0, 0, 0.5);
- visibility: visible; }
- @supports (pointer-events: auto) {
- .mdl-layout__obfuscator {
- background-color: rgba(0, 0, 0, 0.5);
- opacity: 0;
- transition-property: opacity;
- visibility: visible;
- pointer-events: none; }
- .mdl-layout__obfuscator.is-visible {
- pointer-events: auto;
- opacity: 1; } }
-
-.mdl-layout__content {
- -ms-flex: 0 1 auto;
- position: relative;
- display: inline-block;
- overflow-y: auto;
- overflow-x: hidden;
- -webkit-flex-grow: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- z-index: 1;
- -webkit-overflow-scrolling: touch; }
- .mdl-layout--fixed-drawer > .mdl-layout__content {
- margin-left: 240px; }
- .mdl-layout__container.has-scrolling-header .mdl-layout__content {
- overflow: visible; }
- @media screen and (max-width: 1024px) {
- .mdl-layout--fixed-drawer > .mdl-layout__content {
- margin-left: 0; }
- .mdl-layout__container.has-scrolling-header .mdl-layout__content {
- overflow-y: auto;
- overflow-x: hidden; } }
-
-.mdl-layout__tab-bar {
- height: 96px;
- margin: 0;
- width: calc(100% - 112px);
- padding: 0 0 0 56px;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- background-color: rgb(63,81,181);
- overflow-y: hidden;
- overflow-x: scroll; }
- .mdl-layout__tab-bar::-webkit-scrollbar {
- display: none; }
- .mdl-layout--no-drawer-button .mdl-layout__tab-bar {
- padding-left: 16px;
- width: calc(100% - 32px); }
- @media screen and (min-width: 1025px) {
- .mdl-layout--no-desktop-drawer-button .mdl-layout__tab-bar {
- padding-left: 16px;
- width: calc(100% - 32px); } }
- @media screen and (max-width: 1024px) {
- .mdl-layout__tab-bar {
- width: calc(100% - 60px);
- padding: 0 0 0 60px; }
- .mdl-layout--no-drawer-button .mdl-layout__tab-bar {
- width: calc(100% - 8px);
- padding-left: 4px; } }
- .mdl-layout--fixed-tabs .mdl-layout__tab-bar {
- padding: 0;
- overflow: hidden;
- width: 100%; }
-
-.mdl-layout__tab-bar-container {
- position: relative;
- height: 48px;
- width: 100%;
- border: none;
- margin: 0;
- z-index: 2;
- -webkit-flex-grow: 0;
- -ms-flex-positive: 0;
- flex-grow: 0;
- -webkit-flex-shrink: 0;
- -ms-flex-negative: 0;
- flex-shrink: 0;
- overflow: hidden; }
- .mdl-layout__container > .mdl-layout__tab-bar-container {
- position: absolute;
- top: 0;
- left: 0; }
-
-.mdl-layout__tab-bar-button {
- display: inline-block;
- position: absolute;
- top: 0;
- height: 48px;
- width: 56px;
- z-index: 4;
- text-align: center;
- background-color: rgb(63,81,181);
- color: transparent;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none; }
- .mdl-layout--no-desktop-drawer-button .mdl-layout__tab-bar-button,
- .mdl-layout--no-drawer-button .mdl-layout__tab-bar-button {
- width: 16px; }
- .mdl-layout--no-desktop-drawer-button .mdl-layout__tab-bar-button .material-icons,
- .mdl-layout--no-drawer-button .mdl-layout__tab-bar-button .material-icons {
- position: relative;
- left: -4px; }
- @media screen and (max-width: 1024px) {
- .mdl-layout__tab-bar-button {
- width: 60px; } }
- .mdl-layout--fixed-tabs .mdl-layout__tab-bar-button {
- display: none; }
- .mdl-layout__tab-bar-button .material-icons {
- line-height: 48px; }
- .mdl-layout__tab-bar-button.is-active {
- color: rgb(255,255,255); }
-
-.mdl-layout__tab-bar-left-button {
- left: 0; }
-
-.mdl-layout__tab-bar-right-button {
- right: 0; }
-
-.mdl-layout__tab {
- margin: 0;
- border: none;
- padding: 0 24px 0 24px;
- float: left;
- position: relative;
- display: block;
- -webkit-flex-grow: 0;
- -ms-flex-positive: 0;
- flex-grow: 0;
- -webkit-flex-shrink: 0;
- -ms-flex-negative: 0;
- flex-shrink: 0;
- text-decoration: none;
- height: 48px;
- line-height: 48px;
- text-align: center;
- font-weight: 500;
- font-size: 14px;
- text-transform: uppercase;
- color: rgba(255,255,255, 0.6);
- overflow: hidden; }
- @media screen and (max-width: 1024px) {
- .mdl-layout__tab {
- padding: 0 12px 0 12px; } }
- .mdl-layout--fixed-tabs .mdl-layout__tab {
- float: none;
- -webkit-flex-grow: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- padding: 0; }
- .mdl-layout.is-upgraded .mdl-layout__tab.is-active {
- color: rgb(255,255,255); }
- .mdl-layout.is-upgraded .mdl-layout__tab.is-active::after {
- height: 2px;
- width: 100%;
- display: block;
- content: " ";
- bottom: 0;
- left: 0;
- position: absolute;
- background: rgb(255,64,129);
- -webkit-animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards;
- animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards;
- transition: all 1s cubic-bezier(0.4, 0, 1, 1); }
- .mdl-layout__tab .mdl-layout__tab-ripple-container {
- display: block;
- position: absolute;
- height: 100%;
- width: 100%;
- left: 0;
- top: 0;
- z-index: 1;
- overflow: hidden; }
- .mdl-layout__tab .mdl-layout__tab-ripple-container .mdl-ripple {
- background-color: rgb(255,255,255); }
-
-.mdl-layout__tab-panel {
- display: block; }
- .mdl-layout.is-upgraded .mdl-layout__tab-panel {
- display: none; }
- .mdl-layout.is-upgraded .mdl-layout__tab-panel.is-active {
- display: block; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-radio {
- position: relative;
- font-size: 16px;
- line-height: 24px;
- display: inline-block;
- vertical-align: middle;
- box-sizing: border-box;
- height: 24px;
- margin: 0;
- padding-left: 0; }
- .mdl-radio.is-upgraded {
- padding-left: 24px; }
-
-.mdl-radio__button {
- line-height: 24px; }
- .mdl-radio.is-upgraded .mdl-radio__button {
- position: absolute;
- width: 0;
- height: 0;
- margin: 0;
- padding: 0;
- opacity: 0;
- -ms-appearance: none;
- -moz-appearance: none;
- -webkit-appearance: none;
- appearance: none;
- border: none; }
-
-.mdl-radio__outer-circle {
- position: absolute;
- top: 4px;
- left: 0;
- display: inline-block;
- box-sizing: border-box;
- width: 16px;
- height: 16px;
- margin: 0;
- cursor: pointer;
- border: 2px solid rgba(0,0,0, 0.54);
- border-radius: 50%;
- z-index: 2; }
- .mdl-radio.is-checked .mdl-radio__outer-circle {
- border: 2px solid rgb(63,81,181); }
- .mdl-radio__outer-circle fieldset[disabled] .mdl-radio,
- .mdl-radio.is-disabled .mdl-radio__outer-circle {
- border: 2px solid rgba(0,0,0, 0.26);
- cursor: auto; }
-
-.mdl-radio__inner-circle {
- position: absolute;
- z-index: 1;
- margin: 0;
- top: 8px;
- left: 4px;
- box-sizing: border-box;
- width: 8px;
- height: 8px;
- cursor: pointer;
- transition-duration: 0.28s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-property: -webkit-transform;
- transition-property: transform;
- transition-property: transform, -webkit-transform;
- -webkit-transform: scale(0, 0);
- transform: scale(0, 0);
- border-radius: 50%;
- background: rgb(63,81,181); }
- .mdl-radio.is-checked .mdl-radio__inner-circle {
- -webkit-transform: scale(1, 1);
- transform: scale(1, 1); }
- fieldset[disabled] .mdl-radio .mdl-radio__inner-circle,
- .mdl-radio.is-disabled .mdl-radio__inner-circle {
- background: rgba(0,0,0, 0.26);
- cursor: auto; }
- .mdl-radio.is-focused .mdl-radio__inner-circle {
- box-shadow: 0 0 0px 10px rgba(0, 0, 0, 0.1); }
-
-.mdl-radio__label {
- cursor: pointer; }
- fieldset[disabled] .mdl-radio .mdl-radio__label,
- .mdl-radio.is-disabled .mdl-radio__label {
- color: rgba(0,0,0, 0.26);
- cursor: auto; }
-
-.mdl-radio__ripple-container {
- position: absolute;
- z-index: 2;
- top: -9px;
- left: -13px;
- box-sizing: border-box;
- width: 42px;
- height: 42px;
- border-radius: 50%;
- cursor: pointer;
- overflow: hidden;
- -webkit-mask-image: -webkit-radial-gradient(circle, white, black); }
- .mdl-radio__ripple-container .mdl-ripple {
- background: rgb(63,81,181); }
- fieldset[disabled] .mdl-radio .mdl-radio__ripple-container,
- .mdl-radio.is-disabled .mdl-radio__ripple-container {
- cursor: auto; }
- fieldset[disabled] .mdl-radio .mdl-radio__ripple-container .mdl-ripple,
- .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple {
- background: transparent; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-_:-ms-input-placeholder, :root .mdl-slider.mdl-slider.is-upgraded {
- -ms-appearance: none;
- height: 32px;
- margin: 0; }
-
-.mdl-slider {
- width: calc(100% - 40px);
- margin: 0 20px; }
- .mdl-slider.is-upgraded {
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- height: 2px;
- background: transparent;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- outline: 0;
- padding: 0;
- color: rgb(63,81,181);
- -webkit-align-self: center;
- -ms-flex-item-align: center;
- -ms-grid-row-align: center;
- align-self: center;
- z-index: 1;
- cursor: pointer;
- /**************************** Tracks ****************************/
- /**************************** Thumbs ****************************/
- /**************************** 0-value ****************************/
- /**************************** Disabled ****************************/ }
- .mdl-slider.is-upgraded::-moz-focus-outer {
- border: 0; }
- .mdl-slider.is-upgraded::-ms-tooltip {
- display: none; }
- .mdl-slider.is-upgraded::-webkit-slider-runnable-track {
- background: transparent; }
- .mdl-slider.is-upgraded::-moz-range-track {
- background: transparent;
- border: none; }
- .mdl-slider.is-upgraded::-ms-track {
- background: none;
- color: transparent;
- height: 2px;
- width: 100%;
- border: none; }
- .mdl-slider.is-upgraded::-ms-fill-lower {
- padding: 0;
- background: linear-gradient(to right, transparent, transparent 16px, rgb(63,81,181) 16px, rgb(63,81,181) 0); }
- .mdl-slider.is-upgraded::-ms-fill-upper {
- padding: 0;
- background: linear-gradient(to left, transparent, transparent 16px, rgba(0,0,0, 0.26) 16px, rgba(0,0,0, 0.26) 0); }
- .mdl-slider.is-upgraded::-webkit-slider-thumb {
- -webkit-appearance: none;
- width: 12px;
- height: 12px;
- box-sizing: border-box;
- border-radius: 50%;
- background: rgb(63,81,181);
- border: none;
- transition: border 0.18s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.18s cubic-bezier(0.4, 0, 0.2, 1);
- transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), border 0.18s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1);
- transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), border 0.18s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.18s cubic-bezier(0.4, 0, 0.2, 1); }
- .mdl-slider.is-upgraded::-moz-range-thumb {
- -moz-appearance: none;
- width: 12px;
- height: 12px;
- box-sizing: border-box;
- border-radius: 50%;
- background-image: none;
- background: rgb(63,81,181);
- border: none; }
- .mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb {
- box-shadow: 0 0 0 10px rgba(63,81,181, 0.26); }
- .mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb {
- box-shadow: 0 0 0 10px rgba(63,81,181, 0.26); }
- .mdl-slider.is-upgraded:active::-webkit-slider-thumb {
- background-image: none;
- background: rgb(63,81,181);
- -webkit-transform: scale(1.5);
- transform: scale(1.5); }
- .mdl-slider.is-upgraded:active::-moz-range-thumb {
- background-image: none;
- background: rgb(63,81,181);
- transform: scale(1.5); }
- .mdl-slider.is-upgraded::-ms-thumb {
- width: 32px;
- height: 32px;
- border: none;
- border-radius: 50%;
- background: rgb(63,81,181);
- transform: scale(0.375);
- transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.18s cubic-bezier(0.4, 0, 0.2, 1);
- transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1);
- transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.18s cubic-bezier(0.4, 0, 0.2, 1); }
- .mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb {
- background: radial-gradient(circle closest-side, rgb(63,81,181) 0%, rgb(63,81,181) 37.5%, rgba(63,81,181, 0.26) 37.5%, rgba(63,81,181, 0.26) 100%);
- transform: scale(1); }
- .mdl-slider.is-upgraded:active::-ms-thumb {
- background: rgb(63,81,181);
- transform: scale(0.5625); }
- .mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb {
- border: 2px solid rgba(0,0,0, 0.26);
- background: transparent; }
- .mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb {
- border: 2px solid rgba(0,0,0, 0.26);
- background: transparent; }
- .mdl-slider.is-upgraded.is-lowest-value +
-.mdl-slider__background-flex > .mdl-slider__background-upper {
- left: 6px; }
- .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {
- box-shadow: 0 0 0 10px rgba(0,0,0, 0.12);
- background: rgba(0,0,0, 0.12); }
- .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb {
- box-shadow: 0 0 0 10px rgba(0,0,0, 0.12);
- background: rgba(0,0,0, 0.12); }
- .mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb {
- border: 1.6px solid rgba(0,0,0, 0.26);
- -webkit-transform: scale(1.5);
- transform: scale(1.5); }
- .mdl-slider.is-upgraded.is-lowest-value:active +
-.mdl-slider__background-flex > .mdl-slider__background-upper {
- left: 9px; }
- .mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb {
- border: 1.5px solid rgba(0,0,0, 0.26);
- transform: scale(1.5); }
- .mdl-slider.is-upgraded.is-lowest-value::-ms-thumb {
- background: radial-gradient(circle closest-side, transparent 0%, transparent 66.67%, rgba(0,0,0, 0.26) 66.67%, rgba(0,0,0, 0.26) 100%); }
- .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb {
- background: radial-gradient(circle closest-side, rgba(0,0,0, 0.12) 0%, rgba(0,0,0, 0.12) 25%, rgba(0,0,0, 0.26) 25%, rgba(0,0,0, 0.26) 37.5%, rgba(0,0,0, 0.12) 37.5%, rgba(0,0,0, 0.12) 100%);
- transform: scale(1); }
- .mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb {
- transform: scale(0.5625);
- background: radial-gradient(circle closest-side, transparent 0%, transparent 77.78%, rgba(0,0,0, 0.26) 77.78%, rgba(0,0,0, 0.26) 100%); }
- .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower {
- background: transparent; }
- .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-upper {
- margin-left: 6px; }
- .mdl-slider.is-upgraded.is-lowest-value:active::-ms-fill-upper {
- margin-left: 9px; }
- .mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb, .mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb, .mdl-slider.is-upgraded:disabled::-webkit-slider-thumb {
- -webkit-transform: scale(0.667);
- transform: scale(0.667);
- background: rgba(0,0,0, 0.26); }
- .mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb, .mdl-slider.is-upgraded:disabled:active::-moz-range-thumb, .mdl-slider.is-upgraded:disabled::-moz-range-thumb {
- transform: scale(0.667);
- background: rgba(0,0,0, 0.26); }
- .mdl-slider.is-upgraded:disabled +
-.mdl-slider__background-flex > .mdl-slider__background-lower {
- background-color: rgba(0,0,0, 0.26);
- left: -6px; }
- .mdl-slider.is-upgraded:disabled +
-.mdl-slider__background-flex > .mdl-slider__background-upper {
- left: 6px; }
- .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb, .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb, .mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb {
- border: 3px solid rgba(0,0,0, 0.26);
- background: transparent;
- -webkit-transform: scale(0.667);
- transform: scale(0.667); }
- .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb, .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb, .mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb {
- border: 3px solid rgba(0,0,0, 0.26);
- background: transparent;
- transform: scale(0.667); }
- .mdl-slider.is-upgraded.is-lowest-value:disabled:active +
-.mdl-slider__background-flex > .mdl-slider__background-upper {
- left: 6px; }
- .mdl-slider.is-upgraded:disabled:focus::-ms-thumb, .mdl-slider.is-upgraded:disabled:active::-ms-thumb, .mdl-slider.is-upgraded:disabled::-ms-thumb {
- transform: scale(0.25);
- background: rgba(0,0,0, 0.26); }
- .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb, .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb, .mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb {
- transform: scale(0.25);
- background: radial-gradient(circle closest-side, transparent 0%, transparent 50%, rgba(0,0,0, 0.26) 50%, rgba(0,0,0, 0.26) 100%); }
- .mdl-slider.is-upgraded:disabled::-ms-fill-lower {
- margin-right: 6px;
- background: linear-gradient(to right, transparent, transparent 25px, rgba(0,0,0, 0.26) 25px, rgba(0,0,0, 0.26) 0); }
- .mdl-slider.is-upgraded:disabled::-ms-fill-upper {
- margin-left: 6px; }
- .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-fill-upper {
- margin-left: 6px; }
-
-.mdl-slider__ie-container {
- height: 18px;
- overflow: visible;
- border: none;
- margin: none;
- padding: none; }
-
-.mdl-slider__container {
- height: 18px;
- position: relative;
- background: none;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-direction: row;
- -ms-flex-direction: row;
- flex-direction: row; }
-
-.mdl-slider__background-flex {
- background: transparent;
- position: absolute;
- height: 2px;
- width: calc(100% - 52px);
- top: 50%;
- left: 0;
- margin: 0 26px;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- overflow: hidden;
- border: 0;
- padding: 0;
- -webkit-transform: translate(0, -1px);
- transform: translate(0, -1px); }
-
-.mdl-slider__background-lower {
- background: rgb(63,81,181);
- -webkit-flex: 0;
- -ms-flex: 0;
- flex: 0;
- position: relative;
- border: 0;
- padding: 0; }
-
-.mdl-slider__background-upper {
- background: rgba(0,0,0, 0.26);
- -webkit-flex: 0;
- -ms-flex: 0;
- flex: 0;
- position: relative;
- border: 0;
- padding: 0;
- transition: left 0.18s cubic-bezier(0.4, 0, 0.2, 1); }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-snackbar {
- position: fixed;
- bottom: 0;
- left: 50%;
- cursor: default;
- background-color: #323232;
- z-index: 3;
- display: block;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-justify-content: space-between;
- -ms-flex-pack: justify;
- justify-content: space-between;
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- will-change: transform;
- -webkit-transform: translate(0, 80px);
- transform: translate(0, 80px);
- transition: -webkit-transform 0.25s cubic-bezier(0.4, 0, 1, 1);
- transition: transform 0.25s cubic-bezier(0.4, 0, 1, 1);
- transition: transform 0.25s cubic-bezier(0.4, 0, 1, 1), -webkit-transform 0.25s cubic-bezier(0.4, 0, 1, 1);
- pointer-events: none; }
- @media (max-width: 479px) {
- .mdl-snackbar {
- width: 100%;
- left: 0;
- min-height: 48px;
- max-height: 80px; } }
- @media (min-width: 480px) {
- .mdl-snackbar {
- min-width: 288px;
- max-width: 568px;
- border-radius: 2px;
- -webkit-transform: translate(-50%, 80px);
- transform: translate(-50%, 80px); } }
- .mdl-snackbar--active {
- -webkit-transform: translate(0, 0);
- transform: translate(0, 0);
- pointer-events: auto;
- transition: -webkit-transform 0.25s cubic-bezier(0, 0, 0.2, 1);
- transition: transform 0.25s cubic-bezier(0, 0, 0.2, 1);
- transition: transform 0.25s cubic-bezier(0, 0, 0.2, 1), -webkit-transform 0.25s cubic-bezier(0, 0, 0.2, 1); }
- @media (min-width: 480px) {
- .mdl-snackbar--active {
- -webkit-transform: translate(-50%, 0);
- transform: translate(-50%, 0); } }
- .mdl-snackbar__text {
- padding: 14px 12px 14px 24px;
- vertical-align: middle;
- color: white;
- float: left; }
- .mdl-snackbar__action {
- background: transparent;
- border: none;
- color: rgb(255,64,129);
- float: right;
- text-transform: uppercase;
- padding: 14px 24px 14px 12px;
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
- font-size: 14px;
- font-weight: 500;
- text-transform: uppercase;
- line-height: 1;
- letter-spacing: 0;
- overflow: hidden;
- outline: none;
- opacity: 0;
- pointer-events: none;
- cursor: pointer;
- text-decoration: none;
- text-align: center;
- -webkit-align-self: center;
- -ms-flex-item-align: center;
- -ms-grid-row-align: center;
- align-self: center; }
- .mdl-snackbar__action::-moz-focus-inner {
- border: 0; }
- .mdl-snackbar__action:not([aria-hidden]) {
- opacity: 1;
- pointer-events: auto; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-.mdl-spinner {
- display: inline-block;
- position: relative;
- width: 28px;
- height: 28px; }
- .mdl-spinner:not(.is-upgraded).is-active:after {
- content: "Loading..."; }
- .mdl-spinner.is-upgraded.is-active {
- -webkit-animation: mdl-spinner__container-rotate 1568.23529412ms linear infinite;
- animation: mdl-spinner__container-rotate 1568.23529412ms linear infinite; }
-
-@-webkit-keyframes mdl-spinner__container-rotate {
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg); } }
-
-@keyframes mdl-spinner__container-rotate {
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg); } }
-
-.mdl-spinner__layer {
- position: absolute;
- width: 100%;
- height: 100%;
- opacity: 0; }
-
-.mdl-spinner__layer-1 {
- border-color: rgb(66,165,245); }
- .mdl-spinner--single-color .mdl-spinner__layer-1 {
- border-color: rgb(63,81,181); }
- .mdl-spinner.is-active .mdl-spinner__layer-1 {
- -webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
- animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
-
-.mdl-spinner__layer-2 {
- border-color: rgb(244,67,54); }
- .mdl-spinner--single-color .mdl-spinner__layer-2 {
- border-color: rgb(63,81,181); }
- .mdl-spinner.is-active .mdl-spinner__layer-2 {
- -webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
- animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
-
-.mdl-spinner__layer-3 {
- border-color: rgb(253,216,53); }
- .mdl-spinner--single-color .mdl-spinner__layer-3 {
- border-color: rgb(63,81,181); }
- .mdl-spinner.is-active .mdl-spinner__layer-3 {
- -webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
- animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
-
-.mdl-spinner__layer-4 {
- border-color: rgb(76,175,80); }
- .mdl-spinner--single-color .mdl-spinner__layer-4 {
- border-color: rgb(63,81,181); }
- .mdl-spinner.is-active .mdl-spinner__layer-4 {
- -webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
- animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
-
-@-webkit-keyframes mdl-spinner__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); } }
-
-@keyframes mdl-spinner__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); } }
-
-/**
-* HACK: Even though the intention is to have the current .mdl-spinner__layer-N
-* at `opacity: 1`, we set it to `opacity: 0.99` instead since this forces Chrome
-* to do proper subpixel rendering for the elements being animated. This is
-* especially visible in Chrome 39 on Ubuntu 14.04. See:
-*
-* - https://github.com/Polymer/paper-spinner/issues/9
-* - https://code.google.com/p/chromium/issues/detail?id=436255
-*/
-@-webkit-keyframes mdl-spinner__layer-1-fade-in-out {
- from {
- opacity: 0.99; }
- 25% {
- opacity: 0.99; }
- 26% {
- opacity: 0; }
- 89% {
- opacity: 0; }
- 90% {
- opacity: 0.99; }
- 100% {
- opacity: 0.99; } }
-@keyframes mdl-spinner__layer-1-fade-in-out {
- from {
- opacity: 0.99; }
- 25% {
- opacity: 0.99; }
- 26% {
- opacity: 0; }
- 89% {
- opacity: 0; }
- 90% {
- opacity: 0.99; }
- 100% {
- opacity: 0.99; } }
-
-@-webkit-keyframes mdl-spinner__layer-2-fade-in-out {
- from {
- opacity: 0; }
- 15% {
- opacity: 0; }
- 25% {
- opacity: 0.99; }
- 50% {
- opacity: 0.99; }
- 51% {
- opacity: 0; } }
-
-@keyframes mdl-spinner__layer-2-fade-in-out {
- from {
- opacity: 0; }
- 15% {
- opacity: 0; }
- 25% {
- opacity: 0.99; }
- 50% {
- opacity: 0.99; }
- 51% {
- opacity: 0; } }
-
-@-webkit-keyframes mdl-spinner__layer-3-fade-in-out {
- from {
- opacity: 0; }
- 40% {
- opacity: 0; }
- 50% {
- opacity: 0.99; }
- 75% {
- opacity: 0.99; }
- 76% {
- opacity: 0; } }
-
-@keyframes mdl-spinner__layer-3-fade-in-out {
- from {
- opacity: 0; }
- 40% {
- opacity: 0; }
- 50% {
- opacity: 0.99; }
- 75% {
- opacity: 0.99; }
- 76% {
- opacity: 0; } }
-
-@-webkit-keyframes mdl-spinner__layer-4-fade-in-out {
- from {
- opacity: 0; }
- 65% {
- opacity: 0; }
- 75% {
- opacity: 0.99; }
- 90% {
- opacity: 0.99; }
- 100% {
- opacity: 0; } }
-
-@keyframes mdl-spinner__layer-4-fade-in-out {
- from {
- opacity: 0; }
- 65% {
- opacity: 0; }
- 75% {
- opacity: 0.99; }
- 90% {
- opacity: 0.99; }
- 100% {
- opacity: 0; } }
-
-/**
-* Patch the gap that appear between the two adjacent
-* div.mdl-spinner__circle-clipper while the spinner is rotating
-* (appears on Chrome 38, Safari 7.1, and IE 11).
-*
-* Update: the gap no longer appears on Chrome when .mdl-spinner__layer-N's
-* opacity is 0.99, but still does on Safari and IE.
-*/
-.mdl-spinner__gap-patch {
- position: absolute;
- box-sizing: border-box;
- top: 0;
- left: 45%;
- width: 10%;
- height: 100%;
- overflow: hidden;
- border-color: inherit; }
- .mdl-spinner__gap-patch .mdl-spinner__circle {
- width: 1000%;
- left: -450%; }
-
-.mdl-spinner__circle-clipper {
- display: inline-block;
- position: relative;
- width: 50%;
- height: 100%;
- overflow: hidden;
- border-color: inherit; }
- .mdl-spinner__circle-clipper.mdl-spinner__left {
- float: left; }
- .mdl-spinner__circle-clipper.mdl-spinner__right {
- float: right; }
- .mdl-spinner__circle-clipper .mdl-spinner__circle {
- width: 200%; }
-
-.mdl-spinner__circle {
- box-sizing: border-box;
- 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;
- left: 0; }
- .mdl-spinner__left .mdl-spinner__circle {
- border-right-color: transparent !important;
- -webkit-transform: rotate(129deg);
- transform: rotate(129deg); }
- .mdl-spinner.is-active .mdl-spinner__left .mdl-spinner__circle {
- -webkit-animation: mdl-spinner__left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
- animation: mdl-spinner__left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
- .mdl-spinner__right .mdl-spinner__circle {
- left: -100%;
- border-left-color: transparent !important;
- -webkit-transform: rotate(-129deg);
- transform: rotate(-129deg); }
- .mdl-spinner.is-active .mdl-spinner__right .mdl-spinner__circle {
- -webkit-animation: mdl-spinner__right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
- animation: mdl-spinner__right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; }
-
-@-webkit-keyframes mdl-spinner__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); } }
-
-@keyframes mdl-spinner__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 mdl-spinner__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); } }
-
-@keyframes mdl-spinner__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); } }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-switch {
- position: relative;
- z-index: 1;
- vertical-align: middle;
- display: inline-block;
- box-sizing: border-box;
- width: 100%;
- height: 24px;
- margin: 0;
- padding: 0;
- overflow: visible;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none; }
- .mdl-switch.is-upgraded {
- padding-left: 28px; }
-
-.mdl-switch__input {
- line-height: 24px; }
- .mdl-switch.is-upgraded .mdl-switch__input {
- position: absolute;
- width: 0;
- height: 0;
- margin: 0;
- padding: 0;
- opacity: 0;
- -ms-appearance: none;
- -moz-appearance: none;
- -webkit-appearance: none;
- appearance: none;
- border: none; }
-
-.mdl-switch__track {
- background: rgba(0,0,0, 0.26);
- position: absolute;
- left: 0;
- top: 5px;
- height: 14px;
- width: 36px;
- border-radius: 14px;
- cursor: pointer; }
- .mdl-switch.is-checked .mdl-switch__track {
- background: rgba(63,81,181, 0.5); }
- .mdl-switch__track fieldset[disabled] .mdl-switch,
- .mdl-switch.is-disabled .mdl-switch__track {
- background: rgba(0,0,0, 0.12);
- cursor: auto; }
-
-.mdl-switch__thumb {
- background: rgb(250,250,250);
- position: absolute;
- left: 0;
- top: 2px;
- height: 20px;
- width: 20px;
- border-radius: 50%;
- cursor: pointer;
- box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
- transition-duration: 0.28s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-property: left; }
- .mdl-switch.is-checked .mdl-switch__thumb {
- background: rgb(63,81,181);
- left: 16px;
- box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14), 0 3px 3px -2px rgba(0, 0, 0, 0.2), 0 1px 8px 0 rgba(0, 0, 0, 0.12); }
- .mdl-switch__thumb fieldset[disabled] .mdl-switch,
- .mdl-switch.is-disabled .mdl-switch__thumb {
- background: rgb(189,189,189);
- cursor: auto; }
-
-.mdl-switch__focus-helper {
- position: absolute;
- top: 50%;
- left: 50%;
- -webkit-transform: translate(-4px, -4px);
- transform: translate(-4px, -4px);
- display: inline-block;
- box-sizing: border-box;
- width: 8px;
- height: 8px;
- border-radius: 50%;
- background-color: transparent; }
- .mdl-switch.is-focused .mdl-switch__focus-helper {
- box-shadow: 0 0 0px 20px rgba(0, 0, 0, 0.1);
- background-color: rgba(0, 0, 0, 0.1); }
- .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper {
- box-shadow: 0 0 0px 20px rgba(63,81,181, 0.26);
- background-color: rgba(63,81,181, 0.26); }
-
-.mdl-switch__label {
- position: relative;
- cursor: pointer;
- font-size: 16px;
- line-height: 24px;
- margin: 0;
- left: 24px; }
- .mdl-switch__label fieldset[disabled] .mdl-switch,
- .mdl-switch.is-disabled .mdl-switch__label {
- color: rgb(189,189,189);
- cursor: auto; }
-
-.mdl-switch__ripple-container {
- position: absolute;
- z-index: 2;
- top: -12px;
- left: -14px;
- box-sizing: border-box;
- width: 48px;
- height: 48px;
- border-radius: 50%;
- cursor: pointer;
- overflow: hidden;
- -webkit-mask-image: -webkit-radial-gradient(circle, white, black);
- transition-duration: 0.40s;
- transition-timing-function: step-end;
- transition-property: left; }
- .mdl-switch__ripple-container .mdl-ripple {
- background: rgb(63,81,181); }
- .mdl-switch__ripple-container fieldset[disabled] .mdl-switch,
- .mdl-switch.is-disabled .mdl-switch__ripple-container {
- cursor: auto; }
- fieldset[disabled] .mdl-switch .mdl-switch__ripple-container .mdl-ripple,
- .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple {
- background: transparent; }
- .mdl-switch.is-checked .mdl-switch__ripple-container {
- left: 2px; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-.mdl-tabs {
- display: block;
- width: 100%; }
-
-.mdl-tabs__tab-bar {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-direction: row;
- -ms-flex-direction: row;
- flex-direction: row;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- -webkit-align-content: space-between;
- -ms-flex-line-pack: justify;
- align-content: space-between;
- -webkit-align-items: flex-start;
- -ms-flex-align: start;
- align-items: flex-start;
- height: 48px;
- padding: 0 0 0 0;
- margin: 0;
- border-bottom: 1px solid rgb(224,224,224); }
-
-.mdl-tabs__tab {
- margin: 0;
- border: none;
- padding: 0 24px 0 24px;
- float: left;
- position: relative;
- display: block;
- text-decoration: none;
- height: 48px;
- line-height: 48px;
- text-align: center;
- font-weight: 500;
- font-size: 14px;
- text-transform: uppercase;
- color: rgba(0,0,0, 0.54);
- overflow: hidden; }
- .mdl-tabs.is-upgraded .mdl-tabs__tab.is-active {
- color: rgba(0,0,0, 0.87); }
- .mdl-tabs.is-upgraded .mdl-tabs__tab.is-active:after {
- height: 2px;
- width: 100%;
- display: block;
- content: " ";
- bottom: 0px;
- left: 0px;
- position: absolute;
- background: rgb(63,81,181);
- -webkit-animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards;
- animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards;
- transition: all 1s cubic-bezier(0.4, 0, 1, 1); }
- .mdl-tabs__tab .mdl-tabs__ripple-container {
- display: block;
- position: absolute;
- height: 100%;
- width: 100%;
- left: 0px;
- top: 0px;
- z-index: 1;
- overflow: hidden; }
- .mdl-tabs__tab .mdl-tabs__ripple-container .mdl-ripple {
- background: rgb(63,81,181); }
-
-.mdl-tabs__panel {
- display: block; }
- .mdl-tabs.is-upgraded .mdl-tabs__panel {
- display: none; }
- .mdl-tabs.is-upgraded .mdl-tabs__panel.is-active {
- display: block; }
-
-@-webkit-keyframes border-expand {
- 0% {
- opacity: 0;
- width: 0; }
- 100% {
- opacity: 1;
- width: 100%; } }
-
-@keyframes border-expand {
- 0% {
- opacity: 0;
- width: 0; }
- 100% {
- opacity: 1;
- width: 100%; } }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-textfield {
- position: relative;
- font-size: 16px;
- display: inline-block;
- box-sizing: border-box;
- width: 300px;
- max-width: 100%;
- margin: 0;
- padding: 20px 0; }
- .mdl-textfield .mdl-button {
- position: absolute;
- bottom: 20px; }
-
-.mdl-textfield--align-right {
- text-align: right; }
-
-.mdl-textfield--full-width {
- width: 100%; }
-
-.mdl-textfield--expandable {
- min-width: 32px;
- width: auto;
- min-height: 32px; }
- .mdl-textfield--expandable .mdl-button--icon {
- top: 16px; }
-
-.mdl-textfield__input {
- border: none;
- border-bottom: 1px solid rgba(0,0,0, 0.12);
- display: block;
- font-size: 16px;
- font-family: "Helvetica", "Arial", sans-serif;
- margin: 0;
- padding: 4px 0;
- width: 100%;
- background: none;
- text-align: left;
- color: inherit; }
- .mdl-textfield__input[type="number"] {
- -moz-appearance: textfield; }
- .mdl-textfield__input[type="number"]::-webkit-inner-spin-button, .mdl-textfield__input[type="number"]::-webkit-outer-spin-button {
- -webkit-appearance: none;
- margin: 0; }
- .mdl-textfield.is-focused .mdl-textfield__input {
- outline: none; }
- .mdl-textfield.is-invalid .mdl-textfield__input {
- border-color: rgb(213,0,0);
- box-shadow: none; }
- fieldset[disabled] .mdl-textfield .mdl-textfield__input,
- .mdl-textfield.is-disabled .mdl-textfield__input {
- background-color: transparent;
- border-bottom: 1px dotted rgba(0,0,0, 0.12);
- color: rgba(0,0,0, 0.26); }
-
-.mdl-textfield textarea.mdl-textfield__input {
- display: block; }
-
-.mdl-textfield__label {
- bottom: 0;
- color: rgba(0,0,0, 0.26);
- font-size: 16px;
- left: 0;
- right: 0;
- pointer-events: none;
- position: absolute;
- display: block;
- top: 24px;
- width: 100%;
- overflow: hidden;
- white-space: nowrap;
- text-align: left; }
- .mdl-textfield.is-dirty .mdl-textfield__label,
- .mdl-textfield.has-placeholder .mdl-textfield__label {
- visibility: hidden; }
- .mdl-textfield--floating-label .mdl-textfield__label {
- transition-duration: 0.2s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }
- .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {
- transition: none; }
- fieldset[disabled] .mdl-textfield .mdl-textfield__label,
- .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label {
- color: rgba(0,0,0, 0.26); }
- .mdl-textfield--floating-label.is-focused .mdl-textfield__label,
- .mdl-textfield--floating-label.is-dirty .mdl-textfield__label,
- .mdl-textfield--floating-label.has-placeholder .mdl-textfield__label {
- color: rgb(63,81,181);
- font-size: 12px;
- top: 4px;
- visibility: visible; }
- .mdl-textfield--floating-label.is-focused .mdl-textfield__expandable-holder .mdl-textfield__label,
- .mdl-textfield--floating-label.is-dirty .mdl-textfield__expandable-holder .mdl-textfield__label,
- .mdl-textfield--floating-label.has-placeholder .mdl-textfield__expandable-holder .mdl-textfield__label {
- top: -16px; }
- .mdl-textfield--floating-label.is-invalid .mdl-textfield__label {
- color: rgb(213,0,0);
- font-size: 12px; }
- .mdl-textfield__label:after {
- background-color: rgb(63,81,181);
- bottom: 20px;
- content: '';
- height: 2px;
- left: 45%;
- position: absolute;
- transition-duration: 0.2s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- visibility: hidden;
- width: 10px; }
- .mdl-textfield.is-focused .mdl-textfield__label:after {
- left: 0;
- visibility: visible;
- width: 100%; }
- .mdl-textfield.is-invalid .mdl-textfield__label:after {
- background-color: rgb(213,0,0); }
-
-.mdl-textfield__error {
- color: rgb(213,0,0);
- position: absolute;
- font-size: 12px;
- margin-top: 3px;
- visibility: hidden;
- display: block; }
- .mdl-textfield.is-invalid .mdl-textfield__error {
- visibility: visible; }
-
-.mdl-textfield__expandable-holder {
- display: inline-block;
- position: relative;
- margin-left: 32px;
- transition-duration: 0.2s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- display: inline-block;
- max-width: 0.1px; }
- .mdl-textfield.is-focused .mdl-textfield__expandable-holder, .mdl-textfield.is-dirty .mdl-textfield__expandable-holder {
- max-width: 600px; }
- .mdl-textfield__expandable-holder .mdl-textfield__label:after {
- bottom: 0; }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-.mdl-tooltip {
- -webkit-transform: scale(0);
- transform: scale(0);
- -webkit-transform-origin: top center;
- transform-origin: top center;
- z-index: 999;
- background: rgba(97,97,97, 0.9);
- border-radius: 2px;
- color: rgb(255,255,255);
- display: inline-block;
- font-size: 10px;
- font-weight: 500;
- line-height: 14px;
- max-width: 170px;
- position: fixed;
- top: -500px;
- left: -500px;
- padding: 8px;
- text-align: center; }
-
-.mdl-tooltip.is-active {
- -webkit-animation: pulse 200ms cubic-bezier(0, 0, 0.2, 1) forwards;
- animation: pulse 200ms cubic-bezier(0, 0, 0.2, 1) forwards; }
-
-.mdl-tooltip--large {
- line-height: 14px;
- font-size: 14px;
- padding: 16px; }
-
-@-webkit-keyframes pulse {
- 0% {
- -webkit-transform: scale(0);
- transform: scale(0);
- opacity: 0; }
- 50% {
- -webkit-transform: scale(0.99);
- transform: scale(0.99); }
- 100% {
- -webkit-transform: scale(1);
- transform: scale(1);
- opacity: 1;
- visibility: visible; } }
-
-@keyframes pulse {
- 0% {
- -webkit-transform: scale(0);
- transform: scale(0);
- opacity: 0; }
- 50% {
- -webkit-transform: scale(0.99);
- transform: scale(0.99); }
- 100% {
- -webkit-transform: scale(1);
- transform: scale(1);
- opacity: 1;
- visibility: visible; } }
-
-/**
- * Copyright 2015 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.
- */
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-/**
- * Copyright 2015 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.
- */
-/* Typography */
-/* Shadows */
-/* Animations */
-/* Dialog */
-.mdl-shadow--2dp {
- box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); }
-
-.mdl-shadow--3dp {
- box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14), 0 3px 3px -2px rgba(0, 0, 0, 0.2), 0 1px 8px 0 rgba(0, 0, 0, 0.12); }
-
-.mdl-shadow--4dp {
- 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.2); }
-
-.mdl-shadow--6dp {
- box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.2); }
-
-.mdl-shadow--8dp {
- box-shadow: 0 8px 10px 1px 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); }
-
-.mdl-shadow--16dp {
- 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 -5px rgba(0, 0, 0, 0.2); }
-
-.mdl-shadow--24dp {
- box-shadow: 0 9px 46px 8px rgba(0, 0, 0, 0.14), 0 11px 15px -7px rgba(0, 0, 0, 0.12), 0 24px 38px 3px rgba(0, 0, 0, 0.2); }
-
-/**
- * Copyright 2015 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.
- */
-/*
-* NOTE: Some rules here are applied using duplicate selectors.
-* This is on purpose to increase their specificity when applied.
-* For example: `.mdl-cell--1-col-phone.mdl-cell--1-col-phone`
-*/
-/**
- * Copyright 2015 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.
- */
-/*------------------------------------* $CONTENTS
-\*------------------------------------*/
-/**
- * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
- * -----Typography
- * -----Colors
- * -----Textfield
- * -----Switch
- * -----Spinner
- * -----Radio
- * -----Menu
- * -----List
- * -----Layout
- * -----Icon toggles
- * -----Footer
- * -----Column
- * -----Checkbox
- * -----Card
- * -----Button
- * -----Animation
- * -----Progress
- * -----Badge
- * -----Shadows
- * -----Grid
- * -----Data table
- * -----Dialog
- * -----Snackbar
- * -----Tooltip
- * -----Chip
- *
- * Even though all variables have the `!default` directive, most of them
- * should not be changed as they are dependent one another. This can cause
- * visual distortions (like alignment issues) that are hard to track down
- * and fix.
- */
-/* ========== TYPOGRAPHY ========== */
-/* We're splitting fonts into "preferred" and "performance" in order to optimize
- page loading. For important text, such as the body, we want it to load
- immediately and not wait for the web font load, whereas for other sections,
- such as headers and titles, we're OK with things taking a bit longer to load.
- We do have some optional classes and parameters in the mixins, in case you
- definitely want to make sure you're using the preferred font and don't mind
- the performance hit.
- We should be able to improve on this once CSS Font Loading L3 becomes more
- widely available.
-*/
-/* ========== COLORS ========== */
-/**
-*
-* Material design color palettes.
-* @see http://www.google.com/design/spec/style/color.html
-*
-**/
-/**
- * Copyright 2015 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.
- */
-/* ========== Color Palettes ========== */
-/* colors.scss */
-/**
- * Copyright 2015 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.
- */
-/* ========== IMAGES ========== */
-/* ========== Color & Themes ========== */
-/* ========== Typography ========== */
-/* ========== Components ========== */
-/* ========== Standard Buttons ========== */
-/* ========== Icon Toggles ========== */
-/* ========== Radio Buttons ========== */
-/* ========== Ripple effect ========== */
-/* ========== Layout ========== */
-/* ========== Content Tabs ========== */
-/* ========== Checkboxes ========== */
-/* ========== Switches ========== */
-/* ========== Spinner ========== */
-/* ========== Text fields ========== */
-/* ========== Card ========== */
-/* ========== Sliders ========== */
-/* ========== Progress ========== */
-/* ========== List ========== */
-/* ========== Item ========== */
-/* ========== Dropdown menu ========== */
-/* ========== Tooltips ========== */
-/* ========== Footer ========== */
-/* TEXTFIELD */
-/* SWITCH */
-/* SPINNER */
-/* RADIO */
-/* MENU */
-/* LIST */
-/* LAYOUT */
-/* ICON TOGGLE */
-/* FOOTER */
-/*mega-footer*/
-/*mini-footer*/
-/* CHECKBOX */
-/* CARD */
-/* Card dimensions */
-/* Cover image */
-/* BUTTON */
-/**
- *
- * Dimensions
- *
- */
-/* ANIMATION */
-/* PROGRESS */
-/* BADGE */
-/* SHADOWS */
-/* GRID */
-/* DATA TABLE */
-/* DIALOG */
-/* SNACKBAR */
-/* TOOLTIP */
-/* CHIP */
-.mdl-grid {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-flow: row wrap;
- -ms-flex-flow: row wrap;
- flex-flow: row wrap;
- margin: 0 auto 0 auto;
- -webkit-align-items: stretch;
- -ms-flex-align: stretch;
- align-items: stretch; }
- .mdl-grid.mdl-grid--no-spacing {
- padding: 0; }
-
-.mdl-cell {
- box-sizing: border-box; }
-
-.mdl-cell--top {
- -webkit-align-self: flex-start;
- -ms-flex-item-align: start;
- align-self: flex-start; }
-
-.mdl-cell--middle {
- -webkit-align-self: center;
- -ms-flex-item-align: center;
- -ms-grid-row-align: center;
- align-self: center; }
-
-.mdl-cell--bottom {
- -webkit-align-self: flex-end;
- -ms-flex-item-align: end;
- align-self: flex-end; }
-
-.mdl-cell--stretch {
- -webkit-align-self: stretch;
- -ms-flex-item-align: stretch;
- -ms-grid-row-align: stretch;
- align-self: stretch; }
-
-.mdl-grid.mdl-grid--no-spacing > .mdl-cell {
- margin: 0; }
-
-.mdl-cell--order-1 {
- -webkit-order: 1;
- -ms-flex-order: 1;
- order: 1; }
-
-.mdl-cell--order-2 {
- -webkit-order: 2;
- -ms-flex-order: 2;
- order: 2; }
-
-.mdl-cell--order-3 {
- -webkit-order: 3;
- -ms-flex-order: 3;
- order: 3; }
-
-.mdl-cell--order-4 {
- -webkit-order: 4;
- -ms-flex-order: 4;
- order: 4; }
-
-.mdl-cell--order-5 {
- -webkit-order: 5;
- -ms-flex-order: 5;
- order: 5; }
-
-.mdl-cell--order-6 {
- -webkit-order: 6;
- -ms-flex-order: 6;
- order: 6; }
-
-.mdl-cell--order-7 {
- -webkit-order: 7;
- -ms-flex-order: 7;
- order: 7; }
-
-.mdl-cell--order-8 {
- -webkit-order: 8;
- -ms-flex-order: 8;
- order: 8; }
-
-.mdl-cell--order-9 {
- -webkit-order: 9;
- -ms-flex-order: 9;
- order: 9; }
-
-.mdl-cell--order-10 {
- -webkit-order: 10;
- -ms-flex-order: 10;
- order: 10; }
-
-.mdl-cell--order-11 {
- -webkit-order: 11;
- -ms-flex-order: 11;
- order: 11; }
-
-.mdl-cell--order-12 {
- -webkit-order: 12;
- -ms-flex-order: 12;
- order: 12; }
-
-@media (max-width: 479px) {
- .mdl-grid {
- padding: 8px; }
- .mdl-cell {
- margin: 8px;
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell {
- width: 100%; }
- .mdl-cell--hide-phone {
- display: none !important; }
- .mdl-cell--order-1-phone.mdl-cell--order-1-phone {
- -webkit-order: 1;
- -ms-flex-order: 1;
- order: 1; }
- .mdl-cell--order-2-phone.mdl-cell--order-2-phone {
- -webkit-order: 2;
- -ms-flex-order: 2;
- order: 2; }
- .mdl-cell--order-3-phone.mdl-cell--order-3-phone {
- -webkit-order: 3;
- -ms-flex-order: 3;
- order: 3; }
- .mdl-cell--order-4-phone.mdl-cell--order-4-phone {
- -webkit-order: 4;
- -ms-flex-order: 4;
- order: 4; }
- .mdl-cell--order-5-phone.mdl-cell--order-5-phone {
- -webkit-order: 5;
- -ms-flex-order: 5;
- order: 5; }
- .mdl-cell--order-6-phone.mdl-cell--order-6-phone {
- -webkit-order: 6;
- -ms-flex-order: 6;
- order: 6; }
- .mdl-cell--order-7-phone.mdl-cell--order-7-phone {
- -webkit-order: 7;
- -ms-flex-order: 7;
- order: 7; }
- .mdl-cell--order-8-phone.mdl-cell--order-8-phone {
- -webkit-order: 8;
- -ms-flex-order: 8;
- order: 8; }
- .mdl-cell--order-9-phone.mdl-cell--order-9-phone {
- -webkit-order: 9;
- -ms-flex-order: 9;
- order: 9; }
- .mdl-cell--order-10-phone.mdl-cell--order-10-phone {
- -webkit-order: 10;
- -ms-flex-order: 10;
- order: 10; }
- .mdl-cell--order-11-phone.mdl-cell--order-11-phone {
- -webkit-order: 11;
- -ms-flex-order: 11;
- order: 11; }
- .mdl-cell--order-12-phone.mdl-cell--order-12-phone {
- -webkit-order: 12;
- -ms-flex-order: 12;
- order: 12; }
- .mdl-cell--1-col,
- .mdl-cell--1-col-phone.mdl-cell--1-col-phone {
- width: calc(25% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--1-col, .mdl-grid--no-spacing >
- .mdl-cell--1-col-phone.mdl-cell--1-col-phone {
- width: 25%; }
- .mdl-cell--2-col,
- .mdl-cell--2-col-phone.mdl-cell--2-col-phone {
- width: calc(50% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--2-col, .mdl-grid--no-spacing >
- .mdl-cell--2-col-phone.mdl-cell--2-col-phone {
- width: 50%; }
- .mdl-cell--3-col,
- .mdl-cell--3-col-phone.mdl-cell--3-col-phone {
- width: calc(75% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--3-col, .mdl-grid--no-spacing >
- .mdl-cell--3-col-phone.mdl-cell--3-col-phone {
- width: 75%; }
- .mdl-cell--4-col,
- .mdl-cell--4-col-phone.mdl-cell--4-col-phone {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--4-col, .mdl-grid--no-spacing >
- .mdl-cell--4-col-phone.mdl-cell--4-col-phone {
- width: 100%; }
- .mdl-cell--5-col,
- .mdl-cell--5-col-phone.mdl-cell--5-col-phone {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--5-col, .mdl-grid--no-spacing >
- .mdl-cell--5-col-phone.mdl-cell--5-col-phone {
- width: 100%; }
- .mdl-cell--6-col,
- .mdl-cell--6-col-phone.mdl-cell--6-col-phone {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--6-col, .mdl-grid--no-spacing >
- .mdl-cell--6-col-phone.mdl-cell--6-col-phone {
- width: 100%; }
- .mdl-cell--7-col,
- .mdl-cell--7-col-phone.mdl-cell--7-col-phone {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--7-col, .mdl-grid--no-spacing >
- .mdl-cell--7-col-phone.mdl-cell--7-col-phone {
- width: 100%; }
- .mdl-cell--8-col,
- .mdl-cell--8-col-phone.mdl-cell--8-col-phone {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--8-col, .mdl-grid--no-spacing >
- .mdl-cell--8-col-phone.mdl-cell--8-col-phone {
- width: 100%; }
- .mdl-cell--9-col,
- .mdl-cell--9-col-phone.mdl-cell--9-col-phone {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--9-col, .mdl-grid--no-spacing >
- .mdl-cell--9-col-phone.mdl-cell--9-col-phone {
- width: 100%; }
- .mdl-cell--10-col,
- .mdl-cell--10-col-phone.mdl-cell--10-col-phone {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--10-col, .mdl-grid--no-spacing >
- .mdl-cell--10-col-phone.mdl-cell--10-col-phone {
- width: 100%; }
- .mdl-cell--11-col,
- .mdl-cell--11-col-phone.mdl-cell--11-col-phone {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--11-col, .mdl-grid--no-spacing >
- .mdl-cell--11-col-phone.mdl-cell--11-col-phone {
- width: 100%; }
- .mdl-cell--12-col,
- .mdl-cell--12-col-phone.mdl-cell--12-col-phone {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--12-col, .mdl-grid--no-spacing >
- .mdl-cell--12-col-phone.mdl-cell--12-col-phone {
- width: 100%; }
- .mdl-cell--1-offset,
- .mdl-cell--1-offset-phone.mdl-cell--1-offset-phone {
- margin-left: calc(25% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--1-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--1-offset-phone.mdl-cell--1-offset-phone {
- margin-left: 25%; }
- .mdl-cell--2-offset,
- .mdl-cell--2-offset-phone.mdl-cell--2-offset-phone {
- margin-left: calc(50% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--2-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--2-offset-phone.mdl-cell--2-offset-phone {
- margin-left: 50%; }
- .mdl-cell--3-offset,
- .mdl-cell--3-offset-phone.mdl-cell--3-offset-phone {
- margin-left: calc(75% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--3-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--3-offset-phone.mdl-cell--3-offset-phone {
- margin-left: 75%; } }
-
-@media (min-width: 480px) and (max-width: 839px) {
- .mdl-grid {
- padding: 8px; }
- .mdl-cell {
- margin: 8px;
- width: calc(50% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell {
- width: 50%; }
- .mdl-cell--hide-tablet {
- display: none !important; }
- .mdl-cell--order-1-tablet.mdl-cell--order-1-tablet {
- -webkit-order: 1;
- -ms-flex-order: 1;
- order: 1; }
- .mdl-cell--order-2-tablet.mdl-cell--order-2-tablet {
- -webkit-order: 2;
- -ms-flex-order: 2;
- order: 2; }
- .mdl-cell--order-3-tablet.mdl-cell--order-3-tablet {
- -webkit-order: 3;
- -ms-flex-order: 3;
- order: 3; }
- .mdl-cell--order-4-tablet.mdl-cell--order-4-tablet {
- -webkit-order: 4;
- -ms-flex-order: 4;
- order: 4; }
- .mdl-cell--order-5-tablet.mdl-cell--order-5-tablet {
- -webkit-order: 5;
- -ms-flex-order: 5;
- order: 5; }
- .mdl-cell--order-6-tablet.mdl-cell--order-6-tablet {
- -webkit-order: 6;
- -ms-flex-order: 6;
- order: 6; }
- .mdl-cell--order-7-tablet.mdl-cell--order-7-tablet {
- -webkit-order: 7;
- -ms-flex-order: 7;
- order: 7; }
- .mdl-cell--order-8-tablet.mdl-cell--order-8-tablet {
- -webkit-order: 8;
- -ms-flex-order: 8;
- order: 8; }
- .mdl-cell--order-9-tablet.mdl-cell--order-9-tablet {
- -webkit-order: 9;
- -ms-flex-order: 9;
- order: 9; }
- .mdl-cell--order-10-tablet.mdl-cell--order-10-tablet {
- -webkit-order: 10;
- -ms-flex-order: 10;
- order: 10; }
- .mdl-cell--order-11-tablet.mdl-cell--order-11-tablet {
- -webkit-order: 11;
- -ms-flex-order: 11;
- order: 11; }
- .mdl-cell--order-12-tablet.mdl-cell--order-12-tablet {
- -webkit-order: 12;
- -ms-flex-order: 12;
- order: 12; }
- .mdl-cell--1-col,
- .mdl-cell--1-col-tablet.mdl-cell--1-col-tablet {
- width: calc(12.5% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--1-col, .mdl-grid--no-spacing >
- .mdl-cell--1-col-tablet.mdl-cell--1-col-tablet {
- width: 12.5%; }
- .mdl-cell--2-col,
- .mdl-cell--2-col-tablet.mdl-cell--2-col-tablet {
- width: calc(25% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--2-col, .mdl-grid--no-spacing >
- .mdl-cell--2-col-tablet.mdl-cell--2-col-tablet {
- width: 25%; }
- .mdl-cell--3-col,
- .mdl-cell--3-col-tablet.mdl-cell--3-col-tablet {
- width: calc(37.5% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--3-col, .mdl-grid--no-spacing >
- .mdl-cell--3-col-tablet.mdl-cell--3-col-tablet {
- width: 37.5%; }
- .mdl-cell--4-col,
- .mdl-cell--4-col-tablet.mdl-cell--4-col-tablet {
- width: calc(50% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--4-col, .mdl-grid--no-spacing >
- .mdl-cell--4-col-tablet.mdl-cell--4-col-tablet {
- width: 50%; }
- .mdl-cell--5-col,
- .mdl-cell--5-col-tablet.mdl-cell--5-col-tablet {
- width: calc(62.5% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--5-col, .mdl-grid--no-spacing >
- .mdl-cell--5-col-tablet.mdl-cell--5-col-tablet {
- width: 62.5%; }
- .mdl-cell--6-col,
- .mdl-cell--6-col-tablet.mdl-cell--6-col-tablet {
- width: calc(75% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--6-col, .mdl-grid--no-spacing >
- .mdl-cell--6-col-tablet.mdl-cell--6-col-tablet {
- width: 75%; }
- .mdl-cell--7-col,
- .mdl-cell--7-col-tablet.mdl-cell--7-col-tablet {
- width: calc(87.5% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--7-col, .mdl-grid--no-spacing >
- .mdl-cell--7-col-tablet.mdl-cell--7-col-tablet {
- width: 87.5%; }
- .mdl-cell--8-col,
- .mdl-cell--8-col-tablet.mdl-cell--8-col-tablet {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--8-col, .mdl-grid--no-spacing >
- .mdl-cell--8-col-tablet.mdl-cell--8-col-tablet {
- width: 100%; }
- .mdl-cell--9-col,
- .mdl-cell--9-col-tablet.mdl-cell--9-col-tablet {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--9-col, .mdl-grid--no-spacing >
- .mdl-cell--9-col-tablet.mdl-cell--9-col-tablet {
- width: 100%; }
- .mdl-cell--10-col,
- .mdl-cell--10-col-tablet.mdl-cell--10-col-tablet {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--10-col, .mdl-grid--no-spacing >
- .mdl-cell--10-col-tablet.mdl-cell--10-col-tablet {
- width: 100%; }
- .mdl-cell--11-col,
- .mdl-cell--11-col-tablet.mdl-cell--11-col-tablet {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--11-col, .mdl-grid--no-spacing >
- .mdl-cell--11-col-tablet.mdl-cell--11-col-tablet {
- width: 100%; }
- .mdl-cell--12-col,
- .mdl-cell--12-col-tablet.mdl-cell--12-col-tablet {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--12-col, .mdl-grid--no-spacing >
- .mdl-cell--12-col-tablet.mdl-cell--12-col-tablet {
- width: 100%; }
- .mdl-cell--1-offset,
- .mdl-cell--1-offset-tablet.mdl-cell--1-offset-tablet {
- margin-left: calc(12.5% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--1-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--1-offset-tablet.mdl-cell--1-offset-tablet {
- margin-left: 12.5%; }
- .mdl-cell--2-offset,
- .mdl-cell--2-offset-tablet.mdl-cell--2-offset-tablet {
- margin-left: calc(25% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--2-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--2-offset-tablet.mdl-cell--2-offset-tablet {
- margin-left: 25%; }
- .mdl-cell--3-offset,
- .mdl-cell--3-offset-tablet.mdl-cell--3-offset-tablet {
- margin-left: calc(37.5% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--3-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--3-offset-tablet.mdl-cell--3-offset-tablet {
- margin-left: 37.5%; }
- .mdl-cell--4-offset,
- .mdl-cell--4-offset-tablet.mdl-cell--4-offset-tablet {
- margin-left: calc(50% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--4-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--4-offset-tablet.mdl-cell--4-offset-tablet {
- margin-left: 50%; }
- .mdl-cell--5-offset,
- .mdl-cell--5-offset-tablet.mdl-cell--5-offset-tablet {
- margin-left: calc(62.5% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--5-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--5-offset-tablet.mdl-cell--5-offset-tablet {
- margin-left: 62.5%; }
- .mdl-cell--6-offset,
- .mdl-cell--6-offset-tablet.mdl-cell--6-offset-tablet {
- margin-left: calc(75% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--6-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--6-offset-tablet.mdl-cell--6-offset-tablet {
- margin-left: 75%; }
- .mdl-cell--7-offset,
- .mdl-cell--7-offset-tablet.mdl-cell--7-offset-tablet {
- margin-left: calc(87.5% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--7-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--7-offset-tablet.mdl-cell--7-offset-tablet {
- margin-left: 87.5%; } }
-
-@media (min-width: 840px) {
- .mdl-grid {
- padding: 8px; }
- .mdl-cell {
- margin: 8px;
- width: calc(33.3333333333% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell {
- width: 33.3333333333%; }
- .mdl-cell--hide-desktop {
- display: none !important; }
- .mdl-cell--order-1-desktop.mdl-cell--order-1-desktop {
- -webkit-order: 1;
- -ms-flex-order: 1;
- order: 1; }
- .mdl-cell--order-2-desktop.mdl-cell--order-2-desktop {
- -webkit-order: 2;
- -ms-flex-order: 2;
- order: 2; }
- .mdl-cell--order-3-desktop.mdl-cell--order-3-desktop {
- -webkit-order: 3;
- -ms-flex-order: 3;
- order: 3; }
- .mdl-cell--order-4-desktop.mdl-cell--order-4-desktop {
- -webkit-order: 4;
- -ms-flex-order: 4;
- order: 4; }
- .mdl-cell--order-5-desktop.mdl-cell--order-5-desktop {
- -webkit-order: 5;
- -ms-flex-order: 5;
- order: 5; }
- .mdl-cell--order-6-desktop.mdl-cell--order-6-desktop {
- -webkit-order: 6;
- -ms-flex-order: 6;
- order: 6; }
- .mdl-cell--order-7-desktop.mdl-cell--order-7-desktop {
- -webkit-order: 7;
- -ms-flex-order: 7;
- order: 7; }
- .mdl-cell--order-8-desktop.mdl-cell--order-8-desktop {
- -webkit-order: 8;
- -ms-flex-order: 8;
- order: 8; }
- .mdl-cell--order-9-desktop.mdl-cell--order-9-desktop {
- -webkit-order: 9;
- -ms-flex-order: 9;
- order: 9; }
- .mdl-cell--order-10-desktop.mdl-cell--order-10-desktop {
- -webkit-order: 10;
- -ms-flex-order: 10;
- order: 10; }
- .mdl-cell--order-11-desktop.mdl-cell--order-11-desktop {
- -webkit-order: 11;
- -ms-flex-order: 11;
- order: 11; }
- .mdl-cell--order-12-desktop.mdl-cell--order-12-desktop {
- -webkit-order: 12;
- -ms-flex-order: 12;
- order: 12; }
- .mdl-cell--1-col,
- .mdl-cell--1-col-desktop.mdl-cell--1-col-desktop {
- width: calc(8.3333333333% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--1-col, .mdl-grid--no-spacing >
- .mdl-cell--1-col-desktop.mdl-cell--1-col-desktop {
- width: 8.3333333333%; }
- .mdl-cell--2-col,
- .mdl-cell--2-col-desktop.mdl-cell--2-col-desktop {
- width: calc(16.6666666667% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--2-col, .mdl-grid--no-spacing >
- .mdl-cell--2-col-desktop.mdl-cell--2-col-desktop {
- width: 16.6666666667%; }
- .mdl-cell--3-col,
- .mdl-cell--3-col-desktop.mdl-cell--3-col-desktop {
- width: calc(25% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--3-col, .mdl-grid--no-spacing >
- .mdl-cell--3-col-desktop.mdl-cell--3-col-desktop {
- width: 25%; }
- .mdl-cell--4-col,
- .mdl-cell--4-col-desktop.mdl-cell--4-col-desktop {
- width: calc(33.3333333333% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--4-col, .mdl-grid--no-spacing >
- .mdl-cell--4-col-desktop.mdl-cell--4-col-desktop {
- width: 33.3333333333%; }
- .mdl-cell--5-col,
- .mdl-cell--5-col-desktop.mdl-cell--5-col-desktop {
- width: calc(41.6666666667% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--5-col, .mdl-grid--no-spacing >
- .mdl-cell--5-col-desktop.mdl-cell--5-col-desktop {
- width: 41.6666666667%; }
- .mdl-cell--6-col,
- .mdl-cell--6-col-desktop.mdl-cell--6-col-desktop {
- width: calc(50% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--6-col, .mdl-grid--no-spacing >
- .mdl-cell--6-col-desktop.mdl-cell--6-col-desktop {
- width: 50%; }
- .mdl-cell--7-col,
- .mdl-cell--7-col-desktop.mdl-cell--7-col-desktop {
- width: calc(58.3333333333% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--7-col, .mdl-grid--no-spacing >
- .mdl-cell--7-col-desktop.mdl-cell--7-col-desktop {
- width: 58.3333333333%; }
- .mdl-cell--8-col,
- .mdl-cell--8-col-desktop.mdl-cell--8-col-desktop {
- width: calc(66.6666666667% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--8-col, .mdl-grid--no-spacing >
- .mdl-cell--8-col-desktop.mdl-cell--8-col-desktop {
- width: 66.6666666667%; }
- .mdl-cell--9-col,
- .mdl-cell--9-col-desktop.mdl-cell--9-col-desktop {
- width: calc(75% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--9-col, .mdl-grid--no-spacing >
- .mdl-cell--9-col-desktop.mdl-cell--9-col-desktop {
- width: 75%; }
- .mdl-cell--10-col,
- .mdl-cell--10-col-desktop.mdl-cell--10-col-desktop {
- width: calc(83.3333333333% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--10-col, .mdl-grid--no-spacing >
- .mdl-cell--10-col-desktop.mdl-cell--10-col-desktop {
- width: 83.3333333333%; }
- .mdl-cell--11-col,
- .mdl-cell--11-col-desktop.mdl-cell--11-col-desktop {
- width: calc(91.6666666667% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--11-col, .mdl-grid--no-spacing >
- .mdl-cell--11-col-desktop.mdl-cell--11-col-desktop {
- width: 91.6666666667%; }
- .mdl-cell--12-col,
- .mdl-cell--12-col-desktop.mdl-cell--12-col-desktop {
- width: calc(100% - 16px); }
- .mdl-grid--no-spacing > .mdl-cell--12-col, .mdl-grid--no-spacing >
- .mdl-cell--12-col-desktop.mdl-cell--12-col-desktop {
- width: 100%; }
- .mdl-cell--1-offset,
- .mdl-cell--1-offset-desktop.mdl-cell--1-offset-desktop {
- margin-left: calc(8.3333333333% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--1-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--1-offset-desktop.mdl-cell--1-offset-desktop {
- margin-left: 8.3333333333%; }
- .mdl-cell--2-offset,
- .mdl-cell--2-offset-desktop.mdl-cell--2-offset-desktop {
- margin-left: calc(16.6666666667% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--2-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--2-offset-desktop.mdl-cell--2-offset-desktop {
- margin-left: 16.6666666667%; }
- .mdl-cell--3-offset,
- .mdl-cell--3-offset-desktop.mdl-cell--3-offset-desktop {
- margin-left: calc(25% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--3-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--3-offset-desktop.mdl-cell--3-offset-desktop {
- margin-left: 25%; }
- .mdl-cell--4-offset,
- .mdl-cell--4-offset-desktop.mdl-cell--4-offset-desktop {
- margin-left: calc(33.3333333333% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--4-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--4-offset-desktop.mdl-cell--4-offset-desktop {
- margin-left: 33.3333333333%; }
- .mdl-cell--5-offset,
- .mdl-cell--5-offset-desktop.mdl-cell--5-offset-desktop {
- margin-left: calc(41.6666666667% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--5-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--5-offset-desktop.mdl-cell--5-offset-desktop {
- margin-left: 41.6666666667%; }
- .mdl-cell--6-offset,
- .mdl-cell--6-offset-desktop.mdl-cell--6-offset-desktop {
- margin-left: calc(50% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--6-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--6-offset-desktop.mdl-cell--6-offset-desktop {
- margin-left: 50%; }
- .mdl-cell--7-offset,
- .mdl-cell--7-offset-desktop.mdl-cell--7-offset-desktop {
- margin-left: calc(58.3333333333% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--7-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--7-offset-desktop.mdl-cell--7-offset-desktop {
- margin-left: 58.3333333333%; }
- .mdl-cell--8-offset,
- .mdl-cell--8-offset-desktop.mdl-cell--8-offset-desktop {
- margin-left: calc(66.6666666667% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--8-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--8-offset-desktop.mdl-cell--8-offset-desktop {
- margin-left: 66.6666666667%; }
- .mdl-cell--9-offset,
- .mdl-cell--9-offset-desktop.mdl-cell--9-offset-desktop {
- margin-left: calc(75% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--9-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--9-offset-desktop.mdl-cell--9-offset-desktop {
- margin-left: 75%; }
- .mdl-cell--10-offset,
- .mdl-cell--10-offset-desktop.mdl-cell--10-offset-desktop {
- margin-left: calc(83.3333333333% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--10-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--10-offset-desktop.mdl-cell--10-offset-desktop {
- margin-left: 83.3333333333%; }
- .mdl-cell--11-offset,
- .mdl-cell--11-offset-desktop.mdl-cell--11-offset-desktop {
- margin-left: calc(91.6666666667% + 8px); }
- .mdl-grid.mdl-grid--no-spacing > .mdl-cell--11-offset, .mdl-grid.mdl-grid--no-spacing >
- .mdl-cell--11-offset-desktop.mdl-cell--11-offset-desktop {
- margin-left: 91.6666666667%; } }
diff --git a/src/api/admin.js b/src/api/admin.js
new file mode 100644
index 0000000000..e6b6994597
--- /dev/null
+++ b/src/api/admin.js
@@ -0,0 +1,36 @@
+'use strict';
+
+const meta = require('../meta');
+const analytics = require('../analytics');
+const privileges = require('../privileges');
+
+const adminApi = module.exports;
+
+adminApi.updateSetting = async (caller, { setting, value }) => {
+ const ok = await privileges.admin.can('admin:settings', caller.uid);
+ if (!ok) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ await meta.configs.set(setting, value);
+};
+
+adminApi.getAnalyticsKeys = async () => {
+ const keys = await analytics.getKeys();
+
+ // Sort keys alphabetically
+ return keys.sort((a, b) => (a < b ? -1 : 1));
+};
+
+adminApi.getAnalyticsData = async (caller, { set, until, amount, units }) => {
+ // Default returns views from past 24 hours, by hour
+ if (!amount) {
+ if (units === 'days') {
+ amount = 30;
+ } else {
+ amount = 24;
+ }
+ }
+ const getStats = units === 'days' ? analytics.getDailyStatsForSet : analytics.getHourlyStatsForSet;
+ return await getStats(`analytics:${set}`, parseInt(until, 10) || Date.now(), amount);
+};
diff --git a/src/api/categories.js b/src/api/categories.js
index 2871b6cf9d..c37e287221 100644
--- a/src/api/categories.js
+++ b/src/api/categories.js
@@ -8,6 +8,13 @@ const privileges = require('../privileges');
const categoriesAPI = module.exports;
+const hasAdminPrivilege = async (uid, privilege = 'categories') => {
+ const ok = await privileges.admin.can(`admin:${privilege}`, uid);
+ if (!ok) {
+ throw new Error('[[error:no-privileges]]');
+ }
+};
+
categoriesAPI.get = async function (caller, data) {
const [userPrivileges, category] = await Promise.all([
privileges.categories.get(data.cid, caller.uid),
@@ -21,31 +28,42 @@ categoriesAPI.get = async function (caller, data) {
};
categoriesAPI.create = async function (caller, data) {
+ await hasAdminPrivilege(caller.uid);
+
const response = await categories.create(data);
const categoryObjs = await categories.getCategories([response.cid], caller.uid);
return categoryObjs[0];
};
categoriesAPI.update = async function (caller, data) {
+ await hasAdminPrivilege(caller.uid);
if (!data) {
throw new Error('[[error:invalid-data]]');
}
- await categories.update(data);
+ const { cid, values } = data;
+
+ const payload = {};
+ payload[cid] = values;
+ await categories.update(payload);
};
-categoriesAPI.delete = async function (caller, data) {
- const name = await categories.getCategoryField(data.cid, 'name');
- await categories.purge(data.cid, caller.uid);
+categoriesAPI.delete = async function (caller, { cid }) {
+ await hasAdminPrivilege(caller.uid);
+
+ const name = await categories.getCategoryField(cid, 'name');
+ await categories.purge(cid, caller.uid);
await events.log({
type: 'category-purge',
uid: caller.uid,
ip: caller.ip,
- cid: data.cid,
+ cid: cid,
name: name,
});
};
-categoriesAPI.getPrivileges = async (caller, cid) => {
+categoriesAPI.getPrivileges = async (caller, { cid }) => {
+ await hasAdminPrivilege(caller.uid, 'privileges');
+
let responsePayload;
if (cid === 'admin') {
@@ -60,6 +78,8 @@ categoriesAPI.getPrivileges = async (caller, cid) => {
};
categoriesAPI.setPrivilege = async (caller, data) => {
+ await hasAdminPrivilege(caller.uid, 'privileges');
+
const [userExists, groupExists] = await Promise.all([
user.exists(data.member),
groups.exists(data.member),
@@ -100,3 +120,10 @@ categoriesAPI.setPrivilege = async (caller, data) => {
target: data.member,
});
};
+
+categoriesAPI.setModerator = async (caller, { cid, member, set }) => {
+ await hasAdminPrivilege(caller.uid, 'admins-mods');
+
+ const privilegeList = await privileges.categories.getUserPrivilegeList();
+ await categoriesAPI.setPrivilege(caller, { cid, privilege: privilegeList, member, set });
+};
diff --git a/src/api/chats.js b/src/api/chats.js
index 67d2eabe5a..9f320d764e 100644
--- a/src/api/chats.js
+++ b/src/api/chats.js
@@ -5,9 +5,10 @@ const validator = require('validator');
const user = require('../user');
const meta = require('../meta');
const messaging = require('../messaging');
+const notifications = require('../notifications');
const plugins = require('../plugins');
+const privileges = require('../privileges');
-// const websockets = require('../socket.io');
const socketHelpers = require('../socket.io/helpers');
const chatsAPI = module.exports;
@@ -23,11 +24,21 @@ function rateLimitExceeded(caller) {
return false;
}
+chatsAPI.list = async (caller, { page, perPage }) => {
+ const start = Math.max(0, page - 1) * perPage;
+ const stop = start + perPage;
+ const { rooms } = await messaging.getRecentChats(caller.uid, caller.uid, start, stop);
+
+ return { rooms };
+};
+
chatsAPI.create = async function (caller, data) {
if (rateLimitExceeded(caller)) {
throw new Error('[[error:too-many-messages]]');
}
-
+ if (!data) {
+ throw new Error('[[error:invalid-data]]');
+ }
if (!data.uids || !Array.isArray(data.uids)) {
throw new Error(`[[error:wrong-parameter-type, uids, ${typeof data.uids}, Array]]`);
}
@@ -38,10 +49,15 @@ chatsAPI.create = async function (caller, data) {
return await messaging.getRoomData(roomId);
};
+chatsAPI.get = async (caller, { uid, roomId }) => await messaging.loadRoom(caller.uid, { uid, roomId });
+
chatsAPI.post = async (caller, data) => {
if (rateLimitExceeded(caller)) {
throw new Error('[[error:too-many-messages]]');
}
+ if (!data || !data.roomId || !caller.uid) {
+ throw new Error('[[error:invalid-data]]');
+ }
({ data } = await plugins.hooks.fire('filter:messaging.send', {
data,
@@ -63,6 +79,9 @@ chatsAPI.post = async (caller, data) => {
};
chatsAPI.rename = async (caller, data) => {
+ if (!data || !data.roomId || !data.name) {
+ throw new Error('[[error:invalid-data]]');
+ }
await messaging.renameRoom(caller.uid, data.roomId, data.name);
const uids = await messaging.getUidsInRoom(data.roomId, 0, -1);
const eventData = { roomId: data.roomId, newName: validator.escape(String(data.name)) };
@@ -73,11 +92,45 @@ chatsAPI.rename = async (caller, data) => {
});
};
+chatsAPI.mark = async (caller, data) => {
+ if (!caller.uid || !data || !data.roomId) {
+ throw new Error('[[error:invalid-data]]');
+ }
+ const { roomId, state } = data;
+ if (state) {
+ await messaging.markUnread([caller.uid], roomId);
+ } else {
+ await messaging.markRead(caller.uid, roomId);
+ socketHelpers.emitToUids('event:chats.markedAsRead', { roomId: roomId }, [caller.uid]);
+
+ const uidsInRoom = await messaging.getUidsInRoom(roomId, 0, -1);
+ if (!uidsInRoom.includes(String(caller.uid))) {
+ return;
+ }
+
+ // Mark notification read
+ const nids = uidsInRoom.filter(uid => parseInt(uid, 10) !== caller.uid)
+ .map(uid => `chat_${uid}_${roomId}`);
+
+ await notifications.markReadMultiple(nids, caller.uid);
+ await user.notifications.pushCount(caller.uid);
+ }
+
+ socketHelpers.emitToUids('event:chats.mark', { roomId, state }, [caller.uid]);
+ messaging.pushUnreadCount(caller.uid);
+
+ return messaging.loadRoom(caller.uid, { roomId });
+};
+
chatsAPI.users = async (caller, data) => {
- const [isOwner, users] = await Promise.all([
+ const [isOwner, isUserInRoom, users] = await Promise.all([
messaging.isRoomOwner(caller.uid, data.roomId),
+ messaging.isUserInRoom(caller.uid, data.roomId),
messaging.getUsersInRoom(data.roomId, 0, -1),
]);
+ if (!isUserInRoom) {
+ throw new Error('[[error:no-privileges]]');
+ }
users.forEach((user) => {
user.canKick = (parseInt(user.uid, 10) !== parseInt(caller.uid, 10)) && isOwner;
});
@@ -85,6 +138,14 @@ chatsAPI.users = async (caller, data) => {
};
chatsAPI.invite = async (caller, data) => {
+ const canChat = await privileges.global.can('chat', caller.uid);
+ if (!canChat) {
+ throw new Error('[[error:no-privileges]]');
+ }
+ if (!data || !data.roomId) {
+ throw new Error('[[error:invalid-data]]');
+ }
+
const userCount = await messaging.getUserCountInRoom(data.roomId);
const maxUsers = meta.config.maximumUsersInChatRoom;
if (maxUsers && userCount >= maxUsers) {
@@ -103,6 +164,9 @@ chatsAPI.invite = async (caller, data) => {
};
chatsAPI.kick = async (caller, data) => {
+ if (!data || !data.roomId) {
+ throw new Error('[[error:invalid-data]]');
+ }
const uidsExist = await user.exists(data.uids);
if (!uidsExist.every(Boolean)) {
throw new Error('[[error:no-user]]');
@@ -118,3 +182,35 @@ chatsAPI.kick = async (caller, data) => {
delete data.uids;
return chatsAPI.users(caller, data);
};
+
+chatsAPI.listMessages = async (caller, { uid, roomId, start }) => {
+ const messages = await messaging.getMessages({
+ callerUid: caller.uid,
+ uid,
+ roomId,
+ start,
+ count: 50,
+ });
+
+ return { messages };
+};
+
+chatsAPI.getMessage = async (caller, { mid, roomId }) => {
+ const messages = await messaging.getMessagesData([mid], caller.uid, roomId, false);
+ return messages.pop();
+};
+
+chatsAPI.editMessage = async (caller, { mid, roomId, message }) => {
+ await messaging.canEdit(mid, caller.uid);
+ await messaging.editMessage(caller.uid, mid, roomId, message);
+};
+
+chatsAPI.deleteMessage = async (caller, { mid }) => {
+ await messaging.canDelete(mid, caller.uid);
+ await messaging.deleteMessage(mid, caller.uid);
+};
+
+chatsAPI.restoreMessage = async (caller, { mid }) => {
+ await messaging.canDelete(mid, caller.uid);
+ await messaging.restoreMessage(mid, caller.uid);
+};
diff --git a/src/api/files.js b/src/api/files.js
new file mode 100644
index 0000000000..ca4e93f94c
--- /dev/null
+++ b/src/api/files.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const fs = require('fs').promises;
+
+const filesApi = module.exports;
+
+// path assertion and traversal guarding logic is in src/middleware/assert.js
+
+filesApi.delete = async (_, { path }) => await fs.unlink(path);
+
+filesApi.createFolder = async (_, { path }) => await fs.mkdir(path);
diff --git a/src/api/flags.js b/src/api/flags.js
index 1d77470628..e4a3ba04e4 100644
--- a/src/api/flags.js
+++ b/src/api/flags.js
@@ -25,6 +25,15 @@ flagsApi.create = async (caller, data) => {
return flagObj;
};
+flagsApi.get = async (caller, { flagId }) => {
+ const isPrivileged = await user.isPrivileged(caller.uid);
+ if (!isPrivileged) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ return await flags.get(flagId);
+};
+
flagsApi.update = async (caller, data) => {
const allowed = await user.isPrivileged(caller.uid);
if (!allowed) {
@@ -38,6 +47,8 @@ flagsApi.update = async (caller, data) => {
return await flags.getHistory(flagId);
};
+flagsApi.delete = async (_, { flagId }) => await flags.purge([flagId]);
+
flagsApi.appendNote = async (caller, data) => {
const allowed = await user.isPrivileged(caller.uid);
if (!allowed) {
diff --git a/src/api/index.js b/src/api/index.js
index a4b5f3488b..45c53aa910 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -1,6 +1,7 @@
'use strict';
module.exports = {
+ admin: require('./admin'),
users: require('./users'),
groups: require('./groups'),
topics: require('./topics'),
@@ -8,4 +9,5 @@ module.exports = {
chats: require('./chats'),
categories: require('./categories'),
flags: require('./flags'),
+ files: require('./files'),
};
diff --git a/src/api/posts.js b/src/api/posts.js
index abd40eda38..d1cb66cf44 100644
--- a/src/api/posts.js
+++ b/src/api/posts.js
@@ -333,3 +333,17 @@ postsAPI.restoreDiff = async (caller, data) => {
const edit = await posts.diffs.restore(data.pid, data.since, caller.uid, apiHelpers.buildReqObject(caller));
websockets.in(`topic_${edit.topic.tid}`).emit('event:post_edited', edit);
};
+
+postsAPI.deleteDiff = async (caller, { pid, timestamp }) => {
+ const cid = await posts.getCidByPid(pid);
+ const [isAdmin, isModerator] = await Promise.all([
+ privileges.users.isAdministrator(caller.uid),
+ privileges.users.isModerator(caller.uid, cid),
+ ]);
+
+ if (!(isAdmin || isModerator)) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ await posts.diffs.delete(pid, timestamp, caller.uid);
+};
diff --git a/src/api/topics.js b/src/api/topics.js
index 3cd98f0c20..d8910b1098 100644
--- a/src/api/topics.js
+++ b/src/api/topics.js
@@ -1,5 +1,7 @@
'use strict';
+const validator = require('validator');
+
const user = require('../user');
const topics = require('../topics');
const posts = require('../posts');
@@ -15,6 +17,22 @@ const socketHelpers = require('../socket.io/helpers');
const topicsAPI = module.exports;
+topicsAPI._checkThumbPrivileges = async function ({ tid, uid }) {
+ // req.params.tid could be either a tid (pushing a new thumb to an existing topic)
+ // or a post UUID (a new topic being composed)
+ const isUUID = validator.isUUID(tid);
+
+ // Sanity-check the tid if it's strictly not a uuid
+ if (!isUUID && (isNaN(parseInt(tid, 10)) || !await topics.exists(tid))) {
+ throw new Error('[[error:no-topic]]');
+ }
+
+ // While drafts are not protected, tids are
+ if (!isUUID && !await privileges.topics.canEdit(tid, uid)) {
+ throw new Error('[[error:no-privileges]]');
+ }
+};
+
topicsAPI.get = async function (caller, data) {
const [userPrivileges, topic] = await Promise.all([
privileges.topics.get(data.tid, caller.uid),
@@ -117,10 +135,12 @@ topicsAPI.purge = async function (caller, data) {
});
};
-topicsAPI.pin = async function (caller, data) {
- await doTopicAction('pin', 'event:topic_pinned', caller, {
- tids: data.tids,
- });
+topicsAPI.pin = async function (caller, { tids, expiry }) {
+ await doTopicAction('pin', 'event:topic_pinned', caller, { tids });
+
+ if (expiry) {
+ await Promise.all(tids.map(async tid => topics.tools.setPinExpiry(tid, expiry, caller.uid)));
+ }
};
topicsAPI.unpin = async function (caller, data) {
@@ -152,3 +172,87 @@ topicsAPI.ignore = async function (caller, data) {
topicsAPI.unfollow = async function (caller, data) {
await topics.unfollow(data.tid, caller.uid);
};
+
+topicsAPI.addTags = async (caller, { tid, tags }) => {
+ if (!await privileges.topics.canEdit(tid, caller.uid)) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ const cid = await topics.getTopicField(tid, 'cid');
+ await topics.validateTags(tags, cid, caller.uid, tid);
+ tags = await topics.filterTags(tags);
+
+ await topics.addTags(tags, [tid]);
+};
+
+topicsAPI.deleteTags = async (caller, { tid }) => {
+ if (!await privileges.topics.canEdit(tid, caller.uid)) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ await topics.deleteTopicTags(tid);
+};
+
+topicsAPI.getThumbs = async (caller, { tid }) => {
+ if (isFinite(tid)) { // post_uuids can be passed in occasionally, in that case no checks are necessary
+ const [exists, canRead] = await Promise.all([
+ topics.exists(tid),
+ privileges.topics.can('topics:read', tid, caller.uid),
+ ]);
+ if (!exists) {
+ throw new Error('[[error:not-found]]');
+ }
+ if (!canRead) {
+ throw new Error('[[error:not-allowed]]');
+ }
+ }
+
+ return await topics.thumbs.get(tid);
+};
+
+// topicsAPI.addThumb
+
+topicsAPI.migrateThumbs = async (caller, { from, to }) => {
+ await Promise.all([
+ topicsAPI._checkThumbPrivileges({ tid: from, uid: caller.uid }),
+ topicsAPI._checkThumbPrivileges({ tid: to, uid: caller.uid }),
+ ]);
+
+ await topics.thumbs.migrate(from, to);
+};
+
+topicsAPI.deleteThumb = async (caller, { tid, path }) => {
+ await topicsAPI._checkThumbPrivileges({ tid: tid, uid: caller.uid });
+ await topics.thumbs.delete(tid, path);
+};
+
+topicsAPI.reorderThumbs = async (caller, { tid, path, order }) => {
+ await topicsAPI._checkThumbPrivileges({ tid: tid, uid: caller.uid });
+
+ const exists = await topics.thumbs.exists(tid, path);
+ if (!exists) {
+ throw new Error('[[error:invalid-data]]');
+ }
+
+ await topics.thumbs.associate({
+ id: tid,
+ path: path,
+ score: order,
+ });
+};
+
+topicsAPI.getEvents = async (caller, { tid }) => {
+ if (!await privileges.topics.can('topics:read', tid, caller.uid)) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ return await topics.events.get(tid, caller.uid);
+};
+
+topicsAPI.deleteEvent = async (caller, { tid, eventId }) => {
+ if (!await privileges.topics.isAdminOrMod(tid, caller.uid)) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ await topics.events.purge(tid, [eventId]);
+};
diff --git a/src/api/users.js b/src/api/users.js
index e0382c95cd..249eaae83c 100644
--- a/src/api/users.js
+++ b/src/api/users.js
@@ -1,5 +1,9 @@
'use strict';
+const util = require('util');
+const path = require('path');
+const fs = require('fs').promises;
+
const validator = require('validator');
const winston = require('winston');
@@ -14,17 +18,32 @@ const plugins = require('../plugins');
const events = require('../events');
const translator = require('../translator');
const sockets = require('../socket.io');
+const utils = require('../utils');
const usersAPI = module.exports;
+const hasAdminPrivilege = async (uid, privilege) => {
+ const ok = await privileges.admin.can(`admin:${privilege}`, uid);
+ if (!ok) {
+ throw new Error('[[error:no-privileges]]');
+ }
+};
+
usersAPI.create = async function (caller, data) {
if (!data) {
throw new Error('[[error:invalid-data]]');
}
+ await hasAdminPrivilege(caller.uid, 'users');
+
const uid = await user.create(data);
return await user.getUserData(uid);
};
+usersAPI.get = async (caller, { uid }) => {
+ const userData = await user.getUserData(uid);
+ return await user.hidePrivateData(userData, caller.uid);
+};
+
usersAPI.update = async function (caller, data) {
if (!caller.uid) {
throw new Error('[[error:invalid-uid]]');
@@ -90,6 +109,8 @@ usersAPI.deleteAccount = async function (caller, { uid, password }) {
};
usersAPI.deleteMany = async function (caller, data) {
+ await hasAdminPrivilege(caller.uid, 'users');
+
if (await canDeleteUids(data.uids)) {
await Promise.all(data.uids.map(uid => processDeletion({ uid, method: 'delete', caller })));
}
@@ -286,6 +307,188 @@ usersAPI.unmute = async function (caller, data) {
});
};
+usersAPI.generateToken = async (caller, { uid, description }) => {
+ await hasAdminPrivilege(caller.uid, 'settings');
+ if (parseInt(uid, 10) !== parseInt(caller.uid, 10)) {
+ throw new Error('[[error:invalid-uid]]');
+ }
+
+ const settings = await meta.settings.get('core.api');
+ settings.tokens = settings.tokens || [];
+
+ const newToken = {
+ token: utils.generateUUID(),
+ uid: caller.uid,
+ description: description || '',
+ timestamp: Date.now(),
+ };
+ settings.tokens.push(newToken);
+ await meta.settings.set('core.api', settings);
+
+ return newToken;
+};
+
+usersAPI.deleteToken = async (caller, { uid, token }) => {
+ await hasAdminPrivilege(caller.uid, 'settings');
+ if (parseInt(uid, 10) !== parseInt(caller.uid, 10)) {
+ throw new Error('[[error:invalid-uid]]');
+ }
+
+ const settings = await meta.settings.get('core.api');
+ const beforeLen = settings.tokens.length;
+ settings.tokens = settings.tokens.filter(tokenObj => tokenObj.token !== token);
+ if (beforeLen !== settings.tokens.length) {
+ await meta.settings.set('core.api', settings);
+ return true;
+ }
+
+ return false;
+};
+
+const getSessionAsync = util.promisify((sid, callback) => {
+ db.sessionStore.get(sid, (err, sessionObj) => callback(err, sessionObj || null));
+});
+
+usersAPI.revokeSession = async (caller, { uid, uuid }) => {
+ // Only admins or global mods (besides the user themselves) can revoke sessions
+ if (parseInt(uid, 10) !== caller.uid && !await user.isAdminOrGlobalMod(caller.uid)) {
+ throw new Error('[[error:invalid-uid]]');
+ }
+
+ const sids = await db.getSortedSetRange(`uid:${uid}:sessions`, 0, -1);
+ let _id;
+ for (const sid of sids) {
+ /* eslint-disable no-await-in-loop */
+ const sessionObj = await getSessionAsync(sid);
+ if (sessionObj && sessionObj.meta && sessionObj.meta.uuid === uuid) {
+ _id = sid;
+ break;
+ }
+ }
+
+ if (!_id) {
+ throw new Error('[[error:no-session-found]]');
+ }
+
+ await user.auth.revokeSession(_id, uid);
+};
+
+usersAPI.invite = async (caller, { emails, groupsToJoin, uid }) => {
+ if (!emails || !Array.isArray(groupsToJoin)) {
+ throw new Error('[[error:invalid-data]]');
+ }
+
+ // For simplicity, this API route is restricted to self-use only. This can change if needed.
+ if (parseInt(caller.uid, 10) !== parseInt(uid, 10)) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ const canInvite = await privileges.users.hasInvitePrivilege(caller.uid);
+ if (!canInvite) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ const { registrationType } = meta.config;
+ const isAdmin = await user.isAdministrator(caller.uid);
+ if (registrationType === 'admin-invite-only' && !isAdmin) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ const inviteGroups = (await groups.getUserInviteGroups(caller.uid)).map(group => group.name);
+ const cannotInvite = groupsToJoin.some(group => !inviteGroups.includes(group));
+ if (groupsToJoin.length > 0 && cannotInvite) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ const max = meta.config.maximumInvites;
+ const emailsArr = emails.split(',').map(email => email.trim()).filter(Boolean);
+
+ for (const email of emailsArr) {
+ /* eslint-disable no-await-in-loop */
+ let invites = 0;
+ if (max) {
+ invites = await user.getInvitesNumber(caller.uid);
+ }
+ if (!isAdmin && max && invites >= max) {
+ throw new Error(`[[error:invite-maximum-met, ${invites}, ${max}]]`);
+ }
+
+ await user.sendInvitationEmail(caller.uid, email, groupsToJoin);
+ }
+};
+
+usersAPI.getInviteGroups = async (caller, { uid }) => {
+ // For simplicity, this API route is restricted to self-use only. This can change if needed.
+ if (parseInt(uid, 10) !== parseInt(caller.uid, 10)) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ const userInviteGroups = await groups.getUserInviteGroups(uid);
+ return userInviteGroups.map(group => group.displayName);
+};
+
+usersAPI.addEmail = async (caller, { email, skipConfirmation, uid }) => {
+ const canManageUsers = await privileges.admin.can('admin:users', caller.uid);
+ skipConfirmation = canManageUsers && skipConfirmation;
+
+ if (skipConfirmation) {
+ await user.setUserField(uid, 'email', email);
+ await user.email.confirmByUid(uid);
+ } else {
+ await usersAPI.update(caller, { uid, email });
+ }
+
+ return await db.getSortedSetRangeByScore('email:uid', 0, 500, uid, uid);
+};
+
+usersAPI.listEmails = async (caller, { uid }) => {
+ const [isPrivileged, { showemail }] = await Promise.all([
+ user.isPrivileged(caller.uid),
+ user.getSettings(uid),
+ ]);
+ const isSelf = caller.uid === parseInt(uid, 10);
+
+ if (isSelf || isPrivileged || showemail) {
+ return await db.getSortedSetRangeByScore('email:uid', 0, 500, uid, uid);
+ }
+
+ return null;
+};
+
+usersAPI.getEmail = async (caller, { uid, email }) => {
+ const [isPrivileged, { showemail }, exists] = await Promise.all([
+ user.isPrivileged(caller.uid),
+ user.getSettings(uid),
+ db.isSortedSetMember('email:uid', email.toLowerCase()),
+ ]);
+ const isSelf = caller.uid === parseInt(uid, 10);
+
+ return exists && (isSelf || isPrivileged || showemail);
+};
+
+usersAPI.confirmEmail = async (caller, { uid, email, sessionId }) => {
+ const [pending, current, canManage] = await Promise.all([
+ user.email.isValidationPending(uid, email),
+ user.getUserField(uid, 'email'),
+ privileges.admin.can('admin:users', caller.uid),
+ ]);
+
+ if (!canManage) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ if (pending) { // has active confirmation request
+ const code = await db.get(`confirm:byUid:${uid}`);
+ await user.email.confirmByCode(code, sessionId);
+ return true;
+ } else if (current && current === email) { // i.e. old account w/ unconf. email in user hash
+ await user.email.confirmByUid(uid);
+ return true;
+ }
+
+ return false;
+};
+
async function isPrivilegedOrSelfAndPasswordMatch(caller, data) {
const { uid } = caller;
const isSelf = parseInt(uid, 10) === parseInt(data.uid, 10);
@@ -442,6 +645,37 @@ usersAPI.changePicture = async (caller, data) => {
}, ['picture', 'icon:bgColor']);
};
+const exportMetadata = new Map([
+ ['posts', ['csv', 'text/csv']],
+ ['uploads', ['zip', 'application/zip']],
+ ['profile', ['json', 'application/json']],
+]);
+
+const prepareExport = async ({ uid, type }) => {
+ const [extension] = exportMetadata.get(type);
+ const filename = `${uid}_${type}.${extension}`;
+ try {
+ const stat = await fs.stat(path.join(__dirname, '../../build/export', filename));
+ return stat;
+ } catch (e) {
+ return false;
+ }
+};
+
+usersAPI.checkExportByType = async (caller, { uid, type }) => await prepareExport({ uid, type });
+
+usersAPI.getExportByType = async (caller, { uid, type }) => {
+ const [extension, mime] = exportMetadata.get(type);
+ const filename = `${uid}_${type}.${extension}`;
+
+ const exists = await prepareExport({ uid, type });
+ if (exists) {
+ return { filename, mime };
+ }
+
+ return false;
+};
+
usersAPI.generateExport = async (caller, { uid, type }) => {
const count = await db.incrObjectField('locks', `export:${uid}${type}`);
if (count > 1) {
@@ -458,11 +692,10 @@ usersAPI.generateExport = async (caller, { uid, type }) => {
});
child.on('exit', async () => {
await db.deleteObjectField('locks', `export:${uid}${type}`);
- const userData = await user.getUserFields(uid, ['username', 'userslug']);
- const { displayname } = userData;
+ const { displayname } = await user.getUserFields(uid, ['username']);
const n = await notifications.create({
bodyShort: `[[notifications:${type}-exported, ${displayname}]]`,
- path: `/api/user/${userData.userslug}/export/${type}`,
+ path: `/api/v3/users/${uid}/exports/${type}`,
nid: `${type}:export:${uid}`,
from: uid,
});
diff --git a/src/categories/create.js b/src/categories/create.js
index ce3f01f22e..40e434bbe8 100644
--- a/src/categories/create.js
+++ b/src/categories/create.js
@@ -40,7 +40,7 @@ module.exports = function (Categories) {
order: order,
link: data.link || '',
numRecentReplies: 1,
- class: (data.class ? data.class : 'col-md-3 col-xs-6'),
+ class: (data.class ? data.class : 'col-md-3 col-6'),
imageClass: 'cover',
isSection: 0,
subCategoriesPerPage: 10,
diff --git a/src/cli/index.js b/src/cli/index.js
index 5eb9f4924c..b05868f3f1 100644
--- a/src/cli/index.js
+++ b/src/cli/index.js
@@ -93,6 +93,9 @@ nconf.argv(opts).env({
separator: '__',
});
+process.env.NODE_ENV = process.env.NODE_ENV || 'production';
+global.env = process.env.NODE_ENV || 'production';
+
prestart.setupWinston();
// Alternate configuration file support
diff --git a/src/cli/reset.js b/src/cli/reset.js
index 2de33244bc..a05519b101 100644
--- a/src/cli/reset.js
+++ b/src/cli/reset.js
@@ -67,8 +67,8 @@ exports.reset = async function (options) {
' -a\tall of the above',
'',
'Plugin and theme reset flags (-p & -t) can take a single argument',
- ' e.g. ./nodebb reset -p nodebb-plugin-mentions, ./nodebb reset -t nodebb-theme-persona',
- ' Prefix is optional, e.g. ./nodebb reset -p markdown, ./nodebb reset -t persona',
+ ' e.g. ./nodebb reset -p nodebb-plugin-mentions, ./nodebb reset -t nodebb-theme-harmony',
+ ' Prefix is optional, e.g. ./nodebb reset -p markdown, ./nodebb reset -t harmony',
].join('\n'));
process.exit(0);
@@ -105,7 +105,7 @@ async function resetTheme(themeId) {
}
async function resetThemes() {
- await resetThemeTo('nodebb-theme-persona');
+ await resetThemeTo('nodebb-theme-harmony');
}
async function resetThemeTo(themeId) {
diff --git a/src/controllers/accounts/blocks.js b/src/controllers/accounts/blocks.js
index 12962e1027..a3f6cba3ff 100644
--- a/src/controllers/accounts/blocks.js
+++ b/src/controllers/accounts/blocks.js
@@ -1,39 +1,36 @@
'use strict';
const helpers = require('../helpers');
-const accountHelpers = require('./helpers');
const pagination = require('../../pagination');
const user = require('../../user');
const plugins = require('../../plugins');
const blocksController = module.exports;
-blocksController.getBlocks = async function (req, res, next) {
+blocksController.getBlocks = async function (req, res) {
const page = parseInt(req.query.page, 10) || 1;
const resultsPerPage = 50;
const start = Math.max(0, page - 1) * resultsPerPage;
const stop = start + resultsPerPage - 1;
- const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query);
- if (!userData) {
- return next();
- }
- const uids = await user.blocks.list(userData.uid);
+ const { uid, username, userslug, blocksCount } = await user.getUserFields(res.locals.uid, ['uid', 'username', 'userslug', 'blocksCount']);
+ const payload = {};
+ const uids = await user.blocks.list(uid);
const data = await plugins.hooks.fire('filter:user.getBlocks', {
uids: uids,
- uid: userData.uid,
+ uid: uid,
start: start,
stop: stop,
});
data.uids = data.uids.slice(start, stop + 1);
- userData.users = await user.getUsers(data.uids, req.uid);
- userData.title = `[[pages:account/blocks, ${userData.username}]]`;
+ payload.users = await user.getUsers(data.uids, req.uid);
+ payload.title = `[[pages:account/blocks, ${username}]]`;
- const pageCount = Math.ceil(userData.counts.blocks / resultsPerPage);
- userData.pagination = pagination.create(page, pageCount);
+ const pageCount = Math.ceil(blocksCount / resultsPerPage);
+ payload.pagination = pagination.create(page, pageCount);
- userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username, url: `/user/${userData.userslug}` }, { text: '[[user:blocks]]' }]);
+ payload.breadcrumbs = helpers.buildBreadcrumbs([{ text: username, url: `/user/${userslug}` }, { text: '[[user:blocks]]' }]);
- res.render('account/blocks', userData);
+ res.render('account/blocks', payload);
};
diff --git a/src/controllers/accounts/categories.js b/src/controllers/accounts/categories.js
index a5cd86c9d5..58a4e249e8 100644
--- a/src/controllers/accounts/categories.js
+++ b/src/controllers/accounts/categories.js
@@ -2,21 +2,17 @@
const user = require('../../user');
const categories = require('../../categories');
-const accountHelpers = require('./helpers');
const helpers = require('../helpers');
const pagination = require('../../pagination');
const meta = require('../../meta');
const categoriesController = module.exports;
-categoriesController.get = async function (req, res, next) {
- const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query);
- if (!userData) {
- return next();
- }
+categoriesController.get = async function (req, res) {
+ const { username, userslug } = await user.getUserFields(res.locals.uid, ['username', 'userslug']);
const [states, allCategoriesData] = await Promise.all([
- user.getCategoryWatchState(userData.uid),
- categories.buildForSelect(userData.uid, 'find', ['descriptionParsed', 'depth', 'slug']),
+ user.getCategoryWatchState(res.locals.uid),
+ categories.buildForSelect(res.locals.uid, 'find', ['descriptionParsed', 'depth', 'slug']),
]);
const pageCount = Math.max(1, Math.ceil(allCategoriesData.length / meta.config.categoriesPerPage));
@@ -33,12 +29,14 @@ categoriesController.get = async function (req, res, next) {
category.isNotWatched = states[category.cid] === categories.watchStates.notwatching;
}
});
- userData.categories = categoriesData;
- userData.title = `[[pages:account/watched_categories, ${userData.username}]]`;
- userData.breadcrumbs = helpers.buildBreadcrumbs([
- { text: userData.username, url: `/user/${userData.userslug}` },
+
+ const payload = {};
+ payload.categories = categoriesData;
+ payload.title = `[[pages:account/watched_categories, ${username}]]`;
+ payload.breadcrumbs = helpers.buildBreadcrumbs([
+ { text: username, url: `/user/${userslug}` },
{ text: '[[pages:categories]]' },
]);
- userData.pagination = pagination.create(page, pageCount, req.query);
- res.render('account/categories', userData);
+ payload.pagination = pagination.create(page, pageCount, req.query);
+ res.render('account/categories', payload);
};
diff --git a/src/controllers/accounts/chats.js b/src/controllers/accounts/chats.js
index 9efd537813..02c9b404cc 100644
--- a/src/controllers/accounts/chats.js
+++ b/src/controllers/accounts/chats.js
@@ -21,7 +21,7 @@ chatsController.get = async function (req, res, next) {
if (!canChat) {
return next(new Error('[[error:no-privileges]]'));
}
- const recentChats = await messaging.getRecentChats(req.uid, uid, 0, 19);
+ const recentChats = await messaging.getRecentChats(req.uid, uid, 0, 29);
if (!recentChats) {
return next();
}
diff --git a/src/controllers/accounts/consent.js b/src/controllers/accounts/consent.js
index a4b5cd02c9..c4ec132a11 100644
--- a/src/controllers/accounts/consent.js
+++ b/src/controllers/accounts/consent.js
@@ -2,8 +2,8 @@
const db = require('../../database');
const meta = require('../../meta');
+const user = require('../../user');
const helpers = require('../helpers');
-const accountHelpers = require('./helpers');
const consentController = module.exports;
@@ -12,19 +12,18 @@ consentController.get = async function (req, res, next) {
return next();
}
- const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query);
- if (!userData) {
- return next();
- }
- const consented = await db.getObjectField(`user:${userData.uid}`, 'gdpr_consent');
- userData.gdpr_consent = parseInt(consented, 10) === 1;
- userData.digest = {
+ const { username, userslug } = await user.getUserFields(res.locals.uid, ['username', 'userslug']);
+ const consented = await db.getObjectField(`user:${res.locals.uid}`, 'gdpr_consent');
+
+ const payload = {};
+ payload.gdpr_consent = parseInt(consented, 10) === 1;
+ payload.digest = {
frequency: meta.config.dailyDigestFreq || 'off',
enabled: meta.config.dailyDigestFreq !== 'off',
};
- userData.title = '[[user:consent.title]]';
- userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username, url: `/user/${userData.userslug}` }, { text: '[[user:consent.title]]' }]);
+ payload.title = '[[user:consent.title]]';
+ payload.breadcrumbs = helpers.buildBreadcrumbs([{ text: username, url: `/user/${userslug}` }, { text: '[[user:consent.title]]' }]);
- res.render('account/consent', userData);
+ res.render('account/consent', payload);
};
diff --git a/src/controllers/accounts/edit.js b/src/controllers/accounts/edit.js
index 7bbe27cebf..84763a6e71 100644
--- a/src/controllers/accounts/edit.js
+++ b/src/controllers/accounts/edit.js
@@ -4,44 +4,47 @@ const user = require('../../user');
const meta = require('../../meta');
const helpers = require('../helpers');
const groups = require('../../groups');
-const accountHelpers = require('./helpers');
const privileges = require('../../privileges');
+const accountHelpers = require('./helpers');
const file = require('../../file');
const editController = module.exports;
-editController.get = async function (req, res, next) {
- const [userData, canUseSignature] = await Promise.all([
+editController.get = async function (req, res) {
+ const [{
+ username,
+ userslug,
+ isSelf,
+ reputation,
+ groups: _groups,
+ groupTitleArray,
+ allowMultipleBadges,
+ }, canUseSignature] = await Promise.all([
accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query),
privileges.global.can('signature', req.uid),
]);
- if (!userData) {
- return next();
- }
- userData.maximumSignatureLength = meta.config.maximumSignatureLength;
- userData.maximumAboutMeLength = meta.config.maximumAboutMeLength;
- userData.maximumProfileImageSize = meta.config.maximumProfileImageSize;
- userData.allowProfilePicture = !userData.isSelf || !!meta.config['reputation:disabled'] || userData.reputation >= meta.config['min:rep:profile-picture'];
- userData.allowCoverPicture = !userData.isSelf || !!meta.config['reputation:disabled'] || userData.reputation >= meta.config['min:rep:cover-picture'];
- userData.allowProfileImageUploads = meta.config.allowProfileImageUploads;
- userData.allowedProfileImageExtensions = user.getAllowedProfileImageExtensions().map(ext => `.${ext}`).join(', ');
- userData.allowMultipleBadges = meta.config.allowMultipleBadges === 1;
- userData.allowAccountDelete = meta.config.allowAccountDelete === 1;
- userData.allowWebsite = !userData.isSelf || !!meta.config['reputation:disabled'] || userData.reputation >= meta.config['min:rep:website'];
- userData.allowAboutMe = !userData.isSelf || !!meta.config['reputation:disabled'] || userData.reputation >= meta.config['min:rep:aboutme'];
- userData.allowSignature = canUseSignature && (!userData.isSelf || !!meta.config['reputation:disabled'] || userData.reputation >= meta.config['min:rep:signature']);
- userData.profileImageDimension = meta.config.profileImageDimension;
- userData.defaultAvatar = user.getDefaultAvatar();
-
- userData.groups = userData.groups.filter(g => g && g.userTitleEnabled && !groups.isPrivilegeGroup(g.name) && g.name !== 'registered-users');
-
- if (!userData.allowMultipleBadges) {
- userData.groupTitle = userData.groupTitleArray[0];
+
+ const payload = {};
+ payload.maximumSignatureLength = meta.config.maximumSignatureLength;
+ payload.maximumAboutMeLength = meta.config.maximumAboutMeLength;
+ payload.maximumProfileImageSize = meta.config.maximumProfileImageSize;
+ payload.allowMultipleBadges = meta.config.allowMultipleBadges === 1;
+ payload.allowAccountDelete = meta.config.allowAccountDelete === 1;
+ payload.allowWebsite = !isSelf || !!meta.config['reputation:disabled'] || reputation >= meta.config['min:rep:website'];
+ payload.allowAboutMe = !isSelf || !!meta.config['reputation:disabled'] || reputation >= meta.config['min:rep:aboutme'];
+ payload.allowSignature = canUseSignature && (!isSelf || !!meta.config['reputation:disabled'] || reputation >= meta.config['min:rep:signature']);
+ payload.profileImageDimension = meta.config.profileImageDimension;
+ payload.defaultAvatar = user.getDefaultAvatar();
+
+ payload.groups = _groups.filter(g => g && g.userTitleEnabled && !groups.isPrivilegeGroup(g.name) && g.name !== 'registered-users');
+
+ if (!allowMultipleBadges) {
+ payload.groupTitle = groupTitleArray[0];
}
- userData.groups.sort((a, b) => {
- const i1 = userData.groupTitleArray.indexOf(a.name);
- const i2 = userData.groupTitleArray.indexOf(b.name);
+ payload.groups.sort((a, b) => {
+ const i1 = groupTitleArray.indexOf(a.name);
+ const i2 = groupTitleArray.indexOf(b.name);
if (i1 === -1) {
return 1;
} else if (i2 === -1) {
@@ -49,24 +52,25 @@ editController.get = async function (req, res, next) {
}
return i1 - i2;
});
- userData.groups.forEach((group) => {
+ payload.groups.forEach((group) => {
group.userTitle = group.userTitle || group.displayName;
- group.selected = userData.groupTitleArray.includes(group.name);
+ group.selected = groupTitleArray.includes(group.name);
});
- userData.groupSelectSize = Math.min(10, Math.max(5, userData.groups.length + 1));
+ payload.groupSelectSize = Math.min(10, Math.max(5, payload.groups.length + 1));
- userData.title = `[[pages:account/edit, ${userData.username}]]`;
- userData.breadcrumbs = helpers.buildBreadcrumbs([
+ payload.title = `[[pages:account/edit, ${username}]]`;
+ payload.breadcrumbs = helpers.buildBreadcrumbs([
{
- text: userData.username,
- url: `/user/${userData.userslug}`,
+ text: username,
+ url: `/user/${userslug}`,
},
{
text: '[[user:edit]]',
},
]);
- userData.editButtons = [];
- res.render('account/edit', userData);
+ payload.editButtons = [];
+
+ res.render('account/edit', payload);
};
editController.password = async function (req, res, next) {
@@ -99,46 +103,39 @@ editController.email = async function (req, res, next) {
helpers.redirect(res, '/register/complete');
};
-async function renderRoute(name, req, res, next) {
- const userData = await getUserData(req, next);
- if (!userData) {
- return next();
- }
- if (meta.config[`${name}:disableEdit`] && !userData.isAdmin) {
+async function renderRoute(name, req, res) {
+ const [isAdmin, { username, userslug }, hasPassword] = await Promise.all([
+ privileges.admin.can('admin:users', req.uid),
+ user.getUserFields(res.locals.uid, ['username', 'userslug']),
+ user.hasPassword(res.locals.uid),
+ ]);
+
+ if (meta.config[`${name}:disableEdit`] && !isAdmin) {
return helpers.notAllowed(req, res);
}
+ const payload = { hasPassword };
if (name === 'password') {
- userData.minimumPasswordLength = meta.config.minimumPasswordLength;
- userData.minimumPasswordStrength = meta.config.minimumPasswordStrength;
+ payload.minimumPasswordLength = meta.config.minimumPasswordLength;
+ payload.minimumPasswordStrength = meta.config.minimumPasswordStrength;
}
- userData.title = `[[pages:account/edit/${name}, ${userData.username}]]`;
- userData.breadcrumbs = helpers.buildBreadcrumbs([
+ payload.title = `[[pages:account/edit/${name}, ${username}]]`;
+ payload.breadcrumbs = helpers.buildBreadcrumbs([
{
- text: userData.username,
- url: `/user/${userData.userslug}`,
+ text: username,
+ url: `/user/${userslug}`,
},
{
text: '[[user:edit]]',
- url: `/user/${userData.userslug}/edit`,
+ url: `/user/${userslug}/edit`,
},
{
text: `[[user:${name}]]`,
},
]);
- res.render(`account/edit/${name}`, userData);
-}
-
-async function getUserData(req) {
- const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query);
- if (!userData) {
- return null;
- }
-
- userData.hasPassword = await user.hasPassword(userData.uid);
- return userData;
+ res.render(`account/edit/${name}`, payload);
}
editController.uploadPicture = async function (req, res, next) {
diff --git a/src/controllers/accounts/follow.js b/src/controllers/accounts/follow.js
index 82b23cb2f9..b573418aad 100644
--- a/src/controllers/accounts/follow.js
+++ b/src/controllers/accounts/follow.js
@@ -2,7 +2,6 @@
const user = require('../../user');
const helpers = require('../helpers');
-const accountHelpers = require('./helpers');
const pagination = require('../../pagination');
const followController = module.exports;
@@ -15,27 +14,25 @@ followController.getFollowers = async function (req, res, next) {
await getFollow('account/followers', 'followers', req, res, next);
};
-async function getFollow(tpl, name, req, res, next) {
- const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query);
- if (!userData) {
- return next();
- }
+async function getFollow(tpl, name, req, res) {
+ const { username, userslug, followerCount, followingCount } = await user.getUserFields(res.locals.uid, ['username', 'userslug']);
const page = parseInt(req.query.page, 10) || 1;
const resultsPerPage = 50;
const start = Math.max(0, page - 1) * resultsPerPage;
const stop = start + resultsPerPage - 1;
- userData.title = `[[pages:${tpl}, ${userData.username}]]`;
+ const payload = {};
+ payload.title = `[[pages:${tpl}, ${username}]]`;
const method = name === 'following' ? 'getFollowing' : 'getFollowers';
- userData.users = await user[method](userData.uid, start, stop);
+ payload.users = await user[method](res.locals.uid, start, stop);
- const count = name === 'following' ? userData.followingCount : userData.followerCount;
+ const count = name === 'following' ? followingCount : followerCount;
const pageCount = Math.ceil(count / resultsPerPage);
- userData.pagination = pagination.create(page, pageCount);
+ payload.pagination = pagination.create(page, pageCount);
- userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username, url: `/user/${userData.userslug}` }, { text: `[[user:${name}]]` }]);
+ payload.breadcrumbs = helpers.buildBreadcrumbs([{ text: username, url: `/user/${userslug}` }, { text: `[[user:${name}]]` }]);
- res.render(tpl, userData);
+ res.render(tpl, payload);
}
diff --git a/src/controllers/accounts/groups.js b/src/controllers/accounts/groups.js
index 7d2f03cbf3..27c0797afe 100644
--- a/src/controllers/accounts/groups.js
+++ b/src/controllers/accounts/groups.js
@@ -1,25 +1,25 @@
'use strict';
+const user = require('../../user');
const groups = require('../../groups');
const helpers = require('../helpers');
-const accountHelpers = require('./helpers');
const groupsController = module.exports;
-groupsController.get = async function (req, res, next) {
- const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query);
- if (!userData) {
- return next();
- }
- let groupsData = await groups.getUserGroups([userData.uid]);
+groupsController.get = async function (req, res) {
+ const { username, userslug } = await user.getUserFields(res.locals.uid, ['username', 'userslug']);
+
+ const payload = {};
+
+ let groupsData = await groups.getUserGroups([res.locals.uid]);
groupsData = groupsData[0];
const groupNames = groupsData.filter(Boolean).map(group => group.name);
const members = await groups.getMemberUsers(groupNames, 0, 3);
groupsData.forEach((group, index) => {
group.members = members[index];
});
- userData.groups = groupsData;
- userData.title = `[[pages:account/groups, ${userData.username}]]`;
- userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username, url: `/user/${userData.userslug}` }, { text: '[[global:header.groups]]' }]);
- res.render('account/groups', userData);
+ payload.groups = groupsData;
+ payload.title = `[[pages:account/groups, ${username}]]`;
+ payload.breadcrumbs = helpers.buildBreadcrumbs([{ text: username, url: `/user/${userslug}` }, { text: '[[global:header.groups]]' }]);
+ res.render('account/groups', payload);
};
diff --git a/src/controllers/accounts/helpers.js b/src/controllers/accounts/helpers.js
index 7c249d8d5f..0d2b08eee8 100644
--- a/src/controllers/accounts/helpers.js
+++ b/src/controllers/accounts/helpers.js
@@ -14,6 +14,8 @@ const translator = require('../../translator');
const messaging = require('../../messaging');
const categories = require('../../categories');
+const relative_path = nconf.get('relative_path');
+
const helpers = module.exports;
helpers.getUserDataByUserSlug = async function (userslug, callerUID, query = {}) {
@@ -26,6 +28,7 @@ helpers.getUserDataByUserSlug = async function (userslug, callerUID, query = {})
if (!results.userData) {
throw new Error('[[error:invalid-uid]]');
}
+
await parseAboutMe(results.userData);
let { userData } = results;
@@ -36,12 +39,17 @@ helpers.getUserDataByUserSlug = async function (userslug, callerUID, query = {})
const { canViewInfo } = results;
const isSelf = parseInt(callerUID, 10) === parseInt(userData.uid, 10);
+ if (meta.config['reputation:disabled']) {
+ delete userData.reputation;
+ }
+
userData.age = Math.max(
0,
userData.birthday ? Math.floor((new Date().getTime() - new Date(userData.birthday).getTime()) / 31536000000) : 0
);
userData = await user.hidePrivateData(userData, callerUID);
+ userData.emailHidden = !userSettings.showemail;
userData.emailClass = userSettings.showemail ? 'hide' : '';
// If email unconfirmed, hide from result set
@@ -76,7 +84,13 @@ helpers.getUserDataByUserSlug = async function (userslug, callerUID, query = {})
userData.isFollowing = results.isFollowing;
userData.hasPrivateChat = results.hasPrivateChat;
userData.showHidden = results.canEdit; // remove in v1.19.0
+ userData.allowProfilePicture = !userData.isSelf || !!meta.config['reputation:disabled'] || userData.reputation >= meta.config['min:rep:profile-picture'];
+ userData.allowCoverPicture = !userData.isSelf || !!meta.config['reputation:disabled'] || userData.reputation >= meta.config['min:rep:cover-picture'];
+ userData.allowProfileImageUploads = meta.config.allowProfileImageUploads;
+ userData.allowedProfileImageExtensions = user.getAllowedProfileImageExtensions().map(ext => `.${ext}`).join(', ');
userData.groups = Array.isArray(results.groups) && results.groups.length ? results.groups[0] : [];
+ userData.selectedGroup = userData.groups.filter(group => group && userData.groupTitleArray.includes(group.name))
+ .sort((a, b) => userData.groupTitleArray.indexOf(a.name) - userData.groupTitleArray.indexOf(b.name));
userData.disableSignatures = meta.config.disableSignatures === 1;
userData['reputation:disabled'] = meta.config['reputation:disabled'] === 1;
userData['downvote:disabled'] = meta.config['downvote:disabled'] === 1;
@@ -225,11 +239,18 @@ async function getProfileMenu(uid, callerUID) {
});
}
- return await plugins.hooks.fire('filter:user.profileMenu', {
+ const data = await plugins.hooks.fire('filter:user.profileMenu', {
uid: uid,
callerUID: callerUID,
links: links,
});
+ const userslug = await user.getUserField(uid, 'userslug');
+ data.links.forEach((link) => {
+ if (!link.hasOwnProperty('url')) {
+ link.url = `${relative_path}/user/${userslug}/${link.route}`;
+ }
+ });
+ return data;
}
async function parseAboutMe(userData) {
diff --git a/src/controllers/accounts/info.js b/src/controllers/accounts/info.js
index 950b74945d..1f73c412e1 100644
--- a/src/controllers/accounts/info.js
+++ b/src/controllers/accounts/info.js
@@ -3,52 +3,53 @@
const db = require('../../database');
const user = require('../../user');
const helpers = require('../helpers');
-const accountHelpers = require('./helpers');
const pagination = require('../../pagination');
const infoController = module.exports;
-infoController.get = async function (req, res, next) {
- const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query);
- if (!userData) {
- return next();
- }
+infoController.get = async function (req, res) {
const page = Math.max(1, req.query.page || 1);
const itemsPerPage = 10;
const start = (page - 1) * itemsPerPage;
const stop = start + itemsPerPage - 1;
+ const [{ username, userslug }, isPrivileged] = await Promise.all([
+ user.getUserFields(res.locals.uid, ['username', 'userslug']),
+ user.isPrivileged(req.uid),
+ ]);
const [history, sessions, usernames, emails, notes] = await Promise.all([
- user.getModerationHistory(userData.uid),
- user.auth.getSessions(userData.uid, req.sessionID),
- user.getHistory(`user:${userData.uid}:usernames`),
- user.getHistory(`user:${userData.uid}:emails`),
- getNotes(userData, start, stop),
+ user.getModerationHistory(res.locals.uid),
+ user.auth.getSessions(res.locals.uid, req.sessionID),
+ user.getHistory(`user:${res.locals.uid}:usernames`),
+ user.getHistory(`user:${res.locals.uid}:emails`),
+ getNotes({ uid: res.locals.uid, isPrivileged }, start, stop),
]);
- userData.history = history;
- userData.sessions = sessions;
- userData.usernames = usernames;
- userData.emails = emails;
+ const payload = {};
+
+ payload.history = history;
+ payload.sessions = sessions;
+ payload.usernames = usernames;
+ payload.emails = emails;
- if (userData.isAdminOrGlobalModeratorOrModerator) {
- userData.moderationNotes = notes.notes;
+ if (isPrivileged) {
+ payload.moderationNotes = notes.notes;
const pageCount = Math.ceil(notes.count / itemsPerPage);
- userData.pagination = pagination.create(page, pageCount, req.query);
+ payload.pagination = pagination.create(page, pageCount, req.query);
}
- userData.title = '[[pages:account/info]]';
- userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username, url: `/user/${userData.userslug}` }, { text: '[[user:account_info]]' }]);
+ payload.title = '[[pages:account/info]]';
+ payload.breadcrumbs = helpers.buildBreadcrumbs([{ text: username, url: `/user/${userslug}` }, { text: '[[user:account_info]]' }]);
- res.render('account/info', userData);
+ res.render('account/info', payload);
};
-async function getNotes(userData, start, stop) {
- if (!userData.isAdminOrGlobalModeratorOrModerator) {
+async function getNotes({ uid, isPrivileged }, start, stop) {
+ if (!isPrivileged) {
return;
}
const [notes, count] = await Promise.all([
- user.getModerationNotes(userData.uid, start, stop),
- db.sortedSetCard(`uid:${userData.uid}:moderation:notes`),
+ user.getModerationNotes(uid, start, stop),
+ db.sortedSetCard(`uid:${uid}:moderation:notes`),
]);
return { notes: notes, count: count };
}
diff --git a/src/controllers/accounts/notifications.js b/src/controllers/accounts/notifications.js
index a235f68e4c..c059aa4283 100644
--- a/src/controllers/accounts/notifications.js
+++ b/src/controllers/accounts/notifications.js
@@ -54,8 +54,14 @@ notificationsController.get = async function (req, res, next) {
return next();
}
- const nids = await user.notifications.getAll(req.uid, selectedFilter.filter);
- let notifications = await user.notifications.getNotifications(nids, req.uid);
+ const data = await user.notifications.getAllWithCounts(req.uid, selectedFilter.filter);
+ let notifications = await user.notifications.getNotifications(data.nids, req.uid);
+
+ allFilters.forEach((filterData) => {
+ if (filterData && filterData.filter) {
+ filterData.count = data.counts[filterData.filter] || 0;
+ }
+ });
const pageCount = Math.max(1, Math.ceil(notifications.length / itemsPerPage));
notifications = notifications.slice(start, stop + 1);
diff --git a/src/controllers/accounts/posts.js b/src/controllers/accounts/posts.js
index 94bc2d9169..b1ac6a4250 100644
--- a/src/controllers/accounts/posts.js
+++ b/src/controllers/accounts/posts.js
@@ -8,7 +8,6 @@ const categories = require('../../categories');
const privileges = require('../../privileges');
const pagination = require('../../pagination');
const helpers = require('../helpers');
-const accountHelpers = require('./helpers');
const plugins = require('../../plugins');
const utils = require('../../utils');
@@ -174,28 +173,25 @@ postsController.getTopics = async function (req, res, next) {
await getPostsFromUserSet('account/topics', req, res, next);
};
-async function getPostsFromUserSet(template, req, res, next) {
+async function getPostsFromUserSet(template, req, res) {
const data = templateToData[template];
const page = Math.max(1, parseInt(req.query.page, 10) || 1);
- const [userData, settings] = await Promise.all([
- accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query),
+ const [{ username, userslug }, settings] = await Promise.all([
+ user.getUserFields(res.locals.uid, ['username', 'userslug']),
user.getSettings(req.uid),
]);
- if (!userData) {
- return next();
- }
const itemsPerPage = data.type === 'topics' ? settings.topicsPerPage : settings.postsPerPage;
const start = (page - 1) * itemsPerPage;
const stop = start + itemsPerPage - 1;
- const sets = await data.getSets(req.uid, userData);
+ const sets = await data.getSets(req.uid, { uid: res.locals.uid, username, userslug });
let result;
if (plugins.hooks.hasListeners('filter:account.getPostsFromUserSet')) {
result = await plugins.hooks.fire('filter:account.getPostsFromUserSet', {
req: req,
template: template,
- userData: userData,
+ userData: { uid: res.locals.uid, username, userslug },
settings: settings,
data: data,
start: start,
@@ -210,29 +206,31 @@ async function getPostsFromUserSet(template, req, res, next) {
});
}
const { itemCount, itemData } = result;
- userData[data.type] = itemData[data.type];
- userData.nextStart = itemData.nextStart;
+
+ const payload = {};
+ payload[data.type] = itemData[data.type];
+ payload.nextStart = itemData.nextStart;
const pageCount = Math.ceil(itemCount / itemsPerPage);
- userData.pagination = pagination.create(page, pageCount, req.query);
+ payload.pagination = pagination.create(page, pageCount, req.query);
- userData.noItemsFoundKey = data.noItemsFoundKey;
- userData.title = `[[pages:${template}, ${userData.username}]]`;
- userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username, url: `/user/${userData.userslug}` }, { text: data.crumb }]);
- userData.showSort = template === 'account/watched';
+ payload.noItemsFoundKey = data.noItemsFoundKey;
+ payload.title = `[[pages:${template}, ${username}]]`;
+ payload.breadcrumbs = helpers.buildBreadcrumbs([{ text: username, url: `/user/${userslug}` }, { text: data.crumb }]);
+ payload.showSort = template === 'account/watched';
const baseUrl = (req.baseUrl + req.path.replace(/^\/api/, ''));
- userData.sortOptions = [
+ payload.sortOptions = [
{ url: `${baseUrl}?sort=votes`, name: '[[global:votes]]' },
{ url: `${baseUrl}?sort=posts`, name: '[[global:posts]]' },
{ url: `${baseUrl}?sort=views`, name: '[[global:views]]' },
{ url: `${baseUrl}?sort=lastpost`, name: '[[global:lastpost]]' },
{ url: `${baseUrl}?sort=firstpost`, name: '[[global:firstpost]]' },
];
- userData.sortOptions.forEach((option) => {
+ payload.sortOptions.forEach((option) => {
option.selected = option.url.includes(`sort=${req.query.sort}`);
});
- res.render(template, userData);
+ res.render(template, payload);
}
async function getItemData(sets, data, req, start, stop) {
diff --git a/src/controllers/accounts/profile.js b/src/controllers/accounts/profile.js
index 8b049b8e34..d2737ee314 100644
--- a/src/controllers/accounts/profile.js
+++ b/src/controllers/accounts/profile.js
@@ -8,7 +8,6 @@ const user = require('../../user');
const posts = require('../../posts');
const categories = require('../../categories');
const plugins = require('../../plugins');
-const meta = require('../../meta');
const privileges = require('../../privileges');
const accountHelpers = require('./helpers');
const helpers = require('../helpers');
@@ -40,16 +39,11 @@ profileController.get = async function (req, res, next) {
posts.parseSignature(userData, req.uid),
]);
- if (meta.config['reputation:disabled']) {
- delete userData.reputation;
- }
-
userData.posts = latestPosts; // for backwards compat.
userData.latestPosts = latestPosts;
userData.bestPosts = bestPosts;
userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username }]);
userData.title = userData.username;
- userData.allowCoverPicture = !userData.isSelf || !!meta.config['reputation:disabled'] || userData.reputation >= meta.config['min:rep:cover-picture'];
// Show email changed modal on first access after said change
userData.emailChanged = req.session.emailChanged;
@@ -61,9 +55,6 @@ profileController.get = async function (req, res, next) {
addMetaTags(res, userData);
- userData.selectedGroup = userData.groups.filter(group => group && userData.groupTitleArray.includes(group.name))
- .sort((a, b) => userData.groupTitleArray.indexOf(a.name) - userData.groupTitleArray.indexOf(b.name));
-
res.render('account/profile', userData);
};
diff --git a/src/controllers/accounts/sessions.js b/src/controllers/accounts/sessions.js
index c1713d3d62..74896346d7 100644
--- a/src/controllers/accounts/sessions.js
+++ b/src/controllers/accounts/sessions.js
@@ -2,19 +2,17 @@
const user = require('../../user');
const helpers = require('../helpers');
-const accountHelpers = require('./helpers');
const sessionController = module.exports;
-sessionController.get = async function (req, res, next) {
- const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query);
- if (!userData) {
- return next();
- }
+sessionController.get = async function (req, res) {
+ const { username, userslug } = await user.getUserFields(res.locals.uid, ['username', 'userslug']);
- userData.sessions = await user.auth.getSessions(userData.uid, req.sessionID);
- userData.title = '[[pages:account/sessions]]';
- userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username, url: `/user/${userData.userslug}` }, { text: '[[pages:account/sessions]]' }]);
+ const payload = {
+ sessions: await user.auth.getSessions(res.locals.uid, req.sessionID),
+ title: '[[pages:account/sessions]]',
+ breadcrumbs: helpers.buildBreadcrumbs([{ text: username, url: `/user/${userslug}` }, { text: '[[pages:account/sessions]]' }]),
+ };
- res.render('account/sessions', userData);
+ res.render('account/sessions', payload);
};
diff --git a/src/controllers/accounts/settings.js b/src/controllers/accounts/settings.js
index 824e12af4f..d7c6b3d45c 100644
--- a/src/controllers/accounts/settings.js
+++ b/src/controllers/accounts/settings.js
@@ -56,26 +56,12 @@ settingsController.get = async function (req, res, next) {
{ value: 'biweek', name: '[[user:digest_biweekly]]', selected: userData.settings.dailyDigestFreq === 'biweek' },
{ value: 'month', name: '[[user:digest_monthly]]', selected: userData.settings.dailyDigestFreq === 'month' },
];
-
userData.bootswatchSkinOptions = [
{ name: 'Default', value: '' },
- { name: 'Cerulean', value: 'cerulean' },
- { name: 'Cosmo', value: 'cosmo' },
- { name: 'Cyborg', value: 'cyborg' },
- { name: 'Darkly', value: 'darkly' },
- { name: 'Flatly', value: 'flatly' },
- { name: 'Journal', value: 'journal' },
- { name: 'Lumen', value: 'lumen' },
- { name: 'Paper', value: 'paper' },
- { name: 'Readable', value: 'readable' },
- { name: 'Sandstone', value: 'sandstone' },
- { name: 'Simplex', value: 'simplex' },
- { name: 'Slate', value: 'slate' },
- { name: 'Spacelab', value: 'spacelab' },
- { name: 'Superhero', value: 'superhero' },
- { name: 'United', value: 'united' },
- { name: 'Yeti', value: 'yeti' },
];
+ userData.bootswatchSkinOptions.push(
+ ...meta.css.supportedSkins.map(skin => ({ name: _.capitalize(skin), value: skin }))
+ );
userData.bootswatchSkinOptions.forEach((skin) => {
skin.selected = skin.value === userData.settings.bootswatchSkin;
diff --git a/src/controllers/accounts/uploads.js b/src/controllers/accounts/uploads.js
index b8afa0d1fe..edfbe23740 100644
--- a/src/controllers/accounts/uploads.js
+++ b/src/controllers/accounts/uploads.js
@@ -6,35 +6,33 @@ const nconf = require('nconf');
const db = require('../../database');
const helpers = require('../helpers');
+const user = require('../../user');
const meta = require('../../meta');
const pagination = require('../../pagination');
-const accountHelpers = require('./helpers');
const uploadsController = module.exports;
-uploadsController.get = async function (req, res, next) {
- const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query);
- if (!userData) {
- return next();
- }
-
+uploadsController.get = async function (req, res) {
+ const { username, userslug } = await user.getUserFields(res.locals.uid, ['username', 'userslug']);
const page = Math.max(1, parseInt(req.query.page, 10) || 1);
const itemsPerPage = 25;
const start = (page - 1) * itemsPerPage;
const stop = start + itemsPerPage - 1;
const [itemCount, uploadNames] = await Promise.all([
- db.sortedSetCard(`uid:${userData.uid}:uploads`),
- db.getSortedSetRevRange(`uid:${userData.uid}:uploads`, start, stop),
+ db.sortedSetCard(`uid:${res.locals.uid}:uploads`),
+ db.getSortedSetRevRange(`uid:${res.locals.uid}:uploads`, start, stop),
]);
- userData.uploads = uploadNames.map(uploadName => ({
+ const payload = {};
+ payload.uploads = uploadNames.map(uploadName => ({
name: uploadName,
url: path.resolve(nconf.get('upload_url'), uploadName),
}));
const pageCount = Math.ceil(itemCount / itemsPerPage);
- userData.pagination = pagination.create(page, pageCount, req.query);
- userData.privateUploads = meta.config.privateUploads === 1;
- userData.title = `[[pages:account/uploads, ${userData.username}]]`;
- userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username, url: `/user/${userData.userslug}` }, { text: '[[global:uploads]]' }]);
- res.render('account/uploads', userData);
+ payload.pagination = pagination.create(page, pageCount, req.query);
+ payload.privateUploads = meta.config.privateUploads === 1;
+ payload.title = `[[pages:account/uploads, ${username}]]`;
+ payload.breadcrumbs = helpers.buildBreadcrumbs([{ text: username, url: `/user/${userslug}` }, { text: '[[global:uploads]]' }]);
+
+ res.render('account/uploads', payload);
};
diff --git a/src/controllers/admin/dashboard.js b/src/controllers/admin/dashboard.js
index 09be9fb0ad..711bc0e9fe 100644
--- a/src/controllers/admin/dashboard.js
+++ b/src/controllers/admin/dashboard.js
@@ -384,7 +384,7 @@ dashboardController.getSearches = async (req, res) => {
res.render('admin/dashboard/searches', {
searches: searches.map(s => ({ value: validator.escape(String(s.value)), score: s.score })),
- startDate: validator.escape(String(req.query.start)),
- endDate: validator.escape(String(req.query.end)),
+ startDate: req.query.start ? validator.escape(String(req.query.start)) : null,
+ endDate: req.query.end ? validator.escape(String(req.query.end)) : null,
});
};
diff --git a/src/controllers/admin/hooks.js b/src/controllers/admin/hooks.js
index 0f68a7e47e..c3511ebaf3 100644
--- a/src/controllers/admin/hooks.js
+++ b/src/controllers/admin/hooks.js
@@ -20,7 +20,7 @@ hooksController.get = function (req, res) {
id: hookData.id,
priority: hookData.priority,
method: hookData.method ? validator.escape(hookData.method.toString()) : 'No plugin function!',
- index: `${hookIndex}-code-${methodIndex}`,
+ index: `hook-${hookIndex}-code-${methodIndex}`,
});
});
hooks.push(current);
diff --git a/src/controllers/api.js b/src/controllers/api.js
index a24051f090..89ef755d28 100644
--- a/src/controllers/api.js
+++ b/src/controllers/api.js
@@ -111,6 +111,7 @@ apiController.loadConfig = async function (req) {
config.topicPostSort = settings.topicPostSort || config.topicPostSort;
config.categoryTopicSort = settings.categoryTopicSort || config.categoryTopicSort;
config.topicSearchEnabled = settings.topicSearchEnabled || false;
+ config.disableCustomUserSkins = meta.config.disableCustomUserSkins === 1;
config.bootswatchSkin = (meta.config.disableCustomUserSkins !== 1 && settings.bootswatchSkin && settings.bootswatchSkin !== '') ? settings.bootswatchSkin : '';
// Overrides based on privilege
diff --git a/src/controllers/authentication.js b/src/controllers/authentication.js
index a2e30c402b..47a06ffe42 100644
--- a/src/controllers/authentication.js
+++ b/src/controllers/authentication.js
@@ -25,15 +25,10 @@ async function registerAndLoginUser(req, res, userData) {
userData.updateEmail = true;
}
- const data = await plugins.hooks.fire('filter:register.interstitial', {
- req,
- userData,
- interstitials: [],
- });
+ const data = await user.interstitials.get(req, userData);
// If interstitials are found, save registration attempt into session and abort
const deferRegistration = data.interstitials.length;
-
if (deferRegistration) {
userData.register = true;
req.session.registration = userData;
@@ -45,6 +40,7 @@ async function registerAndLoginUser(req, res, userData) {
res.json({ next: `${nconf.get('relative_path')}/register/complete` });
return;
}
+
const queue = await user.shouldQueueUser(req.ip);
const result = await plugins.hooks.fire('filter:register.shouldQueue', { req: req, res: res, userData: userData, queue: queue });
if (result.queue) {
@@ -140,12 +136,7 @@ async function addToApprovalQueue(req, userData) {
authenticationController.registerComplete = async function (req, res) {
try {
// For the interstitials that respond, execute the callback with the form body
- const data = await plugins.hooks.fire('filter:register.interstitial', {
- req,
- userData: req.session.registration,
- interstitials: [],
- });
-
+ const data = await user.interstitials.get(req, req.session.registration);
const callbacks = data.interstitials.reduce((memo, cur) => {
if (cur.hasOwnProperty('callback') && typeof cur.callback === 'function') {
req.body.files = req.files;
@@ -218,18 +209,22 @@ authenticationController.registerComplete = async function (req, res) {
}
};
-authenticationController.registerAbort = function (req, res) {
+authenticationController.registerAbort = async (req, res) => {
if (req.uid) {
- // Clear interstitial data and continue on...
- delete req.session.registration;
- res.redirect(nconf.get('relative_path') + (req.session.returnTo || '/'));
- } else {
- // End the session and redirect to home
- req.session.destroy(() => {
- res.clearCookie(nconf.get('sessionKey'), meta.configs.cookie.get());
- res.redirect(`${nconf.get('relative_path')}/`);
- });
+ // Email is the only cancelable interstitial
+ delete req.session.registration.updateEmail;
+
+ const { interstitials } = await user.interstitials.get(req, req.session.registration);
+ if (!interstitials.length) {
+ return res.redirect(nconf.get('relative_path') + (req.session.returnTo || '/'));
+ }
}
+
+ // End the session and redirect to home
+ req.session.destroy(() => {
+ res.clearCookie(nconf.get('sessionKey'), meta.configs.cookie.get());
+ res.redirect(`${nconf.get('relative_path')}/`);
+ });
};
authenticationController.login = async (req, res, next) => {
diff --git a/src/controllers/category.js b/src/controllers/category.js
index d233dbb369..1c3a7d8f82 100644
--- a/src/controllers/category.js
+++ b/src/controllers/category.js
@@ -30,9 +30,10 @@ categoryController.get = async function (req, res, next) {
return next();
}
- const [categoryFields, userPrivileges, userSettings, rssToken] = await Promise.all([
+ const [categoryFields, userPrivileges, tagData, userSettings, rssToken] = await Promise.all([
categories.getCategoryFields(cid, ['slug', 'disabled', 'link']),
privileges.categories.get(cid, req.uid),
+ helpers.getSelectedTag(req.query.tag),
user.getSettings(req.uid),
user.auth.getFeedToken(req.uid),
]);
@@ -121,6 +122,8 @@ categoryController.get = async function (req, res, next) {
categoryData.showSelect = userPrivileges.editable;
categoryData.showTopicTools = userPrivileges.editable;
categoryData.topicIndex = topicIndex;
+ categoryData.selectedTag = tagData.selectedTag;
+ categoryData.selectedTags = tagData.selectedTags;
categoryData.rssFeedUrl = `${url}/category/${categoryData.cid}.rss`;
if (parseInt(req.uid, 10)) {
categories.markAsRead([cid], req.uid);
diff --git a/src/controllers/groups.js b/src/controllers/groups.js
index e7b32899b7..c61d84a1a9 100644
--- a/src/controllers/groups.js
+++ b/src/controllers/groups.js
@@ -23,6 +23,7 @@ groupsController.list = async function (req, res) {
res.render('groups/list', {
groups: groupData,
allowGroupCreation: allowGroupCreation,
+ sort: validator.escape(String(sort)),
nextStart: 15,
title: '[[pages:groups]]',
breadcrumbs: helpers.buildBreadcrumbs([{ text: '[[pages:groups]]' }]),
diff --git a/src/controllers/helpers.js b/src/controllers/helpers.js
index dcb6f55e4c..3d15ea12be 100644
--- a/src/controllers/helpers.js
+++ b/src/controllers/helpers.js
@@ -356,6 +356,24 @@ helpers.getSelectedCategory = async function (cids) {
};
};
+helpers.getSelectedTag = function (tags) {
+ if (tags && !Array.isArray(tags)) {
+ tags = [tags];
+ }
+ tags = tags || [];
+ const tagData = tags.map(t => validator.escape(String(t)));
+ let selectedTag = null;
+ if (tagData.length) {
+ selectedTag = {
+ label: tagData.join(', '),
+ };
+ }
+ return {
+ selectedTags: tagData,
+ selectedTag: selectedTag,
+ };
+};
+
helpers.trimChildren = function (category) {
if (category && Array.isArray(category.children)) {
category.children = category.children.slice(0, category.subCategoriesPerPage);
@@ -371,11 +389,14 @@ helpers.trimChildren = function (category) {
helpers.setCategoryTeaser = function (category) {
if (Array.isArray(category.posts) && category.posts.length && category.posts[0]) {
+ const post = category.posts[0];
category.teaser = {
- url: `${nconf.get('relative_path')}/post/${category.posts[0].pid}`,
- timestampISO: category.posts[0].timestampISO,
- pid: category.posts[0].pid,
- topic: category.posts[0].topic,
+ url: `${nconf.get('relative_path')}/post/${post.pid}`,
+ timestampISO: post.timestampISO,
+ pid: post.pid,
+ index: post.index,
+ topic: post.topic,
+ user: post.user,
};
}
};
@@ -469,6 +490,10 @@ helpers.formatApiResponse = async (statusCode, res, payload) => {
case '[[error:invalid-uid]]':
statusCode = 401;
break;
+
+ case '[[error:no-topic]]':
+ statusCode = 404;
+ break;
}
if (message.startsWith('[[error:required-parameters-missing, ')) {
diff --git a/src/controllers/index.js b/src/controllers/index.js
index 896a4a8e5f..1523c7073d 100644
--- a/src/controllers/index.js
+++ b/src/controllers/index.js
@@ -193,11 +193,7 @@ Controllers.registerInterstitial = async function (req, res, next) {
return res.redirect(`${nconf.get('relative_path')}/register`);
}
try {
- const data = await plugins.hooks.fire('filter:register.interstitial', {
- req,
- userData: req.session.registration,
- interstitials: [],
- });
+ const data = await user.interstitials.get(req, req.session.registration);
if (!data.interstitials.length) {
// No interstitials, redirect to home
diff --git a/src/controllers/mods.js b/src/controllers/mods.js
index aed55990e6..1592acdecd 100644
--- a/src/controllers/mods.js
+++ b/src/controllers/mods.js
@@ -95,10 +95,27 @@ modsController.flags.list = async function (req, res) {
helpers.getSelectedCategory(filters.cid),
]);
+ // Send back information for userFilter module
+ const selected = {};
+ await Promise.all(['assignee', 'reporterId', 'targetUid'].map(async (filter) => {
+ let uids = filters[filter];
+ if (!uids) {
+ selected[filter] = [];
+ return;
+ }
+ if (!Array.isArray(uids)) {
+ uids = [uids];
+ }
+
+ selected[filter] = await user.getUsersFields(uids, ['username', 'userslug', 'picture']);
+ }));
+
res.render('flags/list', {
flags: flagsData.flags,
+ count: flagsData.count,
analytics: analyticsData,
selectedCategory: selectData.selectedCategory,
+ selected,
hasFilter: hasFilter,
filters: filters,
expanded: !!(filters.assignee || filters.reporterId || filters.targetUid),
diff --git a/src/controllers/recent.js b/src/controllers/recent.js
index 344ec3b3eb..ee6347ebc7 100644
--- a/src/controllers/recent.js
+++ b/src/controllers/recent.js
@@ -4,7 +4,6 @@
const nconf = require('nconf');
const user = require('../user');
-const categories = require('../categories');
const topics = require('../topics');
const meta = require('../meta');
const helpers = require('./helpers');
@@ -19,13 +18,14 @@ recentController.get = async function (req, res, next) {
if (!data) {
return next();
}
+
res.render('recent', data);
};
recentController.getData = async function (req, url, sort) {
const page = parseInt(req.query.page, 10) || 1;
let term = helpers.terms[req.query.term];
- const { cid, tags } = req.query;
+ const { cid, tag } = req.query;
const filter = req.query.filter || '';
if (!term && req.query.term) {
@@ -33,11 +33,12 @@ recentController.getData = async function (req, url, sort) {
}
term = term || 'alltime';
- const [settings, categoryData, rssToken, canPost, isPrivileged] = await Promise.all([
+ const [settings, categoryData, tagData, rssToken, canPost, isPrivileged] = await Promise.all([
user.getSettings(req.uid),
helpers.getSelectedCategory(cid),
+ helpers.getSelectedTag(tag),
user.auth.getFeedToken(req.uid),
- canPostTopic(req.uid),
+ privileges.categories.canPostTopic(req.uid),
user.isPrivileged(req.uid),
]);
@@ -46,7 +47,7 @@ recentController.getData = async function (req, url, sort) {
const data = await topics.getSortedTopics({
cids: cid,
- tags: tags,
+ tags: tag,
uid: req.uid,
start: start,
stop: stop,
@@ -73,6 +74,8 @@ recentController.getData = async function (req, url, sort) {
data.allCategoriesUrl = baseUrl + helpers.buildQueryString(req.query, 'cid', '');
data.selectedCategory = categoryData.selectedCategory;
data.selectedCids = categoryData.selectedCids;
+ data.selectedTag = tagData.selectedTag;
+ data.selectedTags = tagData.selectedTags;
data['feeds:disableRSS'] = meta.config['feeds:disableRSS'] || 0;
data.rssFeedUrl = `${relative_path}/${url}.rss`;
if (req.loggedIn) {
@@ -90,10 +93,5 @@ recentController.getData = async function (req, url, sort) {
return data;
};
-async function canPostTopic(uid) {
- let cids = await categories.getAllCidsFromSet('categories:cid');
- cids = await privileges.categories.filterCids('topics:create', cids, uid);
- return cids.length > 0;
-}
require('../promisify')(recentController, ['get']);
diff --git a/src/controllers/search.js b/src/controllers/search.js
index 013db8457f..49fd58a6dc 100644
--- a/src/controllers/search.js
+++ b/src/controllers/search.js
@@ -9,8 +9,11 @@ const meta = require('../meta');
const plugins = require('../plugins');
const search = require('../search');
const categories = require('../categories');
+const user = require('../user');
+const topics = require('../topics');
const pagination = require('../pagination');
const privileges = require('../privileges');
+const translator = require('../translator');
const utils = require('../utils');
const helpers = require('./helpers');
@@ -58,21 +61,20 @@ searchController.search = async function (req, res, next) {
categories: req.query.categories,
searchChildren: req.query.searchChildren,
hasTags: req.query.hasTags,
- replies: req.query.replies,
- repliesFilter: req.query.repliesFilter,
- timeRange: req.query.timeRange,
- timeFilter: req.query.timeFilter,
- sortBy: req.query.sortBy || meta.config.searchDefaultSortBy || '',
- sortDirection: req.query.sortDirection,
+ replies: validator.escape(String(req.query.replies || '')),
+ repliesFilter: validator.escape(String(req.query.repliesFilter || '')),
+ timeRange: validator.escape(String(req.query.timeRange || '')),
+ timeFilter: validator.escape(String(req.query.timeFilter || '')),
+ sortBy: validator.escape(String(req.query.sortBy || '')) || meta.config.searchDefaultSortBy || '',
+ sortDirection: validator.escape(String(req.query.sortDirection || '')),
page: page,
itemsPerPage: req.query.itemsPerPage,
uid: req.uid,
qs: req.query,
};
- const [searchData, categoriesData] = await Promise.all([
+ const [searchData] = await Promise.all([
search.search(data),
- buildCategories(req.uid, searchOnly),
recordSearch(data),
]);
@@ -85,16 +87,55 @@ searchController.search = async function (req, res, next) {
return res.json(searchData);
}
- searchData.allCategories = categoriesData;
- searchData.allCategoriesCount = Math.max(10, Math.min(20, categoriesData.length));
searchData.breadcrumbs = helpers.buildBreadcrumbs([{ text: '[[global:search]]' }]);
- searchData.expandSearch = !req.query.term;
-
searchData.showAsPosts = !req.query.showAs || req.query.showAs === 'posts';
searchData.showAsTopics = req.query.showAs === 'topics';
searchData.title = '[[global:header.search]]';
+ if (Array.isArray(data.categories)) {
+ searchData.selectedCids = data.categories.map(cid => validator.escape(String(cid)));
+ if (!searchData.selectedCids.includes('all') && searchData.selectedCids.length) {
+ searchData.selectedCategory = { cid: 0 };
+ }
+ }
+
+ searchData.filters = {
+ replies: {
+ active: !!data.repliesFilter,
+ label: `[[search:replies-${data.repliesFilter}-count, ${data.replies}]]`,
+ },
+ time: {
+ active: !!(data.timeFilter && data.timeRange),
+ label: `[[search:time-${data.timeFilter}-than-${data.timeRange}]]`,
+ },
+ sort: {
+ active: !!(data.sortBy && data.sortBy !== 'relevance'),
+ label: `[[search:sort-by-${data.sortBy}-${data.sortDirection}]]`,
+ },
+ users: {
+ active: !!(data.postedBy),
+ label: translator.compile(
+ 'search:posted-by-usernames',
+ (Array.isArray(data.postedBy) ? data.postedBy : [])
+ .map(u => validator.escape(String(u))).join(', ')
+ ),
+ },
+ tags: {
+ active: !!(Array.isArray(data.hasTags) && data.hasTags.length),
+ label: translator.compile(
+ 'search:tags-x',
+ (Array.isArray(data.hasTags) ? data.hasTags : [])
+ .map(u => validator.escape(String(u))).join(', ')
+ ),
+ },
+ categories: {
+ active: !!(Array.isArray(data.categories) && data.categories.length),
+ label: await buildSelectedCategoryLabel(searchData.selectedCids),
+ },
+ };
+ searchData.userFilterSelected = await getSelectedUsers(data.postedBy);
+ searchData.tagFilterSelected = getSelectedTags(data.hasTags);
searchData.searchDefaultSortBy = meta.config.searchDefaultSortBy || '';
searchData.searchDefaultIn = meta.config.searchDefaultIn || 'titlesposts';
searchData.privileges = userPrivileges;
@@ -106,46 +147,63 @@ const searches = {};
async function recordSearch(data) {
const { query, searchIn } = data;
- if (query) {
- const cleanedQuery = String(query).trim().toLowerCase().slice(0, 255);
- if (['titles', 'titlesposts', 'posts'].includes(searchIn) && cleanedQuery.length > 2) {
- searches[data.uid] = searches[data.uid] || { timeoutId: 0, queries: [] };
- searches[data.uid].queries.push(cleanedQuery);
- if (searches[data.uid].timeoutId) {
- clearTimeout(searches[data.uid].timeoutId);
- }
- searches[data.uid].timeoutId = setTimeout(async () => {
- if (searches[data.uid] && searches[data.uid].queries) {
- const copy = searches[data.uid].queries.slice();
- const filtered = searches[data.uid].queries.filter(
- q => !copy.find(query => query.startsWith(q) && query.length > q.length)
- );
- delete searches[data.uid];
- const dayTimestamp = (new Date());
- dayTimestamp.setHours(0, 0, 0, 0);
- await Promise.all(_.uniq(filtered).map(async (query) => {
- await db.sortedSetIncrBy('searches:all', 1, query);
- await db.sortedSetIncrBy(`searches:${dayTimestamp.getTime()}`, 1, query);
- }));
- }
- }, 5000);
+ if (!query || parseInt(data.qs.composer, 10) === 1) {
+ return;
+ }
+ const cleanedQuery = String(query).trim().toLowerCase().slice(0, 255);
+ if (['titles', 'titlesposts', 'posts'].includes(searchIn) && cleanedQuery.length > 2) {
+ searches[data.uid] = searches[data.uid] || { timeoutId: 0, queries: [] };
+ searches[data.uid].queries.push(cleanedQuery);
+ if (searches[data.uid].timeoutId) {
+ clearTimeout(searches[data.uid].timeoutId);
}
+ searches[data.uid].timeoutId = setTimeout(async () => {
+ if (searches[data.uid] && searches[data.uid].queries) {
+ const copy = searches[data.uid].queries.slice();
+ const filtered = searches[data.uid].queries.filter(
+ q => !copy.find(query => query.startsWith(q) && query.length > q.length)
+ );
+ delete searches[data.uid];
+ const dayTimestamp = (new Date());
+ dayTimestamp.setHours(0, 0, 0, 0);
+ await Promise.all(_.uniq(filtered).map(async (query) => {
+ await db.sortedSetIncrBy('searches:all', 1, query);
+ await db.sortedSetIncrBy(`searches:${dayTimestamp.getTime()}`, 1, query);
+ }));
+ }
+ }, 5000);
}
}
-async function buildCategories(uid, searchOnly) {
- if (searchOnly) {
+async function getSelectedUsers(postedBy) {
+ if (!Array.isArray(postedBy) || !postedBy.length) {
return [];
}
+ const uids = await user.getUidsByUsernames(postedBy);
+ return await user.getUsersFields(uids, ['username', 'userslug', 'picture']);
+}
- const cids = await categories.getCidsByPrivilege('categories:cid', uid, 'read');
- let categoriesData = await categories.getCategoriesData(cids);
- categoriesData = categoriesData.filter(category => category && !category.link);
- categoriesData = categories.getTree(categoriesData);
- categoriesData = categories.buildForSelectCategories(categoriesData, ['text', 'value']);
+function getSelectedTags(hasTags) {
+ if (!Array.isArray(hasTags) || !hasTags.length) {
+ return [];
+ }
+ const tags = hasTags.map(tag => ({ value: tag }));
+ return topics.getTagData(tags);
+}
- return [
- { value: 'all', text: '[[unread:all_categories]]' },
- { value: 'watched', text: '[[category:watched-categories]]' },
- ].concat(categoriesData);
+async function buildSelectedCategoryLabel(selectedCids) {
+ let label = '[[search:categories]]';
+ if (Array.isArray(selectedCids)) {
+ if (selectedCids.length > 1) {
+ label = `[[search:categories-x, ${selectedCids.length}]]`;
+ } else if (selectedCids.length === 1 && selectedCids[0] === 'watched') {
+ label = `[[search:categories-watched-categories]]`;
+ } else if (selectedCids.length === 1 && parseInt(selectedCids[0], 10)) {
+ const categoryData = await categories.getCategoryData(selectedCids[0]);
+ if (categoryData && categoryData.name) {
+ label = `[[search:categories-x, ${categoryData.name}]]`;
+ }
+ }
+ }
+ return label;
}
diff --git a/src/controllers/tags.js b/src/controllers/tags.js
index a447460b1a..3165303445 100644
--- a/src/controllers/tags.js
+++ b/src/controllers/tags.js
@@ -25,10 +25,11 @@ tagsController.getTag = async function (req, res) {
breadcrumbs: helpers.buildBreadcrumbs([{ text: '[[tags:tags]]', url: '/tags' }, { text: tag }]),
title: `[[pages:tag, ${tag}]]`,
};
- const [settings, cids, categoryData, isPrivileged] = await Promise.all([
+ const [settings, cids, categoryData, canPost, isPrivileged] = await Promise.all([
user.getSettings(req.uid),
cid || categories.getCidsByPrivilege('categories:cid', req.uid, 'topics:read'),
helpers.getSelectedCategory(cid),
+ privileges.categories.canPostTopic(req.uid),
user.isPrivileged(req.uid),
]);
const start = Math.max(0, (page - 1) * settings.topicsPerPage);
@@ -40,6 +41,7 @@ tagsController.getTag = async function (req, res) {
]);
templateData.topics = await topics.getTopics(tids, req.uid);
+ templateData.canPost = canPost;
templateData.showSelect = isPrivileged;
templateData.showTopicTools = isPrivileged;
templateData.allCategoriesUrl = `tags/${tag}${helpers.buildQueryString(req.query, 'cid', '')}`;
diff --git a/src/controllers/top.js b/src/controllers/top.js
index cc06e794c4..e2935ec54d 100644
--- a/src/controllers/top.js
+++ b/src/controllers/top.js
@@ -24,5 +24,6 @@ topController.get = async function (req, res, next) {
if (req.loggedIn) {
data.rssFeedUrl += `?${feedQs}`;
}
+
res.render('top', data);
};
diff --git a/src/controllers/unread.js b/src/controllers/unread.js
index 38cda453a0..5db883a12a 100644
--- a/src/controllers/unread.js
+++ b/src/controllers/unread.js
@@ -9,17 +9,20 @@ const pagination = require('../pagination');
const user = require('../user');
const topics = require('../topics');
const helpers = require('./helpers');
+const privileges = require('../privileges');
const unreadController = module.exports;
const relative_path = nconf.get('relative_path');
unreadController.get = async function (req, res) {
- const { cid } = req.query;
+ const { cid, tag } = req.query;
const filter = req.query.filter || '';
- const [categoryData, userSettings, isPrivileged] = await Promise.all([
+ const [categoryData, tagData, userSettings, canPost, isPrivileged] = await Promise.all([
helpers.getSelectedCategory(cid),
+ helpers.getSelectedTag(tag),
user.getSettings(req.uid),
+ privileges.categories.canPostTopic(req.uid),
user.isPrivileged(req.uid),
]);
@@ -28,6 +31,7 @@ unreadController.get = async function (req, res) {
const stop = start + userSettings.topicsPerPage - 1;
const data = await topics.getUnreadTopics({
cid: cid,
+ tag: tag,
uid: req.uid,
start: start,
stop: stop,
@@ -53,6 +57,7 @@ unreadController.get = async function (req, res) {
req.query.page = Math.max(1, Math.min(data.pageCount, page));
return helpers.redirect(res, `/unread?${querystring.stringify(req.query)}`);
}
+ data.canPost = canPost;
data.showSelect = true;
data.showTopicTools = isPrivileged;
data.allCategoriesUrl = `${baseUrl}${helpers.buildQueryString(req.query, 'cid', '')}`;
@@ -61,6 +66,8 @@ unreadController.get = async function (req, res) {
data.selectCategoryLabel = '[[unread:mark_as_read]]';
data.selectCategoryIcon = 'fa-inbox';
data.showCategorySelectLabel = true;
+ data.selectedTag = tagData.selectedTag;
+ data.selectedTags = tagData.selectedTags;
data.filters = helpers.buildFilters(baseUrl, filter, req.query);
data.selectedFilter = data.filters.find(filter => filter && filter.selected);
diff --git a/src/controllers/user.js b/src/controllers/user.js
index df71aa0b18..6c924acf87 100644
--- a/src/controllers/user.js
+++ b/src/controllers/user.js
@@ -1,8 +1,5 @@
'use strict';
-const path = require('path');
-const winston = require('winston');
-
const user = require('../user');
const privileges = require('../privileges');
const accountHelpers = require('./accounts/helpers');
@@ -79,40 +76,6 @@ userController.getUserDataByUID = async function (callerUid, uid) {
return userData;
};
-userController.exportPosts = async function (req, res, next) {
- sendExport(`${res.locals.uid}_posts.csv`, 'text/csv', res, next);
-};
-
-userController.exportUploads = function (req, res, next) {
- sendExport(`${res.locals.uid}_uploads.zip`, 'application/zip', res, next);
-};
-
-userController.exportProfile = async function (req, res, next) {
- sendExport(`${res.locals.uid}_profile.json`, 'application/json', res, next);
-};
-
-// DEPRECATED; Remove in NodeBB v3.0.0
-function sendExport(filename, type, res, next) {
- winston.warn(`[users/export] Access via page API is deprecated, use GET /api/v3/users/:uid/exports/:type instead.`);
-
- res.sendFile(filename, {
- root: path.join(__dirname, '../../build/export'),
- headers: {
- 'Content-Type': type,
- 'Content-Disposition': `attachment; filename=${filename}`,
- },
- }, (err) => {
- if (err) {
- if (err.code === 'ENOENT') {
- res.locals.isAPI = false;
- return next();
- }
- return next(err);
- }
- });
-}
-
require('../promisify')(userController, [
'getCurrentUser', 'getUserByUID', 'getUserByUsername', 'getUserByEmail',
- 'exportPosts', 'exportUploads', 'exportProfile',
]);
diff --git a/src/controllers/users.js b/src/controllers/users.js
index f08e428c38..7506a8c8d3 100644
--- a/src/controllers/users.js
+++ b/src/controllers/users.js
@@ -61,7 +61,7 @@ usersController.getOnlineUsers = async function (req, res) {
}
userData.anonymousUserCount = guests + hiddenCount;
- userData.timeagoCutoff = 1000 * 60 * 60 * 24;
+ userData.timeagoCutoff = 1;
await render(req, res, userData);
};
diff --git a/src/controllers/write/admin.js b/src/controllers/write/admin.js
index 8b9faa55ef..adac0a6ef2 100644
--- a/src/controllers/write/admin.js
+++ b/src/controllers/write/admin.js
@@ -1,42 +1,30 @@
'use strict';
-const meta = require('../../meta');
-const privileges = require('../../privileges');
-const analytics = require('../../analytics');
-
+const api = require('../../api');
const helpers = require('../helpers');
const Admin = module.exports;
Admin.updateSetting = async (req, res) => {
- const ok = await privileges.admin.can('admin:settings', req.uid);
-
- if (!ok) {
- return helpers.formatApiResponse(403, res);
- }
+ await api.admin.updateSetting(req, {
+ setting: req.params.setting,
+ value: req.body.value,
+ });
- await meta.configs.set(req.params.setting, req.body.value);
helpers.formatApiResponse(200, res);
};
Admin.getAnalyticsKeys = async (req, res) => {
- let keys = await analytics.getKeys();
-
- // Sort keys alphabetically
- keys = keys.sort((a, b) => (a < b ? -1 : 1));
-
- helpers.formatApiResponse(200, res, { keys });
+ helpers.formatApiResponse(200, res, {
+ keys: await api.admin.getAnalyticsKeys(),
+ });
};
Admin.getAnalyticsData = async (req, res) => {
- // Default returns views from past 24 hours, by hour
- if (!req.query.amount) {
- if (req.query.units === 'days') {
- req.query.amount = 30;
- } else {
- req.query.amount = 24;
- }
- }
- const getStats = req.query.units === 'days' ? analytics.getDailyStatsForSet : analytics.getHourlyStatsForSet;
- helpers.formatApiResponse(200, res, await getStats(`analytics:${req.params.set}`, parseInt(req.query.until, 10) || Date.now(), req.query.amount));
+ helpers.formatApiResponse(200, res, await api.admin.getAnalyticsData(req, {
+ set: req.params.set,
+ until: parseInt(req.query.until, 10) || Date.now(),
+ amount: req.query.amount,
+ units: req.query.units,
+ }));
};
diff --git a/src/controllers/write/categories.js b/src/controllers/write/categories.js
index 22250b931c..d84f2bddfb 100644
--- a/src/controllers/write/categories.js
+++ b/src/controllers/write/categories.js
@@ -1,6 +1,5 @@
'use strict';
-const privileges = require('../../privileges');
const categories = require('../../categories');
const api = require('../../api');
@@ -8,75 +7,56 @@ const helpers = require('../helpers');
const Categories = module.exports;
-const hasAdminPrivilege = async (uid) => {
- const ok = await privileges.admin.can(`admin:categories`, uid);
- if (!ok) {
- throw new Error('[[error:no-privileges]]');
- }
-};
-
Categories.get = async (req, res) => {
helpers.formatApiResponse(200, res, await api.categories.get(req, req.params));
};
Categories.create = async (req, res) => {
- await hasAdminPrivilege(req.uid);
-
const response = await api.categories.create(req, req.body);
helpers.formatApiResponse(200, res, response);
};
Categories.update = async (req, res) => {
- await hasAdminPrivilege(req.uid);
+ await api.categories.update(req, {
+ cid: req.params.cid,
+ values: req.body,
+ });
- const payload = {};
- payload[req.params.cid] = req.body;
- await api.categories.update(req, payload);
const categoryObjs = await categories.getCategories([req.params.cid]);
helpers.formatApiResponse(200, res, categoryObjs[0]);
};
Categories.delete = async (req, res) => {
- await hasAdminPrivilege(req.uid);
-
await api.categories.delete(req, { cid: req.params.cid });
helpers.formatApiResponse(200, res);
};
Categories.getPrivileges = async (req, res) => {
- if (!await privileges.admin.can('admin:privileges', req.uid)) {
- throw new Error('[[error:no-privileges]]');
- }
-
- const privilegeSet = await api.categories.getPrivileges(req, req.params.cid);
+ const privilegeSet = await api.categories.getPrivileges(req, { cid: req.params.cid });
helpers.formatApiResponse(200, res, privilegeSet);
};
Categories.setPrivilege = async (req, res) => {
- if (!await privileges.admin.can('admin:privileges', req.uid)) {
- throw new Error('[[error:no-privileges]]');
- }
+ const { cid, privilege } = req.params;
await api.categories.setPrivilege(req, {
- ...req.params,
+ cid,
+ privilege,
member: req.body.member,
set: req.method === 'PUT',
});
- const privilegeSet = await api.categories.getPrivileges(req, req.params.cid);
+ const privilegeSet = await api.categories.getPrivileges(req, { cid: req.params.cid });
helpers.formatApiResponse(200, res, privilegeSet);
};
Categories.setModerator = async (req, res) => {
- if (!await privileges.admin.can('admin:admins-mods', req.uid)) {
- throw new Error('[[error:no-privileges]]');
- }
- const privilegeList = await privileges.categories.getUserPrivilegeList();
- await api.categories.setPrivilege(req, {
+ await api.categories.setModerator(req, {
cid: req.params.cid,
- privilege: privilegeList,
member: req.params.uid,
set: req.method === 'PUT',
});
- helpers.formatApiResponse(200, res);
+
+ const privilegeSet = await api.categories.getPrivileges(req, { cid: req.params.cid });
+ helpers.formatApiResponse(200, res, privilegeSet);
};
diff --git a/src/controllers/write/chats.js b/src/controllers/write/chats.js
index f009047a61..fe7900a50a 100644
--- a/src/controllers/write/chats.js
+++ b/src/controllers/write/chats.js
@@ -1,8 +1,6 @@
'use strict';
const api = require('../../api');
-const messaging = require('../../messaging');
-
const helpers = require('../helpers');
const Chats = module.exports;
@@ -10,9 +8,7 @@ const Chats = module.exports;
Chats.list = async (req, res) => {
const page = (isFinite(req.query.page) && parseInt(req.query.page, 10)) || 1;
const perPage = (isFinite(req.query.perPage) && parseInt(req.query.perPage, 10)) || 20;
- const start = Math.max(0, page - 1) * perPage;
- const stop = start + perPage;
- const { rooms } = await messaging.getRecentChats(req.uid, req.uid, start, stop);
+ const { rooms } = await api.chats.list(req, { page, perPage });
helpers.formatApiResponse(200, res, { rooms });
};
@@ -23,21 +19,20 @@ Chats.create = async (req, res) => {
};
Chats.exists = async (req, res) => {
+ // yes, this is fine. Room existence is checked via middleware :)
helpers.formatApiResponse(200, res);
};
Chats.get = async (req, res) => {
- const roomObj = await messaging.loadRoom(req.uid, {
+ helpers.formatApiResponse(200, res, await api.chats.get(req, {
uid: req.query.uid || req.uid,
roomId: req.params.roomId,
- });
-
- helpers.formatApiResponse(200, res, roomObj);
+ }));
};
Chats.post = async (req, res) => {
const messageObj = await api.chats.post(req, {
- ...req.body,
+ message: req.body.message,
roomId: req.params.roomId,
});
@@ -46,23 +41,34 @@ Chats.post = async (req, res) => {
Chats.rename = async (req, res) => {
const roomObj = await api.chats.rename(req, {
- ...req.body,
+ name: req.body.name,
roomId: req.params.roomId,
});
helpers.formatApiResponse(200, res, roomObj);
};
-Chats.users = async (req, res) => {
- const users = await api.chats.users(req, {
- ...req.params,
+Chats.mark = async (req, res) => {
+ const state = req.method === 'PUT' ? 1 : 0;
+ const roomObj = await api.chats.mark(req, {
+ roomId: req.params.roomId,
+ state,
});
+
+ helpers.formatApiResponse(200, res, roomObj);
+};
+
+Chats.users = async (req, res) => {
+ const { roomId } = req.params;
+ const users = await api.chats.users(req, { roomId });
+
helpers.formatApiResponse(200, res, users);
};
Chats.invite = async (req, res) => {
+ const { uids } = req.body;
const users = await api.chats.invite(req, {
- ...req.body,
+ uids,
roomId: req.params.roomId,
});
@@ -70,8 +76,9 @@ Chats.invite = async (req, res) => {
};
Chats.kick = async (req, res) => {
+ const { uids } = req.body;
const users = await api.chats.kick(req, {
- ...req.body,
+ uids,
roomId: req.params.roomId,
});
@@ -79,9 +86,9 @@ Chats.kick = async (req, res) => {
};
Chats.kickUser = async (req, res) => {
- req.body.uids = [req.params.uid];
+ const uids = [req.params.uid];
const users = await api.chats.kick(req, {
- ...req.body,
+ uids,
roomId: req.params.roomId,
});
@@ -90,40 +97,38 @@ Chats.kickUser = async (req, res) => {
Chats.messages = {};
Chats.messages.list = async (req, res) => {
- const messages = await messaging.getMessages({
- callerUid: req.uid,
- uid: req.query.uid || req.uid,
- roomId: req.params.roomId,
- start: parseInt(req.query.start, 10) || 0,
- count: 50,
- });
+ const uid = req.query.uid || req.uid;
+ const { roomId } = req.params;
+ const start = parseInt(req.query.start, 10) || 0;
+ const { messages } = await api.chats.listMessages(req, { uid, roomId, start });
helpers.formatApiResponse(200, res, { messages });
};
Chats.messages.get = async (req, res) => {
- const messages = await messaging.getMessagesData([req.params.mid], req.uid, req.params.roomId, false);
- helpers.formatApiResponse(200, res, messages.pop());
+ const { mid, roomId } = req.params;
+
+ helpers.formatApiResponse(200, res, await api.chats.getMessage(req, { mid, roomId }));
};
Chats.messages.edit = async (req, res) => {
- await messaging.canEdit(req.params.mid, req.uid);
- await messaging.editMessage(req.uid, req.params.mid, req.params.roomId, req.body.message);
+ const { mid, roomId } = req.params;
+ const { message } = req.body;
+ await api.chats.editMessage(req, { mid, roomId, message });
- const messages = await messaging.getMessagesData([req.params.mid], req.uid, req.params.roomId, false);
- helpers.formatApiResponse(200, res, messages.pop());
+ helpers.formatApiResponse(200, res, await api.chats.getMessage(req, { mid, roomId }));
};
Chats.messages.delete = async (req, res) => {
- await messaging.canDelete(req.params.mid, req.uid);
- await messaging.deleteMessage(req.params.mid, req.uid);
+ const { mid } = req.params;
+ await api.chats.deleteMessage(req, { mid });
helpers.formatApiResponse(200, res);
};
Chats.messages.restore = async (req, res) => {
- await messaging.canDelete(req.params.mid, req.uid);
- await messaging.restoreMessage(req.params.mid, req.uid);
+ const { mid } = req.params;
+ await api.chats.restoreMessage(req, { mid });
helpers.formatApiResponse(200, res);
};
diff --git a/src/controllers/write/files.js b/src/controllers/write/files.js
index 61a6320094..18b57b29fe 100644
--- a/src/controllers/write/files.js
+++ b/src/controllers/write/files.js
@@ -1,16 +1,16 @@
'use strict';
-const fs = require('fs').promises;
const helpers = require('../helpers');
+const api = require('../../api');
const Files = module.exports;
Files.delete = async (req, res) => {
- await fs.unlink(res.locals.cleanedPath);
+ await api.files.delete(req, { path: res.locals.cleanedPath });
helpers.formatApiResponse(200, res);
};
Files.createFolder = async (req, res) => {
- await fs.mkdir(res.locals.folderPath);
+ await api.files.createFolder(req, { path: res.locals.folderPath });
helpers.formatApiResponse(200, res);
};
diff --git a/src/controllers/write/flags.js b/src/controllers/write/flags.js
index 3bda63888e..63135274bf 100644
--- a/src/controllers/write/flags.js
+++ b/src/controllers/write/flags.js
@@ -1,53 +1,48 @@
'use strict';
const user = require('../../user');
-const flags = require('../../flags');
const api = require('../../api');
const helpers = require('../helpers');
const Flags = module.exports;
Flags.create = async (req, res) => {
- const flagObj = await api.flags.create(req, { ...req.body });
+ const { type, id, reason } = req.body;
+ const flagObj = await api.flags.create(req, { type, id, reason });
helpers.formatApiResponse(200, res, await user.isPrivileged(req.uid) ? flagObj : undefined);
};
Flags.get = async (req, res) => {
- const isPrivileged = await user.isPrivileged(req.uid);
- if (!isPrivileged) {
- return helpers.formatApiResponse(403, res);
- }
-
- helpers.formatApiResponse(200, res, await flags.get(req.params.flagId));
+ helpers.formatApiResponse(200, res, await api.flags.get(req, req.params.flagId));
};
Flags.update = async (req, res) => {
+ const { state, assignee } = req.body;
const history = await api.flags.update(req, {
flagId: req.params.flagId,
- ...req.body,
+ state,
+ assignee,
});
helpers.formatApiResponse(200, res, { history });
};
Flags.delete = async (req, res) => {
- await flags.purge([req.params.flagId]);
+ await api.flags.delete(req, { flagId: req.params.flagId });
helpers.formatApiResponse(200, res);
};
Flags.appendNote = async (req, res) => {
+ const { note, datetime } = req.body;
const payload = await api.flags.appendNote(req, {
flagId: req.params.flagId,
- ...req.body,
+ note,
+ datetime,
});
helpers.formatApiResponse(200, res, payload);
};
Flags.deleteNote = async (req, res) => {
- const payload = await api.flags.deleteNote(req, {
- ...req.params,
- });
-
- helpers.formatApiResponse(200, res, payload);
+ helpers.formatApiResponse(200, res, await api.flags.deleteNote(req, req.params));
};
diff --git a/src/controllers/write/posts.js b/src/controllers/write/posts.js
index c9c8d21104..f250fb2fc4 100644
--- a/src/controllers/write/posts.js
+++ b/src/controllers/write/posts.js
@@ -1,11 +1,8 @@
'use strict';
const posts = require('../../posts');
-const privileges = require('../../privileges');
-
const api = require('../../api');
const helpers = require('../helpers');
-const apiHelpers = require('../../api/helpers');
const Posts = module.exports;
@@ -18,7 +15,6 @@ Posts.edit = async (req, res) => {
...req.body,
pid: req.params.pid,
uid: req.uid,
- req: apiHelpers.buildReqObject(req),
});
helpers.formatApiResponse(200, res, editResult);
@@ -96,21 +92,7 @@ Posts.restoreDiff = async (req, res) => {
};
Posts.deleteDiff = async (req, res) => {
- if (!parseInt(req.params.pid, 10)) {
- throw new Error('[[error:invalid-data]]');
- }
-
- const cid = await posts.getCidByPid(req.params.pid);
- const [isAdmin, isModerator] = await Promise.all([
- privileges.users.isAdministrator(req.uid),
- privileges.users.isModerator(req.uid, cid),
- ]);
-
- if (!(isAdmin || isModerator)) {
- return helpers.formatApiResponse(403, res, new Error('[[error:no-privileges]]'));
- }
-
- await posts.diffs.delete(req.params.pid, req.params.timestamp, req.uid);
+ await api.posts.deleteDiff(req, { ...req.params });
helpers.formatApiResponse(200, res, await api.posts.getDiffs(req, { ...req.params }));
};
diff --git a/src/controllers/write/topics.js b/src/controllers/write/topics.js
index bac1e42924..920f331b9a 100644
--- a/src/controllers/write/topics.js
+++ b/src/controllers/write/topics.js
@@ -1,11 +1,8 @@
'use strict';
-const validator = require('validator');
-
const db = require('../../database');
const api = require('../../api');
const topics = require('../../topics');
-const privileges = require('../../privileges');
const helpers = require('../helpers');
const middleware = require('../../middleware');
@@ -67,11 +64,8 @@ Topics.purge = async (req, res) => {
};
Topics.pin = async (req, res) => {
- // Pin expiry was not available w/ sockets hence not included in api lib method
- if (req.body.expiry) {
- await topics.tools.setPinExpiry(req.params.tid, req.body.expiry, req.uid);
- }
- await api.topics.pin(req, { tids: [req.params.tid] });
+ const { expiry } = req.body;
+ await api.topics.pin(req, { tids: [req.params.tid], expiry });
helpers.formatApiResponse(200, res);
};
@@ -107,45 +101,26 @@ Topics.unfollow = async (req, res) => {
};
Topics.addTags = async (req, res) => {
- if (!await privileges.topics.canEdit(req.params.tid, req.user.uid)) {
- return helpers.formatApiResponse(403, res);
- }
- const cid = await topics.getTopicField(req.params.tid, 'cid');
- await topics.validateTags(req.body.tags, cid, req.user.uid, req.params.tid);
- const tags = await topics.filterTags(req.body.tags);
+ await api.topics.addTags(req, {
+ tid: req.params.tid,
+ tags: req.body.tags,
+ });
- await topics.addTags(tags, [req.params.tid]);
helpers.formatApiResponse(200, res);
};
Topics.deleteTags = async (req, res) => {
- if (!await privileges.topics.canEdit(req.params.tid, req.user.uid)) {
- return helpers.formatApiResponse(403, res);
- }
-
- await topics.deleteTopicTags(req.params.tid);
+ await api.topics.deleteTags(req, { tid: req.params.tid });
helpers.formatApiResponse(200, res);
};
Topics.getThumbs = async (req, res) => {
- if (isFinite(req.params.tid)) { // post_uuids can be passed in occasionally, in that case no checks are necessary
- const [exists, canRead] = await Promise.all([
- topics.exists(req.params.tid),
- privileges.topics.can('topics:read', req.params.tid, req.uid),
- ]);
- if (!exists || !canRead) {
- return helpers.formatApiResponse(403, res);
- }
- }
-
- helpers.formatApiResponse(200, res, await topics.thumbs.get(req.params.tid));
+ helpers.formatApiResponse(200, res, await api.topics.getThumbs(req, { ...req.params }));
};
Topics.addThumb = async (req, res) => {
- await checkThumbPrivileges({ tid: req.params.tid, uid: req.user.uid, res });
- if (res.headersSent) {
- return;
- }
+ // todo: move controller logic to src/api/topics.js
+ await api.topics._checkThumbPrivileges({ tid: req.params.tid, uid: req.user.uid });
const files = await uploadsController.uploadThumb(req, res); // response is handled here
@@ -161,16 +136,12 @@ Topics.addThumb = async (req, res) => {
};
Topics.migrateThumbs = async (req, res) => {
- await Promise.all([
- checkThumbPrivileges({ tid: req.params.tid, uid: req.user.uid, res }),
- checkThumbPrivileges({ tid: req.body.tid, uid: req.user.uid, res }),
- ]);
- if (res.headersSent) {
- return;
- }
+ await api.topics.migrateThumbs(req, {
+ from: req.params.tid,
+ to: req.body.tid,
+ });
- await topics.thumbs.migrate(req.params.tid, req.body.tid);
- helpers.formatApiResponse(200, res);
+ helpers.formatApiResponse(200, res, await api.topics.getThumbs(req, { tid: req.body.tid }));
};
Topics.deleteThumb = async (req, res) => {
@@ -181,62 +152,32 @@ Topics.deleteThumb = async (req, res) => {
}
}
- await checkThumbPrivileges({ tid: req.params.tid, uid: req.user.uid, res });
- if (res.headersSent) {
- return;
- }
-
- await topics.thumbs.delete(req.params.tid, req.body.path);
+ await api.topics.deleteThumb(req, {
+ tid: req.params.tid,
+ path: req.body.path,
+ });
helpers.formatApiResponse(200, res, await topics.thumbs.get(req.params.tid));
};
Topics.reorderThumbs = async (req, res) => {
- await checkThumbPrivileges({ tid: req.params.tid, uid: req.user.uid, res });
- if (res.headersSent) {
- return;
- }
-
- const exists = await topics.thumbs.exists(req.params.tid, req.body.path);
- if (!exists) {
- return helpers.formatApiResponse(404, res);
- }
-
- await topics.thumbs.associate({
- id: req.params.tid,
- path: req.body.path,
- score: req.body.order,
+ const { path, order } = req.body;
+ await api.topics.reorderThumbs(req, {
+ path,
+ order,
+ ...req.params,
});
- helpers.formatApiResponse(200, res);
-};
-async function checkThumbPrivileges({ tid, uid, res }) {
- // req.params.tid could be either a tid (pushing a new thumb to an existing topic)
- // or a post UUID (a new topic being composed)
- const isUUID = validator.isUUID(tid);
-
- // Sanity-check the tid if it's strictly not a uuid
- if (!isUUID && (isNaN(parseInt(tid, 10)) || !await topics.exists(tid))) {
- return helpers.formatApiResponse(404, res, new Error('[[error:no-topic]]'));
- }
-
- // While drafts are not protected, tids are
- if (!isUUID && !await privileges.topics.canEdit(tid, uid)) {
- return helpers.formatApiResponse(403, res, new Error('[[error:no-privileges]]'));
- }
-}
+ helpers.formatApiResponse(200, res, await topics.thumbs.get(req.params.tid));
+};
Topics.getEvents = async (req, res) => {
- if (!await privileges.topics.can('topics:read', req.params.tid, req.uid)) {
- return helpers.formatApiResponse(403, res);
- }
+ const events = await api.topics.getEvents(req, { ...req.params });
- helpers.formatApiResponse(200, res, await topics.events.get(req.params.tid, req.uid));
+ helpers.formatApiResponse(200, res, { events });
};
Topics.deleteEvent = async (req, res) => {
- if (!await privileges.topics.isAdminOrMod(req.params.tid, req.uid)) {
- return helpers.formatApiResponse(403, res);
- }
- await topics.events.purge(req.params.tid, [req.params.eventId]);
+ await api.topics.deleteEvent(req, { ...req.params });
+
helpers.formatApiResponse(200, res);
};
diff --git a/src/controllers/write/users.js b/src/controllers/write/users.js
index 9e400c5ce9..6dbcb1b01e 100644
--- a/src/controllers/write/users.js
+++ b/src/controllers/write/users.js
@@ -1,36 +1,16 @@
'use strict';
-const util = require('util');
const nconf = require('nconf');
const path = require('path');
const crypto = require('crypto');
-const fs = require('fs').promises;
-const db = require('../../database');
const api = require('../../api');
-const groups = require('../../groups');
-const meta = require('../../meta');
-const privileges = require('../../privileges');
const user = require('../../user');
-const utils = require('../../utils');
const helpers = require('../helpers');
const Users = module.exports;
-const exportMetadata = new Map([
- ['posts', ['csv', 'text/csv']],
- ['uploads', ['zip', 'application/zip']],
- ['profile', ['json', 'application/json']],
-]);
-
-const hasAdminPrivilege = async (uid, privilege) => {
- const ok = await privileges.admin.can(`admin:${privilege}`, uid);
- if (!ok) {
- throw new Error('[[error:no-privileges]]');
- }
-};
-
Users.redirectBySlug = async (req, res) => {
const uid = await user.getUidByUserslug(req.params.userslug);
@@ -44,7 +24,6 @@ Users.redirectBySlug = async (req, res) => {
};
Users.create = async (req, res) => {
- await hasAdminPrivilege(req.uid, 'users');
const userObj = await api.users.create(req, req.body);
helpers.formatApiResponse(200, res, userObj);
};
@@ -54,9 +33,7 @@ Users.exists = async (req, res) => {
};
Users.get = async (req, res) => {
- const userData = await user.getUserData(req.params.uid);
- const publicUserData = await user.hidePrivateData(userData, req.uid);
- helpers.formatApiResponse(200, res, publicUserData);
+ helpers.formatApiResponse(200, res, await api.users.get(req, { ...req.params }));
};
Users.update = async (req, res) => {
@@ -80,7 +57,6 @@ Users.deleteAccount = async (req, res) => {
};
Users.deleteMany = async (req, res) => {
- await hasAdminPrivilege(req.uid, 'users');
await api.users.deleteMany(req, req.body);
helpers.formatApiResponse(200, res);
};
@@ -131,155 +107,50 @@ Users.unmute = async (req, res) => {
};
Users.generateToken = async (req, res) => {
- await hasAdminPrivilege(req.uid, 'settings');
- if (parseInt(req.params.uid, 10) !== parseInt(req.user.uid, 10)) {
- return helpers.formatApiResponse(401, res);
- }
-
- const settings = await meta.settings.get('core.api');
- settings.tokens = settings.tokens || [];
-
- const newToken = {
- token: utils.generateUUID(),
- uid: req.user.uid,
- description: req.body.description || '',
- timestamp: Date.now(),
- };
- settings.tokens.push(newToken);
- await meta.settings.set('core.api', settings);
- helpers.formatApiResponse(200, res, newToken);
+ const { description } = req.body;
+ const token = await api.users.generateToken(req, { description, ...req.params });
+ helpers.formatApiResponse(200, res, token);
};
Users.deleteToken = async (req, res) => {
- await hasAdminPrivilege(req.uid, 'settings');
- if (parseInt(req.params.uid, 10) !== parseInt(req.user.uid, 10)) {
- return helpers.formatApiResponse(401, res);
- }
-
- const settings = await meta.settings.get('core.api');
- const beforeLen = settings.tokens.length;
- settings.tokens = settings.tokens.filter(tokenObj => tokenObj.token !== req.params.token);
- if (beforeLen !== settings.tokens.length) {
- await meta.settings.set('core.api', settings);
- helpers.formatApiResponse(200, res);
- } else {
- helpers.formatApiResponse(404, res);
- }
+ const ok = await api.users.deleteToken(req, { ...req.params });
+ helpers.formatApiResponse(ok ? 200 : 404, res);
};
-const getSessionAsync = util.promisify((sid, callback) => {
- db.sessionStore.get(sid, (err, sessionObj) => callback(err, sessionObj || null));
-});
-
Users.revokeSession = async (req, res) => {
- // Only admins or global mods (besides the user themselves) can revoke sessions
- if (parseInt(req.params.uid, 10) !== req.uid && !await user.isAdminOrGlobalMod(req.uid)) {
- return helpers.formatApiResponse(404, res);
- }
-
- const sids = await db.getSortedSetRange(`uid:${req.params.uid}:sessions`, 0, -1);
- let _id;
- for (const sid of sids) {
- /* eslint-disable no-await-in-loop */
- const sessionObj = await getSessionAsync(sid);
- if (sessionObj && sessionObj.meta && sessionObj.meta.uuid === req.params.uuid) {
- _id = sid;
- break;
- }
- }
-
- if (!_id) {
- throw new Error('[[error:no-session-found]]');
- }
-
- await user.auth.revokeSession(_id, req.params.uid);
+ await api.users.revokeSession(req, { ...req.params });
helpers.formatApiResponse(200, res);
};
Users.invite = async (req, res) => {
const { emails, groupsToJoin = [] } = req.body;
- if (!emails || !Array.isArray(groupsToJoin)) {
- return helpers.formatApiResponse(400, res, new Error('[[error:invalid-data]]'));
- }
-
- // For simplicity, this API route is restricted to self-use only. This can change if needed.
- if (parseInt(req.user.uid, 10) !== parseInt(req.params.uid, 10)) {
- return helpers.formatApiResponse(403, res, new Error('[[error:no-privileges]]'));
- }
-
- const canInvite = await privileges.users.hasInvitePrivilege(req.uid);
- if (!canInvite) {
- return helpers.formatApiResponse(403, res, new Error('[[error:no-privileges]]'));
- }
-
- const { registrationType } = meta.config;
- const isAdmin = await user.isAdministrator(req.uid);
- if (registrationType === 'admin-invite-only' && !isAdmin) {
- return helpers.formatApiResponse(403, res, new Error('[[error:no-privileges]]'));
- }
-
- const inviteGroups = (await groups.getUserInviteGroups(req.uid)).map(group => group.name);
- const cannotInvite = groupsToJoin.some(group => !inviteGroups.includes(group));
- if (groupsToJoin.length > 0 && cannotInvite) {
- return helpers.formatApiResponse(403, res, new Error('[[error:no-privileges]]'));
- }
-
- const max = meta.config.maximumInvites;
- const emailsArr = emails.split(',').map(email => email.trim()).filter(Boolean);
-
- for (const email of emailsArr) {
- /* eslint-disable no-await-in-loop */
- let invites = 0;
- if (max) {
- invites = await user.getInvitesNumber(req.uid);
- }
- if (!isAdmin && max && invites >= max) {
- return helpers.formatApiResponse(403, res, new Error(`[[error:invite-maximum-met, ${invites}, ${max}]]`));
+ try {
+ await api.users.invite(req, { emails, groupsToJoin, ...req.params });
+ helpers.formatApiResponse(200, res);
+ } catch (e) {
+ if (e.message.startsWith('[[error:invite-maximum-met')) {
+ return helpers.formatApiResponse(403, res, e);
}
- await user.sendInvitationEmail(req.uid, email, groupsToJoin);
+ throw e;
}
-
- return helpers.formatApiResponse(200, res);
};
Users.getInviteGroups = async function (req, res) {
- if (parseInt(req.params.uid, 10) !== parseInt(req.user.uid, 10)) {
- return helpers.formatApiResponse(401, res);
- }
-
- const userInviteGroups = await groups.getUserInviteGroups(req.params.uid);
- return helpers.formatApiResponse(200, res, userInviteGroups.map(group => group.displayName));
+ return helpers.formatApiResponse(200, res, await api.users.getInviteGroups(req, { ...req.params }));
};
Users.addEmail = async (req, res) => {
- const canManageUsers = await privileges.admin.can('admin:users', req.uid);
- const skipConfirmation = canManageUsers && req.body.skipConfirmation;
+ const { email, skipConfirmation } = req.body;
+ const emails = await api.users.addEmail(req, { email, skipConfirmation, ...req.params });
- if (skipConfirmation) {
- await user.setUserField(req.params.uid, 'email', req.body.email);
- await user.email.confirmByUid(req.params.uid);
- } else {
- await api.users.update(req, {
- uid: req.params.uid,
- email: req.body.email,
- });
- }
-
- const emails = await db.getSortedSetRangeByScore('email:uid', 0, 500, req.params.uid, req.params.uid);
helpers.formatApiResponse(200, res, { emails });
};
Users.listEmails = async (req, res) => {
- const [isPrivileged, { showemail }] = await Promise.all([
- user.isPrivileged(req.uid),
- user.getSettings(req.params.uid),
- ]);
- const isSelf = req.uid === parseInt(req.params.uid, 10);
-
- if (isSelf || isPrivileged || showemail) {
- const emails = await db.getSortedSetRangeByScore('email:uid', 0, 500, req.params.uid, req.params.uid);
+ const emails = await api.users.listEmails(req, { ...req.params });
+ if (emails) {
helpers.formatApiResponse(200, res, { emails });
} else {
helpers.formatApiResponse(204, res);
@@ -287,79 +158,38 @@ Users.listEmails = async (req, res) => {
};
Users.getEmail = async (req, res) => {
- const [isPrivileged, { showemail }, exists] = await Promise.all([
- user.isPrivileged(req.uid),
- user.getSettings(req.params.uid),
- db.isSortedSetMember('email:uid', req.params.email.toLowerCase()),
- ]);
- const isSelf = req.uid === parseInt(req.params.uid, 10);
-
- if (exists && (isSelf || isPrivileged || showemail)) {
- helpers.formatApiResponse(204, res);
- } else {
- helpers.formatApiResponse(404, res);
- }
+ const ok = await api.users.getEmail(req, { ...req.params });
+ helpers.formatApiResponse(ok ? 204 : 404, res);
};
Users.confirmEmail = async (req, res) => {
- const [pending, current, canManage] = await Promise.all([
- user.email.isValidationPending(req.params.uid, req.params.email),
- user.getUserField(req.params.uid, 'email'),
- privileges.admin.can('admin:users', req.uid),
- ]);
-
- if (!canManage) {
- return helpers.notAllowed(req, res);
- }
-
- if (pending) { // has active confirmation request
- const code = await db.get(`confirm:byUid:${req.params.uid}`);
- await user.email.confirmByCode(code, req.session.id);
- helpers.formatApiResponse(200, res);
- } else if (current && current === req.params.email) { // email in user hash (i.e. email passed into user.create)
- await user.email.confirmByUid(req.params.uid);
- helpers.formatApiResponse(200, res);
- } else {
- helpers.formatApiResponse(404, res);
- }
-};
-
-const prepareExport = async (req, res) => {
- const [extension] = exportMetadata.get(req.params.type);
- const filename = `${req.params.uid}_${req.params.type}.${extension}`;
- try {
- const stat = await fs.stat(path.join(__dirname, '../../../build/export', filename));
- const modified = new Date(stat.mtimeMs);
- res.set('Last-Modified', modified.toUTCString());
- res.set('ETag', `"${crypto.createHash('md5').update(String(stat.mtimeMs)).digest('hex')}"`);
- res.status(204);
- return true;
- } catch (e) {
- res.status(404);
- return false;
- }
+ const ok = await api.users.confirmEmail(req, {
+ sessionId: req.session.id,
+ ...req.params,
+ });
+ helpers.formatApiResponse(ok ? 200 : 404, res);
};
Users.checkExportByType = async (req, res) => {
- await prepareExport(req, res);
- res.end();
+ const stat = await api.users.checkExportByType(req, { ...req.params });
+ const modified = new Date(stat.mtimeMs);
+ res.set('Last-Modified', modified.toUTCString());
+ res.set('ETag', `"${crypto.createHash('md5').update(String(stat.mtimeMs)).digest('hex')}"`);
+ res.sendStatus(204);
};
-Users.getExportByType = async (req, res) => {
- const [extension, mime] = exportMetadata.get(req.params.type);
- const filename = `${req.params.uid}_${req.params.type}.${extension}`;
-
- const exists = await prepareExport(req, res);
- if (!exists) {
- return res.end();
+Users.getExportByType = async (req, res, next) => {
+ const data = await api.users.getExportByType(req, ({ ...req.params }));
+ if (!data) {
+ return next();
}
res.status(200);
- res.sendFile(filename, {
+ res.sendFile(data.filename, {
root: path.join(__dirname, '../../../build/export'),
headers: {
- 'Content-Type': mime,
- 'Content-Disposition': `attachment; filename=${filename}`,
+ 'Content-Type': data.mime,
+ 'Content-Disposition': `attachment; filename=${data.filename}`,
},
}, (err) => {
if (err) {
diff --git a/src/database/mongo/sorted/union.js b/src/database/mongo/sorted/union.js
index ea4ad4d8e1..7fd997da1e 100644
--- a/src/database/mongo/sorted/union.js
+++ b/src/database/mongo/sorted/union.js
@@ -43,7 +43,7 @@ module.exports = function (module) {
const pipeline = [
{ $match: { _key: { $in: params.sets } } },
{ $group: { _id: { value: '$value' }, totalScore: aggregate } },
- { $sort: { totalScore: params.sort } },
+ { $sort: { totalScore: params.sort, _id: 1 } },
];
if (params.start) {
diff --git a/src/flags.js b/src/flags.js
index 8a400c9d88..36e0d5a1ce 100644
--- a/src/flags.js
+++ b/src/flags.js
@@ -191,6 +191,7 @@ Flags.list = async function (data) {
query: data.query,
});
flagIds = await Flags.sort(flagIds, data.sort);
+ const count = flagIds.length;
// Create subset for parsing based on page number (n=20)
const flagsPerPage = Math.abs(parseInt(filters.perPage, 10) || 1);
@@ -223,6 +224,7 @@ Flags.list = async function (data) {
return {
flags: payload.flags,
+ count,
page: payload.page,
pageCount: pageCount,
};
diff --git a/src/install.js b/src/install.js
index ba0f13e7be..d1229de531 100644
--- a/src/install.js
+++ b/src/install.js
@@ -250,7 +250,7 @@ async function enableDefaultTheme() {
return;
}
- const defaultTheme = nconf.get('defaultTheme') || 'nodebb-theme-persona';
+ const defaultTheme = nconf.get('defaultTheme') || 'nodebb-theme-harmony';
console.log(`Enabling default theme: ${defaultTheme}`);
await meta.themes.set({
type: 'local',
@@ -530,7 +530,7 @@ async function setCopyrightWidget() {
]);
if (!footer && footerJSON) {
- await db.setObjectField('widgets:global', 'footer', footerJSON);
+ await db.setObjectField('widgets:global', 'sidebar-footer', footerJSON);
}
}
diff --git a/src/messaging/data.js b/src/messaging/data.js
index 6839037678..085081d8ec 100644
--- a/src/messaging/data.js
+++ b/src/messaging/data.js
@@ -98,6 +98,8 @@ module.exports = function (Messaging) {
} else if (index > 0 && message.fromuid !== messages[index - 1].fromuid) {
// If the previous message was from the other person, this is also a new set
message.newSet = true;
+ } else if (index > 0 && messages[index - 1].system) {
+ message.newSet = true;
} else if (index === 0) {
message.newSet = true;
}
@@ -112,15 +114,14 @@ module.exports = function (Messaging) {
const mid = await db.getSortedSetRange(key, index - 1, index - 1);
const fields = await Messaging.getMessageFields(mid, ['fromuid', 'timestamp']);
if ((messages[0].timestamp > fields.timestamp + Messaging.newMessageCutoff) ||
- (messages[0].fromuid !== fields.fromuid)) {
+ (messages[0].fromuid !== fields.fromuid) ||
+ messages[0].system) {
// If it's been 5 minutes, this is a new set of messages
messages[0].newSet = true;
}
} else {
messages[0].newSet = true;
}
- } else {
- messages = [];
}
const data = await plugins.hooks.fire('filter:messaging.getMessages', {
diff --git a/src/messaging/index.js b/src/messaging/index.js
index 6ad192ef7f..bc7d4ee4db 100644
--- a/src/messaging/index.js
+++ b/src/messaging/index.js
@@ -2,13 +2,16 @@
const validator = require('validator');
-
+const nconf = require('nconf');
const db = require('../database');
const user = require('../user');
const privileges = require('../privileges');
const plugins = require('../plugins');
const meta = require('../meta');
const utils = require('../utils');
+const translator = require('../translator');
+
+const relative_path = nconf.get('relative_path');
const Messaging = module.exports;
@@ -126,6 +129,9 @@ Messaging.getRecentChats = async (callerUid, uid, start, stop) => {
room.usernames = Messaging.generateUsernames(room.users, uid);
}
});
+ await Promise.all(results.roomData.map(async (room) => {
+ room.chatWithMessage = await Messaging.generateChatWithMessage(room.users, uid);
+ }));
results.roomData = results.roomData.filter(Boolean);
const ref = { rooms: results.roomData, nextStart: stop + 1 };
@@ -137,8 +143,40 @@ Messaging.getRecentChats = async (callerUid, uid, start, stop) => {
});
};
-Messaging.generateUsernames = (users, excludeUid) => users.filter(user => user && parseInt(user.uid, 10) !== excludeUid)
- .map(user => user.username).join(', ');
+Messaging.generateUsernames = function (users, excludeUid) {
+ users = users.filter(u => u && parseInt(u.uid, 10) !== excludeUid);
+ const usernames = users.map(u => u.username);
+ if (users.length > 3) {
+ return translator.compile(
+ 'modules:chat.usernames-and-x-others',
+ usernames.slice(0, 2).join(', '),
+ usernames.length - 2
+ );
+ }
+ return usernames.join(', ');
+};
+
+Messaging.generateChatWithMessage = async function (users, excludeUid) {
+ users = users.filter(u => u && parseInt(u.uid, 10) !== excludeUid);
+ const usernames = users.map(u => `
${u.username} `);
+ let compiled = '';
+ if (!users.length) {
+ return '[[modules:chat.no-users-in-room]]';
+ }
+ if (users.length > 3) {
+ compiled = translator.compile(
+ 'modules:chat.chat-with-usernames-and-x-others',
+ usernames.slice(0, 2).join(', '),
+ usernames.length - 2
+ );
+ } else {
+ compiled = translator.compile(
+ 'modules:chat.chat-with-usernames',
+ usernames.join(', '),
+ );
+ }
+ return utils.decodeHTMLEntities(await translator.translate(compiled));
+};
Messaging.getTeaser = async (uid, roomId) => {
const mid = await Messaging.getLatestUndeletedMessage(uid, roomId);
diff --git a/src/messaging/rooms.js b/src/messaging/rooms.js
index 948fd88027..4c1d35a1bf 100644
--- a/src/messaging/rooms.js
+++ b/src/messaging/rooms.js
@@ -249,6 +249,7 @@ module.exports = function (Messaging) {
room.canReply = canReply;
room.groupChat = room.hasOwnProperty('groupChat') ? room.groupChat : users.length > 2;
room.usernames = Messaging.generateUsernames(users, uid);
+ room.chatWithMessage = await Messaging.generateChatWithMessage(users, uid);
room.maximumUsersInChatRoom = meta.config.maximumUsersInChatRoom;
room.maximumChatMessageLength = meta.config.maximumChatMessageLength;
room.showUserInput = !room.maximumUsersInChatRoom || room.maximumUsersInChatRoom > 2;
diff --git a/src/meta/aliases.js b/src/meta/aliases.js
index d393b2e18a..d5eb42aa89 100644
--- a/src/meta/aliases.js
+++ b/src/meta/aliases.js
@@ -10,7 +10,7 @@ const aliases = {
'admin js bundle': ['adminjs', 'adminscript', 'adminscripts'],
javascript: ['js'],
'client side styles': [
- 'clientcss', 'clientless', 'clientstyles', 'clientstyle',
+ 'clientcss', 'clientscss', 'clientstyles', 'clientstyle',
],
'admin control panel styles': [
'admincss', 'adminless', 'adminstyles', 'adminstyle', 'acpcss', 'acpless', 'acpstyles', 'acpstyle',
diff --git a/src/meta/configs.js b/src/meta/configs.js
index 75a013f71b..ca53dc1494 100644
--- a/src/meta/configs.js
+++ b/src/meta/configs.js
@@ -240,12 +240,9 @@ async function saveRenderedCss(data) {
if (!data.customCSS) {
return;
}
- const less = require('less');
- const lessObject = await less.render(data.customCSS, {
- compress: true,
- javascriptEnabled: false,
- });
- data.renderedCustomCSS = lessObject.css;
+ const sass = require('../utils').getSass();
+ const scssOutput = await sass.compileStringAsync(data.customCSS, {});
+ data.renderedCustomCSS = scssOutput.css.toString();
}
async function getLogoSize(data) {
diff --git a/src/meta/css.js b/src/meta/css.js
index ea347d4af9..c77520e247 100644
--- a/src/meta/css.js
+++ b/src/meta/css.js
@@ -17,47 +17,112 @@ const minifier = require('./minifier');
const CSS = module.exports;
CSS.supportedSkins = [
- 'cerulean', 'cyborg', 'flatly', 'journal', 'lumen', 'paper', 'simplex',
- 'spacelab', 'united', 'cosmo', 'darkly', 'readable', 'sandstone',
- 'slate', 'superhero', 'yeti',
+ 'cerulean', 'cosmo', 'cyborg', 'darkly', 'flatly', 'journal', 'litera',
+ 'lumen', 'lux', 'materia', 'minty', 'morph', 'pulse', 'quartz', 'sandstone',
+ 'simplex', 'sketchy', 'slate', 'solar', 'spacelab', 'superhero', 'united',
+ 'vapor', 'yeti', 'zephyr',
];
const buildImports = {
- client: function (source) {
- return `@import "./theme";\n${source}\n${[
- '@import "../public/vendor/fontawesome/less/regular.less";',
- '@import "../public/vendor/fontawesome/less/solid.less";',
- '@import "../public/vendor/fontawesome/less/brands.less";',
- '@import "../public/vendor/fontawesome/less/fontawesome.less";',
- '@import "../public/vendor/fontawesome/less/v4-shims.less";',
- '@import "../public/vendor/fontawesome/less/nodebb-shims.less";',
- '@import "../../public/less/jquery-ui.less";',
- '@import (inline) "../node_modules/@adactive/bootstrap-tagsinput/src/bootstrap-tagsinput.css";',
- '@import (inline) "../node_modules/cropperjs/dist/cropper.css";',
- '@import "../../public/less/flags.less";',
- '@import "../../public/less/generics.less";',
- '@import "../../public/less/mixins.less";',
- '@import "../../public/less/global.less";',
- '@import "../../public/less/modals.less";',
- ].map(str => str.replace(/\//g, path.sep)).join('\n')}`;
+ client: function (source, themeData) {
+ return [
+ boostrapImport(themeData),
+ '@import "@adactive/bootstrap-tagsinput/src/bootstrap-tagsinput";',
+ source,
+ '@import "jquery-ui";',
+ '@import "cropperjs/dist/cropper";',
+ ].join('\n');
},
admin: function (source) {
- return `${source}\n${[
- '@import "../public/vendor/fontawesome/less/regular.less";',
- '@import "../public/vendor/fontawesome/less/solid.less";',
- '@import "../public/vendor/fontawesome/less/brands.less";',
- '@import "../public/vendor/fontawesome/less/fontawesome.less";',
- '@import "../public/vendor/fontawesome/less/v4-shims.less";',
- '@import "../public/vendor/fontawesome/less/nodebb-shims.less";',
- '@import "../public/less/admin/admin";',
- '@import "../public/less/generics.less";',
- '@import "../../public/less/jquery-ui.less";',
- '@import (inline) "../node_modules/@adactive/bootstrap-tagsinput/src/bootstrap-tagsinput.css";',
- '@import (inline) "../public/vendor/mdl/material.css";',
- ].map(str => str.replace(/\//g, path.sep)).join('\n')}`;
+ return [
+ '@import "admin/vars";',
+ '@import "bootswatch/dist/materia/variables";',
+ '@import "bootstrap/scss/bootstrap";',
+ '@import "bootswatch/dist/materia/bootswatch";',
+ '@import "mixins";',
+ '@import "fontawesome";',
+ '@import "@adactive/bootstrap-tagsinput/src/bootstrap-tagsinput";',
+ '@import "generics";',
+ '@import "responsive-utilities";',
+ '@import "admin/admin";',
+ source,
+ '@import "jquery-ui";',
+ ].join('\n');
},
};
+function boostrapImport(themeData) {
+ // see https://getbootstrap.com/docs/5.0/customize/sass/#variable-defaults
+ // for an explanation of this order and https://bootswatch.com/help/
+ const { bootswatchSkin } = themeData;
+ return [
+ bootswatchSkin ? `@import "bootswatch/dist/${bootswatchSkin}/variables";` : '',
+ '@import "bootstrap/scss/mixins/banner";',
+ '@include bsBanner("");',
+ // functions must be included first
+ '@import "bootstrap/scss/functions";',
+
+ // overrides for bs5 variables
+ '@import "./scss/overrides";', // this file is in the themes scss folder
+ '@import "overrides.scss";', // core scss overrides
+
+ // bs files
+ '@import "bootstrap/scss/variables";',
+ '@import "bootstrap/scss/maps";',
+ '@import "bootstrap/scss/mixins";',
+ '@import "bootstrap/scss/utilities";',
+
+ // Layout & components
+ '@import "bootstrap/scss/root";',
+ '@import "bootstrap/scss/reboot";',
+ '@import "bootstrap/scss/type";',
+ '@import "bootstrap/scss/images";',
+ '@import "bootstrap/scss/containers";',
+ '@import "bootstrap/scss/grid";',
+ '@import "bootstrap/scss/tables";',
+ '@import "bootstrap/scss/forms";',
+ '@import "bootstrap/scss/buttons";',
+ '@import "bootstrap/scss/transitions";',
+ '@import "bootstrap/scss/dropdown";',
+ '@import "bootstrap/scss/button-group";',
+ '@import "bootstrap/scss/nav";',
+ '@import "bootstrap/scss/navbar";',
+ '@import "bootstrap/scss/card";',
+ '@import "bootstrap/scss/accordion";',
+ '@import "bootstrap/scss/breadcrumb";',
+ '@import "bootstrap/scss/pagination";',
+ '@import "bootstrap/scss/badge";',
+ '@import "bootstrap/scss/alert";',
+ '@import "bootstrap/scss/progress";',
+ '@import "bootstrap/scss/list-group";',
+ '@import "bootstrap/scss/close";',
+ '@import "bootstrap/scss/toasts";',
+ '@import "bootstrap/scss/modal";',
+ '@import "bootstrap/scss/tooltip";',
+ '@import "bootstrap/scss/popover";',
+ '@import "bootstrap/scss/carousel";',
+ '@import "bootstrap/scss/spinners";',
+ '@import "bootstrap/scss/offcanvas";',
+ '@import "bootstrap/scss/placeholders";',
+
+ // Helpers
+ '@import "bootstrap/scss/helpers";',
+
+ '@import "responsive-utilities";',
+
+ // Utilities
+ '@import "bootstrap/scss/utilities/api";',
+ // scss-docs-end import-stack
+
+ '@import "fontawesome";',
+ '@import "mixins";', // core mixins
+ '@import "generics";',
+ '@import "client";', // core page styles
+ '@import "./theme";', // rest of the theme scss
+ bootswatchSkin ? `@import "bootswatch/dist/${bootswatchSkin}/bootswatch";` : '',
+ ].join('\n');
+}
+
async function filterMissingFiles(filepaths) {
const exists = await Promise.all(
filepaths.map(async (filepath) => {
@@ -71,13 +136,23 @@ async function filterMissingFiles(filepaths) {
return filepaths.filter((filePath, i) => exists[i]);
}
-async function getImports(files, prefix, extension) {
+async function getImports(files, extension) {
const pluginDirectories = [];
let source = '';
+ function pathToImport(file) {
+ if (!file) {
+ return '';
+ }
+ // trim css extension so it inlines the css like less (inline)
+ const parsed = path.parse(file);
+ const newFile = path.join(parsed.dir, parsed.name);
+ return `\n@import "${newFile.replace(/\\/g, '/')}";`;
+ }
+
files.forEach((styleFile) => {
if (styleFile.endsWith(extension)) {
- source += `${prefix + path.sep + styleFile}";`;
+ source += pathToImport(styleFile);
} else {
pluginDirectories.push(styleFile);
}
@@ -85,7 +160,7 @@ async function getImports(files, prefix, extension) {
await Promise.all(pluginDirectories.map(async (directory) => {
const styleFiles = await file.walk(directory);
styleFiles.forEach((styleFile) => {
- source += `${prefix + path.sep + styleFile}";`;
+ source += pathToImport(styleFile);
});
}));
return source;
@@ -94,8 +169,8 @@ async function getImports(files, prefix, extension) {
async function getBundleMetadata(target) {
const paths = [
path.join(__dirname, '../../node_modules'),
- path.join(__dirname, '../../public/less'),
- path.join(__dirname, '../../public/vendor/fontawesome/less'),
+ path.join(__dirname, '../../public/scss'),
+ path.join(__dirname, '../../public/vendor/fontawesome/scss'),
];
// Skin support
@@ -107,34 +182,31 @@ async function getBundleMetadata(target) {
target = 'client';
}
}
- let skinImport = [];
+
+ let themeData = null;
if (target === 'client') {
- const themeData = await db.getObjectFields('config', ['theme:type', 'theme:id', 'bootswatchSkin']);
- const themeId = (themeData['theme:id'] || 'nodebb-theme-persona');
- const baseThemePath = path.join(nconf.get('themes_path'), (themeData['theme:type'] && themeData['theme:type'] === 'local' ? themeId : 'nodebb-theme-vanilla'));
+ themeData = await db.getObjectFields('config', ['theme:type', 'theme:id', 'bootswatchSkin']);
+ const themeId = (themeData['theme:id'] || 'nodebb-theme-harmony');
+ const baseThemePath = path.join(nconf.get('themes_path'), (themeData['theme:type'] && themeData['theme:type'] === 'local' ? themeId : 'nodebb-theme-harmony'));
paths.unshift(baseThemePath);
+ paths.unshift(`${baseThemePath}/node_modules`);
themeData.bootswatchSkin = skin || themeData.bootswatchSkin;
- if (themeData && themeData.bootswatchSkin) {
- skinImport.push(`\n@import "./@nodebb/bootswatch/${themeData.bootswatchSkin}/variables.less";`);
- skinImport.push(`\n@import "./@nodebb/bootswatch/${themeData.bootswatchSkin}/bootswatch.less";`);
- }
- skinImport = skinImport.join('');
}
- const [lessImports, cssImports, acpLessImports] = await Promise.all([
- filterGetImports(plugins.lessFiles, '\n@import ".', '.less'),
- filterGetImports(plugins.cssFiles, '\n@import (inline) ".', '.css'),
- target === 'client' ? '' : filterGetImports(plugins.acpLessFiles, '\n@import ".', '.less'),
+ const [scssImports, cssImports, acpScssImports] = await Promise.all([
+ filterGetImports(plugins.scssFiles, '.scss'),
+ filterGetImports(plugins.cssFiles, '.css'),
+ target === 'client' ? '' : filterGetImports(plugins.acpScssFiles, '.scss'),
]);
- async function filterGetImports(files, prefix, extension) {
+ async function filterGetImports(files, extension) {
const filteredFiles = await filterMissingFiles(files);
- return await getImports(filteredFiles, prefix, extension);
+ return await getImports(filteredFiles, extension);
}
- let imports = `${skinImport}\n${cssImports}\n${lessImports}\n${acpLessImports}`;
- imports = buildImports[target](imports);
+ let imports = `${cssImports}\n${scssImports}\n${acpScssImports}`;
+ imports = buildImports[target](imports, themeData);
return { paths: paths, imports: imports };
}
@@ -146,9 +218,11 @@ CSS.buildBundle = async function (target, fork) {
const data = await getBundleMetadata(target);
const minify = process.env.NODE_ENV !== 'development';
- const bundle = await minifier.css.bundle(data.imports, data.paths, minify, fork);
+ const { ltr, rtl } = await minifier.css.bundle(data.imports, data.paths, minify, fork);
- const filename = `${target}.css`;
- await fs.promises.writeFile(path.join(__dirname, '../../build/public', filename), bundle.code);
- return bundle.code;
+ await Promise.all([
+ fs.promises.writeFile(path.join(__dirname, '../../build/public', `${target}.css`), ltr.code),
+ fs.promises.writeFile(path.join(__dirname, '../../build/public', `${target}-rtl.css`), rtl.code),
+ ]);
+ return [ltr.code, rtl.code];
};
diff --git a/src/meta/js.js b/src/meta/js.js
index e1998443d8..df3fe41bae 100644
--- a/src/meta/js.js
+++ b/src/meta/js.js
@@ -131,14 +131,13 @@ async function getBundleScriptList(target) {
JS.buildBundle = async function (target, fork) {
const filename = `scripts-${target}.js`;
const files = await getBundleScriptList(target);
- const minify = false; // webpack will minify in prod
const filePath = path.join(__dirname, '../../build/public', filename);
await minifier.js.bundle({
files: files,
filename: filename,
destPath: filePath,
- }, minify, fork);
+ }, fork);
};
JS.killMinifier = function () {
diff --git a/src/meta/minifier.js b/src/meta/minifier.js
index cfb740755f..fee6347763 100644
--- a/src/meta/minifier.js
+++ b/src/meta/minifier.js
@@ -2,13 +2,13 @@
const fs = require('fs');
const os = require('os');
-const uglify = require('uglify-es');
const async = require('async');
const winston = require('winston');
-const less = require('less');
const postcss = require('postcss');
const autoprefixer = require('autoprefixer');
const clean = require('postcss-clean');
+const rtlcss = require('rtlcss');
+const sass = require('../utils').getSass();
const fork = require('./debugFork');
require('../file'); // for graceful-fs
@@ -147,100 +147,45 @@ actions.concat = async function concat(data) {
}
};
-actions.minifyJS_batch = async function minifyJS_batch(data) {
- await async.eachLimit(data.files, 100, async (fileObj) => {
- const source = await fs.promises.readFile(fileObj.srcPath, 'utf8');
- const filesToMinify = [
- {
- srcPath: fileObj.srcPath,
- filename: fileObj.filename,
- source: source,
- },
- ];
-
- await minifyAndSave({
- files: filesToMinify,
- destPath: fileObj.destPath,
- filename: fileObj.filename,
- });
- });
-};
-
-actions.minifyJS = async function minifyJS(data) {
- const filesToMinify = await async.mapLimit(data.files, 1000, async (fileObj) => {
- const source = await fs.promises.readFile(fileObj.srcPath, 'utf8');
- return {
- srcPath: fileObj.srcPath,
- filename: fileObj.filename,
- source: source,
- };
- });
- await minifyAndSave({
- files: filesToMinify,
- destPath: data.destPath,
- filename: data.filename,
- });
-};
-
-async function minifyAndSave(data) {
- const scripts = {};
- data.files.forEach((ref) => {
- if (ref && ref.filename && ref.source) {
- scripts[ref.filename] = ref.source;
- }
- });
-
- const minified = uglify.minify(scripts, {
- sourceMap: {
- filename: data.filename,
- url: `${String(data.filename).split(/[/\\]/).pop()}.map`,
- includeSources: true,
- },
- compress: false,
- });
-
- if (minified.error) {
- throw new Error(`Error minifying ${minified.error.filename}\n${minified.error.stack}`);
- }
- await Promise.all([
- fs.promises.writeFile(data.destPath, minified.code),
- fs.promises.writeFile(`${data.destPath}.map`, minified.map),
- ]);
-}
-
Minifier.js = {};
-Minifier.js.bundle = async function (data, minify, fork) {
+Minifier.js.bundle = async function (data, fork) {
return await executeAction({
- act: minify ? 'minifyJS' : 'concat',
+ act: 'concat',
files: data.files,
filename: data.filename,
destPath: data.destPath,
}, fork);
};
-Minifier.js.minifyBatch = async function (scripts, fork) {
- return await executeAction({
- act: 'minifyJS_batch',
- files: scripts,
- }, fork);
-};
-
actions.buildCSS = async function buildCSS(data) {
- const lessOutput = await less.render(data.source, {
- paths: data.paths,
- javascriptEnabled: false,
+ const scssOutput = await sass.compileStringAsync(data.source, {
+ loadPaths: data.paths,
});
- const postcssArgs = [autoprefixer];
- if (data.minify) {
- postcssArgs.push(clean({
- processImportFrom: ['local'],
- }));
+ async function processScss(direction) {
+ const postcssArgs = [autoprefixer];
+ if (direction === 'rtl') {
+ postcssArgs.unshift(rtlcss());
+ }
+ if (data.minify) {
+ postcssArgs.push(clean({
+ processImportFrom: ['local'],
+ }));
+ }
+ return await postcss(postcssArgs).process(scssOutput.css.toString(), {
+ from: undefined,
+ });
}
- const result = await postcss(postcssArgs).process(lessOutput.css, {
- from: undefined,
- });
- return { code: result.css };
+
+ const [ltrresult, rtlresult] = await Promise.all([
+ processScss('ltr'),
+ processScss('rtl'),
+ ]);
+
+ return {
+ ltr: { code: ltrresult.css },
+ rtl: { code: rtlresult.css },
+ };
};
Minifier.css = {};
diff --git a/src/meta/themes.js b/src/meta/themes.js
index d4d3f58f45..e5d519c457 100644
--- a/src/meta/themes.js
+++ b/src/meta/themes.js
@@ -150,7 +150,7 @@ Themes.setupPaths = async () => {
currentThemeId: Meta.configs.get('theme:id'),
});
- const themeId = data.currentThemeId || 'nodebb-theme-persona';
+ const themeId = data.currentThemeId || 'nodebb-theme-harmony';
if (process.env.NODE_ENV === 'development') {
winston.info(`[themes] Using theme ${themeId}`);
diff --git a/src/middleware/admin.js b/src/middleware/admin.js
index ed49408be8..b514fb5cca 100644
--- a/src/middleware/admin.js
+++ b/src/middleware/admin.js
@@ -1,16 +1,12 @@
'use strict';
-const winston = require('winston');
-const jsesc = require('jsesc');
+
const nconf = require('nconf');
-const semver = require('semver');
const user = require('../user');
const meta = require('../meta');
const plugins = require('../plugins');
const privileges = require('../privileges');
-const utils = require('../utils');
-const versions = require('../admin/versions');
const helpers = require('./helpers');
const controllers = {
@@ -30,90 +26,6 @@ middleware.buildHeader = helpers.try(async (req, res, next) => {
next();
});
-middleware.renderHeader = async (req, res, data) => {
- const custom_header = {
- plugins: [],
- authentication: [],
- };
- res.locals.config = res.locals.config || {};
-
- const results = await utils.promiseParallel({
- userData: user.getUserFields(req.uid, ['username', 'userslug', 'email', 'picture', 'email:confirmed']),
- scripts: getAdminScripts(),
- custom_header: plugins.hooks.fire('filter:admin.header.build', custom_header),
- configs: meta.configs.list(),
- latestVersion: getLatestVersion(),
- privileges: privileges.admin.get(req.uid),
- tags: meta.tags.parse(req, {}, [], []),
- });
-
- const { userData } = results;
- userData.uid = req.uid;
- userData['email:confirmed'] = userData['email:confirmed'] === 1;
- userData.privileges = results.privileges;
-
- let acpPath = req.path.slice(1).split('/');
- acpPath.forEach((path, i) => {
- acpPath[i] = path.charAt(0).toUpperCase() + path.slice(1);
- });
- acpPath = acpPath.join(' > ');
-
- const version = nconf.get('version');
-
- res.locals.config.userLang = res.locals.config.acpLang || res.locals.config.userLang;
- let templateValues = {
- config: res.locals.config,
- configJSON: jsesc(JSON.stringify(res.locals.config), { isScriptContext: true }),
- relative_path: res.locals.config.relative_path,
- adminConfigJSON: encodeURIComponent(JSON.stringify(results.configs)),
- metaTags: results.tags.meta,
- linkTags: results.tags.link,
- user: userData,
- userJSON: jsesc(JSON.stringify(userData), { isScriptContext: true }),
- plugins: results.custom_header.plugins,
- authentication: results.custom_header.authentication,
- scripts: results.scripts,
- 'cache-buster': meta.config['cache-buster'] || '',
- env: !!process.env.NODE_ENV,
- title: `${acpPath || 'Dashboard'} | NodeBB Admin Control Panel`,
- bodyClass: data.bodyClass,
- version: version,
- latestVersion: results.latestVersion,
- upgradeAvailable: results.latestVersion && semver.gt(results.latestVersion, version),
- showManageMenu: results.privileges.superadmin || ['categories', 'privileges', 'users', 'admins-mods', 'groups', 'tags', 'settings'].some(priv => results.privileges[`admin:${priv}`]),
- };
-
- templateValues.template = { name: res.locals.template };
- templateValues.template[res.locals.template] = true;
- ({ templateData: templateValues } = await plugins.hooks.fire('filter:middleware.renderAdminHeader', {
- req,
- res,
- templateData: templateValues,
- data,
- }));
-
- return await req.app.renderAsync('admin/header', templateValues);
-};
-
-async function getAdminScripts() {
- const scripts = await plugins.hooks.fire('filter:admin.scripts.get', []);
- return scripts.map(script => ({ src: script }));
-}
-
-async function getLatestVersion() {
- try {
- const result = await versions.getLatestVersion();
- return result;
- } catch (err) {
- winston.error(`[acp] Failed to fetch latest version${err.stack}`);
- }
- return null;
-}
-
-middleware.renderFooter = async function (req, res, data) {
- return await req.app.renderAsync('admin/footer', data);
-};
-
middleware.checkPrivileges = helpers.try(async (req, res, next) => {
// Kick out guests, obviously
if (req.uid <= 0) {
@@ -169,7 +81,7 @@ middleware.checkPrivileges = helpers.try(async (req, res, next) => {
}
if (res.locals.isAPI) {
- res.status(401).json({});
+ controllers.helpers.formatApiResponse(401, res);
} else {
res.redirect(`${nconf.get('relative_path')}/login?local=1`);
}
diff --git a/src/middleware/csrf.js b/src/middleware/csrf.js
index d2c1ff0b4a..f6af0c625b 100644
--- a/src/middleware/csrf.js
+++ b/src/middleware/csrf.js
@@ -11,8 +11,6 @@ const {
return req.headers['x-csrf-token'];
} else if (req.body.csrf_token) {
return req.body.csrf_token;
- } else if (req.query) {
- return req.query._csrf;
}
},
size: 64,
diff --git a/src/middleware/header.js b/src/middleware/header.js
index 4449445973..e1db4535e3 100644
--- a/src/middleware/header.js
+++ b/src/middleware/header.js
@@ -1,33 +1,17 @@
'use strict';
-const nconf = require('nconf');
-const jsesc = require('jsesc');
-const _ = require('lodash');
-const validator = require('validator');
const util = require('util');
const user = require('../user');
-const topics = require('../topics');
-const messaging = require('../messaging');
-const flags = require('../flags');
-const meta = require('../meta');
const plugins = require('../plugins');
-const navigation = require('../navigation');
-const translator = require('../translator');
-const privileges = require('../privileges');
-const languages = require('../languages');
-const utils = require('../utils');
const helpers = require('./helpers');
const controllers = {
api: require('../controllers/api'),
- helpers: require('../controllers/helpers'),
};
const middleware = module.exports;
-const relative_path = nconf.get('relative_path');
-
middleware.buildHeader = helpers.try(async (req, res, next) => {
res.locals.renderHeader = true;
res.locals.isAPI = false;
@@ -53,213 +37,3 @@ middleware.buildHeader = helpers.try(async (req, res, next) => {
});
middleware.buildHeaderAsync = util.promisify(middleware.buildHeader);
-
-middleware.renderHeader = async function renderHeader(req, res, data) {
- const registrationType = meta.config.registrationType || 'normal';
- res.locals.config = res.locals.config || {};
- const templateValues = {
- title: meta.config.title || '',
- 'title:url': meta.config['title:url'] || '',
- description: meta.config.description || '',
- 'cache-buster': meta.config['cache-buster'] || '',
- 'brand:logo': meta.config['brand:logo'] || '',
- 'brand:logo:url': meta.config['brand:logo:url'] || '',
- 'brand:logo:alt': meta.config['brand:logo:alt'] || '',
- 'brand:logo:display': meta.config['brand:logo'] ? '' : 'hide',
- allowRegistration: registrationType === 'normal',
- searchEnabled: plugins.hooks.hasListeners('filter:search.query'),
- postQueueEnabled: !!meta.config.postQueue,
- config: res.locals.config,
- relative_path,
- bodyClass: data.bodyClass,
- };
-
- templateValues.configJSON = jsesc(JSON.stringify(res.locals.config), { isScriptContext: true });
-
- const results = await utils.promiseParallel({
- isAdmin: user.isAdministrator(req.uid),
- isGlobalMod: user.isGlobalModerator(req.uid),
- isModerator: user.isModeratorOfAnyCategory(req.uid),
- privileges: privileges.global.get(req.uid),
- user: user.getUserData(req.uid),
- isEmailConfirmSent: req.uid <= 0 ? false : await user.email.isValidationPending(req.uid),
- languageDirection: translator.translate('[[language:dir]]', res.locals.config.userLang),
- timeagoCode: languages.userTimeagoCode(res.locals.config.userLang),
- browserTitle: translator.translate(controllers.helpers.buildTitle(translator.unescape(data.title))),
- navigation: navigation.get(req.uid),
- });
-
- const unreadData = {
- '': {},
- new: {},
- watched: {},
- unreplied: {},
- };
-
- results.user.unreadData = unreadData;
- results.user.isAdmin = results.isAdmin;
- results.user.isGlobalMod = results.isGlobalMod;
- results.user.isMod = !!results.isModerator;
- results.user.privileges = results.privileges;
- results.user.timeagoCode = results.timeagoCode;
- results.user[results.user.status] = true;
-
- results.user.email = String(results.user.email);
- results.user['email:confirmed'] = results.user['email:confirmed'] === 1;
- results.user.isEmailConfirmSent = !!results.isEmailConfirmSent;
-
- templateValues.bootswatchSkin = (parseInt(meta.config.disableCustomUserSkins, 10) !== 1 ? res.locals.config.bootswatchSkin : '') || meta.config.bootswatchSkin || '';
- templateValues.browserTitle = results.browserTitle;
- ({
- navigation: templateValues.navigation,
- unreadCount: templateValues.unreadCount,
- } = await appendUnreadCounts({
- uid: req.uid,
- query: req.query,
- navigation: results.navigation,
- unreadData,
- }));
- templateValues.isAdmin = results.user.isAdmin;
- templateValues.isGlobalMod = results.user.isGlobalMod;
- templateValues.showModMenu = results.user.isAdmin || results.user.isGlobalMod || results.user.isMod;
- templateValues.canChat = results.privileges.chat && meta.config.disableChat !== 1;
- templateValues.user = results.user;
- templateValues.userJSON = jsesc(JSON.stringify(results.user), { isScriptContext: true });
- templateValues.useCustomCSS = meta.config.useCustomCSS && meta.config.customCSS;
- templateValues.customCSS = templateValues.useCustomCSS ? (meta.config.renderedCustomCSS || '') : '';
- templateValues.useCustomHTML = meta.config.useCustomHTML;
- templateValues.customHTML = templateValues.useCustomHTML ? meta.config.customHTML : '';
- templateValues.maintenanceHeader = meta.config.maintenanceMode && !results.isAdmin;
- templateValues.defaultLang = meta.config.defaultLang || 'en-GB';
- templateValues.userLang = res.locals.config.userLang;
- templateValues.languageDirection = results.languageDirection;
- if (req.query.noScriptMessage) {
- templateValues.noScriptMessage = validator.escape(String(req.query.noScriptMessage));
- }
-
- templateValues.template = { name: res.locals.template };
- templateValues.template[res.locals.template] = true;
-
- if (data.hasOwnProperty('_header')) {
- templateValues.metaTags = data._header.tags.meta;
- templateValues.linkTags = data._header.tags.link;
- }
-
- if (req.route && req.route.path === '/') {
- modifyTitle(templateValues);
- }
-
- const hookReturn = await plugins.hooks.fire('filter:middleware.renderHeader', {
- req: req,
- res: res,
- templateValues: templateValues,
- data: data,
- });
-
- return await req.app.renderAsync('header', hookReturn.templateValues);
-};
-
-async function appendUnreadCounts({ uid, navigation, unreadData, query }) {
- const originalRoutes = navigation.map(nav => nav.originalRoute);
- const calls = {
- unreadData: topics.getUnreadData({ uid: uid, query: query }),
- unreadChatCount: messaging.getUnreadCount(uid),
- unreadNotificationCount: user.notifications.getUnreadCount(uid),
- unreadFlagCount: (async function () {
- if (originalRoutes.includes('/flags') && await user.isPrivileged(uid)) {
- return flags.getCount({
- uid,
- query,
- filters: {
- quick: 'unresolved',
- cid: (await user.isAdminOrGlobalMod(uid)) ? [] : (await user.getModeratedCids(uid)),
- },
- });
- }
- return 0;
- }()),
- };
- const results = await utils.promiseParallel(calls);
-
- const unreadCounts = results.unreadData.counts;
- const unreadCount = {
- topic: unreadCounts[''] || 0,
- newTopic: unreadCounts.new || 0,
- watchedTopic: unreadCounts.watched || 0,
- unrepliedTopic: unreadCounts.unreplied || 0,
- mobileUnread: 0,
- unreadUrl: '/unread',
- chat: results.unreadChatCount || 0,
- notification: results.unreadNotificationCount || 0,
- flags: results.unreadFlagCount || 0,
- };
-
- Object.keys(unreadCount).forEach((key) => {
- if (unreadCount[key] > 99) {
- unreadCount[key] = '99+';
- }
- });
-
- const { tidsByFilter } = results.unreadData;
- navigation = navigation.map((item) => {
- function modifyNavItem(item, route, filter, content) {
- if (item && item.originalRoute === route) {
- unreadData[filter] = _.zipObject(tidsByFilter[filter], tidsByFilter[filter].map(() => true));
- item.content = content;
- unreadCount.mobileUnread = content;
- unreadCount.unreadUrl = route;
- if (unreadCounts[filter] > 0) {
- item.iconClass += ' unread-count';
- }
- }
- }
- modifyNavItem(item, '/unread', '', unreadCount.topic);
- modifyNavItem(item, '/unread?filter=new', 'new', unreadCount.newTopic);
- modifyNavItem(item, '/unread?filter=watched', 'watched', unreadCount.watchedTopic);
- modifyNavItem(item, '/unread?filter=unreplied', 'unreplied', unreadCount.unrepliedTopic);
-
- ['flags'].forEach((prop) => {
- if (item && item.originalRoute === `/${prop}` && unreadCount[prop] > 0) {
- item.iconClass += ' unread-count';
- item.content = unreadCount.flags;
- }
- });
-
- return item;
- });
-
- return { navigation, unreadCount };
-}
-
-middleware.renderFooter = async function renderFooter(req, res, templateValues) {
- const data = await plugins.hooks.fire('filter:middleware.renderFooter', {
- req: req,
- res: res,
- templateValues: templateValues,
- });
-
- const scripts = await plugins.hooks.fire('filter:scripts.get', []);
-
- data.templateValues.scripts = scripts.map(script => ({ src: script }));
-
- data.templateValues.useCustomJS = meta.config.useCustomJS;
- data.templateValues.customJS = data.templateValues.useCustomJS ? meta.config.customJS : '';
- data.templateValues.isSpider = req.uid === -1;
-
- return await req.app.renderAsync('footer', data.templateValues);
-};
-
-function modifyTitle(obj) {
- const title = controllers.helpers.buildTitle(meta.config.homePageTitle || '[[pages:home]]');
- obj.browserTitle = title;
-
- if (obj.metaTags) {
- obj.metaTags.forEach((tag, i) => {
- if (tag.property === 'og:title') {
- obj.metaTags[i].content = title;
- }
- });
- }
-
- return title;
-}
diff --git a/src/middleware/helpers.js b/src/middleware/helpers.js
index e31d86299a..e92f8b272b 100644
--- a/src/middleware/helpers.js
+++ b/src/middleware/helpers.js
@@ -42,6 +42,10 @@ helpers.buildBodyClass = function (req, res, templateData = {}) {
parts[index] = index ? `${parts[0]}-${p}` : `page-${p || 'home'}`;
});
+ if (templateData.template) {
+ parts.push(`template-${templateData.template.name.split('/').join('-')}`);
+ }
+
if (templateData.template && templateData.template.topic) {
parts.push(`page-topic-category-${templateData.category.cid}`);
parts.push(`page-topic-category-${slugify(templateData.category.name)}`);
diff --git a/src/middleware/index.js b/src/middleware/index.js
index 995b74c744..86452f6b0b 100644
--- a/src/middleware/index.js
+++ b/src/middleware/index.js
@@ -24,6 +24,7 @@ const controllers = {
const delayCache = cacheCreate({
ttl: 1000 * 60,
+ max: 200,
});
const middleware = module.exports;
@@ -150,7 +151,13 @@ async function expose(exposedField, method, field, req, res, next) {
if (!req.params.hasOwnProperty(field)) {
return next();
}
- res.locals[exposedField] = await method(req.params[field]);
+ const value = await method(String(req.params[field]).toLowerCase());
+ if (!value) {
+ next('route');
+ return;
+ }
+
+ res.locals[exposedField] = value;
next();
}
@@ -209,9 +216,9 @@ middleware.buildSkinAsset = helpers.try(async (req, res, next) => {
}
await plugins.prepareForBuild(['client side styles']);
- const css = await meta.css.buildBundle(target[0], true);
+ const [ltr, rtl] = await meta.css.buildBundle(target[0], true);
require('../meta/minifier').killAll();
- res.status(200).type('text/css').send(css);
+ res.status(200).type('text/css').send(req.originalUrl.includes('-rtl') ? rtl : ltr);
});
middleware.addUploadHeaders = function addUploadHeaders(req, res, next) {
diff --git a/src/middleware/render.js b/src/middleware/render.js
index cb8f82bc86..7a06b67c6c 100644
--- a/src/middleware/render.js
+++ b/src/middleware/render.js
@@ -1,15 +1,28 @@
'use strict';
+const _ = require('lodash');
const nconf = require('nconf');
const validator = require('validator');
+const jsesc = require('jsesc');
+const winston = require('winston');
+const semver = require('semver');
-
+const db = require('../database');
+const navigation = require('../navigation');
+const translator = require('../translator');
+const privileges = require('../privileges');
+const languages = require('../languages');
const plugins = require('../plugins');
+const user = require('../user');
+const topics = require('../topics');
+const messaging = require('../messaging');
+const flags = require('../flags');
const meta = require('../meta');
-const translator = require('../translator');
const widgets = require('../widgets');
const utils = require('../utils');
const helpers = require('./helpers');
+const versions = require('../admin/versions');
+const controllersHelpers = require('../controllers/helpers');
const relative_path = nconf.get('relative_path');
@@ -29,6 +42,7 @@ module.exports = function (middleware) {
}
options.loggedIn = req.uid > 0;
+ options.loggedInUser = await getLoggedInUser(req);
options.relative_path = relative_path;
options.template = { name: template, [template]: true };
options.url = (req.baseUrl + req.path.replace(/^\/api/, ''));
@@ -70,10 +84,11 @@ module.exports = function (middleware) {
return res.json(options);
}
const optionsString = JSON.stringify(options).replace(/<\//g, '<\\/');
+ const headerFooterData = await loadHeaderFooterData(req, res, options);
const results = await utils.promiseParallel({
- header: renderHeaderFooter('renderHeader', req, res, options),
+ header: renderHeaderFooter('renderHeader', req, res, options, headerFooterData),
content: renderContent(render, templateToRender, req, res, options),
- footer: renderHeaderFooter('renderFooter', req, res, options),
+ footer: renderHeaderFooter('renderFooter', req, res, options, headerFooterData),
});
const str = `${results.header +
@@ -93,7 +108,7 @@ module.exports = function (middleware) {
}
try {
- await renderMethod(template, options, fn);
+ await renderMethod(template, { ...res.locals.templateValues, ...options }, fn);
} catch (err) {
next(err);
}
@@ -102,7 +117,187 @@ module.exports = function (middleware) {
next();
};
- async function renderContent(render, tpl, req, res, options) {
+ async function getLoggedInUser(req) {
+ if (req.user) {
+ return await user.getUserData(req.uid);
+ }
+ return {
+ uid: 0,
+ username: '[[global:guest]]',
+ picture: user.getDefaultAvatar(),
+ 'icon:text': '?',
+ 'icon:bgColor': '#aaa',
+ };
+ }
+
+ async function loadHeaderFooterData(req, res, options) {
+ if (res.locals.renderHeader) {
+ return await loadClientHeaderFooterData(req, res, options);
+ } else if (res.locals.renderAdminHeader) {
+ return await loadAdminHeaderFooterData(req, res, options);
+ }
+ return null;
+ }
+
+ async function loadClientHeaderFooterData(req, res, options) {
+ const registrationType = meta.config.registrationType || 'normal';
+ res.locals.config = res.locals.config || {};
+ const templateValues = {
+ title: meta.config.title || '',
+ 'title:url': meta.config['title:url'] || '',
+ description: meta.config.description || '',
+ 'cache-buster': meta.config['cache-buster'] || '',
+ 'brand:logo': meta.config['brand:logo'] || '',
+ 'brand:logo:url': meta.config['brand:logo:url'] || '',
+ 'brand:logo:alt': meta.config['brand:logo:alt'] || '',
+ 'brand:logo:display': meta.config['brand:logo'] ? '' : 'hide',
+ allowRegistration: registrationType === 'normal',
+ searchEnabled: plugins.hooks.hasListeners('filter:search.query'),
+ postQueueEnabled: !!meta.config.postQueue,
+ config: res.locals.config,
+ relative_path,
+ bodyClass: options.bodyClass,
+ widgets: options.widgets,
+ };
+
+ templateValues.configJSON = jsesc(JSON.stringify(res.locals.config), { isScriptContext: true });
+
+ const results = await utils.promiseParallel({
+ isAdmin: user.isAdministrator(req.uid),
+ isGlobalMod: user.isGlobalModerator(req.uid),
+ isModerator: user.isModeratorOfAnyCategory(req.uid),
+ privileges: privileges.global.get(req.uid),
+ user: user.getUserData(req.uid),
+ isEmailConfirmSent: req.uid <= 0 ? false : await user.email.isValidationPending(req.uid),
+ languageDirection: translator.translate('[[language:dir]]', res.locals.config.userLang),
+ timeagoCode: languages.userTimeagoCode(res.locals.config.userLang),
+ browserTitle: translator.translate(controllersHelpers.buildTitle(translator.unescape(options.title))),
+ navigation: navigation.get(req.uid),
+ roomIds: db.getSortedSetRevRange(`uid:${req.uid}:chat:rooms`, 0, 0),
+ });
+
+ const unreadData = {
+ '': {},
+ new: {},
+ watched: {},
+ unreplied: {},
+ };
+
+ results.user.unreadData = unreadData;
+ results.user.isAdmin = results.isAdmin;
+ results.user.isGlobalMod = results.isGlobalMod;
+ results.user.isMod = !!results.isModerator;
+ results.user.privileges = results.privileges;
+ results.user.timeagoCode = results.timeagoCode;
+ results.user[results.user.status] = true;
+ results.user.lastRoomId = results.roomIds.length ? results.roomIds[0] : null;
+
+ results.user.email = String(results.user.email);
+ results.user['email:confirmed'] = results.user['email:confirmed'] === 1;
+ results.user.isEmailConfirmSent = !!results.isEmailConfirmSent;
+
+ templateValues.bootswatchSkin = (parseInt(meta.config.disableCustomUserSkins, 10) !== 1 ? res.locals.config.bootswatchSkin : '') || meta.config.bootswatchSkin || '';
+ templateValues.browserTitle = results.browserTitle;
+ ({
+ navigation: templateValues.navigation,
+ unreadCount: templateValues.unreadCount,
+ } = await appendUnreadCounts({
+ uid: req.uid,
+ query: req.query,
+ navigation: results.navigation,
+ unreadData,
+ }));
+ templateValues.isAdmin = results.user.isAdmin;
+ templateValues.isGlobalMod = results.user.isGlobalMod;
+ templateValues.showModMenu = results.user.isAdmin || results.user.isGlobalMod || results.user.isMod;
+ templateValues.canChat = results.privileges.chat && meta.config.disableChat !== 1;
+ templateValues.user = results.user;
+ templateValues.userJSON = jsesc(JSON.stringify(results.user), { isScriptContext: true });
+ templateValues.useCustomCSS = meta.config.useCustomCSS && meta.config.customCSS;
+ templateValues.customCSS = templateValues.useCustomCSS ? (meta.config.renderedCustomCSS || '') : '';
+ templateValues.useCustomHTML = meta.config.useCustomHTML;
+ templateValues.customHTML = templateValues.useCustomHTML ? meta.config.customHTML : '';
+ templateValues.maintenanceHeader = meta.config.maintenanceMode && !results.isAdmin;
+ templateValues.defaultLang = meta.config.defaultLang || 'en-GB';
+ templateValues.userLang = res.locals.config.userLang;
+ templateValues.languageDirection = results.languageDirection;
+ if (req.query.noScriptMessage) {
+ templateValues.noScriptMessage = validator.escape(String(req.query.noScriptMessage));
+ }
+
+ templateValues.template = { name: res.locals.template };
+ templateValues.template[res.locals.template] = true;
+
+ if (options.hasOwnProperty('_header')) {
+ templateValues.metaTags = options._header.tags.meta;
+ templateValues.linkTags = options._header.tags.link;
+ }
+
+ if (req.route && req.route.path === '/') {
+ modifyTitle(templateValues);
+ }
+ return templateValues;
+ }
+
+ async function loadAdminHeaderFooterData(req, res, options) {
+ const custom_header = {
+ plugins: [],
+ authentication: [],
+ };
+ res.locals.config = res.locals.config || {};
+
+ const results = await utils.promiseParallel({
+ userData: user.getUserFields(req.uid, ['username', 'userslug', 'email', 'picture', 'email:confirmed']),
+ scripts: getAdminScripts(),
+ custom_header: plugins.hooks.fire('filter:admin.header.build', custom_header),
+ configs: meta.configs.list(),
+ latestVersion: getLatestVersion(),
+ privileges: privileges.admin.get(req.uid),
+ tags: meta.tags.parse(req, {}, [], []),
+ });
+
+ const { userData } = results;
+ userData.uid = req.uid;
+ userData['email:confirmed'] = userData['email:confirmed'] === 1;
+ userData.privileges = results.privileges;
+
+ let acpPath = req.path.slice(1).split('/');
+ acpPath.forEach((path, i) => {
+ acpPath[i] = path.charAt(0).toUpperCase() + path.slice(1);
+ });
+ acpPath = acpPath.join(' > ');
+
+ const version = nconf.get('version');
+
+ res.locals.config.userLang = res.locals.config.acpLang || res.locals.config.userLang;
+ const templateValues = {
+ config: res.locals.config,
+ configJSON: jsesc(JSON.stringify(res.locals.config), { isScriptContext: true }),
+ relative_path: res.locals.config.relative_path,
+ adminConfigJSON: encodeURIComponent(JSON.stringify(results.configs)),
+ metaTags: results.tags.meta,
+ linkTags: results.tags.link,
+ user: userData,
+ userJSON: jsesc(JSON.stringify(userData), { isScriptContext: true }),
+ plugins: results.custom_header.plugins,
+ authentication: results.custom_header.authentication,
+ scripts: results.scripts,
+ 'cache-buster': meta.config['cache-buster'] || '',
+ env: !!process.env.NODE_ENV,
+ title: `${acpPath || 'Dashboard'} | NodeBB Admin Control Panel`,
+ bodyClass: options.bodyClass,
+ version: version,
+ latestVersion: results.latestVersion,
+ upgradeAvailable: results.latestVersion && semver.gt(results.latestVersion, version),
+ showManageMenu: results.privileges.superadmin || ['categories', 'privileges', 'users', 'admins-mods', 'groups', 'tags', 'settings'].some(priv => results.privileges[`admin:${priv}`]),
+ };
+
+ templateValues.template = { name: res.locals.template };
+ templateValues.template[res.locals.template] = true;
+ return templateValues;
+ }
+
+ function renderContent(render, tpl, req, res, options) {
return new Promise((resolve, reject) => {
render.call(res, tpl, options, async (err, str) => {
if (err) reject(err);
@@ -111,14 +306,76 @@ module.exports = function (middleware) {
});
}
- async function renderHeaderFooter(method, req, res, options) {
+ async function renderHeader(req, res, options, headerFooterData) {
+ const hookReturn = await plugins.hooks.fire('filter:middleware.renderHeader', {
+ req: req,
+ res: res,
+ templateValues: headerFooterData, // TODO: deprecate
+ templateData: headerFooterData,
+ data: options,
+ });
+
+ return await req.app.renderAsync('header', hookReturn.templateData);
+ }
+
+ async function renderFooter(req, res, options, headerFooterData) {
+ const hookReturn = await plugins.hooks.fire('filter:middleware.renderFooter', {
+ req,
+ res,
+ templateValues: headerFooterData, // TODO: deprecate
+ templateData: headerFooterData,
+ data: options,
+ });
+
+ const scripts = await plugins.hooks.fire('filter:scripts.get', []);
+
+ hookReturn.templateData.scripts = scripts.map(script => ({ src: script }));
+
+ hookReturn.templateData.useCustomJS = meta.config.useCustomJS;
+ hookReturn.templateData.customJS = hookReturn.templateData.useCustomJS ? meta.config.customJS : '';
+ hookReturn.templateData.isSpider = req.uid === -1;
+
+ return await req.app.renderAsync('footer', hookReturn.templateData);
+ }
+
+ async function renderAdminHeader(req, res, options, headerFooterData) {
+ const hookReturn = await plugins.hooks.fire('filter:middleware.renderAdminHeader', {
+ req,
+ res,
+ templateValues: headerFooterData, // TODO: deprecate
+ templateData: headerFooterData,
+ data: options,
+ });
+
+ return await req.app.renderAsync('admin/header', hookReturn.templateData);
+ }
+
+ async function renderAdminFooter(req, res, options, headerFooterData) {
+ const hookReturn = await plugins.hooks.fire('filter:middleware.renderAdminFooter', {
+ req,
+ res,
+ templateValues: headerFooterData, // TODO: deprecate
+ templateData: headerFooterData,
+ data: options,
+ });
+
+ return await req.app.renderAsync('admin/footer', hookReturn.templateData);
+ }
+
+ async function renderHeaderFooter(method, req, res, options, headerFooterData) {
let str = '';
if (res.locals.renderHeader) {
- str = await middleware[method](req, res, options);
+ if (method === 'renderHeader') {
+ str = await renderHeader(req, res, options, headerFooterData);
+ } else if (method === 'renderFooter') {
+ str = await renderFooter(req, res, options, headerFooterData);
+ }
} else if (res.locals.renderAdminHeader) {
- str = await middleware.admin[method](req, res, options);
- } else {
- str = '';
+ if (method === 'renderHeader') {
+ str = await renderAdminHeader(req, res, options, headerFooterData);
+ } else if (method === 'renderFooter') {
+ str = await renderAdminFooter(req, res, options, headerFooterData);
+ }
}
return await translate(str, getLang(req, res));
}
@@ -135,4 +392,106 @@ module.exports = function (middleware) {
const translated = await translator.translate(str, language);
return translator.unescape(translated);
}
+
+ async function appendUnreadCounts({ uid, navigation, unreadData, query }) {
+ const originalRoutes = navigation.map(nav => nav.originalRoute);
+ const calls = {
+ unreadData: topics.getUnreadData({ uid: uid, query: query }),
+ unreadChatCount: messaging.getUnreadCount(uid),
+ unreadNotificationCount: user.notifications.getUnreadCount(uid),
+ unreadFlagCount: (async function () {
+ if (originalRoutes.includes('/flags') && await user.isPrivileged(uid)) {
+ return flags.getCount({
+ uid,
+ query,
+ filters: {
+ quick: 'unresolved',
+ cid: (await user.isAdminOrGlobalMod(uid)) ? [] : (await user.getModeratedCids(uid)),
+ },
+ });
+ }
+ return 0;
+ }()),
+ };
+ const results = await utils.promiseParallel(calls);
+
+ const unreadCounts = results.unreadData.counts;
+ const unreadCount = {
+ topic: unreadCounts[''] || 0,
+ newTopic: unreadCounts.new || 0,
+ watchedTopic: unreadCounts.watched || 0,
+ unrepliedTopic: unreadCounts.unreplied || 0,
+ mobileUnread: 0,
+ unreadUrl: '/unread',
+ chat: results.unreadChatCount || 0,
+ notification: results.unreadNotificationCount || 0,
+ flags: results.unreadFlagCount || 0,
+ };
+
+ Object.keys(unreadCount).forEach((key) => {
+ if (unreadCount[key] > 99) {
+ unreadCount[key] = '99+';
+ }
+ });
+
+ const { tidsByFilter } = results.unreadData;
+ navigation = navigation.map((item) => {
+ function modifyNavItem(item, route, filter, content) {
+ if (item && item.originalRoute === route) {
+ unreadData[filter] = _.zipObject(tidsByFilter[filter], tidsByFilter[filter].map(() => true));
+ item.content = content;
+ unreadCount.mobileUnread = content;
+ unreadCount.unreadUrl = route;
+ if (unreadCounts[filter] > 0) {
+ item.iconClass += ' unread-count';
+ }
+ }
+ }
+ modifyNavItem(item, '/unread', '', unreadCount.topic);
+ modifyNavItem(item, '/unread?filter=new', 'new', unreadCount.newTopic);
+ modifyNavItem(item, '/unread?filter=watched', 'watched', unreadCount.watchedTopic);
+ modifyNavItem(item, '/unread?filter=unreplied', 'unreplied', unreadCount.unrepliedTopic);
+
+ ['flags'].forEach((prop) => {
+ if (item && item.originalRoute === `/${prop}` && unreadCount[prop] > 0) {
+ item.iconClass += ' unread-count';
+ item.content = unreadCount.flags;
+ }
+ });
+
+ return item;
+ });
+
+ return { navigation, unreadCount };
+ }
+
+
+ function modifyTitle(obj) {
+ const title = controllersHelpers.buildTitle(meta.config.homePageTitle || '[[pages:home]]');
+ obj.browserTitle = title;
+
+ if (obj.metaTags) {
+ obj.metaTags.forEach((tag, i) => {
+ if (tag.property === 'og:title') {
+ obj.metaTags[i].content = title;
+ }
+ });
+ }
+
+ return title;
+ }
+
+ async function getAdminScripts() {
+ const scripts = await plugins.hooks.fire('filter:admin.scripts.get', []);
+ return scripts.map(script => ({ src: script }));
+ }
+
+ async function getLatestVersion() {
+ try {
+ return await versions.getLatestVersion();
+ } catch (err) {
+ winston.error(`[acp] Failed to fetch latest version${err.stack}`);
+ }
+ return null;
+ }
};
diff --git a/src/middleware/user.js b/src/middleware/user.js
index 11f6c849ed..fb3e5ed84f 100644
--- a/src/middleware/user.js
+++ b/src/middleware/user.js
@@ -12,6 +12,7 @@ const plugins = require('../plugins');
const helpers = require('./helpers');
const auth = require('../routes/authentication');
const writeRouter = require('../routes/write');
+const accountHelpers = require('../controllers/accounts/helpers');
const controllers = {
helpers: require('../controllers/helpers'),
@@ -181,6 +182,7 @@ module.exports = function (middleware) {
if (allowed) {
return next();
}
+
controllers.helpers.notAllowed(req, res);
});
@@ -223,6 +225,11 @@ module.exports = function (middleware) {
res.status(403).render('403', { title: '[[global:403.title]]' });
};
+ middleware.buildAccountData = async (req, res, next) => {
+ res.locals.templateValues = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query);
+ next();
+ };
+
middleware.registrationComplete = async function registrationComplete(req, res, next) {
// If the user's session contains registration data, redirect the user to complete registration
if (!req.session.hasOwnProperty('registration')) {
diff --git a/src/plugins/index.js b/src/plugins/index.js
index d1a3bd92bf..3587dc091c 100644
--- a/src/plugins/index.js
+++ b/src/plugins/index.js
@@ -33,8 +33,8 @@ Plugins.libraries = {};
Plugins.loadedHooks = {};
Plugins.staticDirs = {};
Plugins.cssFiles = [];
-Plugins.lessFiles = [];
-Plugins.acpLessFiles = [];
+Plugins.scssFiles = [];
+Plugins.acpScssFiles = [];
Plugins.clientScripts = [];
Plugins.acpScripts = [];
Plugins.libraryPaths = [];
@@ -98,8 +98,8 @@ Plugins.reload = async function () {
Plugins.staticDirs = {};
Plugins.versionWarning = [];
Plugins.cssFiles.length = 0;
- Plugins.lessFiles.length = 0;
- Plugins.acpLessFiles.length = 0;
+ Plugins.scssFiles.length = 0;
+ Plugins.acpScssFiles.length = 0;
Plugins.clientScripts.length = 0;
Plugins.acpScripts.length = 0;
Plugins.libraryPaths.length = 0;
diff --git a/src/plugins/load.js b/src/plugins/load.js
index 99ee26df3d..d6c0375820 100644
--- a/src/plugins/load.js
+++ b/src/plugins/load.js
@@ -22,11 +22,11 @@ module.exports = function (Plugins) {
cssFiles: function (next) {
Plugins.data.getFiles(pluginData, 'css', next);
},
- lessFiles: function (next) {
- Plugins.data.getFiles(pluginData, 'less', next);
+ scssFiles: function (next) {
+ Plugins.data.getFiles(pluginData, 'scss', next);
},
- acpLessFiles: function (next) {
- Plugins.data.getFiles(pluginData, 'acpLess', next);
+ acpScssFiles: function (next) {
+ Plugins.data.getFiles(pluginData, 'acpScss', next);
},
clientScripts: function (next) {
Plugins.data.getScripts(pluginData, 'client', next);
@@ -55,8 +55,8 @@ module.exports = function (Plugins) {
Object.assign(Plugins.staticDirs, results.staticDirs || {});
add(Plugins.cssFiles, results.cssFiles);
- add(Plugins.lessFiles, results.lessFiles);
- add(Plugins.acpLessFiles, results.acpLessFiles);
+ add(Plugins.scssFiles, results.scssFiles);
+ add(Plugins.acpScssFiles, results.acpScssFiles);
add(Plugins.clientScripts, results.clientScripts);
add(Plugins.acpScripts, results.acpScripts);
Object.assign(meta.js.scripts.modules, results.modules || {});
@@ -74,8 +74,8 @@ module.exports = function (Plugins) {
'requirejs modules': ['modules'],
'client js bundle': ['clientScripts'],
'admin js bundle': ['acpScripts'],
- 'client side styles': ['cssFiles', 'lessFiles'],
- 'admin control panel styles': ['cssFiles', 'lessFiles', 'acpLessFiles'],
+ 'client side styles': ['cssFiles', 'scssFiles'],
+ 'admin control panel styles': ['cssFiles', 'scssFiles', 'acpScssFiles'],
languages: ['languageData'],
};
@@ -87,8 +87,8 @@ module.exports = function (Plugins) {
case 'clientScripts':
case 'acpScripts':
case 'cssFiles':
- case 'lessFiles':
- case 'acpLessFiles':
+ case 'scssFiles':
+ case 'acpScssFiles':
Plugins[field].length = 0;
break;
case 'languageData':
diff --git a/src/posts/diffs.js b/src/posts/diffs.js
index eb687195d3..ac79565ee3 100644
--- a/src/posts/diffs.js
+++ b/src/posts/diffs.js
@@ -147,7 +147,7 @@ module.exports = function (Posts) {
const tagDiffs = diffs.filter(d => d.hasOwnProperty('tags') && d.tags);
if (tagDiffs.length && post[0].topic) {
const tags = tagDiffs[tagDiffs.length - 1].tags.split(',').map(tag => ({ value: tag }));
- post[0].topic.tags = await topics.getTagData(tags);
+ post[0].topic.tags = topics.getTagData(tags);
}
return post[0];
diff --git a/src/posts/queue.js b/src/posts/queue.js
index 0b334742b1..24cc3a311c 100644
--- a/src/posts/queue.js
+++ b/src/posts/queue.js
@@ -303,14 +303,17 @@ module.exports = function (Posts) {
}
Posts.editQueuedContent = async function (uid, editData) {
- const canEditQueue = await Posts.canEditQueue(uid, editData, 'edit');
+ const [canEditQueue, data] = await Promise.all([
+ Posts.canEditQueue(uid, editData, 'edit'),
+ getParsedObject(editData.id),
+ ]);
+ if (!data) {
+ throw new Error('[[error:no-post]]');
+ }
if (!canEditQueue) {
throw new Error('[[error:no-privileges]]');
}
- const data = await getParsedObject(editData.id);
- if (!data) {
- return;
- }
+
if (editData.content !== undefined) {
data.data.content = editData.content;
}
diff --git a/src/prestart.js b/src/prestart.js
index 48d4dc3d13..1af2d5ce68 100644
--- a/src/prestart.js
+++ b/src/prestart.js
@@ -75,7 +75,7 @@ function loadConfig(configFile) {
// Ensure themes_path is a full filepath
nconf.set('themes_path', path.resolve(paths.baseDir, nconf.get('themes_path')));
nconf.set('core_templates_path', path.join(paths.baseDir, 'src/views'));
- nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-persona/templates'));
+ nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-harmony/templates'));
nconf.set('upload_path', path.resolve(nconf.get('base_dir'), nconf.get('upload_path')));
nconf.set('upload_url', '/assets/uploads');
diff --git a/src/privileges/categories.js b/src/privileges/categories.js
index 76b9248bd2..ae0d285766 100644
--- a/src/privileges/categories.js
+++ b/src/privileges/categories.js
@@ -209,6 +209,12 @@ privsCategories.canMoveAllTopics = async function (currentCid, targetCid, uid) {
return isAdmin || !isModerators.includes(false);
};
+privsCategories.canPostTopic = async function (uid) {
+ let cids = await categories.getAllCidsFromSet('categories:cid');
+ cids = await privsCategories.filterCids('topics:create', cids, uid);
+ return cids.length > 0;
+};
+
privsCategories.userPrivileges = async function (cid, uid) {
const userPrivilegeList = await privsCategories.getUserPrivilegeList();
return await helpers.userOrGroupPrivileges(cid, uid, userPrivilegeList);
diff --git a/src/routes/api.js b/src/routes/api.js
index caab9c66a3..7f4afdc801 100644
--- a/src/routes/api.js
+++ b/src/routes/api.js
@@ -1,7 +1,6 @@
'use strict';
const express = require('express');
-const winston = require('winston');
const uploadsController = require('../controllers/uploads');
const helpers = require('./helpers');
@@ -18,16 +17,6 @@ module.exports = function (app, middleware, controllers) {
router.get('/user/username/:username', [...middlewares, middleware.canViewUsers], helpers.tryRoute(controllers.user.getUserByUsername));
router.get('/user/email/:email', [...middlewares, middleware.canViewUsers], helpers.tryRoute(controllers.user.getUserByEmail));
- router.get('/user/:userslug/export/posts', [...middlewares, middleware.authenticateRequest, middleware.ensureLoggedIn, middleware.checkAccountPermissions, middleware.exposeUid], helpers.tryRoute(controllers.user.exportPosts));
- router.get('/user/:userslug/export/uploads', [...middlewares, middleware.authenticateRequest, middleware.ensureLoggedIn, middleware.checkAccountPermissions, middleware.exposeUid], helpers.tryRoute(controllers.user.exportUploads));
- router.get('/user/:userslug/export/profile', [...middlewares, middleware.authenticateRequest, middleware.ensureLoggedIn, middleware.checkAccountPermissions, middleware.exposeUid], helpers.tryRoute(controllers.user.exportProfile));
-
- // Deprecated, remove in v1.20.0
- router.get('/user/uid/:userslug/export/:type', (req, res) => {
- winston.warn(`[router] \`/api/user/uid/${req.params.userslug}/export/${req.params.type}\` is deprecated, call it \`/api/user/${req.params.userslug}/export/${req.params.type}\`instead.`);
- res.redirect(`/api/user/${req.params.userslug}/export/${req.params.type}`);
- });
-
router.get('/categories/:cid/moderators', [...middlewares], helpers.tryRoute(controllers.api.getModerators));
router.get('/recent/posts/:term?', [...middlewares], helpers.tryRoute(controllers.posts.getRecentPosts));
router.get('/unread/total', [...middlewares, middleware.ensureLoggedIn], helpers.tryRoute(controllers.unread.unreadTotal));
diff --git a/src/routes/authentication.js b/src/routes/authentication.js
index df7e33138b..e2b1cd73cf 100644
--- a/src/routes/authentication.js
+++ b/src/routes/authentication.js
@@ -26,20 +26,6 @@ Auth.initialize = function (app, middleware) {
Auth.app = app;
Auth.middleware = middleware;
-
- // Apply wrapper around passport.authenticate to pass in keepSessionInfo option
- const _authenticate = passport.authenticate;
- passport.authenticate = (strategy, options, callback) => {
- if (!callback && typeof options === 'function') {
- return _authenticate.call(passport, strategy, options);
- }
-
- if (!options.hasOwnProperty('keepSessionInfo')) {
- options.keepSessionInfo = true;
- }
-
- return _authenticate.call(passport, strategy, options, callback);
- };
};
Auth.setAuthVars = function setAuthVars(req) {
diff --git a/src/routes/index.js b/src/routes/index.js
index 03b5c7fdfb..bf7ac2fa18 100644
--- a/src/routes/index.js
+++ b/src/routes/index.js
@@ -75,14 +75,15 @@ _mounts.tags = (app, name, middleware, controllers) => {
setupPageRoute(app, `/${name}/:tag`, [middleware.privateTagListing], controllers.tags.getTag);
setupPageRoute(app, `/${name}`, [middleware.privateTagListing], controllers.tags.getTags);
};
-
-_mounts.category = (app, name, middleware, controllers) => {
+_mounts.categories = (app, name, middleware, controllers) => {
setupPageRoute(app, '/categories', [], controllers.categories.list);
setupPageRoute(app, '/popular', [], controllers.popular.get);
setupPageRoute(app, '/recent', [], controllers.recent.get);
setupPageRoute(app, '/top', [], controllers.top.get);
setupPageRoute(app, '/unread', [middleware.ensureLoggedIn], controllers.unread.get);
+};
+_mounts.category = (app, name, middleware, controllers) => {
setupPageRoute(app, `/${name}/:category_id/:slug/:topic_index`, [], controllers.category.get);
setupPageRoute(app, `/${name}/:category_id/:slug?`, [], controllers.category.get);
};
@@ -108,7 +109,7 @@ module.exports = async function (app, middleware) {
};
// Allow plugins/themes to mount some routes elsewhere
- const remountable = ['admin', 'category', 'topic', 'post', 'users', 'user', 'groups', 'tags'];
+ const remountable = ['admin', 'categories', 'category', 'topic', 'post', 'users', 'user', 'groups', 'tags'];
const { mounts } = await plugins.hooks.fire('filter:router.add', {
mounts: remountable.reduce((memo, mount) => {
memo[mount] = mount;
@@ -195,6 +196,7 @@ function addCoreRoutes(app, router, middleware, mounts) {
// Skins
meta.css.supportedSkins.forEach((skin) => {
app.use(`${relativePath}/assets/client-${skin}.css`, middleware.buildSkinAsset);
+ app.use(`${relativePath}/assets/client-${skin}-rtl.css`, middleware.buildSkinAsset);
});
app.use(controllers['404'].handle404);
diff --git a/src/routes/user.js b/src/routes/user.js
index b6fd28d21d..9825fa58ea 100644
--- a/src/routes/user.js
+++ b/src/routes/user.js
@@ -5,11 +5,10 @@ const helpers = require('./helpers');
const { setupPageRoute } = helpers;
module.exports = function (app, name, middleware, controllers) {
- const middlewares = [middleware.exposeUid, middleware.canViewUsers];
+ const middlewares = [middleware.exposeUid, middleware.canViewUsers, middleware.buildAccountData];
const accountMiddlewares = [
- middleware.exposeUid,
+ ...middlewares,
middleware.ensureLoggedIn,
- middleware.canViewUsers,
middleware.checkAccountPermissions,
];
@@ -48,6 +47,6 @@ module.exports = function (app, name, middleware, controllers) {
setupPageRoute(app, `/${name}/:userslug/sessions`, accountMiddlewares, controllers.accounts.sessions.get);
setupPageRoute(app, '/notifications', [middleware.ensureLoggedIn], controllers.accounts.notifications.get);
- setupPageRoute(app, `/${name}/:userslug/chats/:roomid?`, middlewares, controllers.accounts.chats.get);
+ setupPageRoute(app, `/${name}/:userslug/chats/:roomid?`, [middleware.exposeUid, middleware.canViewUsers], controllers.accounts.chats.get);
setupPageRoute(app, '/chats/:roomid?', [middleware.ensureLoggedIn], controllers.accounts.chats.redirectToChat);
};
diff --git a/src/routes/write/chats.js b/src/routes/write/chats.js
index 1e5d870ca5..a92db701f7 100644
--- a/src/routes/write/chats.js
+++ b/src/routes/write/chats.js
@@ -19,6 +19,9 @@ module.exports = function () {
setupApiRoute(router, 'put', '/:roomId', [...middlewares, middleware.assert.room, middleware.checkRequired.bind(null, ['name'])], controllers.write.chats.rename);
// no route for room deletion, noted here just in case...
+ setupApiRoute(router, 'put', '/:roomId/state', [...middlewares, middleware.assert.room], controllers.write.chats.mark);
+ setupApiRoute(router, 'delete', '/:roomId/state', [...middlewares, middleware.assert.room], controllers.write.chats.mark);
+
setupApiRoute(router, 'get', '/:roomId/users', [...middlewares, middleware.assert.room], controllers.write.chats.users);
setupApiRoute(router, 'post', '/:roomId/users', [...middlewares, middleware.assert.room, middleware.checkRequired.bind(null, ['uids'])], controllers.write.chats.invite);
setupApiRoute(router, 'delete', '/:roomId/users', [...middlewares, middleware.assert.room, middleware.checkRequired.bind(null, ['uids'])], controllers.write.chats.kick);
diff --git a/src/socket.io/index.js b/src/socket.io/index.js
index 60c7a8cd27..dc69204473 100644
--- a/src/socket.io/index.js
+++ b/src/socket.io/index.js
@@ -266,13 +266,3 @@ Sockets.getCountInRoom = function (room) {
const roomMap = Sockets.server.sockets.adapter.rooms.get(room);
return roomMap ? roomMap.size : 0;
};
-
-Sockets.warnDeprecated = (socket, replacement) => {
- if (socket.previousEvents && socket.emit) {
- socket.emit('event:deprecated_call', {
- eventName: socket.previousEvents[socket.previousEvents.length - 1],
- replacement: replacement,
- });
- }
- winston.warn(`[deprecated]\n ${new Error('-').stack.split('\n').slice(2, 5).join('\n')}\n use ${replacement}`);
-};
diff --git a/src/socket.io/modules.js b/src/socket.io/modules.js
index 1a23fc1067..679a2516ec 100644
--- a/src/socket.io/modules.js
+++ b/src/socket.io/modules.js
@@ -1,16 +1,11 @@
'use strict';
const db = require('../database');
-const notifications = require('../notifications');
const Messaging = require('../messaging');
const utils = require('../utils');
-const server = require('./index');
const user = require('../user');
const privileges = require('../privileges');
-const sockets = require('.');
-const api = require('../api');
-
const SocketModules = module.exports;
SocketModules.chats = {};
@@ -41,176 +36,16 @@ SocketModules.chats.isDnD = async function (socket, uid) {
return status === 'dnd';
};
-SocketModules.chats.newRoom = async function (socket, data) {
- sockets.warnDeprecated(socket, 'POST /api/v3/chats');
-
- if (!data) {
- throw new Error('[[error:invalid-data]]');
- }
-
- const roomObj = await api.chats.create(socket, {
- uids: [data.touid],
- });
- return roomObj.roomId;
-};
-
-SocketModules.chats.send = async function (socket, data) {
- sockets.warnDeprecated(socket, 'POST /api/v3/chats/:roomId');
-
- if (!data || !data.roomId || !socket.uid) {
- throw new Error('[[error:invalid-data]]');
- }
-
- const canChat = await privileges.global.can('chat', socket.uid);
- if (!canChat) {
- throw new Error('[[error:no-privileges]]');
- }
-
- return api.chats.post(socket, data);
-};
-
-SocketModules.chats.loadRoom = async function (socket, data) {
- sockets.warnDeprecated(socket, 'GET /api/v3/chats/:roomId');
-
- if (!data || !data.roomId) {
- throw new Error('[[error:invalid-data]]');
- }
-
- return await Messaging.loadRoom(socket.uid, data);
-};
-
-SocketModules.chats.getUsersInRoom = async function (socket, data) {
- sockets.warnDeprecated(socket, 'GET /api/v3/chats/:roomId/users');
-
- if (!data || !data.roomId) {
- throw new Error('[[error:invalid-data]]');
- }
- const isUserInRoom = await Messaging.isUserInRoom(socket.uid, data.roomId);
- if (!isUserInRoom) {
- throw new Error('[[error:no-privileges]]');
- }
-
- return api.chats.users(socket, data);
-};
-
-SocketModules.chats.addUserToRoom = async function (socket, data) {
- sockets.warnDeprecated(socket, 'POST /api/v3/chats/:roomId/users');
-
- if (!data || !data.roomId || !data.username) {
- throw new Error('[[error:invalid-data]]');
- }
-
- const canChat = await privileges.global.can('chat', socket.uid);
- if (!canChat) {
- throw new Error('[[error:no-privileges]]');
- }
-
- // Revised API now takes uids, not usernames
- data.uids = [await user.getUidByUsername(data.username)];
- delete data.username;
-
- await api.chats.invite(socket, data);
-};
-
-SocketModules.chats.removeUserFromRoom = async function (socket, data) {
- sockets.warnDeprecated(socket, 'DELETE /api/v3/chats/:roomId/users OR DELETE /api/v3/chats/:roomId/users/:uid');
-
- if (!data || !data.roomId) {
- throw new Error('[[error:invalid-data]]');
- }
-
- // Revised API can accept multiple uids now
- data.uids = [data.uid];
- delete data.uid;
-
- await api.chats.kick(socket, data);
-};
-
-SocketModules.chats.leave = async function (socket, roomid) {
- sockets.warnDeprecated(socket, 'DELETE /api/v3/chats/:roomId/users OR DELETE /api/v3/chats/:roomId/users/:uid');
-
- if (!socket.uid || !roomid) {
- throw new Error('[[error:invalid-data]]');
- }
-
- await Messaging.leaveRoom([socket.uid], roomid);
-};
-
-SocketModules.chats.edit = async function (socket, data) {
- sockets.warnDeprecated(socket, 'PUT /api/v3/chats/:roomId/:mid');
-
- if (!data || !data.roomId || !data.message) {
- throw new Error('[[error:invalid-data]]');
- }
- await Messaging.canEdit(data.mid, socket.uid);
- await Messaging.editMessage(socket.uid, data.mid, data.roomId, data.message);
-};
-
-SocketModules.chats.delete = async function (socket, data) {
- sockets.warnDeprecated(socket, 'DELETE /api/v3/chats/:roomId/:mid');
-
- if (!data || !data.roomId || !data.messageId) {
- throw new Error('[[error:invalid-data]]');
- }
- await Messaging.canDelete(data.messageId, socket.uid);
- await Messaging.deleteMessage(data.messageId, socket.uid);
-};
-
-SocketModules.chats.restore = async function (socket, data) {
- sockets.warnDeprecated(socket, 'POST /api/v3/chats/:roomId/:mid');
-
- if (!data || !data.roomId || !data.messageId) {
- throw new Error('[[error:invalid-data]]');
- }
- await Messaging.canDelete(data.messageId, socket.uid);
- await Messaging.restoreMessage(data.messageId, socket.uid);
-};
-
SocketModules.chats.canMessage = async function (socket, roomId) {
await Messaging.canMessageRoom(socket.uid, roomId);
};
-SocketModules.chats.markRead = async function (socket, roomId) {
- if (!socket.uid || !roomId) {
- throw new Error('[[error:invalid-data]]');
- }
- const [uidsInRoom] = await Promise.all([
- Messaging.getUidsInRoom(roomId, 0, -1),
- Messaging.markRead(socket.uid, roomId),
- ]);
-
- Messaging.pushUnreadCount(socket.uid);
- server.in(`uid_${socket.uid}`).emit('event:chats.markedAsRead', { roomId: roomId });
-
- if (!uidsInRoom.includes(String(socket.uid))) {
- return;
- }
-
- // Mark notification read
- const nids = uidsInRoom.filter(uid => parseInt(uid, 10) !== socket.uid)
- .map(uid => `chat_${uid}_${roomId}`);
-
- await notifications.markReadMultiple(nids, socket.uid);
- await user.notifications.pushCount(socket.uid);
-};
-
SocketModules.chats.markAllRead = async function (socket) {
+ // no v3 method ?
await Messaging.markAllRead(socket.uid);
Messaging.pushUnreadCount(socket.uid);
};
-SocketModules.chats.renameRoom = async function (socket, data) {
- sockets.warnDeprecated(socket, 'PUT /api/v3/chats/:roomId');
-
- if (!data || !data.roomId || !data.newName) {
- throw new Error('[[error:invalid-data]]');
- }
-
- data.name = data.newName;
- delete data.newName;
- await api.chats.rename(socket, data);
-};
-
SocketModules.chats.getRecentChats = async function (socket, data) {
if (!data || !utils.isNumber(data.after) || !utils.isNumber(data.uid)) {
throw new Error('[[error:invalid-data]]');
@@ -227,22 +62,6 @@ SocketModules.chats.hasPrivateChat = async function (socket, uid) {
return await Messaging.hasPrivateChat(socket.uid, uid);
};
-SocketModules.chats.getMessages = async function (socket, data) {
- sockets.warnDeprecated(socket, 'GET /api/v3/chats/:roomId/messages');
-
- if (!socket.uid || !data || !data.uid || !data.roomId) {
- throw new Error('[[error:invalid-data]]');
- }
-
- return await Messaging.getMessages({
- callerUid: socket.uid,
- uid: data.uid,
- roomId: data.roomId,
- start: parseInt(data.start, 10) || 0,
- count: 50,
- });
-};
-
SocketModules.chats.getIP = async function (socket, mid) {
const allowed = await privileges.global.can('view:users:info', socket.uid);
if (!allowed) {
diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js
index 6b257ca525..21f2ee6d71 100644
--- a/src/socket.io/posts.js
+++ b/src/socket.io/posts.js
@@ -58,6 +58,25 @@ SocketPosts.getPostSummaryByIndex = async function (socket, data) {
return postsData[0];
};
+SocketPosts.getPostTimestampByIndex = async function (socket, data) {
+ if (data.index < 0) {
+ data.index = 0;
+ }
+ let pid;
+ if (data.index === 0) {
+ pid = await topics.getTopicField(data.tid, 'mainPid');
+ } else {
+ pid = await db.getSortedSetRange(`tid:${data.tid}:posts`, data.index - 1, data.index - 1);
+ }
+ pid = Array.isArray(pid) ? pid[0] : pid;
+ const topicPrivileges = await privileges.topics.get(data.tid, socket.uid);
+ if (!topicPrivileges['topics:read']) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ return await posts.getPostField(pid, 'timestamp');
+};
+
SocketPosts.getPostSummaryByPid = async function (socket, data) {
if (!data || !data.pid) {
throw new Error('[[error:invalid-data]]');
@@ -150,7 +169,13 @@ SocketPosts.notify = async function (socket, data) {
};
async function canEditQueue(socket, data, action) {
- const canEditQueue = await posts.canEditQueue(socket.uid, data, action);
+ const [canEditQueue, queuedPost] = await Promise.all([
+ posts.canEditQueue(socket.uid, data, action),
+ posts.getFromQueue(data.id),
+ ]);
+ if (!queuedPost) {
+ throw new Error('[[error:no-post]]');
+ }
if (!canEditQueue) {
throw new Error('[[error:no-privileges]]');
}
diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js
index df20a6d657..b0a4fd3abc 100644
--- a/src/socket.io/topics.js
+++ b/src/socket.io/topics.js
@@ -34,7 +34,10 @@ SocketTopics.bookmark = async function (socket, data) {
}
const postcount = await topics.getTopicField(data.tid, 'postcount');
if (data.index > meta.config.bookmarkThreshold && postcount > meta.config.bookmarkThreshold) {
- await topics.setUserBookmark(data.tid, socket.uid, data.index);
+ const currentIndex = await db.sortedSetScore(`tid:${data.tid}:bookmarks`, socket.uid);
+ if (!currentIndex || (data.index > currentIndex && data.index <= postcount) || (currentIndex > postcount)) {
+ await topics.setUserBookmark(data.tid, socket.uid, data.index);
+ }
}
};
diff --git a/src/socket.io/topics/tags.js b/src/socket.io/topics/tags.js
index 117b63c31a..e536130429 100644
--- a/src/socket.io/topics/tags.js
+++ b/src/socket.io/topics/tags.js
@@ -71,6 +71,35 @@ module.exports = function (SocketTopics) {
return await method(data);
}
+ // used by tag filter search
+ SocketTopics.tagFilterSearch = async function (socket, data) {
+ const allowed = await privileges.global.can('search:tags', socket.uid);
+ if (!allowed) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
+ let cids = [];
+ if (Array.isArray(data.cids)) {
+ cids = await privileges.categories.filterCids('topics:read', data.cids, socket.uid);
+ } else { // if no cids passed in get all cids we can read
+ cids = await categories.getCidsByPrivilege('categories:cid', socket.uid, 'topics:read');
+ }
+
+ let tags = [];
+ if (data.query) {
+ tags = await topics.searchTags({
+ query: data.query,
+ cid: cids.length === 1 ? cids[0] : null,
+ cids: cids,
+ });
+ topics.getTagData(tags);
+ } else {
+ tags = await topics.getCategoryTagsData(cids, 0, 39);
+ }
+
+ return tags.filter(t => t.score > 0);
+ };
+
SocketTopics.loadMoreTags = async function (socket, data) {
if (!data || !utils.isNumber(data.after)) {
throw new Error('[[error:invalid-data]]');
diff --git a/src/socket.io/topics/unread.js b/src/socket.io/topics/unread.js
index 238ef89b7f..983a9634c6 100644
--- a/src/socket.io/topics/unread.js
+++ b/src/socket.io/topics/unread.js
@@ -1,6 +1,5 @@
'use strict';
-const db = require('../../database');
const user = require('../../user');
const topics = require('../../topics');
@@ -54,7 +53,6 @@ module.exports = function (SocketTopics) {
throw new Error('[[error:no-privileges]]');
}
const isAdmin = await user.isAdministrator(socket.uid);
- const now = Date.now();
await Promise.all(tids.map(async (tid) => {
const topicData = await topics.getTopicFields(tid, ['tid', 'cid']);
if (!topicData.tid) {
@@ -65,9 +63,6 @@ module.exports = function (SocketTopics) {
throw new Error('[[error:no-privileges]]');
}
await topics.markAsUnreadForAll(tid);
- await topics.updateRecent(tid, now);
- await db.sortedSetAdd(`cid:${topicData.cid}:tids:lastposttime`, now, tid);
- await topics.setTopicField(tid, 'lastposttime', now);
}));
topics.pushUnreadCount(socket.uid);
};
diff --git a/src/socket.io/user.js b/src/socket.io/user.js
index 8215af9616..443e73678f 100644
--- a/src/socket.io/user.js
+++ b/src/socket.io/user.js
@@ -16,7 +16,6 @@ const db = require('../database');
const userController = require('../controllers/user');
const privileges = require('../privileges');
const utils = require('../utils');
-const sockets = require('.');
const SocketUser = module.exports;
@@ -25,16 +24,6 @@ require('./user/status')(SocketUser);
require('./user/picture')(SocketUser);
require('./user/registration')(SocketUser);
-SocketUser.emailConfirm = async function (socket) {
- sockets.warnDeprecated(socket, 'HTTP 302 /me/edit/email');
-
- if (!socket.uid) {
- throw new Error('[[error:no-privileges]]');
- }
-
- return await user.email.sendValidationEmail(socket.uid);
-};
-
// Password Reset
SocketUser.reset = {};
diff --git a/src/socket.io/user/picture.js b/src/socket.io/user/picture.js
index bad7c963b7..32a4f0e30c 100644
--- a/src/socket.io/user/picture.js
+++ b/src/socket.io/user/picture.js
@@ -23,22 +23,36 @@ module.exports = function (SocketUser) {
throw new Error('[[error:invalid-data]]');
}
- const [list, uploaded] = await Promise.all([
+ const [list, userObj] = await Promise.all([
plugins.hooks.fire('filter:user.listPictures', {
uid: data.uid,
pictures: [],
}),
- user.getUserField(data.uid, 'uploadedpicture'),
+ user.getUserData(data.uid),
]);
- if (uploaded) {
+ if (userObj.uploadedpicture) {
list.pictures.push({
type: 'uploaded',
- url: uploaded,
+ url: userObj.uploadedpicture,
text: '[[user:uploaded_picture]]',
});
}
+ // Normalize list into "user object" format
+ list.pictures = list.pictures.map(({ type, url, text }) => ({
+ type,
+ username: text,
+ picture: url,
+ }));
+
+ list.pictures.unshift({
+ type: 'default',
+ 'icon:text': userObj['icon:text'],
+ 'icon:bgColor': userObj['icon:bgColor'],
+ username: '[[user:default_picture]]',
+ });
+
return list.pictures;
};
};
diff --git a/src/socket.io/user/profile.js b/src/socket.io/user/profile.js
index 20a869056c..5d4c4624f3 100644
--- a/src/socket.io/user/profile.js
+++ b/src/socket.io/user/profile.js
@@ -4,9 +4,6 @@ const user = require('../../user');
const privileges = require('../../privileges');
const plugins = require('../../plugins');
-const sockets = require('..');
-const api = require('../../api');
-
module.exports = function (SocketUser) {
SocketUser.updateCover = async function (socket, data) {
if (!socket.uid) {
@@ -48,32 +45,4 @@ module.exports = function (SocketUser) {
await user.blocks[isBlocked ? 'remove' : 'add'](data.blockeeUid, data.blockerUid);
return !isBlocked;
};
-
- SocketUser.exportProfile = async function (socket, data) {
- await doExport(socket, data, 'profile');
- };
-
- SocketUser.exportPosts = async function (socket, data) {
- await doExport(socket, data, 'posts');
- };
-
- SocketUser.exportUploads = async function (socket, data) {
- await doExport(socket, data, 'uploads');
- };
-
- async function doExport(socket, data, type) {
- sockets.warnDeprecated(socket, 'POST /api/v3/users/:uid/exports/:type');
-
- if (!socket.uid) {
- throw new Error('[[error:invalid-uid]]');
- }
-
- if (!data || parseInt(data.uid, 10) <= 0) {
- throw new Error('[[error:invalid-data]]');
- }
-
- await user.isAdminOrSelf(socket.uid, data.uid);
-
- api.users.generateExport(socket, { type, ...data });
- }
};
diff --git a/src/start.js b/src/start.js
index 5f7b42ce7b..f87f0b4ddf 100644
--- a/src/start.js
+++ b/src/start.js
@@ -105,12 +105,14 @@ function addProcessHandlers() {
shutdown(1);
});
process.on('message', (msg) => {
- if (msg && msg.compiling === 'tpl') {
- const benchpressjs = require('benchpressjs');
- benchpressjs.flush();
- } else if (msg && msg.compiling === 'lang') {
- const translator = require('./translator');
- translator.flush();
+ if (msg && Array.isArray(msg.compiling)) {
+ if (msg.compiling.includes('tpl')) {
+ const benchpressjs = require('benchpressjs');
+ benchpressjs.flush();
+ } else if (msg.compiling.includes('lang')) {
+ const translator = require('./translator');
+ translator.flush();
+ }
}
});
}
diff --git a/src/topics/bookmarks.js b/src/topics/bookmarks.js
index 2b473f5417..e7d52f84ae 100644
--- a/src/topics/bookmarks.js
+++ b/src/topics/bookmarks.js
@@ -22,6 +22,9 @@ module.exports = function (Topics) {
};
Topics.setUserBookmark = async function (tid, uid, index) {
+ if (parseInt(uid, 10) <= 0) {
+ return;
+ }
await db.sortedSetAdd(`tid:${tid}:bookmarks`, index, uid);
};
diff --git a/src/topics/create.js b/src/topics/create.js
index a6d63d53dd..fe0d710bed 100644
--- a/src/topics/create.js
+++ b/src/topics/create.js
@@ -213,7 +213,7 @@ module.exports = function (Topics) {
async function onNewPost(postData, data) {
const { tid } = postData;
const { uid } = postData;
- await Topics.markAsUnreadForAll(tid);
+ await Topics.markCategoryUnreadForAll(tid);
await Topics.markAsRead([tid], uid);
const [
userInfo,
diff --git a/src/topics/events.js b/src/topics/events.js
index 1d6e67fd11..6e4c28a616 100644
--- a/src/topics/events.js
+++ b/src/topics/events.js
@@ -1,6 +1,7 @@
'use strict';
const _ = require('lodash');
+const nconf = require('nconf');
const db = require('../database');
const meta = require('../meta');
const user = require('../user');
@@ -9,6 +10,10 @@ const categories = require('../categories');
const plugins = require('../plugins');
const translator = require('../translator');
const privileges = require('../privileges');
+const utils = require('../utils');
+const helpers = require('../helpers');
+
+const relative_path = nconf.get('relative_path');
const Events = module.exports;
@@ -20,49 +25,49 @@ const Events = module.exports;
* You can then log a custom topic event by calling `topics.events.log(tid, { type, uid });`
* `uid` is optional; if you pass in a valid uid in the payload,
* the user avatar/username will be rendered as part of the event text
- *
+ * see https://github.com/NodeBB/nodebb-plugin-question-and-answer/blob/master/library.js#L288-L306
*/
Events._types = {
pin: {
icon: 'fa-thumb-tack',
- text: '[[topic:pinned-by]]',
+ translation: async event => translateSimple(event, 'topic:user-pinned-topic'),
},
unpin: {
- icon: 'fa-thumb-tack',
- text: '[[topic:unpinned-by]]',
+ icon: 'fa-thumb-tack fa-rotate-90',
+ translation: async event => translateSimple(event, 'topic:user-unpinned-topic'),
},
lock: {
icon: 'fa-lock',
- text: '[[topic:locked-by]]',
+ translation: async event => translateSimple(event, 'topic:user-locked-topic'),
},
unlock: {
icon: 'fa-unlock',
- text: '[[topic:unlocked-by]]',
+ translation: async event => translateSimple(event, 'topic:user-unlocked-topic'),
},
delete: {
icon: 'fa-trash',
- text: '[[topic:deleted-by]]',
+ translation: async event => translateSimple(event, 'topic:user-deleted-topic'),
},
restore: {
icon: 'fa-trash-o',
- text: '[[topic:restored-by]]',
+ translation: async event => translateSimple(event, 'topic:user-restored-topic'),
},
move: {
icon: 'fa-arrow-circle-right',
- // text: '[[topic:moved-from-by]]',
+ translation: async event => translateEventArgs(event, 'topic:user-moved-topic-from', renderUser(event), `${event.fromCategory.name}`, renderTimeago(event)),
},
'post-queue': {
icon: 'fa-history',
- text: '[[topic:queued-by]]',
href: '/post-queue',
+ translation: async event => translateEventArgs(event, 'topic:user-queued-post', renderUser(event), `/post-queue`, renderTimeago(event)),
},
backlink: {
icon: 'fa-link',
- text: '[[topic:backlink]]',
+ translation: async event => translateEventArgs(event, 'topic:user-referenced-topic', renderUser(event), `${relative_path}${event.href}`, renderTimeago(event)),
},
fork: {
icon: 'fa-code-fork',
- text: '[[topic:forked-by]]',
+ translation: async event => translateEventArgs(event, 'topic:user-forked-topic', renderUser(event), `${relative_path}${event.href}`, renderTimeago(event)),
},
};
@@ -72,6 +77,40 @@ Events.init = async () => {
Events._types = types;
};
+async function translateEventArgs(event, prefix, ...args) {
+ const key = getTranslationKey(event, prefix);
+ const compiled = translator.compile.apply(null, [key, ...args]);
+ return utils.decodeHTMLEntities(await translator.translate(compiled));
+}
+
+async function translateSimple(event, prefix) {
+ return await translateEventArgs(event, prefix, renderUser(event), renderTimeago(event));
+}
+
+Events.translateSimple = translateSimple; // so plugins can perform translate
+Events.translateEventArgs = translateEventArgs; // so plugins can perform translate
+
+// generate `user-locked-topic-ago` or `user-locked-topic-on` based on timeago cutoff setting
+function getTranslationKey(event, prefix) {
+ const cutoffMs = 1000 * 60 * 60 * 24 * Math.max(0, parseInt(meta.config.timeagoCutoff, 10));
+ let translationSuffix = 'ago';
+ if (cutoffMs > 0 && Date.now() - event.timestamp > cutoffMs) {
+ translationSuffix = 'on';
+ }
+ return `${prefix}-${translationSuffix}`;
+}
+
+function renderUser(event) {
+ if (!event.user || event.user.system) {
+ return '[[global:system-user]]';
+ }
+ return `${helpers.buildAvatar(event.user, '16px', true)}
${event.user.username} `;
+}
+
+function renderTimeago(event) {
+ return `
`;
+}
+
Events.get = async (tid, uid, reverse = false) => {
const topics = require('.');
@@ -154,12 +193,17 @@ async function modifyEvent({ tid, uid, eventIds, timestamps, events }) {
}
if (event.hasOwnProperty('fromCid')) {
event.fromCategory = fromCategories[event.fromCid];
- event.text = translator.compile('topic:moved-from-by', event.fromCategory.name);
}
Object.assign(event, Events._types[event.type]);
});
+ await Promise.all(events.map(async (event) => {
+ if (Events._types[event.type].translation) {
+ event.text = await Events._types[event.type].translation(event);
+ }
+ }));
+
// Sort events
events.sort((a, b) => a.timestamp - b.timestamp);
diff --git a/src/topics/index.js b/src/topics/index.js
index b6dd08e817..ef08b7ccde 100644
--- a/src/topics/index.js
+++ b/src/topics/index.js
@@ -189,6 +189,8 @@ Topics.getTopicWithPosts = async function (topicData, set, uid, start, stop, rev
p.events = events.filter(
event => event.timestamp >= p.eventStart && event.timestamp < p.eventEnd
);
+ p.eventStart = undefined;
+ p.eventEnd = undefined;
});
topicData.category = category;
diff --git a/src/topics/sorted.js b/src/topics/sorted.js
index af2cd344cb..7899a2f8d0 100644
--- a/src/topics/sorted.js
+++ b/src/topics/sorted.js
@@ -174,7 +174,7 @@ module.exports = function (Topics) {
}
tids = await privileges.topics.filterTids('topics:read', tids, uid);
- let topicData = await Topics.getTopicsFields(tids, ['uid', 'tid', 'cid']);
+ let topicData = await Topics.getTopicsFields(tids, ['uid', 'tid', 'cid', 'tags']);
const topicCids = _.uniq(topicData.map(topic => topic.cid)).filter(Boolean);
async function getIgnoredCids() {
@@ -192,11 +192,13 @@ module.exports = function (Topics) {
topicData = filtered;
const cids = params.cids && params.cids.map(String);
+ const { tags } = params;
tids = topicData.filter(t => (
t &&
t.cid &&
!isCidIgnored[t.cid] &&
- (!cids || cids.includes(String(t.cid)))
+ (!cids || cids.includes(String(t.cid))) &&
+ (!tags.length || tags.every(tag => t.tags.find(topicTag => topicTag.value === tag)))
)).map(t => t.tid);
const result = await plugins.hooks.fire('filter:topics.filterSortedTids', { tids: tids, params: params });
diff --git a/src/topics/tags.js b/src/topics/tags.js
index 655c18345f..14ddb60a67 100644
--- a/src/topics/tags.js
+++ b/src/topics/tags.js
@@ -283,10 +283,10 @@ module.exports = function (Topics) {
const payload = await plugins.hooks.fire('filter:tags.getAll', {
tags: tags,
});
- return await Topics.getTagData(payload.tags);
+ return Topics.getTagData(payload.tags);
}
- Topics.getTagData = async function (tags) {
+ Topics.getTagData = function (tags) {
if (!tags.length) {
return [];
}
@@ -318,7 +318,7 @@ module.exports = function (Topics) {
const uniqueTopicTags = _.uniq(_.flatten(topicTags));
const tags = uniqueTopicTags.map(tag => ({ value: tag }));
- const tagData = await Topics.getTagData(tags);
+ const tagData = Topics.getTagData(tags);
const tagDataMap = _.zipObject(uniqueTopicTags, tagData);
topicTags.forEach((tags, index) => {
@@ -494,7 +494,7 @@ module.exports = function (Topics) {
}
const tags = await Topics.searchTags(data);
- const tagData = await Topics.getTagData(tags.map(tag => ({ value: tag.value })));
+ const tagData = Topics.getTagData(tags.map(tag => ({ value: tag.value })));
tagData.forEach((tag, index) => {
tag.score = tags[index].score;
diff --git a/src/topics/thumbs.js b/src/topics/thumbs.js
index f6f6a88400..60db184339 100644
--- a/src/topics/thumbs.js
+++ b/src/topics/thumbs.js
@@ -52,6 +52,7 @@ Thumbs.get = async function (tids) {
const name = path.basename(thumb);
return hasTimestampPrefix.test(name) ? name.slice(14) : name;
})(),
+ path: thumb,
url: thumb.startsWith('http') ? thumb : path.posix.join(upload_url, thumb),
})));
diff --git a/src/topics/unread.js b/src/topics/unread.js
index d4252c321d..8bff23380a 100644
--- a/src/topics/unread.js
+++ b/src/topics/unread.js
@@ -66,6 +66,10 @@ module.exports = function (Topics) {
params.cid = [params.cid];
}
+ if (params.tag && !Array.isArray(params.tag)) {
+ params.tag = [params.tag];
+ }
+
const data = await getTids(params);
if (uid <= 0) {
return data;
@@ -135,7 +139,7 @@ module.exports = function (Topics) {
});
tids = await privileges.topics.filterTids('topics:read', tids, params.uid);
- const topicData = (await Topics.getTopicsFields(tids, ['tid', 'cid', 'uid', 'postcount', 'deleted', 'scheduled']))
+ const topicData = (await Topics.getTopicsFields(tids, ['tid', 'cid', 'uid', 'postcount', 'deleted', 'scheduled', 'tags']))
.filter(t => t.scheduled || !t.deleted);
const topicCids = _.uniq(topicData.map(topic => topic.cid)).filter(Boolean);
@@ -143,9 +147,13 @@ module.exports = function (Topics) {
const userCidState = _.zipObject(topicCids, categoryWatchState);
const filterCids = params.cid && params.cid.map(cid => parseInt(cid, 10));
+ const filterTags = params.tag && params.tag.map(tag => String(tag));
topicData.forEach((topic) => {
- if (topic && topic.cid && (!filterCids || filterCids.includes(topic.cid)) && !blockedUids.includes(topic.uid)) {
+ if (topic && topic.cid &&
+ (!filterCids || filterCids.includes(topic.cid)) &&
+ (!filterTags || filterTags.every(tag => topic.tags.find(topicTag => topicTag.value === tag))) &&
+ !blockedUids.includes(topic.uid)) {
if (isTopicsFollowed[topic.tid] || userCidState[topic.cid] === categories.watchStates.watching) {
tidsByFilter[''].push(topic.tid);
}
@@ -260,7 +268,12 @@ module.exports = function (Topics) {
};
Topics.markAsUnreadForAll = async function (tid) {
+ const now = Date.now();
+ const cid = await Topics.getTopicField(tid, 'cid');
await Topics.markCategoryUnreadForAll(tid);
+ await Topics.updateRecent(tid, now);
+ await db.sortedSetAdd(`cid:${cid}:tids:lastposttime`, now, tid);
+ await Topics.setTopicField(tid, 'lastposttime', now);
};
Topics.markAsRead = async function (tids, uid) {
@@ -367,8 +380,13 @@ module.exports = function (Topics) {
if (!exists) {
throw new Error('[[error:no-topic]]');
}
- await db.sortedSetRemove(`uid:${uid}:tids_read`, tid);
- await db.sortedSetAdd(`uid:${uid}:tids_unread`, Date.now(), tid);
+ await Promise.all([
+ db.sortedSetRemoveBulk([
+ [`uid:${uid}:tids_read`, tid],
+ [`tid:${tid}:bookmarks`, uid],
+ ]),
+ db.sortedSetAdd(`uid:${uid}:tids_unread`, Date.now(), tid),
+ ]);
};
Topics.filterNewTids = async function (tids, uid) {
diff --git a/src/translator.js b/src/translator.js
index 872349a4aa..8584686056 100644
--- a/src/translator.js
+++ b/src/translator.js
@@ -3,7 +3,9 @@
const winston = require('winston');
function warn(msg) {
- winston.warn(msg);
+ if (global.env === 'development') {
+ winston.warn(msg);
+ }
}
module.exports = require('../public/src/modules/translator.common')(require('./utils'), (lang, namespace) => {
diff --git a/src/user/approval.js b/src/user/approval.js
index 24e84fba64..9f2aeca562 100644
--- a/src/user/approval.js
+++ b/src/user/approval.js
@@ -132,7 +132,7 @@ module.exports = function (User) {
// need to keep this for getIPMatchedUsers
user.ip = user.ip.replace('::ffff:', '');
await getIPMatchedUsers(user);
- user.customActions = [].concat(user.customActions);
+ user.customActions = user.customActions || [];
/*
// then spam prevention plugins, using the "filter:user.getRegistrationQueue" hook can be like:
user.customActions.push({
diff --git a/src/user/categories.js b/src/user/categories.js
index a1d141a628..80839a7ea7 100644
--- a/src/user/categories.js
+++ b/src/user/categories.js
@@ -49,7 +49,9 @@ module.exports = function (User) {
if (!(parseInt(uid, 10) > 0)) {
return [];
}
- const cids = await User.getCategoriesByStates(uid, [categories.watchStates.watching]);
+ let cids = await User.getCategoriesByStates(uid, [categories.watchStates.watching]);
+ const categoryData = await categories.getCategoriesFields(cids, ['disabled']);
+ cids = cids.filter((cid, index) => categoryData[index] && !categoryData[index].disabled);
const result = await plugins.hooks.fire('filter:user.getWatchedCategories', {
uid: uid,
cids: cids,
diff --git a/src/user/create.js b/src/user/create.js
index f0ef5f37fc..6d598d03ff 100644
--- a/src/user/create.js
+++ b/src/user/create.js
@@ -46,7 +46,6 @@ module.exports = function (User) {
let userData = {
username: data.username,
userslug: data.userslug,
- email: data.email || '',
joindate: timestamp,
lastonline: timestamp,
status: 'online',
@@ -104,13 +103,14 @@ module.exports = function (User) {
User.updateDigestSetting(userData.uid, meta.config.dailyDigestFreq),
]);
- if (userData.email && isFirstUser) {
+ if (data.email && isFirstUser) {
+ await User.setUserField(uid, 'email', data.email);
await User.email.confirmByUid(userData.uid);
}
- if (userData.email && userData.uid > 1) {
+ if (data.email && userData.uid > 1) {
await User.email.sendValidationEmail(userData.uid, {
- email: userData.email,
+ email: data.email,
template: 'welcome',
subject: `[[email:welcome-to, ${meta.config.title || meta.config.browserTitle || 'NodeBB'}]]`,
}).catch(err => winston.error(`[user.create] Validation email failed to send\n[emailer.send] ${err.stack}`));
diff --git a/src/user/interstitials.js b/src/user/interstitials.js
index aa70e8098f..9a0e96f6db 100644
--- a/src/user/interstitials.js
+++ b/src/user/interstitials.js
@@ -14,6 +14,12 @@ const sleep = util.promisify(setTimeout);
const Interstitials = module.exports;
+Interstitials.get = async (req, userData) => plugins.hooks.fire('filter:register.interstitial', {
+ req,
+ userData,
+ interstitials: [],
+});
+
Interstitials.email = async (data) => {
if (!data.userData) {
throw new Error('[[error:invalid-data]]');
diff --git a/src/user/invite.js b/src/user/invite.js
index 63658551dc..a4e175b85e 100644
--- a/src/user/invite.js
+++ b/src/user/invite.js
@@ -78,6 +78,7 @@ module.exports = function (User) {
const email = await db.getObjectField(`invitation:token:${token}`, 'email');
// "Confirm" user's email if registration completed with invited address
if (email && email === enteredEmail) {
+ await User.setUserField(uid, 'email', email);
await User.email.confirmByUid(uid);
}
};
diff --git a/src/user/notifications.js b/src/user/notifications.js
index 57617cc5d5..d0efa369a1 100644
--- a/src/user/notifications.js
+++ b/src/user/notifications.js
@@ -42,6 +42,28 @@ async function filterNotifications(nids, filter) {
}
UserNotifications.getAll = async function (uid, filter) {
+ const nids = await getAllNids(uid);
+ return await filterNotifications(nids, filter);
+};
+
+UserNotifications.getAllWithCounts = async function (uid, filter) {
+ const nids = await getAllNids(uid);
+ const keys = nids.map(nid => `notifications:${nid}`);
+ let notifications = await db.getObjectsFields(keys, ['nid', 'type']);
+ const counts = {};
+ notifications.forEach((n) => {
+ if (n && n.type) {
+ counts[n.type] = counts[n.type] || 0;
+ counts[n.type] += 1;
+ }
+ });
+ if (filter) {
+ notifications = notifications.filter(n => n && n.nid && n.type === filter);
+ }
+ return { counts, nids: notifications.map(n => n.nid) };
+};
+
+async function getAllNids(uid) {
let nids = await db.getSortedSetRevRange([
`uid:${uid}:notifications:unread`,
`uid:${uid}:notifications:read`,
@@ -56,10 +78,9 @@ UserNotifications.getAll = async function (uid, filter) {
}
return nid && exists[index];
});
-
await deleteUserNids(deleteNids, uid);
- return await filterNotifications(nids, filter);
-};
+ return nids;
+}
async function deleteUserNids(nids, uid) {
await db.sortedSetRemove([
diff --git a/src/utils.js b/src/utils.js
index 719abb50d2..2d0d2e7b9c 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -29,4 +29,13 @@ utils.generateUUID = function () {
return rnd.join('-');
};
+utils.getSass = function () {
+ try {
+ const sass = require('sass-embedded');
+ return sass;
+ } catch (_err) {
+ return require('sass');
+ }
+};
+
module.exports = utils;
diff --git a/src/views/400.tpl b/src/views/400.tpl
index c36f1b2f48..6658e27f99 100644
--- a/src/views/400.tpl
+++ b/src/views/400.tpl
@@ -1,12 +1,9 @@
[[global:400.title]]
-
-
{error}
-
-
[[global:400.message, {config.relative_path}]]
-
-
+
{{{ if error }}}{error}{{{ else }}}[[global:400.message, {config.relative_path}]]{{{ end }}}
+
+ {{{ if returnLink }}}
[[error:goback]]
-
+ {{{ end }}}
diff --git a/src/views/403.tpl b/src/views/403.tpl
index bf93b496cd..a68d8672f8 100644
--- a/src/views/403.tpl
+++ b/src/views/403.tpl
@@ -1,16 +1,13 @@
[[global:403.title]]
-
-
{error}
-
-
[[global:403.message]]
-
-
+
{{{ if error }}}{error}{{{ else }}}[[global:403.message]]{{{ end }}}
+
+ {{{ if returnLink }}}
[[error:goback]]
-
+ {{{ end }}}
-
+ {{{ if !loggedIn }}}
[[global:403.login, {config.relative_path}]]
-
+ {{{ end }}}
\ No newline at end of file
diff --git a/src/views/404.tpl b/src/views/404.tpl
index 2a0a645bc8..5d1fb9d43c 100644
--- a/src/views/404.tpl
+++ b/src/views/404.tpl
@@ -1,8 +1,4 @@
{path} [[global:404.title]]
-
-
{error}
-
-
[[global:404.message, {config.relative_path}]]
-
+
{{{ if error }}}{error}{{{ else }}}[[global:404.message, {config.relative_path}]]{{{ end }}}
\ No newline at end of file
diff --git a/src/views/500.tpl b/src/views/500.tpl
index 7795fbbf8a..e0ddffae26 100644
--- a/src/views/500.tpl
+++ b/src/views/500.tpl
@@ -2,9 +2,9 @@
[[global:500.title]]
[[global:500.message]]
{path}
-
{error}
+ {{{ if error }}}
{error}
{{{ end }}}
-
+ {{{ if returnLink }}}
[[error:goback]]
-
+ {{{ end }}}
diff --git a/src/views/503.tpl b/src/views/503.tpl
index 5bd60e430d..2654ab8429 100644
--- a/src/views/503.tpl
+++ b/src/views/503.tpl
@@ -1,6 +1,6 @@
[[pages:maintenance.text, {site_title}]]
-
+{{{ if message }}}
[[pages:maintenance.messageIntro]]
@@ -9,4 +9,4 @@
-
\ No newline at end of file
+{{{ end }}}
\ No newline at end of file
diff --git a/src/views/admin/advanced/cache.tpl b/src/views/admin/advanced/cache.tpl
index c5a2dc2143..a1c27d08ae 100644
--- a/src/views/admin/advanced/cache.tpl
+++ b/src/views/admin/advanced/cache.tpl
@@ -4,41 +4,47 @@
{{{each caches}}}
-
-
[[admin/advanced/cache:{@key}-cache]]
-
-
-
-
-
+
+
+
+
+
-
{{{if ../length}}}{../length}{{{else}}}{../itemCount}{{{end}}} / {{{if ../max}}}{../max}{{{else}}}{../maxSize}{{{end}}}
-
-
+
{{{if ../length}}}{../length}{{{else}}}{../itemCount}{{{end}}} / {{{if ../max}}}{../max}{{{else}}}{../maxSize}{{{end}}}
+
[[admin/advanced/cache:percent-full, {../percentFull}]]
+
+ Hits: {../hits}
+
+
+ Misses: {../misses}
+
+
+ Hit Ratio: {../hitRatio}
+
-
Hits: {../hits}
-
Misses: {../misses}
-
Hit Ratio: {../hitRatio}
- {{{if ../ttl}}}
TTL: {../ttl} {{{end}}}
+ {{{if ../ttl}}}
+
+ TTL: {../ttl}
+
+ {{{end}}}
{{{if (@key == "post")}}}
-
{{{end}}}
-
diff --git a/src/views/admin/advanced/database.tpl b/src/views/admin/advanced/database.tpl
index f63b77cb86..311ff9deef 100644
--- a/src/views/admin/advanced/database.tpl
+++ b/src/views/admin/advanced/database.tpl
@@ -7,32 +7,32 @@
{mongo.serverStatusError}
{{{ end }}}
-
-
[[admin/advanced/database:mongo]]
-
+
+
+
- [[admin/advanced/database:mongo.version]] {mongo.version}
+ [[admin/advanced/database:mongo.version]] {mongo.version}
- [[admin/advanced/database:uptime-seconds]] {mongo.uptime}
- [[admin/advanced/database:mongo.storage-engine]] {mongo.storageEngine}
- [[admin/advanced/database:mongo.collections]] {mongo.collections}
- [[admin/advanced/database:mongo.objects]] {mongo.objects}
- [[admin/advanced/database:mongo.avg-object-size]] [[admin/advanced/database:x-b, {mongo.avgObjSize}]]
+ [[admin/advanced/database:uptime-seconds]] {mongo.uptime}
+ [[admin/advanced/database:mongo.storage-engine]] {mongo.storageEngine}
+ [[admin/advanced/database:mongo.collections]] {mongo.collections}
+ [[admin/advanced/database:mongo.objects]] {mongo.objects}
+ [[admin/advanced/database:mongo.avg-object-size]] [[admin/advanced/database:x-b, {mongo.avgObjSize}]]
- [[admin/advanced/database:mongo.data-size]] [[admin/advanced/database:x-gb, {mongo.dataSize}]]
- [[admin/advanced/database:mongo.storage-size]] [[admin/advanced/database:x-gb, {mongo.storageSize}]]
- [[admin/advanced/database:mongo.index-size]] [[admin/advanced/database:x-gb, {mongo.indexSize}]]
-
- [[admin/advanced/database:mongo.file-size]] [[admin/advanced/database:x-gb, {mongo.fileSize}]]
-
+ [[admin/advanced/database:mongo.data-size]] [[admin/advanced/database:x-gb, {mongo.dataSize}]]
+ [[admin/advanced/database:mongo.storage-size]] [[admin/advanced/database:x-gb, {mongo.storageSize}]]
+ [[admin/advanced/database:mongo.index-size]] [[admin/advanced/database:x-gb, {mongo.indexSize}]]
+ {{{ if mongo.fileSize }}}
+ [[admin/advanced/database:mongo.file-size]] [[admin/advanced/database:x-gb, {mongo.fileSize}]]
+ {{{ end }}}
- [[admin/advanced/database:mongo.resident-memory]] [[admin/advanced/database:x-gb, {mongo.mem.resident}]]
- [[admin/advanced/database:mongo.virtual-memory]] [[admin/advanced/database:x-gb, {mongo.mem.virtual}]]
- [[admin/advanced/database:mongo.mapped-memory]] [[admin/advanced/database:x-gb, {mongo.mem.mapped}]]
+ [[admin/advanced/database:mongo.resident-memory]] [[admin/advanced/database:x-gb, {mongo.mem.resident}]]
+ [[admin/advanced/database:mongo.virtual-memory]] [[admin/advanced/database:x-gb, {mongo.mem.virtual}]]
+ [[admin/advanced/database:mongo.mapped-memory]] [[admin/advanced/database:x-gb, {mongo.mem.mapped}]]
- [[admin/advanced/database:mongo.bytes-in]] [[admin/advanced/database:x-gb, {mongo.network.bytesIn}]]
- [[admin/advanced/database:mongo.bytes-out]] [[admin/advanced/database:x-gb, {mongo.network.bytesOut}]]
- [[admin/advanced/database:mongo.num-requests]] {mongo.network.numRequests}
+ [[admin/advanced/database:mongo.bytes-in]] [[admin/advanced/database:x-gb, {mongo.network.bytesIn}]]
+ [[admin/advanced/database:mongo.bytes-out]] [[admin/advanced/database:x-gb, {mongo.network.bytesOut}]]
+ [[admin/advanced/database:mongo.num-requests]] {mongo.network.numRequests}
@@ -41,38 +41,38 @@
{{{ if redis }}}
-
-
[[admin/advanced/database:redis]]
-
+
+
+
- [[admin/advanced/database:redis.version]] {redis.redis_version}
+ [[admin/advanced/database:redis.version]] {redis.redis_version}
- [[admin/advanced/database:uptime-seconds]] {redis.uptime_in_seconds}
- [[admin/advanced/database:uptime-days]] {redis.uptime_in_days}
+ [[admin/advanced/database:uptime-seconds]] {redis.uptime_in_seconds}
+ [[admin/advanced/database:uptime-days]] {redis.uptime_in_days}
- [[admin/advanced/database:redis.keys]] {redis.keys}
- [[admin/advanced/database:redis.expires]] {redis.expires}
- [[admin/advanced/database:redis.avg-ttl]] {redis.avg_ttl}
- [[admin/advanced/database:redis.connected-clients]] {redis.connected_clients}
- [[admin/advanced/database:redis.connected-slaves]] {redis.connected_slaves}
- [[admin/advanced/database:redis.blocked-clients]] {redis.blocked_clients}
+ [[admin/advanced/database:redis.keys]] {redis.keys}
+ [[admin/advanced/database:redis.expires]] {redis.expires}
+ [[admin/advanced/database:redis.avg-ttl]] {redis.avg_ttl}
+ [[admin/advanced/database:redis.connected-clients]] {redis.connected_clients}
+ [[admin/advanced/database:redis.connected-slaves]] {redis.connected_slaves}
+ [[admin/advanced/database:redis.blocked-clients]] {redis.blocked_clients}
- [[admin/advanced/database:redis.used-memory]] [[admin/advanced/database:x-gb, {redis.used_memory_human}]]
- [[admin/advanced/database:redis.memory-frag-ratio]] {redis.mem_fragmentation_ratio}
+ [[admin/advanced/database:redis.used-memory]] [[admin/advanced/database:x-gb, {redis.used_memory_human}]]
+ [[admin/advanced/database:redis.memory-frag-ratio]] {redis.mem_fragmentation_ratio}
- [[admin/advanced/database:redis.total-connections-recieved]] {redis.total_connections_received}
- [[admin/advanced/database:redis.total-commands-processed]] {redis.total_commands_processed}
- [[admin/advanced/database:redis.iops]] {redis.instantaneous_ops_per_sec}
+ [[admin/advanced/database:redis.total-connections-recieved]] {redis.total_connections_received}
+ [[admin/advanced/database:redis.total-commands-processed]] {redis.total_commands_processed}
+ [[admin/advanced/database:redis.iops]] {redis.instantaneous_ops_per_sec}
- [[admin/advanced/database:redis.iinput]] [[admin/advanced/database:x-mb, {redis.instantaneous_input}]]
- [[admin/advanced/database:redis.ioutput]] [[admin/advanced/database:x-mb, {redis.instantaneous_output}]]
- [[admin/advanced/database:redis.total-input]] [[admin/advanced/database:x-gb, {redis.total_net_input}]]
- [[admin/advanced/database:redis.total-output]] [[admin/advanced/database:x-gb, {redis.total_net_output}]]
+ [[admin/advanced/database:redis.iinput]] [[admin/advanced/database:x-mb, {redis.instantaneous_input}]]
+ [[admin/advanced/database:redis.ioutput]] [[admin/advanced/database:x-mb, {redis.instantaneous_output}]]
+ [[admin/advanced/database:redis.total-input]] [[admin/advanced/database:x-gb, {redis.total_net_input}]]
+ [[admin/advanced/database:redis.total-output]] [[admin/advanced/database:x-gb, {redis.total_net_output}]]
- [[admin/advanced/database:redis.keyspace-hits]] {redis.keyspace_hits}
- [[admin/advanced/database:redis.keyspace-misses]] {redis.keyspace_misses}
+ [[admin/advanced/database:redis.keyspace-hits]] {redis.keyspace_hits}
+ [[admin/advanced/database:redis.keyspace-misses]] {redis.keyspace_misses}
@@ -81,13 +81,13 @@
{{{ if postgres }}}
-
-
[[admin/advanced/database:postgres]]
-
+
+
+
- [[admin/advanced/database:postgres.version]] {postgres.version}
+ [[admin/advanced/database:postgres.version]] {postgres.version}
- [[admin/advanced/database:uptime-seconds]] {postgres.uptime}
+ [[admin/advanced/database:uptime-seconds]] {postgres.uptime}
@@ -98,12 +98,12 @@
{{{ if mongo }}}
-
-
-
[[admin/advanced/database:mongo.raw-info]]
-
+
+
-
+
@@ -114,12 +114,12 @@
{{{ if redis }}}
-
-
-
[[admin/advanced/database:redis.raw-info]]
-
+
+
-
+
@@ -130,12 +130,12 @@
{{{ if postgres }}}
-
-
-
[[admin/advanced/database:postgres.raw-info]]
-
+
+
-
+
diff --git a/src/views/admin/advanced/errors.tpl b/src/views/admin/advanced/errors.tpl
index f5f0838c31..bf70584e5a 100644
--- a/src/views/admin/advanced/errors.tpl
+++ b/src/views/admin/advanced/errors.tpl
@@ -2,23 +2,23 @@