diff --git a/.gitignore b/.gitignore index 4ce7bb4e4..06f40b993 100644 --- a/.gitignore +++ b/.gitignore @@ -54,5 +54,4 @@ docker-sync.yml /config/credentials/development.key /config/credentials/test.key /config/credentials/staging.key -/config/credentials/appliance.key - +/config/credentials/appliance.key \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 6e4f2b162..7d7448cc4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -164,7 +164,7 @@ GEM flamegraph (0.9.5) globalid (1.1.0) activesupport (>= 5.0) - graphql (2.0.24) + graphql (2.0.25) graphql-client (0.18.0) activesupport (>= 3.0) graphql @@ -239,7 +239,7 @@ GEM marcel (1.0.2) matrix (0.4.2) method_source (1.0.0) - mime-types (3.4.1) + mime-types (3.5.0) mime-types-data (~> 3.2015) mime-types-data (3.2023.0218.1) mini_mime (1.1.2) @@ -269,6 +269,9 @@ GEM netrc (0.11.0) newrelic_rpm (9.3.1) nio4r (2.5.9) + nokogiri (1.15.3) + mini_portile2 (~> 2.8.2) + racc (~> 1.4) nokogiri (1.15.3-x86_64-darwin) racc (~> 1.4) nokogiri (1.15.3-x86_64-linux) @@ -280,30 +283,32 @@ GEM multi_xml (~> 0.5) rack (>= 1.2, < 4) oj (3.15.1) - omniauth (1.9.2) + omniauth (2.1.1) hashie (>= 3.4.6) - rack (>= 1.6.2, < 3) - omniauth-github (1.4.0) - omniauth (~> 1.5) - omniauth-oauth2 (>= 1.4.0, < 2.0) - omniauth-google-oauth2 (0.8.2) + rack (>= 2.2.3) + rack-protection + omniauth-github (2.0.0) + omniauth (~> 2.0) + omniauth-oauth2 (~> 1.7.1) + omniauth-google-oauth2 (1.0.1) jwt (>= 2.0) oauth2 (~> 1.1) - omniauth (~> 1.1) - omniauth-oauth2 (>= 1.6) - omniauth-keycloak (1.2.1) - json-jwt (~> 1.12) - omniauth (~> 1.9.0) - omniauth-oauth2 (~> 1.6.0) - omniauth-oauth2 (1.6.0) - oauth2 (~> 1.1) - omniauth (~> 1.9) + omniauth (~> 2.0) + omniauth-oauth2 (~> 1.7.1) + omniauth-keycloak (1.5.1) + faraday + json-jwt (> 1.13.0) + omniauth (>= 2.0) + omniauth-oauth2 (~> 1.7.1) + omniauth-oauth2 (1.7.3) + oauth2 (>= 1.4, < 3) + omniauth (>= 1.9, < 3) omniauth-orcid (2.1.1) omniauth-oauth2 (~> 1.3) ruby_dig (~> 0.0.2) - omniauth-rails_csrf_protection (0.1.2) + omniauth-rails_csrf_protection (1.0.1) actionpack (>= 4.2) - omniauth (>= 1.3.1) + omniauth (~> 2.0) open_uri_redirections (0.2.1) parallel (1.23.0) parser (3.2.2.3) @@ -323,6 +328,8 @@ GEM rack (>= 0.4) rack-mini-profiler (3.1.1) rack (>= 1.2.0) + rack-protection (3.1.0) + rack (~> 2.2, >= 2.2.4) rack-test (2.1.0) rack (>= 1.3) rails (7.0.3) @@ -441,7 +448,7 @@ GEM net-scp (>= 1.1.2) net-ssh (>= 2.8.0) stackprof (0.2.25) - stimulus-rails (1.2.1) + stimulus-rails (1.2.2) railties (>= 6.0.0) temple (0.10.2) terser (1.1.17) @@ -572,4 +579,4 @@ DEPENDENCIES will_paginate (~> 3.0) BUNDLED WITH - 2.4.12 + 2.1.4 diff --git a/app/assets/images/icons/circle-down.svg b/app/assets/images/icons/circle-down.svg new file mode 100644 index 000000000..a230b0565 --- /dev/null +++ b/app/assets/images/icons/circle-down.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/app/assets/images/icons/circle-left.svg b/app/assets/images/icons/circle-left.svg new file mode 100644 index 000000000..45a2739be --- /dev/null +++ b/app/assets/images/icons/circle-left.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/app/assets/images/icons/circle-right.svg b/app/assets/images/icons/circle-right.svg new file mode 100644 index 000000000..f77ce5fb8 --- /dev/null +++ b/app/assets/images/icons/circle-right.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/app/assets/images/icons/circle-up.svg b/app/assets/images/icons/circle-up.svg new file mode 100644 index 000000000..30d084681 --- /dev/null +++ b/app/assets/images/icons/circle-up.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/app/assets/images/icons/zoom-center.svg b/app/assets/images/icons/zoom-center.svg new file mode 100644 index 000000000..8cdd83939 --- /dev/null +++ b/app/assets/images/icons/zoom-center.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/app/assets/images/icons/zoom-in.svg b/app/assets/images/icons/zoom-in.svg new file mode 100644 index 000000000..9d91d0541 --- /dev/null +++ b/app/assets/images/icons/zoom-in.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/app/assets/images/icons/zoom-out.svg b/app/assets/images/icons/zoom-out.svg new file mode 100644 index 000000000..58f33bebb --- /dev/null +++ b/app/assets/images/icons/zoom-out.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/app/assets/images/summary/documentation.svg b/app/assets/images/summary/documentation.svg new file mode 100644 index 000000000..826e62cc5 --- /dev/null +++ b/app/assets/images/summary/documentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/images/summary/download.svg b/app/assets/images/summary/download.svg new file mode 100644 index 000000000..3af86ed8a --- /dev/null +++ b/app/assets/images/summary/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/images/summary/homepage.svg b/app/assets/images/summary/homepage.svg new file mode 100644 index 000000000..4df669b75 --- /dev/null +++ b/app/assets/images/summary/homepage.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/images/summary/sparql.svg b/app/assets/images/summary/sparql.svg new file mode 100644 index 000000000..c2cda9582 --- /dev/null +++ b/app/assets/images/summary/sparql.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/app/assets/stylesheets/application.css.scss.erb b/app/assets/stylesheets/application.css.scss.erb index e509a4f5d..7152e9a2a 100755 --- a/app/assets/stylesheets/application.css.scss.erb +++ b/app/assets/stylesheets/application.css.scss.erb @@ -21,6 +21,7 @@ *= require select2 *= require trumbowyg *= require theme-variables + *= require summary */ /* BioPortal */ diff --git a/app/assets/stylesheets/components/concept_details.scss b/app/assets/stylesheets/components/concept_details.scss index 7ae6fef43..28b1b92cf 100644 --- a/app/assets/stylesheets/components/concept_details.scss +++ b/app/assets/stylesheets/components/concept_details.scss @@ -1,6 +1,4 @@ - .concept_details_component .raw-table .dropdown-title-bar p { - padding: 10px 0px; color: rgb(136, 136, 136); font-weight: 400; } diff --git a/app/assets/stylesheets/ontologies.scss b/app/assets/stylesheets/ontologies.scss index 41edd683d..19cfad023 100644 --- a/app/assets/stylesheets/ontologies.scss +++ b/app/assets/stylesheets/ontologies.scss @@ -158,10 +158,7 @@ $ont-show-bg-color: #e9ecef; } } -#ontology_versions td.show_more_subs { - text-align: right; - background-color: white; -} + /************************************ /* Classes pane diff --git a/app/assets/stylesheets/summary.scss.erb b/app/assets/stylesheets/summary.scss.erb new file mode 100644 index 000000000..e3f6adbdd --- /dev/null +++ b/app/assets/stylesheets/summary.scss.erb @@ -0,0 +1,213 @@ +.summary-page-center { + display: flex; + justify-content: center; + flex-wrap: wrap; +} + +.summary-page-first-row { + width: 670px; + margin-right: 20px; +} + +.summary-page-second-row { + width: 450px; +} + +@media (max-width: 1288px) { + .summary-page-first-row { + width: 100%; + margin: 0; + padding: 0 20px; + } + .summary-page-second-row { + width: 100%; + margin: 0; + padding: 0 20px; + } +} + +.show > .btn-outline-primary.dropdown-toggle { + background-color: var(--primary-color) !important; + color: white !important; +} + + +.description_text, +.description_text a { + color: #888888 !important; + font-size: 15px; + overflow: hidden; + margin-bottom: 0; + flex: 1; + min-width: 500px; +} + + +.creation_info { + display: flex; + flex-wrap: wrap; + align-items: center; +} + + + +.date_creation_text { + color: #888888; + font-size: 14px; + font-weight: 550; + margin-top: 15px; + margin-right: 5px; + margin-left: 5px; +} + +.creator_text { + color: #888888; + font-size: 14px; + margin-left: 5px; + font-weight: 550; + margin-top: 15px; + width: 300px; +} + +.creation_text { + color: #888888; + font-size: 14px; + margin-left: 1px; + margin-top: 15px; + margin-right: 2px; +} + + +.icons_container { + margin-top: 10px; + justify-content: space-evenly; + display: flex; + padding: 0 20px; + svg path { + fill: var(--primary-color); + } +} + + + +.disabled-icon svg path { + fill: rgba(0, 0, 0, 0.1); +} + +.normal_text { + font-size: 15px; + color: black; + word-wrap: break-word; +} + + + +.metrics { + display: flex; + justify-content: space-between; +} + +.metrics-container { + border-radius: 8px; + height: 90px; + box-shadow: 2px 0px 60px rgba(0, 0, 0, 0.1); + padding: 71px 40px; + margin-top: 10px; +} + +.metrics-container > div { + display: flex; + align-items: center; + margin-bottom: 20px; +} + +.metrics-container > div > p { + font-size: 20px; + font-weight: 600; + margin-left: 18px; +} + +.metrics-item { + display: flex; + align-items: center; +} + +.metrics-item hr { + height: 73px; + width: 0px; + border: 2px solid var(--primary-color); + border-radius: 5px; + margin-right: 15px; +} + +.metrics-item h4 { + font-size: 30px; + font-weight: 600; + line-height: 1.2; + color: #000000; +} + +.metrics-item p, +.metrics-item a { + font-size: 18px; + font-weight: 400; +} + + +#ontology_versions .show_more_subs td { + text-align: right; +} + + + +div.vis-network div.vis-navigation { + div.vis-button.vis-up{ + background-color: var(--primary-color); + -webkit-mask-image: url(asset-path('icons/circle-up.svg')); + mask-image: url(asset-path('icons/circle-up.svg')); + background-image: none !important; + } + div.vis-button.vis-down{ + background-color: var(--primary-color); + -webkit-mask-image: url(asset-path('icons/circle-down.svg')); + mask-image: url(asset-path('icons/circle-down.svg')); + background-image: none !important; + } + + div.vis-button.vis-left{ + background-color: var(--primary-color); + -webkit-mask-image: url(asset-path('icons/circle-left.svg')); + mask-image: url(asset-path('icons/circle-left.svg')); + background-image: none !important; + } + + div.vis-button.vis-right{ + background-color: var(--primary-color); + -webkit-mask-image: url(asset-path('icons/circle-right.svg')); + mask-image: url(asset-path('icons/circle-right.svg')); + background-image: none !important; + } + + div.vis-button.vis-zoomIn{ + background-color: var(--primary-color); + -webkit-mask-image: url(asset-path('icons/zoom-in.svg')); + mask-image: url(asset-path('icons/zoom-in.svg')); + background-image: none !important; + } + + div.vis-button.vis-zoomOut{ + background-color: var(--primary-color); + -webkit-mask-image: url(asset-path('icons/zoom-out.svg')); + mask-image: url(asset-path('icons/zoom-out.svg')); + background-image: none !important; + } + + div.vis-button.vis-zoomExtends{ + background-color: var(--primary-color); + -webkit-mask-image: url(asset-path('icons/zoom-center.svg')); + mask-image: url(asset-path('icons/zoom-center.svg')); + background-image: none !important; + } +} + + diff --git a/app/components/dropdown_container_component.rb b/app/components/dropdown_container_component.rb index 897d708b9..3d785f85e 100644 --- a/app/components/dropdown_container_component.rb +++ b/app/components/dropdown_container_component.rb @@ -6,5 +6,6 @@ def initialize(title:, id:, tooltip:nil) super @title = title @id = id + @tooltip = tooltip end end diff --git a/app/components/language_field_component.rb b/app/components/language_field_component.rb index 6922f855e..c2e00ed31 100644 --- a/app/components/language_field_component.rb +++ b/app/components/language_field_component.rb @@ -3,21 +3,22 @@ class LanguageFieldComponent < ViewComponent::Base LEXVO_TO_FLAG = { 'http://lexvo.org/id/iso639-3/aar' => 'aa', 'http://lexvo.org/id/iso639-3/abk' => 'ab', - 'http://lexvo.org/id/iso639-3/ave' => 'ae', 'http://lexvo.org/id/iso639-3/afr' => 'af', - 'http://lexvo.org/id/iso639-3/aka' => 'ak', 'http://lexvo.org/id/iso639-3/amh' => 'am', - 'http://lexvo.org/id/iso639-3/arg' => 'an', 'http://lexvo.org/id/iso639-3/ara' => 'ar', 'http://lexvo.org/id/iso639-3/asm' => 'as', 'http://lexvo.org/id/iso639-3/ava' => 'av', 'http://lexvo.org/id/iso639-3/aym' => 'ay', 'http://lexvo.org/id/iso639-3/aze' => 'az', 'http://lexvo.org/id/iso639-3/bak' => 'ba', 'http://lexvo.org/id/iso639-3/bel' => 'be', 'http://lexvo.org/id/iso639-3/bul' => 'bg', 'http://lexvo.org/id/iso639-3/bis' => 'bi', 'http://lexvo.org/id/iso639-3/bam' => 'bm', 'http://lexvo.org/id/iso639-3/ben' => 'bn', 'http://lexvo.org/id/iso639-3/bod' => 'bo', 'http://lexvo.org/id/iso639-3/bre' => 'br', 'http://lexvo.org/id/iso639-3/bos' => 'bs', 'http://lexvo.org/id/iso639-3/cat' => 'ca', 'http://lexvo.org/id/iso639-3/che' => 'ce', 'http://lexvo.org/id/iso639-3/cha' => 'ch', 'http://lexvo.org/id/iso639-3/cos' => 'co', 'http://lexvo.org/id/iso639-3/cre' => 'cr', 'http://lexvo.org/id/iso639-3/ces' => 'cs', 'http://lexvo.org/id/iso639-3/chu' => 'cu', 'http://lexvo.org/id/iso639-3/chv' => 'cv', 'http://lexvo.org/id/iso639-3/cym' => 'cy', 'http://lexvo.org/id/iso639-3/dan' => 'da', 'http://lexvo.org/id/iso639-3/deu' => 'de', 'http://lexvo.org/id/iso639-3/div' => 'dv', 'http://lexvo.org/id/iso639-3/dzo' => 'dz', 'http://lexvo.org/id/iso639-3/ewe' => 'ee', 'http://lexvo.org/id/iso639-3/ell' => 'el', 'http://lexvo.org/id/iso639-3/eng' => 'en', 'http://lexvo.org/id/iso639-3/epo' => 'eo', 'http://lexvo.org/id/iso639-3/spa' => 'es', 'http://lexvo.org/id/iso639-3/est' => 'et', 'http://lexvo.org/id/iso639-3/eus' => 'eu', 'http://lexvo.org/id/iso639-3/fas' => 'fa', 'http://lexvo.org/id/iso639-3/ful' => 'ff', 'http://lexvo.org/id/iso639-3/fin' => 'fi', 'http://lexvo.org/id/iso639-3/fij' => 'fj', 'http://lexvo.org/id/iso639-3/fao' => 'fo', 'http://lexvo.org/id/iso639-3/fra' => 'fr', 'http://lexvo.org/id/iso639-3/fry' => 'fy', 'http://lexvo.org/id/iso639-3/gle' => 'ga', 'http://lexvo.org/id/iso639-3/gla' => 'gd', 'http://lexvo.org/id/iso639-3/glg' => 'gl', 'http://lexvo.org/id/iso639-3/grn' => 'gn', 'http://lexvo.org/id/iso639-3/guj' => 'gu', 'http://lexvo.org/id/iso639-3/glv' => 'gv', 'http://lexvo.org/id/iso639-3/hau' => 'ha', 'http://lexvo.org/id/iso639-3/heb' => 'he', 'http://lexvo.org/id/iso639-3/hin' => 'hi', 'http://lexvo.org/id/iso639-3/hmo' => 'ho', 'http://lexvo.org/id/iso639-3/hrv' => 'hr', 'http://lexvo.org/id/iso639-3/hat' => 'ht', 'http://lexvo.org/id/iso639-3/hun' => 'hu', 'http://lexvo.org/id/iso639-3/hye' => 'hy', 'http://lexvo.org/id/iso639-3/her' => 'hz', 'http://lexvo.org/id/iso639-3/ina' => 'ia', 'http://lexvo.org/id/iso639-3/ind' => 'id', 'http://lexvo.org/id/iso639-3/ile' => 'ie', 'http://lexvo.org/id/iso639-3/ibo' => 'ig', 'http://lexvo.org/id/iso639-3/iii' => 'ii', 'http://lexvo.org/id/iso639-3/ipk' => 'ik', 'http://lexvo.org/id/iso639-3/ido' => 'io', 'http://lexvo.org/id/iso639-3/isl' => 'is', 'http://lexvo.org/id/iso639-3/ita' => 'it', 'http://lexvo.org/id/iso639-3/iku' => 'iu', 'http://lexvo.org/id/iso639-3/jpn' => 'ja', 'http://lexvo.org/id/iso639-3/jav' => 'jv', 'http://lexvo.org/id/iso639-3/kat' => 'ka', 'http://lexvo.org/id/iso639-3/kon' => 'kg', 'http://lexvo.org/id/iso639-3/kik' => 'ki', 'http://lexvo.org/id/iso639-3/kua' => 'kj', 'http://lexvo.org/id/iso639-3/kaz' => 'kk', 'http://lexvo.org/id/iso639-3/kal' => 'kl', 'http://lexvo.org/id/iso639-3/khm' => 'km', 'http://lexvo.org/id/iso639-3/kan' => 'kn', 'http://lexvo.org/id/iso639-3/kor' => 'ko', 'http://lexvo.org/id/iso639-3/kau' => 'kr', 'http://lexvo.org/id/iso639-3/kas' => 'ks', 'http://lexvo.org/id/iso639-3/kur' => 'ku', 'http://lexvo.org/id/iso639-3/kom' => 'kv', 'http://lexvo.org/id/iso639-3/cor' => 'kw', 'http://lexvo.org/id/iso639-3/kir' => 'ky', 'http://lexvo.org/id/iso639-3/lat' => 'la', 'http://lexvo.org/id/iso639-3/ltz' => 'lb', 'http://lexvo.org/id/iso639-3/lug' => 'lg', 'http://lexvo.org/id/iso639-3/lim' => 'li', 'http://lexvo.org/id/iso639-3/lin' => 'ln', 'http://lexvo.org/id/iso639-3/lao' => 'lo', 'http://lexvo.org/id/iso639-3/lit' => 'lt', 'http://lexvo.org/id/iso639-3/lub' => 'lu', 'http://lexvo.org/id/iso639-3/lav' => 'lv', 'http://lexvo.org/id/iso639-3/mlg' => 'mg', 'http://lexvo.org/id/iso639-3/mah' => 'mh', 'http://lexvo.org/id/iso639-3/mri' => 'mi', 'http://lexvo.org/id/iso639-3/mkd' => 'mk', 'http://lexvo.org/id/iso639-3/mal' => 'ml', 'http://lexvo.org/id/iso639-3/mon' => 'mn', 'http://lexvo.org/id/iso639-3/mar' => 'mr', 'http://lexvo.org/id/iso639-3/msa' => 'ms', 'http://lexvo.org/id/iso639-3/mlt' => 'mt', 'http://lexvo.org/id/iso639-3/mya' => 'my', 'http://lexvo.org/id/iso639-3/nau' => 'na', 'http://lexvo.org/id/iso639-3/nob' => 'nb', 'http://lexvo.org/id/iso639-3/nde' => 'nd', 'http://lexvo.org/id/iso639-3/nep' => 'ne', 'http://lexvo.org/id/iso639-3/ndo' => 'ng', 'http://lexvo.org/id/iso639-3/nld' => 'nl', 'http://lexvo.org/id/iso639-3/nno' => 'nn', 'http://lexvo.org/id/iso639-3/nor' => 'no', 'http://lexvo.org/id/iso639-3/nbl' => 'nr', 'http://lexvo.org/id/iso639-3/nav' => 'nv', 'http://lexvo.org/id/iso639-3/nya' => 'ny', 'http://lexvo.org/id/iso639-3/oci' => 'oc', 'http://lexvo.org/id/iso639-3/oji' => 'oj', 'http://lexvo.org/id/iso639-3/orm' => 'om', 'http://lexvo.org/id/iso639-3/ori' => 'or', 'http://lexvo.org/id/iso639-3/oss' => 'os', 'http://lexvo.org/id/iso639-3/pan' => 'pa', 'http://lexvo.org/id/iso639-3/pli' => 'pi', 'http://lexvo.org/id/iso639-3/pol' => 'pl', 'http://lexvo.org/id/iso639-3/pus' => 'ps', 'http://lexvo.org/id/iso639-3/por' => 'pt', 'http://lexvo.org/id/iso639-3/que' => 'qu', 'http://lexvo.org/id/iso639-3/roh' => 'rm', 'http://lexvo.org/id/iso639-3/run' => 'rn', 'http://lexvo.org/id/iso639-3/ron' => 'ro', 'http://lexvo.org/id/iso639-3/rus' => 'ru', 'http://lexvo.org/id/iso639-3/kin' => 'rw', 'http://lexvo.org/id/iso639-3/san' => 'sa', 'http://lexvo.org/id/iso639-3/srd' => 'sc', 'http://lexvo.org/id/iso639-3/snd' => 'sd', 'http://lexvo.org/id/iso639-3/sme' => 'se', 'http://lexvo.org/id/iso639-3/sag' => 'sg', 'http://lexvo.org/id/iso639-3/hbs' => 'sh', 'http://lexvo.org/id/iso639-3/sin' => 'si', 'http://lexvo.org/id/iso639-3/slk' => 'sk', 'http://lexvo.org/id/iso639-3/slv' => 'sl', 'http://lexvo.org/id/iso639-3/smo' => 'sm', 'http://lexvo.org/id/iso639-3/sna' => 'sn', 'http://lexvo.org/id/iso639-3/som' => 'so', 'http://lexvo.org/id/iso639-3/sqi' => 'sq', 'http://lexvo.org/id/iso639-3/srp' => 'sr', 'http://lexvo.org/id/iso639-3/ssw' => 'ss', 'http://lexvo.org/id/iso639-3/sot' => 'st', 'http://lexvo.org/id/iso639-3/sun' => 'su', 'http://lexvo.org/id/iso639-3/swe' => 'sv', 'http://lexvo.org/id/iso639-3/swa' => 'sw', 'http://lexvo.org/id/iso639-3/tam' => 'ta', 'http://lexvo.org/id/iso639-3/tel' => 'te', 'http://lexvo.org/id/iso639-3/tgk' => 'tg', 'http://lexvo.org/id/iso639-3/tha' => 'th', 'http://lexvo.org/id/iso639-3/tir' => 'ti', 'http://lexvo.org/id/iso639-3/tuk' => 'tk', 'http://lexvo.org/id/iso639-3/tgl' => 'tl', 'http://lexvo.org/id/iso639-3/tsn' => 'tn', 'http://lexvo.org/id/iso639-3/ton' => 'to', 'http://lexvo.org/id/iso639-3/tur' => 'tr', 'http://lexvo.org/id/iso639-3/tso' => 'ts', 'http://lexvo.org/id/iso639-3/tat' => 'tt', 'http://lexvo.org/id/iso639-3/twi' => 'tw', 'http://lexvo.org/id/iso639-3/tah' => 'ty', 'http://lexvo.org/id/iso639-3/uig' => 'ug', 'http://lexvo.org/id/iso639-3/ukr' => 'uk', 'http://lexvo.org/id/iso639-3/urd' => 'ur', 'http://lexvo.org/id/iso639-3/uzb' => 'uz', 'http://lexvo.org/id/iso639-3/ven' => 've', 'http://lexvo.org/id/iso639-3/vie' => 'vi', 'http://lexvo.org/id/iso639-3/vol' => 'vo', 'http://lexvo.org/id/iso639-3/wln' => 'wa', 'http://lexvo.org/id/iso639-3/wol' => 'wo', 'http://lexvo.org/id/iso639-3/xho' => 'xh', 'http://lexvo.org/id/iso639-3/yid' => 'yi', 'http://lexvo.org/id/iso639-3/yor' => 'yo', 'http://lexvo.org/id/iso639-3/zha' => 'za', 'http://lexvo.org/id/iso639-3/zho' => 'zh', 'http://lexvo.org/id/iso639-3/zul' => 'zu' } + 'http://lexvo.org/id/iso639-3/ave' => 'ae', 'http://lexvo.org/id/iso639-3/afr' => 'af', + 'http://lexvo.org/id/iso639-3/aka' => 'ak', 'http://lexvo.org/id/iso639-3/amh' => 'am', + 'http://lexvo.org/id/iso639-3/arg' => 'an', 'http://lexvo.org/id/iso639-3/ara' => 'ar', 'http://lexvo.org/id/iso639-3/asm' => 'as', 'http://lexvo.org/id/iso639-3/ava' => 'av', 'http://lexvo.org/id/iso639-3/aym' => 'ay', 'http://lexvo.org/id/iso639-3/aze' => 'az', 'http://lexvo.org/id/iso639-3/bak' => 'ba', 'http://lexvo.org/id/iso639-3/bel' => 'be', 'http://lexvo.org/id/iso639-3/bul' => 'bg', 'http://lexvo.org/id/iso639-3/bis' => 'bi', 'http://lexvo.org/id/iso639-3/bam' => 'bm', 'http://lexvo.org/id/iso639-3/ben' => 'bn', 'http://lexvo.org/id/iso639-3/bod' => 'bo', 'http://lexvo.org/id/iso639-3/bre' => 'br', 'http://lexvo.org/id/iso639-3/bos' => 'bs', 'http://lexvo.org/id/iso639-3/cat' => 'ca', 'http://lexvo.org/id/iso639-3/che' => 'ce', 'http://lexvo.org/id/iso639-3/cha' => 'ch', 'http://lexvo.org/id/iso639-3/cos' => 'co', 'http://lexvo.org/id/iso639-3/cre' => 'cr', 'http://lexvo.org/id/iso639-3/ces' => 'cs', 'http://lexvo.org/id/iso639-3/chu' => 'cu', 'http://lexvo.org/id/iso639-3/chv' => 'cv', 'http://lexvo.org/id/iso639-3/cym' => 'cy', 'http://lexvo.org/id/iso639-3/dan' => 'da', 'http://lexvo.org/id/iso639-3/deu' => 'de', 'http://lexvo.org/id/iso639-3/div' => 'dv', 'http://lexvo.org/id/iso639-3/dzo' => 'dz', 'http://lexvo.org/id/iso639-3/ewe' => 'ee', 'http://lexvo.org/id/iso639-3/ell' => 'el', 'http://lexvo.org/id/iso639-3/eng' => 'en', 'http://lexvo.org/id/iso639-3/epo' => 'eo', 'http://lexvo.org/id/iso639-3/spa' => 'es', 'http://lexvo.org/id/iso639-3/est' => 'et', 'http://lexvo.org/id/iso639-3/eus' => 'eu', 'http://lexvo.org/id/iso639-3/fas' => 'fa', 'http://lexvo.org/id/iso639-3/ful' => 'ff', 'http://lexvo.org/id/iso639-3/fin' => 'fi', 'http://lexvo.org/id/iso639-3/fij' => 'fj', 'http://lexvo.org/id/iso639-3/fao' => 'fo', 'http://lexvo.org/id/iso639-3/fra' => 'fr', 'http://lexvo.org/id/iso639-3/fry' => 'fy', 'http://lexvo.org/id/iso639-3/gle' => 'ga', 'http://lexvo.org/id/iso639-3/gla' => 'gd', 'http://lexvo.org/id/iso639-3/glg' => 'gl', 'http://lexvo.org/id/iso639-3/grn' => 'gn', 'http://lexvo.org/id/iso639-3/guj' => 'gu', 'http://lexvo.org/id/iso639-3/glv' => 'gv', 'http://lexvo.org/id/iso639-3/hau' => 'ha', 'http://lexvo.org/id/iso639-3/heb' => 'he', 'http://lexvo.org/id/iso639-3/hin' => 'hi', 'http://lexvo.org/id/iso639-3/hmo' => 'ho', 'http://lexvo.org/id/iso639-3/hrv' => 'hr', 'http://lexvo.org/id/iso639-3/hat' => 'ht', 'http://lexvo.org/id/iso639-3/hun' => 'hu', 'http://lexvo.org/id/iso639-3/hye' => 'hy', 'http://lexvo.org/id/iso639-3/her' => 'hz', 'http://lexvo.org/id/iso639-3/ina' => 'ia', 'http://lexvo.org/id/iso639-3/ind' => 'id', 'http://lexvo.org/id/iso639-3/ile' => 'ie', 'http://lexvo.org/id/iso639-3/ibo' => 'ig', 'http://lexvo.org/id/iso639-3/iii' => 'ii', 'http://lexvo.org/id/iso639-3/ipk' => 'ik', 'http://lexvo.org/id/iso639-3/ido' => 'io', 'http://lexvo.org/id/iso639-3/isl' => 'is', 'http://lexvo.org/id/iso639-3/ita' => 'it', 'http://lexvo.org/id/iso639-3/iku' => 'iu', 'http://lexvo.org/id/iso639-3/jpn' => 'ja', 'http://lexvo.org/id/iso639-3/jav' => 'jv', 'http://lexvo.org/id/iso639-3/kat' => 'ka', 'http://lexvo.org/id/iso639-3/kon' => 'kg', 'http://lexvo.org/id/iso639-3/kik' => 'ki', 'http://lexvo.org/id/iso639-3/kua' => 'kj', 'http://lexvo.org/id/iso639-3/kaz' => 'kk', 'http://lexvo.org/id/iso639-3/kal' => 'kl', 'http://lexvo.org/id/iso639-3/khm' => 'km', 'http://lexvo.org/id/iso639-3/kan' => 'kn', 'http://lexvo.org/id/iso639-3/kor' => 'ko', 'http://lexvo.org/id/iso639-3/kau' => 'kr', 'http://lexvo.org/id/iso639-3/kas' => 'ks', 'http://lexvo.org/id/iso639-3/kur' => 'ku', 'http://lexvo.org/id/iso639-3/kom' => 'kv', 'http://lexvo.org/id/iso639-3/cor' => 'kw', 'http://lexvo.org/id/iso639-3/kir' => 'ky', 'http://lexvo.org/id/iso639-3/lat' => 'la', 'http://lexvo.org/id/iso639-3/ltz' => 'lb', 'http://lexvo.org/id/iso639-3/lug' => 'lg', 'http://lexvo.org/id/iso639-3/lim' => 'li', 'http://lexvo.org/id/iso639-3/lin' => 'ln', 'http://lexvo.org/id/iso639-3/lao' => 'lo', 'http://lexvo.org/id/iso639-3/lit' => 'lt', 'http://lexvo.org/id/iso639-3/lub' => 'lu', 'http://lexvo.org/id/iso639-3/lav' => 'lv', 'http://lexvo.org/id/iso639-3/mlg' => 'mg', 'http://lexvo.org/id/iso639-3/mah' => 'mh', 'http://lexvo.org/id/iso639-3/mri' => 'mi', 'http://lexvo.org/id/iso639-3/mkd' => 'mk', 'http://lexvo.org/id/iso639-3/mal' => 'ml', 'http://lexvo.org/id/iso639-3/mon' => 'mn', 'http://lexvo.org/id/iso639-3/mar' => 'mr', 'http://lexvo.org/id/iso639-3/msa' => 'ms', 'http://lexvo.org/id/iso639-3/mlt' => 'mt', 'http://lexvo.org/id/iso639-3/mya' => 'my', 'http://lexvo.org/id/iso639-3/nau' => 'na', 'http://lexvo.org/id/iso639-3/nob' => 'nb', 'http://lexvo.org/id/iso639-3/nde' => 'nd', 'http://lexvo.org/id/iso639-3/nep' => 'ne', 'http://lexvo.org/id/iso639-3/ndo' => 'ng', 'http://lexvo.org/id/iso639-3/nld' => 'nl', 'http://lexvo.org/id/iso639-3/nno' => 'nn', 'http://lexvo.org/id/iso639-3/nor' => 'no', 'http://lexvo.org/id/iso639-3/nbl' => 'nr', 'http://lexvo.org/id/iso639-3/nav' => 'nv', 'http://lexvo.org/id/iso639-3/nya' => 'ny', 'http://lexvo.org/id/iso639-3/oci' => 'oc', 'http://lexvo.org/id/iso639-3/oji' => 'oj', 'http://lexvo.org/id/iso639-3/orm' => 'om', 'http://lexvo.org/id/iso639-3/ori' => 'or', 'http://lexvo.org/id/iso639-3/oss' => 'os', 'http://lexvo.org/id/iso639-3/pan' => 'pa', 'http://lexvo.org/id/iso639-3/pli' => 'pi', 'http://lexvo.org/id/iso639-3/pol' => 'pl', 'http://lexvo.org/id/iso639-3/pus' => 'ps', 'http://lexvo.org/id/iso639-3/por' => 'pt', 'http://lexvo.org/id/iso639-3/que' => 'qu', 'http://lexvo.org/id/iso639-3/roh' => 'rm', 'http://lexvo.org/id/iso639-3/run' => 'rn', 'http://lexvo.org/id/iso639-3/ron' => 'ro', 'http://lexvo.org/id/iso639-3/rus' => 'ru', 'http://lexvo.org/id/iso639-3/kin' => 'rw', 'http://lexvo.org/id/iso639-3/san' => 'sa', 'http://lexvo.org/id/iso639-3/srd' => 'sc', 'http://lexvo.org/id/iso639-3/snd' => 'sd', 'http://lexvo.org/id/iso639-3/sme' => 'se', 'http://lexvo.org/id/iso639-3/sag' => 'sg', 'http://lexvo.org/id/iso639-3/hbs' => 'sh', 'http://lexvo.org/id/iso639-3/sin' => 'si', 'http://lexvo.org/id/iso639-3/slk' => 'sk', 'http://lexvo.org/id/iso639-3/slv' => 'sl', 'http://lexvo.org/id/iso639-3/smo' => 'sm', 'http://lexvo.org/id/iso639-3/sna' => 'sn', 'http://lexvo.org/id/iso639-3/som' => 'so', 'http://lexvo.org/id/iso639-3/sqi' => 'sq', 'http://lexvo.org/id/iso639-3/srp' => 'sr', 'http://lexvo.org/id/iso639-3/ssw' => 'ss', 'http://lexvo.org/id/iso639-3/sot' => 'st', 'http://lexvo.org/id/iso639-3/sun' => 'su', 'http://lexvo.org/id/iso639-3/swe' => 'sv', 'http://lexvo.org/id/iso639-3/swa' => 'sw', 'http://lexvo.org/id/iso639-3/tam' => 'ta', 'http://lexvo.org/id/iso639-3/tel' => 'te', 'http://lexvo.org/id/iso639-3/tgk' => 'tg', 'http://lexvo.org/id/iso639-3/tha' => 'th', 'http://lexvo.org/id/iso639-3/tir' => 'ti', 'http://lexvo.org/id/iso639-3/tuk' => 'tk', 'http://lexvo.org/id/iso639-3/tgl' => 'tl', 'http://lexvo.org/id/iso639-3/tsn' => 'tn', 'http://lexvo.org/id/iso639-3/ton' => 'to', 'http://lexvo.org/id/iso639-3/tur' => 'tr', 'http://lexvo.org/id/iso639-3/tso' => 'ts', 'http://lexvo.org/id/iso639-3/tat' => 'tt', 'http://lexvo.org/id/iso639-3/twi' => 'tw', 'http://lexvo.org/id/iso639-3/tah' => 'ty', 'http://lexvo.org/id/iso639-3/uig' => 'ug', 'http://lexvo.org/id/iso639-3/ukr' => 'uk', 'http://lexvo.org/id/iso639-3/urd' => 'ur', 'http://lexvo.org/id/iso639-3/uzb' => 'uz', 'http://lexvo.org/id/iso639-3/ven' => 've', 'http://lexvo.org/id/iso639-3/vie' => 'vi', 'http://lexvo.org/id/iso639-3/vol' => 'vo', 'http://lexvo.org/id/iso639-3/wln' => 'wa', 'http://lexvo.org/id/iso639-3/wol' => 'wo', 'http://lexvo.org/id/iso639-3/xho' => 'xh', 'http://lexvo.org/id/iso639-3/yid' => 'yi', 'http://lexvo.org/id/iso639-3/yor' => 'yo', 'http://lexvo.org/id/iso639-3/zha' => 'za', 'http://lexvo.org/id/iso639-3/zho' => 'zh', 'http://lexvo.org/id/iso639-3/zul' => 'zu' } - - def initialize(value: ) + def initialize(value:) super - @lang_code = lang_codes_init(value) + + @lang_code = lang_codes_init(value) end def lang_codes_init(lang) - if lang.to_s.eql?("en") || lang.to_s.eql?("eng") || lang.to_s.eql?("http://lexvo.org/id/iso639-3/eng") + + if lang.to_s.eql?("en") || lang.to_s.eql?("eng") || lang.to_s.start_with?("http://lexvo.org/id/iso639-3/en") lang_codes = "gb" elsif lang.to_s.start_with?("http://lexvo.org") - lang_codes = LEXVO_TO_FLAG[lang] + lang_codes = LEXVO_TO_FLAG[lang] || lang else lang_codes = lang end diff --git a/app/components/language_field_component/language_field_component.html.haml b/app/components/language_field_component/language_field_component.html.haml index a6b431565..6c0c9998e 100644 --- a/app/components/language_field_component/language_field_component.html.haml +++ b/app/components/language_field_component/language_field_component.html.haml @@ -1,4 +1,4 @@ -- if @lang_code.length == 2 +- if @lang_code && @lang_code.length == 2 %div.f32 %span.flag{:class => " #{@lang_code}", :style => "margin-right: 0.5em;"} - else diff --git a/app/components/submission_metadata_component.rb b/app/components/submission_metadata_component.rb new file mode 100644 index 000000000..69c23f9bd --- /dev/null +++ b/app/components/submission_metadata_component.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +class SubmissionMetadataComponent < ViewComponent::Base + include ApplicationHelper, MetadataHelper,OntologiesHelper, AgentHelper + + def initialize(submission: , submission_metadata:) + super + @submission = submission + + @json_metadata = submission_metadata + metadata_list = {} + # Get extracted metadata and put them in a hash with their label, if one, as value + @json_metadata.each do |metadata| + metadata_list[metadata["attribute"]] = metadata["label"] + end + + @metadata_list = metadata_list.sort + end + + def display_attributes(metadata) + if Array(@submission.send(metadata)).empty? + out = 'N/A' + else + out = Array(@submission.send(metadata)).map do |value| + content_tag(:div, class: 'm-1 f32') do + display_attribute(metadata, value) + end + end.join + end + out.html_safe + end + def attribute_help_text(attr) + if !attr["namespace"].nil? + help_text = "#{attr["namespace"]}:#{attr["attribute"]}" + else + help_text = "bioportal:#{attr["attribute"]}" + end + + if (attr["metadataMappings"] != nil) + help_text += " (#{attr["metadataMappings"].join(", ")})" + end + + if (!attr["enforce"].nil? && attr["enforce"].include?("uri")) + help_text += "
This metadata should be an URI" + end + + if (attr["helpText"] != nil) + help_text += "

#{attr["helpText"]}" + end + help_text.html_safe + end +end diff --git a/app/components/submission_metadata_component/submission_metadata_component.html.haml b/app/components/submission_metadata_component/submission_metadata_component.html.haml new file mode 100644 index 000000000..c244e7685 --- /dev/null +++ b/app/components/submission_metadata_component/submission_metadata_component.html.haml @@ -0,0 +1,18 @@ += render TableComponent.new(id: 'submission_metadata_table', borderless: true, layout_fixed: true) do |t| + - t.header do |h| + - h.th(width:'15%') {"Label"} + - h.th(width:'50%') {"Value"} + - h.th(width:'35%') {"Metadata"} + + - @metadata_list.each do |metadata, label| + - t.row do |r| + - r.td do + = label || metadata.underscore.humanize + - r.td do + .d-flex.flex-wrap.align-items-center + = display_attributes(metadata) + - r.td {attribute_help_text(attr_metadata(metadata))} +:javascript + $("#submission_metadata_table").dataTable({ paging: false, autoWidth: false }) + + diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 7ce8b03e2..5829d5484 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -529,13 +529,6 @@ def get_class(params) @concept end - def get_metrics_hash - metrics_hash = {} - # TODO: Metrics do not return for views on the backend, need to enable include_views param there - @metrics = LinkedData::Client::Models::Metrics.all(include_views: true) - @metrics.each {|m| metrics_hash[m.links['ontology']] = m } - return metrics_hash - end def get_ontology_submission_ready(ontology) # Get the latest 'ready' submission @@ -782,9 +775,8 @@ def init_trial_license # Get the submission metadata from the REST API. def submission_metadata - @metadata ||= JSON.parse(Net::HTTP.get(URI.parse("#{REST_URI}/submission_metadata?apikey=#{API_KEY}"))) + helpers.submission_metadata end - helper_method :submission_metadata def request_lang diff --git a/app/controllers/ontologies_controller.rb b/app/controllers/ontologies_controller.rb index a50f1797c..afb34ecfd 100644 --- a/app/controllers/ontologies_controller.rb +++ b/app/controllers/ontologies_controller.rb @@ -370,7 +370,6 @@ def summary @ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:id]).first if @ontology.nil? ontology_not_found(params[:id]) if @ontology.nil? # Check to see if user is requesting json-ld, return the file from REST service if so - if request.accept.to_s.eql?('application/ld+json') || request.accept.to_s.eql?('application/json') headers['Content-Type'] = request.accept.to_s render plain: @ontology.to_jsonld @@ -382,13 +381,23 @@ def summary @projects = @ontology.explore.projects.sort {|a,b| a.name.downcase <=> b.name.downcase } || [] @analytics = LinkedData::Client::HTTP.get(@ontology.links['analytics']) - #Call to fairness assessment service + # Call to fairness assessment service tmp = fairness_service_enabled? ? get_fair_score(@ontology.acronym) : nil @fair_scores_data = create_fair_scores_data(tmp.values.first) unless tmp.nil? @views = get_views(@ontology) - @view_decorators = @views.map{ |view| ViewDecorator.new(view, view_context) } - + @view_decorators = @views.map { |view| ViewDecorator.new(view, view_context) } + @ontology_relations_data = ontology_relations_data + + category_attributes = submission_metadata.group_by{|x| x['category']}.transform_values{|x| x.map{|attr| attr['attribute']} } + + @methodology_properties = properties_hash_values(category_attributes["methodology"]) + @agents_properties = properties_hash_values(category_attributes["people"].without('wasGeneratedBy', 'wasInvalidatedBy') + [:hasCreator, :hasContributor, :translator, :publisher, :copyrightHolder]) + @dates_properties = properties_hash_values(category_attributes["dates"] + [:creationDate, :modificationDate, :released]) + @links_properties = properties_hash_values(category_attributes["links"].without('includedInDataCatalog') +[:wasGeneratedBy, :wasInvalidatedBy] ) + @identifiers = properties_hash_values( [:URI, :versionIRI, :identifier]) + @projects_properties = properties_hash_values(category_attributes["usage"].without('hasDomain') + [:audience, :includedInDataCatalog]) + @ontology_icon_links = [%w[summary/download dataDump], %w[summary/homepage homepage], %w[summary/documentation documentation], %w[icons/github repository], %w[summary/sparql endpoint]] if request.xhr? render partial: 'ontologies/sections/metadata', layout: false else @@ -439,6 +448,14 @@ def widgets render partial: 'ontologies/sections/widgets', layout: 'ontology_viewer' end end + + + def show_additional_metadata + @metadata = submission_metadata + @ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:id]).first + @submission_latest = @ontology.explore.latest_submission(include: 'all', display_context: false, display_links: false) + render partial: 'ontologies/sections/additional_metadata' + end def show_licenses @@ -452,9 +469,28 @@ def ajax_ontologies render json: LinkedData::Client::Models::Ontology.all(include_views: true, - display: 'acronym,name', display_links: false, display_context: false) + display: 'acronym,name', display_links: false, display_context: false) end + + + def metrics_evolution + @ontology = LinkedData::Client::Models::Ontology.find_by_acronym(params[:ontology_id]).first + key = params[:metrics_key] + ontology_not_found(params[:ontology_id]) if @ontology.nil? + + # Retrieve submissions in descending submissionId order (should be reverse chronological order) + @submissions = @ontology.explore.submissions({ include: "metrics" }) + .sort { |a, b| a.submissionId.to_i <=> b.submissionId.to_i }.reverse || [] + + metrics = @submissions.map { |s| s.metrics } + + data = { + key => metrics.map { |m| m[key] } + } + + render partial: 'ontologies/sections/metadata/metrics_evolution_graph', locals: { data: data } + end private def get_views(ontology) @@ -463,4 +499,63 @@ def get_views(ontology) views.sort{ |a,b| a.acronym.downcase <=> b.acronym.downcase } end + def ontology_relations_data(sub = @submission_latest) + ontology_relations_array = [] + @relations_array = ["omv:useImports", "door:isAlignedTo", "door:ontologyRelatedTo", "omv:isBackwardCompatibleWith", "omv:isIncompatibleWith", "door:comesFromTheSameDomain", "door:similarTo", + "door:explanationEvolution", "voaf:generalizes", "door:hasDisparateModelling", "dct:hasPart", "voaf:usedBy", "schema:workTranslation", "schema:translationOfWork"] + + return if sub.nil? + + ont = sub.ontology + # Get ontology relations between each other (ex: STY isAlignedTo GO) + @relations_array.each do |relation_attr| + relation_values = sub.send(relation_attr.to_s.split(':')[1]) + next if relation_values.nil? || relation_values.empty? + + relation_values = [relation_values] unless relation_values.kind_of?(Array) + + relation_values.each do |relation_value| + next if relation_value.eql?(ont.acronym) + + target_id = relation_value + target_in_portal = false + # if we find our portal URL in the ontology URL, then we just keep the ACRONYM to try to get the ontology. + relation_value = relation_value.split('/').last if relation_value.include?($UI_URL) + + # Use acronym to get ontology from the portal + target_ont = LinkedData::Client::Models::Ontology.find_by_acronym(relation_value).first + if target_ont + target_id = target_ont.acronym + target_in_portal = true + end + + ontology_relations_array.push({ source: ont.acronym, target: target_id, relation: relation_attr.to_s, targetInPortal: target_in_portal }) + end + end + + ontology_relations_array + end + def properties_hash_values(properties, sub = @submission_latest) + return {} if sub.nil? + + properties.map { |x| [x.to_s, sub.send(x.to_s)] }.to_h + end + + def get_metrics_hash + metrics_hash = {} + # TODO: Metrics do not return for views on the backend, need to enable include_views param there + @metrics = LinkedData::Client::Models::Metrics.all(include_views: true) + @metrics.each {|m| metrics_hash[m.links['ontology']] = m } + return metrics_hash + end + + def determine_layout + case action_name + when 'index' + 'angular' + else + super + end + end + end diff --git a/app/controllers/ontologies_metadata_curator_controller.rb b/app/controllers/ontologies_metadata_curator_controller.rb index 7b9c95cfb..b65658f86 100644 --- a/app/controllers/ontologies_metadata_curator_controller.rb +++ b/app/controllers/ontologies_metadata_curator_controller.rb @@ -144,7 +144,7 @@ def metadata_params :publication ] - @metadata.each do |m| + submission_metadata.each do |m| m_attr = m["attribute"].to_sym diff --git a/app/helpers/agent_helper.rb b/app/helpers/agent_helper.rb index ea8c46c6a..590e297ce 100644 --- a/app/helpers/agent_helper.rb +++ b/app/helpers/agent_helper.rb @@ -79,6 +79,8 @@ def display_identifiers(identifiers, link: true) end def display_agent(agent, link: true) + return agent if agent.is_a?(String) + out = agent.name.to_s.humanize identifiers = display_identifiers(agent.identifiers, link: link) out = "#{out} (#{identifiers})" unless identifiers.empty? diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 396f68883..9e65befaf 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -6,6 +6,8 @@ require 'pry' # used in a rescue module ApplicationHelper + REST_URI = $REST_URL + API_KEY = $API_KEY include ModalHelper @@ -41,6 +43,10 @@ def omniauth_token_provider(strategy) omniauth_provider_info(strategy).keys.first end + def submission_metadata + @metadata ||= JSON.parse(Net::HTTP.get(URI.parse("#{REST_URI}/submission_metadata?apikey=#{API_KEY}"))) + end + def isOwner?(id) unless session[:user].nil? if session[:user].admin? @@ -52,6 +58,7 @@ def isOwner?(id) end end end + def encode_param(string) CGI.escape(string) @@ -276,6 +283,8 @@ def help_tooltip(content, html_attribs = {}, icon = 'fas fa-question-circle', cs BLOCK end + + def anonymous_user # # TODO: Fix and failures from removing 'DataAccess' call here. @@ -529,24 +538,23 @@ def label_ajax_data_h(cls_id, ont_acronym, ajax_uri, cls_url) end def label_ajax_data(cls_id, ont_acronym, ajax_uri, cls_url) - tag.attributes label_ajax_data_h(cls_id, ont_acronym, ajax_uri, cls_url) + label_ajax_data_h(cls_id, ont_acronym, ajax_uri, cls_url) end - def label_ajax_link(link, cls_id, ont_acronym, ajax_uri, cls_url, target = '') - href_cls = " href='#{link}'" + def label_ajax_link(link, cls_id, ont_acronym, ajax_uri, cls_url, target = nil) data = label_ajax_data(cls_id, ont_acronym, ajax_uri, cls_url) - style = 'btn btn-sm btn-light' - "#{cls_id}" + options = { 'data-controller': 'label-ajax' }.merge(data) + options = options.merge({ target: target }) if target + + render ChipButtonComponent.new(url: link, text: cls_id, type: 'clickable', **options) end def get_link_for_cls_ajax(cls_id, ont_acronym, target = nil) - target = target.nil? ? '' : " target='#{target}' " - if cls_id.start_with?('http://') || cls_id.start_with?('https://') link = bp_class_link(cls_id, ont_acronym) ajax_url = "/ajax/classes/label?language=#{request_lang}" cls_url = "?p=classes&conceptid=#{CGI.escape(cls_id)}&language=#{request_lang}" - label_ajax_link(link, cls_id, ont_acronym, ajax_url , cls_url ,target) + label_ajax_link(link, cls_id, ont_acronym, ajax_url, cls_url, target) else auto_link(cls_id, :all, target: '_blank') end diff --git a/app/helpers/mappings_helper.rb b/app/helpers/mappings_helper.rb index a3f03f65f..b64ab13ae 100644 --- a/app/helpers/mappings_helper.rb +++ b/app/helpers/mappings_helper.rb @@ -48,26 +48,6 @@ def get_prefixed_uri(uri) return uri end - def get_link_for_cls_ajax(cls_id, ont_acronym, target = nil) - # Note: bp_ajax_controller.ajax_process_cls will try to resolve class labels. - # Uses 'http' as a more generic attempt to resolve class labels than .include? ont_acronym; the - # bp_ajax_controller.ajax_process_cls will try to resolve class labels and - # otherwise remove the UNIQUE_SPLIT_STR and the ont_acronym. - if target.nil? - target = "" - else - target = " target='#{target}' " - end - if cls_id.start_with? 'http://' - href_cls = " href='#{bp_class_link(cls_id, ont_acronym)}' " - data_cls = " data-cls='#{cls_id}' " - data_ont = " data-ont='#{ont_acronym}' " - return "#{cls_id}" - else - return auto_link(cls_id, :all, :target => '_blank') - end - end - # method to get (using http) prefLabel for interportal classes # Using bp_ajax_controller.ajax_process_interportal_cls will try to resolve class labels. def ajax_to_inter_portal_cls(cls) diff --git a/app/helpers/metadata_helper.rb b/app/helpers/metadata_helper.rb new file mode 100644 index 000000000..5cf73e2fa --- /dev/null +++ b/app/helpers/metadata_helper.rb @@ -0,0 +1,77 @@ +module MetadataHelper + + def input_type?(attr, type) + attr["enforce"].include?(type) + end + + def attr_metadata(attr_key) + submission_metadata.select { |attr_hash| attr_hash["attribute"].to_s.eql?(attr_key) }.first + end + + def attr_label(attr) + data = attr_metadata(attr.to_s) + return attr.humanize if data.nil? + data["label"] + end + + def integer?(attr_label) + input_type?(attr_metadata(attr_label), 'integer') + end + + def date_time?(attr_label) + input_type?(attr_metadata(attr_label), 'date_time') + end + + def textarea?(attr_label) + input_type?(attr_metadata(attr_label), 'textarea') + end + + def enforce_values?(attr) + !attr["enforcedValues"].nil? + end + + def list?(attr_label) + input_type?(attr_metadata(attr_label), "list") + end + + def isOntology?(attr_label) + input_type?(attr_metadata(attr_label), 'isOntology') + end + + def attr_uri?(attr_label) + input_type?(attr_metadata(attr_label), "uri") + end + + def boolean?(attr_label) + input_type?(attr_metadata(attr_label), "boolean") + end + + def agent?(attr) + input_type?(attr_metadata(attr), "Agent") + end + + def display_attribute(metadata, value) + return 'N/A' if value.nil? || Array(value).empty? + + if agent?(metadata) + display_agent(value) + elsif metadata.eql?("naturalLanguage") + render LanguageFieldComponent.new(value: value) + elsif metadata.to_s.eql?("hasLicense") + render LicenseFieldComponent.new(value: value) + elsif metadata.to_s.eql?("endpoint") && (value.start_with?("http://sparql.") || value.start_with?("https://sparql.")) + link_to(value, :title => value, :target => "_blank", :style => "border-width:0;") do + image_tag('logos/sparql_logo.png', :title => value, :class => 'logo') + end + elsif date_time?(metadata) + render DateTimeFieldComponent.new(value: value) + elsif attr_uri?(metadata) + render LinkFieldComponent.new(value: value) + elsif input_type?(attr_metadata(metadata), 'contact') + display_contact(value) + else + render TextAreaFieldComponent.new(value: value.to_s) + end + end + +end \ No newline at end of file diff --git a/app/helpers/ontologies_helper.rb b/app/helpers/ontologies_helper.rb index cf35e422d..036652052 100644 --- a/app/helpers/ontologies_helper.rb +++ b/app/helpers/ontologies_helper.rb @@ -20,28 +20,14 @@ def additional_details end # Display data catalog metadata under visits (in _metadata.html.haml) - def display_data_catalog(sub) - if !sub.send("includedInDataCatalog").nil? && sub.send("includedInDataCatalog").any? + def display_data_catalog(value) + if !value.nil? && value.any? # Buttons for data catalogs - return content_tag(:section, { :class => "ont-metadata-card ont-included-in-data-catalog-card" }) do - concat(content_tag(:div, { :class => "ont-section-toolbar" }) do - concat(content_tag(:header, "includedInDataCatalog", { :class => "pb-2 font-weight-bold" })) - end) - concat(content_tag(:div, { :class => "" }) do - sub.send("includedInDataCatalog").each do |catalog| - catalog_btn_label = catalog - $DATA_CATALOG_VALUES.each do |cat_uri, cat_label| - if catalog[cat_uri] - catalog_btn_label = cat_label - break - end - end - concat(content_tag(:a, catalog_btn_label, { :class => "btn btn-primary", :href => catalog, :target => "_blank" })) - end - end) + content_tag(:div, { :class => "" }) do + end else - "" + "" end end @@ -50,232 +36,10 @@ def agent?(sub_metadata, attr) metadata && Array(metadata['enforce']).include?('Agent') end - # Display data catalog metadata under visits (in _metadata.html.haml) - def display_logo(sub) - logo_attributes = ["logo", "depiction"] - logo_html = "" - logo_attributes.each do |metadata| - if !sub.send(metadata).nil? - puts sub.send(metadata) - logo_html.concat(content_tag(:section, { :class => "ont-metadata-card ont-logo-depiction-card" }) do - concat(content_tag(:div, { :class => "ont-section-toolbar" }) do - concat(content_tag(:header, metadata.capitalize, { :class => "pb-2 font-weight-bold" })) - end) - concat(content_tag(:div, { :class => "" }) do - concat(content_tag(:a, { :href => sub.send(metadata), :title => sub.send(metadata), - :target => "_blank", :style => "border-width:0;" }) do - - concat(content_tag(:img, "", { :title => sub.send(metadata), - :style => "border-width:0;max-width: 100%;", :src => sub.send(metadata).to_s })) - end) - end) - end) - end - end - return logo_html + def display_contact(contacts) + contacts.map {|c| "#{c.name.humanize} at #{c.email}" if c.member?(:name) && c.member?(:email)}&.join(", ") end - - # Add additional metadata as html for a submission - def additional_metadata(sub) - # Get the list of metadata attribute from the REST API - json_metadata = submission_metadata - metadata_list = {} - # Get extracted metadata and put them in a hash with their label, if one, as value - json_metadata.each do |metadata| - metadata_list[metadata["attribute"]] = metadata["label"] - end - metadata_list = metadata_list.sort - - html = [] - - metadata_not_displayed = ["status", "description", "documentation", "publication", "homepage", - "openSearchDescription", "dataDump", "includedInDataCatalog", "logo", - "depiction", "submissionId", "submissionStatus", 'ontology', 'contact'] - begin - - metadata_list.each do |metadata, label| - # Don't display documentation, publication, homepage, status and description, they are already in main details - if !metadata_not_displayed.include?(metadata) - # different html build if list or single value - - # METADATA ARRAY - if sub.send(metadata).kind_of?(Array) - if sub.send(metadata).any? - if metadata.eql?("naturalLanguage") - # Special treatment for naturalLanguage: we want the flags in a bootstrap box - # UK is gb: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 - lang_codes = [] - - sub.send(metadata).each do |lang| - if (lang.to_s.eql?("en") || lang.to_s.eql?("eng") || lang.to_s.eql?("http://lexvo.org/id/iso639-3/eng")) - # We consider en and eng as english - lang_codes << "gb" - elsif lang.to_s.start_with?("http://lexvo.org") - lang_codes << $LEXVO_TO_FLAG[lang] - else - lang_codes << lang - end - end - - html << content_tag(:tr) do - concat(content_tag(:td, "Natural Language", " ")) - # Display naturalLanguage as flag - concat(content_tag(:td) do - concat(content_tag(:ul, { :class => "f32" }) do - lang_codes.each do |lang_code| - if lang_code.length == 2 - concat(content_tag(:li, "", { :class => "flag #{lang_code}", :style => "margin-right: 0.5em;" })) - else - concat(content_tag(:li, lang_code)) - end - end - end) - end) - end - - elsif agent?(json_metadata, metadata) - html << content_tag(:tr) do - if label.nil? - concat(content_tag(:td, metadata.gsub(/(?=[A-Z])/, " "))) - else - concat(content_tag(:td, label)) - end - - metadata_array = [] - - sub.send(metadata).each do |metadata_value| - metadata_array << "
#{display_agent(metadata_value)}
" - end - - concat(content_tag(:td, raw(metadata_array.join("")))) - end - else - html << content_tag(:tr) do - if label.nil? - concat(content_tag(:td, metadata.gsub(/(?=[A-Z])/, " "))) - else - concat(content_tag(:td, label)) - end - - metadata_array = [] - sub.send(metadata).each do |metadata_value| - if metadata_value.to_s.start_with?("#{$REST_URL}/ontologies/") - # For URI that links to our ontologies we display a button with only the acronym. And redirect to the UI - # Warning! Redirection is done by removing "data." from the REST_URL. So might not work perfectly everywhere - if metadata_value.to_s.split("/").length < 6 - # for ontologies/ACRONYM we redirect to the UI url - metadata_array.push("#{metadata_value.to_s.split("/")[4..-1].join("/")}") - else - metadata_array.push("#{metadata_value.to_s.split("/")[4..-1].join("/")}") - end - - elsif metadata_value.to_s =~ /\A#{URI::regexp(['http', 'https'])}\z/ - # Don't create a link if it not an URI - metadata_array.push("#{metadata_value.to_s}") - else - metadata_array.push(metadata_value) - end - end - concat(content_tag(:td, raw(metadata_array.join(", ")))) - end - end - end - else - - # SINGLE METADATA - if agent?(json_metadata, metadata) - next if sub.send(metadata).nil? - - html << content_tag(:tr) do - if label.nil? - concat(content_tag(:td, metadata.gsub(/(?=[A-Z])/, " "))) - else - concat(content_tag(:td, label)) - end - concat(content_tag(:td, raw("
#{display_agent(sub.send(metadata))}
"))) - end - elsif !sub.send(metadata).nil? - html << content_tag(:tr) do - if label.nil? - concat(content_tag(:td, metadata.gsub(/(?=[A-Z])/, " "))) - else - concat(content_tag(:td, label)) - end - if (metadata.to_s.eql?("hasLicense")) - if (sub.send(metadata).to_s.start_with?("http://creativecommons.org/licenses") || sub.send(metadata).start_with?("https://creativecommons.org/licenses")) - concat(content_tag(:td) do - concat(content_tag(:a, { :rel => "license", :alt => "Creative Commons License", - :href => sub.send(metadata), :target => "_blank", :style => "border-width:0", :title => sub.send(metadata), - :src => "https://i.creativecommons.org/l/by/4.0/88x31.png" }) do - - concat(content_tag(:img, "", { :rel => "license", :alt => "Creative Commons License", :title => sub.send(metadata), - :style => "border-width:0", :src => "https://i.creativecommons.org/l/by/4.0/88x31.png" })) - end) - end) - - elsif (sub.send(metadata).to_s.start_with?("http://opensource.org/licenses") || sub.send(metadata).start_with?("https://opensource.org/licenses")) - concat(content_tag(:td) do - concat(content_tag(:a, { :rel => "license", :alt => "Open Source License", - :href => sub.send(metadata), :title => sub.send(metadata), :target => "_blank", :style => "border-width:0;", - :src => "https://opensource.org/files/osi_logo_bold_100X133_90ppi.png" }) do - - concat(content_tag(:img, "", { :rel => "license", :alt => "Open Source License", :title => sub.send(metadata), - :style => "height: 80px; border-width:0;", :src => "https://opensource.org/files/osi_logo_bold_100X133_90ppi.png" })) - end) - end) - - else - concat(content_tag(:td) do - concat(content_tag(:a, sub.send(metadata), { :rel => "license", :href => sub.send(metadata), :target => "_blank" })) - end) - end - - elsif (metadata.to_s.eql?("endpoint") && (sub.send(metadata).start_with?("http://sparql.") || sub.send(metadata).start_with?("https://sparql."))) - concat(content_tag(:td) do - concat(content_tag(:a, { :href => sub.send(metadata), :title => sub.send(metadata), - :target => "_blank", :style => "border-width:0;" }) do - - concat(image_tag('logos/sparql_logo.png', title: sub.send(metadata), class: 'logo')) - end) - end) - - elsif sub.send(metadata).to_s.start_with?("#{$REST_URL}/ontologies/") - # For URI that links to our ontologies we display a button with only the acronym. And redirect to the UI - # Warning! Redirection is done by removing "data." from the REST_URL. So might not work perfectly everywhere - if sub.send(metadata).to_s.split("/").length < 6 - # for ontologies/ACRONYM we redirect to the UI url - concat(content_tag(:td) do - concat(content_tag(:a, sub.send(metadata).to_s.split("/")[4..-1].join("/"), { :class => "btn btn-primary", - :href => sub.send(metadata).sub("data.", ""), :target => "_blank", :title => sub.send(metadata) })) - end) - else - concat(content_tag(:td) do - concat(content_tag(:a, sub.send(metadata).to_s.split("/")[4..-1].join("/"), { :class => "btn btn-primary", - :href => sub.send(metadata), :target => "_blank", :title => sub.send(metadata) })) - end) - end - - else - if sub.send(metadata).to_s =~ /\A#{URI::regexp(['http', 'https'])}\z/ - # Don't create a link if it not an URI - concat(content_tag(:td, raw("#{sub.send(metadata).to_s}"))) - else - concat(content_tag(:td, raw(sub.send(metadata).to_s))) - end - end - end - end - end - end - end - rescue => e - LOG.add :debug, "Unable to retrieve additional ontology metadata" - LOG.add :debug, "error: #{e}" - LOG.add :debug, "error message: #{e.message}" - end - html.join("") - end - + def count_links(ont_acronym, page_name = 'summary', count = 0) ont_url = "/ontologies/#{ont_acronym}" if count.nil? || count.zero? @@ -294,29 +58,34 @@ def classes_link(ontology, count) # Creates a link based on the status of an ontology submission def download_link(submission, ontology = nil) ontology ||= @ontology + links = [] if ontology.summaryOnly if submission.homepage.nil? - link = 'N/A - metadata only' + links << {href: '', label:'N/A - metadata only'} else uri = submission.homepage - link = "Home Page" + links << {href: uri, label:'Home Page'} end else uri = submission.id + "/download?apikey=#{get_apikey}" - link = "#{submission.pretty_format}" + links << {href: uri, label:submission.pretty_format} latest = ontology.explore.latest_submission({ include_status: 'ready' }) if latest && latest.submissionId == submission.submissionId - link += " | CSV" + links << {href: "#{ontology.id}/download?apikey=#{get_apikey}&download_format=csv", label:"CSV"} if !latest.hasOntologyLanguage.eql?('UMLS') - link += " | RDF/XML" + links << {href: "#{ontology.id}/download?apikey=#{get_apikey}&download_format=rdf", label:"RDF/XML"} end end unless submission.diffFilePath.nil? uri = submission.id + "/download_diff?apikey=#{get_apikey}" - link = link + " | DIFF" + links << {href: uri, label:"DIFF"} end end - link + links + end + + def link?(string) + string.start_with?('http://') || string.start_with?('https://') end def mappings_link(ontology, count) @@ -380,6 +149,12 @@ def visibility_link(ontology) "#{link_name}" end + def show_category_name(domain) + acronym = domain.split('/').last.upcase + category = LinkedData::Client::Models::Category.find_by_acronym(acronym).first + category ? category.name : acronym + end + def visits_data(ontology = nil) ontology ||= @ontology @@ -480,7 +255,7 @@ def sections_to_show def language_selector_tag(name) languages = languages_options - if languages.empty? + if languages.empty? && @submission_latest content_tag(:div ,data: {'ontology-viewer-tabs-target': 'languageSelector'}, style: "visibility: #{ontology_data_section? ? 'visible' : 'hidden'} ; margin-bottom: -1px;") do render EditSubmissionAttributeButtonComponent.new(acronym: @ontology.acronym, submission_id: @submission_latest.submissionId, attribute: :naturalLanguage) do concat "Enable multilingual display " @@ -519,7 +294,55 @@ def dispaly_complex_text(definitions) end return html.html_safe end + def new_view_path(ont_id) + ont_id_esc = CGI.escape(ont_id) + if session[:user].nil? + "/login?redirect=#{escape("/ontologies/new?ontology[viewOf]=#{ont_id_esc}")}" + else + "/ontologies/new?ontology[viewOf]=#{ont_id_esc}" + end + end + def new_element_link(title, link) + link_to(link, title: title, class: "mx-1") do + inline_svg_tag("icons/plus.svg", width: '15px', height: '15px') + end + end + def ontology_icon_links(links, submission_latest) + links.map do |icon, attr| + value = submission_latest.nil? ? nil : submission_latest.send(attr) + + link_options = { style: "text-decoration: none; width: 30px; height: 30px" } + link_options[:class] = 'disabled-icon' if value.nil? + + link_to(inline_svg("#{icon}.svg"), Array(value).first || '', link_options) + end.join.html_safe + end + def ontology_depiction_card + return if Array(@submission_latest&.depiction).empty? + render Layout::CardComponent.new do + list_container(@submission_latest.depiction) do |depiction_url| + render Display::ImageComponent.new(src: depiction_url) + end + end + end + def metadata_formats_buttons + render SummarySectionComponent.new(title: 'Get my metadata back', show_card: false) do + content_tag :div, data: { controller: 'metadata-downloader' } do + horizontal_list_container([ + ['NQuads', 'N-Triple'], + ['JsonLd', 'Json-LD'], + ['XML', 'RDF/XML'] + ]) do |format, label| + render ChipButtonComponent.new(type: 'clickable', 'data-action': "metadata-downloader#download#{format}") do + concat content_tag(:span, label) + concat content_tag(:span, inline_svg("summary/download.svg", width: '15px', height: '15px')) + end + end + end + end + + end def count_subscriptions(ontology_id) users = LinkedData::Client::Models::User.all(include: 'subscription', display_context: false, display_links: false ) @@ -553,7 +376,7 @@ def error_message private def submission_languages(submission = @submission) - submission&.naturalLanguage.map { |natural_language| natural_language["iso639"] && natural_language.split('/').last }.compact + Array(submission&.naturalLanguage).map { |natural_language| natural_language["iso639"] && natural_language.split('/').last }.compact end end diff --git a/app/helpers/submissions_helper.rb b/app/helpers/submissions_helper.rb index ca55ce95b..2fe2408d6 100644 --- a/app/helpers/submissions_helper.rb +++ b/app/helpers/submissions_helper.rb @@ -266,7 +266,7 @@ def extractable_metadatum_tooltip(options = {}) def attribute_infos(attr_label) - @metadata.select{ |attr_hash| attr_hash["attribute"].to_s.eql?(attr_label) }.first + submission_metadata.select{ |attr_hash| attr_hash["attribute"].to_s.eql?(attr_label) }.first end def attribute_help_text(attr) @@ -481,12 +481,14 @@ def generate_attribute_input(attr_label, options = {}) end - def generate_attribute_text(attr_label , label) + def generate_attribute_text(attr_label , label, tooltip: true) attr = attribute_infos(attr_label) label_html = "
#{label}" # Generate tooltip - help_text = attribute_help_text(attr) - label_html << help_tooltip(help_text, {:id => "tooltip#{attr["attribute"]}"} ).html_safe + if tooltip + help_text = attribute_help_text(attr) + label_html << help_tooltip(help_text, {:id => "tooltip#{attr["attribute"]}"} ).html_safe + end label_html << '
' label_html.html_safe end diff --git a/app/javascript/controllers/application.js b/app/javascript/controllers/application.js index 185546806..f0624491d 100644 --- a/app/javascript/controllers/application.js +++ b/app/javascript/controllers/application.js @@ -14,6 +14,8 @@ import NestedForm from 'stimulus-rails-nested-form' application.register('nested-form', NestedForm) import ReadMore from 'stimulus-read-more' application.register('read-more', ReadMore) +import Timeago from 'stimulus-timeago' +application.register('timeago', Timeago) export { application } diff --git a/app/javascript/controllers/index.js b/app/javascript/controllers/index.js index 33e05b02d..59ac72d22 100644 --- a/app/javascript/controllers/index.js +++ b/app/javascript/controllers/index.js @@ -43,12 +43,16 @@ application.register("load-chart", LoadChartController) import MetadataDownloaderController from "./metadata_downloader_controller" application.register("metadata-downloader", MetadataDownloaderController) +import OntologyRelationsNetworkController from "./ontology_relations_network_controller" +application.register("ontology-relations-network", OntologyRelationsNetworkController) + import OntologyViewerTabsController from "./ontology_viewer_tabs_controller" application.register("ontology-viewer-tabs", OntologyViewerTabsController) import OntoportalAutocompleteController from "./ontoportal_autocomplete_controller" application.register("ontoportal-autocomplete", OntoportalAutocompleteController) + import PlatformLanguageController from "./platform_language_controller" application.register("platform-language", PlatformLanguageController) diff --git a/app/javascript/controllers/metadata_downloader_controller.js b/app/javascript/controllers/metadata_downloader_controller.js index c1f2a5b69..415b22223 100644 --- a/app/javascript/controllers/metadata_downloader_controller.js +++ b/app/javascript/controllers/metadata_downloader_controller.js @@ -57,7 +57,7 @@ export default class extends Controller { if (subJson["hasDomain"] == null) { subJson["hasDomain"] = ontJson["hasDomain"]; } else { - subJson["hasDomain"] = subJson["hasDomain"].split(", ").concat(ontJson["hasDomain"]); + subJson["hasDomain"] = subJson["hasDomain"].join(', ').split(", ").concat(ontJson["hasDomain"]); /* make the array unique: var unique = arr.filter(function(elem, index, self) { return index == self.indexOf(elem); diff --git a/app/javascript/controllers/ontology_relations_network_controller.js b/app/javascript/controllers/ontology_relations_network_controller.js new file mode 100644 index 000000000..7043a8384 --- /dev/null +++ b/app/javascript/controllers/ontology_relations_network_controller.js @@ -0,0 +1,169 @@ +import {Controller} from "@hotwired/stimulus" +import { Network, DataSet } from 'vis-network/standalone/esm/vis-network.min.js'; + +// Connects to data-controller="ontology-relations-network" +export default class extends Controller { + static values = { + data: Array + } + + static targets = ["container"] + + connect() { + this.build() + } + + + build(){ + this.#buildNetwork(this.dataValue); + } + /** + * Build the VIS network for ontologies relations: http://visjs.org/docs/network/ + * @param ontologyRelationsArray + */ + #buildNetwork(ontologyRelationsArray) { + const nodes = new DataSet([]) + // create an array with edges + const edges = new DataSet(); + + let propertyCount = 1; // To define nodes IDs + + // Hash with nodes id for each ontology URI + let nodeIds = {}; + + /* Get the relations that have been selected + if (jQuery("#selected_relations").val() !== null) { + selected_relations = jQuery("#selected_relations").val() + }*/ + + let selected_relations = []; + this.relationCheckTargets = Array.from(this.element.querySelectorAll('option')) + this.relationCheckTargets.forEach((elem) => { + if (elem.selected) { + selected_relations.push(elem.value); + } + }) + + ontologyRelationsArray.forEach((relation) => { + let targetNodeNumber + let sourceNodeNumber + + // If relations have been selected for filtering then we don't show others relations + if (!selected_relations.includes(relation["relation"])) { + return + } + + // Don't create a new node if node exist already, just add a new edge + if ( nodeIds[relation["source"]] != null) { + sourceNodeNumber = nodeIds[relation["source"]]; + } else { + sourceNodeNumber = propertyCount; + // If the node is the source it means it is from the Portal, so we colorate it in green + nodes.add([ + {id: sourceNodeNumber, label: relation["source"], color: "#5cb85c"} + ]); + nodeIds[relation["source"]] = propertyCount; + propertyCount++; + } + + // Create the target node if don't exist + if (nodeIds[relation["target"]] != null) { + targetNodeNumber = nodeIds[relation["target"]]; + } else { + targetNodeNumber = propertyCount; + // If target node is an ontology from the portal then node in green + if (relation["targetInPortal"]) { + nodes.add([ + {id: targetNodeNumber, label: relation["target"], color: "#5cb85c"} + ]); + } else { + nodes.add([ + {id: targetNodeNumber, label: relation["target"]} + ]); + } + nodeIds[relation["target"]] = propertyCount; + propertyCount++; + } + + edges.add([ + { + from: sourceNodeNumber, + to: targetNodeNumber, + label: relation["relation"], + font: {align: 'horizontal'} + } + ]); + }) + + + + // create a network + const container = this.containerTarget; + // provide the data in the vis format + + const data = { + nodes: nodes, + edges: edges + }; + + // Get height of div + const networkHeight = container.clientHeight.toString(); + + const options = { + autoResize: true, + height: networkHeight, + groups: { + useDefaultGroups: true, + myGroupId: { + /*node options*/ + } + }, + edges: { + color: {inherit: 'both'}, + smooth: { + enabled: true, + type: "dynamic", + roundness: 0.5 + } + }, + nodes: { + shape: "box" + }, + physics: { + // http://visjs.org/docs/network/physics.html + enabled: true, + // To stabilize faster, increase the minVelocity value + minVelocity: 1, + stabilization: { + enabled: true, + onlyDynamicEdges: false, + fit: true + }, + barnesHut: { + gravitationalConstant: -1500, + centralGravity: 0, + springLength: 300, + springConstant: 0.01, + damping: 0.2, + avoidOverlap: 0.2 + }, + hierarchicalRepulsion: { // not used at the moment + centralGravity: 0.0, + springLength: 500, + springConstant: 0.2, + damping: 1, + nodeDistance: 170 + }, + solver: 'barnesHut' + }, + interaction: { + zoomView: false, + navigationButtons: true + } + }; + + // initialize your network! + const network = new Network(container, data, options); + network.fit(); + } +} diff --git a/app/javascript/controllers/tooltip_controller.js b/app/javascript/controllers/tooltip_controller.js index f9bc3ca02..49bf93eee 100644 --- a/app/javascript/controllers/tooltip_controller.js +++ b/app/javascript/controllers/tooltip_controller.js @@ -4,6 +4,8 @@ import useTooltip from "../mixins/useTooltip"; // Connects to data-controller="tooltip" export default class extends Controller { connect() { - useTooltip(this.element) + if(this.element.title && this.element.title !== ''){ + useTooltip(this.element) + } } } diff --git a/app/views/fair_score/_fair_service_header.html.haml b/app/views/fair_score/_fair_service_header.html.haml index 61321623d..f462f97dc 100644 --- a/app/views/fair_score/_fair_service_header.html.haml +++ b/app/views/fair_score/_fair_service_header.html.haml @@ -1,10 +1,9 @@ %span %span - FAIR Scores %span.badge.badge-pill.badge-secondary beta %span = link_to("https://github.com/agroportal/fairness", target: "_blank", "aria-label": t("view_fair_scores_definitions"), title: t("view_fair_scores_definitions")) do - %i.fas.fa-lg.fa-question-circle{"aria-hidden": "true", style: "margin-left: 0.5rem"} + %i.fas.fa-question-circle{"aria-hidden": "true", style: "margin-left: 0.5rem"} = link_to(get_fairness_service_url,id: "fairness-service-url", target: "_blank", "aria-label": t("get_json_version"), title: t("get_json_version")) do - %i.fas.fa-lg.fa-code{"aria-hidden": "true", style: "margin-left: 0.5rem" } \ No newline at end of file + %i.fas.fa-code{"aria-hidden": "true", style: "margin-left: 0.5rem" } \ No newline at end of file diff --git a/app/views/home/index.html.haml b/app/views/home/index.html.haml index 248c0f115..6461297cb 100644 --- a/app/views/home/index.html.haml +++ b/app/views/home/index.html.haml @@ -22,24 +22,24 @@ .home-bubble.home-bubble-one %h5 = @anal_ont_names[0] - %p + %p = @anal_ont_numbers[0].to_s + " visits" .home-bubble.home-bubble-two %h5 = @anal_ont_names[1] - %p + %p = @anal_ont_numbers[1].to_s + " visits" .home-bubble.home-bubble-three %h5 = @anal_ont_names[2] - %p + %p = @anal_ont_numbers[2].to_s + " visits" %a.home-bubble.home-bubble-four{:href => "/visits"} %h5 ... .home-header-title-container .home-header-title - %h4 + %h4 = t('.welcome', site: $SITE) %p = t('.tagline') @@ -91,10 +91,10 @@ - if fairness_service_enabled? %div#fair-home{data:{controller:"fair-score-home"}} = render partial: "shared/fair_score_bars", locals: {data: nil} - %a{:href => "#fairDetails"} - %div.home-fair-details - %p See details - = inline_svg_tag "arrow-right.svg" + %a{:href => "#fairDetails"} + %div.home-fair-details + %p See details + = inline_svg_tag "arrow-right.svg" .home-sub-section-right %h4 News %hr.home-section-line @@ -106,13 +106,13 @@ .home-statistics-container .home-agroportal-figures = inline_svg_tag "ontoportal-icon.svg" - %p + %p = portal_name+" in figures:" .home-statistics .home-statistics-item %hr/ %div - %h4 + %h4 = number_with_delimiter(@ont_count, :delimiter => ",") %p Ontologies .home-statistics-item diff --git a/app/views/layouts/appliance.html.haml b/app/views/layouts/appliance.html.haml index 5794e4865..d99cfaac7 100644 --- a/app/views/layouts/appliance.html.haml +++ b/app/views/layouts/appliance.html.haml @@ -28,7 +28,7 @@ %body{:class => "#{controller_name} #{action_name}"} = render partial: "layouts/topnav" - %div.container-fluid.flex-grow-1 + %div.flex-grow-1 = render partial: "layouts/notices" = modal_frame_container diff --git a/app/views/layouts/ontology_viewer/_header.html.haml b/app/views/layouts/ontology_viewer/_header.html.haml index 41173aaf9..30474e193 100644 --- a/app/views/layouts/ontology_viewer/_header.html.haml +++ b/app/views/layouts/ontology_viewer/_header.html.haml @@ -15,13 +15,13 @@ = @ontology.name %span = "("+ @ontology.acronym+")" - - unless sub.hasLicense.nil? + - unless sub.nil? || sub.hasLicense.nil? = render ChipButtonComponent.new(class: 'chip_button_small') do = link_to_modal(nil, "/ajax/submission/show_licenses/#{@ontology.acronym}",data: { show_modal_title_value: "More licenses", show_modal_size_value: 'modal-xl' }) do = attribute_enforced_values('hasLicense')[sub.hasLicense] || sub.hasLicense = inline_svg_tag "icons/popup-link.svg" - - unless sub.creationDate.nil? + - unless sub.nil? || sub.creationDate.nil? .ontology-details-last-update %img{src: asset_path("update.svg")}/ %div diff --git a/app/views/ontologies/_fairs_score.html.haml b/app/views/ontologies/_fairs_score.html.haml index 26a98885c..95602dc6a 100644 --- a/app/views/ontologies/_fairs_score.html.haml +++ b/app/views/ontologies/_fairs_score.html.haml @@ -6,17 +6,18 @@ }) - if @fair_scores_data - - text = "Total score : #{@fair_scores_data[:score]} ( #{@fair_scores_data[:normalizedScore]}% ) details" - = link_to_modal(text.html_safe, - "/ajax/fair_score/html/?ontologies=#{@ontology.acronym}", - class: "btn btn-primary w-100", - data: { show_modal_title_value: "FAIRness assessment questions", show_modal_size_value: 'modal-xl' }, - ) - %div.statistics_container{data:{controller:"fair-score-summary"}} - %div + %div.statistics_container.d-flex.flex-grow-1{data:{controller:"fair-score-summary"}} + %div.w-50 = render partial: "shared/fair_score_radar" , locals: {data: @fair_scores_data} - %div + %div.w-50 = render partial: "shared/fair_score_bars" , locals: {data: @fair_scores_data} + %div.text-center + - text = " See details" + = link_to_modal(text.html_safe, + "/ajax/fair_score/html/?ontologies=#{@ontology.acronym}", + class: "btn", + data: { show_modal_title_value: "FAIRness assessment questions", show_modal_size_value: 'modal-xl' }, + ) - else %p.font-italic= "We are still collecting data for #{@ontology.acronym}" diff --git a/app/views/ontologies/_ontology_views.html.haml b/app/views/ontologies/_ontology_views.html.haml new file mode 100644 index 000000000..b500e0346 --- /dev/null +++ b/app/views/ontologies/_ontology_views.html.haml @@ -0,0 +1,8 @@ +- if @views.empty? + = empty_state_message "No views of #{@ontology.acronym} available" +- else + %div.border-top + %dl + - @view_decorators.each do |view_decorator| + %dt= view_decorator.linked_name + %dd= view_decorator.description \ No newline at end of file diff --git a/app/views/ontologies/_visits.html.haml b/app/views/ontologies/_visits.html.haml index bb2420bb2..13266ac02 100644 --- a/app/views/ontologies/_visits.html.haml +++ b/app/views/ontologies/_visits.html.haml @@ -2,4 +2,4 @@ %canvas#visits_chart{data: {controller:'load-chart' , 'load-chart-labels-value': @visits_data[:labels].last(13), 'load-chart-datasets-value': visits_chart_dataset(@visits_data[:visits].last(13))}} - else - %p.font-italic= "We are still collecting data for #{@ontology.acronym}" + = empty_state_message "We are still collecting data for #{@ontology.acronym}" diff --git a/app/views/ontologies/sections/_additional_metadata.html.haml b/app/views/ontologies/sections/_additional_metadata.html.haml new file mode 100644 index 000000000..0054b4c76 --- /dev/null +++ b/app/views/ontologies/sections/_additional_metadata.html.haml @@ -0,0 +1,18 @@ += turbo_frame_tag 'application_modal_content' do + - sub_hash = @submission_latest.to_hash.except(:context, :links, :ontology) + %div.card.overflow-hidden{style: 'border-radius: 20px;'} + %div + = render Display::AlertComponent.new(closable: false) do + %div.d-flex.align-items-center + %div{style:'width: 50px; height: 50px'} + - sub_values = sub_hash.values + - count = sub_values.count{|x| !(x.nil? || x.to_s.empty?)} + = render CircleProgressBarComponent.new(count: count , max: sub_values.size ) + %div.mx-1 + of the metadata attributes were filled + %section.px-4{style:'height: 70vh; overflow-y: scroll'} + = render SubmissionMetadataComponent.new(submission: @submission_latest, submission_metadata: submission_metadata) unless @submission_latest.nil? + %div.scroll-message.text-center.py-3.bg-light.text-primary + %p.scroll-text.mb-0 + Scroll down to see more + %i.scroll-icon.fa.fa-chevron-down diff --git a/app/views/ontologies/sections/_licenses.html.haml b/app/views/ontologies/sections/_licenses.html.haml index b9899f6dd..e966e7608 100644 --- a/app/views/ontologies/sections/_licenses.html.haml +++ b/app/views/ontologies/sections/_licenses.html.haml @@ -1,10 +1,3 @@ -= turbo_frame_tag 'application_modal_content' do - - @licenses.each do |attribute| - - attr = attribute_infos(attribute) - - value = Array(@submission_latest.send(attribute)) - .creation_info - %p.description_text - = attr["label"] || attribute - %p.normal_text - = value.join(", ") - += render_in_modal do + = render Layout::ListComponent.new do |l| + = properties_list_component(l, @licenses.map { |x| [x.to_s, @submission_latest.send(x.to_s)] }.to_h) diff --git a/app/views/ontologies/sections/_metadata.html.haml b/app/views/ontologies/sections/_metadata.html.haml old mode 100644 new mode 100755 index 655e20bf1..3b575d5b5 --- a/app/views/ontologies/sections/_metadata.html.haml +++ b/app/views/ontologies/sections/_metadata.html.haml @@ -1,189 +1,66 @@ = turbo_frame_tag 'summary', target:"_top" do - %div.ont-metadata - -# Details pane - %section.ont-metadata-card.ont-details-card - %header.pb-2.font-weight-bold= t('ontology_details.metadata.details') - %table.table.table-sm - %tr - %td= t('ontology_details.metadata.acronym') - %td= @ontology.acronym - %tr - %td= t('ontology_details.metadata.visibility') - %td= strip_links(visibility_link(@ontology)) - - if @ontology.viewing_restricted? - %tr - %td= t('ontology_details.metadata.viewing_restriction') - %td= @ontology.viewingRestriction.capitalize - - unless @ontology.viewOf.nil? - %tr - %td= t('ontology_details.metadata.view_of_ontology') - %td - - ont_parent_acronym = @ontology.viewOf.split('/').last - - if $PURL_ENABLED - - ont_url = @ontology.purl.sub(@ontology.acronym, ont_parent_acronym) - - else - - ont_url = @ontology.links['ui'].sub(@ontology.acronym, ont_parent_acronym) - = link_to(ont_parent_acronym, ont_url) - - unless @submission_latest.nil? - %tr - %td= t('ontology_details.metadata.description') - %td= sanitize(@submission_latest.description) - %tr - %td= t('ontology_details.metadata.status') - %td= @submission_latest.status.capitalize unless @submission_latest.status.nil? - %tr - %td= t('ontology_details.metadata.format') - %td= @submission_latest.hasOntologyLanguage - %tr - %td= t('ontology_details.metadata.contact') - %td= raw @submission_latest.contact.map {|c| [c.name, c.email].join(", ") if c.member?(:name) && c.member?(:email)}.join("
") - - categories_hash = LinkedData::Client::Models::Category.all_to_hash - - categories = @ontology.hasDomain - - unless categories.empty? - %tr - %td= t('ontology_details.metadata.categories') - %td= categories.map {|c| categories_hash[c].name}.sort.join(", ") - - groups_hash = LinkedData::Client::Models::Group.all_to_hash - - groups = @ontology.group - - unless groups.empty? - %tr - %td= t('ontology_details.metadata.groups') - %td= groups.map {|g| groups_hash[g].name}.sort.join(", ") - - if @ontology.admin?(session[:user]) - %tr - %td= t('ontology_details.metadata.pull_url') - %td - = link_to @submission_latest.pullLocation, @submission_latest.pullLocation - = raw additional_details + .summary-page-center + .summary-page-first-row + = render partial: 'ontologies/sections/metadata/ontology_description_section' + = render partial: 'ontologies/sections/metadata/ontology_fairness_section' + = render partial: 'ontologies/sections/metadata/ontology_relations_network' + = render partial: 'ontologies/sections/metadata/ontology_submissions_section' + = render partial: 'ontologies/sections/metadata/ontology_metrics_section' + .summary-page-second-row + = ontology_depiction_card + = properties_card('Identifiers','Principal identifiers of the ontology', @identifiers) do |values| + = horizontal_list_container(values) do |v| + = render LinkFieldComponent.new(value: v) - = render partial: 'additional_metadata' + = properties_dropdown('dates','Dates','', @dates_properties) do |values| + = horizontal_list_container(values) do |v| + = render DateTimeFieldComponent.new(value: v) - -# Submissions pane - %section.ont-metadata-card.ont-subs-card - %div.ont-section-toolbar - %header.pb-2.font-weight-bold= t('ontology_details.metadata.submissions') - - if @ontology.admin?(session[:user]) - = link_to(new_ontology_submission_path(@ontology.acronym), "aria-label": t('ontology_details.metadata.add_submission'), title: t('ontology_details.metadata.add_submission')) do - %i.fas.fa-lg.fa-plus-circle{"aria-hidden": "true", style: "margin-left: 0.75rem;"} - - unless (@submission_latest.nil? || (@submission_latest.respond_to?(:status) && @submission_latest.status == 404)) - = link_to(edit_ontology_submission_path(@ontology.acronym, @submission_latest.submissionId), "aria-label": t('ontology_details.metadata.edit_latest_submission'), title: t('ontology_details.metadata.edit_latest_submission')) do - %i.fas.fa-user-edit{"aria-hidden": "true", style: "margin-left: 0.5rem;"} - = render TurboFrameComponent.new(id: 'ontology_submissions', src: ontology_submissions_path(@ontology.acronym), target: '_top') + = properties_dropdown('person_and_organization','Persons and organizations','', @agents_properties) do |values| + = horizontal_list_container(values) do |v| + = render ChipButtonComponent.new(type: "static",'data-controller':' tooltip', title: '', class: 'text-truncate', style: 'max-width: 280px; display:block; line-height: unset') do + = display_agent(v, link: false) + = properties_dropdown('link','Links','Metadata properties that highlight the links enabling access to datasets, downloading semantic resources, etc', @links_properties) - -# Views pane (don't show if the ontology is a view - we don't allow views of views). - - unless @ontology.view? - %section.ont-metadata-card.ont-views-card - %div.ont-section-toolbar - %header.pb-2.font-weight-bold= "#{t('ontology_details.metadata.views_of')} #{@ontology.acronym}" - - ont_id_esc = CGI.escape(@ontology.id) - -# TODO: I don't think we should have brackets in the URL parameters. - - if session[:user].nil? - %a{href: "/login?redirect=#{escape("/ontologies/new?ontology[viewOf]=#{ont_id_esc}")}", "aria-label": t('ontology_details.metadata.create_new_view'), title: t('ontology_details.metadata.create_new_view')} - %i.fas.fa-lg.fa-plus-circle{"aria-hidden": "true", style: "margin-left: 0.5rem;"} - - else - %a{href: "/ontologies/new?ontology[viewOf]=#{ont_id_esc}"} - %i.fas.fa-lg.fa-plus-circle{"aria-hidden": "true", style: "margin-left: 0.5rem;"} - - if @views.empty? - %p.font-italic= t('ontology_details.metadata.no_views_of', name: @ontology.acronym) - - else - %div.border-top - %dl - - @view_decorators.each do |view_decorator| - %dt= view_decorator.linked_name - %dd= view_decorator.description + = properties_dropdown('projects_section','Projects and usage information','Details pertaining to the utilization of the ontology.', nil) do |c| + - c.row do + = render FieldContainerComponent.new do |f| + - f.label do + Projects using #{@ontology.acronym} + = new_element_link('Create new project', new_project_path) - %div.right-hand-content + - if @projects.empty? + = empty_state_message("No projects using #{@ontology.acronym}") + - else + = horizontal_list_container(@projects) do |project| + = render ChipButtonComponent.new(url: project_path(project.acronym), text: project.name, type: "clickable") + - properties_list_component(c, @projects_properties) - -# Misc links pane - %section.ont-metadata-card.ont-links-card - %div.ont-section-toolbar - %header.pb-2.font-weight-bold= t('ontology_details.metadata.links') - %a{:href => "#{(@submission_latest || @ontology).id}?display=all", :target => '_blank', :class => "btn btn-primary"}= t('ontology_details.metadata.go_to_rest_api_json_entry') + = properties_dropdown('methodology','Methodology', 'Metadata properties primarily encompass the design, methods, and actions to create the ontology. This includes elements such as the tools and software employed by the creator of the ontology during its configuration', @methodology_properties) - -# Metadata links pane - %section.ont-metadata-card.ont-metadatalinks-card - %div.ont-section-toolbar - %header.pb-2.font-weight-bold= t('ontology_details.metadata.get_my_metadata_back') - %div - - unless @submission_latest.nil? - %div{data:{controller: 'metadata-downloader'}} - =javascript_include_tag "jsonld" - %button{:id => "getMetadataBackNquadsBtn", :class => "btn btn-primary", 'data-action': 'metadata-downloader#downloadNQuads'}= t('ontology_details.metadata.n_triple') - %button{:id => "getMetadataBackJsonldBtn", :class => "btn btn-primary", 'data-action': 'metadata-downloader#downloadJsonLd'}= t('ontology_details.metadata.json_ld') - %button{:id => "getMetadataBackXmlBtn", :class => "btn btn-primary", 'data-action': 'metadata-downloader#downloadXML'}= t('ontology_details.metadata.rdf_xml') - -# Listener in bp_ontology_viewer.js.erb - -# Fair score pane - -# TODO temporary hide fairness_service for AGROVOC after there demand - - if fairness_service_enabled? && @ontology.acronym != 'AGROVOC' - %section.ont-metadata-card.ont-fair-score-card#fair-summary - %div.ont-section-toolbar - %header.pb-2.font-weight-bold - = render partial: "fair_score/fair_service_header" - %div#fair-score-charts-container - = render partial: "fairs_score" + = render Layout::CardComponent.new do |c| + - c.header do |h| + - h.text do + Visits + - if visits_data(@ontology) + = link_to(@ontology.links["analytics"] + "?apikey=#{get_apikey}&format=csv", title: "Download as CSV") do + = inline_svg("summary/download.svg", width: '30px', height: '20px') - -# Metrics pane - %section.ont-metadata-card.ont-metrics-card - %div.ont-section-toolbar - %header.pb-2.font-weight-bold= t('ontology_details.metadata.metrics') - = link_to(Rails.configuration.settings.links[:metrics], target: "_blank", "aria-label": t('ontology_details.metadata.view_individual_metrics_definitions'), title: t('ontology_details.metadata.view_individual_metrics_definitions')) do - %i.fas.fa-lg.fa-question-circle{"aria-hidden": "true", style: "margin-left: 0.5rem"} - - if @metrics.nil? || (@metrics.is_a?(Array) && @metrics.empty?) || (@metrics.respond_to?(:status) && @metrics.status == 404) - %p.font-italic= "#{t('ontology_details.metadata.metrics_not_calculated_yet')} #{@ontology.acronym}" - - else - %table.table.table-sm - %tr - %td= t('ontology_details.metadata.classes') - %td{style: "text-align: right"}= number_with_delimiter(@metrics.classes) - %tr - %td= t('ontology_details.metadata.individuals') - %td= number_with_delimiter(@metrics.individuals) - %tr - %td= t('ontology_details.metadata.properties') - %td= number_with_delimiter(@metrics.properties) - %tr - %td= t('ontology_details.metadata.max_depth') - %td= number_with_delimiter(@metrics.maxDepth) - %tr - %td= t('ontology_details.metadata.max_children') - %td= number_with_delimiter(@metrics.maxChildCount) - %tr - %td= t('ontology_details.metadata.avg_children') - %td= number_with_delimiter(@metrics.averageChildCount) - %tr - %td= t('ontology_details.metadata.single_child_classes') - %td= number_with_delimiter(@metrics.classesWithOneChild) - %tr - %td= t('ontology_details.metadata.many_children_classes') - %td= number_with_delimiter(@metrics.classesWithMoreThan25Children) - %tr - %td= t('ontology_details.metadata.no_definition_classes') - %td= number_with_delimiter(@metrics.classesWithNoDefinition) - -# Visits pane - %section.ont-metadata-card.ont-analytics-card - %div.ont-section-toolbar - %header.pb-2.font-weight-bold= t('ontology_details.metadata.visits') - - if visits_data(@ontology) - = link_to(@ontology.links["analytics"] + "?apikey=#{get_apikey}&format=csv", "aria-label": t('ontology_details.metadata.download_as_csv'), title: t('ontology_details.metadata.download_as_csv')) do - %i.fas.fa-lg.fa-download{"aria-hidden": "true", style: "margin-left: 0.5rem"} - = render partial: "visits" + = render Layout::ListComponent.new do |l| + - l.row do + = render partial: "visits" - -# Included in data catalog pane - = raw display_data_catalog(@submission_latest) unless @submission_latest.nil? - -# Logo & depiction - = raw display_logo(@submission_latest) unless @submission_latest.nil? - - -# Projects pane - %section.ont-metadata-card.ont-projects-card - %div.ont-section-toolbar - %header.pb-2.font-weight-bold= "#{t('ontology_details.metadata.projects_using')} #{@ontology.acronym}" - = link_to(new_project_path(), "aria-label": t('ontology_details.metadata.create_new_project'), title: t('ontology_details.metadata.create_new_project')) do - %i.fas.fa-lg.fa-plus-circle{"aria-hidden": "true", style: "margin-left: 0.5rem"} - - if @projects.empty? - %p.font-italic= "#{t('ontology_details.metadata.no_projects_using')} #{@ontology.acronym}" - - else - %div.border-top - - for project in @projects - %p= link_to(project.name, project_path(project.acronym)) + - unless @ontology.view? + = render Layout::CardComponent.new do |d| + - d.header do |h| + - h.text do + Views of #{@ontology.acronym} + = new_element_link('Create new view', new_view_path(@ontology.id)) + = render Layout::ListComponent.new do |l| + - l.row do + = render partial: 'ontology_views' + - unless @submission_latest.nil? + = javascript_include_tag("jsonld") + = metadata_formats_buttons \ No newline at end of file diff --git a/app/views/ontologies/sections/metadata/_metrics_evolution_graph.html.haml b/app/views/ontologies/sections/metadata/_metrics_evolution_graph.html.haml new file mode 100644 index 000000000..a8791f2da --- /dev/null +++ b/app/views/ontologies/sections/metadata/_metrics_evolution_graph.html.haml @@ -0,0 +1,26 @@ += turbo_frame_tag 'application_modal_content' do + %canvas#metrics_evolution_chart + :javascript + + var metrics = #{raw data.to_json}; + var key = Object.entries(metrics)[0][0] + var numbers = Object.entries(metrics)[0][1] + + // Create a line chart + var ctx = document.getElementById('metrics_evolution_chart').getContext('2d'); + console.log(key, numbers) + var metricsChart = new Chart(ctx, { + type: 'line', + data: { + labels: numbers.map((_, index) => `Submission ${index + 1}`), + datasets: [ + { + label: key, + data: numbers, + borderColor: 'rgba(75, 192, 192, 1)', + backgroundColor: 'rgba(75, 192, 192, 0.2)', + } + ] + }, + options: {} + }) \ No newline at end of file diff --git a/app/views/ontologies/sections/metadata/_ontology_description_section.html.haml b/app/views/ontologies/sections/metadata/_ontology_description_section.html.haml new file mode 100644 index 000000000..4fc4c21c7 --- /dev/null +++ b/app/views/ontologies/sections/metadata/_ontology_description_section.html.haml @@ -0,0 +1,53 @@ += render Layout::CardComponent.new do |c| + - c.header(text: 'General information') + = render Layout::ListComponent.new do |l| + - l.row do + .d-flex.align-items-center + .description_text + = render TextAreaFieldComponent.new(value: @submission_latest&.description) + - unless @submission_latest&.logo.nil? + = image_tag(@submission_latest&.logo, class: 'description_img') + - l.row do + %span.creation_text + - if @submission_latest&.released + Initial release occurred on + %span.date_creation_text= l(Date.parse(@submission_latest.released), format: :monthfull_day_year) + '.' + - if @submission_latest&.contact + For additional information, reach out + %span.creator_text + = display_contact(@submission_latest.contact) + + - unless Array(@submission_latest&.naturalLanguage).empty? + - l.row do + = render FieldContainerComponent.new(label: 'Languages') do + = horizontal_list_container(Array(@submission_latest&.naturalLanguage)) do |v| + = render LanguageFieldComponent.new(value: v) + + - if @ontology.admin?(session[:user]) && @submission_latest&.pullLocation + - l.row do + = render FieldContainerComponent.new(label: 'Pull location') do + = horizontal_list_container([@submission_latest&.pullLocation]) do |v| + = render LinkFieldComponent.new(value: v) + - unless Array(@submission_latest&.keywords).empty? && Array(@submission_latest&.keyClasses).empty? + - l.row do + = render FieldContainerComponent.new(label: 'Keywords and classes') do + - values = (Array(@submission_latest&.keywords) + Array(@submission_latest&.keyClasses)) + - values = values.map{|x| x.split(',')}.flatten + = horizontal_list_container(values) do |v| + - if link?(v) + = raw get_link_for_cls_ajax(v, @ontology.acronym, '_blank') + - else + = render ChipButtonComponent.new(text: v, type: "static") + + - unless Array(@ontology.hasDomain).empty? + - l.row do + = render FieldContainerComponent.new(label: 'Categories and subjects') do + = horizontal_list_container(@ontology.hasDomain) do |v| + = render ChipButtonComponent.new(text: show_category_name(v), type: "static") + + %hr.w-100.my-3 + .icons_container + = ontology_icon_links(@ontology_icon_links, @submission_latest) + %hr.w-100.my-3 + %div.text-center.pb-3 + = link_to_modal('See all metadata...', "/ajax/submission/show_additional_metadata/#{@ontology.acronym}",data: { show_modal_title_value: "All metadata properties", show_modal_size_value: 'modal-xl' }) \ No newline at end of file diff --git a/app/views/ontologies/sections/metadata/_ontology_fairness_section.html.haml b/app/views/ontologies/sections/metadata/_ontology_fairness_section.html.haml new file mode 100644 index 000000000..550776961 --- /dev/null +++ b/app/views/ontologies/sections/metadata/_ontology_fairness_section.html.haml @@ -0,0 +1,15 @@ +- if fairness_service_enabled? && @ontology.acronym != 'AGROVOC' && @fair_scores_data + = render SummarySectionComponent.new(title: 'FAIR score') do |s| + - s.action_link do + = render partial: "fair_score/fair_service_header" + + %div.p-2 + %section.ont-metadata-card.ont-fair-score-card#fair-summary + %div.ont-section-toolbar.justify-content-between.flex-row-reverse + %div.align-items-start + .btn.btn-primary.rounded-pill.right-button + .span Total score : #{@fair_scores_data[:score]} ( #{@fair_scores_data[:normalizedScore]}% ) + + %div#fair-score-charts-container + = render partial: "fairs_score" + .account-page-card-sub-container \ No newline at end of file diff --git a/app/views/ontologies/sections/metadata/_ontology_metrics_section.html.haml b/app/views/ontologies/sections/metadata/_ontology_metrics_section.html.haml new file mode 100644 index 000000000..ffe69f38d --- /dev/null +++ b/app/views/ontologies/sections/metadata/_ontology_metrics_section.html.haml @@ -0,0 +1,15 @@ += render SummarySectionComponent.new(title: "Metrics" , link: Rails.configuration.settings.links[:metrics], link_title: "Metadata properties that provide information about measurements of the ontology, such as the number of classes, individuals, etc.", show_card: false) do + - if @metrics.nil? || (@metrics.is_a?(Array) && @metrics.empty?) || (@metrics.respond_to?(:status) && @metrics.status == 404) + = empty_state_message("We have not yet calculated metrics for #{@ontology.acronym}") + - else + .metrics-container.metrics + - %w[classes individuals properties].each do |metric| + = link_to_modal nil, ontology_path(@ontology.acronym) + "/metrics_evolution?metrics_key=#{metric}", + class: "metrics-item", data: { show_modal_title_value: "Metrics evolution of #{@ontology.acronym}"} do + %hr + %div + %h4 + = @metrics.send(metric) + %p + = render PopupLinkTextComponent.new(text: metric.humanize) + diff --git a/app/views/ontologies/sections/metadata/_ontology_relations_network.html.haml b/app/views/ontologies/sections/metadata/_ontology_relations_network.html.haml new file mode 100644 index 000000000..3064d1a8d --- /dev/null +++ b/app/views/ontologies/sections/metadata/_ontology_relations_network.html.haml @@ -0,0 +1,13 @@ +- unless @ontology_relations_data.nil? || @ontology_relations_data.empty? + = render SummarySectionComponent.new(title: 'Ontology relations network') do + %div.d-flex.flex-column.justify-content-center{data: {controller: "ontology-relations-network", "ontology-relations-network-data-value": @ontology_relations_data.to_json.html_safe }} + %button.btn.btn-link.m-2{'data-toggle': "collapse",'data-target': "#ontologyRelations"} + %span= t("landscape.filter_network") + %i.fas.fa-chevron-down + %div#ontologyRelations.collapse.flex-row.flex-wrap.px-2.my-1.fade{'data-action': "change->ontology-relations-network#build"} + - values = @relations_array.map{|relation| ["#{attr_label(relation.split(':').last)}(#{relation})", relation]} + = render SelectInputComponent.new(id:'relation-network', name: 'selectedRelations[]', values: values, selected:@relations_array , multiple: true) + + %div{:style => "width: 100%;"} + %div#networkContainer{:style => "height: 465px; width: 100%;", "data-ontology-relations-network-target": "container" } + %div#ontologyNetwork \ No newline at end of file diff --git a/app/views/ontologies/sections/metadata/_ontology_submissions_section.html.haml b/app/views/ontologies/sections/metadata/_ontology_submissions_section.html.haml new file mode 100644 index 000000000..1f90304f5 --- /dev/null +++ b/app/views/ontologies/sections/metadata/_ontology_submissions_section.html.haml @@ -0,0 +1,10 @@ += render SummarySectionComponent.new(title: 'Submissions') do |s| + - if @ontology.admin?(session[:user]) + - s.action_link do + = link_to(new_ontology_submission_path(@ontology.acronym), "aria-label": "Add submission", title: "Add submission") do + %i.fas.fa-plus-circle + - unless @submission_latest.nil? || (@submission_latest.respond_to?(:status) && @submission_latest.status == 404) + - s.action_link do + = link_to(edit_ontology_submission_path(@ontology.acronym, @submission_latest.submissionId), "aria-label": "Edit latest submission", title: "Edit latest submission") do + %i.fas.fa-user-edit + = render TurboFrameComponent.new(id: 'ontology_submissions', src: ontology_submissions_path(@ontology.acronym)) \ No newline at end of file diff --git a/app/views/submissions/_form_content.html.haml b/app/views/submissions/_form_content.html.haml index 695a941b0..7ff7806a9 100644 --- a/app/views/submissions/_form_content.html.haml +++ b/app/views/submissions/_form_content.html.haml @@ -83,7 +83,7 @@ - data.each do |d| = metadata_section(d[0], d[1], parent_id: "description-card") do - - for attr in @metadata.select { |m| m['display'] == d[2] } + - for attr in submission_metadata.select { |m| m['category'] == d[2] } = form_group_attribute(attr["attribute"]) %div#ontology-dates-card.mt-4 @@ -91,7 +91,7 @@ = form_group_attribute("released", default: Date.today, required: true) = form_group_attribute("modificationDate") = metadata_section('more-dates', 'More dates', parent_id: "ontology-dates-card") do - - for attr in @metadata.select { |m| m['display'] == 'dates' } + - for attr in submission_metadata.select { |m| m['category'] == 'dates' } = form_group_attribute(attr["attribute"]) %div#licenses-card.mt-4 @@ -106,7 +106,7 @@ to choose your license = metadata_section('more-licensing-info', 'More licensing information', parent_id: "licenses-card") do - - for attr in @metadata.select { |m| m['display'] == 'license' } + - for attr in submission_metadata.select { |m| m['category'] == 'license' } = form_group_attribute(attr["attribute"]) %div#community.mt-4 @@ -128,11 +128,11 @@ = form_group_attribute("hasCreator") = metadata_section('more-community-info', 'More community information', parent_id: "community") do - - for attr in @metadata.select { |m| m['display'] == 'community' } + - for attr in submission_metadata.select { |m| m['category'] == 'community' } = form_group_attribute(attr["attribute"]) = metadata_section('more-people-info', 'More people information', parent_id: "community") do - - for attr in @metadata.select { |m| m['display'] == 'people' } + - for attr in submission_metadata.select { |m| m['category'] == 'people' } = form_group_attribute(attr["attribute"]) %div#ontology-relations-more.mt-4 @@ -142,9 +142,10 @@ = form_group_attribute("isAlignedTo") = form_group_attribute("ontologyRelatedTo") + = metadata_section('more-relations', 'More relations', parent_id: "ontology-relations-more") do - - for attr in @metadata - - if attr["display"].eql?("relations") + - for attr in submission_metadata + - if attr["category"].eql?("relations") = form_group_attribute(attr["attribute"]) %div#ontology-content-metrics.mt-4 @@ -152,10 +153,11 @@ = form_group_attribute("preferredNamespacePrefix") = form_group_attribute("preferredNamespaceUri") - = metadata_section('more-informations', 'More content informations', parent_id: "ontology-content-metrics") do - - for attr in @metadata.select { |m| m['display'] == 'content' } + %div#ontology-more-informations.mt-4 + = metadata_section('more-informations', 'More content informations', parent_id: "ontology-more-informations") do + - for attr in submission_metadata.select { |m| m['category'] == 'content' } = form_group_attribute(attr["attribute"]) = metadata_section('more-metrics-informations', 'More metrics informations', parent_id: "ontology-content-metrics") do - - for attr in @metadata.select { |m| m['display'] == 'metrics' } + - for attr in submission_metadata.select { |m| m['category'] == 'metrics' } = form_group_attribute(attr["attribute"]) diff --git a/app/views/submissions/_submissions.html.haml b/app/views/submissions/_submissions.html.haml index 6a666118f..8c74959a3 100644 --- a/app/views/submissions/_submissions.html.haml +++ b/app/views/submissions/_submissions.html.haml @@ -4,24 +4,29 @@ - more_colspan = 7 - more_colspan = 6 if @ont_restricted - %div.click_versions_collapse + %div.click_versions_collapse.p-1 = render_alerts_container(AdminController) - %table#ontology_versions.table.table-sm.table-striped - %thead - %tr - - if @ontology.admin?(session[:user]) - %th.align-middle ID - %th.align-middle Version - %th - = generate_attribute_text("released", "Released") - %th - = generate_attribute_text("modificationDate", "Modified") - %th - = generate_attribute_text("creationDate", "Uploaded") - - unless @ont_restricted - %th.align-middle Downloads - - if @ontology.admin?(session[:user]) - %th.align-middle Actions + = render TableComponent.new(id: 'ontology_versions', stripped: false, borderless: true) do |t| + - t.header do |header| + - if @ontology.admin?(session[:user]) + - header.th do + %div.align-middle + ID + - header.th do + %div.align-middle + Version + - header.th do + = generate_attribute_text("modificationDate", "Modified", tooltip: false) + - header.th do + = generate_attribute_text("creationDate", "Uploaded", tooltip: false) + - unless @ont_restricted + - header.th do + %div.align-middle + Downloads + - if @ontology.admin?(session[:user]) + - header.th do + %div.align-middle + Actions - begin - submission_ready = @ontology.explore.latest_submission({:include_status => 'ready', display: 'submissionId'}) @@ -30,23 +35,29 @@ - submission_readyId = -1 - @submissions.each_with_index do |sub, index| - hidden_row_class = index >= 5 ? "hidden_ont hidden_select" : "" - %tr{class: "#{hidden_row_class}", id: "submission_#{sub.submissionId}"} + - t.row(id:"submission_#{sub.submissionId}" , class_css: hidden_row_class) do |r| + - if @ontology.admin?(session[:user]) - %td - = sub.submissionId - %td - = raw status_link(sub, sub.submissionId==submission_readyId) - %td - = xmldatetime_to_date(sub.released) unless sub.released.nil? - %td - = xmldatetime_to_date(sub.modificationDate) unless sub.modificationDate.nil? - %td - = xmldatetime_to_date(sub.creationDate) unless sub.creationDate.nil? + - r.td { raw sub.submissionId } + - r.td { raw status_link(sub, sub.submissionId==submission_readyId)} + - r.td { xmldatetime_to_date(sub.modificationDate) unless sub.modificationDate.nil? } + - r.td { xmldatetime_to_date(sub.creationDate) unless sub.creationDate.nil? } + - unless @ont_restricted - %td - = raw download_link(sub, @ontology) + - r.td do + %div.dropdown + %button.btn.btn-outline-primary.rounded-pill.dropdown-toggle{type:"button", 'data-toggle':"dropdown", 'aria-expanded': "false", style:'white-space: nowrap'} + Download + %span.sr-only Toggle Dropdown + .dropdown-menu + - links = download_link(sub,@ontology) + - links.each do |value| + - link,label = value.values + %a.dropdown-item{ href: link }= label + + -# = raw download_link(sub, @ontology) - if @ontology.admin?(session[:user]) - %td + - r.td do %div.d-flex %a.btn.btn-sm.btn-link{:href => "/ontologies/#{@ontology.acronym}/submissions/#{sub.submissionId}/edit"} %span Edit @@ -55,8 +66,8 @@ = button_to "Delete", "/admin/ontologies/#{@ontology.acronym}/submissions/#{sub.submissionId}?turbo_stream=true", method: :delete, class:'btn btn-sm btn-link', form: {data: { turbo: true, turbo_confirm: alert_text, turbo_frame: '_top'}} - if @submissions.length > 5 - %tr - %td{colspan: more_colspan, class: "show_more_subs"} + - t.row(class_css: "show_more_subs") do |r| + - r.td(colspan: more_colspan) do %a#version_toggle{:href => ""} more... :javascript diff --git a/config/routes.rb b/config/routes.rb index 589464523..3188d56f7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -46,6 +46,7 @@ get 'instances/:instance_id', to: 'instances#show', constraints: { instance_id: /[^\/?]+/ } get 'schemes/show_scheme', to: 'schemes#show' get 'collections/show' + get 'metrics_evolution' end resources :login @@ -151,6 +152,7 @@ get 'ajax/label_xl', to: "label_xl#show" get '/ajax/biomixer' => 'concepts#biomixer' get '/ajax/fair_score/html' => 'fair_score#details_html' + get '/ajax/submission/show_additional_metadata/:id' => 'ontologies#show_additional_metadata' get '/ajax/submission/show_licenses/:id' => 'ontologies#show_licenses' get '/ajax/fair_score/json' => 'fair_score#details_json' get '/ajax/:ontology/instances' => 'instances#index_by_ontology' diff --git a/package.json b/package.json index 94282d913..62dabf435 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,17 @@ "dependencies": { "@hotwired/stimulus": "^3.0.1", "@hotwired/turbo-rails": "^7.1.1", + "debounce": "^1.2.1", "esbuild": "^0.14.41", "flatpickr": "^4.6.13", "split.js": "^1.6.5", "stimulus-flatpickr": "^3.0.0-0", - "stimulus-rails-nested-form": "^4.0.0", "stimulus-read-more": "^4.1.0", + "stimulus-rails-nested-form": "^4.0.0", + "stimulus-timeago": "^4.1.0", + "vis-data": "^7.1.6", + "vis-network": "^9.1.6", + "vis-util": "^5.0.3", "tom-select": "^2.2.2" }, "scripts": { diff --git a/public/browse/font/webhostinghub-glyphs.eot b/public/browse/font/webhostinghub-glyphs.eot old mode 100755 new mode 100644 diff --git a/public/browse/font/webhostinghub-glyphs.ttf b/public/browse/font/webhostinghub-glyphs.ttf old mode 100755 new mode 100644 diff --git a/public/browse/font/whhg.css b/public/browse/font/whhg.css old mode 100755 new mode 100644 index 9423e9914..ee5bfe84a --- a/public/browse/font/whhg.css +++ b/public/browse/font/whhg.css @@ -1,2085 +1,2085 @@ -@font-face { - font-family: 'WebHostingHub-Glyphs'; - src: url('webhostinghub-glyphs.eot'); - src: url('webhostinghub-glyphs.eot?#iefix') format('embedded-opentype'), - url('webhostinghub-glyphs.ttf') format('truetype'); - font-weight: normal; - font-style: normal; - -moz-font-feature-settings: "calt=0,liga=0"; -} -[class^="icon-"], [class*=" icon-"] {font-family:'WebHostingHub-Glyphs';background:none;width:auto;height:auto;font-style:normal} -.icon-aaabattery:before{content:'\f413'} -.icon-abacus:before{content:'\f261'} -.icon-accountfilter:before{content:'\f05e'} -.icon-acsource:before{content:'\f3ea'} -.icon-addfriend:before{content:'\f3da'} -.icon-address:before{content:'\f08f'} -.icon-addshape:before{content:'\f1fd'} -.icon-addtocart:before{content:'\f394'} -.icon-addtolist:before{content:'\f2ac'} -.icon-adjust:before{content:'\f484'} -.icon-adobe:before{content:'\f1c9'} -.icon-ads-bilboard:before{content:'\f082'} -.icon-affiliate:before{content:'\f01e'} -.icon-ajax:before{content:'\f06f'} -.icon-alarm:before{content:'\f233'} -.icon-alarmalt:before{content:'\f23d'} -.icon-album-cover:before{content:'\f19f'} -.icon-alertalt:before{content:'\f2b4'} -.icon-alertpay:before{content:'\f269'} -.icon-algorhythm:before{content:'\f0b8'} -.icon-alienship:before{content:'\f41f'} -.icon-alienware:before{content:'\f3be'} -.icon-align-center:before{content:'\f1d9'} -.icon-align-justify:before{content:'\f1da'} -.icon-align-left:before{content:'\f1d7'} -.icon-align-right:before{content:'\f1d8'} -.icon-alignbottomedge:before{content:'\f1d3'} -.icon-alignhorizontalcenter:before{content:'\f1d2'} -.icon-alignleftedge:before{content:'\f1d6'} -.icon-alignrightedge:before{content:'\f1d5'} -.icon-aligntopedge:before{content:'\f1d4'} -.icon-alignverticalcenter:before{content:'\f1d1'} -.icon-amd:before{content:'\f020'} -.icon-analogdown:before{content:'\f2cb'} -.icon-analogleft:before{content:'\f2c8'} -.icon-analogright:before{content:'\f2c9'} -.icon-analogup:before{content:'\f2ca'} -.icon-analytics-piechart:before{content:'\f000'} -.icon-analyticsalt-piechartalt:before{content:'\f001'} -.icon-anchor-port:before{content:'\f21d'} -.icon-android:before{content:'\f12a'} -.icon-angrybirds:before{content:'\f3c1'} -.icon-antenna:before{content:'\f3ec'} -.icon-apache-feather:before{content:'\f056'} -.icon-aperture:before{content:'\f356'} -.icon-appointment-agenda:before{content:'\f26c'} -.icon-archive:before{content:'\f171'} -.icon-arrow-down:before{content:'\f2fe'} -.icon-arrow-left:before{content:'\f305'} -.icon-arrow-right:before{content:'\f304'} -.icon-arrow-up:before{content:'\f301'} -.icon-asterisk:before{content:'\f317'} -.icon-asteriskalt:before{content:'\002a'} -.icon-at:before{content:'\40'} -.icon-atari:before{content:'\f3b9'} -.icon-authentication-keyalt:before{content:'\f051'} -.icon-automobile-car:before{content:'\f239'} -.icon-autorespond:before{content:'\f08e'} -.icon-avatar:before{content:'\f15a'} -.icon-avataralt:before{content:'\f161'} -.icon-avengers:before{content:'\f342'} -.icon-awstats:before{content:'\f04c'} -.icon-axe:before{content:'\f2ef'} -.icon-backup-vault:before{content:'\f004'} -.icon-backupalt-vaultalt:before{content:'\f005'} -.icon-backupwizard:before{content:'\f05f'} -.icon-backward:before{content:'\f183'} -.icon-bag:before{content:'\f234'} -.icon-baloon:before{content:'\f405'} -.icon-ban-circle:before{content:'\f313'} -.icon-banana:before{content:'\f3f4'} -.icon-bandwidth:before{content:'\f006'} -.icon-bank:before{content:'\f262'} -.icon-barchart:before{content:'\f02f'} -.icon-barchartalt:before{content:'\f07d'} -.icon-barcode:before{content:'\f276'} -.icon-basecamp:before{content:'\f160'} -.icon-basketball:before{content:'\f2e9'} -.icon-bat:before{content:'\f3d3'} -.icon-batman:before{content:'\f348'} -.icon-batteryaltcharging:before{content:'\f104'} -.icon-batteryaltfull:before{content:'\f101'} -.icon-batteryaltsixty:before{content:'\f102'} -.icon-batteryaltthird:before{content:'\f103'} -.icon-batterycharged:before{content:'\f0f4'} -.icon-batterycharging:before{content:'\f0f3'} -.icon-batteryeighty:before{content:'\f0f9'} -.icon-batteryempty:before{content:'\f0f5'} -.icon-batteryforty:before{content:'\f0f7'} -.icon-batteryfull:before{content:'\f0fa'} -.icon-batterysixty:before{content:'\f0f8'} -.icon-batterytwenty:before{content:'\f0f6'} -.icon-bed:before{content:'\f2b9'} -.icon-beer:before{content:'\f244'} -.icon-bell:before{content:'\2407'} -.icon-bigger:before{content:'\f30a'} -.icon-bill:before{content:'\f278'} -.icon-binary:before{content:'\f087'} -.icon-binoculars-searchalt:before{content:'\f2a0'} -.icon-birdhouse:before{content:'\f390'} -.icon-birthday:before{content:'\f36b'} -.icon-bishop:before{content:'\f2f9'} -.icon-blackberry:before{content:'\f421'} -.icon-blankstare:before{content:'\f13e'} -.icon-blogger-blog:before{content:'\f167'} -.icon-bluetooth:before{content:'\f12b'} -.icon-bluetoothconnected:before{content:'\f386'} -.icon-boardgame:before{content:'\f2d9'} -.icon-boat:before{content:'\f21a'} -.icon-bold:before{content:'\f1f4'} -.icon-bomb:before{content:'\f2dc'} -.icon-bone:before{content:'\f35f'} -.icon-book:before{content:'\f1ba'} -.icon-bookmark:before{content:'\f143'} -.icon-boombox:before{content:'\f195'} -.icon-bottle:before{content:'\f361'} -.icon-bow:before{content:'\f2ee'} -.icon-bowling:before{content:'\f2f3'} -.icon-bowlingpins:before{content:'\f3d2'} -.icon-bowtie:before{content:'\f37f'} -.icon-boxtrapper-mousetrap:before{content:'\f046'} -.icon-braces:before{content:'\f0b4'} -.icon-braille0:before{content:'\f44b'} -.icon-braille1:before{content:'\f44c'} -.icon-braille2:before{content:'\f44d'} -.icon-braille3:before{content:'\f44e'} -.icon-braille4:before{content:'\f44f'} -.icon-braille5:before{content:'\f450'} -.icon-braille6:before{content:'\f451'} -.icon-braille7:before{content:'\f452'} -.icon-braille8:before{content:'\f453'} -.icon-braille9:before{content:'\f454'} -.icon-braillea:before{content:'\f431'} -.icon-brailleb:before{content:'\f432'} -.icon-braillec:before{content:'\f433'} -.icon-brailled:before{content:'\f434'} -.icon-braillee:before{content:'\f435'} -.icon-braillef:before{content:'\f436'} -.icon-brailleg:before{content:'\f437'} -.icon-brailleh:before{content:'\f438'} -.icon-braillei:before{content:'\f439'} -.icon-braillej:before{content:'\f43a'} -.icon-braillek:before{content:'\f43b'} -.icon-braillel:before{content:'\f43c'} -.icon-braillem:before{content:'\f43d'} -.icon-braillen:before{content:'\f43e'} -.icon-brailleo:before{content:'\f43f'} -.icon-braillep:before{content:'\f440'} -.icon-brailleq:before{content:'\f441'} -.icon-brailler:before{content:'\f442'} -.icon-brailles:before{content:'\f443'} -.icon-braillespace:before{content:'\f455'} -.icon-braillet:before{content:'\f444'} -.icon-brailleu:before{content:'\f445'} -.icon-braillev:before{content:'\f446'} -.icon-braillew:before{content:'\f447'} -.icon-braillex:before{content:'\f448'} -.icon-brailley:before{content:'\f449'} -.icon-braillez:before{content:'\f44a'} -.icon-brain:before{content:'\f3e3'} -.icon-bread:before{content:'\f42f'} -.icon-breakable:before{content:'\f41c'} -.icon-briefcase:before{content:'\f25e'} -.icon-briefcasethree:before{content:'\f25f'} -.icon-briefcasetwo:before{content:'\f0a2'} -.icon-brightness:before{content:'\f10a'} -.icon-brightnessfull:before{content:'\f10b'} -.icon-brightnesshalf:before{content:'\f10c'} -.icon-broom:before{content:'\f40a'} -.icon-browser:before{content:'\f159'} -.icon-brush:before{content:'\f1b8'} -.icon-bucket:before{content:'\f1b5'} -.icon-bug:before{content:'\f0a7'} -.icon-bullhorn:before{content:'\f287'} -.icon-bus:before{content:'\f241'} -.icon-businesscardalt:before{content:'\f137'} -.icon-buttona:before{content:'\f2bf'} -.icon-buttonb:before{content:'\f2c0'} -.icon-buttonx:before{content:'\f2c1'} -.icon-buttony:before{content:'\f2c2'} -.icon-cactus-desert:before{content:'\f22c'} -.icon-calculator:before{content:'\f258'} -.icon-calculatoralt:before{content:'\f265'} -.icon-calendar:before{content:'\f20f'} -.icon-calendaralt-cronjobs:before{content:'\f0a1'} -.icon-camera:before{content:'\f19b'} -.icon-candle:before{content:'\f29a'} -.icon-candy:before{content:'\f42d'} -.icon-candycane:before{content:'\f37d'} -.icon-cannon:before{content:'\f401'} -.icon-canvas:before{content:'\f1c8'} -.icon-canvasrulers:before{content:'\f205'} -.icon-capacitator:before{content:'\f3e8'} -.icon-capslock:before{content:'\21ea'} -.icon-captainamerica:before{content:'\f341'} -.icon-carrot:before{content:'\f3f2'} -.icon-cashregister:before{content:'\f26e'} -.icon-cassette:before{content:'\f377'} -.icon-cd-dvd:before{content:'\f0cd'} -.icon-certificate:before{content:'\f277'} -.icon-certificatealt:before{content:'\f058'} -.icon-certificatethree:before{content:'\f059'} -.icon-cgi:before{content:'\f086'} -.icon-cgicenter:before{content:'\f079'} -.icon-chair:before{content:'\2441'} -.icon-chat:before{content:'\f162'} -.icon-check:before{content:'\f310'} -.icon-checkboxalt:before{content:'\f311'} -.icon-checkin:before{content:'\f223'} -.icon-checkinalt:before{content:'\f227'} -.icon-chef:before{content:'\f3ce'} -.icon-cherry:before{content:'\f35d'} -.icon-chevron-down:before{content:'\f48b'} -.icon-chevron-left:before{content:'\f489'} -.icon-chevron-right:before{content:'\f488'} -.icon-chevron-up:before{content:'\f48a'} -.icon-chevrons:before{content:'\f0b5'} -.icon-chicken:before{content:'\f359'} -.icon-chocolate:before{content:'\f367'} -.icon-christiancross:before{content:'\f40f'} -.icon-christmastree:before{content:'\f37b'} -.icon-chrome:before{content:'\f14e'} -.icon-cigarette:before{content:'\f229'} -.icon-circle-arrow-down:before{content:'\f475'} -.icon-circle-arrow-left:before{content:'\f472'} -.icon-circle-arrow-right:before{content:'\f473'} -.icon-circle-arrow-up:before{content:'\f474'} -.icon-circleadd:before{content:'\f0d1'} -.icon-circledelete:before{content:'\f0d2'} -.icon-circledown:before{content:'\f3c7'} -.icon-circleleft:before{content:'\f3c6'} -.icon-circleright:before{content:'\f3c9'} -.icon-circleselect:before{content:'\f0d3'} -.icon-circleselection:before{content:'\f1b1'} -.icon-circleup:before{content:'\f3c8'} -.icon-clearformatting:before{content:'\f1e7'} -.icon-clipboard-paste:before{content:'\f0cb'} -.icon-clockalt-timealt:before{content:'\f22b'} -.icon-closetab:before{content:'\f170'} -.icon-closewindow:before{content:'\f16e'} -.icon-cloud:before{content:'\f0b9'} -.icon-clouddownload:before{content:'\f0bb'} -.icon-cloudhosting:before{content:'\f007'} -.icon-cloudsync:before{content:'\f0bc'} -.icon-cloudupload:before{content:'\f0ba'} -.icon-clubs:before{content:'\f2f6'} -.icon-cmd:before{content:'\f33a'} -.icon-cms:before{content:'\f036'} -.icon-cmsmadesimple:before{content:'\f0b0'} -.icon-codeigniter:before{content:'\f077'} -.icon-coffee:before{content:'\f235'} -.icon-coffeebean:before{content:'\f366'} -.icon-cog:before{content:'\f00f'} -.icon-colocation:before{content:'\f024'} -.icon-colocationalt:before{content:'\f023'} -.icon-colors:before{content:'\f1e6'} -.icon-comment:before{content:'\f12c'} -.icon-commentout:before{content:'\f080'} -.icon-commentround:before{content:'\f155'} -.icon-commentroundempty:before{content:'\f156'} -.icon-commentroundtyping:before{content:'\f157'} -.icon-commentroundtypingempty:before{content:'\f158'} -.icon-commenttyping:before{content:'\f12d'} -.icon-compass:before{content:'\263c'} -.icon-concretefive:before{content:'\f0af'} -.icon-contact-businesscard:before{content:'\f040'} -.icon-controllernes:before{content:'\f2d2'} -.icon-controllerps:before{content:'\f2d1'} -.icon-controllersnes:before{content:'\f2d3'} -.icon-controlpanel:before{content:'\f008'} -.icon-controlpanelalt:before{content:'\f009'} -.icon-cooling:before{content:'\f00a'} -.icon-coppermine:before{content:'\f0a4'} -.icon-copy:before{content:'\f0c9'} -.icon-copyright:before{content:'\00a9'} -.icon-coupon:before{content:'\f254'} -.icon-cpanel:before{content:'\f072'} -.icon-cplusplus:before{content:'\f0b1'} -.icon-cpu-processor:before{content:'\f002'} -.icon-cpualt-processoralt:before{content:'\f003'} -.icon-crayon:before{content:'\f383'} -.icon-createfile:before{content:'\f0c6'} -.icon-createfolder:before{content:'\f0da'} -.icon-creativecommons:before{content:'\f1fc'} -.icon-creditcard:before{content:'\f279'} -.icon-cricket:before{content:'\f418'} -.icon-croisant:before{content:'\f29f'} -.icon-crop:before{content:'\f1af'} -.icon-crown:before{content:'\f28f'} -.icon-csharp:before{content:'\f0b2'} -.icon-cssthree:before{content:'\f06a'} -.icon-cup-coffeealt:before{content:'\f24b'} -.icon-cupcake:before{content:'\f35b'} -.icon-curling:before{content:'\f3d7'} -.icon-cursor:before{content:'\f0dc'} -.icon-cut-scissors:before{content:'\f0ca'} -.icon-dagger:before{content:'\2020'} -.icon-danger:before{content:'\f415'} -.icon-dart:before{content:'\f3d4'} -.icon-darthvader:before{content:'\f34a'} -.icon-database:before{content:'\f00b'} -.icon-databaseadd:before{content:'\f00c'} -.icon-databasedelete:before{content:'\f00d'} -.icon-davidstar:before{content:'\f40e'} -.icon-dcsource:before{content:'\f3e9'} -.icon-dedicatedserver:before{content:'\f00e'} -.icon-deletefile:before{content:'\f0c7'} -.icon-deletefolder:before{content:'\f0db'} -.icon-delicious:before{content:'\f152'} -.icon-designcontest:before{content:'\f351'} -.icon-desklamp:before{content:'\f412'} -.icon-dialpad:before{content:'\f399'} -.icon-diamond:before{content:'\2666'} -.icon-diamonds:before{content:'\f2f7'} -.icon-die-dice:before{content:'\f2d8'} -.icon-diefive:before{content:'\f3fb'} -.icon-diefour:before{content:'\f3fa'} -.icon-dieone:before{content:'\f3f7'} -.icon-diesix:before{content:'\f3fc'} -.icon-diethree:before{content:'\f3f9'} -.icon-dietwo:before{content:'\f3f8'} -.icon-diode:before{content:'\f3e7'} -.icon-director:before{content:'\f2ae'} -.icon-diskspace:before{content:'\f096'} -.icon-distributehorizontalcenters:before{content:'\f1dc'} -.icon-distributeverticalcenters:before{content:'\f1db'} -.icon-divide:before{content:'\00f7'} -.icon-dna:before{content:'\f409'} -.icon-dnszone:before{content:'\f07f'} -.icon-document:before{content:'\f0c2'} -.icon-doghouse:before{content:'\f38f'} -.icon-dollar:before{content:'\24'} -.icon-dollaralt:before{content:'\f259'} -.icon-dolphinsoftware:before{content:'\f064'} -.icon-domain:before{content:'\f01d'} -.icon-domainaddon:before{content:'\f053'} -.icon-domino:before{content:'\f3d5'} -.icon-donut:before{content:'\f3ca'} -.icon-downleft:before{content:'\f2ff'} -.icon-download:before{content:'\f47b'} -.icon-download-alt:before{content:'\f11a'} -.icon-downright:before{content:'\f300'} -.icon-draft:before{content:'\f172'} -.icon-dreamweaver:before{content:'\f1d0'} -.icon-dribbble:before{content:'\f14c'} -.icon-dropmenu:before{content:'\f0a5'} -.icon-drupal:before{content:'\f075'} -.icon-drwho:before{content:'\f3c0'} -.icon-edit:before{content:'\f47c'} -.icon-editalt:before{content:'\f0f2'} -.icon-egg:before{content:'\f407'} -.icon-eightball:before{content:'\f36e'} -.icon-eject:before{content:'\f199'} -.icon-elipse:before{content:'\f1bc'} -.icon-emailalt:before{content:'\f136'} -.icon-emailexport:before{content:'\f176'} -.icon-emailforward:before{content:'\f175'} -.icon-emailforwarders:before{content:'\f049'} -.icon-emailimport:before{content:'\f177'} -.icon-emailrefresh:before{content:'\f174'} -.icon-emailtrace:before{content:'\f091'} -.icon-emergency:before{content:'\f246'} -.icon-emptycart:before{content:'\f395'} -.icon-enter:before{content:'\f323'} -.icon-envelope:before{content:'\f028'} -.icon-equalizer:before{content:'\f18e'} -.icon-equalizeralt:before{content:'\f18f'} -.icon-equals:before{content:'\f30c'} -.icon-eraser:before{content:'\f1f1'} -.icon-erroralt:before{content:'\f05a'} -.icon-euro:before{content:'\20ac'} -.icon-euroalt:before{content:'\f25a'} -.icon-evernote:before{content:'\f17c'} -.icon-exchange-currency:before{content:'\f26b'} -.icon-exclamation-sign:before{content:'\f04a'} -.icon-excludeshape:before{content:'\f200'} -.icon-exit:before{content:'\f324'} -.icon-explorerwindow:before{content:'\f0d9'} -.icon-exportfile:before{content:'\f32f'} -.icon-exposure:before{content:'\f1de'} -.icon-extinguisher:before{content:'\f2b7'} -.icon-eye-close:before{content:'\f481'} -.icon-eye-open:before{content:'\f2b5'} -.icon-eye-view:before{content:'\f280'} -.icon-eyedropper:before{content:'\f1ad'} -.icon-facebook:before{content:'\f140'} -.icon-facebookalt:before{content:'\f14b'} -.icon-facetime-video:before{content:'\f19c'} -.icon-factory:before{content:'\f27a'} -.icon-fantastico:before{content:'\f0ae'} -.icon-faq:before{content:'\f099'} -.icon-fast-backward:before{content:'\f47e'} -.icon-fast-forward:before{content:'\f47f'} -.icon-fastdown:before{content:'\f31d'} -.icon-fastleft:before{content:'\f31a'} -.icon-fastright:before{content:'\f31b'} -.icon-fastup:before{content:'\f31c'} -.icon-favoritefile:before{content:'\f381'} -.icon-favoritefolder:before{content:'\f382'} -.icon-featheralt-write:before{content:'\f1c5'} -.icon-fedora:before{content:'\f3f1'} -.icon-fence:before{content:'\f2af'} -.icon-file:before{content:'\f0d6'} -.icon-film:before{content:'\f19d'} -.icon-filmstrip:before{content:'\f3ed'} -.icon-filter:before{content:'\f05c'} -.icon-finder:before{content:'\f398'} -.icon-fire:before{content:'\f27f'} -.icon-firefox:before{content:'\f420'} -.icon-firewall:before{content:'\f021'} -.icon-firewire:before{content:'\f0fc'} -.icon-firstaid:before{content:'\f2ba'} -.icon-fish:before{content:'\f35a'} -.icon-fishbone:before{content:'\f42b'} -.icon-flag:before{content:'\f487'} -.icon-flagalt:before{content:'\f232'} -.icon-flagtriangle:before{content:'\f20b'} -.icon-flash:before{content:'\f1cf'} -.icon-flashlight:before{content:'\f299'} -.icon-flashplayer:before{content:'\f070'} -.icon-flaskfull:before{content:'\f27e'} -.icon-flickr:before{content:'\f146'} -.icon-flower:before{content:'\f2a5'} -.icon-flowernew:before{content:'\f3a8'} -.icon-folder-close:before{content:'\f094'} -.icon-folder-open:before{content:'\f483'} -.icon-foldertree:before{content:'\f0f0'} -.icon-font:before{content:'\f1ae'} -.icon-foodtray:before{content:'\f3d0'} -.icon-football-soccer:before{content:'\f2eb'} -.icon-forbiddenalt:before{content:'\f314'} -.icon-forest-tree:before{content:'\f217'} -.icon-forestalt-treealt:before{content:'\f21c'} -.icon-fork:before{content:'\22d4'} -.icon-forklift:before{content:'\f29b'} -.icon-form:before{content:'\f08c'} -.icon-forrst:before{content:'\f14d'} -.icon-fort:before{content:'\f400'} -.icon-forward:before{content:'\f182'} -.icon-fourohfour:before{content:'\f09d'} -.icon-foursquare:before{content:'\f42a'} -.icon-freeway:before{content:'\f24a'} -.icon-fridge:before{content:'\f40d'} -.icon-fries:before{content:'\f36a'} -.icon-ftp:before{content:'\f029'} -.icon-ftpaccounts:before{content:'\f07b'} -.icon-ftpsession:before{content:'\f07c'} -.icon-fullscreen:before{content:'\f485'} -.icon-gameboy:before{content:'\f403'} -.icon-gamecursor:before{content:'\f2d0'} -.icon-gasstation:before{content:'\f216'} -.icon-gearfour:before{content:'\f3a7'} -.icon-ghost:before{content:'\f2da'} -.icon-gift:before{content:'\f260'} -.icon-github:before{content:'\f081'} -.icon-glass:before{content:'\f236'} -.icon-glasses:before{content:'\f295'} -.icon-glassesalt:before{content:'\f39d'} -.icon-globe:before{content:'\f01b'} -.icon-globealt:before{content:'\f36c'} -.icon-glue:before{content:'\f36d'} -.icon-gmail:before{content:'\f150'} -.icon-golf:before{content:'\f2f1'} -.icon-googledrive:before{content:'\f163'} -.icon-googleplus:before{content:'\f165'} -.icon-googlewallet:before{content:'\f270'} -.icon-gpsoff-gps:before{content:'\f21e'} -.icon-gpson:before{content:'\f21f'} -.icon-gpu-graphicscard:before{content:'\f108'} -.icon-gradient:before{content:'\2207'} -.icon-grails:before{content:'\f085'} -.icon-greenlantern:before{content:'\f340'} -.icon-greenlightbulb:before{content:'\f406'} -.icon-grooveshark:before{content:'\f3a2'} -.icon-groups-friends:before{content:'\f134'} -.icon-guitar:before{content:'\f19a'} -.icon-halflife:before{content:'\f3ba'} -.icon-halo:before{content:'\f3bb'} -.icon-hamburger:before{content:'\f2b3'} -.icon-hammer:before{content:'\f291'} -.icon-hand-down:before{content:'\f387'} -.icon-hand-left:before{content:'\f389'} -.icon-hand-right:before{content:'\f388'} -.icon-hand-up:before{content:'\f0dd'} -.icon-handcuffs:before{content:'\f393'} -.icon-handdrag:before{content:'\f0de'} -.icon-handtwofingers:before{content:'\f0df'} -.icon-hanger:before{content:'\f2ab'} -.icon-happy:before{content:'\f13c'} -.icon-harrypotter:before{content:'\f38b'} -.icon-hdd:before{content:'\f02a'} -.icon-hdtv:before{content:'\f1a0'} -.icon-headphones:before{content:'\f180'} -.icon-headphonesalt:before{content:'\f1a3'} -.icon-heart:before{content:'\f131'} -.icon-heartempty-love:before{content:'\f132'} -.icon-hearts:before{content:'\f2f4'} -.icon-helicopter:before{content:'\f3e4'} -.icon-hexagon-polygon:before{content:'\f1be'} -.icon-hockey:before{content:'\f3d9'} -.icon-home:before{content:'\21b8'} -.icon-homealt:before{content:'\f02b'} -.icon-hospital:before{content:'\f247'} -.icon-hotdog:before{content:'\f3cc'} -.icon-hotlinkprotection:before{content:'\f050'} -.icon-hourglassalt:before{content:'\f122'} -.icon-html:before{content:'\f068'} -.icon-htmlfive:before{content:'\f069'} -.icon-hydrant:before{content:'\f3ff'} -.icon-icecream:before{content:'\f2a4'} -.icon-icecreamalt:before{content:'\f289'} -.icon-illustrator:before{content:'\f1ce'} -.icon-imac:before{content:'\f0fb'} -.icon-images-gallery:before{content:'\f09f'} -.icon-importcontacts:before{content:'\f092'} -.icon-importfile:before{content:'\f32e'} -.icon-inbox:before{content:'\f17a'} -.icon-inboxalt:before{content:'\f178'} -.icon-incomingcall:before{content:'\f15d'} -.icon-indent-left:before{content:'\f1f2'} -.icon-indent-right:before{content:'\f1f3'} -.icon-indexmanager:before{content:'\f09e'} -.icon-infinity:before{content:'\221e'} -.icon-info-sign:before{content:'\f315'} -.icon-infographic:before{content:'\f336'} -.icon-ink:before{content:'\f3f6'} -.icon-inkpen:before{content:'\f1ac'} -.icon-insertbarchart:before{content:'\f1e5'} -.icon-insertpicture:before{content:'\f1e0'} -.icon-insertpicturecenter:before{content:'\f1e3'} -.icon-insertpictureleft:before{content:'\f1e1'} -.icon-insertpictureright:before{content:'\f1e2'} -.icon-insertpiechart:before{content:'\f1e4'} -.icon-instagram:before{content:'\f14a'} -.icon-install:before{content:'\f128'} -.icon-intel:before{content:'\f01f'} -.icon-intersection:before{content:'\2229'} -.icon-intersectshape:before{content:'\f1ff'} -.icon-invert:before{content:'\f1df'} -.icon-invoice:before{content:'\f3e5'} -.icon-ipcontrol:before{content:'\f08b'} -.icon-iphone:before{content:'\f0e6'} -.icon-ipod:before{content:'\f190'} -.icon-ironman:before{content:'\f349'} -.icon-islam:before{content:'\f410'} -.icon-island:before{content:'\f392'} -.icon-italic:before{content:'\f1f5'} -.icon-jar:before{content:'\f2b6'} -.icon-jason:before{content:'\f38c'} -.icon-java:before{content:'\f083'} -.icon-joomla:before{content:'\f073'} -.icon-joystickarcade:before{content:'\f2d4'} -.icon-joystickatari:before{content:'\f2d5'} -.icon-jquery:before{content:'\f06b'} -.icon-jqueryui:before{content:'\f06c'} -.icon-kerning:before{content:'\f1e9'} -.icon-key:before{content:'\f093'} -.icon-keyboard:before{content:'\f119'} -.icon-keyboardalt:before{content:'\f105'} -.icon-keyboarddelete:before{content:'\f3a6'} -.icon-kidney:before{content:'\f3e0'} -.icon-king:before{content:'\f2fc'} -.icon-knife:before{content:'\f214'} -.icon-knight:before{content:'\f2fb'} -.icon-knob:before{content:'\f376'} -.icon-lab-flask:before{content:'\f27d'} -.icon-lamp:before{content:'\f2b1'} -.icon-lan:before{content:'\f0ee'} -.icon-language:before{content:'\f042'} -.icon-laptop:before{content:'\f0d8'} -.icon-lasso:before{content:'\f396'} -.icon-lastfm:before{content:'\f3a3'} -.icon-laugh:before{content:'\f13f'} -.icon-law:before{content:'\f263'} -.icon-layers:before{content:'\f1ca'} -.icon-layersalt:before{content:'\f1cb'} -.icon-leaf:before{content:'\f039'} -.icon-leechprotect:before{content:'\f07e'} -.icon-legacyfilemanager:before{content:'\f095'} -.icon-lego:before{content:'\f370'} -.icon-lifeempty:before{content:'\f2e1'} -.icon-lifefull:before{content:'\f2e3'} -.icon-lifehacker:before{content:'\f380'} -.icon-lifehalf:before{content:'\f2e2'} -.icon-lifepreserver:before{content:'\f015'} -.icon-lightbulb-idea:before{content:'\f338'} -.icon-lighthouse:before{content:'\f3e6'} -.icon-lightning:before{content:'\f231'} -.icon-lightningalt:before{content:'\f2a8'} -.icon-line:before{content:'\f1bf'} -.icon-lineheight:before{content:'\f1c0'} -.icon-link:before{content:'\f022'} -.icon-linkalt:before{content:'\f333'} -.icon-linkedin:before{content:'\f166'} -.icon-linux:before{content:'\f01a'} -.icon-list:before{content:'\f111'} -.icon-list-alt:before{content:'\f480'} -.icon-liver:before{content:'\f3e2'} -.icon-loading-hourglass:before{content:'\f123'} -.icon-loadingalt:before{content:'\f339'} -.icon-lock:before{content:'\f0be'} -.icon-lockalt-keyhole:before{content:'\f0eb'} -.icon-lollypop:before{content:'\f3ee'} -.icon-lungs:before{content:'\f3df'} -.icon-macpro:before{content:'\f3a5'} -.icon-macro-plant:before{content:'\f1c6'} -.icon-magazine:before{content:'\f1ec'} -.icon-magento:before{content:'\f06e'} -.icon-magnet:before{content:'\f281'} -.icon-mailbox:before{content:'\f044'} -.icon-mailinglists:before{content:'\f090'} -.icon-man-male:before{content:'\f2a1'} -.icon-managedhosting:before{content:'\f038'} -.icon-map:before{content:'\f209'} -.icon-map-marker:before{content:'\f220'} -.icon-marker:before{content:'\f204'} -.icon-marvin:before{content:'\f3dd'} -.icon-mastercard:before{content:'\f266'} -.icon-maximize:before{content:'\f30f'} -.icon-medal:before{content:'\f2e5'} -.icon-medalbronze:before{content:'\f2e8'} -.icon-medalgold:before{content:'\f2e6'} -.icon-medalsilver:before{content:'\f2e7'} -.icon-mediarepeat:before{content:'\f187'} -.icon-men:before{content:'\f24c'} -.icon-menu:before{content:'\f127'} -.icon-merge:before{content:'\f334'} -.icon-mergecells:before{content:'\f327'} -.icon-mergeshapes:before{content:'\f201'} -.icon-metro-subway:before{content:'\f24f'} -.icon-metronome:before{content:'\f374'} -.icon-mickeymouse:before{content:'\f37a'} -.icon-microphone:before{content:'\f191'} -.icon-microscope:before{content:'\f283'} -.icon-microsd:before{content:'\f107'} -.icon-microwave:before{content:'\f42e'} -.icon-mimetype:before{content:'\f057'} -.icon-minimize:before{content:'\f30e'} -.icon-minus:before{content:'\2212'} -.icon-minus-sign:before{content:'\f477'} -.icon-missedcall:before{content:'\f15c'} -.icon-mobile:before{content:'\f0e8'} -.icon-moleskine:before{content:'\f1f0'} -.icon-money-cash:before{content:'\f27b'} -.icon-moneybag:before{content:'\f271'} -.icon-monitor:before{content:'\f0d5'} -.icon-monstersinc:before{content:'\f3bd'} -.icon-moon-night:before{content:'\f207'} -.icon-mouse:before{content:'\f0d4'} -.icon-mousealt:before{content:'\f126'} -.icon-move:before{content:'\f322'} -.icon-movieclapper:before{content:'\f193'} -.icon-moviereel:before{content:'\f17f'} -.icon-muffin:before{content:'\f363'} -.icon-mug:before{content:'\f24e'} -.icon-mushroom:before{content:'\f35e'} -.icon-music:before{content:'\f181'} -.icon-musicalt:before{content:'\f18d'} -.icon-mutealt:before{content:'\f0e5'} -.icon-mxentry:before{content:'\f07a'} -.icon-mybb:before{content:'\f065'} -.icon-myspace:before{content:'\f153'} -.icon-mysql-dolphin:before{content:'\f076'} -.icon-nail:before{content:'\f428'} -.icon-navigation:before{content:'\f23a'} -.icon-network:before{content:'\f0a6'} -.icon-networksignal:before{content:'\f3a9'} -.icon-news:before{content:'\f256'} -.icon-newtab:before{content:'\f16f'} -.icon-newwindow:before{content:'\f16d'} -.icon-next:before{content:'\f18a'} -.icon-nexus:before{content:'\f0e7'} -.icon-nintendods:before{content:'\f404'} -.icon-nodejs:before{content:'\f084'} -.icon-notes:before{content:'\f0d7'} -.icon-notificationbottom:before{content:'\f144'} -.icon-notificationtop:before{content:'\f145'} -.icon-nut:before{content:'\f427'} -.icon-off:before{content:'\f11d'} -.icon-office-building:before{content:'\f245'} -.icon-officechair:before{content:'\f26d'} -.icon-ok:before{content:'\2713'} -.icon-ok-circle:before{content:'\f471'} -.icon-ok-sign:before{content:'\f479'} -.icon-oneup:before{content:'\f3b7'} -.icon-oneupalt:before{content:'\f3b6'} -.icon-opencart:before{content:'\f060'} -.icon-opennewwindow:before{content:'\f332'} -.icon-orange:before{content:'\f29e'} -.icon-outbox:before{content:'\f179'} -.icon-outgoingcall:before{content:'\f15e'} -.icon-oxwall:before{content:'\f06d'} -.icon-pacman:before{content:'\f2db'} -.icon-pageback:before{content:'\f31e'} -.icon-pagebreak:before{content:'\f1cc'} -.icon-pageforward:before{content:'\f31f'} -.icon-pagesetup:before{content:'\f331'} -.icon-paintbrush:before{content:'\f1e8'} -.icon-paintroll:before{content:'\f1fa'} -.icon-palette-painting:before{content:'\f1b9'} -.icon-paperclip:before{content:'\f284'} -.icon-paperclipalt:before{content:'\f285'} -.icon-paperclipvertical:before{content:'\f286'} -.icon-paperplane:before{content:'\f296'} -.icon-parentheses:before{content:'\f3c4'} -.icon-parkeddomain:before{content:'\f055'} -.icon-password:before{content:'\f03e'} -.icon-passwordalt:before{content:'\f03f'} -.icon-pasta:before{content:'\f408'} -.icon-patch:before{content:'\f2a3'} -.icon-path:before{content:'\f169'} -.icon-pause:before{content:'\f186'} -.icon-paw-pet:before{content:'\f29d'} -.icon-pawn:before{content:'\f2f8'} -.icon-paypal:before{content:'\f267'} -.icon-peace:before{content:'\f2a7'} -.icon-pen:before{content:'\f1ee'} -.icon-pencil:before{content:'\f1b7'} -.icon-pepperoni:before{content:'\f364'} -.icon-percent:before{content:'\25'} -.icon-perl-camel:before{content:'\f0b6'} -.icon-perlalt:before{content:'\f0b7'} -.icon-phone-call:before{content:'\f14f'} -.icon-phonealt:before{content:'\f15b'} -.icon-phonebook:before{content:'\f149'} -.icon-phonebookalt:before{content:'\f135'} -.icon-phonemic:before{content:'\f391'} -.icon-phoneold:before{content:'\f148'} -.icon-photoshop:before{content:'\f1cd'} -.icon-php:before{content:'\f09c'} -.icon-phpbb:before{content:'\f063'} -.icon-phppear:before{content:'\f09b'} -.icon-piano:before{content:'\f19e'} -.icon-picture:before{content:'\22b7'} -.icon-pictureframe:before{content:'\f41e'} -.icon-piggybank:before{content:'\f257'} -.icon-pigpena:before{content:'\f456'} -.icon-pigpenb:before{content:'\f457'} -.icon-pigpenc:before{content:'\f458'} -.icon-pigpend:before{content:'\f459'} -.icon-pigpene:before{content:'\f45a'} -.icon-pigpenf:before{content:'\f45b'} -.icon-pigpeng:before{content:'\f45c'} -.icon-pigpenh:before{content:'\f45d'} -.icon-pigpeni:before{content:'\f45e'} -.icon-pigpenj:before{content:'\f45f'} -.icon-pigpenk:before{content:'\f460'} -.icon-pigpenl:before{content:'\f461'} -.icon-pigpenm:before{content:'\f462'} -.icon-pigpenn:before{content:'\f463'} -.icon-pigpeno:before{content:'\f464'} -.icon-pigpenp:before{content:'\f465'} -.icon-pigpenq:before{content:'\f466'} -.icon-pigpenr:before{content:'\f467'} -.icon-pigpens:before{content:'\f468'} -.icon-pigpent:before{content:'\f469'} -.icon-pigpenu:before{content:'\f46a'} -.icon-pigpenv:before{content:'\f46b'} -.icon-pigpenw:before{content:'\f46c'} -.icon-pigpenx:before{content:'\f46d'} -.icon-pigpeny:before{content:'\f46e'} -.icon-pigpenz:before{content:'\f46f'} -.icon-pilcrow:before{content:'\00b6'} -.icon-pill-antivirusalt:before{content:'\f0aa'} -.icon-pin:before{content:'\f20a'} -.icon-pipe:before{content:'\01c0'} -.icon-piwigo:before{content:'\f0ad'} -.icon-pizza:before{content:'\f35c'} -.icon-placeadd:before{content:'\f221'} -.icon-placealt:before{content:'\f224'} -.icon-placealtadd:before{content:'\f225'} -.icon-placealtdelete:before{content:'\f226'} -.icon-placedelete:before{content:'\f222'} -.icon-placeios:before{content:'\f20c'} -.icon-plane:before{content:'\f23e'} -.icon-plaque:before{content:'\f2b8'} -.icon-play:before{content:'\f184'} -.icon-play-circle:before{content:'\f17e'} -.icon-playstore:before{content:'\f255'} -.icon-playvideo:before{content:'\f03d'} -.icon-plug:before{content:'\f0ea'} -.icon-pluginalt:before{content:'\f098'} -.icon-plus:before{content:'\002b'} -.icon-plus-sign:before{content:'\f476'} -.icon-pocket:before{content:'\f16b'} -.icon-podcast:before{content:'\f1a2'} -.icon-podium-winner:before{content:'\f2d6'} -.icon-pokemon:before{content:'\f354'} -.icon-police:before{content:'\f2aa'} -.icon-polygonlasso:before{content:'\f397'} -.icon-post:before{content:'\f12e'} -.icon-postalt:before{content:'\f130'} -.icon-pound:before{content:'\f25b'} -.icon-poundalt:before{content:'\f25c'} -.icon-powerjack:before{content:'\f0fd'} -.icon-powerplug:before{content:'\f0ed'} -.icon-powerplugeu:before{content:'\f28b'} -.icon-powerplugus:before{content:'\f28c'} -.icon-presentation:before{content:'\f0c4'} -.icon-prestashop:before{content:'\f061'} -.icon-pretzel:before{content:'\f3cf'} -.icon-preview:before{content:'\f330'} -.icon-previous:before{content:'\f18b'} -.icon-print:before{content:'\f125'} -.icon-protecteddirectory:before{content:'\f04d'} -.icon-pscircle:before{content:'\f2bb'} -.icon-pscursor:before{content:'\f2c3'} -.icon-psdown:before{content:'\f2c6'} -.icon-psleft:before{content:'\f2c7'} -.icon-pslone:before{content:'\f2cc'} -.icon-psltwo:before{content:'\f2cd'} -.icon-psright:before{content:'\f2c5'} -.icon-psrone:before{content:'\f2ce'} -.icon-psrtwo:before{content:'\f2cf'} -.icon-pssquare:before{content:'\f2bc'} -.icon-pstriangle:before{content:'\f2bd'} -.icon-psup:before{content:'\f2c4'} -.icon-psx:before{content:'\f2be'} -.icon-pull:before{content:'\f089'} -.icon-punisher:before{content:'\f343'} -.icon-push:before{content:'\f088'} -.icon-puzzle-plugin:before{content:'\f0a0'} -.icon-python:before{content:'\f071'} -.icon-qrcode:before{content:'\f275'} -.icon-quake:before{content:'\f355'} -.icon-queen:before{content:'\f2fd'} -.icon-query:before{content:'\f08a'} -.icon-question-sign:before{content:'\f0a3'} -.icon-quote:before{content:'\f12f'} -.icon-quotedown:before{content:'\f329'} -.icon-quoteup:before{content:'\f328'} -.icon-raceflag:before{content:'\f38e'} -.icon-racquet:before{content:'\f2f2'} -.icon-radio:before{content:'\f1a1'} -.icon-radioactive:before{content:'\f282'} -.icon-radiobutton:before{content:'\f312'} -.icon-railroad:before{content:'\f248'} -.icon-rain:before{content:'\f22f'} -.icon-ram:before{content:'\f02c'} -.icon-random:before{content:'\f188'} -.icon-rar:before{content:'\f117'} -.icon-raspberry:before{content:'\f368'} -.icon-raspberrypi:before{content:'\f369'} -.icon-rawaccesslogs:before{content:'\f0c1'} -.icon-razor:before{content:'\f416'} -.icon-reademail:before{content:'\f173'} -.icon-record:before{content:'\f189'} -.icon-rectangle:before{content:'\25ad'} -.icon-recycle:before{content:'\f297'} -.icon-reddit:before{content:'\f154'} -.icon-redirect:before{content:'\f054'} -.icon-refresh:before{content:'\f078'} -.icon-reliability:before{content:'\f016'} -.icon-remote:before{content:'\f298'} -.icon-remove:before{content:'\00d7'} -.icon-remove-circle:before{content:'\f470'} -.icon-remove-sign:before{content:'\f478'} -.icon-removefriend:before{content:'\f3db'} -.icon-repeat:before{content:'\f32b'} -.icon-repeatone:before{content:'\f196'} -.icon-resellerhosting:before{content:'\f03a'} -.icon-residentevil:before{content:'\f350'} -.icon-resistor:before{content:'\f3eb'} -.icon-resize:before{content:'\f1ed'} -.icon-resize-full:before{content:'\f325'} -.icon-resize-horizontal:before{content:'\f318'} -.icon-resize-small:before{content:'\f326'} -.icon-resize-vertical:before{content:'\f319'} -.icon-restart:before{content:'\f11f'} -.icon-restaurantmenu:before{content:'\f362'} -.icon-restore:before{content:'\f30d'} -.icon-restricted:before{content:'\f0ab'} -.icon-retweet:before{content:'\f486'} -.icon-rim:before{content:'\f36f'} -.icon-ring:before{content:'\02da'} -.icon-road:before{content:'\f249'} -.icon-roadsign-roadsignright:before{content:'\f21b'} -.icon-roadsignleft:before{content:'\f240'} -.icon-robocop:before{content:'\f357'} -.icon-rocket-launch:before{content:'\f29c'} -.icon-rook:before{content:'\f2fa'} -.icon-root:before{content:'\f33c'} -.icon-rorschach:before{content:'\f358'} -.icon-rotateclockwise:before{content:'\f202'} -.icon-rotatecounterclockwise:before{content:'\f203'} -.icon-roundrectangle:before{content:'\f1bd'} -.icon-route:before{content:'\f402'} -.icon-router:before{content:'\f0e9'} -.icon-rss:before{content:'\f17b'} -.icon-rubberstamp:before{content:'\f274'} -.icon-ruby:before{content:'\f067'} -.icon-ruler:before{content:'\f1ef'} -.icon-sad:before{content:'\f13d'} -.icon-safetypin:before{content:'\f417'} -.icon-satellite:before{content:'\f38a'} -.icon-satellitedish-remotemysql:before{content:'\f0c0'} -.icon-save-floppy:before{content:'\f0c8'} -.icon-scales:before{content:'\f3fd'} -.icon-science-atom:before{content:'\f2b0'} -.icon-scope-scan:before{content:'\f212'} -.icon-scopealt:before{content:'\f237'} -.icon-screenshot:before{content:'\f109'} -.icon-screw:before{content:'\f426'} -.icon-screwdriver:before{content:'\f292'} -.icon-screwdriveralt:before{content:'\f293'} -.icon-script:before{content:'\f08d'} -.icon-sd:before{content:'\f106'} -.icon-search:before{content:'\f0c5'} -.icon-searchdocument:before{content:'\f419'} -.icon-searchfolder:before{content:'\f41a'} -.icon-security-shield:before{content:'\f02d'} -.icon-securityalt-shieldalt:before{content:'\f02e'} -.icon-selection-rectangleselection:before{content:'\f1b0'} -.icon-selectionadd:before{content:'\f1b2'} -.icon-selectionintersect:before{content:'\f1b4'} -.icon-selectionremove:before{content:'\f1b3'} -.icon-seo:before{content:'\f030'} -.icon-server:before{content:'\f026'} -.icon-servers:before{content:'\f027'} -.icon-settingsandroid:before{content:'\f309'} -.icon-settingsfour-gearsalt:before{content:'\f306'} -.icon-settingsthree-gears:before{content:'\f307'} -.icon-settingstwo-gearalt:before{content:'\f308'} -.icon-shades-sunglasses:before{content:'\f294'} -.icon-shapes:before{content:'\f1dd'} -.icon-share:before{content:'\f47d'} -.icon-share-alt:before{content:'\f16c'} -.icon-sharealt:before{content:'\f147'} -.icon-sharedfile:before{content:'\f0ef'} -.icon-sharedhosting:before{content:'\f037'} -.icon-sharethree:before{content:'\f414'} -.icon-sheriff:before{content:'\f2a9'} -.icon-shipping:before{content:'\f23f'} -.icon-shopping:before{content:'\f010'} -.icon-shopping-cart:before{content:'\f035'} -.icon-shoppingbag:before{content:'\f273'} -.icon-shortcut:before{content:'\f043'} -.icon-shovel:before{content:'\f290'} -.icon-shredder:before{content:'\f27c'} -.icon-shutdown:before{content:'\f11e'} -.icon-sidebar:before{content:'\f124'} -.icon-signal:before{content:'\f100'} -.icon-sim:before{content:'\f0e1'} -.icon-simalt:before{content:'\f121'} -.icon-skrill:before{content:'\f268'} -.icon-skull:before{content:'\f38d'} -.icon-skype:before{content:'\f141'} -.icon-skypeaway:before{content:'\f39f'} -.icon-skypebusy:before{content:'\f3a0'} -.icon-skypeoffline:before{content:'\f3a1'} -.icon-skypeonline:before{content:'\f39e'} -.icon-smaller:before{content:'\f30b'} -.icon-smf:before{content:'\f062'} -.icon-smile:before{content:'\263a'} -.icon-snow:before{content:'\f22e'} -.icon-snowman:before{content:'\f37c'} -.icon-socialnetwork:before{content:'\f03b'} -.icon-software:before{content:'\f09a'} -.icon-sortbynameascending-atoz:before{content:'\f1c2'} -.icon-sortbynamedescending-ztoa:before{content:'\f1c1'} -.icon-sortbysizeascending:before{content:'\f1c3'} -.icon-sortbysizedescending:before{content:'\f1c4'} -.icon-soundwave:before{content:'\f194'} -.icon-soup:before{content:'\f3d1'} -.icon-spaceinvaders:before{content:'\f352'} -.icon-spades:before{content:'\f2f5'} -.icon-spam:before{content:'\f047'} -.icon-spamalt:before{content:'\f048'} -.icon-spawn:before{content:'\f344'} -.icon-speaker:before{content:'\f372'} -.icon-speed:before{content:'\f40b'} -.icon-spider:before{content:'\f346'} -.icon-spiderman:before{content:'\f347'} -.icon-split:before{content:'\f335'} -.icon-spoon:before{content:'\f213'} -.icon-spray:before{content:'\f1c7'} -.icon-spreadsheet:before{content:'\f0c3'} -.icon-squareapp:before{content:'\f26f'} -.icon-squarebrackets:before{content:'\f0b3'} -.icon-ssh:before{content:'\f04e'} -.icon-sslmanager:before{content:'\f04f'} -.icon-stadium:before{content:'\f3d6'} -.icon-stamp:before{content:'\f242'} -.icon-stampalt:before{content:'\f243'} -.icon-star:before{content:'\f13a'} -.icon-star-empty:before{content:'\f13b'} -.icon-starempty:before{content:'\f2de'} -.icon-starfull:before{content:'\f2e0'} -.icon-starhalf:before{content:'\f2df'} -.icon-steak:before{content:'\f360'} -.icon-steam:before{content:'\f2dd'} -.icon-step-backward:before{content:'\f198'} -.icon-step-forward:before{content:'\f197'} -.icon-sticker:before{content:'\f3f5'} -.icon-stiletto:before{content:'\f429'} -.icon-stockdown:before{content:'\f252'} -.icon-stocks:before{content:'\f250'} -.icon-stockup:before{content:'\f251'} -.icon-stomach:before{content:'\f3e1'} -.icon-stop:before{content:'\f185'} -.icon-stopwatch:before{content:'\f219'} -.icon-storage-box:before{content:'\f011'} -.icon-storagealt-drawer:before{content:'\f012'} -.icon-store:before{content:'\f272'} -.icon-storm:before{content:'\f230'} -.icon-stove:before{content:'\f371'} -.icon-strawberry:before{content:'\f3f3'} -.icon-strikethrough:before{content:'\f1f7'} -.icon-student-school:before{content:'\f288'} -.icon-stumbleupon:before{content:'\f40c'} -.icon-subdomain:before{content:'\f052'} -.icon-submarine:before{content:'\f373'} -.icon-subscript:before{content:'\f1ea'} -.icon-subtractshape:before{content:'\f1fe'} -.icon-sum:before{content:'\f33b'} -.icon-sun-day:before{content:'\f206'} -.icon-sunnysideup:before{content:'\f365'} -.icon-superman:before{content:'\f33f'} -.icon-superscript:before{content:'\f1eb'} -.icon-support:before{content:'\f013'} -.icon-supportalt:before{content:'\f014'} -.icon-switch:before{content:'\f28a'} -.icon-switchoff:before{content:'\f32d'} -.icon-switchoffalt:before{content:'\f28e'} -.icon-switchon:before{content:'\f32c'} -.icon-switchonalt:before{content:'\f28d'} -.icon-sword:before{content:'\f2ed'} -.icon-sync:before{content:'\f0bd'} -.icon-syncalt:before{content:'\f11c'} -.icon-synckeeplocal:before{content:'\f33e'} -.icon-synckeepserver:before{content:'\f33d'} -.icon-syringe-antivirus:before{content:'\f0a9'} -.icon-tablet:before{content:'\f118'} -.icon-tabletennis-pingpong:before{content:'\f2f0'} -.icon-taco:before{content:'\f3cd'} -.icon-tag:before{content:'\f032'} -.icon-tagalt-pricealt:before{content:'\f264'} -.icon-tags:before{content:'\f482'} -.icon-tagvertical:before{content:'\f15f'} -.icon-tank:before{content:'\f423'} -.icon-target:before{content:'\f2a6'} -.icon-taskmanager-logprograms:before{content:'\f04b'} -.icon-tasks:before{content:'\f0e0'} -.icon-taxi:before{content:'\f3a4'} -.icon-tea:before{content:'\f3cb'} -.icon-teapot:before{content:'\f42c'} -.icon-telescope:before{content:'\f3ef'} -.icon-temperature-thermometer:before{content:'\f20d'} -.icon-temperaturealt-thermometeralt:before{content:'\f20e'} -.icon-tennis:before{content:'\f2ea'} -.icon-tent-camping:before{content:'\f215'} -.icon-terminal:before{content:'\f114'} -.icon-tethering:before{content:'\f0f1'} -.icon-tetrisone:before{content:'\f34b'} -.icon-tetristhree:before{content:'\f34d'} -.icon-tetristwo:before{content:'\f34c'} -.icon-text-height:before{content:'\f1f8'} -.icon-text-width:before{content:'\f1f9'} -.icon-th:before{content:'\f110'} -.icon-th-large:before{content:'\f112'} -.icon-th-list:before{content:'\f113'} -.icon-theather:before{content:'\f39c'} -.icon-theme-style:before{content:'\f041'} -.icon-thissideup:before{content:'\f41d'} -.icon-threecolumns:before{content:'\f1ab'} -.icon-thumbs-down:before{content:'\f139'} -.icon-thumbs-up:before{content:'\f138'} -.icon-ticket:before{content:'\f3dc'} -.icon-tictactoe:before{content:'\f39a'} -.icon-tie-business:before{content:'\2040'} -.icon-time:before{content:'\f210'} -.icon-timeline:before{content:'\f253'} -.icon-tint:before{content:'\f208'} -.icon-toast:before{content:'\f2ad'} -.icon-toiletpaper:before{content:'\f384'} -.icon-tooth:before{content:'\f3de'} -.icon-toothbrush:before{content:'\f385'} -.icon-tophat:before{content:'\f3f0'} -.icon-torigate:before{content:'\f411'} -.icon-touchpad:before{content:'\f115'} -.icon-trafficlight:before{content:'\f22a'} -.icon-transform:before{content:'\f1a6'} -.icon-trash:before{content:'\f0ce'} -.icon-trashempty:before{content:'\f0cf'} -.icon-trashfull:before{content:'\f0d0'} -.icon-travel:before{content:'\f422'} -.icon-treediagram:before{content:'\f0ec'} -.icon-treeornament:before{content:'\f37e'} -.icon-triangle:before{content:'\25b3'} -.icon-tron:before{content:'\f34f'} -.icon-trophy:before{content:'\f2d7'} -.icon-truck:before{content:'\f211'} -.icon-trumpet:before{content:'\f375'} -.icon-tumblr:before{content:'\f164'} -.icon-tv:before{content:'\f1a4'} -.icon-twitter:before{content:'\f16a'} -.icon-twocolumnsleft:before{content:'\f1a9'} -.icon-twocolumnsleftalt:before{content:'\f1aa'} -.icon-twocolumnsright:before{content:'\f1a7'} -.icon-twocolumnsrightalt:before{content:'\f1a8'} -.icon-ubuntu:before{content:'\f120'} -.icon-umbrella:before{content:'\f218'} -.icon-underline:before{content:'\f1f6'} -.icon-undo:before{content:'\f32a'} -.icon-unlock:before{content:'\f0bf'} -.icon-upleft:before{content:'\f302'} -.icon-upload:before{content:'\f47a'} -.icon-uploadalt:before{content:'\f11b'} -.icon-upright:before{content:'\f303'} -.icon-uptime:before{content:'\f017'} -.icon-usb:before{content:'\f10d'} -.icon-usbalt:before{content:'\f10e'} -.icon-usbplug:before{content:'\f10f'} -.icon-user:before{content:'\f133'} -.icon-userfilter:before{content:'\f05d'} -.icon-usfootball:before{content:'\f2ec'} -.icon-value-coins:before{content:'\f018'} -.icon-vector:before{content:'\f1b6'} -.icon-vendetta:before{content:'\f3c5'} -.icon-video:before{content:'\f17d'} -.icon-viking:before{content:'\f379'} -.icon-vimeo:before{content:'\f168'} -.icon-vinyl:before{content:'\f0cc'} -.icon-violin:before{content:'\f1a5'} -.icon-virus:before{content:'\f0a8'} -.icon-visa:before{content:'\f3c2'} -.icon-visitor:before{content:'\f097'} -.icon-vlc-cone:before{content:'\f192'} -.icon-voice:before{content:'\f18c'} -.icon-volume-down:before{content:'\f0e3'} -.icon-volume-off:before{content:'\f0e4'} -.icon-volume-up:before{content:'\f0e2'} -.icon-vps:before{content:'\f025'} -.icon-wacom:before{content:'\f1bb'} -.icon-walle:before{content:'\f3bc'} -.icon-wallet:before{content:'\e000'} -.icon-warcraft:before{content:'\f3bf'} -.icon-warmedal:before{content:'\f2e4'} -.icon-warning-sign:before{content:'\f316'} -.icon-washer:before{content:'\f39b'} -.icon-watch:before{content:'\f378'} -.icon-watertap-plumbing:before{content:'\f22d'} -.icon-wave-sea:before{content:'\f23c'} -.icon-wavealt-seaalt:before{content:'\f23b'} -.icon-webcam:before{content:'\f0fe'} -.icon-webcamalt:before{content:'\f129'} -.icon-webhostinghub:before{content:'\f031'} -.icon-webmail:before{content:'\f045'} -.icon-webpage:before{content:'\f033'} -.icon-webplatform:before{content:'\f3c3'} -.icon-websitealt:before{content:'\f01c'} -.icon-websitebuilder:before{content:'\f034'} -.icon-weight:before{content:'\f430'} -.icon-westernunion:before{content:'\f26a'} -.icon-wheel:before{content:'\f228'} -.icon-wheelchair:before{content:'\f3fe'} -.icon-whistle:before{content:'\f3d8'} -.icon-whmcs:before{content:'\f066'} -.icon-wifi:before{content:'\f0ff'} -.icon-wind:before{content:'\f41b'} -.icon-windleft:before{content:'\f424'} -.icon-windows:before{content:'\f019'} -.icon-windright:before{content:'\f425'} -.icon-wine:before{content:'\f238'} -.icon-wizard:before{content:'\f03c'} -.icon-wizardalt:before{content:'\f1fb'} -.icon-wizardhat:before{content:'\f337'} -.icon-woman-female:before{content:'\f2a2'} -.icon-women:before{content:'\f24d'} -.icon-wordpress:before{content:'\f074'} -.icon-wrench:before{content:'\f05b'} -.icon-wrenchalt:before{content:'\f2b2'} -.icon-xbox:before{content:'\f353'} -.icon-xmen:before{content:'\f345'} -.icon-yahoo:before{content:'\f151'} -.icon-yen:before{content:'\00a5'} -.icon-yenalt:before{content:'\f25d'} -.icon-yinyang:before{content:'\262f'} -.icon-youtube:before{content:'\f142'} -.icon-zelda:before{content:'\f3b8'} -.icon-zikula:before{content:'\f0ac'} -.icon-zip:before{content:'\f116'} -.icon-zodiac-aquarius:before{content:'\f3b4'} -.icon-zodiac-aries:before{content:'\f3aa'} -.icon-zodiac-cancer:before{content:'\f3ad'} -.icon-zodiac-capricorn:before{content:'\f3b3'} -.icon-zodiac-gemini:before{content:'\f3ac'} -.icon-zodiac-leo:before{content:'\f3ae'} -.icon-zodiac-libra:before{content:'\f3b0'} -.icon-zodiac-pisces:before{content:'\f3b5'} -.icon-zodiac-sagitarius:before{content:'\f3b2'} -.icon-zodiac-scorpio:before{content:'\f3b1'} -.icon-zodiac-taurus:before{content:'\f3ab'} -.icon-zodiac-virgo:before{content:'\f3af'} -.icon-zoom-in:before{content:'\f320'} -.icon-zoom-out:before{content:'\f321'} -.icon-vk:before{content:'\f34e'} -.icon-bitcoin:before{content:'\f584'} -.icon-rouble:before{content:'\f4ca'} -.icon-phpnuke:before{content:'\f48c'} -.icon-modx:before{content:'\f48d'} -.icon-eoneohseven:before{content:'\f48e'} -.icon-subrion:before{content:'\f48f'} -.icon-typothree:before{content:'\f490'} -.icon-tikiwiki:before{content:'\f491'} -.icon-pligg:before{content:'\f492'} -.icon-pyrocms:before{content:'\f493'} -.icon-mambo:before{content:'\f494'} -.icon-contao:before{content:'\f495'} -.icon-crackedegg:before{content:'\f496'} -.icon-coffeecupalt:before{content:'\f497'} -.icon-reademailalt:before{content:'\f498'} -.icon-train:before{content:'\f499'} -.icon-shoebox:before{content:'\f49a'} -.icon-bathtub:before{content:'\f49b'} -.icon-ninegag:before{content:'\f49c'} -.icon-pebble:before{content:'\f49d'} -.icon-musicthree:before{content:'\f49e'} -.icon-stairsup:before{content:'\f49f'} -.icon-stairsdown:before{content:'\f4a0'} -.icon-bookalt:before{content:'\f4a1'} -.icon-programclose:before{content:'\f4a2'} -.icon-programok:before{content:'\f4a3'} -.icon-splitalt:before{content:'\f4a4'} -.icon-solarsystem:before{content:'\f4a5'} -.icon-honeycomb:before{content:'\f4a6'} -.icon-tools:before{content:'\f4a7'} -.icon-xoops:before{content:'\f4a8'} -.icon-pixie:before{content:'\f4a9'} -.icon-dotclear:before{content:'\f4aa'} -.icon-impresscms:before{content:'\f4ab'} -.icon-saurus:before{content:'\f4ac'} -.icon-impresspages:before{content:'\f4ad'} -.icon-monstra:before{content:'\f4ae'} -.icon-snews:before{content:'\f4af'} -.icon-jcore:before{content:'\f4b0'} -.icon-silverstripe:before{content:'\f4b1'} -.icon-btwoevolution:before{content:'\f4b2'} -.icon-nucleus:before{content:'\f4b3'} -.icon-symphony:before{content:'\f4b5'} -.icon-vanillacms:before{content:'\f4b6'} -.icon-bbpress:before{content:'\f4b7'} -.icon-phpbbalt:before{content:'\f4b8'} -.icon-chyrp:before{content:'\f4b9'} -.icon-pivotx:before{content:'\f4ba'} -.icon-pagecookery:before{content:'\f4bb'} -.icon-moviereelalt:before{content:'\f4bc'} -.icon-cassettealt:before{content:'\f4bd'} -.icon-photobucket:before{content:'\f4be'} -.icon-technorati:before{content:'\f4bf'} -.icon-theverge:before{content:'\f4c0'} -.icon-stacks:before{content:'\f4c1'} -.icon-dotlist:before{content:'\f4c2'} -.icon-numberlist:before{content:'\f4c3'} -.icon-indentleft:before{content:'\f4c4'} -.icon-indentright:before{content:'\f4c5'} -.icon-fblike:before{content:'\f4c6'} -.icon-fbdislike:before{content:'\f4c7'} -.icon-sale:before{content:'\f4c8'} -.icon-sharetronix:before{content:'\f4c9'} -.icon-markerdown:before{content:'\f4cb'} -.icon-markerup:before{content:'\f4cc'} -.icon-markerleft:before{content:'\f4cd'} -.icon-markerright:before{content:'\f4ce'} -.icon-bookmarkalt:before{content:'\f4cf'} -.icon-calendarthree:before{content:'\f4d0'} -.icon-wineglass:before{content:'\f4d1'} -.icon-slidersoff:before{content:'\f4d2'} -.icon-slidersmiddle:before{content:'\f4d3'} -.icon-slidersfull:before{content:'\f4d4'} -.icon-slidersdesc:before{content:'\f4d5'} -.icon-slidersasc:before{content:'\f4d6'} -.icon-slideronefull:before{content:'\f4d7'} -.icon-slidertwofull:before{content:'\f4d8'} -.icon-sliderthreefull:before{content:'\f4d9'} -.icon-noborders:before{content:'\f4da'} -.icon-bottomborder:before{content:'\f4db'} -.icon-topborder:before{content:'\f4dc'} -.icon-leftborder:before{content:'\f4dd'} -.icon-rightborder:before{content:'\f4de'} -.icon-horizontalborder:before{content:'\f4df'} -.icon-verticalborder:before{content:'\f4e0'} -.icon-outerborders:before{content:'\f4e1'} -.icon-innerborders:before{content:'\f4e2'} -.icon-fullborders:before{content:'\f4e3'} -.icon-networksignalalt:before{content:'\f4e4'} -.icon-resizeverticalalt:before{content:'\f4e5'} -.icon-resizehorizontalalt:before{content:'\f4e6'} -.icon-moneyalt:before{content:'\f4e7'} -.icon-fontcase:before{content:'\f4e8'} -.icon-playstation:before{content:'\f4e9'} -.icon-cube:before{content:'\f4ea'} -.icon-sphere:before{content:'\f4eb'} -.icon-ceilinglight:before{content:'\f4ec'} -.icon-chandelier:before{content:'\f4ed'} -.icon-details:before{content:'\f4ee'} -.icon-detailsalt:before{content:'\f4ef'} -.icon-bullet:before{content:'\f4f0'} -.icon-gun:before{content:'\f4f1'} -.icon-processorthree:before{content:'\f4f2'} -.icon-world:before{content:'\f4f3'} -.icon-statistics:before{content:'\f4f4'} -.icon-shoppingcartalt:before{content:'\f4f5'} -.icon-microphonealt:before{content:'\f4f6'} -.icon-routeralt:before{content:'\f4f7'} -.icon-shell:before{content:'\f4f8'} -.icon-squareplay:before{content:'\f4f9'} -.icon-squarestop:before{content:'\f4fa'} -.icon-squarepause:before{content:'\f4fb'} -.icon-squarerecord:before{content:'\f4fc'} -.icon-squareforward:before{content:'\f4fd'} -.icon-squareback:before{content:'\f4fe'} -.icon-squarenext:before{content:'\f4ff'} -.icon-squareprevious:before{content:'\f500'} -.icon-mega:before{content:'\f501'} -.icon-charliechaplin:before{content:'\f502'} -.icon-popcorn:before{content:'\f503'} -.icon-fatarrowright:before{content:'\f504'} -.icon-fatarrowleft:before{content:'\f505'} -.icon-fatarrowdown:before{content:'\f506'} -.icon-fatarrowup:before{content:'\f507'} -.icon-shirtbutton:before{content:'\f508'} -.icon-shirtbuttonalt:before{content:'\f509'} -.icon-cuckooclock:before{content:'\f50a'} -.icon-lens:before{content:'\f50b'} -.icon-voltage:before{content:'\f50c'} -.icon-planealt:before{content:'\f50d'} -.icon-busalt:before{content:'\f50e'} -.icon-lipstick:before{content:'\f50f'} -.icon-plantalt:before{content:'\f510'} -.icon-paperboat:before{content:'\f511'} -.icon-texture:before{content:'\f512'} -.icon-dominoone:before{content:'\f513'} -.icon-dominotwo:before{content:'\f514'} -.icon-dominothree:before{content:'\f515'} -.icon-dominofour:before{content:'\f516'} -.icon-dominofive:before{content:'\f517'} -.icon-dominosix:before{content:'\f518'} -.icon-dominoseven:before{content:'\f519'} -.icon-dominoeight:before{content:'\f51a'} -.icon-dominonine:before{content:'\f51b'} -.icon-connected:before{content:'\f51c'} -.icon-connectedpc:before{content:'\f51d'} -.icon-musicsheet:before{content:'\f51e'} -.icon-rdio:before{content:'\f51f'} -.icon-spotify:before{content:'\f520'} -.icon-deviantart:before{content:'\f521'} -.icon-yelp:before{content:'\f522'} -.icon-behance:before{content:'\f523'} -.icon-nfc:before{content:'\f524'} -.icon-earbudsalt:before{content:'\f525'} -.icon-earbuds:before{content:'\f526'} -.icon-amazon:before{content:'\f527'} -.icon-openid:before{content:'\f528'} -.icon-digg:before{content:'\f529'} -.icon-retweet:before{content:'\f52a'} -.icon-moonnew:before{content:'\f52b'} -.icon-moonwaxingcrescent:before{content:'\f52c'} -.icon-moonfirstquarter:before{content:'\f52d'} -.icon-moonwaxinggibbous:before{content:'\f52e'} -.icon-moonfull:before{content:'\f52f'} -.icon-moonwaninggibbous:before{content:'\f530'} -.icon-moonthirdquarter:before{content:'\f531'} -.icon-moonwaningcrescent:before{content:'\f532'} -.icon-planet:before{content:'\f533'} -.icon-sodacup:before{content:'\f534'} -.icon-cocktail:before{content:'\f535'} -.icon-church:before{content:'\f536'} -.icon-mosque:before{content:'\f537'} -.icon-comedy:before{content:'\f538'} -.icon-tragedy:before{content:'\f539'} -.icon-bacon:before{content:'\f53a'} -.icon-trailor:before{content:'\f53b'} -.icon-tshirt:before{content:'\f53c'} -.icon-design:before{content:'\f53d'} -.icon-spiderweb:before{content:'\f53e'} -.icon-fireplace:before{content:'\f53f'} -.icon-tallglass:before{content:'\f540'} -.icon-grapes:before{content:'\f541'} -.icon-biohazard:before{content:'\f542'} -.icon-directions:before{content:'\f543'} -.icon-equalizerthree:before{content:'\f544'} -.icon-mountains:before{content:'\f545'} -.icon-bing:before{content:'\f546'} -.icon-windowseight:before{content:'\f547'} -.icon-microsoftoffice:before{content:'\f548'} -.icon-salealt:before{content:'\f549'} -.icon-purse:before{content:'\f54a'} -.icon-chickenalt:before{content:'\f54b'} -.icon-podium:before{content:'\f54c'} -.icon-findfriends:before{content:'\f54d'} -.icon-microphonethree:before{content:'\f54e'} -.icon-workshirt:before{content:'\f54f'} -.icon-donotdisturb:before{content:'\f550'} -.icon-addtags:before{content:'\f551'} -.icon-removetags:before{content:'\f556'} -.icon-carbattery:before{content:'\f553'} -.icon-debug:before{content:'\f554'} -.icon-trojan:before{content:'\f555'} -.icon-molecule:before{content:'\f556'} -.icon-safetygoggles:before{content:'\f557'} -.icon-leather:before{content:'\f558'} -.icon-teddybear:before{content:'\f559'} -.icon-stroller:before{content:'\f55a'} -.icon-circleplay:before{content:'\f55b'} -.icon-circlestop:before{content:'\f55c'} -.icon-circlepause:before{content:'\f55d'} -.icon-circlerecord:before{content:'\f55e'} -.icon-circleforward:before{content:'\f55f'} -.icon-circlebackward:before{content:'\f560'} -.icon-circlenext:before{content:'\f561'} -.icon-circleprevious:before{content:'\f562'} -.icon-circleplayempty:before{content:'\f563'} -.icon-circlestopempty:before{content:'\f564'} -.icon-circlepauseempty:before{content:'\f565'} -.icon-circlerecordempty:before{content:'\f566'} -.icon-circleforwardempty:before{content:'\f567'} -.icon-circlebackwardempty:before{content:'\f568'} -.icon-circlenextempty:before{content:'\f569'} -.icon-circlepreviousempty:before{content:'\f56a'} -.icon-belt:before{content:'\f56b'} -.icon-bait:before{content:'\f56c'} -.icon-manalt:before{content:'\f56d'} -.icon-womanalt:before{content:'\f56e'} -.icon-clover:before{content:'\f56f'} -.icon-pacifier:before{content:'\f570'} -.icon-calcplus:before{content:'\f571'} -.icon-calcminus:before{content:'\f572'} -.icon-calcmultiply:before{content:'\f573'} -.icon-calcdivide:before{content:'\f574'} -.icon-calcequals:before{content:'\f575'} -.icon-city:before{content:'\f576'} -.icon-hdvideo:before{content:'\f577'} -.icon-horizontalexpand:before{content:'\f578'} -.icon-horizontalcontract:before{content:'\f579'} -.icon-radar:before{content:'\f57a'} -.icon-threed:before{content:'\f57b'} -.icon-flickralt:before{content:'\f57c'} -.icon-pattern:before{content:'\f57d'} -.icon-elevator:before{content:'\f57e'} -.icon-escalator:before{content:'\f57f'} -.icon-portrait:before{content:'\f580'} -.icon-cigar:before{content:'\f581'} -.icon-dropbox:before{content:'\f582'} -.icon-origami:before{content:'\f583'} -.icon-opensource:before{content:'\f585'} -.icon-redaxscript:before{content:'\f586'} -.icon-mahara:before{content:'\f587'} -.icon-forkcms:before{content:'\f588'} -.icon-pimcore:before{content:'\f589'} -.icon-bigace:before{content:'\f58a'} -.icon-aef:before{content:'\f58b'} -.icon-punbb:before{content:'\f58c'} -.icon-phorum:before{content:'\f58d'} -.icon-fluxbb:before{content:'\f58e'} -.icon-minibb:before{content:'\f58f'} -.icon-zenphoto:before{content:'\f590'} -.icon-fourimages:before{content:'\f591'} -.icon-plogger:before{content:'\f592'} -.icon-jcow:before{content:'\f593'} -.icon-elgg:before{content:'\f594'} -.icon-etano:before{content:'\f595'} -.icon-openclassifieds:before{content:'\f596'} -.icon-osclass:before{content:'\f597'} -.icon-openx:before{content:'\f598'} -.icon-phplist:before{content:'\f599'} -.icon-roundcube:before{content:'\f59a'} -.icon-pommo:before{content:'\f59b'} -.icon-webinsta:before{content:'\f59c'} -.icon-limesurvey:before{content:'\f59d'} -.icon-fengoffice:before{content:'\f59e'} -.icon-eyeos:before{content:'\f59f'} -.icon-dotproject:before{content:'\f5a0'} -.icon-collabtive:before{content:'\f5a1'} -.icon-projectpier:before{content:'\f5a2'} -.icon-taskfreak:before{content:'\f5a3'} -.icon-eventum:before{content:'\f5a4'} -.icon-traq:before{content:'\f5a5'} -.icon-mantisbugtracker:before{content:'\f5a6'} -.icon-oscommerce:before{content:'\f5a7'} -.icon-zencart:before{content:'\f5a8'} -.icon-tomatocart:before{content:'\f5a9'} -.icon-boxbilling:before{content:'\f5aa'} -.icon-zurmo:before{content:'\f5ab'} -.icon-orangehrm:before{content:'\f5ac'} -.icon-vtiger:before{content:'\f5ad'} -.icon-mibew:before{content:'\f5ae'} -.icon-phpmyfaq:before{content:'\f5af'} -.icon-yiiframework:before{content:'\f5b0'} -.icon-zendframework:before{content:'\f5b1'} -.icon-fuelphp:before{content:'\f5b2'} -.icon-kohana:before{content:'\f5b3'} -.icon-smarty:before{content:'\f5b4'} -.icon-sidu:before{content:'\f5b5'} -.icon-simplepie:before{content:'\f5b6'} -.icon-projectsend:before{content:'\f5b7'} -.icon-extjs:before{content:'\f5b8'} -.icon-raphael:before{content:'\f5b9'} -.icon-sizzle:before{content:'\f5ba'} -.icon-yui:before{content:'\f5bb'} -.icon-scissorsalt:before{content:'\f5bc'} -.icon-cuthere:before{content:'\f5bd'} -.icon-coinsalt:before{content:'\f5be'} -.icon-parkingmeter:before{content:'\f5bf'} -.icon-treethree:before{content:'\f5c0'} -.icon-packarchive:before{content:'\f5c1'} -.icon-unpackarchive:before{content:'\f5c2'} -.icon-terminalalt:before{content:'\f5c3'} -.icon-jersey:before{content:'\f5c4'} -.icon-vial:before{content:'\f5c5'} -.icon-noteslist:before{content:'\f5c6'} -.icon-notestasks:before{content:'\f5c7'} -.icon-notesdate:before{content:'\f5c8'} -.icon-noteslocation:before{content:'\f5c9'} -.icon-noteslistalt:before{content:'\f5ca'} -.icon-notestasksalt:before{content:'\f5cb'} -.icon-notesdatealt:before{content:'\f5cc'} -.icon-noteslocationalt:before{content:'\f5cd'} -.icon-useralt:before{content:'\f5ce'} -.icon-adduseralt:before{content:'\f5cf'} -.icon-removeuseralt:before{content:'\f5d0'} -.icon-banuseralt:before{content:'\f5d1'} -.icon-banuser:before{content:'\f5d2'} -.icon-paintrollalt:before{content:'\f5d3'} -.icon-textcursor:before{content:'\f5d4'} -.icon-textfield:before{content:'\f5d5'} -.icon-precisecursor:before{content:'\f5d6'} -.icon-brokenlink:before{content:'\f5d7'} -.icon-bookmarkthree:before{content:'\f5d8'} -.icon-bookmarkfour:before{content:'\f5d9'} -.icon-warmedalalt:before{content:'\f5da'} -.icon-thinking:before{content:'\f5db'} -.icon-commentlove:before{content:'\f5dc'} -.icon-commentsmiley:before{content:'\f5dd'} -.icon-sharetwo:before{content:'\f147'} -.icon-emptystar:before{content:'\f2de'} -.icon-halfstar:before{content:'\f2df'} -.icon-fullstar:before{content:'\f2e0'} -.icon-forbidden:before{content:'\f314'} -.icon-indentleftalt:before{content:'\f4c4'} -.icon-indentrightalt:before{content:'\f4c5'} -.icon-modxalt:before{content:'\f5de'} -.icon-apple:before{content:'\f5df'} -.icon-greekcolumn:before{content:'\f5e0'} -.icon-walletalt:before{content:'\f5e1'} -.icon-dollarsquare:before{content:'\f5e2'} -.icon-poundsquare:before{content:'\f5e3'} -.icon-yensquare:before{content:'\f5e4'} -.icon-eurosquare:before{content:'\f5e5'} -.icon-bitcoinsquare:before{content:'\f5e6'} -.icon-roublesquare:before{content:'\f5e7'} -.icon-roublealt:before{content:'\f5e8'} -.icon-bitcoinalt:before{content:'\f5e9'} -.icon-gavel:before{content:'\f5ea'} -.icon-barchartasc:before{content:'\f5eb'} -.icon-barchartdesc:before{content:'\f5ec'} -.icon-house:before{content:'\f5ed'} -.icon-garage:before{content:'\f5ee'} -.icon-milk:before{content:'\f5ef'} -.icon-hryvnia:before{content:'\f5f0'} -.icon-hryvniasquare:before{content:'\f5f1'} -.icon-hryvniaalt:before{content:'\f5f2'} -.icon-beeralt:before{content:'\f5f3'} -.icon-trolleyfull:before{content:'\f5f4'} -.icon-trolleyload:before{content:'\f5f5'} -.icon-trolleyunload:before{content:'\f5f6'} -.icon-trolleyempty:before{content:'\f5f7'} -.icon-mootools:before{content:'\f5f8'} -.icon-mootoolstwo:before{content:'\f5f9'} -.icon-mootoolsthree:before{content:'\f5fa'} -.icon-mysqlthree:before{content:'\f5fb'} -.icon-mysqlalt:before{content:'\f5fc'} -.icon-pgsql:before{content:'\f5fd'} -.icon-mongodb:before{content:'\f5fe'} -.icon-neofourj:before{content:'\f5ff'} -.icon-nosql:before{content:'\f600'} -.icon-catface:before{content:'\f601'} -.icon-polaroid:before{content:'\f602'} -.icon-clouderror:before{content:'\f603'} -.icon-camcorder:before{content:'\f604'} -.icon-projector:before{content:'\f605'} -.icon-sdvideo:before{content:'\f606'} -.icon-fx:before{content:'\f607'} -.icon-gramophone:before{content:'\f608'} -.icon-speakeralt:before{content:'\f609'} -.icon-hddalt:before{content:'\f60a'} -.icon-usbflash:before{content:'\f60b'} -.icon-manillaenvelope:before{content:'\f60c'} -.icon-stickynote:before{content:'\f60d'} -.icon-stickynotealt:before{content:'\f60e'} -.icon-torch:before{content:'\f60f'} -.icon-flashlightalt:before{content:'\f610'} -.icon-campfire:before{content:'\f611'} -.icon-cctv:before{content:'\f612'} -.icon-drill:before{content:'\f613'} -.icon-lampalt:before{content:'\f614'} -.icon-flowerpot:before{content:'\f615'} -.icon-defragment:before{content:'\f616'} -.icon-panoramio:before{content:'\f617'} -.icon-panorama:before{content:'\f618'} -.icon-photosphere:before{content:'\f619'} -.icon-panoramaalt:before{content:'\f61a'} -.icon-timer:before{content:'\f61b'} -.icon-burstmode:before{content:'\f61c'} -.icon-cameraflash:before{content:'\f61d'} -.icon-autoflash:before{content:'\f61e'} -.icon-noflash:before{content:'\f61f'} -.icon-threetofour:before{content:'\f620'} -.icon-sixteentonine:before{content:'\f621'} -.icon-cat:before{content:'\f622'} -.icon-dog:before{content:'\f623'} -.icon-rabbit:before{content:'\f624'} -.icon-koala:before{content:'\f625'} -.icon-butterflyalt:before{content:'\f626'} -.icon-butterfly:before{content:'\f627'} -.icon-wwf:before{content:'\f628'} -.icon-poop:before{content:'\f629'} -.icon-poopalt:before{content:'\f62a'} -.icon-kiwi:before{content:'\f62b'} -.icon-kiwifruit:before{content:'\f62c'} -.icon-lemon:before{content:'\f62d'} -.icon-pear:before{content:'\f62e'} -.icon-watermelon:before{content:'\f62f'} -.icon-onion:before{content:'\f630'} -.icon-turnip:before{content:'\f631'} -.icon-eggplant:before{content:'\f632'} -.icon-avocado:before{content:'\f633'} -.icon-perfume:before{content:'\f634'} -.icon-arch:before{content:'\f635'} -.icon-pluspages:before{content:'\f636'} -.icon-community:before{content:'\f637'} -.icon-pluscircles:before{content:'\f638'} -.icon-googleplusold:before{content:'\f639'} -.icon-plusgames:before{content:'\f63a'} -.icon-event:before{content:'\f63b'} -.icon-miui:before{content:'\f63c'} -.icon-hot:before{content:'\f63d'} -.icon-flowup:before{content:'\f63e'} -.icon-flowdown:before{content:'\f63f'} -.icon-moustache:before{content:'\f640'} -.icon-angle:before{content:'\f641'} -.icon-sleep:before{content:'\f642'} -.icon-acorn:before{content:'\f643'} -.icon-steamalt:before{content:'\f644'} -.icon-resizeupleft:before{content:'\f645'} -.icon-resizeupright:before{content:'\f646'} -.icon-resizedownright:before{content:'\f647'} -.icon-resizedownleft:before{content:'\f648'} -.icon-hammeralt:before{content:'\f649'} -.icon-bamboo:before{content:'\f64a'} -.icon-mypictures:before{content:'\f64b'} -.icon-mymusic:before{content:'\f64c'} -.icon-myvideos:before{content:'\f64d'} -.icon-systemfolder:before{content:'\f64e'} -.icon-bookthree:before{content:'\f64f'} -.icon-compile:before{content:'\f650'} -.icon-report:before{content:'\f651'} -.icon-fliphorizontal:before{content:'\f652'} -.icon-flipvertical:before{content:'\f653'} -.icon-construction:before{content:'\f654'} -.icon-counteralt:before{content:'\f655'} -.icon-counter:before{content:'\f656'} -.icon-papercutter:before{content:'\f657'} -.icon-snaptodot:before{content:'\f658'} -.icon-snaptogrid:before{content:'\f659'} -.icon-caligraphy:before{content:'\f65a'} -.icon-icecreamthree:before{content:'\f65b'} -.icon-skitch:before{content:'\f65c'} -.icon-archlinux:before{content:'\f65d'} -.icon-elementaryos:before{content:'\f65e'} -.icon-loadingone:before{content:'\f65f'} -.icon-loadingtwo:before{content:'\f660'} -.icon-loadingthree:before{content:'\f661'} -.icon-loadingfour:before{content:'\f662'} -.icon-loadingfive:before{content:'\f663'} -.icon-loadingsix:before{content:'\f664'} -.icon-loadingseven:before{content:'\f665'} -.icon-loadingeight:before{content:'\f666'} -.icon-brokenheart:before{content:'\f667'} -.icon-heartarrow:before{content:'\f668'} -.icon-heartsparkle:before{content:'\f669'} -.icon-cell:before{content:'\f66a'} -.icon-panda:before{content:'\f66b'} -.icon-refreshalt:before{content:'\f66c'} -.icon-mirror:before{content:'\f66d'} -.icon-headphonesthree:before{content:'\f66e'} -.icon-fan:before{content:'\f66f'} -.icon-tornado:before{content:'\f670'} -.icon-hangout:before{content:'\f671'} -.icon-beaker:before{content:'\f672'} -.icon-beakeralt:before{content:'\f673'} -.icon-phonescreensize:before{content:'\f674'} -.icon-tabletscreensize:before{content:'\f675'} -.icon-notification:before{content:'\f676'} -.icon-googleglass:before{content:'\f677'} -.icon-pinterest:before{content:'\f678'} -.icon-soundcloud:before{content:'\f679'} -.icon-alarmclock:before{content:'\f67a'} -.icon-addalarm:before{content:'\f67b'} -.icon-deletealarm:before{content:'\f67c'} -.icon-turnoffalarm:before{content:'\f67d'} -.icon-snooze:before{content:'\f67e'} -.icon-bringforward:before{content:'\f67f'} -.icon-sendbackward:before{content:'\f680'} -.icon-bringtofront:before{content:'\f681'} -.icon-sendtoback:before{content:'\f682'} -.icon-tectile:before{content:'\f683'} -.icon-grave:before{content:'\f684'} -.icon-gravetwo:before{content:'\f685'} -.icon-gravethree:before{content:'\f686'} -.icon-gravefour:before{content:'\f687'} -.icon-textlayer:before{content:'\f688'} -.icon-vectoralt:before{content:'\f689'} -.icon-drmanhattan:before{content:'\f68a'} -.icon-foursquarealt:before{content:'\f68b'} -.icon-hashtag:before{content:'\f68c'} -.icon-enteralt:before{content:'\f68d'} -.icon-exitalt:before{content:'\f68e'} -.icon-cartalt:before{content:'\f68f'} -.icon-vaultthree:before{content:'\f690'} -.icon-fatundo:before{content:'\f691'} -.icon-fatredo:before{content:'\f692'} -.icon-feedly:before{content:'\f693'} -.icon-feedlyalt:before{content:'\f694'} -.icon-squareheart:before{content:'\f695'} -.icon-squarestar:before{content:'\f696'} -.icon-squarecomment:before{content:'\f697'} -.icon-squarelike:before{content:'\f698'} -.icon-squarebookmark:before{content:'\f699'} -.icon-squaresearch:before{content:'\f69a'} -.icon-squaresettings:before{content:'\f69b'} -.icon-squarevoice:before{content:'\f69c'} -.icon-google:before{content:'\f69d'} -.icon-emojigrinalt:before{content:'\f69e'} -.icon-emojigrin:before{content:'\f69f'} -.icon-constellation:before{content:'\f6a0'} -.icon-emojisurprise:before{content:'\f6a1'} -.icon-emojidead:before{content:'\f6a2'} -.icon-emojiangry:before{content:'\f6a3'} -.icon-emojidevil:before{content:'\f6a4'} -.icon-emojiwink:before{content:'\f6a5'} -.icon-moonorbit:before{content:'\f6a6'} -.icon-emojismile:before{content:'\f6a7'} -.icon-emojisorry:before{content:'\f6a8'} -.icon-emojiconfused:before{content:'\f6a9'} -.icon-emojisleep:before{content:'\f6aa'} -.icon-emojicry:before{content:'\f6ab'} -.icon-circlefork:before{content:'\f6ac'} -.icon-circlespoon:before{content:'\f6ad'} -.icon-circleknife:before{content:'\f6ae'} -.icon-circlepencil:before{content:'\f6af'} -.icon-circlehammer:before{content:'\f6b0'} -.icon-circlescrewdriver:before{content:'\f6b1'} -.icon-middlefinger:before{content:'\f6b2'} -.icon-heavymetal:before{content:'\f6b3'} -.icon-turnright:before{content:'\f6b4'} -.icon-turnleft:before{content:'\f6b5'} -.icon-vineapp:before{content:'\f6b6'} -.icon-vineappalt:before{content:'\f6b7'} -.icon-finance:before{content:'\f6b8'} -.icon-survey:before{content:'\f6b9'} -.icon-hangouts:before{content:'\f6ba'} -.icon-square0:before{content:'\f6bb'} -.icon-square1:before{content:'\f6bc'} -.icon-square2:before{content:'\f6bd'} -.icon-square3:before{content:'\f6be'} -.icon-square4:before{content:'\f6bf'} -.icon-square5:before{content:'\f6c0'} -.icon-square6:before{content:'\f6c1'} -.icon-square7:before{content:'\f6c2'} -.icon-square8:before{content:'\f6c3'} -.icon-square9:before{content:'\f6c4'} -.icon-squarea:before{content:'\f6c5'} -.icon-squareb:before{content:'\f6c6'} -.icon-squarec:before{content:'\f6c7'} -.icon-squared:before{content:'\f6c8'} -.icon-squaree:before{content:'\f6c9'} -.icon-squaref:before{content:'\f6ca'} -.icon-squareg:before{content:'\f6cb'} -.icon-squareh:before{content:'\f6cc'} -.icon-squarei:before{content:'\f6cd'} -.icon-squarej:before{content:'\f6ce'} -.icon-squarek:before{content:'\f6cf'} -.icon-squarel:before{content:'\f6d0'} -.icon-squarem:before{content:'\f6d1'} -.icon-squaren:before{content:'\f6d2'} -.icon-squareo:before{content:'\f6d3'} -.icon-squarep:before{content:'\f6d4'} -.icon-squareq:before{content:'\f6d5'} -.icon-squarer:before{content:'\f6d6'} -.icon-squares:before{content:'\f6d7'} -.icon-squaret:before{content:'\f6d8'} -.icon-squareu:before{content:'\f6d9'} -.icon-squarev:before{content:'\f6da'} -.icon-squarew:before{content:'\f6db'} -.icon-squarex:before{content:'\f6dc'} -.icon-squarey:before{content:'\f6dd'} -.icon-squarez:before{content:'\f6de'} -.icon-shuttle:before{content:'\f6df'} -.icon-meteor:before{content:'\f6e0'} -.icon-galaxy:before{content:'\f6e1'} -.icon-observatory:before{content:'\f6e2'} -.icon-astronaut:before{content:'\f6e3'} -.icon-asteroid:before{content:'\f6e4'} -.icon-sunrise:before{content:'\f6e5'} -.icon-sunset:before{content:'\f6e6'} -.icon-tiderise:before{content:'\f6e7'} -.icon-tidefall:before{content:'\f6e8'} -.icon-mushroomcloud:before{content:'\f6e9'} -.icon-galaxyalt:before{content:'\f6ea'} -.icon-sputnik:before{content:'\f6eb'} -.icon-sextant:before{content:'\f6ec'} -.icon-spock:before{content:'\f6ed'} -.icon-meteorite:before{content:'\f6ee'} -.icon-deathstar:before{content:'\f6ef'} -.icon-deathstarbulding:before{content:'\f6f0'} -.icon-fallingstar:before{content:'\f6f1'} -.icon-windmill:before{content:'\f6f2'} -.icon-windmillalt:before{content:'\f6f3'} -.icon-pumpjack:before{content:'\f6f4'} -.icon-nuclearplant:before{content:'\f6f5'} -.icon-solarpanel:before{content:'\f6f6'} -.icon-barrel:before{content:'\f6f7'} -.icon-canister:before{content:'\f6f8'} -.icon-railtunnel:before{content:'\f6f9'} -.icon-roadtunnel:before{content:'\f6fa'} -.icon-pickaxe:before{content:'\f6fb'} -.icon-cow:before{content:'\f6fc'} -.icon-sheep:before{content:'\f6fd'} -.icon-fountain:before{content:'\f6fe'} -.icon-circlezero:before{content:'\f6ff'} -.icon-circleone:before{content:'\f700'} -.icon-circletwo:before{content:'\f701'} -.icon-circlethree:before{content:'\f702'} -.icon-circlefour:before{content:'\f703'} -.icon-circlefive:before{content:'\f704'} -.icon-circlesix:before{content:'\f705'} -.icon-circleseven:before{content:'\f706'} -.icon-circleeight:before{content:'\f707'} -.icon-circlenine:before{content:'\f708'} -.icon-circlea:before{content:'\f709'} -.icon-circleb:before{content:'\f70a'} -.icon-circlec:before{content:'\f70b'} -.icon-circled:before{content:'\f70c'} -.icon-circlee:before{content:'\f70d'} -.icon-circlef:before{content:'\f70e'} -.icon-circleg:before{content:'\f70f'} -.icon-circleh:before{content:'\f710'} -.icon-circlei:before{content:'\f711'} -.icon-circlej:before{content:'\f712'} -.icon-circlek:before{content:'\f713'} -.icon-circlel:before{content:'\f714'} -.icon-circlem:before{content:'\f715'} -.icon-circlen:before{content:'\f716'} -.icon-circleo:before{content:'\f717'} -.icon-circlep:before{content:'\f718'} -.icon-circleq:before{content:'\f719'} -.icon-circler:before{content:'\f71a'} -.icon-circles:before{content:'\f71b'} -.icon-circlet:before{content:'\f71c'} -.icon-circleu:before{content:'\f71d'} -.icon-circlev:before{content:'\f71e'} -.icon-circlew:before{content:'\f71f'} -.icon-circlex:before{content:'\f720'} -.icon-circley:before{content:'\f721'} -.icon-circlez:before{content:'\f722'} -.icon-creeper:before{content:'\f723'} -.icon-minecraft:before{content:'\f724'} -.icon-minecraftalt:before{content:'\f725'} -.icon-pixelsword:before{content:'\f726'} -.icon-pixelbroadsword:before{content:'\f727'} -.icon-pixelwand:before{content:'\f728'} -.icon-pixelpotion:before{content:'\f729'} -.icon-pixelpotionalt:before{content:'\f72a'} -.icon-pixelpickaxe:before{content:'\f72b'} -.icon-pixelbow:before{content:'\f72c'} -.icon-pixelarrow:before{content:'\f72d'} -.icon-pixelaxe:before{content:'\f72e'} -.icon-pixeldagger:before{content:'\f72f'} -.icon-pixelbastardsword:before{content:'\f730'} -.icon-pixellance:before{content:'\f731'} -.icon-pixelbattleaxe:before{content:'\f732'} -.icon-pixelshovel:before{content:'\f733'} -.icon-pixelsphere:before{content:'\f734'} -.icon-pixelelixir:before{content:'\f735'} -.icon-pixelchest:before{content:'\f736'} -.icon-pixelshield:before{content:'\f737'} -.icon-pixelheart:before{content:'\f738'} -.icon-rudder:before{content:'\f739'} -.icon-folderalt:before{content:'\f73a'} -.icon-removefolderalt:before{content:'\f73b'} -.icon-addfolderalt:before{content:'\f73c'} -.icon-deletefolderalt:before{content:'\f73d'} -.icon-openfolderalt:before{content:'\f73e'} -.icon-clipboardalt:before{content:'\f73f'} -.icon-pastealt:before{content:'\f740'} -.icon-loadingflowccw:before{content:'\f741'} -.icon-loadingflowcw:before{content:'\f742'} -.icon-code:before{content:'\f743'} -.icon-cloveralt:before{content:'\f744'} -.icon-lips:before{content:'\f745'} -.icon-kiss:before{content:'\f746'} -.icon-manualshift:before{content:'\f747'} -.icon-simcardthree:before{content:'\f748'} -.icon-parthenon:before{content:'\f749'} -.icon-addcomment:before{content:'\f74a'} -.icon-deletecomment:before{content:'\f74b'} -.icon-gender:before{content:'\f74c'} -.icon-callalt:before{content:'\f74d'} -.icon-outgoingcallalt:before{content:'\f74e'} -.icon-incomingcallalt:before{content:'\f74f'} -.icon-missedcallalt:before{content:'\f750'} -.icon-export:before{content:'\f751'} -.icon-import:before{content:'\f752'} -.icon-cherryalt:before{content:'\f753'} -.icon-panties:before{content:'\f754'} -.icon-kimai:before{content:'\f755'} -.icon-livejournal:before{content:'\f756'} -.icon-livejournalalt:before{content:'\f757'} -.icon-tagged:before{content:'\f758'} -.icon-temple:before{content:'\f759'} -.icon-mayanpyramid:before{content:'\f75a'} -.icon-egyptpyramid:before{content:'\f75b'} -.icon-tampermonkey:before{content:'\f75c'} -.icon-pushbullet:before{content:'\f75d'} -.icon-currents:before{content:'\f75e'} -.icon-communitysmall:before{content:'\f75f'} -.icon-squaregithub:before{content:'\f760'} -.icon-projectfork:before{content:'\f761'} -.icon-projectmerge:before{content:'\f762'} -.icon-projectcompare:before{content:'\f763'} -.icon-history:before{content:'\f764'} -.icon-notebook:before{content:'\f765'} -.icon-issue:before{content:'\f766'} -.icon-issueclosed:before{content:'\f767'} -.icon-issuereopened:before{content:'\f768'} -.icon-rubyalt:before{content:'\f769'} -.icon-lighton:before{content:'\f76a'} -.icon-lightoff:before{content:'\f76b'} -.icon-bellalt:before{content:'\f76c'} -.icon-versions:before{content:'\f777'} -.icon-twog:before{content:'\f76e'} -.icon-threeg:before{content:'\f76f'} -.icon-fourg:before{content:'\f770'} -.icon-gpsalt:before{content:'\f771'} -.icon-circleloaderfull:before{content:'\f772'} -.icon-circleloaderseven:before{content:'\f773'} -.icon-circleloadersix:before{content:'\f774'} -.icon-circleloaderfive:before{content:'\f775'} -.icon-circleloaderfour:before{content:'\f776'} -.icon-circleloaderthree:before{content:'\f777'} -.icon-circleloadertwo:before{content:'\f778'} -.icon-circleloaderone:before{content:'\f779'} -.icon-circleloaderempty:before{content:'\f77a'} -.icon-whatsapp:before{content:'\f77b'} -.icon-whatsappalt:before{content:'\f77c'} -.icon-viber:before{content:'\f77d'} -.icon-squareviber:before{content:'\f77e'} -.icon-teamviewer:before{content:'\f77f'} -.icon-tunein:before{content:'\f780'} -.icon-tuneinalt:before{content:'\f781'} -.icon-weightscale:before{content:'\f782'} -.icon-boxing:before{content:'\f783'} -.icon-speedalt:before{content:'\f784'} -.icon-scriptalt:before{content:'\f785'} -.icon-splitthree:before{content:'\f786'} -.icon-mergethree:before{content:'\f787'} -.icon-layersthree:before{content:'\f788'} -.icon-mutemic:before{content:'\f789'} -.icon-zerply:before{content:'\f78a'} -.icon-circlegoogleplus:before{content:'\f78b'} -.icon-circletwitter:before{content:'\f78c'} -.icon-circlefacebook:before{content:'\f78d'} -.icon-circleyahoo:before{content:'\f78e'} -.icon-circlegithub:before{content:'\f78f'} -.icon-forumsalt:before{content:'\f790'} -.icon-circlepath:before{content:'\f791'} -.icon-circlevimeo:before{content:'\f792'} -.icon-circlevine:before{content:'\f793'} -.icon-instagramtwo:before{content:'\f794'} -.icon-instagramthree:before{content:'\f795'} -.icon-flickrthree:before{content:'\f796'} -.icon-quora:before{content:'\f797'} -.icon-squarequora:before{content:'\f798'} -.icon-circlequora:before{content:'\f799'} -.icon-picasa:before{content:'\f79a'} -.icon-branch:before{content:'\f79b'} -.icon-ingress:before{content:'\f79c'} -.icon-squarezerply:before{content:'\f79d'} -.icon-circlezerply:before{content:'\f79e'} -.icon-squarevimeo:before{content:'\f79f'} -.icon-squaretwitter:before{content:'\f7a0'} -.icon-brightnessalt:before{content:'\f7a1'} -.icon-brightnessalthalf:before{content:'\f7a2'} -.icon-brightnessaltfull:before{content:'\f7a3'} -.icon-brightnessaltauto:before{content:'\f7a4'} -.icon-shirtbuttonthree:before{content:'\f7a5'} -.icon-openshare:before{content:'\f7a6'} -.icon-copyapp:before{content:'\f7a7'} -.icon-bowl:before{content:'\f7a8'} -.icon-cloudalt:before{content:'\f7a9'} -.icon-cloudaltdownload:before{content:'\f7aa'} -.icon-cloudaltupload:before{content:'\f7ab'} -.icon-cloudaltsync:before{content:'\f7ac'} -.icon-cloudaltprivate:before{content:'\f7ad'} -.icon-flipboard:before{content:'\f7ae'} -.icon-octoloaderempty:before{content:'\f7af'} -.icon-octoloaderone:before{content:'\f7b0'} -.icon-octoloadertwo:before{content:'\f7b1'} -.icon-octoloaderthree:before{content:'\f7b2'} -.icon-octoloaderfour:before{content:'\f7b3'} -.icon-octoloaderfive:before{content:'\f7b4'} -.icon-octoloadersix:before{content:'\f7b5'} -.icon-octoloaderseven:before{content:'\f7b6'} -.icon-octoloaderfull:before{content:'\f7b7'} -.icon-selectionsymbol:before{content:'\f7b8'} -.icon-infinityalt:before{content:'\f7b9'} -.icon-pullrequest:before{content:'\f7ba'} -.icon-projectforkdelete:before{content:'\f7bb'} -.icon-projectforkprivate:before{content:'\f7bc'} -.icon-commit:before{content:'\f7bd'} -.icon-htmlfile:before{content:'\f7be'} -.icon-pushalt:before{content:'\f7bf'} -.icon-pullalt:before{content:'\f7c0'} -.icon-photonineframes:before{content:'\f7c1'} -.icon-wetfloor:before{content:'\f7c2'} -.icon-instagramfour:before{content:'\f7c3'} -.icon-circleinstagram:before{content:'\f7c4'} -.icon-videocamerathree:before{content:'\f7c5'} -.icon-subtitles:before{content:'\f7c6'} -.icon-subtitlesoff:before{content:'\f7c7'} -.icon-compress:before{content:'\f7c8'} -.icon-baby:before{content:'\f7c9'} -.icon-ducky:before{content:'\f7ca'} -.icon-handswipe:before{content:'\f7cb'} -.icon-swipeup:before{content:'\f7cc'} -.icon-swipedown:before{content:'\f7cd'} -.icon-twofingerswipedown:before{content:'\f7ce'} -.icon-twofingerswipeup:before{content:'\f7cf'} -.icon-doubletap:before{content:'\f7d0'} -.icon-dribbblealt:before{content:'\f7d1'} -.icon-circlecallmissed:before{content:'\f7d2'} -.icon-circlecallincoming:before{content:'\f7d3'} -.icon-circlecalloutgoing:before{content:'\f7d4'} -.icon-circledownload:before{content:'\f7d5'} -.icon-circleupload:before{content:'\f7d6'} -.icon-minismile:before{content:'\f7d7'} -.icon-minisad:before{content:'\f7d8'} -.icon-minilaugh:before{content:'\f7d9'} -.icon-minigrin:before{content:'\f7da'} -.icon-miniangry:before{content:'\f7db'} -.icon-minitongue:before{content:'\f7dc'} -.icon-minitonguealt:before{content:'\f7dd'} -.icon-miniwink:before{content:'\f7de'} -.icon-minitonguewink:before{content:'\f7df'} -.icon-miniconfused:before{content:'\f7e0'} -.icon-soundright:before{content:'\f7e1'} -.icon-soundleft:before{content:'\f7e2'} -.icon-savetodrive:before{content:'\f7e3'} -.icon-layerorderup:before{content:'\f7e4'} -.icon-layerorderdown:before{content:'\f7e5'} -.icon-layerorder:before{content:'\f7e6'} -.icon-circledribbble:before{content:'\f7e7'} -.icon-squaredribbble:before{content:'\f7e8'} -.icon-handexpand:before{content:'\f7e9'} -.icon-handpinch:before{content:'\f7ea'} -.icon-fontserif:before{content:'\f7eb'} -.icon-fontsansserif:before{content:'\f7ec'} -.icon-fontrounded:before{content:'\f7ed'} -.icon-fonthandwriting:before{content:'\f7ee'} -.icon-fonttypewriter:before{content:'\f7ef'} -.icon-fontcomic:before{content:'\f7f0'} -.icon-fontcaligraphy:before{content:'\f7f1'} -.icon-fontgothic:before{content:'\f7f2'} -.icon-fontstencil:before{content:'\f7f3'} +@font-face { + font-family: 'WebHostingHub-Glyphs'; + src: url('webhostinghub-glyphs.eot'); + src: url('webhostinghub-glyphs.eot?#iefix') format('embedded-opentype'), + url('webhostinghub-glyphs.ttf') format('truetype'); + font-weight: normal; + font-style: normal; + -moz-font-feature-settings: "calt=0,liga=0"; +} +[class^="icon-"], [class*=" icon-"] {font-family:'WebHostingHub-Glyphs';background:none;width:auto;height:auto;font-style:normal} +.icon-aaabattery:before{content:'\f413'} +.icon-abacus:before{content:'\f261'} +.icon-accountfilter:before{content:'\f05e'} +.icon-acsource:before{content:'\f3ea'} +.icon-addfriend:before{content:'\f3da'} +.icon-address:before{content:'\f08f'} +.icon-addshape:before{content:'\f1fd'} +.icon-addtocart:before{content:'\f394'} +.icon-addtolist:before{content:'\f2ac'} +.icon-adjust:before{content:'\f484'} +.icon-adobe:before{content:'\f1c9'} +.icon-ads-bilboard:before{content:'\f082'} +.icon-affiliate:before{content:'\f01e'} +.icon-ajax:before{content:'\f06f'} +.icon-alarm:before{content:'\f233'} +.icon-alarmalt:before{content:'\f23d'} +.icon-album-cover:before{content:'\f19f'} +.icon-alertalt:before{content:'\f2b4'} +.icon-alertpay:before{content:'\f269'} +.icon-algorhythm:before{content:'\f0b8'} +.icon-alienship:before{content:'\f41f'} +.icon-alienware:before{content:'\f3be'} +.icon-align-center:before{content:'\f1d9'} +.icon-align-justify:before{content:'\f1da'} +.icon-align-left:before{content:'\f1d7'} +.icon-align-right:before{content:'\f1d8'} +.icon-alignbottomedge:before{content:'\f1d3'} +.icon-alignhorizontalcenter:before{content:'\f1d2'} +.icon-alignleftedge:before{content:'\f1d6'} +.icon-alignrightedge:before{content:'\f1d5'} +.icon-aligntopedge:before{content:'\f1d4'} +.icon-alignverticalcenter:before{content:'\f1d1'} +.icon-amd:before{content:'\f020'} +.icon-analogdown:before{content:'\f2cb'} +.icon-analogleft:before{content:'\f2c8'} +.icon-analogright:before{content:'\f2c9'} +.icon-analogup:before{content:'\f2ca'} +.icon-analytics-piechart:before{content:'\f000'} +.icon-analyticsalt-piechartalt:before{content:'\f001'} +.icon-anchor-port:before{content:'\f21d'} +.icon-android:before{content:'\f12a'} +.icon-angrybirds:before{content:'\f3c1'} +.icon-antenna:before{content:'\f3ec'} +.icon-apache-feather:before{content:'\f056'} +.icon-aperture:before{content:'\f356'} +.icon-appointment-agenda:before{content:'\f26c'} +.icon-archive:before{content:'\f171'} +.icon-arrow-down:before{content:'\f2fe'} +.icon-arrow-left:before{content:'\f305'} +.icon-arrow-right:before{content:'\f304'} +.icon-arrow-up:before{content:'\f301'} +.icon-asterisk:before{content:'\f317'} +.icon-asteriskalt:before{content:'\002a'} +.icon-at:before{content:'\40'} +.icon-atari:before{content:'\f3b9'} +.icon-authentication-keyalt:before{content:'\f051'} +.icon-automobile-car:before{content:'\f239'} +.icon-autorespond:before{content:'\f08e'} +.icon-avatar:before{content:'\f15a'} +.icon-avataralt:before{content:'\f161'} +.icon-avengers:before{content:'\f342'} +.icon-awstats:before{content:'\f04c'} +.icon-axe:before{content:'\f2ef'} +.icon-backup-vault:before{content:'\f004'} +.icon-backupalt-vaultalt:before{content:'\f005'} +.icon-backupwizard:before{content:'\f05f'} +.icon-backward:before{content:'\f183'} +.icon-bag:before{content:'\f234'} +.icon-baloon:before{content:'\f405'} +.icon-ban-circle:before{content:'\f313'} +.icon-banana:before{content:'\f3f4'} +.icon-bandwidth:before{content:'\f006'} +.icon-bank:before{content:'\f262'} +.icon-barchart:before{content:'\f02f'} +.icon-barchartalt:before{content:'\f07d'} +.icon-barcode:before{content:'\f276'} +.icon-basecamp:before{content:'\f160'} +.icon-basketball:before{content:'\f2e9'} +.icon-bat:before{content:'\f3d3'} +.icon-batman:before{content:'\f348'} +.icon-batteryaltcharging:before{content:'\f104'} +.icon-batteryaltfull:before{content:'\f101'} +.icon-batteryaltsixty:before{content:'\f102'} +.icon-batteryaltthird:before{content:'\f103'} +.icon-batterycharged:before{content:'\f0f4'} +.icon-batterycharging:before{content:'\f0f3'} +.icon-batteryeighty:before{content:'\f0f9'} +.icon-batteryempty:before{content:'\f0f5'} +.icon-batteryforty:before{content:'\f0f7'} +.icon-batteryfull:before{content:'\f0fa'} +.icon-batterysixty:before{content:'\f0f8'} +.icon-batterytwenty:before{content:'\f0f6'} +.icon-bed:before{content:'\f2b9'} +.icon-beer:before{content:'\f244'} +.icon-bell:before{content:'\2407'} +.icon-bigger:before{content:'\f30a'} +.icon-bill:before{content:'\f278'} +.icon-binary:before{content:'\f087'} +.icon-binoculars-searchalt:before{content:'\f2a0'} +.icon-birdhouse:before{content:'\f390'} +.icon-birthday:before{content:'\f36b'} +.icon-bishop:before{content:'\f2f9'} +.icon-blackberry:before{content:'\f421'} +.icon-blankstare:before{content:'\f13e'} +.icon-blogger-blog:before{content:'\f167'} +.icon-bluetooth:before{content:'\f12b'} +.icon-bluetoothconnected:before{content:'\f386'} +.icon-boardgame:before{content:'\f2d9'} +.icon-boat:before{content:'\f21a'} +.icon-bold:before{content:'\f1f4'} +.icon-bomb:before{content:'\f2dc'} +.icon-bone:before{content:'\f35f'} +.icon-book:before{content:'\f1ba'} +.icon-bookmark:before{content:'\f143'} +.icon-boombox:before{content:'\f195'} +.icon-bottle:before{content:'\f361'} +.icon-bow:before{content:'\f2ee'} +.icon-bowling:before{content:'\f2f3'} +.icon-bowlingpins:before{content:'\f3d2'} +.icon-bowtie:before{content:'\f37f'} +.icon-boxtrapper-mousetrap:before{content:'\f046'} +.icon-braces:before{content:'\f0b4'} +.icon-braille0:before{content:'\f44b'} +.icon-braille1:before{content:'\f44c'} +.icon-braille2:before{content:'\f44d'} +.icon-braille3:before{content:'\f44e'} +.icon-braille4:before{content:'\f44f'} +.icon-braille5:before{content:'\f450'} +.icon-braille6:before{content:'\f451'} +.icon-braille7:before{content:'\f452'} +.icon-braille8:before{content:'\f453'} +.icon-braille9:before{content:'\f454'} +.icon-braillea:before{content:'\f431'} +.icon-brailleb:before{content:'\f432'} +.icon-braillec:before{content:'\f433'} +.icon-brailled:before{content:'\f434'} +.icon-braillee:before{content:'\f435'} +.icon-braillef:before{content:'\f436'} +.icon-brailleg:before{content:'\f437'} +.icon-brailleh:before{content:'\f438'} +.icon-braillei:before{content:'\f439'} +.icon-braillej:before{content:'\f43a'} +.icon-braillek:before{content:'\f43b'} +.icon-braillel:before{content:'\f43c'} +.icon-braillem:before{content:'\f43d'} +.icon-braillen:before{content:'\f43e'} +.icon-brailleo:before{content:'\f43f'} +.icon-braillep:before{content:'\f440'} +.icon-brailleq:before{content:'\f441'} +.icon-brailler:before{content:'\f442'} +.icon-brailles:before{content:'\f443'} +.icon-braillespace:before{content:'\f455'} +.icon-braillet:before{content:'\f444'} +.icon-brailleu:before{content:'\f445'} +.icon-braillev:before{content:'\f446'} +.icon-braillew:before{content:'\f447'} +.icon-braillex:before{content:'\f448'} +.icon-brailley:before{content:'\f449'} +.icon-braillez:before{content:'\f44a'} +.icon-brain:before{content:'\f3e3'} +.icon-bread:before{content:'\f42f'} +.icon-breakable:before{content:'\f41c'} +.icon-briefcase:before{content:'\f25e'} +.icon-briefcasethree:before{content:'\f25f'} +.icon-briefcasetwo:before{content:'\f0a2'} +.icon-brightness:before{content:'\f10a'} +.icon-brightnessfull:before{content:'\f10b'} +.icon-brightnesshalf:before{content:'\f10c'} +.icon-broom:before{content:'\f40a'} +.icon-browser:before{content:'\f159'} +.icon-brush:before{content:'\f1b8'} +.icon-bucket:before{content:'\f1b5'} +.icon-bug:before{content:'\f0a7'} +.icon-bullhorn:before{content:'\f287'} +.icon-bus:before{content:'\f241'} +.icon-businesscardalt:before{content:'\f137'} +.icon-buttona:before{content:'\f2bf'} +.icon-buttonb:before{content:'\f2c0'} +.icon-buttonx:before{content:'\f2c1'} +.icon-buttony:before{content:'\f2c2'} +.icon-cactus-desert:before{content:'\f22c'} +.icon-calculator:before{content:'\f258'} +.icon-calculatoralt:before{content:'\f265'} +.icon-calendar:before{content:'\f20f'} +.icon-calendaralt-cronjobs:before{content:'\f0a1'} +.icon-camera:before{content:'\f19b'} +.icon-candle:before{content:'\f29a'} +.icon-candy:before{content:'\f42d'} +.icon-candycane:before{content:'\f37d'} +.icon-cannon:before{content:'\f401'} +.icon-canvas:before{content:'\f1c8'} +.icon-canvasrulers:before{content:'\f205'} +.icon-capacitator:before{content:'\f3e8'} +.icon-capslock:before{content:'\21ea'} +.icon-captainamerica:before{content:'\f341'} +.icon-carrot:before{content:'\f3f2'} +.icon-cashregister:before{content:'\f26e'} +.icon-cassette:before{content:'\f377'} +.icon-cd-dvd:before{content:'\f0cd'} +.icon-certificate:before{content:'\f277'} +.icon-certificatealt:before{content:'\f058'} +.icon-certificatethree:before{content:'\f059'} +.icon-cgi:before{content:'\f086'} +.icon-cgicenter:before{content:'\f079'} +.icon-chair:before{content:'\2441'} +.icon-chat:before{content:'\f162'} +.icon-check:before{content:'\f310'} +.icon-checkboxalt:before{content:'\f311'} +.icon-checkin:before{content:'\f223'} +.icon-checkinalt:before{content:'\f227'} +.icon-chef:before{content:'\f3ce'} +.icon-cherry:before{content:'\f35d'} +.icon-chevron-down:before{content:'\f48b'} +.icon-chevron-left:before{content:'\f489'} +.icon-chevron-right:before{content:'\f488'} +.icon-chevron-up:before{content:'\f48a'} +.icon-chevrons:before{content:'\f0b5'} +.icon-chicken:before{content:'\f359'} +.icon-chocolate:before{content:'\f367'} +.icon-christiancross:before{content:'\f40f'} +.icon-christmastree:before{content:'\f37b'} +.icon-chrome:before{content:'\f14e'} +.icon-cigarette:before{content:'\f229'} +.icon-circle-arrow-down:before{content:'\f475'} +.icon-circle-arrow-left:before{content:'\f472'} +.icon-circle-arrow-right:before{content:'\f473'} +.icon-circle-arrow-up:before{content:'\f474'} +.icon-circleadd:before{content:'\f0d1'} +.icon-circledelete:before{content:'\f0d2'} +.icon-circledown:before{content:'\f3c7'} +.icon-circleleft:before{content:'\f3c6'} +.icon-circleright:before{content:'\f3c9'} +.icon-circleselect:before{content:'\f0d3'} +.icon-circleselection:before{content:'\f1b1'} +.icon-circleup:before{content:'\f3c8'} +.icon-clearformatting:before{content:'\f1e7'} +.icon-clipboard-paste:before{content:'\f0cb'} +.icon-clockalt-timealt:before{content:'\f22b'} +.icon-closetab:before{content:'\f170'} +.icon-closewindow:before{content:'\f16e'} +.icon-cloud:before{content:'\f0b9'} +.icon-clouddownload:before{content:'\f0bb'} +.icon-cloudhosting:before{content:'\f007'} +.icon-cloudsync:before{content:'\f0bc'} +.icon-cloudupload:before{content:'\f0ba'} +.icon-clubs:before{content:'\f2f6'} +.icon-cmd:before{content:'\f33a'} +.icon-cms:before{content:'\f036'} +.icon-cmsmadesimple:before{content:'\f0b0'} +.icon-codeigniter:before{content:'\f077'} +.icon-coffee:before{content:'\f235'} +.icon-coffeebean:before{content:'\f366'} +.icon-cog:before{content:'\f00f'} +.icon-colocation:before{content:'\f024'} +.icon-colocationalt:before{content:'\f023'} +.icon-colors:before{content:'\f1e6'} +.icon-comment:before{content:'\f12c'} +.icon-commentout:before{content:'\f080'} +.icon-commentround:before{content:'\f155'} +.icon-commentroundempty:before{content:'\f156'} +.icon-commentroundtyping:before{content:'\f157'} +.icon-commentroundtypingempty:before{content:'\f158'} +.icon-commenttyping:before{content:'\f12d'} +.icon-compass:before{content:'\263c'} +.icon-concretefive:before{content:'\f0af'} +.icon-contact-businesscard:before{content:'\f040'} +.icon-controllernes:before{content:'\f2d2'} +.icon-controllerps:before{content:'\f2d1'} +.icon-controllersnes:before{content:'\f2d3'} +.icon-controlpanel:before{content:'\f008'} +.icon-controlpanelalt:before{content:'\f009'} +.icon-cooling:before{content:'\f00a'} +.icon-coppermine:before{content:'\f0a4'} +.icon-copy:before{content:'\f0c9'} +.icon-copyright:before{content:'\00a9'} +.icon-coupon:before{content:'\f254'} +.icon-cpanel:before{content:'\f072'} +.icon-cplusplus:before{content:'\f0b1'} +.icon-cpu-processor:before{content:'\f002'} +.icon-cpualt-processoralt:before{content:'\f003'} +.icon-crayon:before{content:'\f383'} +.icon-createfile:before{content:'\f0c6'} +.icon-createfolder:before{content:'\f0da'} +.icon-creativecommons:before{content:'\f1fc'} +.icon-creditcard:before{content:'\f279'} +.icon-cricket:before{content:'\f418'} +.icon-croisant:before{content:'\f29f'} +.icon-crop:before{content:'\f1af'} +.icon-crown:before{content:'\f28f'} +.icon-csharp:before{content:'\f0b2'} +.icon-cssthree:before{content:'\f06a'} +.icon-cup-coffeealt:before{content:'\f24b'} +.icon-cupcake:before{content:'\f35b'} +.icon-curling:before{content:'\f3d7'} +.icon-cursor:before{content:'\f0dc'} +.icon-cut-scissors:before{content:'\f0ca'} +.icon-dagger:before{content:'\2020'} +.icon-danger:before{content:'\f415'} +.icon-dart:before{content:'\f3d4'} +.icon-darthvader:before{content:'\f34a'} +.icon-database:before{content:'\f00b'} +.icon-databaseadd:before{content:'\f00c'} +.icon-databasedelete:before{content:'\f00d'} +.icon-davidstar:before{content:'\f40e'} +.icon-dcsource:before{content:'\f3e9'} +.icon-dedicatedserver:before{content:'\f00e'} +.icon-deletefile:before{content:'\f0c7'} +.icon-deletefolder:before{content:'\f0db'} +.icon-delicious:before{content:'\f152'} +.icon-designcontest:before{content:'\f351'} +.icon-desklamp:before{content:'\f412'} +.icon-dialpad:before{content:'\f399'} +.icon-diamond:before{content:'\2666'} +.icon-diamonds:before{content:'\f2f7'} +.icon-die-dice:before{content:'\f2d8'} +.icon-diefive:before{content:'\f3fb'} +.icon-diefour:before{content:'\f3fa'} +.icon-dieone:before{content:'\f3f7'} +.icon-diesix:before{content:'\f3fc'} +.icon-diethree:before{content:'\f3f9'} +.icon-dietwo:before{content:'\f3f8'} +.icon-diode:before{content:'\f3e7'} +.icon-director:before{content:'\f2ae'} +.icon-diskspace:before{content:'\f096'} +.icon-distributehorizontalcenters:before{content:'\f1dc'} +.icon-distributeverticalcenters:before{content:'\f1db'} +.icon-divide:before{content:'\00f7'} +.icon-dna:before{content:'\f409'} +.icon-dnszone:before{content:'\f07f'} +.icon-document:before{content:'\f0c2'} +.icon-doghouse:before{content:'\f38f'} +.icon-dollar:before{content:'\24'} +.icon-dollaralt:before{content:'\f259'} +.icon-dolphinsoftware:before{content:'\f064'} +.icon-domain:before{content:'\f01d'} +.icon-domainaddon:before{content:'\f053'} +.icon-domino:before{content:'\f3d5'} +.icon-donut:before{content:'\f3ca'} +.icon-downleft:before{content:'\f2ff'} +.icon-download:before{content:'\f47b'} +.icon-download-alt:before{content:'\f11a'} +.icon-downright:before{content:'\f300'} +.icon-draft:before{content:'\f172'} +.icon-dreamweaver:before{content:'\f1d0'} +.icon-dribbble:before{content:'\f14c'} +.icon-dropmenu:before{content:'\f0a5'} +.icon-drupal:before{content:'\f075'} +.icon-drwho:before{content:'\f3c0'} +.icon-edit:before{content:'\f47c'} +.icon-editalt:before{content:'\f0f2'} +.icon-egg:before{content:'\f407'} +.icon-eightball:before{content:'\f36e'} +.icon-eject:before{content:'\f199'} +.icon-elipse:before{content:'\f1bc'} +.icon-emailalt:before{content:'\f136'} +.icon-emailexport:before{content:'\f176'} +.icon-emailforward:before{content:'\f175'} +.icon-emailforwarders:before{content:'\f049'} +.icon-emailimport:before{content:'\f177'} +.icon-emailrefresh:before{content:'\f174'} +.icon-emailtrace:before{content:'\f091'} +.icon-emergency:before{content:'\f246'} +.icon-emptycart:before{content:'\f395'} +.icon-enter:before{content:'\f323'} +.icon-envelope:before{content:'\f028'} +.icon-equalizer:before{content:'\f18e'} +.icon-equalizeralt:before{content:'\f18f'} +.icon-equals:before{content:'\f30c'} +.icon-eraser:before{content:'\f1f1'} +.icon-erroralt:before{content:'\f05a'} +.icon-euro:before{content:'\20ac'} +.icon-euroalt:before{content:'\f25a'} +.icon-evernote:before{content:'\f17c'} +.icon-exchange-currency:before{content:'\f26b'} +.icon-exclamation-sign:before{content:'\f04a'} +.icon-excludeshape:before{content:'\f200'} +.icon-exit:before{content:'\f324'} +.icon-explorerwindow:before{content:'\f0d9'} +.icon-exportfile:before{content:'\f32f'} +.icon-exposure:before{content:'\f1de'} +.icon-extinguisher:before{content:'\f2b7'} +.icon-eye-close:before{content:'\f481'} +.icon-eye-open:before{content:'\f2b5'} +.icon-eye-view:before{content:'\f280'} +.icon-eyedropper:before{content:'\f1ad'} +.icon-facebook:before{content:'\f140'} +.icon-facebookalt:before{content:'\f14b'} +.icon-facetime-video:before{content:'\f19c'} +.icon-factory:before{content:'\f27a'} +.icon-fantastico:before{content:'\f0ae'} +.icon-faq:before{content:'\f099'} +.icon-fast-backward:before{content:'\f47e'} +.icon-fast-forward:before{content:'\f47f'} +.icon-fastdown:before{content:'\f31d'} +.icon-fastleft:before{content:'\f31a'} +.icon-fastright:before{content:'\f31b'} +.icon-fastup:before{content:'\f31c'} +.icon-favoritefile:before{content:'\f381'} +.icon-favoritefolder:before{content:'\f382'} +.icon-featheralt-write:before{content:'\f1c5'} +.icon-fedora:before{content:'\f3f1'} +.icon-fence:before{content:'\f2af'} +.icon-file:before{content:'\f0d6'} +.icon-film:before{content:'\f19d'} +.icon-filmstrip:before{content:'\f3ed'} +.icon-filter:before{content:'\f05c'} +.icon-finder:before{content:'\f398'} +.icon-fire:before{content:'\f27f'} +.icon-firefox:before{content:'\f420'} +.icon-firewall:before{content:'\f021'} +.icon-firewire:before{content:'\f0fc'} +.icon-firstaid:before{content:'\f2ba'} +.icon-fish:before{content:'\f35a'} +.icon-fishbone:before{content:'\f42b'} +.icon-flag:before{content:'\f487'} +.icon-flagalt:before{content:'\f232'} +.icon-flagtriangle:before{content:'\f20b'} +.icon-flash:before{content:'\f1cf'} +.icon-flashlight:before{content:'\f299'} +.icon-flashplayer:before{content:'\f070'} +.icon-flaskfull:before{content:'\f27e'} +.icon-flickr:before{content:'\f146'} +.icon-flower:before{content:'\f2a5'} +.icon-flowernew:before{content:'\f3a8'} +.icon-folder-close:before{content:'\f094'} +.icon-folder-open:before{content:'\f483'} +.icon-foldertree:before{content:'\f0f0'} +.icon-font:before{content:'\f1ae'} +.icon-foodtray:before{content:'\f3d0'} +.icon-football-soccer:before{content:'\f2eb'} +.icon-forbiddenalt:before{content:'\f314'} +.icon-forest-tree:before{content:'\f217'} +.icon-forestalt-treealt:before{content:'\f21c'} +.icon-fork:before{content:'\22d4'} +.icon-forklift:before{content:'\f29b'} +.icon-form:before{content:'\f08c'} +.icon-forrst:before{content:'\f14d'} +.icon-fort:before{content:'\f400'} +.icon-forward:before{content:'\f182'} +.icon-fourohfour:before{content:'\f09d'} +.icon-foursquare:before{content:'\f42a'} +.icon-freeway:before{content:'\f24a'} +.icon-fridge:before{content:'\f40d'} +.icon-fries:before{content:'\f36a'} +.icon-ftp:before{content:'\f029'} +.icon-ftpaccounts:before{content:'\f07b'} +.icon-ftpsession:before{content:'\f07c'} +.icon-fullscreen:before{content:'\f485'} +.icon-gameboy:before{content:'\f403'} +.icon-gamecursor:before{content:'\f2d0'} +.icon-gasstation:before{content:'\f216'} +.icon-gearfour:before{content:'\f3a7'} +.icon-ghost:before{content:'\f2da'} +.icon-gift:before{content:'\f260'} +.icon-github:before{content:'\f081'} +.icon-glass:before{content:'\f236'} +.icon-glasses:before{content:'\f295'} +.icon-glassesalt:before{content:'\f39d'} +.icon-globe:before{content:'\f01b'} +.icon-globealt:before{content:'\f36c'} +.icon-glue:before{content:'\f36d'} +.icon-gmail:before{content:'\f150'} +.icon-golf:before{content:'\f2f1'} +.icon-googledrive:before{content:'\f163'} +.icon-googleplus:before{content:'\f165'} +.icon-googlewallet:before{content:'\f270'} +.icon-gpsoff-gps:before{content:'\f21e'} +.icon-gpson:before{content:'\f21f'} +.icon-gpu-graphicscard:before{content:'\f108'} +.icon-gradient:before{content:'\2207'} +.icon-grails:before{content:'\f085'} +.icon-greenlantern:before{content:'\f340'} +.icon-greenlightbulb:before{content:'\f406'} +.icon-grooveshark:before{content:'\f3a2'} +.icon-groups-friends:before{content:'\f134'} +.icon-guitar:before{content:'\f19a'} +.icon-halflife:before{content:'\f3ba'} +.icon-halo:before{content:'\f3bb'} +.icon-hamburger:before{content:'\f2b3'} +.icon-hammer:before{content:'\f291'} +.icon-hand-down:before{content:'\f387'} +.icon-hand-left:before{content:'\f389'} +.icon-hand-right:before{content:'\f388'} +.icon-hand-up:before{content:'\f0dd'} +.icon-handcuffs:before{content:'\f393'} +.icon-handdrag:before{content:'\f0de'} +.icon-handtwofingers:before{content:'\f0df'} +.icon-hanger:before{content:'\f2ab'} +.icon-happy:before{content:'\f13c'} +.icon-harrypotter:before{content:'\f38b'} +.icon-hdd:before{content:'\f02a'} +.icon-hdtv:before{content:'\f1a0'} +.icon-headphones:before{content:'\f180'} +.icon-headphonesalt:before{content:'\f1a3'} +.icon-heart:before{content:'\f131'} +.icon-heartempty-love:before{content:'\f132'} +.icon-hearts:before{content:'\f2f4'} +.icon-helicopter:before{content:'\f3e4'} +.icon-hexagon-polygon:before{content:'\f1be'} +.icon-hockey:before{content:'\f3d9'} +.icon-home:before{content:'\21b8'} +.icon-homealt:before{content:'\f02b'} +.icon-hospital:before{content:'\f247'} +.icon-hotdog:before{content:'\f3cc'} +.icon-hotlinkprotection:before{content:'\f050'} +.icon-hourglassalt:before{content:'\f122'} +.icon-html:before{content:'\f068'} +.icon-htmlfive:before{content:'\f069'} +.icon-hydrant:before{content:'\f3ff'} +.icon-icecream:before{content:'\f2a4'} +.icon-icecreamalt:before{content:'\f289'} +.icon-illustrator:before{content:'\f1ce'} +.icon-imac:before{content:'\f0fb'} +.icon-images-gallery:before{content:'\f09f'} +.icon-importcontacts:before{content:'\f092'} +.icon-importfile:before{content:'\f32e'} +.icon-inbox:before{content:'\f17a'} +.icon-inboxalt:before{content:'\f178'} +.icon-incomingcall:before{content:'\f15d'} +.icon-indent-left:before{content:'\f1f2'} +.icon-indent-right:before{content:'\f1f3'} +.icon-indexmanager:before{content:'\f09e'} +.icon-infinity:before{content:'\221e'} +.icon-info-sign:before{content:'\f315'} +.icon-infographic:before{content:'\f336'} +.icon-ink:before{content:'\f3f6'} +.icon-inkpen:before{content:'\f1ac'} +.icon-insertbarchart:before{content:'\f1e5'} +.icon-insertpicture:before{content:'\f1e0'} +.icon-insertpicturecenter:before{content:'\f1e3'} +.icon-insertpictureleft:before{content:'\f1e1'} +.icon-insertpictureright:before{content:'\f1e2'} +.icon-insertpiechart:before{content:'\f1e4'} +.icon-instagram:before{content:'\f14a'} +.icon-install:before{content:'\f128'} +.icon-intel:before{content:'\f01f'} +.icon-intersection:before{content:'\2229'} +.icon-intersectshape:before{content:'\f1ff'} +.icon-invert:before{content:'\f1df'} +.icon-invoice:before{content:'\f3e5'} +.icon-ipcontrol:before{content:'\f08b'} +.icon-iphone:before{content:'\f0e6'} +.icon-ipod:before{content:'\f190'} +.icon-ironman:before{content:'\f349'} +.icon-islam:before{content:'\f410'} +.icon-island:before{content:'\f392'} +.icon-italic:before{content:'\f1f5'} +.icon-jar:before{content:'\f2b6'} +.icon-jason:before{content:'\f38c'} +.icon-java:before{content:'\f083'} +.icon-joomla:before{content:'\f073'} +.icon-joystickarcade:before{content:'\f2d4'} +.icon-joystickatari:before{content:'\f2d5'} +.icon-jquery:before{content:'\f06b'} +.icon-jqueryui:before{content:'\f06c'} +.icon-kerning:before{content:'\f1e9'} +.icon-key:before{content:'\f093'} +.icon-keyboard:before{content:'\f119'} +.icon-keyboardalt:before{content:'\f105'} +.icon-keyboarddelete:before{content:'\f3a6'} +.icon-kidney:before{content:'\f3e0'} +.icon-king:before{content:'\f2fc'} +.icon-knife:before{content:'\f214'} +.icon-knight:before{content:'\f2fb'} +.icon-knob:before{content:'\f376'} +.icon-lab-flask:before{content:'\f27d'} +.icon-lamp:before{content:'\f2b1'} +.icon-lan:before{content:'\f0ee'} +.icon-language:before{content:'\f042'} +.icon-laptop:before{content:'\f0d8'} +.icon-lasso:before{content:'\f396'} +.icon-lastfm:before{content:'\f3a3'} +.icon-laugh:before{content:'\f13f'} +.icon-law:before{content:'\f263'} +.icon-layers:before{content:'\f1ca'} +.icon-layersalt:before{content:'\f1cb'} +.icon-leaf:before{content:'\f039'} +.icon-leechprotect:before{content:'\f07e'} +.icon-legacyfilemanager:before{content:'\f095'} +.icon-lego:before{content:'\f370'} +.icon-lifeempty:before{content:'\f2e1'} +.icon-lifefull:before{content:'\f2e3'} +.icon-lifehacker:before{content:'\f380'} +.icon-lifehalf:before{content:'\f2e2'} +.icon-lifepreserver:before{content:'\f015'} +.icon-lightbulb-idea:before{content:'\f338'} +.icon-lighthouse:before{content:'\f3e6'} +.icon-lightning:before{content:'\f231'} +.icon-lightningalt:before{content:'\f2a8'} +.icon-line:before{content:'\f1bf'} +.icon-lineheight:before{content:'\f1c0'} +.icon-link:before{content:'\f022'} +.icon-linkalt:before{content:'\f333'} +.icon-linkedin:before{content:'\f166'} +.icon-linux:before{content:'\f01a'} +.icon-list:before{content:'\f111'} +.icon-list-alt:before{content:'\f480'} +.icon-liver:before{content:'\f3e2'} +.icon-loading-hourglass:before{content:'\f123'} +.icon-loadingalt:before{content:'\f339'} +.icon-lock:before{content:'\f0be'} +.icon-lockalt-keyhole:before{content:'\f0eb'} +.icon-lollypop:before{content:'\f3ee'} +.icon-lungs:before{content:'\f3df'} +.icon-macpro:before{content:'\f3a5'} +.icon-macro-plant:before{content:'\f1c6'} +.icon-magazine:before{content:'\f1ec'} +.icon-magento:before{content:'\f06e'} +.icon-magnet:before{content:'\f281'} +.icon-mailbox:before{content:'\f044'} +.icon-mailinglists:before{content:'\f090'} +.icon-man-male:before{content:'\f2a1'} +.icon-managedhosting:before{content:'\f038'} +.icon-map:before{content:'\f209'} +.icon-map-marker:before{content:'\f220'} +.icon-marker:before{content:'\f204'} +.icon-marvin:before{content:'\f3dd'} +.icon-mastercard:before{content:'\f266'} +.icon-maximize:before{content:'\f30f'} +.icon-medal:before{content:'\f2e5'} +.icon-medalbronze:before{content:'\f2e8'} +.icon-medalgold:before{content:'\f2e6'} +.icon-medalsilver:before{content:'\f2e7'} +.icon-mediarepeat:before{content:'\f187'} +.icon-men:before{content:'\f24c'} +.icon-menu:before{content:'\f127'} +.icon-merge:before{content:'\f334'} +.icon-mergecells:before{content:'\f327'} +.icon-mergeshapes:before{content:'\f201'} +.icon-metro-subway:before{content:'\f24f'} +.icon-metronome:before{content:'\f374'} +.icon-mickeymouse:before{content:'\f37a'} +.icon-microphone:before{content:'\f191'} +.icon-microscope:before{content:'\f283'} +.icon-microsd:before{content:'\f107'} +.icon-microwave:before{content:'\f42e'} +.icon-mimetype:before{content:'\f057'} +.icon-minimize:before{content:'\f30e'} +.icon-minus:before{content:'\2212'} +.icon-minus-sign:before{content:'\f477'} +.icon-missedcall:before{content:'\f15c'} +.icon-mobile:before{content:'\f0e8'} +.icon-moleskine:before{content:'\f1f0'} +.icon-money-cash:before{content:'\f27b'} +.icon-moneybag:before{content:'\f271'} +.icon-monitor:before{content:'\f0d5'} +.icon-monstersinc:before{content:'\f3bd'} +.icon-moon-night:before{content:'\f207'} +.icon-mouse:before{content:'\f0d4'} +.icon-mousealt:before{content:'\f126'} +.icon-move:before{content:'\f322'} +.icon-movieclapper:before{content:'\f193'} +.icon-moviereel:before{content:'\f17f'} +.icon-muffin:before{content:'\f363'} +.icon-mug:before{content:'\f24e'} +.icon-mushroom:before{content:'\f35e'} +.icon-music:before{content:'\f181'} +.icon-musicalt:before{content:'\f18d'} +.icon-mutealt:before{content:'\f0e5'} +.icon-mxentry:before{content:'\f07a'} +.icon-mybb:before{content:'\f065'} +.icon-myspace:before{content:'\f153'} +.icon-mysql-dolphin:before{content:'\f076'} +.icon-nail:before{content:'\f428'} +.icon-navigation:before{content:'\f23a'} +.icon-network:before{content:'\f0a6'} +.icon-networksignal:before{content:'\f3a9'} +.icon-news:before{content:'\f256'} +.icon-newtab:before{content:'\f16f'} +.icon-newwindow:before{content:'\f16d'} +.icon-next:before{content:'\f18a'} +.icon-nexus:before{content:'\f0e7'} +.icon-nintendods:before{content:'\f404'} +.icon-nodejs:before{content:'\f084'} +.icon-notes:before{content:'\f0d7'} +.icon-notificationbottom:before{content:'\f144'} +.icon-notificationtop:before{content:'\f145'} +.icon-nut:before{content:'\f427'} +.icon-off:before{content:'\f11d'} +.icon-office-building:before{content:'\f245'} +.icon-officechair:before{content:'\f26d'} +.icon-ok:before{content:'\2713'} +.icon-ok-circle:before{content:'\f471'} +.icon-ok-sign:before{content:'\f479'} +.icon-oneup:before{content:'\f3b7'} +.icon-oneupalt:before{content:'\f3b6'} +.icon-opencart:before{content:'\f060'} +.icon-opennewwindow:before{content:'\f332'} +.icon-orange:before{content:'\f29e'} +.icon-outbox:before{content:'\f179'} +.icon-outgoingcall:before{content:'\f15e'} +.icon-oxwall:before{content:'\f06d'} +.icon-pacman:before{content:'\f2db'} +.icon-pageback:before{content:'\f31e'} +.icon-pagebreak:before{content:'\f1cc'} +.icon-pageforward:before{content:'\f31f'} +.icon-pagesetup:before{content:'\f331'} +.icon-paintbrush:before{content:'\f1e8'} +.icon-paintroll:before{content:'\f1fa'} +.icon-palette-painting:before{content:'\f1b9'} +.icon-paperclip:before{content:'\f284'} +.icon-paperclipalt:before{content:'\f285'} +.icon-paperclipvertical:before{content:'\f286'} +.icon-paperplane:before{content:'\f296'} +.icon-parentheses:before{content:'\f3c4'} +.icon-parkeddomain:before{content:'\f055'} +.icon-password:before{content:'\f03e'} +.icon-passwordalt:before{content:'\f03f'} +.icon-pasta:before{content:'\f408'} +.icon-patch:before{content:'\f2a3'} +.icon-path:before{content:'\f169'} +.icon-pause:before{content:'\f186'} +.icon-paw-pet:before{content:'\f29d'} +.icon-pawn:before{content:'\f2f8'} +.icon-paypal:before{content:'\f267'} +.icon-peace:before{content:'\f2a7'} +.icon-pen:before{content:'\f1ee'} +.icon-pencil:before{content:'\f1b7'} +.icon-pepperoni:before{content:'\f364'} +.icon-percent:before{content:'\25'} +.icon-perl-camel:before{content:'\f0b6'} +.icon-perlalt:before{content:'\f0b7'} +.icon-phone-call:before{content:'\f14f'} +.icon-phonealt:before{content:'\f15b'} +.icon-phonebook:before{content:'\f149'} +.icon-phonebookalt:before{content:'\f135'} +.icon-phonemic:before{content:'\f391'} +.icon-phoneold:before{content:'\f148'} +.icon-photoshop:before{content:'\f1cd'} +.icon-php:before{content:'\f09c'} +.icon-phpbb:before{content:'\f063'} +.icon-phppear:before{content:'\f09b'} +.icon-piano:before{content:'\f19e'} +.icon-picture:before{content:'\22b7'} +.icon-pictureframe:before{content:'\f41e'} +.icon-piggybank:before{content:'\f257'} +.icon-pigpena:before{content:'\f456'} +.icon-pigpenb:before{content:'\f457'} +.icon-pigpenc:before{content:'\f458'} +.icon-pigpend:before{content:'\f459'} +.icon-pigpene:before{content:'\f45a'} +.icon-pigpenf:before{content:'\f45b'} +.icon-pigpeng:before{content:'\f45c'} +.icon-pigpenh:before{content:'\f45d'} +.icon-pigpeni:before{content:'\f45e'} +.icon-pigpenj:before{content:'\f45f'} +.icon-pigpenk:before{content:'\f460'} +.icon-pigpenl:before{content:'\f461'} +.icon-pigpenm:before{content:'\f462'} +.icon-pigpenn:before{content:'\f463'} +.icon-pigpeno:before{content:'\f464'} +.icon-pigpenp:before{content:'\f465'} +.icon-pigpenq:before{content:'\f466'} +.icon-pigpenr:before{content:'\f467'} +.icon-pigpens:before{content:'\f468'} +.icon-pigpent:before{content:'\f469'} +.icon-pigpenu:before{content:'\f46a'} +.icon-pigpenv:before{content:'\f46b'} +.icon-pigpenw:before{content:'\f46c'} +.icon-pigpenx:before{content:'\f46d'} +.icon-pigpeny:before{content:'\f46e'} +.icon-pigpenz:before{content:'\f46f'} +.icon-pilcrow:before{content:'\00b6'} +.icon-pill-antivirusalt:before{content:'\f0aa'} +.icon-pin:before{content:'\f20a'} +.icon-pipe:before{content:'\01c0'} +.icon-piwigo:before{content:'\f0ad'} +.icon-pizza:before{content:'\f35c'} +.icon-placeadd:before{content:'\f221'} +.icon-placealt:before{content:'\f224'} +.icon-placealtadd:before{content:'\f225'} +.icon-placealtdelete:before{content:'\f226'} +.icon-placedelete:before{content:'\f222'} +.icon-placeios:before{content:'\f20c'} +.icon-plane:before{content:'\f23e'} +.icon-plaque:before{content:'\f2b8'} +.icon-play:before{content:'\f184'} +.icon-play-circle:before{content:'\f17e'} +.icon-playstore:before{content:'\f255'} +.icon-playvideo:before{content:'\f03d'} +.icon-plug:before{content:'\f0ea'} +.icon-pluginalt:before{content:'\f098'} +.icon-plus:before{content:'\002b'} +.icon-plus-sign:before{content:'\f476'} +.icon-pocket:before{content:'\f16b'} +.icon-podcast:before{content:'\f1a2'} +.icon-podium-winner:before{content:'\f2d6'} +.icon-pokemon:before{content:'\f354'} +.icon-police:before{content:'\f2aa'} +.icon-polygonlasso:before{content:'\f397'} +.icon-post:before{content:'\f12e'} +.icon-postalt:before{content:'\f130'} +.icon-pound:before{content:'\f25b'} +.icon-poundalt:before{content:'\f25c'} +.icon-powerjack:before{content:'\f0fd'} +.icon-powerplug:before{content:'\f0ed'} +.icon-powerplugeu:before{content:'\f28b'} +.icon-powerplugus:before{content:'\f28c'} +.icon-presentation:before{content:'\f0c4'} +.icon-prestashop:before{content:'\f061'} +.icon-pretzel:before{content:'\f3cf'} +.icon-preview:before{content:'\f330'} +.icon-previous:before{content:'\f18b'} +.icon-print:before{content:'\f125'} +.icon-protecteddirectory:before{content:'\f04d'} +.icon-pscircle:before{content:'\f2bb'} +.icon-pscursor:before{content:'\f2c3'} +.icon-psdown:before{content:'\f2c6'} +.icon-psleft:before{content:'\f2c7'} +.icon-pslone:before{content:'\f2cc'} +.icon-psltwo:before{content:'\f2cd'} +.icon-psright:before{content:'\f2c5'} +.icon-psrone:before{content:'\f2ce'} +.icon-psrtwo:before{content:'\f2cf'} +.icon-pssquare:before{content:'\f2bc'} +.icon-pstriangle:before{content:'\f2bd'} +.icon-psup:before{content:'\f2c4'} +.icon-psx:before{content:'\f2be'} +.icon-pull:before{content:'\f089'} +.icon-punisher:before{content:'\f343'} +.icon-push:before{content:'\f088'} +.icon-puzzle-plugin:before{content:'\f0a0'} +.icon-python:before{content:'\f071'} +.icon-qrcode:before{content:'\f275'} +.icon-quake:before{content:'\f355'} +.icon-queen:before{content:'\f2fd'} +.icon-query:before{content:'\f08a'} +.icon-question-sign:before{content:'\f0a3'} +.icon-quote:before{content:'\f12f'} +.icon-quotedown:before{content:'\f329'} +.icon-quoteup:before{content:'\f328'} +.icon-raceflag:before{content:'\f38e'} +.icon-racquet:before{content:'\f2f2'} +.icon-radio:before{content:'\f1a1'} +.icon-radioactive:before{content:'\f282'} +.icon-radiobutton:before{content:'\f312'} +.icon-railroad:before{content:'\f248'} +.icon-rain:before{content:'\f22f'} +.icon-ram:before{content:'\f02c'} +.icon-random:before{content:'\f188'} +.icon-rar:before{content:'\f117'} +.icon-raspberry:before{content:'\f368'} +.icon-raspberrypi:before{content:'\f369'} +.icon-rawaccesslogs:before{content:'\f0c1'} +.icon-razor:before{content:'\f416'} +.icon-reademail:before{content:'\f173'} +.icon-record:before{content:'\f189'} +.icon-rectangle:before{content:'\25ad'} +.icon-recycle:before{content:'\f297'} +.icon-reddit:before{content:'\f154'} +.icon-redirect:before{content:'\f054'} +.icon-refresh:before{content:'\f078'} +.icon-reliability:before{content:'\f016'} +.icon-remote:before{content:'\f298'} +.icon-remove:before{content:'\00d7'} +.icon-remove-circle:before{content:'\f470'} +.icon-remove-sign:before{content:'\f478'} +.icon-removefriend:before{content:'\f3db'} +.icon-repeat:before{content:'\f32b'} +.icon-repeatone:before{content:'\f196'} +.icon-resellerhosting:before{content:'\f03a'} +.icon-residentevil:before{content:'\f350'} +.icon-resistor:before{content:'\f3eb'} +.icon-resize:before{content:'\f1ed'} +.icon-resize-full:before{content:'\f325'} +.icon-resize-horizontal:before{content:'\f318'} +.icon-resize-small:before{content:'\f326'} +.icon-resize-vertical:before{content:'\f319'} +.icon-restart:before{content:'\f11f'} +.icon-restaurantmenu:before{content:'\f362'} +.icon-restore:before{content:'\f30d'} +.icon-restricted:before{content:'\f0ab'} +.icon-retweet:before{content:'\f486'} +.icon-rim:before{content:'\f36f'} +.icon-ring:before{content:'\02da'} +.icon-road:before{content:'\f249'} +.icon-roadsign-roadsignright:before{content:'\f21b'} +.icon-roadsignleft:before{content:'\f240'} +.icon-robocop:before{content:'\f357'} +.icon-rocket-launch:before{content:'\f29c'} +.icon-rook:before{content:'\f2fa'} +.icon-root:before{content:'\f33c'} +.icon-rorschach:before{content:'\f358'} +.icon-rotateclockwise:before{content:'\f202'} +.icon-rotatecounterclockwise:before{content:'\f203'} +.icon-roundrectangle:before{content:'\f1bd'} +.icon-route:before{content:'\f402'} +.icon-router:before{content:'\f0e9'} +.icon-rss:before{content:'\f17b'} +.icon-rubberstamp:before{content:'\f274'} +.icon-ruby:before{content:'\f067'} +.icon-ruler:before{content:'\f1ef'} +.icon-sad:before{content:'\f13d'} +.icon-safetypin:before{content:'\f417'} +.icon-satellite:before{content:'\f38a'} +.icon-satellitedish-remotemysql:before{content:'\f0c0'} +.icon-save-floppy:before{content:'\f0c8'} +.icon-scales:before{content:'\f3fd'} +.icon-science-atom:before{content:'\f2b0'} +.icon-scope-scan:before{content:'\f212'} +.icon-scopealt:before{content:'\f237'} +.icon-screenshot:before{content:'\f109'} +.icon-screw:before{content:'\f426'} +.icon-screwdriver:before{content:'\f292'} +.icon-screwdriveralt:before{content:'\f293'} +.icon-script:before{content:'\f08d'} +.icon-sd:before{content:'\f106'} +.icon-search:before{content:'\f0c5'} +.icon-searchdocument:before{content:'\f419'} +.icon-searchfolder:before{content:'\f41a'} +.icon-security-shield:before{content:'\f02d'} +.icon-securityalt-shieldalt:before{content:'\f02e'} +.icon-selection-rectangleselection:before{content:'\f1b0'} +.icon-selectionadd:before{content:'\f1b2'} +.icon-selectionintersect:before{content:'\f1b4'} +.icon-selectionremove:before{content:'\f1b3'} +.icon-seo:before{content:'\f030'} +.icon-server:before{content:'\f026'} +.icon-servers:before{content:'\f027'} +.icon-settingsandroid:before{content:'\f309'} +.icon-settingsfour-gearsalt:before{content:'\f306'} +.icon-settingsthree-gears:before{content:'\f307'} +.icon-settingstwo-gearalt:before{content:'\f308'} +.icon-shades-sunglasses:before{content:'\f294'} +.icon-shapes:before{content:'\f1dd'} +.icon-share:before{content:'\f47d'} +.icon-share-alt:before{content:'\f16c'} +.icon-sharealt:before{content:'\f147'} +.icon-sharedfile:before{content:'\f0ef'} +.icon-sharedhosting:before{content:'\f037'} +.icon-sharethree:before{content:'\f414'} +.icon-sheriff:before{content:'\f2a9'} +.icon-shipping:before{content:'\f23f'} +.icon-shopping:before{content:'\f010'} +.icon-shopping-cart:before{content:'\f035'} +.icon-shoppingbag:before{content:'\f273'} +.icon-shortcut:before{content:'\f043'} +.icon-shovel:before{content:'\f290'} +.icon-shredder:before{content:'\f27c'} +.icon-shutdown:before{content:'\f11e'} +.icon-sidebar:before{content:'\f124'} +.icon-signal:before{content:'\f100'} +.icon-sim:before{content:'\f0e1'} +.icon-simalt:before{content:'\f121'} +.icon-skrill:before{content:'\f268'} +.icon-skull:before{content:'\f38d'} +.icon-skype:before{content:'\f141'} +.icon-skypeaway:before{content:'\f39f'} +.icon-skypebusy:before{content:'\f3a0'} +.icon-skypeoffline:before{content:'\f3a1'} +.icon-skypeonline:before{content:'\f39e'} +.icon-smaller:before{content:'\f30b'} +.icon-smf:before{content:'\f062'} +.icon-smile:before{content:'\263a'} +.icon-snow:before{content:'\f22e'} +.icon-snowman:before{content:'\f37c'} +.icon-socialnetwork:before{content:'\f03b'} +.icon-software:before{content:'\f09a'} +.icon-sortbynameascending-atoz:before{content:'\f1c2'} +.icon-sortbynamedescending-ztoa:before{content:'\f1c1'} +.icon-sortbysizeascending:before{content:'\f1c3'} +.icon-sortbysizedescending:before{content:'\f1c4'} +.icon-soundwave:before{content:'\f194'} +.icon-soup:before{content:'\f3d1'} +.icon-spaceinvaders:before{content:'\f352'} +.icon-spades:before{content:'\f2f5'} +.icon-spam:before{content:'\f047'} +.icon-spamalt:before{content:'\f048'} +.icon-spawn:before{content:'\f344'} +.icon-speaker:before{content:'\f372'} +.icon-speed:before{content:'\f40b'} +.icon-spider:before{content:'\f346'} +.icon-spiderman:before{content:'\f347'} +.icon-split:before{content:'\f335'} +.icon-spoon:before{content:'\f213'} +.icon-spray:before{content:'\f1c7'} +.icon-spreadsheet:before{content:'\f0c3'} +.icon-squareapp:before{content:'\f26f'} +.icon-squarebrackets:before{content:'\f0b3'} +.icon-ssh:before{content:'\f04e'} +.icon-sslmanager:before{content:'\f04f'} +.icon-stadium:before{content:'\f3d6'} +.icon-stamp:before{content:'\f242'} +.icon-stampalt:before{content:'\f243'} +.icon-star:before{content:'\f13a'} +.icon-star-empty:before{content:'\f13b'} +.icon-starempty:before{content:'\f2de'} +.icon-starfull:before{content:'\f2e0'} +.icon-starhalf:before{content:'\f2df'} +.icon-steak:before{content:'\f360'} +.icon-steam:before{content:'\f2dd'} +.icon-step-backward:before{content:'\f198'} +.icon-step-forward:before{content:'\f197'} +.icon-sticker:before{content:'\f3f5'} +.icon-stiletto:before{content:'\f429'} +.icon-stockdown:before{content:'\f252'} +.icon-stocks:before{content:'\f250'} +.icon-stockup:before{content:'\f251'} +.icon-stomach:before{content:'\f3e1'} +.icon-stop:before{content:'\f185'} +.icon-stopwatch:before{content:'\f219'} +.icon-storage-box:before{content:'\f011'} +.icon-storagealt-drawer:before{content:'\f012'} +.icon-store:before{content:'\f272'} +.icon-storm:before{content:'\f230'} +.icon-stove:before{content:'\f371'} +.icon-strawberry:before{content:'\f3f3'} +.icon-strikethrough:before{content:'\f1f7'} +.icon-student-school:before{content:'\f288'} +.icon-stumbleupon:before{content:'\f40c'} +.icon-subdomain:before{content:'\f052'} +.icon-submarine:before{content:'\f373'} +.icon-subscript:before{content:'\f1ea'} +.icon-subtractshape:before{content:'\f1fe'} +.icon-sum:before{content:'\f33b'} +.icon-sun-day:before{content:'\f206'} +.icon-sunnysideup:before{content:'\f365'} +.icon-superman:before{content:'\f33f'} +.icon-superscript:before{content:'\f1eb'} +.icon-support:before{content:'\f013'} +.icon-supportalt:before{content:'\f014'} +.icon-switch:before{content:'\f28a'} +.icon-switchoff:before{content:'\f32d'} +.icon-switchoffalt:before{content:'\f28e'} +.icon-switchon:before{content:'\f32c'} +.icon-switchonalt:before{content:'\f28d'} +.icon-sword:before{content:'\f2ed'} +.icon-sync:before{content:'\f0bd'} +.icon-syncalt:before{content:'\f11c'} +.icon-synckeeplocal:before{content:'\f33e'} +.icon-synckeepserver:before{content:'\f33d'} +.icon-syringe-antivirus:before{content:'\f0a9'} +.icon-tablet:before{content:'\f118'} +.icon-tabletennis-pingpong:before{content:'\f2f0'} +.icon-taco:before{content:'\f3cd'} +.icon-tag:before{content:'\f032'} +.icon-tagalt-pricealt:before{content:'\f264'} +.icon-tags:before{content:'\f482'} +.icon-tagvertical:before{content:'\f15f'} +.icon-tank:before{content:'\f423'} +.icon-target:before{content:'\f2a6'} +.icon-taskmanager-logprograms:before{content:'\f04b'} +.icon-tasks:before{content:'\f0e0'} +.icon-taxi:before{content:'\f3a4'} +.icon-tea:before{content:'\f3cb'} +.icon-teapot:before{content:'\f42c'} +.icon-telescope:before{content:'\f3ef'} +.icon-temperature-thermometer:before{content:'\f20d'} +.icon-temperaturealt-thermometeralt:before{content:'\f20e'} +.icon-tennis:before{content:'\f2ea'} +.icon-tent-camping:before{content:'\f215'} +.icon-terminal:before{content:'\f114'} +.icon-tethering:before{content:'\f0f1'} +.icon-tetrisone:before{content:'\f34b'} +.icon-tetristhree:before{content:'\f34d'} +.icon-tetristwo:before{content:'\f34c'} +.icon-text-height:before{content:'\f1f8'} +.icon-text-width:before{content:'\f1f9'} +.icon-th:before{content:'\f110'} +.icon-th-large:before{content:'\f112'} +.icon-th-list:before{content:'\f113'} +.icon-theather:before{content:'\f39c'} +.icon-theme-style:before{content:'\f041'} +.icon-thissideup:before{content:'\f41d'} +.icon-threecolumns:before{content:'\f1ab'} +.icon-thumbs-down:before{content:'\f139'} +.icon-thumbs-up:before{content:'\f138'} +.icon-ticket:before{content:'\f3dc'} +.icon-tictactoe:before{content:'\f39a'} +.icon-tie-business:before{content:'\2040'} +.icon-time:before{content:'\f210'} +.icon-timeline:before{content:'\f253'} +.icon-tint:before{content:'\f208'} +.icon-toast:before{content:'\f2ad'} +.icon-toiletpaper:before{content:'\f384'} +.icon-tooth:before{content:'\f3de'} +.icon-toothbrush:before{content:'\f385'} +.icon-tophat:before{content:'\f3f0'} +.icon-torigate:before{content:'\f411'} +.icon-touchpad:before{content:'\f115'} +.icon-trafficlight:before{content:'\f22a'} +.icon-transform:before{content:'\f1a6'} +.icon-trash:before{content:'\f0ce'} +.icon-trashempty:before{content:'\f0cf'} +.icon-trashfull:before{content:'\f0d0'} +.icon-travel:before{content:'\f422'} +.icon-treediagram:before{content:'\f0ec'} +.icon-treeornament:before{content:'\f37e'} +.icon-triangle:before{content:'\25b3'} +.icon-tron:before{content:'\f34f'} +.icon-trophy:before{content:'\f2d7'} +.icon-truck:before{content:'\f211'} +.icon-trumpet:before{content:'\f375'} +.icon-tumblr:before{content:'\f164'} +.icon-tv:before{content:'\f1a4'} +.icon-twitter:before{content:'\f16a'} +.icon-twocolumnsleft:before{content:'\f1a9'} +.icon-twocolumnsleftalt:before{content:'\f1aa'} +.icon-twocolumnsright:before{content:'\f1a7'} +.icon-twocolumnsrightalt:before{content:'\f1a8'} +.icon-ubuntu:before{content:'\f120'} +.icon-umbrella:before{content:'\f218'} +.icon-underline:before{content:'\f1f6'} +.icon-undo:before{content:'\f32a'} +.icon-unlock:before{content:'\f0bf'} +.icon-upleft:before{content:'\f302'} +.icon-upload:before{content:'\f47a'} +.icon-uploadalt:before{content:'\f11b'} +.icon-upright:before{content:'\f303'} +.icon-uptime:before{content:'\f017'} +.icon-usb:before{content:'\f10d'} +.icon-usbalt:before{content:'\f10e'} +.icon-usbplug:before{content:'\f10f'} +.icon-user:before{content:'\f133'} +.icon-userfilter:before{content:'\f05d'} +.icon-usfootball:before{content:'\f2ec'} +.icon-value-coins:before{content:'\f018'} +.icon-vector:before{content:'\f1b6'} +.icon-vendetta:before{content:'\f3c5'} +.icon-video:before{content:'\f17d'} +.icon-viking:before{content:'\f379'} +.icon-vimeo:before{content:'\f168'} +.icon-vinyl:before{content:'\f0cc'} +.icon-violin:before{content:'\f1a5'} +.icon-virus:before{content:'\f0a8'} +.icon-visa:before{content:'\f3c2'} +.icon-visitor:before{content:'\f097'} +.icon-vlc-cone:before{content:'\f192'} +.icon-voice:before{content:'\f18c'} +.icon-volume-down:before{content:'\f0e3'} +.icon-volume-off:before{content:'\f0e4'} +.icon-volume-up:before{content:'\f0e2'} +.icon-vps:before{content:'\f025'} +.icon-wacom:before{content:'\f1bb'} +.icon-walle:before{content:'\f3bc'} +.icon-wallet:before{content:'\e000'} +.icon-warcraft:before{content:'\f3bf'} +.icon-warmedal:before{content:'\f2e4'} +.icon-warning-sign:before{content:'\f316'} +.icon-washer:before{content:'\f39b'} +.icon-watch:before{content:'\f378'} +.icon-watertap-plumbing:before{content:'\f22d'} +.icon-wave-sea:before{content:'\f23c'} +.icon-wavealt-seaalt:before{content:'\f23b'} +.icon-webcam:before{content:'\f0fe'} +.icon-webcamalt:before{content:'\f129'} +.icon-webhostinghub:before{content:'\f031'} +.icon-webmail:before{content:'\f045'} +.icon-webpage:before{content:'\f033'} +.icon-webplatform:before{content:'\f3c3'} +.icon-websitealt:before{content:'\f01c'} +.icon-websitebuilder:before{content:'\f034'} +.icon-weight:before{content:'\f430'} +.icon-westernunion:before{content:'\f26a'} +.icon-wheel:before{content:'\f228'} +.icon-wheelchair:before{content:'\f3fe'} +.icon-whistle:before{content:'\f3d8'} +.icon-whmcs:before{content:'\f066'} +.icon-wifi:before{content:'\f0ff'} +.icon-wind:before{content:'\f41b'} +.icon-windleft:before{content:'\f424'} +.icon-windows:before{content:'\f019'} +.icon-windright:before{content:'\f425'} +.icon-wine:before{content:'\f238'} +.icon-wizard:before{content:'\f03c'} +.icon-wizardalt:before{content:'\f1fb'} +.icon-wizardhat:before{content:'\f337'} +.icon-woman-female:before{content:'\f2a2'} +.icon-women:before{content:'\f24d'} +.icon-wordpress:before{content:'\f074'} +.icon-wrench:before{content:'\f05b'} +.icon-wrenchalt:before{content:'\f2b2'} +.icon-xbox:before{content:'\f353'} +.icon-xmen:before{content:'\f345'} +.icon-yahoo:before{content:'\f151'} +.icon-yen:before{content:'\00a5'} +.icon-yenalt:before{content:'\f25d'} +.icon-yinyang:before{content:'\262f'} +.icon-youtube:before{content:'\f142'} +.icon-zelda:before{content:'\f3b8'} +.icon-zikula:before{content:'\f0ac'} +.icon-zip:before{content:'\f116'} +.icon-zodiac-aquarius:before{content:'\f3b4'} +.icon-zodiac-aries:before{content:'\f3aa'} +.icon-zodiac-cancer:before{content:'\f3ad'} +.icon-zodiac-capricorn:before{content:'\f3b3'} +.icon-zodiac-gemini:before{content:'\f3ac'} +.icon-zodiac-leo:before{content:'\f3ae'} +.icon-zodiac-libra:before{content:'\f3b0'} +.icon-zodiac-pisces:before{content:'\f3b5'} +.icon-zodiac-sagitarius:before{content:'\f3b2'} +.icon-zodiac-scorpio:before{content:'\f3b1'} +.icon-zodiac-taurus:before{content:'\f3ab'} +.icon-zodiac-virgo:before{content:'\f3af'} +.icon-zoom-in:before{content:'\f320'} +.icon-zoom-out:before{content:'\f321'} +.icon-vk:before{content:'\f34e'} +.icon-bitcoin:before{content:'\f584'} +.icon-rouble:before{content:'\f4ca'} +.icon-phpnuke:before{content:'\f48c'} +.icon-modx:before{content:'\f48d'} +.icon-eoneohseven:before{content:'\f48e'} +.icon-subrion:before{content:'\f48f'} +.icon-typothree:before{content:'\f490'} +.icon-tikiwiki:before{content:'\f491'} +.icon-pligg:before{content:'\f492'} +.icon-pyrocms:before{content:'\f493'} +.icon-mambo:before{content:'\f494'} +.icon-contao:before{content:'\f495'} +.icon-crackedegg:before{content:'\f496'} +.icon-coffeecupalt:before{content:'\f497'} +.icon-reademailalt:before{content:'\f498'} +.icon-train:before{content:'\f499'} +.icon-shoebox:before{content:'\f49a'} +.icon-bathtub:before{content:'\f49b'} +.icon-ninegag:before{content:'\f49c'} +.icon-pebble:before{content:'\f49d'} +.icon-musicthree:before{content:'\f49e'} +.icon-stairsup:before{content:'\f49f'} +.icon-stairsdown:before{content:'\f4a0'} +.icon-bookalt:before{content:'\f4a1'} +.icon-programclose:before{content:'\f4a2'} +.icon-programok:before{content:'\f4a3'} +.icon-splitalt:before{content:'\f4a4'} +.icon-solarsystem:before{content:'\f4a5'} +.icon-honeycomb:before{content:'\f4a6'} +.icon-tools:before{content:'\f4a7'} +.icon-xoops:before{content:'\f4a8'} +.icon-pixie:before{content:'\f4a9'} +.icon-dotclear:before{content:'\f4aa'} +.icon-impresscms:before{content:'\f4ab'} +.icon-saurus:before{content:'\f4ac'} +.icon-impresspages:before{content:'\f4ad'} +.icon-monstra:before{content:'\f4ae'} +.icon-snews:before{content:'\f4af'} +.icon-jcore:before{content:'\f4b0'} +.icon-silverstripe:before{content:'\f4b1'} +.icon-btwoevolution:before{content:'\f4b2'} +.icon-nucleus:before{content:'\f4b3'} +.icon-symphony:before{content:'\f4b5'} +.icon-vanillacms:before{content:'\f4b6'} +.icon-bbpress:before{content:'\f4b7'} +.icon-phpbbalt:before{content:'\f4b8'} +.icon-chyrp:before{content:'\f4b9'} +.icon-pivotx:before{content:'\f4ba'} +.icon-pagecookery:before{content:'\f4bb'} +.icon-moviereelalt:before{content:'\f4bc'} +.icon-cassettealt:before{content:'\f4bd'} +.icon-photobucket:before{content:'\f4be'} +.icon-technorati:before{content:'\f4bf'} +.icon-theverge:before{content:'\f4c0'} +.icon-stacks:before{content:'\f4c1'} +.icon-dotlist:before{content:'\f4c2'} +.icon-numberlist:before{content:'\f4c3'} +.icon-indentleft:before{content:'\f4c4'} +.icon-indentright:before{content:'\f4c5'} +.icon-fblike:before{content:'\f4c6'} +.icon-fbdislike:before{content:'\f4c7'} +.icon-sale:before{content:'\f4c8'} +.icon-sharetronix:before{content:'\f4c9'} +.icon-markerdown:before{content:'\f4cb'} +.icon-markerup:before{content:'\f4cc'} +.icon-markerleft:before{content:'\f4cd'} +.icon-markerright:before{content:'\f4ce'} +.icon-bookmarkalt:before{content:'\f4cf'} +.icon-calendarthree:before{content:'\f4d0'} +.icon-wineglass:before{content:'\f4d1'} +.icon-slidersoff:before{content:'\f4d2'} +.icon-slidersmiddle:before{content:'\f4d3'} +.icon-slidersfull:before{content:'\f4d4'} +.icon-slidersdesc:before{content:'\f4d5'} +.icon-slidersasc:before{content:'\f4d6'} +.icon-slideronefull:before{content:'\f4d7'} +.icon-slidertwofull:before{content:'\f4d8'} +.icon-sliderthreefull:before{content:'\f4d9'} +.icon-noborders:before{content:'\f4da'} +.icon-bottomborder:before{content:'\f4db'} +.icon-topborder:before{content:'\f4dc'} +.icon-leftborder:before{content:'\f4dd'} +.icon-rightborder:before{content:'\f4de'} +.icon-horizontalborder:before{content:'\f4df'} +.icon-verticalborder:before{content:'\f4e0'} +.icon-outerborders:before{content:'\f4e1'} +.icon-innerborders:before{content:'\f4e2'} +.icon-fullborders:before{content:'\f4e3'} +.icon-networksignalalt:before{content:'\f4e4'} +.icon-resizeverticalalt:before{content:'\f4e5'} +.icon-resizehorizontalalt:before{content:'\f4e6'} +.icon-moneyalt:before{content:'\f4e7'} +.icon-fontcase:before{content:'\f4e8'} +.icon-playstation:before{content:'\f4e9'} +.icon-cube:before{content:'\f4ea'} +.icon-sphere:before{content:'\f4eb'} +.icon-ceilinglight:before{content:'\f4ec'} +.icon-chandelier:before{content:'\f4ed'} +.icon-details:before{content:'\f4ee'} +.icon-detailsalt:before{content:'\f4ef'} +.icon-bullet:before{content:'\f4f0'} +.icon-gun:before{content:'\f4f1'} +.icon-processorthree:before{content:'\f4f2'} +.icon-world:before{content:'\f4f3'} +.icon-statistics:before{content:'\f4f4'} +.icon-shoppingcartalt:before{content:'\f4f5'} +.icon-microphonealt:before{content:'\f4f6'} +.icon-routeralt:before{content:'\f4f7'} +.icon-shell:before{content:'\f4f8'} +.icon-squareplay:before{content:'\f4f9'} +.icon-squarestop:before{content:'\f4fa'} +.icon-squarepause:before{content:'\f4fb'} +.icon-squarerecord:before{content:'\f4fc'} +.icon-squareforward:before{content:'\f4fd'} +.icon-squareback:before{content:'\f4fe'} +.icon-squarenext:before{content:'\f4ff'} +.icon-squareprevious:before{content:'\f500'} +.icon-mega:before{content:'\f501'} +.icon-charliechaplin:before{content:'\f502'} +.icon-popcorn:before{content:'\f503'} +.icon-fatarrowright:before{content:'\f504'} +.icon-fatarrowleft:before{content:'\f505'} +.icon-fatarrowdown:before{content:'\f506'} +.icon-fatarrowup:before{content:'\f507'} +.icon-shirtbutton:before{content:'\f508'} +.icon-shirtbuttonalt:before{content:'\f509'} +.icon-cuckooclock:before{content:'\f50a'} +.icon-lens:before{content:'\f50b'} +.icon-voltage:before{content:'\f50c'} +.icon-planealt:before{content:'\f50d'} +.icon-busalt:before{content:'\f50e'} +.icon-lipstick:before{content:'\f50f'} +.icon-plantalt:before{content:'\f510'} +.icon-paperboat:before{content:'\f511'} +.icon-texture:before{content:'\f512'} +.icon-dominoone:before{content:'\f513'} +.icon-dominotwo:before{content:'\f514'} +.icon-dominothree:before{content:'\f515'} +.icon-dominofour:before{content:'\f516'} +.icon-dominofive:before{content:'\f517'} +.icon-dominosix:before{content:'\f518'} +.icon-dominoseven:before{content:'\f519'} +.icon-dominoeight:before{content:'\f51a'} +.icon-dominonine:before{content:'\f51b'} +.icon-connected:before{content:'\f51c'} +.icon-connectedpc:before{content:'\f51d'} +.icon-musicsheet:before{content:'\f51e'} +.icon-rdio:before{content:'\f51f'} +.icon-spotify:before{content:'\f520'} +.icon-deviantart:before{content:'\f521'} +.icon-yelp:before{content:'\f522'} +.icon-behance:before{content:'\f523'} +.icon-nfc:before{content:'\f524'} +.icon-earbudsalt:before{content:'\f525'} +.icon-earbuds:before{content:'\f526'} +.icon-amazon:before{content:'\f527'} +.icon-openid:before{content:'\f528'} +.icon-digg:before{content:'\f529'} +.icon-retweet:before{content:'\f52a'} +.icon-moonnew:before{content:'\f52b'} +.icon-moonwaxingcrescent:before{content:'\f52c'} +.icon-moonfirstquarter:before{content:'\f52d'} +.icon-moonwaxinggibbous:before{content:'\f52e'} +.icon-moonfull:before{content:'\f52f'} +.icon-moonwaninggibbous:before{content:'\f530'} +.icon-moonthirdquarter:before{content:'\f531'} +.icon-moonwaningcrescent:before{content:'\f532'} +.icon-planet:before{content:'\f533'} +.icon-sodacup:before{content:'\f534'} +.icon-cocktail:before{content:'\f535'} +.icon-church:before{content:'\f536'} +.icon-mosque:before{content:'\f537'} +.icon-comedy:before{content:'\f538'} +.icon-tragedy:before{content:'\f539'} +.icon-bacon:before{content:'\f53a'} +.icon-trailor:before{content:'\f53b'} +.icon-tshirt:before{content:'\f53c'} +.icon-design:before{content:'\f53d'} +.icon-spiderweb:before{content:'\f53e'} +.icon-fireplace:before{content:'\f53f'} +.icon-tallglass:before{content:'\f540'} +.icon-grapes:before{content:'\f541'} +.icon-biohazard:before{content:'\f542'} +.icon-directions:before{content:'\f543'} +.icon-equalizerthree:before{content:'\f544'} +.icon-mountains:before{content:'\f545'} +.icon-bing:before{content:'\f546'} +.icon-windowseight:before{content:'\f547'} +.icon-microsoftoffice:before{content:'\f548'} +.icon-salealt:before{content:'\f549'} +.icon-purse:before{content:'\f54a'} +.icon-chickenalt:before{content:'\f54b'} +.icon-podium:before{content:'\f54c'} +.icon-findfriends:before{content:'\f54d'} +.icon-microphonethree:before{content:'\f54e'} +.icon-workshirt:before{content:'\f54f'} +.icon-donotdisturb:before{content:'\f550'} +.icon-addtags:before{content:'\f551'} +.icon-removetags:before{content:'\f556'} +.icon-carbattery:before{content:'\f553'} +.icon-debug:before{content:'\f554'} +.icon-trojan:before{content:'\f555'} +.icon-molecule:before{content:'\f556'} +.icon-safetygoggles:before{content:'\f557'} +.icon-leather:before{content:'\f558'} +.icon-teddybear:before{content:'\f559'} +.icon-stroller:before{content:'\f55a'} +.icon-circleplay:before{content:'\f55b'} +.icon-circlestop:before{content:'\f55c'} +.icon-circlepause:before{content:'\f55d'} +.icon-circlerecord:before{content:'\f55e'} +.icon-circleforward:before{content:'\f55f'} +.icon-circlebackward:before{content:'\f560'} +.icon-circlenext:before{content:'\f561'} +.icon-circleprevious:before{content:'\f562'} +.icon-circleplayempty:before{content:'\f563'} +.icon-circlestopempty:before{content:'\f564'} +.icon-circlepauseempty:before{content:'\f565'} +.icon-circlerecordempty:before{content:'\f566'} +.icon-circleforwardempty:before{content:'\f567'} +.icon-circlebackwardempty:before{content:'\f568'} +.icon-circlenextempty:before{content:'\f569'} +.icon-circlepreviousempty:before{content:'\f56a'} +.icon-belt:before{content:'\f56b'} +.icon-bait:before{content:'\f56c'} +.icon-manalt:before{content:'\f56d'} +.icon-womanalt:before{content:'\f56e'} +.icon-clover:before{content:'\f56f'} +.icon-pacifier:before{content:'\f570'} +.icon-calcplus:before{content:'\f571'} +.icon-calcminus:before{content:'\f572'} +.icon-calcmultiply:before{content:'\f573'} +.icon-calcdivide:before{content:'\f574'} +.icon-calcequals:before{content:'\f575'} +.icon-city:before{content:'\f576'} +.icon-hdvideo:before{content:'\f577'} +.icon-horizontalexpand:before{content:'\f578'} +.icon-horizontalcontract:before{content:'\f579'} +.icon-radar:before{content:'\f57a'} +.icon-threed:before{content:'\f57b'} +.icon-flickralt:before{content:'\f57c'} +.icon-pattern:before{content:'\f57d'} +.icon-elevator:before{content:'\f57e'} +.icon-escalator:before{content:'\f57f'} +.icon-portrait:before{content:'\f580'} +.icon-cigar:before{content:'\f581'} +.icon-dropbox:before{content:'\f582'} +.icon-origami:before{content:'\f583'} +.icon-opensource:before{content:'\f585'} +.icon-redaxscript:before{content:'\f586'} +.icon-mahara:before{content:'\f587'} +.icon-forkcms:before{content:'\f588'} +.icon-pimcore:before{content:'\f589'} +.icon-bigace:before{content:'\f58a'} +.icon-aef:before{content:'\f58b'} +.icon-punbb:before{content:'\f58c'} +.icon-phorum:before{content:'\f58d'} +.icon-fluxbb:before{content:'\f58e'} +.icon-minibb:before{content:'\f58f'} +.icon-zenphoto:before{content:'\f590'} +.icon-fourimages:before{content:'\f591'} +.icon-plogger:before{content:'\f592'} +.icon-jcow:before{content:'\f593'} +.icon-elgg:before{content:'\f594'} +.icon-etano:before{content:'\f595'} +.icon-openclassifieds:before{content:'\f596'} +.icon-osclass:before{content:'\f597'} +.icon-openx:before{content:'\f598'} +.icon-phplist:before{content:'\f599'} +.icon-roundcube:before{content:'\f59a'} +.icon-pommo:before{content:'\f59b'} +.icon-webinsta:before{content:'\f59c'} +.icon-limesurvey:before{content:'\f59d'} +.icon-fengoffice:before{content:'\f59e'} +.icon-eyeos:before{content:'\f59f'} +.icon-dotproject:before{content:'\f5a0'} +.icon-collabtive:before{content:'\f5a1'} +.icon-projectpier:before{content:'\f5a2'} +.icon-taskfreak:before{content:'\f5a3'} +.icon-eventum:before{content:'\f5a4'} +.icon-traq:before{content:'\f5a5'} +.icon-mantisbugtracker:before{content:'\f5a6'} +.icon-oscommerce:before{content:'\f5a7'} +.icon-zencart:before{content:'\f5a8'} +.icon-tomatocart:before{content:'\f5a9'} +.icon-boxbilling:before{content:'\f5aa'} +.icon-zurmo:before{content:'\f5ab'} +.icon-orangehrm:before{content:'\f5ac'} +.icon-vtiger:before{content:'\f5ad'} +.icon-mibew:before{content:'\f5ae'} +.icon-phpmyfaq:before{content:'\f5af'} +.icon-yiiframework:before{content:'\f5b0'} +.icon-zendframework:before{content:'\f5b1'} +.icon-fuelphp:before{content:'\f5b2'} +.icon-kohana:before{content:'\f5b3'} +.icon-smarty:before{content:'\f5b4'} +.icon-sidu:before{content:'\f5b5'} +.icon-simplepie:before{content:'\f5b6'} +.icon-projectsend:before{content:'\f5b7'} +.icon-extjs:before{content:'\f5b8'} +.icon-raphael:before{content:'\f5b9'} +.icon-sizzle:before{content:'\f5ba'} +.icon-yui:before{content:'\f5bb'} +.icon-scissorsalt:before{content:'\f5bc'} +.icon-cuthere:before{content:'\f5bd'} +.icon-coinsalt:before{content:'\f5be'} +.icon-parkingmeter:before{content:'\f5bf'} +.icon-treethree:before{content:'\f5c0'} +.icon-packarchive:before{content:'\f5c1'} +.icon-unpackarchive:before{content:'\f5c2'} +.icon-terminalalt:before{content:'\f5c3'} +.icon-jersey:before{content:'\f5c4'} +.icon-vial:before{content:'\f5c5'} +.icon-noteslist:before{content:'\f5c6'} +.icon-notestasks:before{content:'\f5c7'} +.icon-notesdate:before{content:'\f5c8'} +.icon-noteslocation:before{content:'\f5c9'} +.icon-noteslistalt:before{content:'\f5ca'} +.icon-notestasksalt:before{content:'\f5cb'} +.icon-notesdatealt:before{content:'\f5cc'} +.icon-noteslocationalt:before{content:'\f5cd'} +.icon-useralt:before{content:'\f5ce'} +.icon-adduseralt:before{content:'\f5cf'} +.icon-removeuseralt:before{content:'\f5d0'} +.icon-banuseralt:before{content:'\f5d1'} +.icon-banuser:before{content:'\f5d2'} +.icon-paintrollalt:before{content:'\f5d3'} +.icon-textcursor:before{content:'\f5d4'} +.icon-textfield:before{content:'\f5d5'} +.icon-precisecursor:before{content:'\f5d6'} +.icon-brokenlink:before{content:'\f5d7'} +.icon-bookmarkthree:before{content:'\f5d8'} +.icon-bookmarkfour:before{content:'\f5d9'} +.icon-warmedalalt:before{content:'\f5da'} +.icon-thinking:before{content:'\f5db'} +.icon-commentlove:before{content:'\f5dc'} +.icon-commentsmiley:before{content:'\f5dd'} +.icon-sharetwo:before{content:'\f147'} +.icon-emptystar:before{content:'\f2de'} +.icon-halfstar:before{content:'\f2df'} +.icon-fullstar:before{content:'\f2e0'} +.icon-forbidden:before{content:'\f314'} +.icon-indentleftalt:before{content:'\f4c4'} +.icon-indentrightalt:before{content:'\f4c5'} +.icon-modxalt:before{content:'\f5de'} +.icon-apple:before{content:'\f5df'} +.icon-greekcolumn:before{content:'\f5e0'} +.icon-walletalt:before{content:'\f5e1'} +.icon-dollarsquare:before{content:'\f5e2'} +.icon-poundsquare:before{content:'\f5e3'} +.icon-yensquare:before{content:'\f5e4'} +.icon-eurosquare:before{content:'\f5e5'} +.icon-bitcoinsquare:before{content:'\f5e6'} +.icon-roublesquare:before{content:'\f5e7'} +.icon-roublealt:before{content:'\f5e8'} +.icon-bitcoinalt:before{content:'\f5e9'} +.icon-gavel:before{content:'\f5ea'} +.icon-barchartasc:before{content:'\f5eb'} +.icon-barchartdesc:before{content:'\f5ec'} +.icon-house:before{content:'\f5ed'} +.icon-garage:before{content:'\f5ee'} +.icon-milk:before{content:'\f5ef'} +.icon-hryvnia:before{content:'\f5f0'} +.icon-hryvniasquare:before{content:'\f5f1'} +.icon-hryvniaalt:before{content:'\f5f2'} +.icon-beeralt:before{content:'\f5f3'} +.icon-trolleyfull:before{content:'\f5f4'} +.icon-trolleyload:before{content:'\f5f5'} +.icon-trolleyunload:before{content:'\f5f6'} +.icon-trolleyempty:before{content:'\f5f7'} +.icon-mootools:before{content:'\f5f8'} +.icon-mootoolstwo:before{content:'\f5f9'} +.icon-mootoolsthree:before{content:'\f5fa'} +.icon-mysqlthree:before{content:'\f5fb'} +.icon-mysqlalt:before{content:'\f5fc'} +.icon-pgsql:before{content:'\f5fd'} +.icon-mongodb:before{content:'\f5fe'} +.icon-neofourj:before{content:'\f5ff'} +.icon-nosql:before{content:'\f600'} +.icon-catface:before{content:'\f601'} +.icon-polaroid:before{content:'\f602'} +.icon-clouderror:before{content:'\f603'} +.icon-camcorder:before{content:'\f604'} +.icon-projector:before{content:'\f605'} +.icon-sdvideo:before{content:'\f606'} +.icon-fx:before{content:'\f607'} +.icon-gramophone:before{content:'\f608'} +.icon-speakeralt:before{content:'\f609'} +.icon-hddalt:before{content:'\f60a'} +.icon-usbflash:before{content:'\f60b'} +.icon-manillaenvelope:before{content:'\f60c'} +.icon-stickynote:before{content:'\f60d'} +.icon-stickynotealt:before{content:'\f60e'} +.icon-torch:before{content:'\f60f'} +.icon-flashlightalt:before{content:'\f610'} +.icon-campfire:before{content:'\f611'} +.icon-cctv:before{content:'\f612'} +.icon-drill:before{content:'\f613'} +.icon-lampalt:before{content:'\f614'} +.icon-flowerpot:before{content:'\f615'} +.icon-defragment:before{content:'\f616'} +.icon-panoramio:before{content:'\f617'} +.icon-panorama:before{content:'\f618'} +.icon-photosphere:before{content:'\f619'} +.icon-panoramaalt:before{content:'\f61a'} +.icon-timer:before{content:'\f61b'} +.icon-burstmode:before{content:'\f61c'} +.icon-cameraflash:before{content:'\f61d'} +.icon-autoflash:before{content:'\f61e'} +.icon-noflash:before{content:'\f61f'} +.icon-threetofour:before{content:'\f620'} +.icon-sixteentonine:before{content:'\f621'} +.icon-cat:before{content:'\f622'} +.icon-dog:before{content:'\f623'} +.icon-rabbit:before{content:'\f624'} +.icon-koala:before{content:'\f625'} +.icon-butterflyalt:before{content:'\f626'} +.icon-butterfly:before{content:'\f627'} +.icon-wwf:before{content:'\f628'} +.icon-poop:before{content:'\f629'} +.icon-poopalt:before{content:'\f62a'} +.icon-kiwi:before{content:'\f62b'} +.icon-kiwifruit:before{content:'\f62c'} +.icon-lemon:before{content:'\f62d'} +.icon-pear:before{content:'\f62e'} +.icon-watermelon:before{content:'\f62f'} +.icon-onion:before{content:'\f630'} +.icon-turnip:before{content:'\f631'} +.icon-eggplant:before{content:'\f632'} +.icon-avocado:before{content:'\f633'} +.icon-perfume:before{content:'\f634'} +.icon-arch:before{content:'\f635'} +.icon-pluspages:before{content:'\f636'} +.icon-community:before{content:'\f637'} +.icon-pluscircles:before{content:'\f638'} +.icon-googleplusold:before{content:'\f639'} +.icon-plusgames:before{content:'\f63a'} +.icon-event:before{content:'\f63b'} +.icon-miui:before{content:'\f63c'} +.icon-hot:before{content:'\f63d'} +.icon-flowup:before{content:'\f63e'} +.icon-flowdown:before{content:'\f63f'} +.icon-moustache:before{content:'\f640'} +.icon-angle:before{content:'\f641'} +.icon-sleep:before{content:'\f642'} +.icon-acorn:before{content:'\f643'} +.icon-steamalt:before{content:'\f644'} +.icon-resizeupleft:before{content:'\f645'} +.icon-resizeupright:before{content:'\f646'} +.icon-resizedownright:before{content:'\f647'} +.icon-resizedownleft:before{content:'\f648'} +.icon-hammeralt:before{content:'\f649'} +.icon-bamboo:before{content:'\f64a'} +.icon-mypictures:before{content:'\f64b'} +.icon-mymusic:before{content:'\f64c'} +.icon-myvideos:before{content:'\f64d'} +.icon-systemfolder:before{content:'\f64e'} +.icon-bookthree:before{content:'\f64f'} +.icon-compile:before{content:'\f650'} +.icon-report:before{content:'\f651'} +.icon-fliphorizontal:before{content:'\f652'} +.icon-flipvertical:before{content:'\f653'} +.icon-construction:before{content:'\f654'} +.icon-counteralt:before{content:'\f655'} +.icon-counter:before{content:'\f656'} +.icon-papercutter:before{content:'\f657'} +.icon-snaptodot:before{content:'\f658'} +.icon-snaptogrid:before{content:'\f659'} +.icon-caligraphy:before{content:'\f65a'} +.icon-icecreamthree:before{content:'\f65b'} +.icon-skitch:before{content:'\f65c'} +.icon-archlinux:before{content:'\f65d'} +.icon-elementaryos:before{content:'\f65e'} +.icon-loadingone:before{content:'\f65f'} +.icon-loadingtwo:before{content:'\f660'} +.icon-loadingthree:before{content:'\f661'} +.icon-loadingfour:before{content:'\f662'} +.icon-loadingfive:before{content:'\f663'} +.icon-loadingsix:before{content:'\f664'} +.icon-loadingseven:before{content:'\f665'} +.icon-loadingeight:before{content:'\f666'} +.icon-brokenheart:before{content:'\f667'} +.icon-heartarrow:before{content:'\f668'} +.icon-heartsparkle:before{content:'\f669'} +.icon-cell:before{content:'\f66a'} +.icon-panda:before{content:'\f66b'} +.icon-refreshalt:before{content:'\f66c'} +.icon-mirror:before{content:'\f66d'} +.icon-headphonesthree:before{content:'\f66e'} +.icon-fan:before{content:'\f66f'} +.icon-tornado:before{content:'\f670'} +.icon-hangout:before{content:'\f671'} +.icon-beaker:before{content:'\f672'} +.icon-beakeralt:before{content:'\f673'} +.icon-phonescreensize:before{content:'\f674'} +.icon-tabletscreensize:before{content:'\f675'} +.icon-notification:before{content:'\f676'} +.icon-googleglass:before{content:'\f677'} +.icon-pinterest:before{content:'\f678'} +.icon-soundcloud:before{content:'\f679'} +.icon-alarmclock:before{content:'\f67a'} +.icon-addalarm:before{content:'\f67b'} +.icon-deletealarm:before{content:'\f67c'} +.icon-turnoffalarm:before{content:'\f67d'} +.icon-snooze:before{content:'\f67e'} +.icon-bringforward:before{content:'\f67f'} +.icon-sendbackward:before{content:'\f680'} +.icon-bringtofront:before{content:'\f681'} +.icon-sendtoback:before{content:'\f682'} +.icon-tectile:before{content:'\f683'} +.icon-grave:before{content:'\f684'} +.icon-gravetwo:before{content:'\f685'} +.icon-gravethree:before{content:'\f686'} +.icon-gravefour:before{content:'\f687'} +.icon-textlayer:before{content:'\f688'} +.icon-vectoralt:before{content:'\f689'} +.icon-drmanhattan:before{content:'\f68a'} +.icon-foursquarealt:before{content:'\f68b'} +.icon-hashtag:before{content:'\f68c'} +.icon-enteralt:before{content:'\f68d'} +.icon-exitalt:before{content:'\f68e'} +.icon-cartalt:before{content:'\f68f'} +.icon-vaultthree:before{content:'\f690'} +.icon-fatundo:before{content:'\f691'} +.icon-fatredo:before{content:'\f692'} +.icon-feedly:before{content:'\f693'} +.icon-feedlyalt:before{content:'\f694'} +.icon-squareheart:before{content:'\f695'} +.icon-squarestar:before{content:'\f696'} +.icon-squarecomment:before{content:'\f697'} +.icon-squarelike:before{content:'\f698'} +.icon-squarebookmark:before{content:'\f699'} +.icon-squaresearch:before{content:'\f69a'} +.icon-squaresettings:before{content:'\f69b'} +.icon-squarevoice:before{content:'\f69c'} +.icon-google:before{content:'\f69d'} +.icon-emojigrinalt:before{content:'\f69e'} +.icon-emojigrin:before{content:'\f69f'} +.icon-constellation:before{content:'\f6a0'} +.icon-emojisurprise:before{content:'\f6a1'} +.icon-emojidead:before{content:'\f6a2'} +.icon-emojiangry:before{content:'\f6a3'} +.icon-emojidevil:before{content:'\f6a4'} +.icon-emojiwink:before{content:'\f6a5'} +.icon-moonorbit:before{content:'\f6a6'} +.icon-emojismile:before{content:'\f6a7'} +.icon-emojisorry:before{content:'\f6a8'} +.icon-emojiconfused:before{content:'\f6a9'} +.icon-emojisleep:before{content:'\f6aa'} +.icon-emojicry:before{content:'\f6ab'} +.icon-circlefork:before{content:'\f6ac'} +.icon-circlespoon:before{content:'\f6ad'} +.icon-circleknife:before{content:'\f6ae'} +.icon-circlepencil:before{content:'\f6af'} +.icon-circlehammer:before{content:'\f6b0'} +.icon-circlescrewdriver:before{content:'\f6b1'} +.icon-middlefinger:before{content:'\f6b2'} +.icon-heavymetal:before{content:'\f6b3'} +.icon-turnright:before{content:'\f6b4'} +.icon-turnleft:before{content:'\f6b5'} +.icon-vineapp:before{content:'\f6b6'} +.icon-vineappalt:before{content:'\f6b7'} +.icon-finance:before{content:'\f6b8'} +.icon-survey:before{content:'\f6b9'} +.icon-hangouts:before{content:'\f6ba'} +.icon-square0:before{content:'\f6bb'} +.icon-square1:before{content:'\f6bc'} +.icon-square2:before{content:'\f6bd'} +.icon-square3:before{content:'\f6be'} +.icon-square4:before{content:'\f6bf'} +.icon-square5:before{content:'\f6c0'} +.icon-square6:before{content:'\f6c1'} +.icon-square7:before{content:'\f6c2'} +.icon-square8:before{content:'\f6c3'} +.icon-square9:before{content:'\f6c4'} +.icon-squarea:before{content:'\f6c5'} +.icon-squareb:before{content:'\f6c6'} +.icon-squarec:before{content:'\f6c7'} +.icon-squared:before{content:'\f6c8'} +.icon-squaree:before{content:'\f6c9'} +.icon-squaref:before{content:'\f6ca'} +.icon-squareg:before{content:'\f6cb'} +.icon-squareh:before{content:'\f6cc'} +.icon-squarei:before{content:'\f6cd'} +.icon-squarej:before{content:'\f6ce'} +.icon-squarek:before{content:'\f6cf'} +.icon-squarel:before{content:'\f6d0'} +.icon-squarem:before{content:'\f6d1'} +.icon-squaren:before{content:'\f6d2'} +.icon-squareo:before{content:'\f6d3'} +.icon-squarep:before{content:'\f6d4'} +.icon-squareq:before{content:'\f6d5'} +.icon-squarer:before{content:'\f6d6'} +.icon-squares:before{content:'\f6d7'} +.icon-squaret:before{content:'\f6d8'} +.icon-squareu:before{content:'\f6d9'} +.icon-squarev:before{content:'\f6da'} +.icon-squarew:before{content:'\f6db'} +.icon-squarex:before{content:'\f6dc'} +.icon-squarey:before{content:'\f6dd'} +.icon-squarez:before{content:'\f6de'} +.icon-shuttle:before{content:'\f6df'} +.icon-meteor:before{content:'\f6e0'} +.icon-galaxy:before{content:'\f6e1'} +.icon-observatory:before{content:'\f6e2'} +.icon-astronaut:before{content:'\f6e3'} +.icon-asteroid:before{content:'\f6e4'} +.icon-sunrise:before{content:'\f6e5'} +.icon-sunset:before{content:'\f6e6'} +.icon-tiderise:before{content:'\f6e7'} +.icon-tidefall:before{content:'\f6e8'} +.icon-mushroomcloud:before{content:'\f6e9'} +.icon-galaxyalt:before{content:'\f6ea'} +.icon-sputnik:before{content:'\f6eb'} +.icon-sextant:before{content:'\f6ec'} +.icon-spock:before{content:'\f6ed'} +.icon-meteorite:before{content:'\f6ee'} +.icon-deathstar:before{content:'\f6ef'} +.icon-deathstarbulding:before{content:'\f6f0'} +.icon-fallingstar:before{content:'\f6f1'} +.icon-windmill:before{content:'\f6f2'} +.icon-windmillalt:before{content:'\f6f3'} +.icon-pumpjack:before{content:'\f6f4'} +.icon-nuclearplant:before{content:'\f6f5'} +.icon-solarpanel:before{content:'\f6f6'} +.icon-barrel:before{content:'\f6f7'} +.icon-canister:before{content:'\f6f8'} +.icon-railtunnel:before{content:'\f6f9'} +.icon-roadtunnel:before{content:'\f6fa'} +.icon-pickaxe:before{content:'\f6fb'} +.icon-cow:before{content:'\f6fc'} +.icon-sheep:before{content:'\f6fd'} +.icon-fountain:before{content:'\f6fe'} +.icon-circlezero:before{content:'\f6ff'} +.icon-circleone:before{content:'\f700'} +.icon-circletwo:before{content:'\f701'} +.icon-circlethree:before{content:'\f702'} +.icon-circlefour:before{content:'\f703'} +.icon-circlefive:before{content:'\f704'} +.icon-circlesix:before{content:'\f705'} +.icon-circleseven:before{content:'\f706'} +.icon-circleeight:before{content:'\f707'} +.icon-circlenine:before{content:'\f708'} +.icon-circlea:before{content:'\f709'} +.icon-circleb:before{content:'\f70a'} +.icon-circlec:before{content:'\f70b'} +.icon-circled:before{content:'\f70c'} +.icon-circlee:before{content:'\f70d'} +.icon-circlef:before{content:'\f70e'} +.icon-circleg:before{content:'\f70f'} +.icon-circleh:before{content:'\f710'} +.icon-circlei:before{content:'\f711'} +.icon-circlej:before{content:'\f712'} +.icon-circlek:before{content:'\f713'} +.icon-circlel:before{content:'\f714'} +.icon-circlem:before{content:'\f715'} +.icon-circlen:before{content:'\f716'} +.icon-circleo:before{content:'\f717'} +.icon-circlep:before{content:'\f718'} +.icon-circleq:before{content:'\f719'} +.icon-circler:before{content:'\f71a'} +.icon-circles:before{content:'\f71b'} +.icon-circlet:before{content:'\f71c'} +.icon-circleu:before{content:'\f71d'} +.icon-circlev:before{content:'\f71e'} +.icon-circlew:before{content:'\f71f'} +.icon-circlex:before{content:'\f720'} +.icon-circley:before{content:'\f721'} +.icon-circlez:before{content:'\f722'} +.icon-creeper:before{content:'\f723'} +.icon-minecraft:before{content:'\f724'} +.icon-minecraftalt:before{content:'\f725'} +.icon-pixelsword:before{content:'\f726'} +.icon-pixelbroadsword:before{content:'\f727'} +.icon-pixelwand:before{content:'\f728'} +.icon-pixelpotion:before{content:'\f729'} +.icon-pixelpotionalt:before{content:'\f72a'} +.icon-pixelpickaxe:before{content:'\f72b'} +.icon-pixelbow:before{content:'\f72c'} +.icon-pixelarrow:before{content:'\f72d'} +.icon-pixelaxe:before{content:'\f72e'} +.icon-pixeldagger:before{content:'\f72f'} +.icon-pixelbastardsword:before{content:'\f730'} +.icon-pixellance:before{content:'\f731'} +.icon-pixelbattleaxe:before{content:'\f732'} +.icon-pixelshovel:before{content:'\f733'} +.icon-pixelsphere:before{content:'\f734'} +.icon-pixelelixir:before{content:'\f735'} +.icon-pixelchest:before{content:'\f736'} +.icon-pixelshield:before{content:'\f737'} +.icon-pixelheart:before{content:'\f738'} +.icon-rudder:before{content:'\f739'} +.icon-folderalt:before{content:'\f73a'} +.icon-removefolderalt:before{content:'\f73b'} +.icon-addfolderalt:before{content:'\f73c'} +.icon-deletefolderalt:before{content:'\f73d'} +.icon-openfolderalt:before{content:'\f73e'} +.icon-clipboardalt:before{content:'\f73f'} +.icon-pastealt:before{content:'\f740'} +.icon-loadingflowccw:before{content:'\f741'} +.icon-loadingflowcw:before{content:'\f742'} +.icon-code:before{content:'\f743'} +.icon-cloveralt:before{content:'\f744'} +.icon-lips:before{content:'\f745'} +.icon-kiss:before{content:'\f746'} +.icon-manualshift:before{content:'\f747'} +.icon-simcardthree:before{content:'\f748'} +.icon-parthenon:before{content:'\f749'} +.icon-addcomment:before{content:'\f74a'} +.icon-deletecomment:before{content:'\f74b'} +.icon-gender:before{content:'\f74c'} +.icon-callalt:before{content:'\f74d'} +.icon-outgoingcallalt:before{content:'\f74e'} +.icon-incomingcallalt:before{content:'\f74f'} +.icon-missedcallalt:before{content:'\f750'} +.icon-export:before{content:'\f751'} +.icon-import:before{content:'\f752'} +.icon-cherryalt:before{content:'\f753'} +.icon-panties:before{content:'\f754'} +.icon-kimai:before{content:'\f755'} +.icon-livejournal:before{content:'\f756'} +.icon-livejournalalt:before{content:'\f757'} +.icon-tagged:before{content:'\f758'} +.icon-temple:before{content:'\f759'} +.icon-mayanpyramid:before{content:'\f75a'} +.icon-egyptpyramid:before{content:'\f75b'} +.icon-tampermonkey:before{content:'\f75c'} +.icon-pushbullet:before{content:'\f75d'} +.icon-currents:before{content:'\f75e'} +.icon-communitysmall:before{content:'\f75f'} +.icon-squaregithub:before{content:'\f760'} +.icon-projectfork:before{content:'\f761'} +.icon-projectmerge:before{content:'\f762'} +.icon-projectcompare:before{content:'\f763'} +.icon-history:before{content:'\f764'} +.icon-notebook:before{content:'\f765'} +.icon-issue:before{content:'\f766'} +.icon-issueclosed:before{content:'\f767'} +.icon-issuereopened:before{content:'\f768'} +.icon-rubyalt:before{content:'\f769'} +.icon-lighton:before{content:'\f76a'} +.icon-lightoff:before{content:'\f76b'} +.icon-bellalt:before{content:'\f76c'} +.icon-versions:before{content:'\f777'} +.icon-twog:before{content:'\f76e'} +.icon-threeg:before{content:'\f76f'} +.icon-fourg:before{content:'\f770'} +.icon-gpsalt:before{content:'\f771'} +.icon-circleloaderfull:before{content:'\f772'} +.icon-circleloaderseven:before{content:'\f773'} +.icon-circleloadersix:before{content:'\f774'} +.icon-circleloaderfive:before{content:'\f775'} +.icon-circleloaderfour:before{content:'\f776'} +.icon-circleloaderthree:before{content:'\f777'} +.icon-circleloadertwo:before{content:'\f778'} +.icon-circleloaderone:before{content:'\f779'} +.icon-circleloaderempty:before{content:'\f77a'} +.icon-whatsapp:before{content:'\f77b'} +.icon-whatsappalt:before{content:'\f77c'} +.icon-viber:before{content:'\f77d'} +.icon-squareviber:before{content:'\f77e'} +.icon-teamviewer:before{content:'\f77f'} +.icon-tunein:before{content:'\f780'} +.icon-tuneinalt:before{content:'\f781'} +.icon-weightscale:before{content:'\f782'} +.icon-boxing:before{content:'\f783'} +.icon-speedalt:before{content:'\f784'} +.icon-scriptalt:before{content:'\f785'} +.icon-splitthree:before{content:'\f786'} +.icon-mergethree:before{content:'\f787'} +.icon-layersthree:before{content:'\f788'} +.icon-mutemic:before{content:'\f789'} +.icon-zerply:before{content:'\f78a'} +.icon-circlegoogleplus:before{content:'\f78b'} +.icon-circletwitter:before{content:'\f78c'} +.icon-circlefacebook:before{content:'\f78d'} +.icon-circleyahoo:before{content:'\f78e'} +.icon-circlegithub:before{content:'\f78f'} +.icon-forumsalt:before{content:'\f790'} +.icon-circlepath:before{content:'\f791'} +.icon-circlevimeo:before{content:'\f792'} +.icon-circlevine:before{content:'\f793'} +.icon-instagramtwo:before{content:'\f794'} +.icon-instagramthree:before{content:'\f795'} +.icon-flickrthree:before{content:'\f796'} +.icon-quora:before{content:'\f797'} +.icon-squarequora:before{content:'\f798'} +.icon-circlequora:before{content:'\f799'} +.icon-picasa:before{content:'\f79a'} +.icon-branch:before{content:'\f79b'} +.icon-ingress:before{content:'\f79c'} +.icon-squarezerply:before{content:'\f79d'} +.icon-circlezerply:before{content:'\f79e'} +.icon-squarevimeo:before{content:'\f79f'} +.icon-squaretwitter:before{content:'\f7a0'} +.icon-brightnessalt:before{content:'\f7a1'} +.icon-brightnessalthalf:before{content:'\f7a2'} +.icon-brightnessaltfull:before{content:'\f7a3'} +.icon-brightnessaltauto:before{content:'\f7a4'} +.icon-shirtbuttonthree:before{content:'\f7a5'} +.icon-openshare:before{content:'\f7a6'} +.icon-copyapp:before{content:'\f7a7'} +.icon-bowl:before{content:'\f7a8'} +.icon-cloudalt:before{content:'\f7a9'} +.icon-cloudaltdownload:before{content:'\f7aa'} +.icon-cloudaltupload:before{content:'\f7ab'} +.icon-cloudaltsync:before{content:'\f7ac'} +.icon-cloudaltprivate:before{content:'\f7ad'} +.icon-flipboard:before{content:'\f7ae'} +.icon-octoloaderempty:before{content:'\f7af'} +.icon-octoloaderone:before{content:'\f7b0'} +.icon-octoloadertwo:before{content:'\f7b1'} +.icon-octoloaderthree:before{content:'\f7b2'} +.icon-octoloaderfour:before{content:'\f7b3'} +.icon-octoloaderfive:before{content:'\f7b4'} +.icon-octoloadersix:before{content:'\f7b5'} +.icon-octoloaderseven:before{content:'\f7b6'} +.icon-octoloaderfull:before{content:'\f7b7'} +.icon-selectionsymbol:before{content:'\f7b8'} +.icon-infinityalt:before{content:'\f7b9'} +.icon-pullrequest:before{content:'\f7ba'} +.icon-projectforkdelete:before{content:'\f7bb'} +.icon-projectforkprivate:before{content:'\f7bc'} +.icon-commit:before{content:'\f7bd'} +.icon-htmlfile:before{content:'\f7be'} +.icon-pushalt:before{content:'\f7bf'} +.icon-pullalt:before{content:'\f7c0'} +.icon-photonineframes:before{content:'\f7c1'} +.icon-wetfloor:before{content:'\f7c2'} +.icon-instagramfour:before{content:'\f7c3'} +.icon-circleinstagram:before{content:'\f7c4'} +.icon-videocamerathree:before{content:'\f7c5'} +.icon-subtitles:before{content:'\f7c6'} +.icon-subtitlesoff:before{content:'\f7c7'} +.icon-compress:before{content:'\f7c8'} +.icon-baby:before{content:'\f7c9'} +.icon-ducky:before{content:'\f7ca'} +.icon-handswipe:before{content:'\f7cb'} +.icon-swipeup:before{content:'\f7cc'} +.icon-swipedown:before{content:'\f7cd'} +.icon-twofingerswipedown:before{content:'\f7ce'} +.icon-twofingerswipeup:before{content:'\f7cf'} +.icon-doubletap:before{content:'\f7d0'} +.icon-dribbblealt:before{content:'\f7d1'} +.icon-circlecallmissed:before{content:'\f7d2'} +.icon-circlecallincoming:before{content:'\f7d3'} +.icon-circlecalloutgoing:before{content:'\f7d4'} +.icon-circledownload:before{content:'\f7d5'} +.icon-circleupload:before{content:'\f7d6'} +.icon-minismile:before{content:'\f7d7'} +.icon-minisad:before{content:'\f7d8'} +.icon-minilaugh:before{content:'\f7d9'} +.icon-minigrin:before{content:'\f7da'} +.icon-miniangry:before{content:'\f7db'} +.icon-minitongue:before{content:'\f7dc'} +.icon-minitonguealt:before{content:'\f7dd'} +.icon-miniwink:before{content:'\f7de'} +.icon-minitonguewink:before{content:'\f7df'} +.icon-miniconfused:before{content:'\f7e0'} +.icon-soundright:before{content:'\f7e1'} +.icon-soundleft:before{content:'\f7e2'} +.icon-savetodrive:before{content:'\f7e3'} +.icon-layerorderup:before{content:'\f7e4'} +.icon-layerorderdown:before{content:'\f7e5'} +.icon-layerorder:before{content:'\f7e6'} +.icon-circledribbble:before{content:'\f7e7'} +.icon-squaredribbble:before{content:'\f7e8'} +.icon-handexpand:before{content:'\f7e9'} +.icon-handpinch:before{content:'\f7ea'} +.icon-fontserif:before{content:'\f7eb'} +.icon-fontsansserif:before{content:'\f7ec'} +.icon-fontrounded:before{content:'\f7ed'} +.icon-fonthandwriting:before{content:'\f7ee'} +.icon-fonttypewriter:before{content:'\f7ef'} +.icon-fontcomic:before{content:'\f7f0'} +.icon-fontcaligraphy:before{content:'\f7f1'} +.icon-fontgothic:before{content:'\f7f2'} +.icon-fontstencil:before{content:'\f7f3'} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 8d77bcaa5..3a6292d51 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@babel/runtime@^7.21.0": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" + integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== + dependencies: + regenerator-runtime "^0.14.0" + "@esbuild/linux-loong64@0.14.54": version "0.14.54" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" @@ -38,9 +45,21 @@ integrity sha512-NvVBRnZNE+dugiXERFsET1JlKZfM5lJDEpSMilKW4bToYJ7pxf0Zne78xyXB2ny2c2aHfJ6WLnz1AaTNHAmQeQ== "@rails/actioncable@^7.0": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.0.4.tgz#70a3ca56809f7aaabb80af2f9c01ae51e1a8ed41" - integrity sha512-tz4oM+Zn9CYsvtyicsa/AwzKZKL+ITHWkhiu7x+xF77clh2b4Rm+s6xnOgY/sGDWoFWZmtKsE95hxBPkgQQNnQ== + version "7.0.5" + resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.0.5.tgz#bbc11203e0d3d5084002abfcf01d621fdf5f3a9d" + integrity sha512-SOBA2heB9lTw0VYIx8M/ed7inSf4I9sR8OIlJprhgkfQ3WJtrxPJ6DDATR1Z3RYaIR7HlT2Olj08v1lfGIGuHA== + +date-fns@^2.29.3: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + +debounce@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" + integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== esbuild-android-64@0.14.54: version "0.14.54" @@ -174,6 +193,11 @@ flatpickr@^4.6.13: resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.13.tgz#8a029548187fd6e0d670908471e43abe9ad18d94" integrity sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + split.js@^1.6.5: version "1.6.5" resolved "https://registry.yarnpkg.com/split.js/-/split.js-1.6.5.tgz#f7f61da1044c9984cb42947df4de4fadb5a3f300" @@ -196,6 +220,13 @@ stimulus-read-more@^4.1.0: resolved "https://registry.yarnpkg.com/stimulus-read-more/-/stimulus-read-more-4.1.0.tgz#f34efb2dcb33fd091936d84c569937bc100506c8" integrity sha512-SJyCJqZrhDSKpfrepnhStBaxtyv6Jnvr+b84GDg3l+/BzL5HaFLYmc6QkSNCeR6y0x+Zw7lwKuzv+XzyAm1KzQ== +stimulus-timeago@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/stimulus-timeago/-/stimulus-timeago-4.1.0.tgz#5e4b712d9eadd7f0e2b3b142f35f334dba4b3857" + integrity sha512-CHcB2rko2ItmDMIhBTaxEMe7sKqI0DOMU8dmWuQ+gzDfoxcrA8DAW/BElHAAw26HVqLTA43RSUsfug8Q+2Ua+g== + dependencies: + date-fns "^2.29.3" + tom-select@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.2.2.tgz#8e5f9296e6d80254feccb57f0986bd6c44d126e2" @@ -203,3 +234,18 @@ tom-select@^2.2.2: dependencies: "@orchidjs/sifter" "^1.0.3" "@orchidjs/unicode-variants" "^1.0.4" + +vis-data@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/vis-data/-/vis-data-7.1.6.tgz#81dcf4d024d23183cacb680ad605e644cdd6ee6c" + integrity sha512-lG7LJdkawlKSXsdcEkxe/zRDyW29a4r7N7PMwxCPxK12/QIdqxJwcMxwjVj9ozdisRhP5TyWDHZwsgjmj0g6Dg== + +vis-network@^9.1.6: + version "9.1.6" + resolved "https://registry.yarnpkg.com/vis-network/-/vis-network-9.1.6.tgz#943df07e829248943656a2f19a7ec87cc1b707de" + integrity sha512-Eiwx1JleAsUqfy4pzcsFngCVlCEdjAtRPB/OwCV7PHBm+o2jtE4IZPcPITAEGUlxvL4Fdw7/lZsfD32dL+IL6g== + +vis-util@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/vis-util/-/vis-util-5.0.3.tgz#6a9d67c6ed92f2bfa67e50c20166bb5f59ac07bf" + integrity sha512-Wf9STUcFrDzK4/Zr7B6epW2Kvm3ORNWF+WiwEz2dpf5RdWkLUXFSbLcuB88n1W6tCdFwVN+v3V4/Xmn9PeL39g==